mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
ARM: Unify rotates to simplify assembler backend.
This commit is contained in:
parent
7b21a660a8
commit
185554b682
@ -137,6 +137,7 @@
|
||||
#define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */
|
||||
#define LJ_TARGET_MASKSHIFT 0
|
||||
#define LJ_TARGET_MASKROT 1
|
||||
#define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */
|
||||
#define LJ_ARCH_DUALNUM 2
|
||||
#define LJ_ARCH_NOJIT 1
|
||||
|
||||
@ -158,6 +159,7 @@
|
||||
#define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */
|
||||
#define LJ_TARGET_MASKSHIFT 0
|
||||
#define LJ_TARGET_MASKROT 1
|
||||
#define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */
|
||||
#define LJ_ARCH_DUALNUM 0
|
||||
#define LJ_ARCH_NOFFI 1 /* NYI: comparisons, calls. */
|
||||
#define LJ_ARCH_NOJIT 1
|
||||
|
@ -570,10 +570,17 @@ static void LJ_FASTCALL recff_bit_shift(jit_State *J, RecordFFData *rd)
|
||||
{
|
||||
TRef tr = lj_opt_narrow_tobit(J, J->base[0]);
|
||||
TRef tsh = lj_opt_narrow_tobit(J, J->base[1]);
|
||||
if (!(rd->data < IR_BROL ? LJ_TARGET_MASKSHIFT : LJ_TARGET_MASKROT) &&
|
||||
IROp op = (IROp)rd->data;
|
||||
if (!(op < IR_BROL ? LJ_TARGET_MASKSHIFT : LJ_TARGET_MASKROT) &&
|
||||
!tref_isk(tsh))
|
||||
tsh = emitir(IRTI(IR_BAND), tsh, lj_ir_kint(J, 31));
|
||||
J->base[0] = emitir(IRTI(rd->data), tr, tsh);
|
||||
#ifdef LJ_TARGET_UNIFYROT
|
||||
if (op == (LJ_TARGET_UNIFYROT == 1 ? IR_BROR : IR_BROL)) {
|
||||
op = LJ_TARGET_UNIFYROT == 1 ? IR_BROL : IR_BROR;
|
||||
tsh = emitir(IRTI(IR_NEG), tsh, tsh);
|
||||
}
|
||||
#endif
|
||||
J->base[0] = emitir(IRTI(op), tr, tsh);
|
||||
}
|
||||
|
||||
/* -- String library fast functions --------------------------------------- */
|
||||
|
@ -1303,11 +1303,13 @@ LJFOLDF(simplify_shift_ik)
|
||||
fins->op2 = (IRRef1)lj_ir_kint(J, k);
|
||||
return RETRYFOLD;
|
||||
}
|
||||
#ifndef LJ_TARGET_UNIFYROT
|
||||
if (fins->o == IR_BROR) { /* bror(i, k) ==> brol(i, (-k)&mask) */
|
||||
fins->o = IR_BROL;
|
||||
fins->op2 = (IRRef1)lj_ir_kint(J, (-k)&mask);
|
||||
return RETRYFOLD;
|
||||
}
|
||||
#endif
|
||||
return NEXTFOLD;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user