lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat
-rw-r--r--check/cvt.tst 65
-rw-r--r--check/lightning.c 44
2 files changed, 91 insertions, 18 deletions
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)
generated by cgit v1.2.3 (git 2.25.1) at 2025年10月08日 04:33:00 +0000

AltStyle によって変換されたページ (->オリジナル) /