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--lib/jit_loongarch-cpu.c 13
-rw-r--r--lib/jit_loongarch-sz.c 35
-rw-r--r--lib/jit_loongarch.c 9
3 files changed, 41 insertions, 16 deletions
diff --git a/lib/jit_loongarch-cpu.c b/lib/jit_loongarch-cpu.c
index aceff17..e33401e 100644
--- a/lib/jit_loongarch-cpu.c
+++ b/lib/jit_loongarch-cpu.c
@@ -505,6 +505,10 @@ static void _bswapr_us(jit_state_t*, jit_int32_t, jit_int32_t);
# define bswapr_ui(r0,r1) _bswapr_ui(_jit,r0,r1)
static void _bswapr_ui(jit_state_t*, jit_int32_t, jit_int32_t);
# define bswapr_ul(r0, r1) REVB_D(r0, r1)
+# define ext(r0,r1,i0,i1) _ext(_jit,r0,r1,i0,i1)
+static void _ext(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t,jit_word_t);
+# define ext_u(r0,r1,i0,i1) BSTRPICK_D(r0, r1, i0 + i1 - 1, i0)
+# define dep(r0,r1,i0,i1) BSTRINS_D(r0, r1, i0 + i1 - 1, i0)
# define extr_c(r0, r1) EXT_W_B(r0, r1)
# define extr_uc(r0, r1) BSTRPICK_D(r0, r1, 7, 0)
# define extr_s(r0, r1) EXT_W_H(r0, r1)
@@ -1716,6 +1720,15 @@ _bswapr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
}
static void
+_ext(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_word_t i0, jit_word_t i1)
+{
+ assert(i0 >= 0 && i1 >= 1 && i0 + i1 <= __WORDSIZE);
+ lshi(r0, r1, __WORDSIZE - (i0 + i1));
+ rshi(r0, r0, __WORDSIZE - i1);
+}
+
+static void
_lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
{
jit_int32_t reg;
diff --git a/lib/jit_loongarch-sz.c b/lib/jit_loongarch-sz.c
index b919d4a..31d65dd 100644
--- a/lib/jit_loongarch-sz.c
+++ b/lib/jit_loongarch-sz.c
@@ -2,7 +2,7 @@
#define JIT_INSTR_MAX 88
0, /* data */
0, /* live */
- 28, /* align */
+ 12, /* align */
0, /* save */
0, /* load */
4, /* skip */
@@ -127,17 +127,17 @@
8, /* htonr_ui */
4, /* htonr_ul */
4, /* ldr_c */
- 20, /* ldi_c */
+ 16, /* ldi_c */
4, /* ldr_uc */
- 20, /* ldi_uc */
+ 16, /* ldi_uc */
4, /* ldr_s */
- 20, /* ldi_s */
+ 16, /* ldi_s */
4, /* ldr_us */
- 20, /* ldi_us */
+ 16, /* ldi_us */
4, /* ldr_i */
- 20, /* ldi_i */
+ 16, /* ldi_i */
4, /* ldr_ui */
- 20, /* ldi_ui */
+ 16, /* ldi_ui */
4, /* ldr_l */
20, /* ldi_l */
4, /* ldxr_c */
@@ -155,11 +155,11 @@
4, /* ldxr_l */
16, /* ldxi_l */
4, /* str_c */
- 20, /* sti_c */
+ 16, /* sti_c */
4, /* str_s */
- 20, /* sti_s */
+ 16, /* sti_s */
4, /* str_i */
- 20, /* sti_i */
+ 16, /* sti_i */
4, /* str_l */
20, /* sti_l */
4, /* stxr_c */
@@ -305,11 +305,11 @@
4, /* movr_f */
8, /* movi_f */
4, /* ldr_f */
- 20, /* ldi_f */
+ 16, /* ldi_f */
4, /* ldxr_f */
16, /* ldxi_f */
4, /* str_f */
- 20, /* sti_f */
+ 16, /* sti_f */
4, /* stxr_f */
16, /* stxi_f */
8, /* bltr_f */
@@ -396,11 +396,11 @@
4, /* movr_d */
16, /* movi_d */
4, /* ldr_d */
- 20, /* ldi_d */
+ 16, /* ldi_d */
4, /* ldxr_d */
16, /* ldxi_d */
4, /* str_d */
- 20, /* sti_d */
+ 16, /* sti_d */
4, /* stxr_d */
16, /* stxi_d */
8, /* bltr_d */
@@ -439,7 +439,7 @@
4, /* movr_w_f */
0, /* movr_ww_d */
4, /* movr_w_d */
- 0, /* movr_f_w */
+ 4, /* movr_f_w */
4, /* movi_f_w */
0, /* movr_d_ww */
0, /* movi_d_ww */
@@ -449,10 +449,13 @@
4, /* clzr */
4, /* ctor */
4, /* ctzr */
- 4, /* rbitr */
+ 4, /* rbitr */
52, /* popcntr */
12, /* lrotr */
4, /* lroti */
4, /* rrotr */
4, /* rroti */
+ 8, /* ext */
+ 4, /* ext_u */
+ 4, /* dep */
#endif /* __WORDSIZE */
diff --git a/lib/jit_loongarch.c b/lib/jit_loongarch.c
index 09fa541..7604f15 100644
--- a/lib/jit_loongarch.c
+++ b/lib/jit_loongarch.c
@@ -1184,6 +1184,15 @@ _emit_code(jit_state_t *_jit)
case_rr(bswap, _us);
case_rr(bswap, _ui);
case_rr(bswap, _ul);
+ case jit_code_ext:
+ ext(rn(node->u.w), rn(node->v.w), node->w.q.l, node->w.q.h);
+ break;
+ case jit_code_ext_u:
+ ext_u(rn(node->u.w), rn(node->v.w), node->w.q.l, node->w.q.h);
+ break;
+ case jit_code_dep:
+ dep(rn(node->u.w), rn(node->v.w), node->w.q.l, node->w.q.h);
+ break;
case_rr(ext, _c);
case_rr(ext, _uc);
case_rr(ext, _s);
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月17日 04:08:36 +0000

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