diff options
author | Mike Pall <mike> | 2016-05-21 01:04:17 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2016-05-21 01:04:17 +0200 |
commit | ccae333844c7aad0934f13f7698894c883a6b561 (patch) | |
tree | fedb1af5ac7a447436d24df5a1897cd30933ddbf | |
parent | 786dbb2ebdde16eadd7464cd5cbeb5d95a5e46f0 (diff) | |
download | luajit-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.c | 2 | ||||
-rw-r--r-- | src/lj_iropt.h | 4 | ||||
-rw-r--r-- | src/lj_opt_fold.c | 2 | ||||
-rw-r--r-- | src/lj_opt_narrow.c | 2 |
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) | |||
498 | static void LJ_FASTCALL recff_math_abs(jit_State *J, RecordFFData *rd) | 498 | static 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. */ |
84 | LJ_FUNC void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir); | 84 | LJ_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. */ |