diff options
author | Vlad Brezae <brezaevlad@gmail.com> | 2021-03-30 17:08:00 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-30 17:08:00 +0300 |
commit | 225ba3c8cb1a309513222a513db0b092bdfab2aa (patch) | |
tree | 93d4f3f7696c9d4d772eb4334e974b1957fce1a3 | |
parent | fcbc4559359cbfa26656ea6e398f47a5e86975ed (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.md | 1 | ||||
-rw-r--r-- | mono/mini/cpu-arm64.md | 1 | ||||
-rw-r--r-- | mono/mini/interp/transform.c | 7 | ||||
-rw-r--r-- | mono/mini/mini-arm.c | 1 | ||||
-rw-r--r-- | mono/mini/mini-arm64.c | 1 |
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: |