Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/mono/mono/mini/calls.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,10 +111,7 @@ ret_type_to_call_opcode (MonoCompile *cfg, MonoType *type, int calli, int virt)
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:
Expand Down
6 changes: 3 additions & 3 deletions src/mono/mono/mini/intrinsics.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -103,7 +103,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")) {
Expand DownExpand Up@@ -1524,7 +1524,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1662,7 +1662,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand Down
29 changes: 13 additions & 16 deletions src/mono/mono/mini/method-to-ir.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -337,7 +337,7 @@ mono_type_to_regmove (MonoCompile *cfg, MonoType *type)
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:
Expand DownExpand Up@@ -483,9 +483,8 @@ 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) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
if ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4)) {
MonoInst *conv;

/* Mixing r4/r8 is allowed by the spec */
Expand DownExpand Up@@ -827,7 +826,7 @@ mini_type_to_eval_stack_type (MonoCompile *cfg, MonoType *type, MonoInst *inst)
inst->type = STACK_I8;
return;
case MONO_TYPE_R4:
inst->type = GINT_TO_UINT8 (cfg->r4_stack_type);
inst->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
inst->type = STACK_R8;
Expand DownExpand Up@@ -1161,7 +1160,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->opcode += ovf2ops_op_map [src1->type];
break;
case MONO_CEE_CONV_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->opcode += unops_op_map [src1->type];
break;
case MONO_CEE_CONV_R8:
Expand DownExpand Up@@ -1219,7 +1218,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->type = STACK_I8;
break;
case OP_LOADR4_MEMBASE:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case OP_LOADR8_MEMBASE:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1434,7 +1433,7 @@ mini_type_to_stack_type (MonoCompile *cfg, MonoType *t)
case MONO_TYPE_U8:
return STACK_I8;
case MONO_TYPE_R4:
return (MonoStackType)cfg->r4_stack_type;
return (MonoStackType)STACK_R4;
case MONO_TYPE_R8:
return STACK_R8;
case MONO_TYPE_VALUETYPE:
Expand DownExpand Up@@ -1917,7 +1916,7 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
return 1;
return 0;
case MONO_TYPE_R4:
if (arg->type != cfg->r4_stack_type)
if (arg->type != STACK_R4)
return 1;
return 0;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -1980,8 +1979,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:
Expand DownExpand Up@@ -2074,7 +2071,7 @@ check_call_signature (MonoCompile *cfg, MonoMethodSignature *sig, MonoInst **arg
return TRUE;
continue;
case MONO_TYPE_R4:
if (args [i]->type != cfg->r4_stack_type)
if (args [i]->type != STACK_R4)
return TRUE;
continue;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -4639,7 +4636,7 @@ 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;
Expand DownExpand Up@@ -4675,7 +4672,7 @@ 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) {
MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
Expand DownExpand Up@@ -7281,10 +7278,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b

dreg = alloc_freg (cfg);
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADR4_MEMBASE, dreg, cons->dreg, 0);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
} else {
MONO_INST_NEW (cfg, ins, OP_R4CONST);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->dreg = alloc_dreg (cfg, STACK_R8);
ins->inst_p0 = f;
MONO_ADD_INS (cfg->cbb, ins);
Expand Down
104 changes: 16 additions & 88 deletions src/mono/mono/mini/mini-amd64.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -5350,12 +5350,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: {
Expand DownExpand Up@@ -5862,10 +5858,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);
Expand All@@ -5875,8 +5868,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;
}
Expand All@@ -5887,51 +5878,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);
Expand DownExpand Up@@ -6037,17 +6002,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);
Expand DownExpand Up@@ -6579,12 +6537,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: {
Expand DownExpand Up@@ -6630,13 +6583,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;
Expand DownExpand Up@@ -7228,33 +7175,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;
}
Expand DownExpand Up@@ -7309,8 +7244,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
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:
Expand DownExpand Up@@ -7349,12 +7282,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:
Expand Down
1 change: 0 additions & 1 deletion src/mono/mono/mini/mini-amd64.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -453,7 +453,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
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[mono] Remove the support for non r4fp, its not used by any supported platforms. by vargaz · Pull Request #82005 · dotnet/runtime · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/mono/mono/mini/calls.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,10 +111,7 @@ ret_type_to_call_opcode (MonoCompile *cfg, MonoType *type, int calli, int virt)
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:
Expand Down
6 changes: 3 additions & 3 deletions src/mono/mono/mini/intrinsics.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -103,7 +103,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")) {
Expand DownExpand Up@@ -1524,7 +1524,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1662,7 +1662,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand Down
29 changes: 13 additions & 16 deletions src/mono/mono/mini/method-to-ir.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -337,7 +337,7 @@ mono_type_to_regmove (MonoCompile *cfg, MonoType *type)
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:
Expand DownExpand Up@@ -483,9 +483,8 @@ 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) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
if ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4)) {
MonoInst *conv;

/* Mixing r4/r8 is allowed by the spec */
Expand DownExpand Up@@ -827,7 +826,7 @@ mini_type_to_eval_stack_type (MonoCompile *cfg, MonoType *type, MonoInst *inst)
inst->type = STACK_I8;
return;
case MONO_TYPE_R4:
inst->type = GINT_TO_UINT8 (cfg->r4_stack_type);
inst->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
inst->type = STACK_R8;
Expand DownExpand Up@@ -1161,7 +1160,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->opcode += ovf2ops_op_map [src1->type];
break;
case MONO_CEE_CONV_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->opcode += unops_op_map [src1->type];
break;
case MONO_CEE_CONV_R8:
Expand DownExpand Up@@ -1219,7 +1218,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->type = STACK_I8;
break;
case OP_LOADR4_MEMBASE:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case OP_LOADR8_MEMBASE:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1434,7 +1433,7 @@ mini_type_to_stack_type (MonoCompile *cfg, MonoType *t)
case MONO_TYPE_U8:
return STACK_I8;
case MONO_TYPE_R4:
return (MonoStackType)cfg->r4_stack_type;
return (MonoStackType)STACK_R4;
case MONO_TYPE_R8:
return STACK_R8;
case MONO_TYPE_VALUETYPE:
Expand DownExpand Up@@ -1917,7 +1916,7 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
return 1;
return 0;
case MONO_TYPE_R4:
if (arg->type != cfg->r4_stack_type)
if (arg->type != STACK_R4)
return 1;
return 0;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -1980,8 +1979,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:
Expand DownExpand Up@@ -2074,7 +2071,7 @@ check_call_signature (MonoCompile *cfg, MonoMethodSignature *sig, MonoInst **arg
return TRUE;
continue;
case MONO_TYPE_R4:
if (args [i]->type != cfg->r4_stack_type)
if (args [i]->type != STACK_R4)
return TRUE;
continue;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -4639,7 +4636,7 @@ 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;
Expand DownExpand Up@@ -4675,7 +4672,7 @@ 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) {
MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
Expand DownExpand Up@@ -7281,10 +7278,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b

dreg = alloc_freg (cfg);
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADR4_MEMBASE, dreg, cons->dreg, 0);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
} else {
MONO_INST_NEW (cfg, ins, OP_R4CONST);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->dreg = alloc_dreg (cfg, STACK_R8);
ins->inst_p0 = f;
MONO_ADD_INS (cfg->cbb, ins);
Expand Down
104 changes: 16 additions & 88 deletions src/mono/mono/mini/mini-amd64.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -5350,12 +5350,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: {
Expand DownExpand Up@@ -5862,10 +5858,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);
Expand All@@ -5875,8 +5868,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;
}
Expand All@@ -5887,51 +5878,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);
Expand DownExpand Up@@ -6037,17 +6002,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);
Expand DownExpand Up@@ -6579,12 +6537,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: {
Expand DownExpand Up@@ -6630,13 +6583,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;
Expand DownExpand Up@@ -7228,33 +7175,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;
}
Expand DownExpand Up@@ -7309,8 +7244,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
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:
Expand DownExpand Up@@ -7349,12 +7282,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:
Expand Down
1 change: 0 additions & 1 deletion src/mono/mono/mini/mini-amd64.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -453,7 +453,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
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [mono] Remove the support for non r4fp, its not used by any supported platforms. by vargaz · Pull Request #82005 · dotnet/runtime · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/mono/mono/mini/calls.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,10 +111,7 @@ ret_type_to_call_opcode (MonoCompile *cfg, MonoType *type, int calli, int virt)
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:
Expand Down
6 changes: 3 additions & 3 deletions src/mono/mono/mini/intrinsics.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -103,7 +103,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")) {
Expand DownExpand Up@@ -1524,7 +1524,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1662,7 +1662,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand Down
29 changes: 13 additions & 16 deletions src/mono/mono/mini/method-to-ir.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -337,7 +337,7 @@ mono_type_to_regmove (MonoCompile *cfg, MonoType *type)
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:
Expand DownExpand Up@@ -483,9 +483,8 @@ 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) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
if ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4)) {
MonoInst *conv;

/* Mixing r4/r8 is allowed by the spec */
Expand DownExpand Up@@ -827,7 +826,7 @@ mini_type_to_eval_stack_type (MonoCompile *cfg, MonoType *type, MonoInst *inst)
inst->type = STACK_I8;
return;
case MONO_TYPE_R4:
inst->type = GINT_TO_UINT8 (cfg->r4_stack_type);
inst->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
inst->type = STACK_R8;
Expand DownExpand Up@@ -1161,7 +1160,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->opcode += ovf2ops_op_map [src1->type];
break;
case MONO_CEE_CONV_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->opcode += unops_op_map [src1->type];
break;
case MONO_CEE_CONV_R8:
Expand DownExpand Up@@ -1219,7 +1218,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->type = STACK_I8;
break;
case OP_LOADR4_MEMBASE:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case OP_LOADR8_MEMBASE:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1434,7 +1433,7 @@ mini_type_to_stack_type (MonoCompile *cfg, MonoType *t)
case MONO_TYPE_U8:
return STACK_I8;
case MONO_TYPE_R4:
return (MonoStackType)cfg->r4_stack_type;
return (MonoStackType)STACK_R4;
case MONO_TYPE_R8:
return STACK_R8;
case MONO_TYPE_VALUETYPE:
Expand DownExpand Up@@ -1917,7 +1916,7 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
return 1;
return 0;
case MONO_TYPE_R4:
if (arg->type != cfg->r4_stack_type)
if (arg->type != STACK_R4)
return 1;
return 0;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -1980,8 +1979,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:
Expand DownExpand Up@@ -2074,7 +2071,7 @@ check_call_signature (MonoCompile *cfg, MonoMethodSignature *sig, MonoInst **arg
return TRUE;
continue;
case MONO_TYPE_R4:
if (args [i]->type != cfg->r4_stack_type)
if (args [i]->type != STACK_R4)
return TRUE;
continue;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -4639,7 +4636,7 @@ 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;
Expand DownExpand Up@@ -4675,7 +4672,7 @@ 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) {
MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
Expand DownExpand Up@@ -7281,10 +7278,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b

dreg = alloc_freg (cfg);
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADR4_MEMBASE, dreg, cons->dreg, 0);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
} else {
MONO_INST_NEW (cfg, ins, OP_R4CONST);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->dreg = alloc_dreg (cfg, STACK_R8);
ins->inst_p0 = f;
MONO_ADD_INS (cfg->cbb, ins);
Expand Down
104 changes: 16 additions & 88 deletions src/mono/mono/mini/mini-amd64.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -5350,12 +5350,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: {
Expand DownExpand Up@@ -5862,10 +5858,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);
Expand All@@ -5875,8 +5868,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;
}
Expand All@@ -5887,51 +5878,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);
Expand DownExpand Up@@ -6037,17 +6002,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);
Expand DownExpand Up@@ -6579,12 +6537,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: {
Expand DownExpand Up@@ -6630,13 +6583,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;
Expand DownExpand Up@@ -7228,33 +7175,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;
}
Expand DownExpand Up@@ -7309,8 +7244,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
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:
Expand DownExpand Up@@ -7349,12 +7282,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:
Expand Down
1 change: 0 additions & 1 deletion src/mono/mono/mini/mini-amd64.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -453,7 +453,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
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [mono] Remove the support for non r4fp, its not used by any supported platforms. by vargaz · Pull Request #82005 · dotnet/runtime · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/mono/mono/mini/calls.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,10 +111,7 @@ ret_type_to_call_opcode (MonoCompile *cfg, MonoType *type, int calli, int virt)
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:
Expand Down
6 changes: 3 additions & 3 deletions src/mono/mono/mini/intrinsics.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -103,7 +103,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")) {
Expand DownExpand Up@@ -1524,7 +1524,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1662,7 +1662,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand Down
29 changes: 13 additions & 16 deletions src/mono/mono/mini/method-to-ir.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -337,7 +337,7 @@ mono_type_to_regmove (MonoCompile *cfg, MonoType *type)
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:
Expand DownExpand Up@@ -483,9 +483,8 @@ 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) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
if ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4)) {
MonoInst *conv;

/* Mixing r4/r8 is allowed by the spec */
Expand DownExpand Up@@ -827,7 +826,7 @@ mini_type_to_eval_stack_type (MonoCompile *cfg, MonoType *type, MonoInst *inst)
inst->type = STACK_I8;
return;
case MONO_TYPE_R4:
inst->type = GINT_TO_UINT8 (cfg->r4_stack_type);
inst->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
inst->type = STACK_R8;
Expand DownExpand Up@@ -1161,7 +1160,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->opcode += ovf2ops_op_map [src1->type];
break;
case MONO_CEE_CONV_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->opcode += unops_op_map [src1->type];
break;
case MONO_CEE_CONV_R8:
Expand DownExpand Up@@ -1219,7 +1218,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->type = STACK_I8;
break;
case OP_LOADR4_MEMBASE:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case OP_LOADR8_MEMBASE:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1434,7 +1433,7 @@ mini_type_to_stack_type (MonoCompile *cfg, MonoType *t)
case MONO_TYPE_U8:
return STACK_I8;
case MONO_TYPE_R4:
return (MonoStackType)cfg->r4_stack_type;
return (MonoStackType)STACK_R4;
case MONO_TYPE_R8:
return STACK_R8;
case MONO_TYPE_VALUETYPE:
Expand DownExpand Up@@ -1917,7 +1916,7 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
return 1;
return 0;
case MONO_TYPE_R4:
if (arg->type != cfg->r4_stack_type)
if (arg->type != STACK_R4)
return 1;
return 0;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -1980,8 +1979,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:
Expand DownExpand Up@@ -2074,7 +2071,7 @@ check_call_signature (MonoCompile *cfg, MonoMethodSignature *sig, MonoInst **arg
return TRUE;
continue;
case MONO_TYPE_R4:
if (args [i]->type != cfg->r4_stack_type)
if (args [i]->type != STACK_R4)
return TRUE;
continue;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -4639,7 +4636,7 @@ 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;
Expand DownExpand Up@@ -4675,7 +4672,7 @@ 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) {
MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
Expand DownExpand Up@@ -7281,10 +7278,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b

dreg = alloc_freg (cfg);
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADR4_MEMBASE, dreg, cons->dreg, 0);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
} else {
MONO_INST_NEW (cfg, ins, OP_R4CONST);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->dreg = alloc_dreg (cfg, STACK_R8);
ins->inst_p0 = f;
MONO_ADD_INS (cfg->cbb, ins);
Expand Down
104 changes: 16 additions & 88 deletions src/mono/mono/mini/mini-amd64.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -5350,12 +5350,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: {
Expand DownExpand Up@@ -5862,10 +5858,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);
Expand All@@ -5875,8 +5868,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;
}
Expand All@@ -5887,51 +5878,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);
Expand DownExpand Up@@ -6037,17 +6002,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);
Expand DownExpand Up@@ -6579,12 +6537,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: {
Expand DownExpand Up@@ -6630,13 +6583,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;
Expand DownExpand Up@@ -7228,33 +7175,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;
}
Expand DownExpand Up@@ -7309,8 +7244,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
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:
Expand DownExpand Up@@ -7349,12 +7282,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:
Expand Down
1 change: 0 additions & 1 deletion src/mono/mono/mini/mini-amd64.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -453,7 +453,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
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [mono] Remove the support for non r4fp, its not used by any supported platforms. by vargaz · Pull Request #82005 · dotnet/runtime · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/mono/mono/mini/calls.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,10 +111,7 @@ ret_type_to_call_opcode (MonoCompile *cfg, MonoType *type, int calli, int virt)
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:
Expand Down
6 changes: 3 additions & 3 deletions src/mono/mono/mini/intrinsics.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -103,7 +103,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")) {
Expand DownExpand Up@@ -1524,7 +1524,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1662,7 +1662,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand Down
29 changes: 13 additions & 16 deletions src/mono/mono/mini/method-to-ir.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -337,7 +337,7 @@ mono_type_to_regmove (MonoCompile *cfg, MonoType *type)
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:
Expand DownExpand Up@@ -483,9 +483,8 @@ 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) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
if ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4)) {
MonoInst *conv;

/* Mixing r4/r8 is allowed by the spec */
Expand DownExpand Up@@ -827,7 +826,7 @@ mini_type_to_eval_stack_type (MonoCompile *cfg, MonoType *type, MonoInst *inst)
inst->type = STACK_I8;
return;
case MONO_TYPE_R4:
inst->type = GINT_TO_UINT8 (cfg->r4_stack_type);
inst->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
inst->type = STACK_R8;
Expand DownExpand Up@@ -1161,7 +1160,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->opcode += ovf2ops_op_map [src1->type];
break;
case MONO_CEE_CONV_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->opcode += unops_op_map [src1->type];
break;
case MONO_CEE_CONV_R8:
Expand DownExpand Up@@ -1219,7 +1218,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->type = STACK_I8;
break;
case OP_LOADR4_MEMBASE:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case OP_LOADR8_MEMBASE:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1434,7 +1433,7 @@ mini_type_to_stack_type (MonoCompile *cfg, MonoType *t)
case MONO_TYPE_U8:
return STACK_I8;
case MONO_TYPE_R4:
return (MonoStackType)cfg->r4_stack_type;
return (MonoStackType)STACK_R4;
case MONO_TYPE_R8:
return STACK_R8;
case MONO_TYPE_VALUETYPE:
Expand DownExpand Up@@ -1917,7 +1916,7 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
return 1;
return 0;
case MONO_TYPE_R4:
if (arg->type != cfg->r4_stack_type)
if (arg->type != STACK_R4)
return 1;
return 0;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -1980,8 +1979,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:
Expand DownExpand Up@@ -2074,7 +2071,7 @@ check_call_signature (MonoCompile *cfg, MonoMethodSignature *sig, MonoInst **arg
return TRUE;
continue;
case MONO_TYPE_R4:
if (args [i]->type != cfg->r4_stack_type)
if (args [i]->type != STACK_R4)
return TRUE;
continue;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -4639,7 +4636,7 @@ 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;
Expand DownExpand Up@@ -4675,7 +4672,7 @@ 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) {
MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
Expand DownExpand Up@@ -7281,10 +7278,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b

dreg = alloc_freg (cfg);
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADR4_MEMBASE, dreg, cons->dreg, 0);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
} else {
MONO_INST_NEW (cfg, ins, OP_R4CONST);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->dreg = alloc_dreg (cfg, STACK_R8);
ins->inst_p0 = f;
MONO_ADD_INS (cfg->cbb, ins);
Expand Down
104 changes: 16 additions & 88 deletions src/mono/mono/mini/mini-amd64.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -5350,12 +5350,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: {
Expand DownExpand Up@@ -5862,10 +5858,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);
Expand All@@ -5875,8 +5868,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;
}
Expand All@@ -5887,51 +5878,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);
Expand DownExpand Up@@ -6037,17 +6002,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);
Expand DownExpand Up@@ -6579,12 +6537,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: {
Expand DownExpand Up@@ -6630,13 +6583,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;
Expand DownExpand Up@@ -7228,33 +7175,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;
}
Expand DownExpand Up@@ -7309,8 +7244,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
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:
Expand DownExpand Up@@ -7349,12 +7282,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:
Expand Down
1 change: 0 additions & 1 deletion src/mono/mono/mini/mini-amd64.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -453,7 +453,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
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [mono] Remove the support for non r4fp, its not used by any supported platforms. by vargaz · Pull Request #82005 · dotnet/runtime · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/mono/mono/mini/calls.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,10 +111,7 @@ ret_type_to_call_opcode (MonoCompile *cfg, MonoType *type, int calli, int virt)
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:
Expand Down
6 changes: 3 additions & 3 deletions src/mono/mono/mini/intrinsics.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -103,7 +103,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")) {
Expand DownExpand Up@@ -1524,7 +1524,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1662,7 +1662,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand Down
29 changes: 13 additions & 16 deletions src/mono/mono/mini/method-to-ir.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -337,7 +337,7 @@ mono_type_to_regmove (MonoCompile *cfg, MonoType *type)
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:
Expand DownExpand Up@@ -483,9 +483,8 @@ 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) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
if ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4)) {
MonoInst *conv;

/* Mixing r4/r8 is allowed by the spec */
Expand DownExpand Up@@ -827,7 +826,7 @@ mini_type_to_eval_stack_type (MonoCompile *cfg, MonoType *type, MonoInst *inst)
inst->type = STACK_I8;
return;
case MONO_TYPE_R4:
inst->type = GINT_TO_UINT8 (cfg->r4_stack_type);
inst->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
inst->type = STACK_R8;
Expand DownExpand Up@@ -1161,7 +1160,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->opcode += ovf2ops_op_map [src1->type];
break;
case MONO_CEE_CONV_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->opcode += unops_op_map [src1->type];
break;
case MONO_CEE_CONV_R8:
Expand DownExpand Up@@ -1219,7 +1218,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->type = STACK_I8;
break;
case OP_LOADR4_MEMBASE:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case OP_LOADR8_MEMBASE:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1434,7 +1433,7 @@ mini_type_to_stack_type (MonoCompile *cfg, MonoType *t)
case MONO_TYPE_U8:
return STACK_I8;
case MONO_TYPE_R4:
return (MonoStackType)cfg->r4_stack_type;
return (MonoStackType)STACK_R4;
case MONO_TYPE_R8:
return STACK_R8;
case MONO_TYPE_VALUETYPE:
Expand DownExpand Up@@ -1917,7 +1916,7 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
return 1;
return 0;
case MONO_TYPE_R4:
if (arg->type != cfg->r4_stack_type)
if (arg->type != STACK_R4)
return 1;
return 0;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -1980,8 +1979,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:
Expand DownExpand Up@@ -2074,7 +2071,7 @@ check_call_signature (MonoCompile *cfg, MonoMethodSignature *sig, MonoInst **arg
return TRUE;
continue;
case MONO_TYPE_R4:
if (args [i]->type != cfg->r4_stack_type)
if (args [i]->type != STACK_R4)
return TRUE;
continue;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -4639,7 +4636,7 @@ 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;
Expand DownExpand Up@@ -4675,7 +4672,7 @@ 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) {
MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
Expand DownExpand Up@@ -7281,10 +7278,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b

dreg = alloc_freg (cfg);
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADR4_MEMBASE, dreg, cons->dreg, 0);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
} else {
MONO_INST_NEW (cfg, ins, OP_R4CONST);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->dreg = alloc_dreg (cfg, STACK_R8);
ins->inst_p0 = f;
MONO_ADD_INS (cfg->cbb, ins);
Expand Down
104 changes: 16 additions & 88 deletions src/mono/mono/mini/mini-amd64.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -5350,12 +5350,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: {
Expand DownExpand Up@@ -5862,10 +5858,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);
Expand All@@ -5875,8 +5868,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;
}
Expand All@@ -5887,51 +5878,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);
Expand DownExpand Up@@ -6037,17 +6002,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);
Expand DownExpand Up@@ -6579,12 +6537,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: {
Expand DownExpand Up@@ -6630,13 +6583,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;
Expand DownExpand Up@@ -7228,33 +7175,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;
}
Expand DownExpand Up@@ -7309,8 +7244,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
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:
Expand DownExpand Up@@ -7349,12 +7282,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:
Expand Down
1 change: 0 additions & 1 deletion src/mono/mono/mini/mini-amd64.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -453,7 +453,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
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); [mono] Remove the support for non r4fp, its not used by any supported platforms. by vargaz · Pull Request #82005 · dotnet/runtime · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/mono/mono/mini/calls.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,10 +111,7 @@ ret_type_to_call_opcode (MonoCompile *cfg, MonoType *type, int calli, int virt)
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:
Expand Down
6 changes: 3 additions & 3 deletions src/mono/mono/mini/intrinsics.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -103,7 +103,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")) {
Expand DownExpand Up@@ -1524,7 +1524,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1662,7 +1662,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
#endif
break;
case MONO_TYPE_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
ins->type = STACK_R8;
Expand Down
29 changes: 13 additions & 16 deletions src/mono/mono/mini/method-to-ir.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -337,7 +337,7 @@ mono_type_to_regmove (MonoCompile *cfg, MonoType *type)
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:
Expand DownExpand Up@@ -483,9 +483,8 @@ 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) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
if ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
(arg1->type == STACK_R8 && arg2->type == STACK_R4)) {
MonoInst *conv;

/* Mixing r4/r8 is allowed by the spec */
Expand DownExpand Up@@ -827,7 +826,7 @@ mini_type_to_eval_stack_type (MonoCompile *cfg, MonoType *type, MonoInst *inst)
inst->type = STACK_I8;
return;
case MONO_TYPE_R4:
inst->type = GINT_TO_UINT8 (cfg->r4_stack_type);
inst->type = GINT_TO_UINT8 (STACK_R4);
break;
case MONO_TYPE_R8:
inst->type = STACK_R8;
Expand DownExpand Up@@ -1161,7 +1160,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->opcode += ovf2ops_op_map [src1->type];
break;
case MONO_CEE_CONV_R4:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->opcode += unops_op_map [src1->type];
break;
case MONO_CEE_CONV_R8:
Expand DownExpand Up@@ -1219,7 +1218,7 @@ type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
ins->type = STACK_I8;
break;
case OP_LOADR4_MEMBASE:
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
break;
case OP_LOADR8_MEMBASE:
ins->type = STACK_R8;
Expand DownExpand Up@@ -1434,7 +1433,7 @@ mini_type_to_stack_type (MonoCompile *cfg, MonoType *t)
case MONO_TYPE_U8:
return STACK_I8;
case MONO_TYPE_R4:
return (MonoStackType)cfg->r4_stack_type;
return (MonoStackType)STACK_R4;
case MONO_TYPE_R8:
return STACK_R8;
case MONO_TYPE_VALUETYPE:
Expand DownExpand Up@@ -1917,7 +1916,7 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
return 1;
return 0;
case MONO_TYPE_R4:
if (arg->type != cfg->r4_stack_type)
if (arg->type != STACK_R4)
return 1;
return 0;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -1980,8 +1979,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:
Expand DownExpand Up@@ -2074,7 +2071,7 @@ check_call_signature (MonoCompile *cfg, MonoMethodSignature *sig, MonoInst **arg
return TRUE;
continue;
case MONO_TYPE_R4:
if (args [i]->type != cfg->r4_stack_type)
if (args [i]->type != STACK_R4)
return TRUE;
continue;
case MONO_TYPE_R8:
Expand DownExpand Up@@ -4639,7 +4636,7 @@ 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;
Expand DownExpand Up@@ -4675,7 +4672,7 @@ 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) {
MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
Expand DownExpand Up@@ -7281,10 +7278,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b

dreg = alloc_freg (cfg);
EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADR4_MEMBASE, dreg, cons->dreg, 0);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
} else {
MONO_INST_NEW (cfg, ins, OP_R4CONST);
ins->type = GINT_TO_UINT8 (cfg->r4_stack_type);
ins->type = GINT_TO_UINT8 (STACK_R4);
ins->dreg = alloc_dreg (cfg, STACK_R8);
ins->inst_p0 = f;
MONO_ADD_INS (cfg->cbb, ins);
Expand Down
104 changes: 16 additions & 88 deletions src/mono/mono/mini/mini-amd64.c
Original file line numberDiff line numberDiff line change
Expand Up@@ -5350,12 +5350,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: {
Expand DownExpand Up@@ -5862,10 +5858,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);
Expand All@@ -5875,8 +5868,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;
}
Expand All@@ -5887,51 +5878,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);
Expand DownExpand Up@@ -6037,17 +6002,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);
Expand DownExpand Up@@ -6579,12 +6537,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: {
Expand DownExpand Up@@ -6630,13 +6583,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;
Expand DownExpand Up@@ -7228,33 +7175,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;
}
Expand DownExpand Up@@ -7309,8 +7244,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
}
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:
Expand DownExpand Up@@ -7349,12 +7282,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:
Expand Down
1 change: 0 additions & 1 deletion src/mono/mono/mini/mini-amd64.h
Original file line numberDiff line numberDiff line change
Expand Up@@ -453,7 +453,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
Expand Down
Loading