@@ -2322,6 +2322,67 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
2322
2322
return ins ;
2323
2323
}
2324
2324
}
2325
+ } else if ((cmethod -> klass == mono_defaults .double_class ) || (cmethod -> klass == mono_defaults .single_class )) {
2326
+ MonoGenericContext * method_context = mono_method_get_context (cmethod );
2327
+ if (!strcmp (cmethod -> name , "ConvertToIntegerNative" ) &&
2328
+ method_context != NULL &&
2329
+ method_context -> method_inst -> type_argc == 1 ) {
2330
+ int opcode = 0 ;
2331
+ MonoTypeEnum tto_type = method_context -> method_inst -> type_argv [0 ]-> type ;
2332
+ MonoStackType tto_stack = STACK_I4 ;
2333
+ switch (tto_type ) {
2334
+ case MONO_TYPE_I :
2335
+ if (TARGET_SIZEOF_VOID_P == 4 ) {
2336
+ opcode = OP_FCONV_TO_I4 ;
2337
+ } else {
2338
+ opcode = OP_FCONV_TO_I8 ;
2339
+ tto_stack = STACK_I8 ;
2340
+ }
2341
+ break ;
2342
+ case MONO_TYPE_I1 :
2343
+ opcode = OP_FCONV_TO_I1 ;
2344
+ break ;
2345
+ case MONO_TYPE_I2 :
2346
+ opcode = OP_FCONV_TO_I2 ;
2347
+ break ;
2348
+ case MONO_TYPE_I4 :
2349
+ opcode = OP_FCONV_TO_I4 ;
2350
+ break ;
2351
+ case MONO_TYPE_I8 :
2352
+ opcode = OP_FCONV_TO_I8 ;
2353
+ tto_stack = STACK_I8 ;
2354
+ break ;
2355
+ case MONO_TYPE_U :
2356
+ if (TARGET_SIZEOF_VOID_P == 4 ) {
2357
+ opcode = OP_FCONV_TO_U4 ;
2358
+ } else {
2359
+ opcode = OP_FCONV_TO_U8 ;
2360
+ tto_stack = STACK_I8 ;
2361
+ }
2362
+ break ;
2363
+ case MONO_TYPE_U1 :
2364
+ opcode = OP_FCONV_TO_U1 ;
2365
+ break ;
2366
+ case MONO_TYPE_U2 :
2367
+ opcode = OP_FCONV_TO_U2 ;
2368
+ break ;
2369
+ case MONO_TYPE_U4 :
2370
+ opcode = OP_FCONV_TO_U4 ;
2371
+ break ;
2372
+ case MONO_TYPE_U8 :
2373
+ opcode = OP_FCONV_TO_U8 ;
2374
+ tto_stack = STACK_I8 ;
2375
+ break ;
2376
+ default : return NULL ;
2377
+ }
2378
+
2379
+ if (opcode != 0 ) {
2380
+ int ireg = mono_alloc_ireg (cfg );
2381
+ EMIT_NEW_UNALU (cfg , ins , opcode , ireg , args [0 ]-> dreg );
2382
+ ins -> type = tto_stack ;
2383
+ return ins ;
2384
+ }
2385
+ }
2325
2386
}
2326
2387
2327
2388
ins = mono_emit_simd_intrinsics (cfg , cmethod , fsig , args );
0 commit comments