aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2016-05-21 01:04:17 +0200
committerMike Pall <mike>2016-05-21 01:04:17 +0200
commitccae333844c7aad0934f13f7698894c883a6b561 (patch)
treefedb1af5ac7a447436d24df5a1897cd30933ddbf
parent786dbb2ebdde16eadd7464cd5cbeb5d95a5e46f0 (diff)
downloadluajit-ccae333844c7aad0934f13f7698894c883a6b561.tar.gz
luajit-ccae333844c7aad0934f13f7698894c883a6b561.tar.bz2
luajit-ccae333844c7aad0934f13f7698894c883a6b561.zip
Load SIMD constants with IR_FLOAD from GG_State.
Contributed by Peter Cawley.
-rw-r--r--src/lj_ffrecord.c2
-rw-r--r--src/lj_iropt.h4
-rw-r--r--src/lj_opt_fold.c2
-rw-r--r--src/lj_opt_narrow.c2
4 files changed, 5 insertions, 5 deletions
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c
index 56497778..14fde4d9 100644
--- a/src/lj_ffrecord.c
+++ b/src/lj_ffrecord.c
@@ -498,7 +498,7 @@ static void LJ_FASTCALL recff_getfenv(jit_State *J, RecordFFData *rd)
498static void LJ_FASTCALL recff_math_abs(jit_State *J, RecordFFData *rd) 498static void LJ_FASTCALL recff_math_abs(jit_State *J, RecordFFData *rd)
499{ 499{
500 TRef tr = lj_ir_tonum(J, J->base[0]); 500 TRef tr = lj_ir_tonum(J, J->base[0]);
501 J->base[0] = emitir(IRTN(IR_ABS), tr, lj_ir_knum_abs(J)); 501 J->base[0] = emitir(IRTN(IR_ABS), tr, lj_ir_ksimd(J, LJ_KSIMD_ABS));
502 UNUSED(rd); 502 UNUSED(rd);
503} 503}
504 504
diff --git a/src/lj_iropt.h b/src/lj_iropt.h
index 3e758b2e..46933671 100644
--- a/src/lj_iropt.h
+++ b/src/lj_iropt.h
@@ -77,8 +77,8 @@ static LJ_AINLINE TRef lj_ir_knum(jit_State *J, lua_Number n)
77#define lj_ir_knum_tobit(J) lj_ir_knum_u64(J, U64x(43380000,00000000)) 77#define lj_ir_knum_tobit(J) lj_ir_knum_u64(J, U64x(43380000,00000000))
78 78
79/* Special 128 bit SIMD constants. */ 79/* Special 128 bit SIMD constants. */
80#define lj_ir_knum_abs(J) lj_ir_k64(J, IR_KNUM, LJ_KSIMD(J, LJ_KSIMD_ABS)) 80#define lj_ir_ksimd(J, idx) \
81#define lj_ir_knum_neg(J) lj_ir_k64(J, IR_KNUM, LJ_KSIMD(J, LJ_KSIMD_NEG)) 81 lj_ir_ggfload(J, IRT_NUM, (uintptr_t)LJ_KSIMD(J, idx) - (uintptr_t)J2GG(J))
82 82
83/* Access to constants. */ 83/* Access to constants. */
84LJ_FUNC void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir); 84LJ_FUNC void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir);
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c
index 95b58a1a..c102f2db 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -999,7 +999,7 @@ LJFOLDF(simplify_nummuldiv_k)
999 return LEFTFOLD; 999 return LEFTFOLD;
1000 } else if (n == -1.0) { /* x o -1 ==> -x */ 1000 } else if (n == -1.0) { /* x o -1 ==> -x */
1001 fins->o = IR_NEG; 1001 fins->o = IR_NEG;
1002 fins->op2 = (IRRef1)lj_ir_knum_neg(J); 1002 fins->op2 = (IRRef1)lj_ir_ksimd(J, LJ_KSIMD_NEG);
1003 return RETRYFOLD; 1003 return RETRYFOLD;
1004 } else if (fins->o == IR_MUL && n == 2.0) { /* x * 2 ==> x + x */ 1004 } else if (fins->o == IR_MUL && n == 2.0) { /* x * 2 ==> x + x */
1005 fins->o = IR_ADD; 1005 fins->o = IR_ADD;
diff --git a/src/lj_opt_narrow.c b/src/lj_opt_narrow.c
index 36be66ee..ca0a0f49 100644
--- a/src/lj_opt_narrow.c
+++ b/src/lj_opt_narrow.c
@@ -555,7 +555,7 @@ TRef lj_opt_narrow_unm(jit_State *J, TRef rc, TValue *vc)
555 return emitir(IRTGI(IR_SUBOV), lj_ir_kint(J, 0), rc); 555 return emitir(IRTGI(IR_SUBOV), lj_ir_kint(J, 0), rc);
556 rc = emitir(IRTN(IR_CONV), rc, IRCONV_NUM_INT); 556 rc = emitir(IRTN(IR_CONV), rc, IRCONV_NUM_INT);
557 } 557 }
558 return emitir(IRTN(IR_NEG), rc, lj_ir_knum_neg(J)); 558 return emitir(IRTN(IR_NEG), rc, lj_ir_ksimd(J, LJ_KSIMD_NEG));
559} 559}
560 560
561/* Narrowing of modulo operator. */ 561/* Narrowing of modulo operator. */