1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-11 22:31:12 +02:00

Correct build and pass all tests on Solaris Sparc.

* lib/jit_sparc-cpu.c: Correct compiler warning of value
	used before assignment. The usage is bogus as the api
	requires always patching jumps, but the random value used
	could cause an assertion due to invalid displacement.

	* lib/jit_sparc.c: Always load and store double arguments
	in stack as 2 float loads or stores, for safety, as unaligned
	access is not allowed in Sparc Solaris.
This commit is contained in:
pcpa 2013-06-18 22:54:29 -03:00
parent 7807aab036
commit af92c5adfe
4 changed files with 26 additions and 7 deletions

View file

@ -1,3 +1,14 @@
2013-06-18 Paulo Andrade <pcpa@gnu.org>
* lib/jit_sparc-cpu.c: Correct compiler warning of value
used before assignment. The usage is bogus as the api
requires always patching jumps, but the random value used
could cause an assertion due to invalid displacement.
* lib/jit_sparc.c: Always load and store double arguments
in stack as 2 float loads or stores, for safety, as unaligned
access is not allowed in Sparc Solaris.
2013-06-14 Paulo Andrade <pcpa@gnu.org>
* configure.ac: Force -mlp64 to CFLAGS on HP-UX ia64 port.

View file

@ -33,8 +33,8 @@
# include <fpu_control.h>
#endif
/* The label_t identifier clashes with a definition in sys/types.h */
#if defined(_AIX)
/* The label_t identifier clashes with a system definitions */
#if defined(_AIX) || defined(__sun__)
# define label_t l_label_t
#endif

View file

@ -1562,7 +1562,7 @@ _jmpi(jit_state_t *_jit, jit_word_t i0)
{
jit_word_t w;
jit_int32_t reg;
w = (i0 - w) >> 2;
w = (i0 - _jit->pc.w) >> 2;
if (s22_p(w)) {
BA(w);
NOP();

View file

@ -372,8 +372,10 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v)
jit_ldxi_f(u, JIT_FP, -8);
jit_ldxi_f(u + 1, JIT_FP, stack_framesize);
}
else
jit_ldxi_d(u, JIT_FP, v->u.w);
else {
jit_ldxi_f(u, JIT_FP, v->u.w);
jit_ldxi_f(u + 1, JIT_FP, v->u.w + 4);
}
}
void
@ -455,7 +457,10 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u)
_jitc->function->call.size += sizeof(jit_float32_t);
}
else {
jit_stxi_d(_jitc->function->call.size + stack_framesize, JIT_SP, u);
jit_stxi_f(_jitc->function->call.size + stack_framesize,
JIT_SP, u);
jit_stxi_f(_jitc->function->call.size + stack_framesize + 4,
JIT_SP, u + 1);
_jitc->function->call.size += sizeof(jit_float64_t);
}
}
@ -480,7 +485,10 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u)
_jitc->function->call.size += sizeof(jit_float32_t);
}
else {
jit_stxi_d(_jitc->function->call.size + stack_framesize, JIT_SP, regno);
jit_stxi_f(_jitc->function->call.size + stack_framesize,
JIT_SP, regno);
jit_stxi_f(_jitc->function->call.size + stack_framesize + 4,
JIT_SP, regno + 1);
_jitc->function->call.size += sizeof(jit_float64_t);
}
jit_unget_reg(regno);