Skip to content

Commit 4dae90a

Browse files
Add new FFI tests mixing int/float/double parameters with short struct passed by value.
The goal is to check cases of struct passed by value when there is no more register available, particularly on X64SysV.
1 parent 18e3583 commit 4dae90a

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

platforms/Cross/plugins/SqueakFFIPrims/sqFFITestFuncs.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,13 @@ EXPORT(ffiTestSSdi5)ffiTestReturnSSdi5() { return ffiTestInitSSdi5(
118118
EXPORT(double) ffiTestSumSfd(ffiTestSfd x) { return (double) x.a + (double) x.b ; }
119119
EXPORT(double) ffiTestSumSfd_2(ffiTestSfd x,ffiTestSfd y) { return ffiTestSumSfd(x) + ffiTestSumSfd(y); }
120120
EXPORT(double) ffiTestSumSfd_4(ffiTestSfd x,ffiTestSfd y,ffiTestSfd z,ffiTestSfd t) { return ffiTestSumSfd_2(x,y) + ffiTestSumSfd_2(z,t); }
121+
EXPORT(double) ffiTestSumfWithSfd_4(float f,ffiTestSfd x,ffiTestSfd y,ffiTestSfd z,ffiTestSfd t) { return ((double) f) + ffiTestSumSfd_2(x,y) + ffiTestSumSfd_2(z,t); } /* consume 1 float register with first argument */
121122
EXPORT(double) ffiTestSumSdi(ffiTestSdi x) { return (double) x.a + (double) x.b ; }
122123
EXPORT(double) ffiTestSumSdi_2(ffiTestSdi x,ffiTestSdi y) { return ffiTestSumSdi(x) + ffiTestSumSdi(y); }
123124
EXPORT(double) ffiTestSumSdi_4(ffiTestSdi x,ffiTestSdi y,ffiTestSdi z,ffiTestSdi t) { return ffiTestSumSdi_2(x,y) + ffiTestSumSdi_2(z,t); }
125+
EXPORT(double) ffiTestSumdiWithSdi_4(double a,int b,ffiTestSdi x,ffiTestSdi y,ffiTestSdi z,ffiTestSdi t) { return a + ((double) b) + ffiTestSumSdi_2(x,y) + ffiTestSumSdi_2(z,t); } /* consume one int and 1 float register with 1st two arguments */
126+
EXPORT(double) ffiTestSumdWithSdi_4(double a,ffiTestSdi x,ffiTestSdi y,ffiTestSdi z,ffiTestSdi t) { return a + ffiTestSumSdi_2(x,y) + ffiTestSumSdi_2(z,t); } /* consume one float register with 1st argument */
127+
EXPORT(double) ffiTestSumiWithSdi_4(int b,ffiTestSdi x,ffiTestSdi y,ffiTestSdi z,ffiTestSdi t) { return ((double) b) + ffiTestSumSdi_2(x,y) + ffiTestSumSdi_2(z,t); } /* consume one int register with 1st argument */
124128
EXPORT(double) ffiTestSumSSdi5(ffiTestSSdi5 x) { return ffiTestSumSdi_4(x.a,x.b,x.c,x.d) + ffiTestSumSdi(x.e) ; }
125129

126130
EXPORT(double) ffiTestSumSslf(ffiTestSslf x) { return (double) x.a + (double) x.b + (double) x.c ; }

0 commit comments

Comments
 (0)