-rw-r--r-- | check/cvt.tst | 65 | ||||
-rw-r--r-- | check/lightning.c | 44 |
diff --git a/check/cvt.tst b/check/cvt.tst index 84ba6f4..8f40135 100644 --- a/check/cvt.tst +++ b/check/cvt.tst @@ -366,6 +366,50 @@ idw##R0##F0##F1: MVDWI(R5, F5, F0) #endif +#define MVWFI(F0, F1) \ + movi_f %F1 0.25 \ + movi_w_f %F0 0x3e800000 \ + beqr_f iwf##F0##F1 %F0 %F1 \ + calli @abort \ +iwf##F0##F1: +#define WFI(F0, F1, F2, F3, F4, F5) \ + MVWFI(F0, F1) \ + MVWFI(F1, F2) \ + MVWFI(F2, F3) \ + MVWFI(F3, F4) \ + MVWFI(F4, F5) \ + MVWFI(F5, F0) + +#if __WORDSIZE == 32 +# define MVWDI(F0, F1) \ + movi_d %F1 0.5 \ + movi_ww_d %F0 0 0x3fe00000 \ + beqr_d iwwd##F0##F1 %F0 %F1 \ + calli @abort \ +iwwd##F0##F1: +# define WDI(F0, F1, F2, F3, F4, F5) \ + MVWDI(F0, F1) \ + MVWDI(F1, F2) \ + MVWDI(F2, F3) \ + MVWDI(F3, F4) \ + MVWDI(F4, F5) \ + MVWDI(F5, F0) +#else +# define MVWDI(F0, F1) \ + movi_d %F1 0.5 \ + movi_w_d %F0 0x3fe0000000000000 \ + beqr_d iwd##F0##F1 %F0 %F1 \ + calli @abort \ +iwd##F0##F1: +#define WDI(F0, F1, F2, F3, F4, F5) \ + MVWDI(F0, F1) \ + MVWDI(F1, F2) \ + MVWDI(F2, F3) \ + MVWDI(F3, F4) \ + MVWDI(F4, F5) \ + MVWDI(F5, F0) +#endif + .code prolog @@ -486,6 +530,25 @@ dw: idw: #endif + movi_f %f1 0.25 + movi_w_f %f0 0x3e800000 + beqr_f iwf %f0 %f1 + calli @abort +iwf: +#if __WORDSIZE == 32 + movi_d %f1 0.5 + movi_ww_d %f0 0 0x3fe00000 + beqr_d iwwd %f0 %f1 + calli @abort +iwwd: +#else + movi_d %f1 0.5 + movi_w_d %f0 0x3fe0000000000000 + beqr_d iwd %f0 %f1 + calli @abort +iwd: +#endif + EXTII(v0, v1, v2, r0, r1, r2) EXIF(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) EXID(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) @@ -501,6 +564,8 @@ idw: FWI(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) DW(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) DWI(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) + WFI(f0, f1, f2, f3, f4, f5) + WDI(f0, f1, f2, f3, f4, f5) // just to know did not abort prepare diff --git a/check/lightning.c b/check/lightning.c index 920bee4..9d3822f 100644 --- a/check/lightning.c +++ b/check/lightning.c @@ -495,8 +495,8 @@ static void truncr_f_l(void); static void truncr_f(void); static void extr_f(void); static void extr_d_f(void); static void movr_f(void); static void movi_f(void); -static void movr_w_f(void); -static void movr_f_w(void); static void movi_f_w(void); +static void movr_w_f(void); static void movr_f_w(void); +static void movi_f_w(void); static void movi_w_f(void); static void ldr_f(void); static void ldi_f(void); static void ldxr_f(void); static void ldxi_f(void); static void unldr_x(void); static void unldi_x(void); @@ -553,11 +553,11 @@ static void truncr_d(void); static void extr_d(void); static void extr_f_d(void); static void movr_d(void); static void movi_d(void); #if __WORDSIZE == 32 -static void movr_ww_d(void); -static void movr_d_ww(void); static void movi_d_ww(void); +static void movr_ww_d(void); static void movr_d_ww(void); +static void movi_d_ww(void); static void movi_ww_d(void); #else -static void movr_w_d(void); -static void movr_d_w(void); static void movi_d_w(void); +static void movr_w_d(void); static void movr_d_w(void); +static void movi_d_w(void); static void movi_w_d(void); #endif static void ldr_d(void); static void ldi_d(void); static void ldxr_d(void); static void ldxi_d(void); @@ -890,8 +890,8 @@ static instr_t instr_vector[] = { entry(truncr_f), entry(extr_f), entry(extr_d_f), entry(movr_f), entry(movi_f), - entry(movr_w_f), - entry(movr_f_w), entry(movi_f_w), + entry(movr_w_f), entry(movr_f_w), + entry(movi_f_w), entry(movi_w_f), entry(ldr_f), entry(ldi_f), entry(ldxr_f), entry(ldxi_f), entry(unldr_x), entry(unldi_x), @@ -947,11 +947,11 @@ static instr_t instr_vector[] = { entry(extr_d), entry(extr_f_d), entry(movr_d), entry(movi_d), #if __WORDSIZE == 32 - entry(movr_ww_d), - entry(movr_d_ww), entry(movi_d_ww), + entry(movr_ww_d), entry(movr_d_ww), + entry(movi_d_ww), entry(movi_ww_d), #else - entry(movr_w_d), - entry(movr_d_w), entry(movi_d_w), + entry(movr_w_d), entry(movr_d_w), + entry(movi_d_w), entry(movi_w_d), #endif entry(ldr_d), entry(ldi_d), entry(ldxr_d), entry(ldxi_d), @@ -1411,6 +1411,14 @@ name(void) \ jit_gpr_t r1 = get_ireg(); \ jit_##name(r0, r1); \ } +#define entry_fr_im(name) \ +static void \ +name(void) \ +{ \ + jit_fpr_t r0 = get_freg(); \ + jit_word_t i0 = get_imm(); \ + jit_##name(r0, i0); \ +} #define entry_ir_fm(name) \ static void \ name(void) \ @@ -1910,8 +1918,8 @@ entry_ir_fr(truncr_f_l) entry_ir_fr(truncr_f) entry_fr_ir(extr_f) entry_fr_fr(extr_d_f) entry_fr_fr(movr_f) entry_fr_fm(movi_f) -entry_fr_ir(movr_w_f) -entry_ir_fr(movr_f_w) entry_ir_fm(movi_f_w) +entry_fr_ir(movr_w_f) entry_ir_fr(movr_f_w) +entry_ir_fm(movi_f_w) entry_fr_im(movi_w_f) entry_fr_ir(ldr_f) entry_fr_pm(ldi_f) entry_fr_ir_ir(ldxr_f) entry_fr_ir_im(ldxi_f) entry_fr_ir_im(unldr_x) entry_fr_im_im(unldi_x) @@ -1967,11 +1975,11 @@ entry_ir_fr(truncr_d) entry_fr_ir(extr_d) entry_fr_fr(extr_f_d) entry_fr_fr(movr_d) entry_fr_dm(movi_d) #if __WORDSIZE == 32 -entry_fr_ir_ir(movr_ww_d) -entry_ir_ir_fr(movr_d_ww) entry_ir_ir_dm(movi_d_ww) +entry_fr_ir_ir(movr_ww_d) entry_ir_ir_fr(movr_d_ww) +entry_ir_ir_dm(movi_d_ww) entry_fr_im_im(movi_ww_d) #else -entry_fr_ir(movr_w_d) -entry_ir_fr(movr_d_w) entry_ir_dm(movi_d_w) +entry_fr_ir(movr_w_d) entry_ir_fr(movr_d_w) +entry_ir_dm(movi_d_w) entry_fr_im(movi_w_d) #endif entry_fr_ir(ldr_d) entry_fr_pm(ldi_d) entry_fr_ir_ir(ldxr_d) entry_fr_ir_im(ldxi_d) |