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_ia64-cpu.c
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2013年04月27日 16:13:44 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2013年04月27日 16:13:44 -0300
commitf52b976390fada608126b49499f291cbe1d88017 (patch)
treec36589522a996a016ca62ae1497a7d97944de341 /lib/jit_ia64-cpu.c
parent2475ae88d4cfe1ff266d19647c295ab73314772a (diff)
downloadlightning-f52b976390fada608126b49499f291cbe1d88017.tar.gz
Correct all ldst test cases.
* lib/jit_ia64-cpu.c: Correct bogus implementation of ldr_T for signed integers, that was using ld1.s, ld2.s and ld4.s. The ".s" stands for speculative load, not sign extend. * lib/jit_ia64-fpu.c: Correct bogus implementation of ldxr_T for float and double. The third (actually, second) argument is indeed added to the base register, but the base register is modified. The actual M7 implementation was already correct, just the ldxr_f and ldxr_d implementation that was kept in a prototype state, misinterpreting what M7 does.
Diffstat (limited to 'lib/jit_ia64-cpu.c')
-rw-r--r--lib/jit_ia64-cpu.c 30
1 files changed, 27 insertions, 3 deletions
diff --git a/lib/jit_ia64-cpu.c b/lib/jit_ia64-cpu.c
index d817fbf..8ae73f4 100644
--- a/lib/jit_ia64-cpu.c
+++ b/lib/jit_ia64-cpu.c
@@ -1328,19 +1328,22 @@ static jit_word_t _bsubi_u(jit_state_t*,jit_word_t,
#define bxsubi(i0,r0,i1) bsubi(i0,r0,i1,0)
#define bxsubr_u(i0,r0,r1) bsubr_u(i0,r0,r1,0)
#define bxsubi_u(i0,r0,i1) bsubi_u(i0,r0,i1,0)
-#define ldr_c(r0,r1) LD1_S(r0,r1)
+#define ldr_c(r0,r1) _ldr_c(_jit,r0,r1)
+static void _ldr_c(jit_state_t*,jit_int32_t,jit_int32_t);
#define ldi_c(r0,i0) _ldi_c(_jit,r0,i0)
static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t);
#define ldr_uc(r0,r1) LD1(r0,r1)
#define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0)
static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t);
-#define ldr_s(r0,r1) LD2_S(r0,r1)
+#define ldr_s(r0,r1) _ldr_s(_jit,r0,r1)
+static void _ldr_s(jit_state_t*,jit_int32_t,jit_int32_t);
#define ldi_s(r0,i0) _ldi_s(_jit,r0,i0)
static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t);
#define ldr_us(r0,r1) LD2(r0,r1)
#define ldi_us(r0,i0) _ldi_us(_jit,r0,i0)
static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t);
-#define ldr_i(r0,r1) LD4_S(r0,r1)
+#define ldr_i(r0,r1) _ldr_i(_jit,r0,r1)
+static void _ldr_i(jit_state_t*,jit_int32_t,jit_int32_t);
#define ldi_i(r0,i0) _ldi_i(_jit,r0,i0)
static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t);
#define ldr_ui(r0,r1) LD4(r0,r1)
@@ -4046,6 +4049,13 @@ _nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
}
static void
+_ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+ ldr_uc(r0, r1);
+ extr_c(r0, r0);
+}
+
+static void
_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
{
jit_int32_t reg;
@@ -4066,6 +4076,13 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
}
static void
+_ldr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+ ldr_us(r0, r1);
+ extr_s(r0, r0);
+}
+
+static void
_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
{
jit_int32_t reg;
@@ -4086,6 +4103,13 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
}
static void
+_ldr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+ ldr_ui(r0, r1);
+ extr_i(r0, r0);
+}
+
+static void
_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
{
jit_int32_t reg;
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月16日 19:39:15 +0000

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