@@ -51,7 +51,7 @@ typedef struct Si2 {int a,b;} ffiTestSi2;
5151typedef struct Ss2 {short a ,b ;} ffiTestSs2 ;
5252typedef struct Ssi {short a ; int b ;} ffiTestSsi ;
5353typedef struct Sfi {float a ; int b ;} ffiTestSfi ;
54- typedef struct Sfd {float a ; double b } ffiTestSfd ;
54+ typedef struct Sfd {float a ; double b ; } ffiTestSfd ;
5555typedef struct Sdi {double a ; int b ;} ffiTestSdi ;
5656typedef struct Ssf {short a ; float b ;} ffiTestSsf ;
5757typedef struct SsSsi {short a ; struct Ssi b ;} ffiTestSsSsi ;
@@ -66,6 +66,13 @@ typedef struct Sf4 {float a,b,c,d;} ffiTestSf4;
6666typedef struct Ss4 {short a ,b ,c ,d ;} ffiTestSs4 ;
6767typedef struct SSdi5 {struct Sdi a ,b ,c ,d ,e ;} ffiTestSSdi5 ; /* a structure longer than 8 eightBytes */
6868
69+ typedef union Ufi {float a ; int b ;} ffiTestUfi ;
70+ typedef union Ufd {float a ; double b ;} ffiTestUfd ;
71+ typedef union UdSi2 {double a ; struct Si2 b ;} ffiTestUdSi2 ;
72+
73+ typedef struct SUfdUfi {union Ufd a ; union Ufi b ;} ffiTestSUfdUfi ;
74+ typedef struct SUfdUdSi2 {union Ufd a ; union UdSi2 b ;} ffiTestSUfdUdSi2 ;
75+
6976#pragma export on
7077
7178EXPORT (ffiTestSd2 ) ffiTestInitSd2 (double a ,double b ) { ffiTestSd2 v = {a ,b }; return v ; }
@@ -90,6 +97,15 @@ EXPORT(ffiTestSf4) ffiTestInitSf4 (float a,float b, float c,float d)
9097EXPORT (ffiTestSs4 ) ffiTestInitSs4 (short a ,short b , short c ,short d ) { ffiTestSs4 v = {a ,b ,c ,d }; return v ; }
9198EXPORT (ffiTestSSdi5 )ffiTestInitSSdi5 (struct Sdi a ,struct Sdi b ,struct Sdi c , struct Sdi d ,struct Sdi e ) { ffiTestSSdi5 v = {a ,b ,c ,d ,e }; return v ; }
9299
100+ EXPORT (ffiTestUfi ) ffiTestInitUfi_f (float a ) { ffiTestUfi v ; v .a = a ; return v ; }
101+ EXPORT (ffiTestUfi ) ffiTestInitUfi_i (int b ) { ffiTestUfi v ; v .b = b ; return v ; }
102+ EXPORT (ffiTestUfd ) ffiTestInitUfd_f (float a ) { ffiTestUfd v ; v .a = a ; return v ; }
103+ EXPORT (ffiTestUfd ) ffiTestInitUfd_d (double b ) { ffiTestUfd v ; v .b = b ; return v ; }
104+ EXPORT (ffiTestUdSi2 ) ffiTestInitUdSi2_d (double a ) { ffiTestUdSi2 v ; v .a = a ; return v ; }
105+ EXPORT (ffiTestUdSi2 ) ffiTestInitUdSi2_ii (int a ,int b ) { ffiTestUdSi2 v ; v .b .a = a ; v .b .b = b ; return v ; }
106+ EXPORT (ffiTestSUfdUfi ) ffiTestInitSUfdUfi (union Ufd a ,union Ufi b ) { ffiTestSUfdUfi v = {a ,b }; return v ; }
107+ EXPORT (ffiTestSUfdUdSi2 ) ffiTestInitSUfdUdSi2 (union Ufd a ,union UdSi2 b ) { ffiTestSUfdUdSi2 v = {a ,b }; return v ; }
108+
93109EXPORT (ffiTestSd2 ) ffiTestReturnSd2 () { return ffiTestInitSd2 (1.0 ,2.0 ); }
94110EXPORT (ffiTestSf2 ) ffiTestReturnSf2 () { return ffiTestInitSf2 (1.0f ,2.0f ); }
95111EXPORT (ffiTestSl2 ) ffiTestReturnSl2 () { return ffiTestInitSl2 (1LL ,2LL ); }
@@ -131,6 +147,8 @@ EXPORT(double) ffiTestSumSslf(ffiTestSslf x) { return (double) x.a + (double) x.
131147EXPORT (double ) ffiTestSumSslf_2 (ffiTestSslf x ,ffiTestSslf y ) { return ffiTestSumSslf (x ) + ffiTestSumSslf (y ); }
132148EXPORT (double ) ffiTestSumSslf_4 (ffiTestSslf x ,ffiTestSslf y ,ffiTestSslf z ,ffiTestSslf t ) { return ffiTestSumSslf_2 (x ,y ) + ffiTestSumSslf_2 (z ,t ); }
133149
150+ EXPORT (double ) ffiTestSumSUfdUfi_f (ffiTestSUfdUfi x ) {return (double ) x .a .a + (double ) x .b .a ; }; /* sum the float parts */
151+ EXPORT (double ) ffiTestSumSUfdUdSi2_d (ffiTestSUfdUdSi2 x ) {return x .a .b + x .b .a ; }; /* sum the double parts */
134152
135153EXPORT (char ) ffiTestChars (char c1 , char c2 , char c3 , char c4 );
136154EXPORT (short ) ffiTestShorts (short c1 , short c2 , short c3 , short c4 );
0 commit comments