mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-28 22:10:29 +02:00
* lib/lightning.c: Correct both, wrong and confusing logic to compute the reverse of a jump. Now it properly matches C semantics for "eq" (==) and "ne" (!=) and correct computation of reverse of "uneq" as "gt". * check/branch.tst: Update "ne" float branch check that previously happened to be wrongly tested with a NaN argument.
563 lines
12 KiB
Scilab
563 lines
12 KiB
Scilab
#if __WORDSIZE == 64
|
|
# define I7f 0x7fffffffffffffff
|
|
# define I80 0x8000000000000000
|
|
# define I81 0x8000000000000001
|
|
# define Iff 0xffffffffffffffff
|
|
#else
|
|
# define I7f 0x7fffffff
|
|
# define I80 0x80000000
|
|
# define I81 0x80000001
|
|
# define Iff 0xffffffff
|
|
#endif
|
|
|
|
.data 12
|
|
ok:
|
|
.c "ok\n"
|
|
. $($NaN = 0.0 / 0.0)
|
|
|
|
#define BOP(N, Ls, Rs, Lu, Ru, R0, R1) \
|
|
movi %R0 Ls \
|
|
movi %R1 Rs \
|
|
b##N##r N##r_##R0##_##R1 %R0 %R1 \
|
|
calli @abort \
|
|
N##r_##R0##_##R1: \
|
|
b##N##i N##i_##R0##_##R1 %R0 Rs \
|
|
calli @abort \
|
|
N##i_##R0##_##R1: \
|
|
movi %R0 Lu \
|
|
movi %R1 Ru \
|
|
b##N##r_u N##r_u_##R0##_##R1 %R0 %R1 \
|
|
calli @abort \
|
|
N##r_u_##R0##_##R1: \
|
|
b##N##i_u N##i_u_##R0##_##R1 %R0 Ru \
|
|
calli @abort \
|
|
N##i_u_##R0##_##R1: \
|
|
movi %R0 Ls \
|
|
movi %R1 Rs \
|
|
N##r %R0 %R0 %R1 \
|
|
beqi _##N##r_##R0##_##R1 %R0 1 \
|
|
calli @abort \
|
|
_##N##r_##R0##_##R1: \
|
|
movi %R0 Ls \
|
|
N##i %R1 %R0 Rs \
|
|
beqi _##N##i_##R0##_##R1 %R1 1 \
|
|
calli @abort \
|
|
_##N##i_##R0##_##R1: \
|
|
movi %R0 Lu \
|
|
movi %R1 Ru \
|
|
N##r_u %R0 %R0 %R1 \
|
|
beqi _##N##r_u_##R0##_##R1 %R0 1 \
|
|
calli @abort \
|
|
_##N##r_u_##R0##_##R1: \
|
|
movi %R0 Lu \
|
|
N##i_u %R1 %R0 Ru \
|
|
beqi _##N##i_u_##R0##_##R1 %R1 1 \
|
|
calli @abort \
|
|
_##N##i_u_##R0##_##R1:
|
|
|
|
#define EB(N, L, R, R0, R1) \
|
|
movi %R0 L \
|
|
movi %R1 R \
|
|
b##N##r N##r_##R0##_##R1 %R0 %R1 \
|
|
calli @abort \
|
|
N##r_##R0##_##R1: \
|
|
b##N##i N##i_##R0##_##R1 %R0 R \
|
|
calli @abort \
|
|
N##i_##R0##_##R1: \
|
|
movi %R0 L \
|
|
movi %R1 R \
|
|
N##r %R0 %R0 %R1 \
|
|
beqi _##N##r_##R0##_##R1 %R0 1 \
|
|
calli @abort \
|
|
_##N##r_##R0##_##R1: \
|
|
movi %R0 L \
|
|
N##i %R1 %R0 R \
|
|
beqi _##N##i_##R0##_##R1 %R1 1 \
|
|
calli @abort \
|
|
_##N##i_##R0##_##R1:
|
|
|
|
#define XEB(N, L, R, R0, R1) \
|
|
movi %R0 L \
|
|
movi %R1 R \
|
|
b##N##r N##r_##R0##_##R1 %R0 %R1 \
|
|
calli @abort \
|
|
N##r_##R0##_##R1: \
|
|
b##N##i N##i_##R0##_##R1 %R0 R \
|
|
calli @abort \
|
|
N##i_##R0##_##R1:
|
|
|
|
#define XBOP(N, Ls, Rs, Lu, Ru, R0, R1) \
|
|
movi %R0 Ls \
|
|
movi %R1 Rs \
|
|
b##N##r N##r_##R0##_##R1 %R0 %R1 \
|
|
calli @abort \
|
|
N##r_##R0##_##R1: \
|
|
movi %R0 Ls \
|
|
b##N##i N##i_##R0##_##R1 %R0 Rs \
|
|
calli @abort \
|
|
N##i_##R0##_##R1: \
|
|
movi %R0 Lu \
|
|
movi %R1 Ru \
|
|
b##N##r_u N##r_u_##R0##_##R1 %R0 %R1 \
|
|
calli @abort \
|
|
N##r_u_##R0##_##R1: \
|
|
movi %R0 Lu \
|
|
b##N##i_u N##i_u_##R0##_##R1 %R0 Ru \
|
|
calli @abort \
|
|
N##i_u_##R0##_##R1:
|
|
|
|
#define BOPI(N, Ls, Rs, Lu, Ru) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v0, v1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v0, v2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v0, r0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v0, r1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v0, r2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v1, v0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v1, v2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v1, r0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v1, r1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v1, r2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v2, v0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v2, v1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v2, r0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v2, r1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, v2, r2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r0, v0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r0, v1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r0, v2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r0, r1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r0, r2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r1, v0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r1, v1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r1, v2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r1, r0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r1, r2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r2, v0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r2, v1) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r2, v2) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r2, r0) \
|
|
BOP(N, Ls, Rs, Lu, Ru, r2, r1)
|
|
|
|
#define EBI(N, L, R) \
|
|
EB(N, L, R, v0, v1) \
|
|
EB(N, L, R, v0, v2) \
|
|
EB(N, L, R, v0, r0) \
|
|
EB(N, L, R, v0, r1) \
|
|
EB(N, L, R, v0, r2) \
|
|
EB(N, L, R, v1, v0) \
|
|
EB(N, L, R, v1, v2) \
|
|
EB(N, L, R, v1, r0) \
|
|
EB(N, L, R, v1, r1) \
|
|
EB(N, L, R, v1, r2) \
|
|
EB(N, L, R, v2, v0) \
|
|
EB(N, L, R, v2, v1) \
|
|
EB(N, L, R, v2, r0) \
|
|
EB(N, L, R, v2, r1) \
|
|
EB(N, L, R, v2, r2) \
|
|
EB(N, L, R, r0, v0) \
|
|
EB(N, L, R, r0, v1) \
|
|
EB(N, L, R, r0, v2) \
|
|
EB(N, L, R, r0, r1) \
|
|
EB(N, L, R, r0, r2) \
|
|
EB(N, L, R, r1, v0) \
|
|
EB(N, L, R, r1, v1) \
|
|
EB(N, L, R, r1, v2) \
|
|
EB(N, L, R, r1, r0) \
|
|
EB(N, L, R, r1, r2) \
|
|
EB(N, L, R, r2, v0) \
|
|
EB(N, L, R, r2, v1) \
|
|
EB(N, L, R, r2, v2) \
|
|
EB(N, L, R, r2, r0) \
|
|
EB(N, L, R, r2, r1)
|
|
|
|
|
|
#define XEBI(N, L, R) \
|
|
XEB(N, L, R, v0, v1) \
|
|
XEB(N, L, R, v0, v2) \
|
|
XEB(N, L, R, v0, r0) \
|
|
XEB(N, L, R, v0, r1) \
|
|
XEB(N, L, R, v0, r2) \
|
|
XEB(N, L, R, v1, v0) \
|
|
XEB(N, L, R, v1, v2) \
|
|
XEB(N, L, R, v1, r0) \
|
|
XEB(N, L, R, v1, r1) \
|
|
XEB(N, L, R, v1, r2) \
|
|
XEB(N, L, R, v2, v0) \
|
|
XEB(N, L, R, v2, v1) \
|
|
XEB(N, L, R, v2, r0) \
|
|
XEB(N, L, R, v2, r1) \
|
|
XEB(N, L, R, v2, r2) \
|
|
XEB(N, L, R, r0, v0) \
|
|
XEB(N, L, R, r0, v1) \
|
|
XEB(N, L, R, r0, v2) \
|
|
XEB(N, L, R, r0, r1) \
|
|
XEB(N, L, R, r0, r2) \
|
|
XEB(N, L, R, r1, v0) \
|
|
XEB(N, L, R, r1, v1) \
|
|
XEB(N, L, R, r1, v2) \
|
|
XEB(N, L, R, r1, r0) \
|
|
XEB(N, L, R, r1, r2) \
|
|
XEB(N, L, R, r2, v0) \
|
|
XEB(N, L, R, r2, v1) \
|
|
XEB(N, L, R, r2, v2) \
|
|
XEB(N, L, R, r2, r0) \
|
|
XEB(N, L, R, r2, r1)
|
|
|
|
#define XBOPI(N, Ls, Rs, Lu, Ru) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v0, v1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v0, v2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v0, r0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v0, r1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v0, r2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v1, v0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v1, v2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v1, r0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v1, r1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v1, r2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v2, v0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v2, v1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v2, r0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v2, r1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, v2, r2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r0, v0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r0, v1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r0, v2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r0, r1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r0, r2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r1, v0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r1, v1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r1, v2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r1, r0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r1, r2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r2, v0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r2, v1) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r2, v2) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r2, r0) \
|
|
XBOP(N, Ls, Rs, Lu, Ru, r2, r1)
|
|
|
|
#define TBOPF(N, T, L, R) \
|
|
movi_##T %f0 L \
|
|
movi_##T %f1 R \
|
|
b##N##r##_##T N##r_##T %f0 %f1 \
|
|
calli @abort \
|
|
N##r_##T: \
|
|
b##N##i##_##T N##i_##T %f0 R \
|
|
calli @abort \
|
|
N##i_##T: \
|
|
movi_##T %f1 $NaN \
|
|
b##N##r##_##T N##r_##T##_##u %f0 %f1 \
|
|
jmpi N##r_##T##_##u0 \
|
|
N##r_##T##_##u: \
|
|
calli @abort \
|
|
N##r##_##T##_##u0: \
|
|
b##N##i##_##T N##i_##T##_##u %f0 $NaN \
|
|
jmpi N##i_##T##_##u0 \
|
|
N##i##_##T##_##u: \
|
|
calli @abort \
|
|
N##i##_##T##_##u0:
|
|
#define BOPF(N, L, R) \
|
|
TBOPF(N, f, L, R) \
|
|
TBOPF(N, d, L, R)
|
|
|
|
#define TUBOPF(N, T, L, R) \
|
|
movi_##T %f0 L \
|
|
movi_##T %f1 R \
|
|
b##N##r##_##T N##r_##T %f0 %f1 \
|
|
calli @abort \
|
|
N##r_##T: \
|
|
b##N##i##_##T N##i_##T %f0 R \
|
|
calli @abort \
|
|
N##i_##T: \
|
|
movi_##T %f1 $NaN \
|
|
b##N##r##_##T N##r_##T##_##u %f0 %f1 \
|
|
calli @abort \
|
|
N##r_##T##_##u: \
|
|
b##N##i##_##T N##i_##T##_##u %f0 $NaN \
|
|
calli @abort \
|
|
N##i##_##T##_##u:
|
|
|
|
#define UBOPF(N, L, R) \
|
|
TUBOPF(N, f, L, R) \
|
|
TUBOPF(N, d, L, R)
|
|
|
|
.code
|
|
prolog
|
|
|
|
movi %r0 -1
|
|
movi %r1 1
|
|
bltr xltr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xltr_r0_r1:
|
|
blti xlti_r0_r1 %r0 1
|
|
calli @abort
|
|
xlti_r0_r1:
|
|
movi %r0 1
|
|
movi %r1 -1
|
|
bltr_u xltru_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xltru_r0_r1:
|
|
blti_u xltiu_r0_r1 %r0 -1
|
|
calli @abort
|
|
xltiu_r0_r1:
|
|
movi %r0 -1
|
|
movi %r1 -1
|
|
bler xler_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xler_r0_r1:
|
|
blti xlei_r0_r1 %r0 1
|
|
calli @abort
|
|
xlei_r0_r1:
|
|
movi %r0 1
|
|
movi %r1 -1
|
|
bltr_u xlteu_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xlteu_r0_r1:
|
|
blei_u xleiu_r0_r1 %r0 -1
|
|
calli @abort
|
|
xleiu_r0_r1:
|
|
movi %r0 32
|
|
movi %r1 32
|
|
beqr xeqr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xeqr_r0_r1:
|
|
beqi xeqi_r0_r1 %r0 32
|
|
calli @abort
|
|
xeqi_r0_r1:
|
|
movi %r0 -2
|
|
movi %r1 -2
|
|
bger xger_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xger_r0_r1:
|
|
bgei xgei_r0_r1 %r0 -2
|
|
calli @abort
|
|
xgei_r0_r1:
|
|
movi %r0 2
|
|
movi %r1 2
|
|
bger_u xgeru_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xgeru_r0_r1:
|
|
bgei_u xgeiu_r0_r1 %r0 2
|
|
calli @abort
|
|
xgeiu_r0_r1:
|
|
movi %r0 2
|
|
movi %r1 -2
|
|
bgtr xgtr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xgtr_r0_r1:
|
|
bgti xgti_r0_r1 %r0 -2
|
|
calli @abort
|
|
xgti_r0_r1:
|
|
movi %r0 -2
|
|
movi %r1 2
|
|
bgtr_u xgtru_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xgtru_r0_r1:
|
|
bgti_u xgtiu_r0_r1 %r0 2
|
|
calli @abort
|
|
xgtiu_r0_r1:
|
|
movi %r0 -3
|
|
movi %r1 3
|
|
bner xner_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xner_r0_r1:
|
|
bnei xnei_r0_r1 %r0 3
|
|
calli @abort
|
|
xnei_r0_r1:
|
|
movi %r0 1
|
|
movi %r1 3
|
|
bmsr xmsr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xmsr_r0_r1:
|
|
bmsi xmsi_r0_r1 %r0 3
|
|
calli @abort
|
|
xmsi_r0_r1:
|
|
movi %r0 1
|
|
movi %r1 2
|
|
bmcr xmcr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xmcr_r0_r1:
|
|
bmci xmci_r0_r1 %r0 2
|
|
calli @abort
|
|
xmci_r0_r1:
|
|
movi %r0 I7f
|
|
movi %r1 1
|
|
boaddr xoaddr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xoaddr_r0_r1:
|
|
movi %r0 Iff
|
|
movi %r1 1
|
|
boaddr_u xoaddr_u_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xoaddr_u_r0_r1:
|
|
movi %r0 I7f
|
|
boaddi xoaddi_r0_r1 %r0 1
|
|
calli @abort
|
|
xoaddi_r0_r1:
|
|
movi %r0 Iff
|
|
boaddi_u xoaddi_u_r0_r1 %r0 1
|
|
calli @abort
|
|
xoaddi_u_r0_r1:
|
|
movi %r0 I80
|
|
movi %r1 1
|
|
bxaddr xxaddr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xxaddr_r0_r1:
|
|
movi %r0 I80
|
|
bxaddi xxaddi_r0_r1 %r0 1
|
|
calli @abort
|
|
xxaddi_r0_r1:
|
|
movi %r0 I7f
|
|
movi %r1 1
|
|
bxaddr_u xxaddr_u_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xxaddr_u_r0_r1:
|
|
movi %r0 I7f
|
|
bxaddi_u xxaddi_u_r0_r1 %r0 1
|
|
calli @abort
|
|
xxaddi_u_r0_r1:
|
|
movi %r0 I80
|
|
movi %r1 1
|
|
bosubr xosubr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xosubr_r0_r1:
|
|
movi %r0 0
|
|
movi %r1 1
|
|
bosubr_u xosubr_u_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xosubr_u_r0_r1:
|
|
movi %r0 I80
|
|
bosubi xosubi_r0_r1 %r0 1
|
|
calli @abort
|
|
xosubi_r0_r1:
|
|
movi %r0 0
|
|
bosubi_u xosubi_u_r0_r1 %r0 1
|
|
calli @abort
|
|
xosubi_u_r0_r1:
|
|
movi %r0 I81
|
|
movi %r1 1
|
|
bxsubr xxsubr_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xxsubr_r0_r1:
|
|
movi %r0 I81
|
|
bxsubi xxsubi_r0_r1 %r0 1
|
|
calli @abort
|
|
xxsubi_r0_r1:
|
|
movi %r0 I80
|
|
movi %r1 1
|
|
bxsubr_u xxsubr_u_r0_r1 %r0 %r1
|
|
calli @abort
|
|
xxsubr_u_r0_r1:
|
|
movi %r0 I80
|
|
bxsubi_u xxsubi_u_r0_r1 %r0 1
|
|
calli @abort
|
|
xxsubi_u_r0_r1:
|
|
movi_f %f0 1
|
|
movi_f %f1 2
|
|
bltr_f xltr_f_f0_f1 %f0 %f1
|
|
calli @abort
|
|
xltr_f_f0_f1:
|
|
blti_f xlti_f_f0_f1 %f0 2
|
|
calli @abort
|
|
xlti_f_f0_f1:
|
|
movi_f %f0 -1
|
|
movi_f %f1 -1
|
|
bler_f xler_f_f0_f1 %f0 %f1
|
|
calli @abort
|
|
xler_f_f0_f1:
|
|
blei_f xlei_f_f0_f1 %f0 -1
|
|
calli @abort
|
|
xlei_f_f0_f1:
|
|
movi_f %f0 -2
|
|
movi_f %f1 -2
|
|
beqr_f xeqr_f_f0_f1 %f0 %f1
|
|
calli @abort
|
|
xeqr_f_f0_f1:
|
|
beqi_f xeqi_f_f0_f1 %f0 -2
|
|
calli @abort
|
|
xeqi_f_f0_f1:
|
|
movi_f %f0 -3
|
|
movi_f %f1 -3
|
|
bger_f xger_f_f0_f1 %f0 %f1
|
|
calli @abort
|
|
xger_f_f0_f1:
|
|
bgei_f xgei_f_f0_f1 %f0 -3
|
|
calli @abort
|
|
xgei_f_f0_f1:
|
|
movi_f %f0 2
|
|
movi_f %f1 1
|
|
bgtr_f xgtr_f_f0_f1 %f0 %f1
|
|
calli @abort
|
|
xgtr_f_f0_f1:
|
|
bgti_f xgti_f_f0_f1 %f0 1
|
|
calli @abort
|
|
xgti_f_f0_f1:
|
|
movi_f %f0 0
|
|
movi_f %f1 2
|
|
bner_f xner_f_f0_f1 %f0 %f1
|
|
calli @abort
|
|
xner_f_f0_f1:
|
|
bnei_f xnei_f_f0_f1 %f0 2
|
|
calli @abort
|
|
xnei_f_f0_f1:
|
|
|
|
BOPI(lt, -1, 1, 1, -1)
|
|
BOPI(le, -1, -1, 1, 1)
|
|
EBI(eq, 32, 32)
|
|
BOPI(ge, -2, -2, 2, 2)
|
|
BOPI(gt, 2, -2, -2, 2)
|
|
EBI(ne, 3, -3)
|
|
XEBI(ms, 1, 3)
|
|
XEBI(mc, 1, 2)
|
|
XBOPI(oadd, I7f, 1, Iff, 1)
|
|
XBOPI(xadd, I80, 1, I7f, 1)
|
|
XBOPI(osub, I80, 1, 0, 1)
|
|
XBOPI(xsub, I81, 1, I80, 1)
|
|
BOPF(lt, 1, 2)
|
|
BOPF(le, 2, 2)
|
|
BOPF(eq, 3, 3)
|
|
BOPF(ge, 3, 3)
|
|
BOPF(gt, 4, 3)
|
|
UBOPF(ne, 4, 3)
|
|
UBOPF(unlt, 1, 2)
|
|
UBOPF(unle, 2, 2)
|
|
UBOPF(uneq, 3, 3)
|
|
UBOPF(unge, 3, 3)
|
|
UBOPF(ungt, 4, 3)
|
|
BOPF(ltgt, 4, 3)
|
|
movi_f %f0 5
|
|
movi_f %f1 5
|
|
bordr_f ordr_f %f0 %f1
|
|
calli @abort
|
|
ordr_f:
|
|
bordi_f ordi_f %f0 1
|
|
calli @abort
|
|
ordi_f:
|
|
bordi_f ordi_f_u %f0 $NaN
|
|
jmpi ordi_f_u0
|
|
ordi_f_u:
|
|
calli @abort
|
|
ordi_f_u0:
|
|
movi_f %f0 5
|
|
movi_f %f1 5
|
|
bunordr_f unordr_f %f0 %f1
|
|
jmpi unordr_f_0
|
|
unordr_f:
|
|
calli @abort
|
|
unordr_f_0:
|
|
bunordi_f unordi_f %f0 1
|
|
jmpi unordi_f_0
|
|
unordi_f:
|
|
calli @abort
|
|
unordi_f_0:
|
|
bunordi_f unordi_f_1 %f0 $NaN
|
|
calli @abort
|
|
unordi_f_1:
|
|
|
|
// just to know did not crash or abort
|
|
prepare
|
|
pushargi ok
|
|
ellipsis
|
|
finishi @printf
|
|
|
|
ret
|
|
epilog
|