Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Brezae <brezaevlad@gmail.com>2021-03-30 17:08:00 +0300
committerGitHub <noreply@github.com>2021-03-30 17:08:00 +0300
commit225ba3c8cb1a309513222a513db0b092bdfab2aa (patch)
tree93d4f3f7696c9d4d772eb4334e974b1957fce1a3
parentfcbc4559359cbfa26656ea6e398f47a5e86975ed (diff)
[2020-02] Backport r4-conv-i fixes (#20986)
* [mini] Add missing opcodes for r4 to native int conversions * [interp] Add handling for conv.i from r4
-rw-r--r--mono/mini/cpu-arm.md1
-rw-r--r--mono/mini/cpu-arm64.md1
-rw-r--r--mono/mini/interp/transform.c7
-rw-r--r--mono/mini/mini-arm.c1
-rw-r--r--mono/mini/mini-arm64.c1
5 files changed, 11 insertions, 0 deletions
diff --git a/mono/mini/cpu-arm.md b/mono/mini/cpu-arm.md
index f3b6641d3f5..516bbb3209d 100644
--- a/mono/mini/cpu-arm.md
+++ b/mono/mini/cpu-arm.md
@@ -227,6 +227,7 @@ rmove: dest:f src1:f len:4
r4_conv_to_i1: dest:i src1:f len:88
r4_conv_to_i2: dest:i src1:f len:88
r4_conv_to_i4: dest:i src1:f len:88
+r4_conv_to_i: dest:i src1:f len:88
r4_conv_to_u1: dest:i src1:f len:88
r4_conv_to_u2: dest:i src1:f len:88
r4_conv_to_u4: dest:i src1:f len:88
diff --git a/mono/mini/cpu-arm64.md b/mono/mini/cpu-arm64.md
index 6b8488c0468..aff89052937 100644
--- a/mono/mini/cpu-arm64.md
+++ b/mono/mini/cpu-arm64.md
@@ -229,6 +229,7 @@ r4_conv_to_u2: dest:i src1:f len:8
r4_conv_to_i4: dest:i src1:f len:8
r4_conv_to_u4: dest:i src1:f len:8
r4_conv_to_i8: dest:l src1:f len:8
+r4_conv_to_i: dest:l src1:f len:8
r4_conv_to_u8: dest:l src1:f len:8
r4_conv_to_r4: dest:f src1:f len:4
r4_conv_to_r8: dest:f src1:f len:4
diff --git a/mono/mini/interp/transform.c b/mono/mini/interp/transform.c
index 7438255c6a1..60cfb37c5a2 100644
--- a/mono/mini/interp/transform.c
+++ b/mono/mini/interp/transform.c
@@ -4203,6 +4203,13 @@ generate_code (TransformData *td, MonoMethod *method, MonoMethodHeader *header,
interp_add_ins (td, MINT_CONV_I4_R8);
#endif
break;
+ case STACK_TYPE_R4:
+#if SIZEOF_VOID_P == 8
+ interp_add_ins (td, MINT_CONV_I8_R4);
+#else
+ interp_add_ins (td, MINT_CONV_I4_R4);
+#endif
+ break;
case STACK_TYPE_I4:
#if SIZEOF_VOID_P == 8
interp_add_ins (td, MINT_CONV_I8_I4);
diff --git a/mono/mini/mini-arm.c b/mono/mini/mini-arm.c
index 00c0be5fdfe..678b4a2f77a 100644
--- a/mono/mini/mini-arm.c
+++ b/mono/mini/mini-arm.c
@@ -5909,6 +5909,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
code = emit_r4_to_int (cfg, code, ins->dreg, ins->sreg1, 2, FALSE);
break;
case OP_RCONV_TO_I4:
+ case OP_RCONV_TO_I:
code = emit_r4_to_int (cfg, code, ins->dreg, ins->sreg1, 4, TRUE);
break;
case OP_RCONV_TO_U4:
diff --git a/mono/mini/mini-arm64.c b/mono/mini/mini-arm64.c
index 2dc1a5532ef..4e3688c87d4 100644
--- a/mono/mini/mini-arm64.c
+++ b/mono/mini/mini-arm64.c
@@ -4304,6 +4304,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
arm_fcvtzu_sx (code, dreg, sreg1);
break;
case OP_RCONV_TO_I8:
+ case OP_RCONV_TO_I:
arm_fcvtzs_sx (code, dreg, sreg1);
break;
case OP_RCONV_TO_U8: