[mono][jit] Remove support for -O=-float32, i.e. treating r4 values as r8 on the...
authorZoltan Varga <vargaz@gmail.com>
Wed, 23 Feb 2022 01:44:00 +0000 (20:44 -0500)
committerGitHub <noreply@github.com>
Wed, 23 Feb 2022 01:44:00 +0000 (20:44 -0500)
This is not compatible with coreclr, and it has been disabled
and untested for a long time.

18 files changed:
src/mono/mono/mini/calls.c
src/mono/mono/mini/driver.c
src/mono/mono/mini/intrinsics.c
src/mono/mono/mini/method-to-ir.c
src/mono/mono/mini/mini-amd64.c
src/mono/mono/mini/mini-amd64.h
src/mono/mono/mini/mini-arm.c
src/mono/mono/mini/mini-arm.h
src/mono/mono/mini/mini-arm64.c
src/mono/mono/mini/mini-arm64.h
src/mono/mono/mini/mini-llvm.c
src/mono/mono/mini/mini-native-types.c
src/mono/mono/mini/mini-s390x.c
src/mono/mono/mini/mini-s390x.h
src/mono/mono/mini/mini-wasm.c
src/mono/mono/mini/mini-wasm.h
src/mono/mono/mini/mini.c
src/mono/mono/mini/mini.h

index e6eed77..f43d3d2 100644 (file)
@@ -111,10 +111,7 @@ handle_enum:
        case MONO_TYPE_U8:
                return calli? OP_LCALL_REG: virt? OP_LCALL_MEMBASE: OP_LCALL;
        case MONO_TYPE_R4:
-               if (cfg->r4fp)
-                       return calli? OP_RCALL_REG: virt? OP_RCALL_MEMBASE: OP_RCALL;
-               else
-                       return calli? OP_FCALL_REG: virt? OP_FCALL_MEMBASE: OP_FCALL;
+               return calli? OP_RCALL_REG: virt? OP_RCALL_MEMBASE: OP_RCALL;
        case MONO_TYPE_R8:
                return calli? OP_FCALL_REG: virt? OP_FCALL_MEMBASE: OP_FCALL;
        case MONO_TYPE_VALUETYPE:
index 53a235f..8c9ed9d 100644 (file)
@@ -127,8 +127,7 @@ static const gint16 opt_names [] = {
        MONO_OPT_GSHARED |      \
        MONO_OPT_SIMD | \
        MONO_OPT_ALIAS_ANALYSIS | \
-       MONO_OPT_AOT | \
-       MONO_OPT_FLOAT32)
+       MONO_OPT_AOT)
 
 #define EXCLUDED_FROM_ALL (MONO_OPT_PRECOMP | MONO_OPT_UNSAFE | MONO_OPT_GSHAREDVT)
 
index fa2da0d..c3eb476 100644 (file)
@@ -115,7 +115,7 @@ llvm_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
        MonoInst *ins = NULL;
        int opcode = 0;
        // Convert Math and MathF methods into LLVM intrinsics, e.g. MathF.Sin -> @llvm.sin.f32
-       if (in_corlib && !strcmp (m_class_get_name (cmethod->klass), "MathF") && cfg->r4fp) {
+       if (in_corlib && !strcmp (m_class_get_name (cmethod->klass), "MathF")) {
                // (float)
                if (fsig->param_count == 1 && fsig->params [0]->type == MONO_TYPE_R4) {
                        if (!strcmp (cmethod->name, "Ceiling")) {
index ec22156..0d621ec 100644 (file)
@@ -335,7 +335,7 @@ handle_enum:
                return OP_LMOVE;
 #endif
        case MONO_TYPE_R4:
-               return cfg->r4fp ? OP_RMOVE : OP_FMOVE;
+               return OP_RMOVE;
        case MONO_TYPE_R8:
                return OP_FMOVE;
        case MONO_TYPE_VALUETYPE:
@@ -481,8 +481,7 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a
        MonoInst *arg1 = *arg1_ref;
        MonoInst *arg2 = *arg2_ref;
 
-       if (cfg->r4fp &&
-               ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
+       if (((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
                 (arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
                MonoInst *conv;
 
@@ -1971,8 +1970,6 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
 static MonoInst*
 convert_value (MonoCompile *cfg, MonoType *type, MonoInst *ins)
 {
-       if (!cfg->r4fp)
-               return ins;
        type = mini_get_underlying_type (type);
        switch (type->type) {
        case MONO_TYPE_R4:
@@ -4528,13 +4525,13 @@ mini_emit_init_rvar (MonoCompile *cfg, int dreg, MonoType *rtype)
                MONO_EMIT_NEW_ICONST (cfg, dreg, 0);
        } else if (t == MONO_TYPE_I8 || t == MONO_TYPE_U8) {
                MONO_EMIT_NEW_I8CONST (cfg, dreg, 0);
-       } else if (cfg->r4fp && t == MONO_TYPE_R4) {
+       } else if (t == MONO_TYPE_R4) {
                MONO_INST_NEW (cfg, ins, OP_R4CONST);
                ins->type = STACK_R4;
                ins->inst_p0 = (void*)&r4_0;
                ins->dreg = dreg;
                MONO_ADD_INS (cfg->cbb, ins);
-       } else if (t == MONO_TYPE_R4 || t == MONO_TYPE_R8) {
+       } else if (t == MONO_TYPE_R8) {
                MONO_INST_NEW (cfg, ins, OP_R8CONST);
                ins->type = STACK_R8;
                ins->inst_p0 = (void*)&r8_0;
@@ -4564,9 +4561,9 @@ emit_dummy_init_rvar (MonoCompile *cfg, int dreg, MonoType *rtype)
                MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_ICONST);
        } else if (t == MONO_TYPE_I8 || t == MONO_TYPE_U8) {
                MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_I8CONST);
-       } else if (cfg->r4fp && t == MONO_TYPE_R4) {
+       } else if (t == MONO_TYPE_R4) {
                MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R4CONST);
-       } else if (t == MONO_TYPE_R4 || t == MONO_TYPE_R8) {
+       } else if (t == MONO_TYPE_R8) {
                MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
        } else if ((t == MONO_TYPE_VALUETYPE) || (t == MONO_TYPE_TYPEDBYREF) ||
                   ((t == MONO_TYPE_GENERICINST) && mono_type_generic_inst_is_valuetype (rtype))) {
index 838fb35..304fc07 100644 (file)
@@ -5410,12 +5410,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                amd64_mov_reg_reg (code, ins->dreg, ins->sreg1, sizeof (target_mgreg_t));
                        break;
                case OP_AMD64_SET_XMMREG_R4: {
-                       if (cfg->r4fp) {
-                               if (ins->dreg != ins->sreg1)
-                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg1);
-                       } else {
-                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
-                       }
+                       if (ins->dreg != ins->sreg1)
+                               amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg1);
                        break;
                }
                case OP_AMD64_SET_XMMREG_R8: {
@@ -5924,10 +5920,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        float f = *(float *)ins->inst_p0;
 
                        if ((f == 0.0) && (mono_signbit (f) == 0)) {
-                               if (cfg->r4fp)
-                                       amd64_sse_xorps_reg_reg (code, ins->dreg, ins->dreg);
-                               else
-                                       amd64_sse_xorpd_reg_reg (code, ins->dreg, ins->dreg);
+                               amd64_sse_xorps_reg_reg (code, ins->dreg, ins->dreg);
                        } else {
                                if (cfg->compile_aot && cfg->code_exec_only) {
                                        mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_R4_GOT, ins->inst_p0);
@@ -5937,8 +5930,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                        mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_R4, ins->inst_p0);
                                        amd64_sse_movss_reg_membase (code, ins->dreg, AMD64_RIP, 0);
                                }
-                               if (!cfg->r4fp)
-                                       amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
                        }
                        break;
                }
@@ -5949,51 +5940,25 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        amd64_sse_movsd_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
                        break;
                case OP_STORER4_MEMBASE_REG:
-                       if (cfg->r4fp) {
-                               amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, ins->sreg1);
-                       } else {
-                               /* This requires a double->single conversion */
-                               amd64_sse_cvtsd2ss_reg_reg (code, MONO_ARCH_FP_SCRATCH_REG, ins->sreg1);
-                               amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, MONO_ARCH_FP_SCRATCH_REG);
-                       }
+                       amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, ins->sreg1);
                        break;
                case OP_LOADR4_MEMBASE:
-                       if (cfg->r4fp) {
-                               amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
-                       } else {
-                               amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
-                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
-                       }
+                       amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
                        break;
                case OP_ICONV_TO_R4:
-                       if (cfg->r4fp) {
-                               amd64_sse_cvtsi2ss_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
-                       } else {
-                               amd64_sse_cvtsi2ss_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
-                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
-                       }
+                       amd64_sse_cvtsi2ss_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
                        break;
                case OP_ICONV_TO_R8:
                        amd64_sse_cvtsi2sd_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
                        break;
                case OP_LCONV_TO_R4:
-                       if (cfg->r4fp) {
-                               amd64_sse_cvtsi2ss_reg_reg (code, ins->dreg, ins->sreg1);
-                       } else {
-                               amd64_sse_cvtsi2ss_reg_reg (code, ins->dreg, ins->sreg1);
-                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
-                       }
+                       amd64_sse_cvtsi2ss_reg_reg (code, ins->dreg, ins->sreg1);
                        break;
                case OP_LCONV_TO_R8:
                        amd64_sse_cvtsi2sd_reg_reg (code, ins->dreg, ins->sreg1);
                        break;
                case OP_FCONV_TO_R4:
-                       if (cfg->r4fp) {
-                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
-                       } else {
-                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
-                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
-                       }
+                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
                        break;
                case OP_FCONV_TO_I1:
                        code = emit_float_to_int (cfg, code, ins->dreg, ins->sreg1, 1, TRUE);
@@ -6101,17 +6066,10 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg1);
                        break;
                case OP_MOVE_F_TO_I4:
-                       if (cfg->r4fp) {
-                               amd64_movd_reg_xreg_size (code, ins->dreg, ins->sreg1, 8);
-                       } else {
-                               amd64_sse_cvtsd2ss_reg_reg (code, MONO_ARCH_FP_SCRATCH_REG, ins->sreg1);
-                               amd64_movd_reg_xreg_size (code, ins->dreg, MONO_ARCH_FP_SCRATCH_REG, 8);
-                       }
+                       amd64_movd_reg_xreg_size (code, ins->dreg, ins->sreg1, 8);
                        break;
                case OP_MOVE_I4_TO_F:
                        amd64_movd_xreg_reg_size (code, ins->dreg, ins->sreg1, 8);
-                       if (!cfg->r4fp)
-                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
                        break;
                case OP_MOVE_F_TO_I8:
                        amd64_movd_reg_xreg_size (code, ins->dreg, ins->sreg1, 8);
@@ -6643,12 +6601,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                }
                case OP_ATOMIC_LOAD_R4: {
-                       if (cfg->r4fp) {
-                               amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
-                       } else {
-                               amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
-                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
-                       }
+                       amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
                        break;
                }
                case OP_ATOMIC_LOAD_R8: {
@@ -6691,13 +6644,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                }
                case OP_ATOMIC_STORE_R4: {
-                       if (cfg->r4fp) {
-                               amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, ins->sreg1);
-                       } else {
-                               amd64_sse_cvtsd2ss_reg_reg (code, MONO_ARCH_FP_SCRATCH_REG, ins->sreg1);
-                               amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, MONO_ARCH_FP_SCRATCH_REG);
-                       }
-
+                       amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, ins->sreg1);
                        if (ins->backend.memory_barrier_kind == MONO_MEMORY_BARRIER_SEQ)
                                x86_mfence (code);
                        break;
@@ -7289,33 +7236,21 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_INSERTX_R4_SLOW:
                        switch (ins->inst_c0) {
                        case 0:
-                               if (cfg->r4fp)
-                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
-                               else
-                                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
+                               amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
                                break;
                        case 1:
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(1, 0, 2, 3));
-                               if (cfg->r4fp)
-                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
-                               else
-                                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
+                               amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(1, 0, 2, 3));
                                break;
                        case 2:
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(2, 1, 0, 3));
-                               if (cfg->r4fp)
-                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
-                               else
-                                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
+                               amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(2, 1, 0, 3));
                                break;
                        case 3:
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(3, 1, 2, 0));
-                               if (cfg->r4fp)
-                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
-                               else
-                                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
+                               amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(3, 1, 2, 0));
                                break;
                        }
@@ -7359,8 +7294,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                case OP_ICONV_TO_R4_RAW:
                        amd64_movd_xreg_reg_size (code, ins->dreg, ins->sreg1, 4);
-                       if (!cfg->r4fp)
-                         amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
                        break;
 
                case OP_FCONV_TO_R8_X:
@@ -7399,12 +7332,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, 0x44);
                        break;
                case OP_EXPAND_R4:
-                       if (cfg->r4fp) {
-                               amd64_sse_movsd_reg_reg (code, ins->dreg, ins->sreg1);
-                       } else {
-                               amd64_sse_movsd_reg_reg (code, ins->dreg, ins->sreg1);
-                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->dreg);
-                       }
+                       amd64_sse_movsd_reg_reg (code, ins->dreg, ins->sreg1);
                        amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, 0);
                        break;
                case OP_EXPAND_R8:
index 8872ece..8921096 100644 (file)
@@ -459,7 +459,6 @@ typedef struct {
 #define MONO_ARCH_HAVE_SDB_TRAMPOLINES 1
 #define MONO_ARCH_HAVE_OP_GENERIC_CLASS_INIT 1
 #define MONO_ARCH_HAVE_GENERAL_RGCTX_LAZY_FETCH_TRAMPOLINE 1
-#define MONO_ARCH_FLOAT32_SUPPORTED 1
 #define MONO_ARCH_LLVM_TARGET_LAYOUT "e-i64:64-i128:128-n8:16:32:64-S128"
 
 #define MONO_ARCH_HAVE_INTERP_PINVOKE_TRAMP
index 8adcaad..5a453c8 100644 (file)
@@ -4369,16 +4369,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                ARM_LDR_REG_REG (code, ins->dreg, ins->inst_basereg, ARMREG_LR);
                                break;
                        case OP_ATOMIC_LOAD_R4:
-                               if (cfg->r4fp) {
-                                       ARM_ADD_REG_REG (code, ARMREG_LR, ins->inst_basereg, ARMREG_LR);
-                                       ARM_FLDS (code, ins->dreg, ARMREG_LR, 0);
-                               } else {
-                                       code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                                       ARM_ADD_REG_REG (code, ARMREG_LR, ins->inst_basereg, ARMREG_LR);
-                                       ARM_FLDS (code, vfp_scratch1, ARMREG_LR, 0);
-                                       ARM_CVTS (code, ins->dreg, vfp_scratch1);
-                                       code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
-                               }
+                               ARM_ADD_REG_REG (code, ARMREG_LR, ins->inst_basereg, ARMREG_LR);
+                               ARM_FLDS (code, ins->dreg, ARMREG_LR, 0);
                                break;
                        case OP_ATOMIC_LOAD_R8:
                                ARM_ADD_REG_REG (code, ARMREG_LR, ins->inst_basereg, ARMREG_LR);
@@ -4417,16 +4409,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                ARM_STR_REG_REG (code, ins->sreg1, ins->inst_destbasereg, ARMREG_LR);
                                break;
                        case OP_ATOMIC_STORE_R4:
-                               if (cfg->r4fp) {
-                                       ARM_ADD_REG_REG (code, ARMREG_LR, ins->inst_destbasereg, ARMREG_LR);
-                                       ARM_FSTS (code, ins->sreg1, ARMREG_LR, 0);
-                               } else {
-                                       code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                                       ARM_ADD_REG_REG (code, ARMREG_LR, ins->inst_destbasereg, ARMREG_LR);
-                                       ARM_CVTD (code, vfp_scratch1, ins->sreg1);
-                                       ARM_FSTS (code, vfp_scratch1, ARMREG_LR, 0);
-                                       code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
-                               }
+                               ARM_ADD_REG_REG (code, ARMREG_LR, ins->inst_destbasereg, ARMREG_LR);
+                               ARM_FSTS (code, ins->sreg1, ARMREG_LR, 0);
                                break;
                        case OP_ATOMIC_STORE_R8:
                                ARM_ADD_REG_REG (code, ARMREG_LR, ins->inst_destbasereg, ARMREG_LR);
@@ -4962,32 +4946,14 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                ARM_CPYS (code, ins->dreg, ins->sreg1);
                        break;
                case OP_MOVE_F_TO_I4:
-                       if (cfg->r4fp) {
-                               ARM_FMRS (code, ins->dreg, ins->sreg1);
-                       } else {
-                               code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                               ARM_CVTD (code, vfp_scratch1, ins->sreg1);
-                               ARM_FMRS (code, ins->dreg, vfp_scratch1);
-                               code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
-                       }
+                       ARM_FMRS (code, ins->dreg, ins->sreg1);
                        break;
                case OP_MOVE_I4_TO_F:
-                       if (cfg->r4fp) {
-                               ARM_FMSR (code, ins->dreg, ins->sreg1);
-                       } else {
-                               ARM_FMSR (code, ins->dreg, ins->sreg1);
-                               ARM_CVTS (code, ins->dreg, ins->dreg);
-                       }
+                       ARM_FMSR (code, ins->dreg, ins->sreg1);
                        break;
                case OP_FCONV_TO_R4:
-                       if (IS_VFP) {
-                               if (cfg->r4fp) {
-                                       ARM_CVTD (code, ins->dreg, ins->sreg1);
-                               } else {
-                                       ARM_CVTD (code, ins->dreg, ins->sreg1);
-                                       ARM_CVTS (code, ins->dreg, ins->dreg);
-                               }
-                       }
+                       if (IS_VFP)
+                               ARM_CVTD (code, ins->dreg, ins->sreg1);
                        break;
 
                case OP_TAILCALL_PARAMETER:
@@ -5571,13 +5537,9 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                ARM_B (code, 0);
                                *(guint32*)code = ((guint32*)(ins->inst_p0))[0];
                                code += 4;
-                               if (!cfg->r4fp)
-                                       ARM_CVTS (code, ins->dreg, ins->dreg);
                        } else {
                                code = mono_arm_emit_load_imm (code, ARMREG_LR, (guint32)(gsize)ins->inst_p0);
                                ARM_FLDS (code, ins->dreg, ARMREG_LR, 0);
-                               if (!cfg->r4fp)
-                                       ARM_CVTS (code, ins->dreg, ins->dreg);
                        }
                        break;
                case OP_STORER8_MEMBASE_REG:
@@ -5602,41 +5564,18 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                case OP_STORER4_MEMBASE_REG:
                        g_assert (arm_is_fpimm8 (ins->inst_offset));
-                       if (cfg->r4fp) {
-                               ARM_FSTS (code, ins->sreg1, ins->inst_destbasereg, ins->inst_offset);
-                       } else {
-                               code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                               ARM_CVTD (code, vfp_scratch1, ins->sreg1);
-                               ARM_FSTS (code, vfp_scratch1, ins->inst_destbasereg, ins->inst_offset);
-                               code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
-                       }
+                       ARM_FSTS (code, ins->sreg1, ins->inst_destbasereg, ins->inst_offset);
                        break;
                case OP_LOADR4_MEMBASE:
-                       if (cfg->r4fp) {
-                               ARM_FLDS (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
-                       } else {
-                               g_assert (arm_is_fpimm8 (ins->inst_offset));
-                               code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                               ARM_FLDS (code, vfp_scratch1, ins->inst_basereg, ins->inst_offset);
-                               ARM_CVTS (code, ins->dreg, vfp_scratch1);
-                               code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
-                       }
+                       ARM_FLDS (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
                        break;
                case OP_ICONV_TO_R_UN: {
                        g_assert_not_reached ();
                        break;
                }
                case OP_ICONV_TO_R4:
-                       if (cfg->r4fp) {
-                               ARM_FMSR (code, ins->dreg, ins->sreg1);
-                               ARM_FSITOS (code, ins->dreg, ins->dreg);
-                       } else {
-                               code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                               ARM_FMSR (code, vfp_scratch1, ins->sreg1);
-                               ARM_FSITOS (code, vfp_scratch1, vfp_scratch1);
-                               ARM_CVTS (code, ins->dreg, vfp_scratch1);
-                               code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
-                       }
+                       ARM_FMSR (code, ins->dreg, ins->sreg1);
+                       ARM_FSITOS (code, ins->dreg, ins->dreg);
                        break;
                case OP_ICONV_TO_R8:
                        code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
@@ -5648,18 +5587,11 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_SETFRET: {
                        MonoType *sig_ret = mini_get_underlying_type (mono_method_signature_internal (cfg->method)->ret);
                        if (sig_ret->type == MONO_TYPE_R4) {
-                               if (cfg->r4fp) {
-                                       if (IS_HARD_FLOAT) {
-                                               if (ins->sreg1 != ARM_VFP_D0)
-                                                       ARM_CPYS (code, ARM_VFP_D0, ins->sreg1);
-                                       } else {
-                                               ARM_FMRS (code, ARMREG_R0, ins->sreg1);
-                                       }
+                               if (IS_HARD_FLOAT) {
+                                       if (ins->sreg1 != ARM_VFP_D0)
+                                               ARM_CPYS (code, ARM_VFP_D0, ins->sreg1);
                                } else {
-                                       ARM_CVTD (code, ARM_VFP_F0, ins->sreg1);
-
-                                       if (!IS_HARD_FLOAT)
-                                               ARM_FMRS (code, ARMREG_R0, ARM_VFP_F0);
+                                       ARM_FMRS (code, ARMREG_R0, ins->sreg1);
                                }
                        } else {
                                if (IS_HARD_FLOAT)
index 12581b1..fe33468 100644 (file)
@@ -365,7 +365,6 @@ typedef struct MonoCompileArch {
 #define MONO_ARCH_HAVE_OBJC_GET_SELECTOR 1
 #define MONO_ARCH_HAVE_SDB_TRAMPOLINES 1
 #define MONO_ARCH_HAVE_OP_GENERIC_CLASS_INIT 1
-#define MONO_ARCH_FLOAT32_SUPPORTED 1
 #define MONO_ARCH_LLVM_TARGET_LAYOUT "e-p:32:32-n32-S64"
 
 #define MONO_ARCH_HAVE_INTERP_ENTRY_TRAMPOLINE 1
index 28b97fa..6b03361 100644 (file)
@@ -2562,10 +2562,8 @@ add_outarg_reg (MonoCompile *cfg, MonoCallInst *call, ArgStorage storage, int re
        case ArgInFRegR4:
                if (COMPILE_LLVM (cfg))
                        MONO_INST_NEW (cfg, ins, OP_FMOVE);
-               else if (cfg->r4fp)
-                       MONO_INST_NEW (cfg, ins, OP_RMOVE);
                else
-                       MONO_INST_NEW (cfg, ins, OP_ARM_SETFREG_R4);
+                       MONO_INST_NEW (cfg, ins, OP_RMOVE);
                ins->dreg = mono_alloc_freg (cfg);
                ins->sreg1 = arg->dreg;
                MONO_ADD_INS (cfg->cbb, ins);
@@ -2831,10 +2829,8 @@ mono_arch_emit_setret (MonoCompile *cfg, MonoMethod *method, MonoInst *val)
        case ArgInFRegR4:
                if (COMPILE_LLVM (cfg))
                        MONO_EMIT_NEW_UNALU (cfg, OP_FMOVE, cfg->ret->dreg, val->dreg);
-               else if (cfg->r4fp)
-                       MONO_EMIT_NEW_UNALU (cfg, OP_RMOVE, cfg->ret->dreg, val->dreg);
                else
-                       MONO_EMIT_NEW_UNALU (cfg, OP_ARM_SETFREG_R4, cfg->ret->dreg, val->dreg);
+                       MONO_EMIT_NEW_UNALU (cfg, OP_RMOVE, cfg->ret->dreg, val->dreg);
                break;
        default:
                g_assert_not_reached ();
@@ -3176,10 +3172,7 @@ emit_move_return_value (MonoCompile *cfg, guint8 * code, MonoInst *ins)
                        arm_fmovd (code, call->inst.dreg, cinfo->ret.reg);
                break;
        case ArgInFRegR4:
-               if (cfg->r4fp)
-                       arm_fmovs (code, call->inst.dreg, cinfo->ret.reg);
-               else
-                       arm_fcvt_sd (code, call->inst.dreg, cinfo->ret.reg);
+               arm_fmovs (code, call->inst.dreg, cinfo->ret.reg);
                break;
        case ArgVtypeInIRegs: {
                MonoInst *loc = cfg->arch.vret_addr_loc;
@@ -4054,14 +4047,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        code = emit_addx_imm (code, ARMREG_LR, ins->inst_basereg, ins->inst_offset);
                        if (ins->backend.memory_barrier_kind == MONO_MEMORY_BARRIER_SEQ)
                                arm_dmb (code, ARM_DMB_ISH);
-                       if (cfg->r4fp) {
-                               arm_ldarw (code, ARMREG_LR, ARMREG_LR);
-                               arm_fmov_rx_to_double (code, ins->dreg, ARMREG_LR);
-                       } else {
-                               arm_ldarw (code, ARMREG_LR, ARMREG_LR);
-                               arm_fmov_rx_to_double (code, FP_TEMP_REG, ARMREG_LR);
-                               arm_fcvt_sd (code, ins->dreg, FP_TEMP_REG);
-                       }
+                       arm_ldarw (code, ARMREG_LR, ARMREG_LR);
+                       arm_fmov_rx_to_double (code, ins->dreg, ARMREG_LR);
                        break;
                }
                case OP_ATOMIC_LOAD_R8: {
@@ -4106,14 +4093,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                }
                case OP_ATOMIC_STORE_R4: {
                        code = emit_addx_imm (code, ARMREG_LR, ins->inst_destbasereg, ins->inst_offset);
-                       if (cfg->r4fp) {
-                               arm_fmov_double_to_rx (code, ARMREG_IP0, ins->sreg1);
-                               arm_stlrw (code, ARMREG_LR, ARMREG_IP0);
-                       } else {
-                               arm_fcvt_ds (code, FP_TEMP_REG, ins->sreg1);
-                               arm_fmov_double_to_rx (code, ARMREG_IP0, FP_TEMP_REG);
-                               arm_stlrw (code, ARMREG_LR, ARMREG_IP0);
-                       }
+                       arm_fmov_double_to_rx (code, ARMREG_IP0, ins->sreg1);
+                       arm_stlrw (code, ARMREG_LR, ARMREG_IP0);
                        if (ins->backend.memory_barrier_kind == MONO_MEMORY_BARRIER_SEQ)
                                arm_dmb (code, ARM_DMB_ISH);
                        break;
@@ -4143,35 +4124,20 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        guint64 imm = *(guint32*)ins->inst_p0;
 
                        code = emit_imm64 (code, ARMREG_LR, imm);
-                       if (cfg->r4fp) {
-                               arm_fmov_rx_to_double (code, dreg, ARMREG_LR);
-                       } else {
-                               arm_fmov_rx_to_double (code, FP_TEMP_REG, ARMREG_LR);
-                               arm_fcvt_sd (code, dreg, FP_TEMP_REG);
-                       }
+                       arm_fmov_rx_to_double (code, dreg, ARMREG_LR);
                        break;
                }
                case OP_LOADR8_MEMBASE:
                        code = emit_ldrfpx (code, dreg, ins->inst_basereg, ins->inst_offset);
                        break;
                case OP_LOADR4_MEMBASE:
-                       if (cfg->r4fp) {
-                               code = emit_ldrfpw (code, dreg, ins->inst_basereg, ins->inst_offset);
-                       } else {
-                               code = emit_ldrfpw (code, FP_TEMP_REG, ins->inst_basereg, ins->inst_offset);
-                               arm_fcvt_sd (code, dreg, FP_TEMP_REG);
-                       }
+                       code = emit_ldrfpw (code, dreg, ins->inst_basereg, ins->inst_offset);
                        break;
                case OP_STORER8_MEMBASE_REG:
                        code = emit_strfpx (code, sreg1, ins->inst_destbasereg, ins->inst_offset);
                        break;
                case OP_STORER4_MEMBASE_REG:
-                       if (cfg->r4fp) {
-                               code = emit_strfpw (code, sreg1, ins->inst_destbasereg, ins->inst_offset);
-                       } else {
-                               arm_fcvt_ds (code, FP_TEMP_REG, sreg1);
-                               code = emit_strfpw (code, FP_TEMP_REG, ins->inst_destbasereg, ins->inst_offset);
-                       }
+                       code = emit_strfpw (code, sreg1, ins->inst_destbasereg, ins->inst_offset);
                        break;
                case OP_FMOVE:
                        if (dreg != sreg1)
@@ -4182,20 +4148,10 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                arm_fmovs (code, dreg, sreg1);
                        break;
                case OP_MOVE_F_TO_I4:
-                       if (cfg->r4fp) {
-                               arm_fmov_double_to_rx (code, ins->dreg, ins->sreg1);
-                       } else {
-                               arm_fcvt_ds (code, ins->dreg, ins->sreg1);
-                               arm_fmov_double_to_rx (code, ins->dreg, ins->dreg);
-                       }
+                       arm_fmov_double_to_rx (code, ins->dreg, ins->sreg1);
                        break;
                case OP_MOVE_I4_TO_F:
-                       if (cfg->r4fp) {
-                               arm_fmov_rx_to_double (code, ins->dreg, ins->sreg1);
-                       } else {
-                               arm_fmov_rx_to_double (code, ins->dreg, ins->sreg1);
-                               arm_fcvt_sd (code, ins->dreg, ins->dreg);
-                       }
+                       arm_fmov_rx_to_double (code, ins->dreg, ins->sreg1);
                        break;
                case OP_MOVE_F_TO_I8:
                        arm_fmov_double_to_rx (code, ins->dreg, ins->sreg1);
@@ -4240,28 +4196,13 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        arm_fcvtzu_dx (code, dreg, sreg1);
                        break;
                case OP_FCONV_TO_R4:
-                       if (cfg->r4fp) {
-                               arm_fcvt_ds (code, dreg, sreg1);
-                       } else {
-                               arm_fcvt_ds (code, FP_TEMP_REG, sreg1);
-                               arm_fcvt_sd (code, dreg, FP_TEMP_REG);
-                       }
+                       arm_fcvt_ds (code, dreg, sreg1);
                        break;
                case OP_ICONV_TO_R4:
-                       if (cfg->r4fp) {
-                               arm_scvtf_rw_to_s (code, dreg, sreg1);
-                       } else {
-                               arm_scvtf_rw_to_s (code, FP_TEMP_REG, sreg1);
-                               arm_fcvt_sd (code, dreg, FP_TEMP_REG);
-                       }
+                       arm_scvtf_rw_to_s (code, dreg, sreg1);
                        break;
                case OP_LCONV_TO_R4:
-                       if (cfg->r4fp) {
-                               arm_scvtf_rx_to_s (code, dreg, sreg1);
-                       } else {
-                               arm_scvtf_rx_to_s (code, FP_TEMP_REG, sreg1);
-                               arm_fcvt_sd (code, dreg, FP_TEMP_REG);
-                       }
+                       arm_scvtf_rx_to_s (code, dreg, sreg1);
                        break;
                case OP_ICONV_TO_R8:
                        arm_scvtf_rw_to_d (code, dreg, sreg1);
index 8feacf8..0fb3668 100644 (file)
@@ -179,12 +179,8 @@ typedef struct {
 #define MONO_ARCH_HAVE_OP_GENERIC_CLASS_INIT 1
 #define MONO_ARCH_HAVE_OPCODE_NEEDS_EMULATION 1
 #define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS 1
-#define MONO_ARCH_FLOAT32_SUPPORTED 1
 #define MONO_ARCH_HAVE_INTERP_PINVOKE_TRAMP 1
 #define MONO_ARCH_LLVM_TARGET_LAYOUT "e-i64:64-i128:128-n32:64-S128"
-#ifdef TARGET_OSX
-#define MONO_ARCH_FORCE_FLOAT32 1
-#endif
 
 // Does the ABI have a volatile non-parameter register, so tailcall
 // can pass context to generics or interfaces?
index 4fea165..9486592 100644 (file)
@@ -913,8 +913,6 @@ llvm_type_to_stack_type (MonoCompile *cfg, LLVMTypeRef type)
                return LLVMInt32Type ();
        else if (type == LLVMInt16Type ())
                return LLVMInt32Type ();
-       else if (!cfg->r4fp && type == LLVMFloatType ())
-               return LLVMDoubleType ();
        else
                return type;
 }
@@ -5463,10 +5461,7 @@ get_float_const (MonoCompile *cfg, float val)
        if (mono_isnan (val))
                *(int *)&val = 0x7FC00000;
 #endif
-       if (cfg->r4fp)
-               return LLVMConstReal (LLVMFloatType (), val);
-       else
-               return LLVMConstFPExt (LLVMConstReal (LLVMFloatType (), val), LLVMDoubleType ());
+       return LLVMConstReal (LLVMFloatType (), val);
 }
 
 static LLVMValueRef
@@ -6526,17 +6521,11 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                case OP_ICONV_TO_R4:
                case OP_LCONV_TO_R4:
                        v = LLVMBuildSIToFP (builder, lhs, LLVMFloatType (), "");
-                       if (cfg->r4fp)
-                               values [ins->dreg] = v;
-                       else
-                               values [ins->dreg] = LLVMBuildFPExt (builder, v, LLVMDoubleType (), dname);
+                       values [ins->dreg] = v;
                        break;
                case OP_FCONV_TO_R4:
                        v = LLVMBuildFPTrunc (builder, lhs, LLVMFloatType (), "");
-                       if (cfg->r4fp)
-                               values [ins->dreg] = v;
-                       else
-                               values [ins->dreg] = LLVMBuildFPExt (builder, v, LLVMDoubleType (), dname);
+                       values [ins->dreg] = v;
                        break;
                case OP_RCONV_TO_R8:
                        values [ins->dreg] = LLVMBuildFPExt (builder, lhs, LLVMDoubleType (), dname);
@@ -6652,8 +6641,6 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                                values [ins->dreg] = LLVMBuildSExt (builder, values [ins->dreg], LLVMInt32Type (), dname);
                        else if (zext)
                                values [ins->dreg] = LLVMBuildZExt (builder, values [ins->dreg], LLVMInt32Type (), dname);
-                       else if (!cfg->r4fp && ins->opcode == OP_LOADR4_MEMBASE)
-                               values [ins->dreg] = LLVMBuildFPExt (builder, values [ins->dreg], LLVMDoubleType (), dname);
                        break;
                }
 
index a9a3a0f..7ead5bd 100644 (file)
@@ -95,7 +95,7 @@ mini_magic_type_size (MonoCompile *cfg, MonoType *type)
                return 4;
        else if (type->type == MONO_TYPE_I8 || type->type == MONO_TYPE_U8)
                return 8;
-       else if (type->type == MONO_TYPE_R4 && !m_type_is_byref (type) && (!cfg || cfg->r4fp))
+       else if (type->type == MONO_TYPE_R4 && !m_type_is_byref (type))
                return 4;
        else if (type->type == MONO_TYPE_R8 && !m_type_is_byref (type))
                return 8;
@@ -162,7 +162,7 @@ emit_widen (MonoCompile *cfg, const MagicTypeInfo *info, int sreg)
 {
        MonoInst *ins;
 
-       if (cfg->r4fp && info->conv_4_to_8 == OP_FCONV_TO_R8)
+       if (info->conv_4_to_8 == OP_FCONV_TO_R8)
                MONO_INST_NEW (cfg, ins, OP_RCONV_TO_R8);
        else
                MONO_INST_NEW (cfg, ins, info->conv_4_to_8);
@@ -182,7 +182,7 @@ emit_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsi
        int type_index;
        MonoStackType stack_type;
 
-       if (info->op_index == 2 && cfg->r4fp && TARGET_SIZEOF_VOID_P == 4) {
+       if (info->op_index == 2 && TARGET_SIZEOF_VOID_P == 4) {
                type_index = 3;
                stack_type = STACK_R4;
        } else {
index af7fb6e..49de600 100644 (file)
@@ -3467,30 +3467,18 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        s390_ldgr (code, ins->dreg, ins->sreg1);
                        break;
                case OP_MOVE_F_TO_I4:
-                       if (!cfg->r4fp) {
-                               s390_ledbr (code, s390_f0, ins->sreg1);
-                               s390_lgdr (code, ins->dreg, s390_f0);
-                       } else {
-                               s390_lgdr (code, ins->dreg, ins->sreg1);
-                       }
+                       s390_lgdr (code, ins->dreg, ins->sreg1);
                        s390_srag (code, ins->dreg, ins->dreg, 0, 32);
                        break;
                case OP_MOVE_I4_TO_F:
                        s390_slag (code, s390_r0, ins->sreg1, 0, 32);
                        s390_ldgr (code, ins->dreg, s390_r0);
-                       if (!cfg->r4fp)
-                               s390_ldebr (code, ins->dreg, ins->dreg);
                        break;
                case OP_FCONV_TO_R4:
                        s390_ledbr (code, ins->dreg, ins->sreg1);
-                       if (!cfg->r4fp)
-                               s390_ldebr (code, ins->dreg, ins->dreg);
                        break;
                case OP_S390_SETF4RET:
-                       if (!cfg->r4fp)
-                               s390_ledbr (code, ins->dreg, ins->sreg1);
-                       else
-                               s390_ldr (code, ins->dreg, ins->sreg1);
+                       s390_ldr (code, ins->dreg, ins->sreg1);
                        break;
                case OP_TLS_GET: {
                        if (s390_is_imm16 (ins->inst_offset)) {
@@ -3610,18 +3598,16 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        call = (MonoCallInst *) ins;
                        const MonoJumpInfoTarget patch = mono_call_to_patch (call);
                        code = emit_call (cfg, code, patch.type, patch.target);
-                       if (!cfg->r4fp && call->signature->ret->type == MONO_TYPE_R4)
-                               s390_ldebr (code, s390_f0, s390_f0);
                }
                        break;
-               case OP_RCALL: {
-                       call = (MonoCallInst *) ins;
-                       const MonoJumpInfoTarget patch = mono_call_to_patch (call);
-                       code = emit_call (cfg, code, patch.type, patch.target);
-                       if (ins->dreg != s390_f0)
-                               s390_ldr (code, ins->dreg, s390_f0);
-                       break;
-               }
+               case OP_RCALL: {
+                       call = (MonoCallInst *) ins;
+                       const MonoJumpInfoTarget patch = mono_call_to_patch (call);
+                       code = emit_call (cfg, code, patch.type, patch.target);
+                       if (ins->dreg != s390_f0)
+                               s390_ldr (code, ins->dreg, s390_f0);
+                       break;
+               }
                case OP_LCALL:
                case OP_VCALL:
                case OP_VCALL2:
@@ -3636,16 +3622,14 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        call = (MonoCallInst*)ins;
                        s390_lgr  (code, s390_r1, ins->sreg1);
                        s390_basr (code, s390_r14, s390_r1);
-                       if (!cfg->r4fp && call->signature->ret->type == MONO_TYPE_R4)
-                               s390_ldebr (code, s390_f0, s390_f0);
-                       break;
-               case OP_RCALL_REG:
-                       call = (MonoCallInst*)ins;
-                       s390_lgr  (code, s390_r1, ins->sreg1);
-                       s390_basr (code, s390_r14, s390_r1);
-                       if (ins->dreg != s390_f0)
-                               s390_ldr (code, ins->dreg, s390_f0);
-                        break;
+                       break;
+               case OP_RCALL_REG:
+                       call = (MonoCallInst*)ins;
+                       s390_lgr  (code, s390_r1, ins->sreg1);
+                       s390_basr (code, s390_r14, s390_r1);
+                       if (ins->dreg != s390_f0)
+                               s390_ldr (code, ins->dreg, s390_f0);
+                       break;
                case OP_LCALL_REG:
                case OP_VCALL_REG:
                case OP_VCALL2_REG:
@@ -3659,15 +3643,13 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        call = (MonoCallInst*)ins;
                        s390_lg   (code, s390_r1, 0, ins->sreg1, ins->inst_offset);
                        s390_basr (code, s390_r14, s390_r1);
-                       if (!cfg->r4fp && call->signature->ret->type == MONO_TYPE_R4)
-                               s390_ldebr (code, s390_f0, s390_f0);
-                       break;
-               case OP_RCALL_MEMBASE:
-                       call = (MonoCallInst*)ins;
-                       s390_lg   (code, s390_r1, 0, ins->sreg1, ins->inst_offset);
-                       s390_basr (code, s390_r14, s390_r1);
-                       if (ins->dreg != s390_f0)
-                               s390_ldr (code, ins->dreg, s390_f0);
+                       break;
+               case OP_RCALL_MEMBASE:
+                       call = (MonoCallInst*)ins;
+                       s390_lg   (code, s390_r1, 0, ins->sreg1, ins->inst_offset);
+                       s390_basr (code, s390_r14, s390_r1);
+                       if (ins->dreg != s390_f0)
+                               s390_ldr (code, ins->dreg, s390_f0);
                        break;
                case OP_LCALL_MEMBASE:
                case OP_VCALL_MEMBASE:
@@ -4150,22 +4132,13 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_R4CONST: {
                        float f = *(float *) ins->inst_p0;
                        if (f == 0) {
-                               if (cfg->r4fp) {
-                                       s390_lzer (code, ins->dreg);
-                                       if (mono_signbit (f) != 0)
-                                               s390_lnebr (code, ins->dreg, ins->dreg);
-                               } else {
-                                       s390_lzdr (code, ins->dreg);
-                                       if (mono_signbit (f) != 0)
-                                               s390_lndbr (code, ins->dreg, ins->dreg);
-                               }
+                               s390_lzer (code, ins->dreg);
+                               if (mono_signbit (f) != 0)
+                                       s390_lnebr (code, ins->dreg, ins->dreg);
                        } else {
                                S390_SET (code, s390_r13, ins->inst_p0);
                                s390_le (code, ins->dreg, 0, s390_r13, 0);
-                               if (!cfg->r4fp)
-                                       s390_ldebr (code, ins->dreg, ins->dreg);
-                               else
-                                       s390_le (code, ins->dreg, 0, s390_r13, 0);
+                               s390_le (code, ins->dreg, 0, s390_r13, 0);
                        }
                }
                        break;
@@ -4180,26 +4153,13 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                }
                        break;
                case OP_STORER4_MEMBASE_REG: {
-                       if (cfg->r4fp) {
-                               S390_LONG (code, stey, ste, ins->sreg1, 0,
-                                          ins->inst_destbasereg, ins->inst_offset);
-                       } else {
-                               s390_ledbr (code, ins->sreg1, ins->sreg1);
-                               S390_LONG (code, stey, ste, ins->sreg1, 0,
+                       S390_LONG (code, stey, ste, ins->sreg1, 0,
                                           ins->inst_destbasereg, ins->inst_offset);
-                               s390_ldebr (code, ins->sreg1, ins->sreg1);
-                       }
                }
                        break;
                case OP_LOADR4_MEMBASE: {
-                       if (cfg->r4fp) {
-                               S390_LONG (code, ley, le, ins->dreg, 0,
-                                          ins->inst_basereg, ins->inst_offset);
-                       } else {
-                               S390_LONG (code, ley, le, ins->dreg, 0,
+                       S390_LONG (code, ley, le, ins->dreg, 0,
                                           ins->inst_basereg, ins->inst_offset);
-                               s390_ldebr (code, ins->dreg, ins->dreg);
-                       }
                }
                        break;
                case OP_ICONV_TO_R_UN: {
@@ -4237,13 +4197,9 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                case OP_ICONV_TO_R4:
                        s390_cefbr (code, ins->dreg, ins->sreg1);
-                       if (!cfg->r4fp)
-                               s390_ldebr (code, ins->dreg, ins->dreg);
                        break;
                case OP_LCONV_TO_R4:
                        s390_cegbr (code, ins->dreg, ins->sreg1);
-                       if (!cfg->r4fp)
-                               s390_ldebr (code, ins->dreg, ins->dreg);
                        break;
                case OP_ICONV_TO_R8:
                        s390_cdfbr (code, ins->dreg, ins->sreg1);
@@ -4538,80 +4494,56 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                }
                        break;
                case OP_RCEQ: {
-                        if (cfg->r4fp)
-                                s390_cebr  (code, ins->sreg1, ins->sreg2);
-                        else
-                                s390_cdbr  (code, ins->sreg1, ins->sreg2);
+                       s390_cebr  (code, ins->sreg1, ins->sreg2);
                        s390_lghi  (code, ins->dreg, 1);
                        s390_je    (code, 4);
                        s390_lghi  (code, ins->dreg, 0);
                }
                        break;
                case OP_RCLT: {
-                        if (cfg->r4fp)
-                                s390_cebr  (code, ins->sreg1, ins->sreg2);
-                        else
-                                s390_cdbr  (code, ins->sreg1, ins->sreg2);
+                       s390_cebr  (code, ins->sreg1, ins->sreg2);
                        s390_lghi  (code, ins->dreg, 1);
                        s390_jl    (code, 4);
                        s390_lghi  (code, ins->dreg, 0);
                }
                        break;
                case OP_RCLT_UN: {
-                        if (cfg->r4fp)
-                                s390_cebr  (code, ins->sreg1, ins->sreg2);
-                        else
-                                s390_cdbr  (code, ins->sreg1, ins->sreg2);
+                       s390_cebr  (code, ins->sreg1, ins->sreg2);
                        s390_lghi  (code, ins->dreg, 1);
                        s390_jlo   (code, 4);
                        s390_lghi  (code, ins->dreg, 0);
                }
                        break;
                case OP_RCGT: {
-                        if (cfg->r4fp)
-                                s390_cebr  (code, ins->sreg1, ins->sreg2);
-                        else
-                                s390_cdbr  (code, ins->sreg1, ins->sreg2);
+                       s390_cebr  (code, ins->sreg1, ins->sreg2);
                        s390_lghi  (code, ins->dreg, 1);
                        s390_jh    (code, 4);
                        s390_lghi  (code, ins->dreg, 0);
                }
                        break;
                case OP_RCGT_UN: {
-                        if (cfg->r4fp)
-                                s390_cebr  (code, ins->sreg1, ins->sreg2);
-                        else
-                                s390_cdbr  (code, ins->sreg1, ins->sreg2);
+                       s390_cebr  (code, ins->sreg1, ins->sreg2);
                        s390_lghi  (code, ins->dreg, 1);
                        s390_jho   (code, 4);
                        s390_lghi  (code, ins->dreg, 0);
                }
                        break;
                case OP_RCNEQ: {
-                        if (cfg->r4fp)
-                                s390_cebr  (code, ins->sreg1, ins->sreg2);
-                        else
-                                s390_cdbr  (code, ins->sreg1, ins->sreg2);
+                       s390_cebr  (code, ins->sreg1, ins->sreg2);
                        s390_lghi  (code, ins->dreg, 1);
                        s390_jne   (code, 4);
                        s390_lghi  (code, ins->dreg, 0);
                }
                        break;
                case OP_RCGE: {
-                        if (cfg->r4fp)
-                                s390_cebr  (code, ins->sreg1, ins->sreg2);
-                        else
-                                s390_cdbr  (code, ins->sreg1, ins->sreg2);
+                       s390_cebr  (code, ins->sreg1, ins->sreg2);
                        s390_lghi  (code, ins->dreg, 1);
                        s390_jhe   (code, 4);
                        s390_lghi  (code, ins->dreg, 0);
                }
                        break;
                case OP_RCLE: {
-                        if (cfg->r4fp)
-                                s390_cebr  (code, ins->sreg1, ins->sreg2);
-                        else
-                                s390_cdbr  (code, ins->sreg1, ins->sreg2);
+                       s390_cebr  (code, ins->sreg1, ins->sreg2);
                        s390_lghi  (code, ins->dreg, 1);
                        s390_jle   (code, 4);
                        s390_lghi  (code, ins->dreg, 0);
@@ -5342,33 +5274,21 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_INSERTX_R4_SLOW:
                        switch (ins->inst_c0) {
                        case 0:
-                               if (cfg->r4fp)
-                                       s390x_movss (code, ins->dreg, ins->sreg2);
-                               else
-                                       s390x_cvtsd2ss (code, ins->dreg, ins->sreg2);
+                               s390x_movss (code, ins->dreg, ins->sreg2);
                                break;
                        case 1:
                                s390x_pshufd_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(1, 0, 2, 3));
-                               if (cfg->r4fp)
-                                       s390x_movss (code, ins->dreg, ins->sreg2);
-                               else
-                                       s390x_cvtsd2ss (code, ins->dreg, ins->sreg2);
+                               s390x_movss (code, ins->dreg, ins->sreg2);
                                s390x_pshufd_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(1, 0, 2, 3));
                                break;
                        case 2:
                                s390x_pshufd_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(2, 1, 0, 3));
-                               if (cfg->r4fp)
-                                       s390x_movss (code, ins->dreg, ins->sreg2);
-                               else
-                                       s390x_cvtsd2ss (code, ins->dreg, ins->sreg2);
+                               s390x_movss (code, ins->dreg, ins->sreg2);
                                s390x_pshufd_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(2, 1, 0, 3));
                                break;
                        case 3:
                                s390x_pshufd_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(3, 1, 2, 0));
-                               if (cfg->r4fp)
-                                       s390x_movss (code, ins->dreg, ins->sreg2);
-                               else
-                                       s390x_cvtsd2ss (code, ins->dreg, ins->sreg2);
+                               s390x_movss (code, ins->dreg, ins->sreg2);
                                s390x_pshufd_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(3, 1, 2, 0));
                                break;
                        }
@@ -5447,12 +5367,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        s390x_pshufd_imm (code, ins->dreg, ins->dreg, 0x44);
                        break;
                case OP_EXPAND_R4:
-                       if (cfg->r4fp) {
-                               s390x_movsd (code, ins->dreg, ins->sreg1);
-                       } else {
-                               s390x_movsd (code, ins->dreg, ins->sreg1);
-                               s390x_cvtsd2ss (code, ins->dreg, ins->dreg);
-                       }
+                       s390x_movsd (code, ins->dreg, ins->sreg1);
                        s390x_pshufd_imm (code, ins->dreg, ins->dreg, 0);
                        break;
                case OP_EXPAND_R8:
@@ -5775,8 +5690,6 @@ printf("ns: %s k: %s m: %s\n",method->klass->name_space,method->klass->name,meth
                                        s390_ldr   (code, inst->dreg, ainfo->reg);
                                }
                        } else if (ainfo->regtype == RegTypeFPR4) {
-                                       if (!cfg->r4fp)
-                                               s390_ledbr (code, inst->dreg, ainfo->reg);
                        } else if (ainfo->regtype == RegTypeBase) {
                                s390_lgr  (code, s390_r13, STK_BASE);
                                s390_aghi (code, s390_r13, alloc_size);
@@ -6254,12 +6167,8 @@ mono_arch_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMetho
                // unary float (overloaded)
                else if (fsig->param_count == 1 && fsig->params [0]->type == MONO_TYPE_R4) {
                        if (strcmp (cmethod->name, "Abs") == 0) {
-                               if (cfg->r4fp) {
-                                       opcode = OP_ABSF;
-                                       stack_type = STACK_R4;
-                               } else {
-                                       opcode = OP_ABS;
-                               }
+                               opcode = OP_ABSF;
+                               stack_type = STACK_R4;
                        }
                }
                // binary double
@@ -6272,41 +6181,20 @@ mono_arch_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMetho
                if (fsig->param_count == 1) {
                        stack_type = STACK_R4;
                        if (strcmp (cmethod->name, "Abs") == 0) {
-                               if (cfg->r4fp) {
-                                       opcode = OP_ABSF;
-                                       stack_type = STACK_R4;
-                               } else {
-                                       opcode = OP_ABS;
-                               }
+                               opcode = OP_ABSF;
+                               stack_type = STACK_R4;
                        } else if (strcmp (cmethod->name, "Ceiling") == 0) {
-                               if (cfg->r4fp) {
-                                       opcode = OP_CEILF;
-                                       stack_type = STACK_R4;
-                               } else {
-                                       opcode = OP_CEIL;
-                               }
+                               opcode = OP_CEILF;
+                               stack_type = STACK_R4;
                        } else if (strcmp (cmethod->name, "Floor") == 0) {
-                               if (cfg->r4fp) {
-                                       opcode = OP_FLOORF;
-                                       stack_type = STACK_R4;
-                               } else {
-                                       opcode = OP_FLOOR;
-                               }
+                               opcode = OP_FLOORF;
+                               stack_type = STACK_R4;
                        } else if (strcmp (cmethod->name, "Sqrt") == 0) {
-                               if (cfg->r4fp) {
-                                       opcode = OP_SQRTF;
-                                       stack_type = STACK_R4;
-                               } else {
-                                       opcode = OP_SQRT;
-                               }
+                               opcode = OP_SQRTF;
+                               stack_type = STACK_R4;
                        } else if (strcmp (cmethod->name, "Truncate") == 0) {
-                               if (cfg->r4fp) {
-                                       opcode = OP_TRUNCF;
-                                       stack_type = STACK_R4;
-                               } else {
-                                       opcode = OP_TRUNC;
-                               }
                                opcode = OP_TRUNCF;
+                               stack_type = STACK_R4;
                        }
                }
        }
index e251b8c..a4c8932 100644 (file)
@@ -83,7 +83,6 @@ struct SeqPointInfo {
 #define MONO_ARCH_HAVE_SDB_TRAMPOLINES                 1
 #define MONO_ARCH_HAVE_SETUP_RESUME_FROM_SIGNAL_HANDLER_CTX    1
 #define MONO_ARCH_HAVE_UNWIND_BACKTRACE                1
-#define MONO_ARCH_FLOAT32_SUPPORTED                    1
 
 #define S390_STACK_ALIGNMENT            8
 #define S390_FIRST_ARG_REG             s390_r2
index 4d1af4e..943d602 100644 (file)
@@ -280,7 +280,7 @@ mono_arch_emit_setret (MonoCompile *cfg, MonoMethod *method, MonoInst *val)
 
        if (!m_type_is_byref (ret)) {
                if (ret->type == MONO_TYPE_R4) {
-                       MONO_EMIT_NEW_UNALU (cfg, cfg->r4fp ? OP_RMOVE : OP_FMOVE, cfg->ret->dreg, val->dreg);
+                       MONO_EMIT_NEW_UNALU (cfg, OP_RMOVE, cfg->ret->dreg, val->dreg);
                        return;
                } else if (ret->type == MONO_TYPE_R8) {
                        MONO_EMIT_NEW_UNALU (cfg, OP_FMOVE, cfg->ret->dreg, val->dreg);
index d307077..21bcb47 100644 (file)
@@ -31,7 +31,6 @@
 #define MONO_ARCH_EMULATE_FCONV_TO_U4 1
 #define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS 1
 #define MONO_ARCH_NO_EMULATE_LONG_MUL_OPTS 1
-#define MONO_ARCH_FLOAT32_SUPPORTED 1
 
 //mini-codegen stubs - this doesn't do anything
 #define MONO_ARCH_CALLEE_REGS (1 << 0)
index bf3a2d3..3f68439 100644 (file)
@@ -3032,9 +3032,6 @@ init_backend (MonoBackend *backend)
 #ifdef MONO_ARCH_HAVE_OPTIMIZED_DIV
        backend->optimized_div = 1;
 #endif
-#ifdef MONO_ARCH_FORCE_FLOAT32
-       backend->force_float32 = 1;
-#endif
 }
 
 static gboolean
@@ -3177,13 +3174,6 @@ mini_method_compile (MonoMethod *method, guint32 opts, JitFlags flags, int parts
        try_llvm = mono_use_llvm || llvm;
 #endif
 
-#ifndef MONO_ARCH_FLOAT32_SUPPORTED
-       opts &= ~MONO_OPT_FLOAT32;
-#endif
-       if (current_backend->force_float32)
-               /* Force float32 mode on newer platforms */
-               opts |= MONO_OPT_FLOAT32;
-
  restart_compile:
        if (method_is_gshared) {
                method_to_compile = method;
@@ -3258,14 +3248,9 @@ mini_method_compile (MonoMethod *method, guint32 opts, JitFlags flags, int parts
                cfg->explicit_null_checks = FALSE;
        }
 
-       /*
-       if (!mono_debug_count ())
-               cfg->opt &= ~MONO_OPT_FLOAT32;
-       */
        if (!is_simd_supported (cfg))
                cfg->opt &= ~MONO_OPT_SIMD;
-       cfg->r4fp = (cfg->opt & MONO_OPT_FLOAT32) ? 1 : 0;
-       cfg->r4_stack_type = cfg->r4fp ? STACK_R4 : STACK_R8;
+       cfg->r4_stack_type = STACK_R4;
 
        if (cfg->gen_seq_points)
                cfg->seq_points = g_ptr_array_new ();
index 436a1aa..ade0a4c 100644 (file)
@@ -1238,7 +1238,6 @@ typedef struct {
        guint            disable_div_with_mul : 1;
        guint            explicit_null_checks : 1;
        guint            optimized_div : 1;
-       guint            force_float32 : 1;
        int              monitor_enter_adjustment;
        int              dyn_call_param_area;
 } MonoBackend;
@@ -1481,7 +1480,6 @@ typedef struct {
        guint            no_inline : 1;
        guint            gshared : 1;
        guint            gsharedvt : 1;
-       guint            r4fp : 1;
        guint            llvm_only : 1;
        guint            interp : 1;
        guint            use_current_cpu : 1;