aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-08-29 12:52:20 +0200
committerMike Pall <mike>2010-08-29 12:52:20 +0200
commit844e40d7004db8ee585853c66677cd2db4c2f835 (patch)
tree0a4c82680fc29ebe9d2d4b9e67994ddb96d5c6ce /src
parent9c16a9f705574d7e6a19fd06f9906038a7c1fcb8 (diff)
downloadluajit-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.h21
-rw-r--r--src/lj_opt_fold.c5
-rw-r--r--src/lj_record.c5
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)
811LJFOLD(BROR any BAND) 811LJFOLD(BROR any BAND)
812LJFOLDF(simplify_shift_andk) 812LJFOLDF(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