summaryrefslogtreecommitdiff
path: root/src/lj_ffrecord.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-05-23 20:20:34 +0200
committerMike Pall <mike>2011-05-23 20:20:34 +0200
commit185554b682c1e3dab74d4fa310797033a32815ef (patch)
tree86469fab270d8de92d48b6829c386a09407408a3 /src/lj_ffrecord.c
parent7b21a660a89367db4ab50a85aa32a1ffd5a88623 (diff)
downloadluajit-185554b682c1e3dab74d4fa310797033a32815ef.tar.gz
luajit-185554b682c1e3dab74d4fa310797033a32815ef.tar.bz2
luajit-185554b682c1e3dab74d4fa310797033a32815ef.zip
ARM: Unify rotates to simplify assembler backend.
Diffstat (limited to 'src/lj_ffrecord.c')
-rw-r--r--src/lj_ffrecord.c11
1 files changed, 9 insertions, 2 deletions
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 --------------------------------------- */