diff options
author | Mike Pall <mike> | 2011-03-11 23:28:46 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-03-11 23:28:46 +0100 |
commit | 7fb1075903587084b785260fc14cc35976bbe5fd (patch) | |
tree | 0075489c1d73cfd2c42fde7520c8ce5e1f5f2d5c /src/lj_ffrecord.c | |
parent | 889368e921a11e2abb3769e2c1f395174e83112d (diff) | |
download | luajit-7fb1075903587084b785260fc14cc35976bbe5fd.tar.gz luajit-7fb1075903587084b785260fc14cc35976bbe5fd.tar.bz2 luajit-7fb1075903587084b785260fc14cc35976bbe5fd.zip |
DUALNUM: Add integer variant of MIN/MAX.
Diffstat (limited to 'src/lj_ffrecord.c')
-rw-r--r-- | src/lj_ffrecord.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c index 8077bf84..84957373 100644 --- a/src/lj_ffrecord.c +++ b/src/lj_ffrecord.c | |||
@@ -488,11 +488,19 @@ static void LJ_FASTCALL recff_math_pow(jit_State *J, RecordFFData *rd) | |||
488 | 488 | ||
489 | static void LJ_FASTCALL recff_math_minmax(jit_State *J, RecordFFData *rd) | 489 | static void LJ_FASTCALL recff_math_minmax(jit_State *J, RecordFFData *rd) |
490 | { | 490 | { |
491 | TRef tr = lj_ir_tonum(J, J->base[0]); | 491 | TRef tr = lj_ir_tonumber(J, J->base[0]); |
492 | uint32_t op = rd->data; | 492 | uint32_t op = rd->data; |
493 | BCReg i; | 493 | BCReg i; |
494 | for (i = 1; J->base[i] != 0; i++) | 494 | for (i = 1; J->base[i] != 0; i++) { |
495 | tr = emitir(IRTN(op), tr, lj_ir_tonum(J, J->base[i])); | 495 | TRef tr2 = lj_ir_tonumber(J, J->base[i]); |
496 | IRType t = IRT_INT; | ||
497 | if (!(tref_isinteger(tr) && tref_isinteger(tr2))) { | ||
498 | if (tref_isinteger(tr)) tr = emitir(IRTN(IR_CONV), tr, IRCONV_NUM_INT); | ||
499 | if (tref_isinteger(tr2)) tr2 = emitir(IRTN(IR_CONV), tr2, IRCONV_NUM_INT); | ||
500 | t = IRT_NUM; | ||
501 | } | ||
502 | tr = emitir(IRT(op, t), tr, tr2); | ||
503 | } | ||
496 | J->base[0] = tr; | 504 | J->base[0] = tr; |
497 | } | 505 | } |
498 | 506 | ||