Skip to content

Commit c795945

Browse files
committed
use 64bit register for double argumnets (arm/32bit armhf)
1 parent cd632eb commit c795945

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

lisp/c/eval.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,6 +1108,7 @@ __asm__ (".align 4\n"
11081108
"blx r6\n\t"
11091109
// retval
11101110
"vmov r0, s0 @ <retval>\n\t"
1111+
"vmov r1, s1 @ <retval>\n\t"
11111112
"adds r7, r7, #72\n\t"
11121113
"mov sp, r7\n\t"
11131114
"@ sp needed @\n\t"
@@ -1166,10 +1167,12 @@ pointer args[];
11661167
c=((eusinteger_t)numbox.i.i1) & 0x00000000FFFFFFFF;
11671168
if(fcntr < NUM_FLT_ARGUMENTS) fargv[fcntr++] = c; else vargv[vcntr++] = c;
11681169
} else if (p==K_DOUBLE) {
1169-
numbox.f=ckfltval(lisparg);
1170-
//c=numbox.l;
1171-
c=((eusinteger_t)numbox.i.i1) & 0x00000000FFFFFFFF;
1172-
if(fcntr < NUM_FLT_ARGUMENTS) fargv[fcntr++] = c; else vargv[vcntr++] = c;
1170+
numbox.d=(double)ckfltval(lisparg);
1171+
if(fcntr < NUM_FLT_ARGUMENTS) {
1172+
fargv[fcntr++] = numbox.i.i1; fargv[fcntr++] = numbox.i.i2;
1173+
} else {
1174+
vargv[vcntr++] = numbox.i.i1; vargv[vcntr++] = numbox.i.i2;
1175+
}
11731176
} else error(E_USER,(pointer)"unknown type specifier");
11741177
if (vcntr >= NUM_EXTRA_ARGUMENTS) {
11751178
error(E_USER,(pointer)"too many number of arguments");

0 commit comments

Comments
 (0)