1
Fork 0
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:
pcpa 2012-12-14 15:21:39 -02:00
parent 074056499f
commit 03559bb8cc
8 changed files with 67 additions and 45 deletions

View file

@ -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;

View file

@ -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 */