wingo pushed a commit to branch lightning
in repository guile.
commit 01be83d480de4cb1512cb2f3da9b958ad188861f
Author: pcpa <[email protected]>
Date: Tue Dec 4 00:27:44 2012 -0200
Make mips backend compile on a qemu image.
* include/lightning/jit_mips.h, lib/jit_mips.c: Update to
make the mips backend compile in a qemu image.
* lib/jit_ppc.c: Minor adaptations to help in having the
ppc backend compilable.
---
ChangeLog | 8 +++++++
include/lightning/jit_mips.h | 4 ++--
lib/jit_mips.c | 50 +++++++++++++++++++++++++++++++-------------
lib/jit_ppc.c | 30 +++++++++++++-------------
4 files changed, 61 insertions(+), 31 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 87da374..ca08554 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-12-04 Paulo Andrade <[email protected]>
+
+ * include/lightning/jit_mips.h, lib/jit_mips.c: Update to
+ make the mips backend compile in a qemu image.
+
+ * lib/jit_ppc.c: Minor adaptations to help in having the
+ ppc backend compilable.
+
2012-12-03 Paulo Andrade <[email protected]>
* configure.ac, include/lightning/jit_private.h, lib/jit_arm-cpu.c,
diff --git a/include/lightning/jit_mips.h b/include/lightning/jit_mips.h
index cb7235f..5a0043b 100644
--- a/include/lightning/jit_mips.h
+++ b/include/lightning/jit_mips.h
@@ -33,8 +33,8 @@ typedef enum {
#define jit_r(i) (_V0 + (i))
#define jit_r_num() 12
#define jit_v(i) (_S0 + (i))
-#define jit_r_num() 8
-#define jit_arg_reg_p(i) ((i) >= 0 && (i) < 4)
+#define jit_v_num() 8
+#define jit_arg_f_reg_p(i) ((i) >= 0 && (i) < 4)
#define jit_f(i) (_F0 + (i))
#define jit_f_num() 14
_AT,
diff --git a/lib/jit_mips.c b/lib/jit_mips.c
index ffeb291..1fc1c09 100644
--- a/lib/jit_mips.c
+++ b/lib/jit_mips.c
@@ -109,7 +109,7 @@ jit_get_cpu(void)
void
_jit_init(jit_state_t *_jit)
{
- _jit->reglen = esize(_rvs) - 1;
+ _jit->reglen = jit_size(_rvs) - 1;
jit_carry = _NOREG;
}
@@ -248,7 +248,7 @@ _jit_arg(jit_state_t *_jit)
return (offset);
}
-ebool_t
+jit_bool_t
_jit_arg_reg_p(jit_state_t *_jit, jit_int32_t offset)
{
return (offset >= 0 && offset < 4);
@@ -277,7 +277,7 @@ _jit_arg_f(jit_state_t *_jit)
return (offset);
}
-ebool_t
+jit_bool_t
_jit_arg_f_reg_p(jit_state_t *_jit, jit_int32_t offset)
{
return (offset >= 0 && offset < 4);
@@ -306,7 +306,7 @@ _jit_arg_d(jit_state_t *_jit)
return (offset);
}
-ebool_t
+jit_bool_t
_jit_arg_d_reg_p(jit_state_t *_jit, jit_int32_t offset)
{
return (jit_arg_f_reg_p(offset));
@@ -383,6 +383,28 @@ _jit_getarg_l(jit_state_t *_jit, jit_int32_t u,
jit_int32_t v)
#endif
void
+_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
+{
+ if (v < 4)
+ jit_extr_f(u, _A0 - v);
+ else if (v < 8)
+ jit_movr_f(u, _F12 + ((v - 4) >> 1));
+ else
+ jit_ldxi_f(u, _FP, v);
+}
+
+void
+_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_int32_t v)
+{
+ if (v < 4)
+ jit_extr_d(u, _A0 - v);
+ else if (v < 8)
+ jit_movr_d(u, _F12 + ((v - 4) >> 1));
+ else
+ jit_ldxi_d(u, _FP, v);
+}
+
+void
_jit_pushargr(jit_state_t *_jit, jit_int32_t u)
{
assert(_jit->function);
@@ -429,7 +451,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u)
}
void
-_jit_pushargi_f(jit_state_t *_jit, efloat32_t u)
+_jit_pushargi_f(jit_state_t *_jit, jit_float32_t u)
{
jit_int32_t regno;
@@ -463,7 +485,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u)
}
void
-_jit_pushargi_d(jit_state_t *_jit, efloat64_t u)
+_jit_pushargi_d(jit_state_t *_jit, jit_float64_t u)
{
jit_int32_t regno;
@@ -622,12 +644,12 @@ _jit_emit(jit_state_t *_jit)
_jit->emit = 1;
- _jit->code_length = 16 * 1024 * 1024;
- _jit->code = mmap(NULL, _jit->code_length,
- PROT_EXEC | PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANON, -1, 0);
- assert(_jit->code != MAP_FAILED);
- _jit->pc.uc = _jit->code;
+ _jit->code.length = 16 * 1024 * 1024;
+ _jit->code.ptr = mmap(NULL, _jit->code.length,
+ PROT_EXEC | PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON, -1, 0);
+ assert(_jit->code.ptr != MAP_FAILED);
+ _jit->pc.uc = _jit->code.ptr;
/* clear jit_flag_patch from label nodes if reallocating buffer
* and starting over
@@ -1155,11 +1177,11 @@ _jit_emit(jit_state_t *_jit)
for (offset = 0; offset < _jit->patches.offset; offset++) {
node = _jit->patches.ptr[offset].node;
word = node->code == jit_code_movi ? node->v.n->u.w : node->u.n->u.w;
- patch_at(_jit->patches.ptr[offset].instr, word);
+ patch_at(_jit->patches.ptr[offset].inst, word);
}
#if defined(__linux__)
- _flush_cache((char *)_jit->code, _jit->pc.uc - _jit->code.ptr, ICACHE);
+ _flush_cache((char *)_jit->code.ptr, _jit->pc.uc - _jit->code.ptr, ICACHE);
#endif
return (_jit->code.ptr);
diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c
index 17af6a6..a27a228 100644
--- a/lib/jit_ppc.c
+++ b/lib/jit_ppc.c
@@ -111,7 +111,7 @@ jit_get_cpu(void)
void
_jit_init(jit_state_t *_jit)
{
- _jit->reglen = esize(_rvs) - 1;
+ _jit->reglen = jit_size(_rvs) - 1;
}
void
@@ -245,7 +245,7 @@ _jit_arg(jit_state_t *_jit)
return (offset);
}
-ebool_t
+jit_bool_t
_jit_arg_reg_p(jit_state_t *_jit, jit_int32_t offset)
{
return (offset >= 0 && offset < 8);
@@ -257,7 +257,7 @@ _jit_arg_f(jit_state_t *_jit)
return (jit_arg_d());
}
-ebool_t
+jit_bool_t
_jit_arg_f_reg_p(jit_state_t *_jit, jit_int32_t offset)
{
return (jit_arg_d_reg_p(offset));
@@ -275,7 +275,7 @@ _jit_arg_d(jit_state_t *_jit)
return (offset);
}
-ebool_t
+jit_bool_t
_jit_arg_d_reg_p(jit_state_t *_jit, jit_int32_t offset)
{
return (offset >= 0 && offset < 8);
@@ -400,7 +400,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u)
}
void
-_jit_pushargi_f(jit_state_t *_jit, efloat32_t u)
+_jit_pushargi_f(jit_state_t *_jit, jit_float32_t u)
{
jit_pushargi_d(u);
}
@@ -420,7 +420,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u)
}
void
-_jit_pushargi_d(jit_state_t *_jit, efloat64_t u)
+_jit_pushargi_d(jit_state_t *_jit, jit_float64_t u)
{
jit_int32_t regno;
@@ -569,12 +569,12 @@ _jit_emit(jit_state_t *_jit)
_jit->emit = 1;
- _jit->code_length = 16 * 1024 * 1024;
- _jit->code = mmap(NULL, _jit->code_length,
- PROT_EXEC | PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANON, -1, 0);
- assert(_jit->code != MAP_FAILED);
- _jit->pc.uc = _jit->code;
+ _jit->code.length = 16 * 1024 * 1024;
+ _jit->code.ptr = mmap(NULL, _jit->code.length,
+ PROT_EXEC | PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON, -1, 0);
+ assert(_jit->code.ptr != MAP_FAILED);
+ _jit->pc.uc = _jit->code.ptr;
/* clear jit_flag_patch from label nodes if reallocating buffer
* and starting over
@@ -1030,7 +1030,7 @@ _jit_emit(jit_state_t *_jit)
}
node = undo.node;
_jit->pc.w = undo.word;
- _jit->patches->offset = undo.patch_offset;
+ _jit->patches.offset = undo.patch_offset;
goto restart_function;
}
/* remember label is defined */
@@ -1057,10 +1057,10 @@ _jit_emit(jit_state_t *_jit)
#undef case_rw
#undef case_rr
- for (offset = 0; offset < _jit->patches->offset; offset++) {
+ for (offset = 0; offset < _jit->patches.offset; offset++) {
node = _jit->patches.ptr[offset].node;
word = node->code == jit_code_movi ? node->v.n->u.w : node->u.n->u.w;
- patch_at(_jit->patches.ptr[offset].instr, word);
+ patch_at(_jit->patches.ptr[offset].inst, word);
}
return (_jit->code.ptr);