diff options
author | Mike Pall <mike> | 2010-08-29 12:52:20 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-08-29 12:52:20 +0200 |
commit | 844e40d7004db8ee585853c66677cd2db4c2f835 (patch) | |
tree | 0a4c82680fc29ebe9d2d4b9e67994ddb96d5c6ce /src | |
parent | 9c16a9f705574d7e6a19fd06f9906038a7c1fcb8 (diff) | |
download | luajit-844e40d7004db8ee585853c66677cd2db4c2f835.tar.gz luajit-844e40d7004db8ee585853c66677cd2db4c2f835.tar.bz2 luajit-844e40d7004db8ee585853c66677cd2db4c2f835.zip |
PPC: Clean up masked shift/rotate target settings.
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 | ||