mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-11 22:31:12 +02:00
Add new extensive float comparison and conversion test case
* check/float.ok, check/float.tst: New test cases implementing extensive validation of float comparison and branch code generation as well as integer conversion, involving NaN and [+-]Inf. * lib/jit_arm-swf.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: Correct bugs found by new float test case. * lib/jit_x86.c: Correct cut&paste error added in commit to convert jit_arg* return value to a jit_node_t*, that would cause it to not properly handle double arguments in ix86. * check/Makefile.am: Update for the new test case.
This commit is contained in:
parent
2e6c680d70
commit
6eab5be9c2
9 changed files with 375 additions and 18 deletions
16
ChangeLog
16
ChangeLog
|
@ -1,3 +1,19 @@
|
|||
2012-12-29 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* check/float.ok, check/float.tst: New test cases implementing
|
||||
extensive validation of float comparison and branch code
|
||||
generation as well as integer conversion, involving NaN and
|
||||
[+-]Inf.
|
||||
|
||||
* lib/jit_arm-swf.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c:
|
||||
Correct bugs found by new float test case.
|
||||
|
||||
* lib/jit_x86.c: Correct cut&paste error added in commit to
|
||||
convert jit_arg* return value to a jit_node_t*, that would
|
||||
cause it to not properly handle double arguments in ix86.
|
||||
|
||||
* check/Makefile.am: Update for the new test case.
|
||||
|
||||
2012-12-28 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* check/lightning.c, include/lightning.h, lib/jit_arm.c,
|
||||
|
|
4
TODO
4
TODO
|
@ -9,3 +9,7 @@
|
|||
|
||||
* Test and correct the ppc and mips ports, after the import and
|
||||
adaptation of the code to lightning.
|
||||
|
||||
* Add new float/double comparison and branch codes:
|
||||
unne: proper inverse of eq (nan/nan == 0)
|
||||
eqeq: proper inverse of ltgt (nan/nan == 1)
|
||||
|
|
|
@ -64,6 +64,7 @@ EXTRA_DIST = \
|
|||
clobber.tst clobber.ok \
|
||||
carry.tst carry.ok \
|
||||
call.tst call.ok \
|
||||
float.tst float.ok \
|
||||
check.sh \
|
||||
check.x87.sh \
|
||||
check.arm.sh check.swf.sh \
|
||||
|
@ -84,7 +85,8 @@ base_TESTS = \
|
|||
alu_com alu_neg \
|
||||
fop_abs fop_sqrt \
|
||||
varargs stack \
|
||||
clobber carry call
|
||||
clobber carry call \
|
||||
float
|
||||
|
||||
$(base_TESTS): check.sh
|
||||
$(LN_S) $(srcdir)/check.sh $@
|
||||
|
|
1
check/float.ok
Normal file
1
check/float.ok
Normal file
|
@ -0,0 +1 @@
|
|||
ok
|
338
check/float.tst
Normal file
338
check/float.tst
Normal file
|
@ -0,0 +1,338 @@
|
|||
|
||||
.data 4
|
||||
ok:
|
||||
.c "ok"
|
||||
|
||||
. $($NaN = 0.0 / 0.0)
|
||||
. $($pInf = 1.0 / 0.0)
|
||||
. $($nInf = -1.0 / 0.0)
|
||||
#if __WORDSIZE == 32
|
||||
# define x7f 0x7fffffff
|
||||
# define x80 0x80000000
|
||||
#else
|
||||
# define x7f 0x7fffffffffffffff
|
||||
# define x80 0x8000000000000000
|
||||
#endif
|
||||
|
||||
#if __mips__
|
||||
# define wnan x7f
|
||||
#elif __arm__
|
||||
# define wnan 0
|
||||
#else
|
||||
# define wnan x80
|
||||
#endif
|
||||
#if __mips__ || __arm__
|
||||
# define wpinf x7f
|
||||
#else
|
||||
# define wpinf x80
|
||||
#endif
|
||||
#define wninf x80
|
||||
|
||||
/* ensure result is correct and 0 or 1 in the result register */
|
||||
#define xtcmp(l, t, op, r0, f0, f1, li, ri) \
|
||||
movi##t %f0 li \
|
||||
movi##t %f1 ri \
|
||||
op##r##t %r0 %f0 %f1 \
|
||||
bnei T##op##r##t##r0##f0##f1##l %r0 0 \
|
||||
calli @abort \
|
||||
T##op##r##t##r0##f0##f1##l: \
|
||||
movi##t %f0 li \
|
||||
movi##t %f1 ri \
|
||||
b##op##r##t bT##op##r##t##r0##f0##f1##l %f0 %f1 \
|
||||
calli @abort \
|
||||
bT##op##r##t##r0##f0##f1##l: \
|
||||
movi##t %f1 li \
|
||||
op##i##t %r0 %f0 ri \
|
||||
bnei T##op##i##t##r0##f0##f1##l %r0 0 \
|
||||
calli @abort \
|
||||
T##op##i##t##r0##f0##f1##l: \
|
||||
movi##t %f1 li \
|
||||
b##op##i##t bT##op##i##t##r0##f0##f1##l %f0 ri \
|
||||
calli @abort \
|
||||
bT##op##i##t##r0##f0##f1##l: \
|
||||
movi##t %f0 li \
|
||||
movi##t %f1 ri \
|
||||
op##r##t %r0 %f0 %f1 \
|
||||
beqi F##op##r##t##r0##f0##f1##l %r0 1 \
|
||||
calli @abort \
|
||||
F##op##r##t##r0##f0##f1##l: \
|
||||
movi##t %f1 li \
|
||||
op##i##t %r0 %f0 ri \
|
||||
beqi F##op##i##t##r0##f0##f1##l %r0 1 \
|
||||
calli @abort \
|
||||
F##op##i##t##r0##f0##f1##l:
|
||||
#define tcmp1(l, t, op, r0, li, ri) \
|
||||
xtcmp(l, t, op, r0, f0, f1, li, ri) \
|
||||
xtcmp(l, t, op, r0, f1, f2, li, ri) \
|
||||
xtcmp(l, t, op, r0, f2, f3, li, ri) \
|
||||
xtcmp(l, t, op, r0, f3, f4, li, ri) \
|
||||
xtcmp(l, t, op, r0, f4, f5, li, ri)
|
||||
#define tcmp0(l, t, op, li, ri) \
|
||||
tcmp1(l, t, op, v0, li, ri) \
|
||||
tcmp1(l, t, op, v1, li, ri) \
|
||||
tcmp1(l, t, op, v2, li, ri) \
|
||||
tcmp1(l, t, op, r0, li, ri) \
|
||||
tcmp1(l, t, op, r1, li, ri) \
|
||||
tcmp1(l, t, op, r2, li, ri)
|
||||
#define tcmp(l, op, li, ri) \
|
||||
tcmp0(l, _f, op, li, ri) \
|
||||
tcmp0(l, _d, op, li, ri)
|
||||
|
||||
#define xfcmp(l, t, op, r0, f0, f1, li, ri) \
|
||||
movi##t %f0 li \
|
||||
movi##t %f1 ri \
|
||||
op##r##t %r0 %f0 %f1 \
|
||||
beqi T##op##r##t##r0##f0##f1##l %r0 0 \
|
||||
calli @abort \
|
||||
T##op##r##t##r0##f0##f1##l: \
|
||||
movi##t %f1 li \
|
||||
op##i##t %r0 %f0 ri \
|
||||
beqi T##op##i##t##r0##f0##f1##l %r0 0 \
|
||||
calli @abort \
|
||||
T##op##i##t##r0##f0##f1##l: \
|
||||
movi##t %f0 li \
|
||||
movi##t %f1 ri \
|
||||
op##r##t %r0 %f0 %f1 \
|
||||
bnei F##op##r##t##r0##f0##f1##l %r0 1 \
|
||||
calli @abort \
|
||||
F##op##r##t##r0##f0##f1##l: \
|
||||
movi##t %f1 li \
|
||||
op##i##t %r0 %f0 ri \
|
||||
bnei F##op##i##t##r0##f0##f1##l %r0 1 \
|
||||
calli @abort \
|
||||
F##op##i##t##r0##f0##f1##l:
|
||||
#define fcmp1(l, t, op, r0, li, ri) \
|
||||
xfcmp(l, t, op, r0, f0, f1, li, ri) \
|
||||
xfcmp(l, t, op, r0, f1, f2, li, ri) \
|
||||
xfcmp(l, t, op, r0, f2, f3, li, ri) \
|
||||
xfcmp(l, t, op, r0, f3, f4, li, ri) \
|
||||
xfcmp(l, t, op, r0, f4, f5, li, ri)
|
||||
#define fcmp0(l, t, op, li, ri) \
|
||||
fcmp1(l, t, op, v0, li, ri) \
|
||||
fcmp1(l, t, op, v1, li, ri) \
|
||||
fcmp1(l, t, op, v2, li, ri) \
|
||||
fcmp1(l, t, op, r0, li, ri) \
|
||||
fcmp1(l, t, op, r1, li, ri) \
|
||||
fcmp1(l, t, op, r2, li, ri)
|
||||
#define fcmp(l, op, li, ri) \
|
||||
fcmp0(l, _f, op, li, ri) \
|
||||
fcmp0(l, _d, op, li, ri)
|
||||
|
||||
#define xf2w(l, f, r0, f0, iv, fv) \
|
||||
movi##f %f0 fv \
|
||||
truncr##f %r0 %f0 \
|
||||
beqi W##f##r0##f0##l %r0 iv \
|
||||
calli @abort \
|
||||
W##f##r0##f0##l:
|
||||
#define f2w1(l, t, r0, iv, fv) \
|
||||
xf2w(l, t, r0, f0, iv, fv) \
|
||||
xf2w(l, t, r0, f1, iv, fv) \
|
||||
xf2w(l, t, r0, f2, iv, fv) \
|
||||
xf2w(l, t, r0, f3, iv, fv) \
|
||||
xf2w(l, t, r0, f4, iv, fv) \
|
||||
xf2w(l, t, r0, f5, iv, fv)
|
||||
#define f2w0(l, t, iv, fv) \
|
||||
f2w1(l, t, v0, iv, fv) \
|
||||
f2w1(l, t, v1, iv, fv) \
|
||||
f2w1(l, t, v2, iv, fv) \
|
||||
f2w1(l, t, r0, iv, fv) \
|
||||
f2w1(l, t, r1, iv, fv) \
|
||||
f2w1(l, t, r2, iv, fv)
|
||||
#define f2w(l, iv, fv) \
|
||||
f2w0(l, _f, iv, fv) \
|
||||
f2w0(l, _d, iv, fv)
|
||||
|
||||
.code
|
||||
prolog
|
||||
|
||||
tcmp(__LINE__, lt, 0, 1)
|
||||
tcmp(__LINE__, lt, $nInf, $pInf)
|
||||
tcmp(__LINE__, lt, $nInf, 0)
|
||||
tcmp(__LINE__, lt, 0, $pInf)
|
||||
fcmp(__LINE__, lt, $NaN, 0)
|
||||
fcmp(__LINE__, lt, $NaN, $NaN)
|
||||
fcmp(__LINE__, lt, $nInf, $NaN)
|
||||
fcmp(__LINE__, lt, 1, 0)
|
||||
fcmp(__LINE__, lt, 0, 0)
|
||||
fcmp(__LINE__, lt, $pInf, $nInf)
|
||||
fcmp(__LINE__, lt, 0, $nInf)
|
||||
fcmp(__LINE__, lt, 0, $NaN)
|
||||
|
||||
tcmp(__LINE__, le, 0, 1)
|
||||
tcmp(__LINE__, le, 0, 0)
|
||||
tcmp(__LINE__, le, 1, 1)
|
||||
tcmp(__LINE__, le, $nInf, $pInf)
|
||||
tcmp(__LINE__, le, $nInf, 0)
|
||||
tcmp(__LINE__, le, 0, $pInf)
|
||||
fcmp(__LINE__, le, $NaN, 0)
|
||||
fcmp(__LINE__, le, $NaN, $NaN)
|
||||
fcmp(__LINE__, le, $nInf, $NaN)
|
||||
fcmp(__LINE__, le, 1, 0)
|
||||
fcmp(__LINE__, le, $pInf, $nInf)
|
||||
fcmp(__LINE__, le, 0, $nInf)
|
||||
fcmp(__LINE__, le, 0, $NaN)
|
||||
|
||||
tcmp(__LINE__, eq, 0, 0)
|
||||
tcmp(__LINE__, eq, 1, 1)
|
||||
fcmp(__LINE__, eq, $NaN, 0)
|
||||
fcmp(__LINE__, eq, $NaN, $NaN)
|
||||
fcmp(__LINE__, eq, $nInf, $NaN)
|
||||
fcmp(__LINE__, eq, 0, 1)
|
||||
fcmp(__LINE__, eq, 1, 0)
|
||||
fcmp(__LINE__, eq, $pInf, $nInf)
|
||||
fcmp(__LINE__, eq, 0, $nInf)
|
||||
fcmp(__LINE__, eq, 0, $NaN)
|
||||
|
||||
tcmp(__LINE__, ge, 1, 0)
|
||||
tcmp(__LINE__, ge, 0, 0)
|
||||
tcmp(__LINE__, ge, 1, 1)
|
||||
tcmp(__LINE__, ge, $pInf, $nInf)
|
||||
tcmp(__LINE__, ge, 0, $nInf)
|
||||
tcmp(__LINE__, ge, $pInf, 0)
|
||||
fcmp(__LINE__, ge, $NaN, 0)
|
||||
fcmp(__LINE__, ge, $NaN, $NaN)
|
||||
fcmp(__LINE__, ge, $nInf, $NaN)
|
||||
fcmp(__LINE__, ge, 0, 1)
|
||||
fcmp(__LINE__, ge, $nInf, $pInf)
|
||||
fcmp(__LINE__, ge, $nInf, 0)
|
||||
fcmp(__LINE__, ge, 0, $NaN)
|
||||
|
||||
tcmp(__LINE__, gt, 1, 0)
|
||||
tcmp(__LINE__, gt, $pInf, $nInf)
|
||||
tcmp(__LINE__, gt, 0, $nInf)
|
||||
tcmp(__LINE__, gt, $pInf, 0)
|
||||
fcmp(__LINE__, gt, $NaN, 0)
|
||||
fcmp(__LINE__, gt, $NaN, $NaN)
|
||||
fcmp(__LINE__, gt, $nInf, $NaN)
|
||||
fcmp(__LINE__, gt, 0, 1)
|
||||
fcmp(__LINE__, gt, 0, 0)
|
||||
fcmp(__LINE__, gt, $nInf, $pInf)
|
||||
fcmp(__LINE__, gt, $nInf, 0)
|
||||
fcmp(__LINE__, gt, 0, $NaN)
|
||||
|
||||
tcmp(__LINE__, ne, 0, 1)
|
||||
tcmp(__LINE__, ne, 1, 0)
|
||||
tcmp(__LINE__, ne, $NaN, $NaN)
|
||||
tcmp(__LINE__, ne, $nInf, $pInf)
|
||||
tcmp(__LINE__, ne, $NaN, 0)
|
||||
tcmp(__LINE__, ne, $nInf, $NaN)
|
||||
tcmp(__LINE__, ne, $pInf, $nInf)
|
||||
tcmp(__LINE__, ne, 0, $nInf)
|
||||
tcmp(__LINE__, ne, 0, $NaN)
|
||||
fcmp(__LINE__, ne, 0, 0)
|
||||
fcmp(__LINE__, ne, 1, 1)
|
||||
|
||||
tcmp(__LINE__, unlt, 0, 1)
|
||||
tcmp(__LINE__, unlt, $nInf, $pInf)
|
||||
tcmp(__LINE__, unlt, $nInf, 0)
|
||||
tcmp(__LINE__, unlt, 0, $pInf)
|
||||
tcmp(__LINE__, unlt, $NaN, 0)
|
||||
tcmp(__LINE__, unlt, $NaN, $NaN)
|
||||
tcmp(__LINE__, unlt, $nInf, $NaN)
|
||||
tcmp(__LINE__, unlt, 0, $NaN)
|
||||
fcmp(__LINE__, unlt, 1, 0)
|
||||
fcmp(__LINE__, unlt, 0, 0)
|
||||
fcmp(__LINE__, unlt, $pInf, $nInf)
|
||||
fcmp(__LINE__, unlt, 0, $nInf)
|
||||
|
||||
tcmp(__LINE__, unle, 0, 1)
|
||||
tcmp(__LINE__, unle, 0, 0)
|
||||
tcmp(__LINE__, unle, 1, 1)
|
||||
tcmp(__LINE__, unle, $nInf, $pInf)
|
||||
tcmp(__LINE__, unle, $nInf, 0)
|
||||
tcmp(__LINE__, unle, 0, $pInf)
|
||||
tcmp(__LINE__, unle, $NaN, 0)
|
||||
tcmp(__LINE__, unle, $NaN, $NaN)
|
||||
tcmp(__LINE__, unle, $nInf, $NaN)
|
||||
tcmp(__LINE__, unle, 0, $NaN)
|
||||
fcmp(__LINE__, unle, 1, 0)
|
||||
fcmp(__LINE__, unle, $pInf, $nInf)
|
||||
fcmp(__LINE__, unle, 0, $nInf)
|
||||
|
||||
tcmp(__LINE__, uneq, 0, 0)
|
||||
tcmp(__LINE__, uneq, 1, 1)
|
||||
tcmp(__LINE__, uneq, $NaN, 0)
|
||||
tcmp(__LINE__, uneq, $NaN, $NaN)
|
||||
tcmp(__LINE__, uneq, $nInf, $NaN)
|
||||
tcmp(__LINE__, uneq, 0, $NaN)
|
||||
fcmp(__LINE__, uneq, 0, 1)
|
||||
fcmp(__LINE__, uneq, 1, 0)
|
||||
fcmp(__LINE__, uneq, $pInf, $nInf)
|
||||
fcmp(__LINE__, uneq, 0, $nInf)
|
||||
|
||||
tcmp(__LINE__, unge, 1, 0)
|
||||
tcmp(__LINE__, unge, 0, 0)
|
||||
tcmp(__LINE__, unge, 1, 1)
|
||||
tcmp(__LINE__, unge, $pInf, $nInf)
|
||||
tcmp(__LINE__, unge, 0, $nInf)
|
||||
tcmp(__LINE__, unge, $pInf, 0)
|
||||
tcmp(__LINE__, unge, $NaN, 0)
|
||||
tcmp(__LINE__, unge, $NaN, $NaN)
|
||||
tcmp(__LINE__, unge, $nInf, $NaN)
|
||||
tcmp(__LINE__, unge, 0, $NaN)
|
||||
fcmp(__LINE__, unge, 0, 1)
|
||||
fcmp(__LINE__, unge, $nInf, $pInf)
|
||||
fcmp(__LINE__, unge, $nInf, 0)
|
||||
|
||||
tcmp(__LINE__, ungt, 1, 0)
|
||||
tcmp(__LINE__, ungt, $pInf, $nInf)
|
||||
tcmp(__LINE__, ungt, 0, $nInf)
|
||||
tcmp(__LINE__, ungt, $pInf, 0)
|
||||
tcmp(__LINE__, ungt, $NaN, 0)
|
||||
tcmp(__LINE__, ungt, $NaN, $NaN)
|
||||
tcmp(__LINE__, ungt, $nInf, $NaN)
|
||||
tcmp(__LINE__, ungt, 0, $NaN)
|
||||
fcmp(__LINE__, ungt, 0, 1)
|
||||
fcmp(__LINE__, ungt, 0, 0)
|
||||
fcmp(__LINE__, ungt, $nInf, $pInf)
|
||||
fcmp(__LINE__, ungt, $nInf, 0)
|
||||
|
||||
tcmp(__LINE__, ltgt, 0, 1)
|
||||
tcmp(__LINE__, ltgt, 1, 0)
|
||||
tcmp(__LINE__, ltgt, $nInf, $pInf)
|
||||
tcmp(__LINE__, ltgt, $pInf, $nInf)
|
||||
tcmp(__LINE__, ltgt, 0, $nInf)
|
||||
fcmp(__LINE__, ltgt, $NaN, $NaN)
|
||||
fcmp(__LINE__, ltgt, $NaN, 0)
|
||||
fcmp(__LINE__, ltgt, $nInf, $NaN)
|
||||
fcmp(__LINE__, ltgt, 0, $NaN)
|
||||
fcmp(__LINE__, ltgt, 0, 0)
|
||||
fcmp(__LINE__, ltgt, 1, 1)
|
||||
|
||||
tcmp(__LINE__, ord, 0, 1)
|
||||
tcmp(__LINE__, ord, 1, 0)
|
||||
tcmp(__LINE__, ord, $nInf, $pInf)
|
||||
tcmp(__LINE__, ord, $pInf, $nInf)
|
||||
tcmp(__LINE__, ord, 0, $nInf)
|
||||
tcmp(__LINE__, ord, 0, 0)
|
||||
tcmp(__LINE__, ord, 1, 1)
|
||||
fcmp(__LINE__, ord, $NaN, $NaN)
|
||||
fcmp(__LINE__, ord, $NaN, 0)
|
||||
fcmp(__LINE__, ord, $nInf, $NaN)
|
||||
fcmp(__LINE__, ord, 0, $NaN)
|
||||
|
||||
tcmp(__LINE__, unord, $NaN, $NaN)
|
||||
tcmp(__LINE__, unord, $NaN, 0)
|
||||
tcmp(__LINE__, unord, $nInf, $NaN)
|
||||
tcmp(__LINE__, unord, 0, $NaN)
|
||||
fcmp(__LINE__, unord, 0, 1)
|
||||
fcmp(__LINE__, unord, 1, 0)
|
||||
fcmp(__LINE__, unord, $nInf, $pInf)
|
||||
fcmp(__LINE__, unord, $pInf, $nInf)
|
||||
fcmp(__LINE__, unord, 0, $nInf)
|
||||
fcmp(__LINE__, unord, 0, 0)
|
||||
fcmp(__LINE__, unord, 1, 1)
|
||||
|
||||
f2w(__LINE__, 0, 0)
|
||||
f2w(__LINE__, 1, 1)
|
||||
f2w(__LINE__, wninf, $nInf)
|
||||
f2w(__LINE__, wpinf, $pInf)
|
||||
f2w(__LINE__, wnan, $NaN)
|
||||
|
||||
prepare
|
||||
pushargi ok
|
||||
ellipsis
|
||||
finishi @puts
|
||||
|
||||
ret
|
||||
epilog
|
|
@ -175,7 +175,7 @@ static void _swf_negr_d(jit_state_t*,jit_int32_t,jit_int32_t);
|
|||
# define swf_ger_d(r0,r1,r2) swf_idd(__aeabi_dcmpge,r0,r1,r2)
|
||||
# define swf_gei_d(r0,r1,i0) swf_idd_(__aeabi_dcmpge,r0,r1,i0)
|
||||
# define swf_gtr_f(r0,r1,r2) swf_iff(__aeabi_fcmpgt,r0,r1,r2)
|
||||
# define swf_gti_f(r0,r1,i0) swf_iff(__aeabi_fcmpgt,r0,r1,i0)
|
||||
# define swf_gti_f(r0,r1,i0) swf_iff_(__aeabi_fcmpgt,r0,r1,i0)
|
||||
# define swf_gtr_d(r0,r1,r2) swf_idd(__aeabi_dcmpgt,r0,r1,r2)
|
||||
# define swf_gti_d(r0,r1,i0) swf_idd_(__aeabi_dcmpgt,r0,r1,i0)
|
||||
# define swf_ner_f(r0,r1,r2) _swf_ner_f(_jit,r0,r1,r2)
|
||||
|
@ -688,7 +688,7 @@ _swf_iunff(jit_state_t *_jit, int (*i0)(float, float),
|
|||
movr(_R1_REGNO, r2);
|
||||
swf_call(__aeabi_fcmpun, fcmpun, _R2_REGNO);
|
||||
if (jit_thumb_p()) {
|
||||
T1_CMPI(_R0, 0);
|
||||
T1_CMPI(_R0_REGNO, 0);
|
||||
IT(ARM_CC_NE);
|
||||
if (r0 < 8)
|
||||
T1_MOVI(r0, 1);
|
||||
|
@ -698,7 +698,7 @@ _swf_iunff(jit_state_t *_jit, int (*i0)(float, float),
|
|||
T2_CC_B(ARM_CC_NE, 0);
|
||||
}
|
||||
else {
|
||||
CMPI(_R0, 0);
|
||||
CMPI(_R0_REGNO, 0);
|
||||
CC_MOVI(ARM_CC_NE, r0, 1);
|
||||
instr = _jit->pc.w;
|
||||
CC_B(ARM_CC_NE, 0);
|
||||
|
@ -749,7 +749,7 @@ _swf_iundd(jit_state_t *_jit, int (*i0)(double, double),
|
|||
}
|
||||
swf_call_with_get_reg(__aeabi_dcmpun, dcmpun);
|
||||
if (jit_thumb_p()) {
|
||||
T1_CMPI(_R0, 0);
|
||||
T1_CMPI(_R0_REGNO, 0);
|
||||
IT(ARM_CC_NE);
|
||||
if (r0 < 8)
|
||||
T1_MOVI(r0, 1);
|
||||
|
@ -759,7 +759,7 @@ _swf_iundd(jit_state_t *_jit, int (*i0)(double, double),
|
|||
T2_CC_B(ARM_CC_NE, 0);
|
||||
}
|
||||
else {
|
||||
CMPI(_R0, 0);
|
||||
CMPI(_R0_REGNO, 0);
|
||||
CC_MOVI(ARM_CC_NE, r0, 1);
|
||||
instr = _jit->pc.w;
|
||||
CC_B(ARM_CC_NE, 0);
|
||||
|
@ -812,7 +812,7 @@ _swf_iunff_(jit_state_t *_jit, int (*i0)(float, float),
|
|||
movi(_R1_REGNO, data.i);
|
||||
swf_call(__aeabi_fcmpun, fcmpun, _R2_REGNO);
|
||||
if (jit_thumb_p()) {
|
||||
T1_CMPI(_R0, 0);
|
||||
T1_CMPI(__R0_REGNO, 0);
|
||||
IT(ARM_CC_NE);
|
||||
if (r0 < 8)
|
||||
T1_MOVI(r0, 1);
|
||||
|
@ -822,7 +822,7 @@ _swf_iunff_(jit_state_t *_jit, int (*i0)(float, float),
|
|||
T2_CC_B(ARM_CC_NE, 0);
|
||||
}
|
||||
else {
|
||||
CMPI(_R0, 0);
|
||||
CMPI(__R0_REGNO, 0);
|
||||
CC_MOVI(ARM_CC_NE, r0, 1);
|
||||
instr = _jit->pc.w;
|
||||
CC_B(ARM_CC_NE, 0);
|
||||
|
@ -865,7 +865,7 @@ _swf_iundd_(jit_state_t *_jit, int (*i0)(double, double),
|
|||
movi(_R3_REGNO, data.i[1]);
|
||||
swf_call_with_get_reg(__aeabi_dcmpun, dcmpun);
|
||||
if (jit_thumb_p()) {
|
||||
T1_CMPI(_R0, 0);
|
||||
T1_CMPI(__R0_REGNO, 0);
|
||||
IT(ARM_CC_NE);
|
||||
if (r0 < 8)
|
||||
T1_MOVI(r0, 1);
|
||||
|
@ -875,7 +875,7 @@ _swf_iundd_(jit_state_t *_jit, int (*i0)(double, double),
|
|||
T2_CC_B(ARM_CC_NE, 0);
|
||||
}
|
||||
else {
|
||||
CMPI(_R0, 0);
|
||||
CMPI(__R0_REGNO, 0);
|
||||
CC_MOVI(ARM_CC_NE, r0, 1);
|
||||
instr = _jit->pc.w;
|
||||
CC_B(ARM_CC_NE, 0);
|
||||
|
|
|
@ -191,7 +191,7 @@ static void _sse_ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
|||
static void _sse_unger_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
|
||||
# define sse_ungti_f(r0, r1, i0) _sse_ungti_f(_jit, r0, r1, i0)
|
||||
static void _sse_ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||
# define sse_ungtr_f(r0, r1, r2) ssecmpf(X86_CC_NAE, r0, r2, r1)
|
||||
# define sse_ungtr_f(r0, r1, r2) ssecmpf(X86_CC_NAE, r0, r1, r2)
|
||||
# define sse_ltgti_f(r0, r1, i0) _sse_ltgti_f(_jit, r0, r1, i0)
|
||||
static void _sse_ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||
# define sse_ltgtr_f(r0, r1, r2) _sse_ltgtr_f(_jit, r0, r1, r2)
|
||||
|
@ -323,7 +323,7 @@ static void _sse_uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
|||
static void _sse_unger_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t);
|
||||
# define sse_ungei_d(r0, r1, i0) _sse_ungei_d(_jit, r0, r1, i0)
|
||||
static void _sse_ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||
# define sse_ungtr_d(r0, r1, r2) ssecmpd(X86_CC_NAE, r0, r2, r1)
|
||||
# define sse_ungtr_d(r0, r1, r2) ssecmpd(X86_CC_NAE, r0, r1, r2)
|
||||
# define sse_ungti_d(r0, r1, i0) _sse_ungti_d(_jit, r0, r1, i0)
|
||||
static void _sse_ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||
# define sse_ltgtr_d(r0, r1, r2) _sse_ltgtr_d(_jit, r0, r1, r2)
|
||||
|
|
|
@ -166,7 +166,7 @@ static void _x87_unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
|||
# define x87_unler_f(r0, r1, r2) x87cmp(X86_CC_NA, r0, r1, r2)
|
||||
# define x87_unlei_f(r0, r1, i0) _x87_unlei_f(_jit, r0, r1, i0)
|
||||
static void _x87_unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||
# define x87_uneqr_f(r0, r1, r2) x87cmp2(X86_CC_E, r0, r1, r1)
|
||||
# define x87_uneqr_f(r0, r1, r2) x87cmp2(X86_CC_E, r0, r1, r2)
|
||||
# define x87_uneqi_f(r0, r1, i0) _x87_uneqi_f(_jit, r0, r1, i0)
|
||||
static void _x87_uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||
# define x87_unger_f(r0, r1, r2) x87cmp(X86_CC_NA, r0, r2, r1)
|
||||
|
@ -210,7 +210,7 @@ static void _x87_unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
|||
# define x87_unler_d(r0, r1, r2) x87cmp(X86_CC_NA, r0, r1, r2)
|
||||
# define x87_unlei_d(r0, r1, i0) _x87_unlei_d(_jit, r0, r1, i0)
|
||||
static void _x87_unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||
# define x87_uneqr_d(r0, r1, r2) x87cmp2(X86_CC_E, r0, r1, r1)
|
||||
# define x87_uneqr_d(r0, r1, r2) x87cmp2(X86_CC_E, r0, r1, r2)
|
||||
# define x87_uneqi_d(r0, r1, i0) _x87_uneqi_d(_jit, r0, r1, i0)
|
||||
static void _x87_uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||
# define x87_unger_d(r0, r1, r2) x87cmp(X86_CC_NA, r0, r2, r1)
|
||||
|
|
|
@ -480,11 +480,7 @@ _jit_arg_d(jit_state_t *_jit)
|
|||
#endif
|
||||
{
|
||||
offset = _jit->function->self.size;
|
||||
#if __WORDSIZE == 32
|
||||
_jit->function->self.size += sizeof(jit_float32_t);
|
||||
#else
|
||||
_jit->function->self.size += sizeof(jit_float64_t);
|
||||
#endif
|
||||
}
|
||||
return (jit_new_node_w(jit_code_arg_d, offset));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue