ARM: Do not use ldrt/strt by default - lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
path: root/lib/jit_arm-cpu.c
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2013年10月08日 12:26:52 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2013年10月08日 12:26:52 -0300
commit2d4bac43a9b746ec93fa02832fa4cc8ae7ea0a53 (patch)
tree3fd93fa926413d6f7aaa41b7b8e9543bb97c698c /lib/jit_arm-cpu.c
parent72f3e65a6d6ffeeadfb9ba3d5b8980ac2b878a90 (diff)
downloadlightning-2d4bac43a9b746ec93fa02832fa4cc8ae7ea0a53.tar.gz
ARM: Do not use ldrt/strt by default
* include/lightning/jit_arm.h, lib/jit_arm-cpu.c: Do not use by default load/store instructions that map to ldrt/strt. There is already the long displacement version for positive offsets, and when using a (shorter) negative offset it does not map to ldrt/strt. At least on qemu strt may cause reproducible, but unexpected SIGILL.
Diffstat (limited to 'lib/jit_arm-cpu.c')
-rw-r--r--lib/jit_arm-cpu.c 16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/jit_arm-cpu.c b/lib/jit_arm-cpu.c
index c91ac6e..c0419c3 100644
--- a/lib/jit_arm-cpu.c
+++ b/lib/jit_arm-cpu.c
@@ -2953,7 +2953,7 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
{
jit_int32_t reg;
if (jit_thumb_p()) {
- if (i0 >= 0 && i0 <= 255)
+ if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255)
T2_LDRSBI(r0, r1, i0);
else if (i0 < 0 && i0 >= -255)
T2_LDRSBIN(r0, r1, -i0);
@@ -3036,7 +3036,7 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
if (jit_thumb_p()) {
if ((r0|r1) < 8 && i0 >= 0 && i0 < 0x20)
T1_LDRBI(r0, r1, i0);
- else if (i0 >= 0 && i0 <= 255)
+ else if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255)
T2_LDRBI(r0, r1, i0);
else if (i0 < 0 && i0 >= -255)
T2_LDRBIN(r0, r1, -i0);
@@ -3117,7 +3117,7 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
{
jit_int32_t reg;
if (jit_thumb_p()) {
- if (i0 >= 0 && i0 <= 255)
+ if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255)
T2_LDRSHI(r0, r1, i0);
else if (i0 < 0 && i0 >= -255)
T2_LDRSHIN(r0, r1, -i0);
@@ -3200,7 +3200,7 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
if (jit_thumb_p()) {
if ((r0|r1) < 8 && i0 >= 0 && !(i0 & 1) && (i0 >> 1) < 0x20)
T1_LDRHI(r0, r1, i0 >> 1);
- else if (i0 >= 0 && i0 <= 255)
+ else if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255)
T2_LDRHI(r0, r1, i0);
else if (i0 < 0 && i0 >= -255)
T2_LDRHIN(r0, r1, -i0);
@@ -3286,7 +3286,7 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
else if (r1 == _R13_REGNO && r0 < 8 &&
i0 >= 0 && !(i0 & 3) && (i0 >> 2) <= 255)
T1_LDRISP(r0, i0 >> 2);
- else if (i0 >= 0 && i0 <= 255)
+ else if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255)
T2_LDRI(r0, r1, i0);
else if (i0 < 0 && i0 > -255)
T2_LDRIN(r0, r1, -i0);
@@ -3369,7 +3369,7 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
if (jit_thumb_p()) {
if ((r0|r1) < 8 && i0 >= 0 && i0 < 0x20)
T1_STRBI(r1, r0, i0);
- else if (i0 >= 0 && i0 <= 255)
+ else if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255)
T2_STRBI(r1, r0, i0);
else if (i0 < 0 && i0 >= -255)
T2_STRBIN(r1, r0, -i0);
@@ -3441,7 +3441,7 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
if (jit_thumb_p()) {
if ((r0|r1) < 8 && i0 >= 0 && !(i0 & 1) && (i0 >> 1) < 0x20)
T1_STRHI(r1, r0, i0 >> 1);
- else if (i0 >= 0 && i0 <= 255)
+ else if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255)
T2_STRHI(r1, r0, i0);
else if (i0 < 0 && i0 >= -255)
T2_STRHIN(r1, r0, -i0);
@@ -3516,7 +3516,7 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
else if (r0 == _R13_REGNO && r1 < 8 &&
i0 >= 0 && !(i0 & 3) && (i0 >> 2) <= 255)
T1_STRISP(r1, i0 >> 2);
- else if (i0 >= 0 && i0 <= 255)
+ else if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255)
T2_STRI(r1, r0, i0);
else if (i0 < 0 && i0 >= -255)
T2_STRIN(r1, r0, -i0);
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月13日 06:45:19 +0000

AltStyle によって変換されたページ (->オリジナル) /