diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_arch.h | 21 | ||||
| -rw-r--r-- | src/lj_opt_fold.c | 5 | ||||
| -rw-r--r-- | src/lj_record.c | 5 |
3 files changed, 14 insertions, 17 deletions
diff --git a/src/lj_arch.h b/src/lj_arch.h index d87575ed..54725dcf 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h | |||
| @@ -52,7 +52,8 @@ | |||
| 52 | #define LJ_TARGET_X86 1 | 52 | #define LJ_TARGET_X86 1 |
| 53 | #define LJ_TARGET_X86ORX64 1 | 53 | #define LJ_TARGET_X86ORX64 1 |
| 54 | #define LJ_PAGESIZE 4096 | 54 | #define LJ_PAGESIZE 4096 |
| 55 | #define LJ_TARGET_MASKEDSHIFT 1 | 55 | #define LJ_TARGET_MASKSHIFT 1 |
| 56 | #define LJ_TARGET_MASKROT 1 | ||
| 56 | 57 | ||
| 57 | #elif LUAJIT_TARGET == LUAJIT_ARCH_X64 | 58 | #elif LUAJIT_TARGET == LUAJIT_ARCH_X64 |
| 58 | 59 | ||
| @@ -62,7 +63,8 @@ | |||
| 62 | #define LJ_TARGET_X64 1 | 63 | #define LJ_TARGET_X64 1 |
| 63 | #define LJ_TARGET_X86ORX64 1 | 64 | #define LJ_TARGET_X86ORX64 1 |
| 64 | #define LJ_PAGESIZE 4096 | 65 | #define LJ_PAGESIZE 4096 |
| 65 | #define LJ_TARGET_MASKEDSHIFT 1 | 66 | #define LJ_TARGET_MASKSHIFT 1 |
| 67 | #define LJ_TARGET_MASKROT 1 | ||
| 66 | 68 | ||
| 67 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC | 69 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC |
| 68 | 70 | ||
| @@ -76,7 +78,8 @@ | |||
| 76 | #define LJ_TARGET_PPC 1 | 78 | #define LJ_TARGET_PPC 1 |
| 77 | #define LJ_TARGET_PPCSPE 1 | 79 | #define LJ_TARGET_PPCSPE 1 |
| 78 | #define LJ_PAGESIZE 4096 | 80 | #define LJ_PAGESIZE 4096 |
| 79 | #define LJ_TARGET_MASKEDSHIFT 1 | 81 | #define LJ_TARGET_MASKSHIFT 0 |
| 82 | #define LJ_TARGET_MASKROT 1 | ||
| 80 | #define LJ_ARCH_NOJIT 1 | 83 | #define LJ_ARCH_NOJIT 1 |
| 81 | 84 | ||
| 82 | #else | 85 | #else |
| @@ -92,6 +95,9 @@ | |||
| 92 | #if defined(_LITTLE_ENDIAN) | 95 | #if defined(_LITTLE_ENDIAN) |
| 93 | #error "No support for little-endian PowerPC" | 96 | #error "No support for little-endian PowerPC" |
| 94 | #endif | 97 | #endif |
| 98 | #if defined(_LP64) | ||
| 99 | #error "No support for PowerPC 64 bit mode" | ||
| 100 | #endif | ||
| 95 | #endif | 101 | #endif |
| 96 | #endif | 102 | #endif |
| 97 | 103 | ||
| @@ -113,16 +119,9 @@ | |||
| 113 | #if LJ_ARCH_BITS == 32 | 119 | #if LJ_ARCH_BITS == 32 |
| 114 | #define LJ_32 1 | 120 | #define LJ_32 1 |
| 115 | #define LJ_64 0 | 121 | #define LJ_64 0 |
| 116 | #elif LJ_ARCH_BITS == 64 | 122 | #else |
| 117 | #define LJ_32 0 | 123 | #define LJ_32 0 |
| 118 | #define LJ_64 1 | 124 | #define LJ_64 1 |
| 119 | #else | ||
| 120 | #error "Bad LJ_ARCH_BITS setting" | ||
| 121 | #endif | ||
| 122 | |||
| 123 | /* Whether target CPU masks the shift count by the operand length or not. */ | ||
| 124 | #ifndef LJ_TARGET_MASKEDSHIFT | ||
| 125 | #define LJ_TARGET_MASKEDSHIFT 0 | ||
| 126 | #endif | 125 | #endif |
| 127 | 126 | ||
| 128 | #endif | 127 | #endif |
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 69ade882..312c9cf0 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
| @@ -811,17 +811,16 @@ LJFOLD(BROL any BAND) | |||
| 811 | LJFOLD(BROR any BAND) | 811 | LJFOLD(BROR any BAND) |
| 812 | LJFOLDF(simplify_shift_andk) | 812 | LJFOLDF(simplify_shift_andk) |
| 813 | { | 813 | { |
| 814 | #if LJ_TARGET_MASKEDSHIFT | ||
| 815 | IRIns *irk = IR(fright->op2); | 814 | IRIns *irk = IR(fright->op2); |
| 816 | PHIBARRIER(fright); | 815 | PHIBARRIER(fright); |
| 817 | if (irk->o == IR_KINT) { /* i o (j & 31) ==> i o j */ | 816 | if ((fins->o < IR_BROL ? LJ_TARGET_MASKSHIFT : LJ_TARGET_MASKROT) && |
| 817 | irk->o == IR_KINT) { /* i o (j & 31) ==> i o j */ | ||
| 818 | int32_t k = irk->i & 31; | 818 | int32_t k = irk->i & 31; |
| 819 | if (k == 31) { | 819 | if (k == 31) { |
| 820 | fins->op2 = fright->op1; | 820 | fins->op2 = fright->op1; |
| 821 | return RETRYFOLD; | 821 | return RETRYFOLD; |
| 822 | } | 822 | } |
| 823 | } | 823 | } |
| 824 | #endif | ||
| 825 | return NEXTFOLD; | 824 | return NEXTFOLD; |
| 826 | } | 825 | } |
| 827 | 826 | ||
diff --git a/src/lj_record.c b/src/lj_record.c index 9355cb38..2fba6b6b 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
| @@ -1552,10 +1552,9 @@ static void LJ_FASTCALL recff_bit_shift(jit_State *J, RecordFFData *rd) | |||
| 1552 | { | 1552 | { |
| 1553 | TRef tr = lj_ir_tobit(J, J->base[0]); | 1553 | TRef tr = lj_ir_tobit(J, J->base[0]); |
| 1554 | TRef tsh = lj_ir_tobit(J, J->base[1]); | 1554 | TRef tsh = lj_ir_tobit(J, J->base[1]); |
| 1555 | #if !LJ_TARGET_MASKEDSHIFT | 1555 | if (!(rd->data < IR_BROL ? LJ_TARGET_MASKSHIFT : LJ_TARGET_MASKROT) && |
| 1556 | if (!tref_isk(tsh)) | 1556 | !tref_isk(tsh)) |
| 1557 | tsh = emitir(IRTI(IR_BAND), tsh, lj_ir_kint(J, 31)); | 1557 | tsh = emitir(IRTI(IR_BAND), tsh, lj_ir_kint(J, 31)); |
| 1558 | #endif | ||
| 1559 | J->base[0] = emitir(IRTI(rd->data), tr, tsh); | 1558 | J->base[0] = emitir(IRTI(rd->data), tr, tsh); |
| 1560 | } | 1559 | } |
| 1561 | 1560 | ||
