]> granicus.if.org Git - libjpeg-turbo/commit
ARM64 NEON: Fix another ABI conformance issue 1.5.1
authormayeut <mayeut@users.noreply.github.com>
Tue, 20 Sep 2016 19:06:24 +0000 (21:06 +0200)
committerDRC <information@libjpeg-turbo.org>
Tue, 20 Sep 2016 22:38:39 +0000 (17:38 -0500)
commitcb88e5da8003afcdc443b787fdcb77285e5a8a02
tree52ad8735a5c14eead297d6b75234b27acb6af487
parente9d9c31fd2fda97dabb373a5d740ecd21e4ff5dd
ARM64 NEON: Fix another ABI conformance issue

Based on
https://github.com/mayeut/libjpeg-turbo/commit/98a5a9dc899aa9265858a3cbe0a96289a31a1322
with wordsmithing by DRC.

In the AArch64 ABI, as in many others, it's forbidden to read/store data
below the stack pointer.  Some SIMD functions were doing just that
(stack pointer misuse) when trying to preserve callee-saved registers,
and this resulted in those registers being restored with incorrect
contents under certain circumstances.

This patch fixes that behavior, and callee-saved registers are now
stored above the stack pointer throughout the function call.  The patch
also removes register saving in places where it is unnecessary for this
ABI, or it makes use of unused scratch regiters instead of callee-saved
registers.

Fixes #97.  Closes #101.

Refer also to https://bugzilla.redhat.com/show_bug.cgi?id=1368569
ChangeLog.md
simd/jsimd_arm64_neon.S