summaryrefslogtreecommitdiff
path: root/src/lj_ffrecord.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-03-11 23:28:46 +0100
committerMike Pall <mike>2011-03-11 23:28:46 +0100
commit7fb1075903587084b785260fc14cc35976bbe5fd (patch)
tree0075489c1d73cfd2c42fde7520c8ce5e1f5f2d5c /src/lj_ffrecord.c
parent889368e921a11e2abb3769e2c1f395174e83112d (diff)
downloadluajit-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.c14
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
489static void LJ_FASTCALL recff_math_minmax(jit_State *J, RecordFFData *rd) 489static 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