mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-27 21:40:34 +02:00
Make it clear stdarg like abstraction is not supported.
* include/lightning.h, include/lightning/jit_private.h, lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_x86.c, lib/lightning.c: Make jit_ellipsis implementation not backend specific. It is not intended to handle va_list like objects at runtime, as jit_arg* and jit_getarg* return constant values resolved at parse time, so, effectively it is not possible to create printf like jit functions, as there is no va_start, va_arg, va_end, etc, abstraction. This limitation should be kept for the sake of making new ports easier.
This commit is contained in:
parent
074056499f
commit
03559bb8cc
8 changed files with 67 additions and 45 deletions
|
@ -95,13 +95,6 @@ typedef jit_int32_t jit_fpr_t;
|
|||
#define jit_class(reg) ((reg) & 0xffff0000)
|
||||
#define jit_regno(reg) ((reg) & 0x00007fff)
|
||||
|
||||
#define jit_call_default 0
|
||||
/* assume only varags functions called are printf like, that is,
|
||||
* without a declared float/double argument */
|
||||
/* FIXME currently no way to create a varargs (or non varargs) jit function
|
||||
* if calling sequence changes for float/double arguments */
|
||||
#define jit_call_varargs 1
|
||||
|
||||
typedef struct jit_node jit_node_t;
|
||||
typedef struct jit_state jit_state_t;
|
||||
|
||||
|
|
|
@ -61,6 +61,9 @@
|
|||
* returned by a "user" call
|
||||
* to jit_get_reg() */
|
||||
|
||||
#define jit_call_default 0
|
||||
#define jit_call_varargs 1
|
||||
|
||||
#define jit_kind_register 1
|
||||
#define jit_kind_code 2
|
||||
#define jit_kind_word 3
|
||||
|
@ -194,12 +197,13 @@ struct jit_function {
|
|||
jit_int32_t size;
|
||||
jit_int32_t aoff;
|
||||
jit_int32_t alen;
|
||||
jit_int32_t call;
|
||||
} self;
|
||||
struct {
|
||||
jit_int32_t argi;
|
||||
jit_int32_t argf;
|
||||
jit_int32_t size;
|
||||
jit_int32_t kind;
|
||||
jit_int32_t call;
|
||||
} call;
|
||||
jit_node_t *prolog;
|
||||
jit_node_t *epilog;
|
||||
|
@ -220,6 +224,7 @@ struct jit_state {
|
|||
jit_node_t *tail;
|
||||
jit_uint32_t emit : 1; /* emit state entered */
|
||||
jit_uint32_t again : 1; /* start over emiting function */
|
||||
jit_uint32_t prepare : 1; /* inside prepare/finish* block */
|
||||
jit_int32_t reglen; /* number of registers */
|
||||
jit_regset_t regarg; /* cannot allocate */
|
||||
jit_regset_t regsav; /* automatic spill only once */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue