@@ -125,6 +125,26 @@ public void testI32SDILDS() {
125
125
test ("I32SDILDS" , getI32SDILDS (), float .class , argClazz , argValues );
126
126
}
127
127
128
+ @ Test
129
+ public void testI32I () {
130
+ int sCount = 32 ;
131
+ // Pairs of <Object>, <Class>
132
+ Object [] remainingArgs = new Object []{
133
+ 12 , int .class
134
+ };
135
+ Class <?>[] argClazz = new Class [sCount + remainingArgs .length / 2 ];
136
+ Object [] argValues = new Object [sCount + remainingArgs .length / 2 ];
137
+ for (int i = 0 ; i < sCount ; i ++) {
138
+ argValues [i ] = i ;
139
+ argClazz [i ] = int .class ;
140
+ }
141
+ for (int i = 0 ; i < remainingArgs .length ; i += 2 ) {
142
+ argValues [sCount + i / 2 ] = remainingArgs [i + 0 ];
143
+ argClazz [sCount + i / 2 ] = (Class <?>) remainingArgs [i + 1 ];
144
+ }
145
+ test ("I32I" , getI32I (), int .class , argClazz , argValues );
146
+ }
147
+
128
148
public void test (String name , long addr , Class <?> returnClazz , Class <?>[] types , Object [] values ) {
129
149
try {
130
150
test (asm -> {
@@ -138,7 +158,13 @@ public void test(String name, long addr, Class<?> returnClazz, Class<?>[] types,
138
158
asm .emitCallPrologue (cc , values );
139
159
asm .emitCall (addr );
140
160
asm .emitCallEpilogue (cc );
141
- asm .emitFloatRet (((RegisterValue ) cc .getReturn ()).getRegister ());
161
+ if (returnClazz == float .class ) {
162
+ asm .emitFloatRet (((RegisterValue ) cc .getReturn ()).getRegister ());
163
+ } else if (returnClazz == int .class ) {
164
+ asm .emitIntRet (((RegisterValue ) cc .getReturn ()).getRegister ());
165
+ } else {
166
+ assert false : "Unimplemented return type: " + returnClazz ;
167
+ }
142
168
}, getMethod (name , types ), values );
143
169
} catch (Throwable e ) {
144
170
e .printStackTrace ();
@@ -244,4 +270,24 @@ public static float L32SDILDS(long l00, long l01, long l02, long l03, long l04,
244
270
l18 , l19 , l1a , l1b , l1c , l1d , l1e , l1f ,
245
271
a , b , c , d , e , f );
246
272
}
273
+
274
+ public static native long getI32I ();
275
+
276
+ public static native int _I32I (int i00 , int i01 , int i02 , int i03 , int i04 , int i05 , int i06 , int i07 ,
277
+ int i08 , int i09 , int i0a , int i0b , int i0c , int i0d , int i0e , int i0f ,
278
+ int i10 , int i11 , int i12 , int i13 , int i14 , int i15 , int i16 , int i17 ,
279
+ int i18 , int i19 , int i1a , int i1b , int i1c , int i1d , int i1e , int i1f ,
280
+ int a );
281
+
282
+ public static int I32I (int i00 , int i01 , int i02 , int i03 , int i04 , int i05 , int i06 , int i07 ,
283
+ int i08 , int i09 , int i0a , int i0b , int i0c , int i0d , int i0e , int i0f ,
284
+ int i10 , int i11 , int i12 , int i13 , int i14 , int i15 , int i16 , int i17 ,
285
+ int i18 , int i19 , int i1a , int i1b , int i1c , int i1d , int i1e , int i1f ,
286
+ int a ) {
287
+ return _I32I (i00 , i01 , i02 , i03 , i04 , i05 , i06 , i07 ,
288
+ i08 , i09 , i0a , i0b , i0c , i0d , i0e , i0f ,
289
+ i10 , i11 , i12 , i13 , i14 , i15 , i16 , i17 ,
290
+ i18 , i19 , i1a , i1b , i1c , i1d , i1e , i1f ,
291
+ a );
292
+ }
247
293
}
0 commit comments