mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-04 14:20:26 +02:00
Implement sqrt codes in mips.
* lib/jit_mips-fpu.c, lib/jit_mips.c: Implement missing mips jit_sqrtr_{f,d} codes. * check/all.tst, include/lightning.h, lib/jit_print.c: Change declaration order and call order in all.tst of {add,sub}c and {add,sub}x. *c must be called before to set the carry and *x second to use the carry and keep it set. The wrong call order was causing all.tst to fail in mips, where a register is allocated to keep a global carry state.
This commit is contained in:
parent
760fab8d37
commit
aa7c8230c1
6 changed files with 32 additions and 14 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
|||
2012-12-04 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* lib/jit_mips-fpu.c, lib/jit_mips.c: Implement missing mips
|
||||
jit_sqrtr_{f,d} codes.
|
||||
|
||||
* check/all.tst, include/lightning.h, lib/jit_print.c: Change
|
||||
declaration order and call order in all.tst of {add,sub}c and
|
||||
{add,sub}x. *c must be called before to set the carry and *x
|
||||
second to use the carry and keep it set. The wrong call order
|
||||
was causing all.tst to fail in mips, where a register is
|
||||
allocated to keep a global carry state.
|
||||
|
||||
2012-12-04 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* include/lightning/jit_mips.h, lib/jit_mips-cpu.c,
|
||||
|
|
|
@ -22,16 +22,16 @@
|
|||
#endif
|
||||
addr %r0 %r1 %r2
|
||||
addi %r0 %r1 2
|
||||
addxr %r0 %r1 %r2
|
||||
addxi %r0 %r1 2
|
||||
addcr %r0 %r1 %r2
|
||||
addci %r0 %r1 2
|
||||
addxr %r0 %r1 %r2
|
||||
addxi %r0 %r1 2
|
||||
subr %r0 %r1 %r2
|
||||
subi %r0 %r1 2
|
||||
subxr %r0 %r1 %r2
|
||||
subxi %r0 %r1 2
|
||||
subcr %r0 %r1 %r2
|
||||
subci %r0 %r1 2
|
||||
subxr %r0 %r1 %r2
|
||||
subxi %r0 %r1 2
|
||||
mulr %r0 %r1 %r2
|
||||
muli %r0 %r1 2
|
||||
divr %r0 %r1 %r2
|
||||
|
|
|
@ -133,21 +133,21 @@ typedef enum {
|
|||
#define jit_addr(u,v,w) jit_new_node_www(jit_code_addr,u,v,w)
|
||||
#define jit_addi(u,v,w) jit_new_node_www(jit_code_addi,u,v,w)
|
||||
jit_code_addr, jit_code_addi,
|
||||
#define jit_addxr(u,v,w) jit_new_node_www(jit_code_addxr,u,v,w)
|
||||
#define jit_addxi(u,v,w) jit_new_node_www(jit_code_addxi,u,v,w)
|
||||
jit_code_addxr, jit_code_addxi,
|
||||
#define jit_addcr(u,v,w) jit_new_node_www(jit_code_addcr,u,v,w)
|
||||
#define jit_addci(u,v,w) jit_new_node_www(jit_code_addci,u,v,w)
|
||||
jit_code_addcr, jit_code_addci,
|
||||
#define jit_addxr(u,v,w) jit_new_node_www(jit_code_addxr,u,v,w)
|
||||
#define jit_addxi(u,v,w) jit_new_node_www(jit_code_addxi,u,v,w)
|
||||
jit_code_addxr, jit_code_addxi,
|
||||
#define jit_subr(u,v,w) jit_new_node_www(jit_code_subr,u,v,w)
|
||||
#define jit_subi(u,v,w) jit_new_node_www(jit_code_subi,u,v,w)
|
||||
jit_code_subr, jit_code_subi,
|
||||
#define jit_subxr(u,v,w) jit_new_node_www(jit_code_subxr,u,v,w)
|
||||
#define jit_subxi(u,v,w) jit_new_node_www(jit_code_subxi,u,v,w)
|
||||
jit_code_subxr, jit_code_subxi,
|
||||
#define jit_subcr(u,v,w) jit_new_node_www(jit_code_subcr,u,v,w)
|
||||
#define jit_subci(u,v,w) jit_new_node_www(jit_code_subci,u,v,w)
|
||||
jit_code_subcr, jit_code_subci,
|
||||
#define jit_subxr(u,v,w) jit_new_node_www(jit_code_subxr,u,v,w)
|
||||
#define jit_subxi(u,v,w) jit_new_node_www(jit_code_subxi,u,v,w)
|
||||
jit_code_subxr, jit_code_subxi,
|
||||
|
||||
#define jit_mulr(u,v,w) jit_new_node_www(jit_code_mulr,u,v,w)
|
||||
#define jit_muli(u,v,w) jit_new_node_www(jit_code_muli,u,v,w)
|
||||
|
|
|
@ -99,6 +99,8 @@
|
|||
# define ABS_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_ABS_fmt)
|
||||
# define NEG_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_NEG_fmt)
|
||||
# define NEG_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_NEG_fmt)
|
||||
# define SQRT_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_SQRT_fmt)
|
||||
# define SQRT_D(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_SQRT_fmt)
|
||||
# define MFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MF,rt,fs,0,0)
|
||||
# define MTC1(rt, fs) hrrrit(MIPS_COP1,MIPS_MT,rt,fs,0,0)
|
||||
# define DMFC1(rt, fs) hrrrit(MIPS_COP1,MIPS_DMF,rt,fs,0,0)
|
||||
|
@ -208,6 +210,8 @@ static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
|||
# define absr_d(r0,r1) ABS_D(r0,r1)
|
||||
# define negr_f(r0,r1) NEG_S(r0,r1)
|
||||
# define negr_d(r0,r1) NEG_D(r0,r1)
|
||||
# define sqrtr_f(r0,r1) SQRT_S(r0,r1)
|
||||
# define sqrtr_d(r0,r1) SQRT_D(r0,r1)
|
||||
# define getarg_f(r0, r1) MTC1(r1, r0)
|
||||
# define pushargr_f(r0, r1) MFC1(r1, r0)
|
||||
# define pushargi_f(r0, i0) _pushargi_f(_jit, r0, i0)
|
||||
|
|
|
@ -973,6 +973,7 @@ _jit_emit(jit_state_t *_jit)
|
|||
case_rrf(div, _f, 32);
|
||||
case_rr(abs, _f);
|
||||
case_rr(neg, _f);
|
||||
case_rr(sqrt, _f);
|
||||
case_rr(ext, _f);
|
||||
case_rr(ld, _f);
|
||||
case_rw(ld, _f);
|
||||
|
@ -1054,6 +1055,7 @@ _jit_emit(jit_state_t *_jit)
|
|||
case_rrf(div, _d, 64);
|
||||
case_rr(abs, _d);
|
||||
case_rr(neg, _d);
|
||||
case_rr(sqrt, _d);
|
||||
case_rr(ext, _d);
|
||||
case_rr(ld, _d);
|
||||
case_rw(ld, _d);
|
||||
|
|
|
@ -41,11 +41,11 @@ static char *code_name[] = {
|
|||
"label",
|
||||
"prolog",
|
||||
"addr", "addi",
|
||||
"addxr", "addxi",
|
||||
"addcr", "addci",
|
||||
"addxr", "addxi",
|
||||
"subr", "subi",
|
||||
"subxr", "subxi",
|
||||
"subcr", "subci",
|
||||
"subxr", "subxi",
|
||||
"mulr", "muli",
|
||||
"divr", "divi",
|
||||
"divr_u", "divi_u",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue