1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-04 22:40:25 +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:
pcpa 2012-12-04 13:30:46 -02:00
parent 760fab8d37
commit aa7c8230c1
6 changed files with 32 additions and 14 deletions

View file

@ -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> 2012-12-04 Paulo Andrade <pcpa@gnu.org>
* include/lightning/jit_mips.h, lib/jit_mips-cpu.c, * include/lightning/jit_mips.h, lib/jit_mips-cpu.c,

View file

@ -22,16 +22,16 @@
#endif #endif
addr %r0 %r1 %r2 addr %r0 %r1 %r2
addi %r0 %r1 2 addi %r0 %r1 2
addxr %r0 %r1 %r2
addxi %r0 %r1 2
addcr %r0 %r1 %r2 addcr %r0 %r1 %r2
addci %r0 %r1 2 addci %r0 %r1 2
addxr %r0 %r1 %r2
addxi %r0 %r1 2
subr %r0 %r1 %r2 subr %r0 %r1 %r2
subi %r0 %r1 2 subi %r0 %r1 2
subxr %r0 %r1 %r2
subxi %r0 %r1 2
subcr %r0 %r1 %r2 subcr %r0 %r1 %r2
subci %r0 %r1 2 subci %r0 %r1 2
subxr %r0 %r1 %r2
subxi %r0 %r1 2
mulr %r0 %r1 %r2 mulr %r0 %r1 %r2
muli %r0 %r1 2 muli %r0 %r1 2
divr %r0 %r1 %r2 divr %r0 %r1 %r2

View file

@ -133,21 +133,21 @@ typedef enum {
#define jit_addr(u,v,w) jit_new_node_www(jit_code_addr,u,v,w) #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) #define jit_addi(u,v,w) jit_new_node_www(jit_code_addi,u,v,w)
jit_code_addr, jit_code_addi, 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_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) #define jit_addci(u,v,w) jit_new_node_www(jit_code_addci,u,v,w)
jit_code_addcr, jit_code_addci, 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_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) #define jit_subi(u,v,w) jit_new_node_www(jit_code_subi,u,v,w)
jit_code_subr, jit_code_subi, 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_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) #define jit_subci(u,v,w) jit_new_node_www(jit_code_subci,u,v,w)
jit_code_subcr, jit_code_subci, 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_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) #define jit_muli(u,v,w) jit_new_node_www(jit_code_muli,u,v,w)

View file

@ -96,9 +96,11 @@
# define DIV_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_DIV_fmt) # define DIV_S(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_DIV_fmt)
# define DIV_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_DIV_fmt) # define DIV_D(fd,fs,ft) hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_DIV_fmt)
# define ABS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_ABS_fmt) # define ABS_S(fd,fs) hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_ABS_fmt)
# define ABS_D(fd, fs) hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_ABS_fmt) # 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_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 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 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 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) # 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 absr_d(r0,r1) ABS_D(r0,r1)
# define negr_f(r0,r1) NEG_S(r0,r1) # define negr_f(r0,r1) NEG_S(r0,r1)
# define negr_d(r0,r1) NEG_D(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 getarg_f(r0, r1) MTC1(r1, r0)
# define pushargr_f(r0, r1) MFC1(r1, r0) # define pushargr_f(r0, r1) MFC1(r1, r0)
# define pushargi_f(r0, i0) _pushargi_f(_jit, r0, i0) # define pushargi_f(r0, i0) _pushargi_f(_jit, r0, i0)

View file

@ -973,6 +973,7 @@ _jit_emit(jit_state_t *_jit)
case_rrf(div, _f, 32); case_rrf(div, _f, 32);
case_rr(abs, _f); case_rr(abs, _f);
case_rr(neg, _f); case_rr(neg, _f);
case_rr(sqrt, _f);
case_rr(ext, _f); case_rr(ext, _f);
case_rr(ld, _f); case_rr(ld, _f);
case_rw(ld, _f); case_rw(ld, _f);
@ -1054,6 +1055,7 @@ _jit_emit(jit_state_t *_jit)
case_rrf(div, _d, 64); case_rrf(div, _d, 64);
case_rr(abs, _d); case_rr(abs, _d);
case_rr(neg, _d); case_rr(neg, _d);
case_rr(sqrt, _d);
case_rr(ext, _d); case_rr(ext, _d);
case_rr(ld, _d); case_rr(ld, _d);
case_rw(ld, _d); case_rw(ld, _d);

View file

@ -41,11 +41,11 @@ static char *code_name[] = {
"label", "label",
"prolog", "prolog",
"addr", "addi", "addr", "addi",
"addxr", "addxi",
"addcr", "addci", "addcr", "addci",
"addxr", "addxi",
"subr", "subi", "subr", "subi",
"subxr", "subxi",
"subcr", "subci", "subcr", "subci",
"subxr", "subxi",
"mulr", "muli", "mulr", "muli",
"divr", "divi", "divr", "divi",
"divr_u", "divi_u", "divr_u", "divi_u",