mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-08 22:50:27 +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:
parent
192f89c0ee
commit
27d9b68a3f
16 changed files with 1535 additions and 20 deletions
|
@ -84,6 +84,7 @@ EXTRA_DIST = \
|
|||
call.tst call.ok \
|
||||
float.tst float.ok \
|
||||
jmpr.tst jmpr.ok \
|
||||
put.tst put.ok \
|
||||
qalu.inc \
|
||||
qalu_mul.tst qalu_mul.ok \
|
||||
qalu_div.tst qalu_div.ok \
|
||||
|
@ -115,7 +116,7 @@ base_TESTS = \
|
|||
fop_abs fop_sqrt \
|
||||
varargs stack \
|
||||
clobber carry call \
|
||||
float jmpr \
|
||||
float jmpr put \
|
||||
qalu_mul qalu_div \
|
||||
range ret tramp
|
||||
|
||||
|
@ -142,7 +143,7 @@ x87_TESTS = \
|
|||
fop_abs.x87 fop_sqrt.x87 \
|
||||
varargs.x87 stack.x87 \
|
||||
clobber.x87 carry.x87 call.x87 \
|
||||
float.x87 jmpr.x87
|
||||
float.x87 jmpr.x87 put.x87
|
||||
$(x87_TESTS): check.x87.sh
|
||||
$(LN_S) $(srcdir)/check.x87.sh $@
|
||||
TESTS += $(x87_TESTS)
|
||||
|
@ -164,7 +165,7 @@ x87_nodata_TESTS = \
|
|||
fop_abs.x87.nodata fop_sqrt.x87.nodata \
|
||||
varargs.x87.nodata stack.x87.nodata \
|
||||
clobber.x87.nodata carry.x87.nodata call.x87.nodata \
|
||||
float.x87.nodata jmpr.x87.nodata
|
||||
float.x87.nodata jmpr.x87.nodata put.nodata
|
||||
$(x87_nodata_TESTS): check.x87.nodata.sh
|
||||
$(LN_S) $(srcdir)/check.x87.nodata.sh $@
|
||||
TESTS += $(x87_nodata_TESTS)
|
||||
|
@ -188,7 +189,8 @@ arm_TESTS = \
|
|||
fop_abs.arm fop_sqrt.arm \
|
||||
varargs.arm stack.arm \
|
||||
clobber.arm carry.arm call.arm \
|
||||
float.arm jmpr.arm tramp.arm range.arm
|
||||
float.arm jmpr.arm tramp.arm range.arm \
|
||||
put.arm
|
||||
$(arm_TESTS): check.arm.sh
|
||||
$(LN_S) $(srcdir)/check.arm.sh $@
|
||||
TESTS += $(arm_TESTS)
|
||||
|
@ -212,7 +214,8 @@ swf_TESTS = \
|
|||
fop_abs.swf fop_sqrt.swf \
|
||||
varargs.swf stack.swf \
|
||||
clobber.swf carry.swf call.swf \
|
||||
float.swf jmpr.swf tramp.swf range.swf
|
||||
float.swf jmpr.swf tramp.swf range.swf \
|
||||
put.swf
|
||||
$(swf_TESTS): check.swf.sh
|
||||
$(LN_S) $(srcdir)/check.swf.sh $@
|
||||
TESTS += $(swf_TESTS)
|
||||
|
@ -234,7 +237,8 @@ arm_swf_TESTS = \
|
|||
fop_abs.arm.swf fop_sqrt.arm.swf \
|
||||
varargs.arm.swf stack.arm.swf \
|
||||
clobber.arm.swf carry.arm.swf call.arm.swf \
|
||||
float.arm.swf jmpr.arm.swf tramp.arm.swf range.arm.swf
|
||||
float.arm.swf jmpr.arm.swf tramp.arm.swf range.arm.swf \
|
||||
put.arm.swf
|
||||
$(arm_swf_TESTS): check.arm.swf.sh
|
||||
$(LN_S) $(srcdir)/check.arm.swf.sh $@
|
||||
TESTS += $(arm_swf_TESTS)
|
||||
|
@ -258,7 +262,7 @@ arm4_swf_TESTS = \
|
|||
varargs.arm4.swf stack.arm4.swf \
|
||||
clobber.arm4.swf carry.arm4.swf call.arm4.swf \
|
||||
float.arm4.swf jmpr.arm4.swf tramp.arm4.swf \
|
||||
range.arm4.swf
|
||||
range.arm4.swf put.arm4.swf
|
||||
$(arm4_swf_TESTS): check.arm4.swf.sh
|
||||
$(LN_S) $(srcdir)/check.arm4.swf.sh $@
|
||||
TESTS += $(arm4_swf_TESTS)
|
||||
|
@ -284,7 +288,7 @@ nodata_TESTS = \
|
|||
varargs.nodata stack.nodata \
|
||||
clobber.nodata carry.nodata call.nodata \
|
||||
float.nodata jmpr.nodata tramp.nodata \
|
||||
range.nodata
|
||||
range.nodata put.nodata
|
||||
$(nodata_TESTS): check.nodata.sh
|
||||
$(LN_S) $(srcdir)/check.nodata.sh $@
|
||||
TESTS += $(nodata_TESTS)
|
||||
|
|
|
@ -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
|
||||
|
|
1
check/put.ok
Normal file
1
check/put.ok
Normal file
|
@ -0,0 +1 @@
|
|||
ok
|
428
check/put.tst
Normal file
428
check/put.tst
Normal file
|
@ -0,0 +1,428 @@
|
|||
.data 8
|
||||
ok:
|
||||
.c "ok"
|
||||
|
||||
.code
|
||||
jmpi main
|
||||
|
||||
name putr
|
||||
putr:
|
||||
prolog
|
||||
frame 160
|
||||
arg $ac
|
||||
arg $auc
|
||||
arg $as
|
||||
arg $aus
|
||||
arg $ai
|
||||
#if __WORDSIZE == 64
|
||||
arg $aui
|
||||
arg $al
|
||||
#endif
|
||||
arg_f $af
|
||||
arg_d $ad
|
||||
arg $a
|
||||
#if __WORDSIZE == 64
|
||||
arg $_l
|
||||
arg $_ui
|
||||
#endif
|
||||
arg $_i
|
||||
arg $_us
|
||||
arg $_s
|
||||
arg $_uc
|
||||
arg $_c
|
||||
getarg_c %r0 $ac
|
||||
negr %r0 %r0
|
||||
putargr %r0 $ac
|
||||
getarg_uc %r0 $auc
|
||||
negr %r0 %r0
|
||||
putargr %r0 $auc
|
||||
getarg_s %r0 $as
|
||||
negr %r0 %r0
|
||||
putargr %r0 $as
|
||||
getarg_us %r0 $aus
|
||||
negr %r0 %r0
|
||||
putargr %r0 $aus
|
||||
getarg_i %r0 $ai
|
||||
negr %r0 %r0
|
||||
putargr %r0 $ai
|
||||
#if __WORDSIZE == 64
|
||||
getarg_ui %r0 $aui
|
||||
negr %r0 %r0
|
||||
putargr %r0 $aui
|
||||
getarg_l %r0 $al
|
||||
negr %r0 %r0
|
||||
putargr %r0 $al
|
||||
#endif
|
||||
getarg_f %f0 $af
|
||||
negr_f %f0 %f0
|
||||
putargr_f %f0 $af
|
||||
getarg_d %f0 $ad
|
||||
negr_d %f0 %f0
|
||||
putargr_d %f0 $ad
|
||||
getarg %r0 $a
|
||||
negr %r0 %r0
|
||||
putargr %r0 $a
|
||||
#if __WORDSIZE == 64
|
||||
getarg_l %r0 $_l
|
||||
negr %r0 %r0
|
||||
putargr %r0 $_l
|
||||
getarg_ui %r0 $_ui
|
||||
negr %r0 %r0
|
||||
putargr %r0 $_ui
|
||||
#endif
|
||||
getarg_i %r0 $_i
|
||||
negr %r0 %r0
|
||||
putargr %r0 $_i
|
||||
getarg_us %r0 $_us
|
||||
negr %r0 %r0
|
||||
putargr %r0 $_us
|
||||
getarg_s %r0 $_s
|
||||
negr %r0 %r0
|
||||
putargr %r0 $_s
|
||||
getarg_uc %r0 $_uc
|
||||
negr %r0 %r0
|
||||
putargr %r0 $_uc
|
||||
getarg_c %r0 $_c
|
||||
negr %r0 %r0
|
||||
putargr %r0 $_c
|
||||
jmpi _putr
|
||||
rputr:
|
||||
putargi 17 $ac
|
||||
putargi 16 $auc
|
||||
putargi 15 $as
|
||||
putargi 14 $aus
|
||||
putargi 13 $ai
|
||||
#if __WORDSIZE == 64
|
||||
putargi 12 $aui
|
||||
putargi 11 $al
|
||||
#endif
|
||||
putargi_f 10 $af
|
||||
putargi_d 9 $ad
|
||||
putargi 8 $a
|
||||
#if __WORDSIZE == 64
|
||||
putargi 7 $_l
|
||||
putargi 6 $_ui
|
||||
#endif
|
||||
putargi 5 $_i
|
||||
putargi 4 $_us
|
||||
putargi 3 $_s
|
||||
putargi 2 $_uc
|
||||
putargi 1 $_c
|
||||
jmpi _puti
|
||||
rputi:
|
||||
ret
|
||||
epilog
|
||||
|
||||
name _putr
|
||||
_putr:
|
||||
prolog
|
||||
tramp 160
|
||||
arg $ac
|
||||
arg $auc
|
||||
arg $as
|
||||
arg $aus
|
||||
arg $ai
|
||||
#if __WORDSIZE == 64
|
||||
arg $aui
|
||||
arg $al
|
||||
#endif
|
||||
arg_f $af
|
||||
arg_d $ad
|
||||
arg $a
|
||||
#if __WORDSIZE == 64
|
||||
arg $_l
|
||||
arg $_ui
|
||||
#endif
|
||||
arg $_i
|
||||
arg $_us
|
||||
arg $_s
|
||||
arg $_uc
|
||||
arg $_c
|
||||
getarg_c %r0 $ac
|
||||
beqi rac %r0 -1
|
||||
calli @abort
|
||||
rac:
|
||||
getarg_uc %r0 $auc
|
||||
beqi rauc %r0 $(-2 & 0xff)
|
||||
calli @abort
|
||||
rauc:
|
||||
getarg_s %r0 $as
|
||||
beqi ras %r0 -3
|
||||
calli @abort
|
||||
ras:
|
||||
getarg_us %r0 $aus
|
||||
beqi raus %r0 $(-4 & 0xffff)
|
||||
calli @abort
|
||||
raus:
|
||||
getarg_i %r0 $ai
|
||||
beqi rai %r0 -5
|
||||
calli @abort
|
||||
rai:
|
||||
#if __WORDSIZE == 64
|
||||
getarg_ui %r0 $aui
|
||||
beqi raui %r0 $(-6 & 0xffffffff)
|
||||
calli @abort
|
||||
raui:
|
||||
getarg_l %r0 $al
|
||||
beqi ral %r0 -7
|
||||
calli @abort
|
||||
ral:
|
||||
#endif
|
||||
getarg_f %f0 $af
|
||||
beqi_f raf %f0 -8
|
||||
calli @abort
|
||||
raf:
|
||||
getarg_d %f0 $ad
|
||||
beqi_d rad %f0 -9
|
||||
calli @abort
|
||||
rad:
|
||||
getarg %r0 $a
|
||||
beqi ra %r0 -10
|
||||
calli @abort
|
||||
ra:
|
||||
#if __WORDSIZE == 64
|
||||
getarg %r0 $_l
|
||||
beqi r_l %r0 -11
|
||||
calli @abort
|
||||
r_l:
|
||||
getarg_ui %r0 $_ui
|
||||
beqi r_ui %r0 $(-12 & 0xffffffff)
|
||||
calli @abort
|
||||
r_ui:
|
||||
#endif
|
||||
getarg_i %r0 $_i
|
||||
beqi r_i %r0 -13
|
||||
calli @abort
|
||||
r_i:
|
||||
getarg_us %r0 $_us
|
||||
beqi r_us %r0 $(-14 & 0xffff)
|
||||
calli @abort
|
||||
r_us:
|
||||
getarg_s %r0 $_s
|
||||
beqi r_s %r0 -15
|
||||
calli @abort
|
||||
r_s:
|
||||
getarg_uc %r0 $_uc
|
||||
beqi r_uc %r0 $(-16 & 0xff)
|
||||
calli @abort
|
||||
r_uc:
|
||||
getarg_c %r0 $_c
|
||||
beqi r_c %r0 -17
|
||||
calli @abort
|
||||
r_c:
|
||||
jmpi rputr
|
||||
epilog
|
||||
|
||||
name _puti
|
||||
_puti:
|
||||
prolog
|
||||
tramp 160
|
||||
arg $ac
|
||||
arg $auc
|
||||
arg $as
|
||||
arg $aus
|
||||
arg $ai
|
||||
#if __WORDSIZE == 64
|
||||
arg $aui
|
||||
arg $al
|
||||
#endif
|
||||
arg_f $af
|
||||
arg_d $ad
|
||||
arg $a
|
||||
#if __WORDSIZE == 64
|
||||
arg $_l
|
||||
arg $_ui
|
||||
#endif
|
||||
arg $_i
|
||||
arg $_us
|
||||
arg $_s
|
||||
arg $_uc
|
||||
arg $_c
|
||||
getarg_c %r0 $ac
|
||||
beqi iac %r0 17
|
||||
calli @abort
|
||||
iac:
|
||||
getarg_uc %r0 $auc
|
||||
beqi iauc %r0 16
|
||||
calli @abort
|
||||
iauc:
|
||||
getarg_s %r0 $as
|
||||
beqi ias %r0 15
|
||||
calli @abort
|
||||
ias:
|
||||
getarg_us %r0 $aus
|
||||
beqi iaus %r0 14
|
||||
calli @abort
|
||||
iaus:
|
||||
getarg_i %r0 $ai
|
||||
beqi iai %r0 13
|
||||
calli @abort
|
||||
iai:
|
||||
#if __WORDSIZE == 64
|
||||
getarg_ui %r0 $aui
|
||||
beqi iaui %r0 12
|
||||
calli @abort
|
||||
iaui:
|
||||
getarg_l %r0 $al
|
||||
beqi ial %r0 11
|
||||
calli @abort
|
||||
ial:
|
||||
#endif
|
||||
getarg_f %f0 $af
|
||||
beqi_f iaf %f0 10
|
||||
calli @abort
|
||||
iaf:
|
||||
getarg_d %f0 $ad
|
||||
beqi_d iad %f0 9
|
||||
calli @abort
|
||||
iad:
|
||||
getarg %r0 $a
|
||||
beqi ia %r0 8
|
||||
calli @abort
|
||||
ia:
|
||||
#if __WORDSIZE == 64
|
||||
getarg %r0 $_l
|
||||
beqi i_l %r0 7
|
||||
calli @abort
|
||||
i_l:
|
||||
getarg_ui %r0 $_ui
|
||||
beqi i_ui %r0 6
|
||||
calli @abort
|
||||
i_ui:
|
||||
#endif
|
||||
getarg_i %r0 $_i
|
||||
beqi i_i %r0 5
|
||||
calli @abort
|
||||
i_i:
|
||||
getarg_us %r0 $_us
|
||||
beqi i_us %r0 4
|
||||
calli @abort
|
||||
i_us:
|
||||
getarg_s %r0 $_s
|
||||
beqi i_s %r0 3
|
||||
calli @abort
|
||||
i_s:
|
||||
getarg_uc %r0 $_uc
|
||||
beqi i_uc %r0 2
|
||||
calli @abort
|
||||
i_uc:
|
||||
getarg_c %r0 $_c
|
||||
beqi i_c %r0 1
|
||||
calli @abort
|
||||
i_c:
|
||||
jmpi rputi
|
||||
epilog
|
||||
|
||||
name putf
|
||||
putf:
|
||||
prolog
|
||||
frame 56
|
||||
arg $i1
|
||||
arg_d $d1
|
||||
arg_f $f1
|
||||
arg_f $f2
|
||||
arg_f $f3
|
||||
arg $i2
|
||||
arg_d $d2
|
||||
getarg %r0 $i1
|
||||
addi %r0 %r0 1
|
||||
putargr %r0 $i1
|
||||
getarg_d %f0 $d1
|
||||
addi_d %f0 %f0 1
|
||||
putargr_d %f0 $d1
|
||||
getarg_f %f0 $f1
|
||||
addi_f %f0 %f0 1
|
||||
putargr_f %f0 $f1
|
||||
getarg_f %f0 $f2
|
||||
subi_f %f0 %f0 1
|
||||
putargr_f %f0 $f2
|
||||
putargi_f -5 $f3
|
||||
putargi -6 $i2
|
||||
putargi_d -7 $d2
|
||||
jmpi _putf
|
||||
rputf:
|
||||
ret
|
||||
epilog
|
||||
|
||||
name _putf
|
||||
_putf:
|
||||
prolog
|
||||
tramp 56
|
||||
arg $i1
|
||||
arg_d $d1
|
||||
arg_f $f1
|
||||
arg_f $f2
|
||||
arg_f $f3
|
||||
arg $i2
|
||||
arg_d $d2
|
||||
getarg %r0 $i1
|
||||
beqi fi1 %r0 2
|
||||
calli @abort
|
||||
fi1:
|
||||
getarg_d %f0 $d1
|
||||
beqi_d fd1 %f0 3
|
||||
calli @abort
|
||||
fd1:
|
||||
getarg_f %f0 $f1
|
||||
beqi_f ff1 %f0 4
|
||||
calli @abort
|
||||
ff1:
|
||||
getarg_f %f0 $f2
|
||||
beqi_f ff2 %f0 3
|
||||
calli @abort
|
||||
ff2:
|
||||
getarg_f %f0 $f3
|
||||
beqi_f ff3 %f0 -5
|
||||
calli @abort
|
||||
ff3:
|
||||
getarg %r0 $i2
|
||||
beqi fi2 %r0 -6
|
||||
calli @abort
|
||||
fi2:
|
||||
getarg_d %f0 $d2
|
||||
beqi_d fd2 %f0 -7
|
||||
calli @abort
|
||||
fd2:
|
||||
jmpi rputf
|
||||
epilog
|
||||
|
||||
name main
|
||||
main:
|
||||
prolog
|
||||
prepare
|
||||
pushargi 1
|
||||
pushargi 2
|
||||
pushargi 3
|
||||
pushargi 4
|
||||
pushargi 5
|
||||
#if __WORDSIZE == 64
|
||||
pushargi 6
|
||||
pushargi 7
|
||||
#endif
|
||||
pushargi_f 8
|
||||
pushargi_d 9
|
||||
pushargi 10
|
||||
#if __WORDSIZE == 64
|
||||
pushargi 11
|
||||
pushargi 12
|
||||
#endif
|
||||
pushargi 13
|
||||
pushargi 14
|
||||
pushargi 15
|
||||
pushargi 16
|
||||
pushargi 17
|
||||
finishi putr
|
||||
prepare
|
||||
pushargi 1
|
||||
pushargi_d 2
|
||||
pushargi_f 3
|
||||
pushargi_f 4
|
||||
pushargi_f 5
|
||||
pushargi 6
|
||||
pushargi_d 7
|
||||
finishi putf
|
||||
prepare
|
||||
pushargi ok
|
||||
finishi @puts
|
||||
ret
|
||||
epilog
|
Loading…
Add table
Add a link
Reference in a new issue