diff options
| author | Mike Pall <mike> | 2011-05-23 20:20:34 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2011-05-23 20:20:34 +0200 |
| commit | 185554b682c1e3dab74d4fa310797033a32815ef (patch) | |
| tree | 86469fab270d8de92d48b6829c386a09407408a3 /src | |
| parent | 7b21a660a89367db4ab50a85aa32a1ffd5a88623 (diff) | |
| download | luajit-185554b682c1e3dab74d4fa310797033a32815ef.tar.gz luajit-185554b682c1e3dab74d4fa310797033a32815ef.tar.bz2 luajit-185554b682c1e3dab74d4fa310797033a32815ef.zip | |
ARM: Unify rotates to simplify assembler backend.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_arch.h | 2 | ||||
| -rw-r--r-- | src/lj_ffrecord.c | 11 | ||||
| -rw-r--r-- | src/lj_opt_fold.c | 2 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/lj_arch.h b/src/lj_arch.h index 978ccd1f..a234a400 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h | |||
| @@ -137,6 +137,7 @@ | |||
| 137 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ | 137 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ |
| 138 | #define LJ_TARGET_MASKSHIFT 0 | 138 | #define LJ_TARGET_MASKSHIFT 0 |
| 139 | #define LJ_TARGET_MASKROT 1 | 139 | #define LJ_TARGET_MASKROT 1 |
| 140 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | ||
| 140 | #define LJ_ARCH_DUALNUM 2 | 141 | #define LJ_ARCH_DUALNUM 2 |
| 141 | #define LJ_ARCH_NOJIT 1 | 142 | #define LJ_ARCH_NOJIT 1 |
| 142 | 143 | ||
| @@ -158,6 +159,7 @@ | |||
| 158 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ | 159 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ |
| 159 | #define LJ_TARGET_MASKSHIFT 0 | 160 | #define LJ_TARGET_MASKSHIFT 0 |
| 160 | #define LJ_TARGET_MASKROT 1 | 161 | #define LJ_TARGET_MASKROT 1 |
| 162 | #define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ | ||
| 161 | #define LJ_ARCH_DUALNUM 0 | 163 | #define LJ_ARCH_DUALNUM 0 |
| 162 | #define LJ_ARCH_NOFFI 1 /* NYI: comparisons, calls. */ | 164 | #define LJ_ARCH_NOFFI 1 /* NYI: comparisons, calls. */ |
| 163 | #define LJ_ARCH_NOJIT 1 | 165 | #define LJ_ARCH_NOJIT 1 |
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c index 0de54f04..8cc42406 100644 --- a/src/lj_ffrecord.c +++ b/src/lj_ffrecord.c | |||
| @@ -570,10 +570,17 @@ static void LJ_FASTCALL recff_bit_shift(jit_State *J, RecordFFData *rd) | |||
| 570 | { | 570 | { |
| 571 | TRef tr = lj_opt_narrow_tobit(J, J->base[0]); | 571 | TRef tr = lj_opt_narrow_tobit(J, J->base[0]); |
| 572 | TRef tsh = lj_opt_narrow_tobit(J, J->base[1]); | 572 | TRef tsh = lj_opt_narrow_tobit(J, J->base[1]); |
| 573 | if (!(rd->data < IR_BROL ? LJ_TARGET_MASKSHIFT : LJ_TARGET_MASKROT) && | 573 | IROp op = (IROp)rd->data; |
| 574 | if (!(op < IR_BROL ? LJ_TARGET_MASKSHIFT : LJ_TARGET_MASKROT) && | ||
| 574 | !tref_isk(tsh)) | 575 | !tref_isk(tsh)) |
| 575 | tsh = emitir(IRTI(IR_BAND), tsh, lj_ir_kint(J, 31)); | 576 | tsh = emitir(IRTI(IR_BAND), tsh, lj_ir_kint(J, 31)); |
| 576 | J->base[0] = emitir(IRTI(rd->data), tr, tsh); | 577 | #ifdef LJ_TARGET_UNIFYROT |
| 578 | if (op == (LJ_TARGET_UNIFYROT == 1 ? IR_BROR : IR_BROL)) { | ||
| 579 | op = LJ_TARGET_UNIFYROT == 1 ? IR_BROL : IR_BROR; | ||
| 580 | tsh = emitir(IRTI(IR_NEG), tsh, tsh); | ||
| 581 | } | ||
| 582 | #endif | ||
| 583 | J->base[0] = emitir(IRTI(op), tr, tsh); | ||
| 577 | } | 584 | } |
| 578 | 585 | ||
| 579 | /* -- String library fast functions --------------------------------------- */ | 586 | /* -- String library fast functions --------------------------------------- */ |
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index c8b4edfe..2e61abe4 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
| @@ -1303,11 +1303,13 @@ LJFOLDF(simplify_shift_ik) | |||
| 1303 | fins->op2 = (IRRef1)lj_ir_kint(J, k); | 1303 | fins->op2 = (IRRef1)lj_ir_kint(J, k); |
| 1304 | return RETRYFOLD; | 1304 | return RETRYFOLD; |
| 1305 | } | 1305 | } |
| 1306 | #ifndef LJ_TARGET_UNIFYROT | ||
| 1306 | if (fins->o == IR_BROR) { /* bror(i, k) ==> brol(i, (-k)&mask) */ | 1307 | if (fins->o == IR_BROR) { /* bror(i, k) ==> brol(i, (-k)&mask) */ |
| 1307 | fins->o = IR_BROL; | 1308 | fins->o = IR_BROL; |
| 1308 | fins->op2 = (IRRef1)lj_ir_kint(J, (-k)&mask); | 1309 | fins->op2 = (IRRef1)lj_ir_kint(J, (-k)&mask); |
| 1309 | return RETRYFOLD; | 1310 | return RETRYFOLD; |
| 1310 | } | 1311 | } |
| 1312 | #endif | ||
| 1311 | return NEXTFOLD; | 1313 | return NEXTFOLD; |
| 1312 | } | 1314 | } |
| 1313 | 1315 | ||
