[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] feature/libjit 9efa35e: Fix types of Lisp objects in value
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] feature/libjit 9efa35e: Fix types of Lisp objects in values and function calls |
Date: |
Wed, 29 Aug 2018 12:59:26 -0400 (EDT) |
branch: feature/libjit
commit 9efa35eea067199a4cd0a773da6dd1304410daba
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
Fix types of Lisp objects in values and function calls
* src/jit.c (car_or_cdr, compile): Use lisp_object_type for
Lisp objects.
(init_jit): Define internal_catch_signature.
(compile): Use internal_catch_signature for 'internal_catch',
as ternary_signature doesn't fit.
---
src/jit.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/src/jit.c b/src/jit.c
index c561bfe..6813f29 100644
--- a/src/jit.c
+++ b/src/jit.c
@@ -348,10 +348,11 @@ static jit_type_t void_void_signature;
static jit_type_t lisp_void_signature;
static jit_type_t push_handler_signature;
static jit_type_t setjmp_signature;
+static jit_type_t internal_catch_signature;
static jit_type_t subr_signature[SUBR_MAX_ARGS];
-static jit_type_t ptrdiff_t_type;
+static jit_type_t ptrdiff_t_type, lisp_object_type;
/* Make a pointer constant. */
@@ -717,7 +718,7 @@ car_or_cdr (jit_function_t func, jit_value_t val, off_t
offset,
/* Is a cons. */
tem = untag (func, val, Lisp_Cons);
tem = jit_insn_load_relative (func, tem, offset,
- jit_type_void_ptr);
+ lisp_object_type);
jit_insn_store (func, val, tem);
jit_insn_branch (func, next_insn);
@@ -1086,19 +1087,19 @@ compile (ptrdiff_t bytestr_length, unsigned char
*bytestr_data,
}
for (int i = 0; i < stack_depth; ++i)
- stack[i] = jit_value_create (func, jit_type_void_ptr);
+ stack[i] = jit_value_create (func, lisp_object_type);
/* This is a placeholder; once we know how much space we'll need, we
will allocate it and move it into place at the start of the
function. */
- jit_value_t scratch = jit_value_create (func, jit_type_void_ptr);
+ jit_value_t scratch = jit_value_create (func, lisp_object_type);
int scratch_slots_needed = 0;
/* State needed if we need to emit a call to
wrong_type_argument. */
bool called_wtype = false;
jit_label_t wtype_label = jit_label_undefined;
- jit_value_t wtype_arg = jit_value_create (func, jit_type_void_ptr);
+ jit_value_t wtype_arg = jit_value_create (func, lisp_object_type);
jit_label_t argfail = jit_label_undefined;
bool need_argfail = false;
@@ -1148,7 +1149,7 @@ compile (ptrdiff_t bytestr_length, unsigned char
*bytestr_data,
{
jit_value_t loaded
= jit_insn_load_relative (func, arg_vec, i * sizeof
(Lisp_Object),
- jit_type_void_ptr);
+ lisp_object_type);
jit_insn_store (func, stack[i], loaded);
}
@@ -1177,7 +1178,7 @@ compile (ptrdiff_t bytestr_length, unsigned char
*bytestr_data,
jit_value_t loaded
= jit_insn_load_relative (func, arg_vec,
i * sizeof (Lisp_Object),
- jit_type_void_ptr);
+ lisp_object_type);
jit_insn_store (func, stack[i], loaded);
}
@@ -1204,7 +1205,7 @@ compile (ptrdiff_t bytestr_length, unsigned char
*bytestr_data,
jit_value_t vec_addr
= jit_insn_load_elem_address (func, arg_vec, nonrest_val,
- jit_type_void_ptr);
+ lisp_object_type);
jit_value_t new_args
= jit_insn_sub (func, n_args, nonrest_val);
@@ -1627,7 +1628,7 @@ compile (ptrdiff_t bytestr_length, unsigned char
*bytestr_data,
/* FIXME this lies about the signature. */
jit_value_t result = jit_insn_call_native (func, "internal_catch",
internal_catch,
- ternary_signature,
+ internal_catch_signature,
args, 3,
JIT_CALL_NOTHROW);
PUSH (result);
@@ -1676,7 +1677,7 @@ compile (ptrdiff_t bytestr_length, unsigned char
*bytestr_data,
jit_value_t val
= jit_insn_load_relative (func, hlist,
offsetof (struct handler, val),
- jit_type_void_ptr);
+ lisp_object_type);
PUSH (val);
PUSH_PC (handler_pc);
@@ -2652,7 +2653,7 @@ init_jit (void)
{
#define LEN SUBR_MAX_ARGS
- jit_type_t params[LEN], lisp_object_type;
+ jit_type_t params[LEN];
int i;
#ifdef WINDOWSNT
@@ -2756,6 +2757,11 @@ init_jit (void)
jit_type_void_ptr,
params, 2, 1);
+ params[1] = jit_type_void_ptr;
+ internal_catch_signature = jit_type_create_signature (jit_abi_cdecl,
+ lisp_object_type,
+ params, 3, 1);
+
emacs_jit_initialized = true;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] feature/libjit 9efa35e: Fix types of Lisp objects in values and function calls,
Eli Zaretskii <=