1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-20 18:50:21 +02:00

Add new varargs test and correct related test case failures in all ports.

This commit is contained in:
pcpa 2012-12-13 18:26:57 -02:00
parent 0b89a17ca2
commit 6227bf5bf9
9 changed files with 430 additions and 81 deletions

View file

@ -1740,25 +1740,25 @@ _swf_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
if (jit_fpr_p(r1)) {
if (jit_fpr_p(r0) && !jit_thumb_p() && jit_armv5e_p() &&
r0 != r1 && (reg = jit_get_reg_pair()) != JIT_NOREG) {
LDRDIN(rn(reg), _FP_REGNO, swf_off(r1) + 8);
LDRDIN(rn(reg), _FP_REGNO, swf_off(r1) + 4);
swf_bici(rn(reg), rn(reg), 0x80000000);
STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 8);
STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 4);
jit_unget_reg_pair(reg);
}
else {
reg = jit_get_reg(jit_class_gpr);
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
swf_bici(rn(reg), rn(reg), 0x80000000);
if (jit_fpr_p(r0)) {
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
if (r0 != r1) {
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
}
}
else {
movr(r0, rn(reg));
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
movr(r0 + 1, rn(reg));
}
jit_unget_reg(reg);
@ -1768,9 +1768,9 @@ _swf_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
reg = jit_get_reg(jit_class_gpr);
movr(rn(reg), r1);
swf_bici(rn(reg), rn(reg), 0x80000000);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
movr(rn(reg), r1 + 1);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
movr(rn(reg), r1 + 1);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
jit_unget_reg(reg);
}
else {
@ -1812,25 +1812,25 @@ _swf_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
if (jit_fpr_p(r1)) {
if (jit_fpr_p(r0) && !jit_thumb_p() && jit_armv5e_p() &&
r0 != r1 && (reg = jit_get_reg_pair()) != JIT_NOREG) {
LDRDIN(rn(reg), _FP_REGNO, swf_off(r1) + 8);
LDRDIN(rn(reg), _FP_REGNO, swf_off(r1) + 4);
EORI(rn(reg), rn(reg), encode_arm_immediate(0x80000000));
STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 8);
STRDIN(rn(reg), _FP_REGNO, swf_off(r0) + 4);
jit_unget_reg_pair(reg);
}
else {
reg = jit_get_reg(jit_class_gpr);
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
xori(rn(reg), rn(reg), 0x80000000);
if (jit_fpr_p(r0)) {
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
if (r0 != r1) {
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
}
}
else {
movr(r0, rn(reg));
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 4);
swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8);
movr(r0 + 1, rn(reg));
}
jit_unget_reg(reg);
@ -1840,9 +1840,9 @@ _swf_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
reg = jit_get_reg(jit_class_gpr);
movr(rn(reg), r1);
xori(rn(reg), rn(reg), 0x80000000);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
movr(rn(reg), r1 + 1);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 4);
movr(rn(reg), r1 + 1);
swf_strin(rn(reg), _FP_REGNO, swf_off(r0) + 8);
jit_unget_reg(reg);
}
else {