123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563 |
- #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
|