1
Fork 0
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:
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>
* include/lightning/jit_mips.h, lib/jit_mips-cpu.c,

View file

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

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_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)

View file

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

View file

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

View file

@ -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",