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

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
path: root/lib/jit_x86-cpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/jit_x86-cpu.c')
-rw-r--r--lib/jit_x86-cpu.c 49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/jit_x86-cpu.c b/lib/jit_x86-cpu.c
index 50ab0e3..fa4eade 100644
--- a/lib/jit_x86-cpu.c
+++ b/lib/jit_x86-cpu.c
@@ -2466,10 +2466,15 @@ _ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
static void
_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
+#if __X64_32
+ addr(r0, r1, r2);
+ ldr_c(r0, r0);
+#else
rex(0, WIDE, r0, r1, r2);
ic(0x0f);
ic(0xbe);
rx(r0, 0, r2, r1, _SCL1);
+#endif
}
static void
@@ -2493,10 +2498,15 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
static void
_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
+#if __X64_32
+ addr(r0, r1, r2);
+ ldr_uc(r0, r0);
+#else
rex(0, WIDE, r0, r1, r2);
ic(0x0f);
ic(0xb6);
rx(r0, 0, r2, r1, _SCL1);
+#endif
}
static void
@@ -2520,10 +2530,15 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
static void
_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
+#if __X64_32
+ addr(r0, r1, r2);
+ ldr_s(r0, r0);
+#else
rex(0, WIDE, r0, r1, r2);
ic(0x0f);
ic(0xbf);
rx(r0, 0, r2, r1, _SCL1);
+#endif
}
static void
@@ -2547,10 +2562,15 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
static void
_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
+#if __X64_32
+ addr(r0, r1, r2);
+ ldr_us(r0, r0);
+#else
rex(0, WIDE, r0, r1, r2);
ic(0x0f);
ic(0xb7);
rx(r0, 0, r2, r1, _SCL1);
+#endif
}
static void
@@ -2610,9 +2630,15 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
static void
_ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
+#if __X64_32
+ addr(r0, r1, r2);
+ /* to avoid confusion with macro renames */
+ _ldr_ui(_jit, r0, r0);
+#else
rex(0, 0, r0, r1, r2);
ic(0x8b);
rx(r0, 0, r2, r1, _SCL1);
+#endif
}
static void
@@ -2789,6 +2815,12 @@ static void
_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
jit_int32_t reg;
+#if __X64_32
+ reg = jit_get_reg(jit_class_gpr);
+ addr(rn(reg), r0, r1);
+ str_c(rn(reg), r2);
+ jit_unget_reg(reg);
+#else
if (reg8_p(r2)) {
rex(0, 0, r2, r1, r0);
ic(0x88);
@@ -2802,6 +2834,7 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
rx(rn(reg), 0, r0, r1, _SCL1);
jit_unget_reg(reg);
}
+#endif
}
static void
@@ -2834,10 +2867,18 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
static void
_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
+#if __X64_32
+ jit_int32_t reg;
+ reg = jit_get_reg(jit_class_gpr);
+ addr(rn(reg), r0, r1);
+ str_s(rn(reg), r2);
+ jit_unget_reg(reg);
+#else
ic(0x66);
rex(0, 0, r2, r1, r0);
ic(0x89);
rx(r2, 0, r0, r1, _SCL1);
+#endif
}
static void
@@ -2861,9 +2902,17 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
static void
_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
{
+#if __X64_32
+ jit_int32_t reg;
+ reg = jit_get_reg(jit_class_gpr);
+ addr(rn(reg), r0, r1);
+ str_i(rn(reg), r2);
+ jit_unget_reg(reg);
+#else
rex(0, 0, r2, r1, r0);
ic(0x89);
rx(r2, 0, r0, r1, _SCL1);
+#endif
}
static void
generated by cgit v1.2.3 (git 2.25.1) at 2025年10月02日 14:45:20 +0000

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