1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-03 13:20:26 +02:00

Implement jit_putarg*

* include/lightning.h, lib/jit_aarch64.c,
	lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c,
	lib/jit_ia64.c, lib/jit_mips.c,	lib/jit_ppc.c,
	lib/jit_s390.c, lib/jit_sparc.c, lib/jit_x86.c:
	Implement jit_putarg*. It works as a mix of jit_getarg*
	and jit_pusharg*, in the way that the first argument is
	a register or immediate, and the second is a pointer
	returned by jit_arg*. The use of the interface is to change
	values of arguments to the current jit function.

	* check/put.ok, check/put.tst: New test cases exercising
	the new jit_putarg* interface.

	* check/Makefile.am, check/lightning.c: Update for the
	new test case and interface.
This commit is contained in:
Paulo Andrade 2015-01-15 14:20:07 -02:00
parent 192f89c0ee
commit 27d9b68a3f
16 changed files with 1535 additions and 20 deletions

View file

@ -280,6 +280,7 @@ static void getarg_i(void);
static void getarg_ui(void); static void getarg_l(void);
#endif
static void getarg(void);
static void putargr(void); static void putargi(void);
static void addr(void); static void addi(void);
static void addxr(void); static void addxi(void);
static void addcr(void); static void addci(void);
@ -394,8 +395,8 @@ static void retval_ui(void); static void retval_l(void);
#endif
static void retval(void);
static void epilog(void);
static void arg_f(void);
static void getarg_f(void);
static void arg_f(void); static void getarg_f(void);
static void putargr_f(void); static void putargi_f(void);
static void addr_f(void); static void addi_f(void);
static void subr_f(void); static void subi_f(void);
static void rsbr_f(void); static void rsbi_f(void);
@ -445,8 +446,8 @@ static void bunordr_f(void); static void bunordi_f(void);
static void pushargr_f(void); static void pushargi_f(void);
static void retr_f(void); static void reti_f(void);
static void retval_f(void);
static void arg_d(void);
static void getarg_d(void);
static void arg_d(void); static void getarg_d(void);
static void putargr_d(void); static void putargi_d(void);
static void addr_d(void); static void addi_d(void);
static void subr_d(void); static void subi_d(void);
static void rsbr_d(void); static void rsbi_d(void);
@ -588,6 +589,7 @@ static instr_t instr_vector[] = {
entry(getarg_ui), entry(getarg_l),
#endif
entry(getarg),
entry(putargr), entry(putargi),
entry(addr), entry(addi),
entry(addxr), entry(addxi),
entry(addcr), entry(addci),
@ -702,8 +704,8 @@ static instr_t instr_vector[] = {
#endif
entry(retval),
entry(epilog),
entry(arg_f),
entry(getarg_f),
entry(arg_f), entry(getarg_f),
entry(putargr_f), entry(putargi_f),
entry(addr_f), entry(addi_f),
entry(subr_f), entry(subi_f),
entry(rsbr_f), entry(rsbi_f),
@ -753,8 +755,8 @@ static instr_t instr_vector[] = {
entry(pushargr_f), entry(pushargi_f),
entry(retr_f), entry(reti_f),
entry(retval_f),
entry(arg_d),
entry(getarg_d),
entry(arg_d), entry(getarg_d),
entry(putargr_d), entry(putargi_d),
entry(addr_d), entry(addi_d),
entry(subr_d), entry(subi_d),
entry(rsbr_d), entry(rsbi_d),
@ -964,6 +966,14 @@ name(void) \
jit_gpr_t r0 = get_ireg(); \
jit_##name(r0); \
}
#define entry_ima(name) \
static void \
name(void) \
{ \
jit_word_t im = get_imm(); \
jit_pointer_t ac = get_arg(); \
jit_##name(im, ac); \
}
#define entry_ir_ir_ir(name) \
static void \
name(void) \
@ -1091,6 +1101,14 @@ name(void) \
jit_pointer_t ac = get_arg(); \
jit_##name(r0, ac); \
}
#define entry_fma(name) \
static void \
name(void) \
{ \
jit_float64_t im = get_float(skip_ws); \
jit_pointer_t ac = get_arg(); \
jit_##name(im, ac); \
}
#define entry_fr_fr_fr(name) \
static void \
name(void) \
@ -1361,6 +1379,7 @@ entry_ia(getarg_i)
entry_ia(getarg_ui) entry_ia(getarg_l)
#endif
entry_ia(getarg)
entry_ia(putargr) entry_ima(putargi)
entry_ir_ir_ir(addr) entry_ir_ir_im(addi)
entry_ir_ir_ir(addxr) entry_ir_ir_im(addxi)
entry_ir_ir_ir(addcr) entry_ir_ir_im(addci)
@ -1522,8 +1541,8 @@ entry_ir(retval_ui) entry_ir(retval_l)
#endif
entry_ir(retval)
entry(epilog)
entry_ca(arg_f)
entry_fa(getarg_f)
entry_ca(arg_f) entry_fa(getarg_f)
entry_fa(putargr_f) entry_fma(putargi_f)
entry_fr_fr_fr(addr_f) entry_fr_fr_fm(addi_f)
entry_fr_fr_fr(subr_f) entry_fr_fr_fm(subi_f)
entry_fr_fr_fr(rsbr_f) entry_fr_fr_fm(rsbi_f)
@ -1573,8 +1592,8 @@ entry_lb_fr_fr(bunordr_f) entry_lb_fr_fm(bunordi_f)
entry_fr(pushargr_f) entry_fm(pushargi_f)
entry_fr(retr_f) entry_fm(reti_f)
entry_fr(retval_f)
entry_ca(arg_d)
entry_fa(getarg_d)
entry_ca(arg_d) entry_fa(getarg_d)
entry_fa(putargr_d) entry_fma(putargi_d)
entry_fr_fr_fr(addr_d) entry_fr_fr_dm(addi_d)
entry_fr_fr_fr(subr_d) entry_fr_fr_dm(subi_d)
entry_fr_fr_fr(rsbr_d) entry_fr_fr_dm(rsbi_d)
@ -1647,6 +1666,7 @@ entry_fr(retval_d)
#undef entry_fr_fr_fm
#undef entry_fr_fr_dm
#undef entry_fr_fr_fr
#undef entry_fma
#undef entry_fa
#undef entry_pm
#undef entry_lb
@ -1659,6 +1679,7 @@ entry_fr(retval_d)
#undef entry_ir_ir
#undef entry_ir_ir_im
#undef entry_ir_ir_ir
#undef entry_ima
#undef entry_ir
#undef entry_im
#undef entry_ia