Skip to content

Commit f747a30

Browse files
Added floor and ceiling intrinsics for System.Runtime.Intrinsics.Vector128 and System.Numerics.Vector (#83592)
Added floor and ceil intrinsics Signed-off-by: Vlad - Alexandru Ionescu <[email protected]>
1 parent ee41935 commit f747a30

File tree

5 files changed

+10
-1
lines changed

5 files changed

+10
-1
lines changed

src/mono/mono/arch/arm64/arm64-codegen.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,6 +1565,9 @@ arm_encode_arith_imm (int imm, guint32 *shift)
15651565
#define arm_neon_fsqrt_4s(p, rd, rn) arm_neon_2mvec_opcode ((p), VREG_FULL, 0b1, 0b10 | SIZE_1, 0b11101, (rd), (rn))
15661566
#define arm_neon_fsqrt_2d(p, rd, rn) arm_neon_2mvec_opcode ((p), VREG_FULL, 0b1, 0b10 | SIZE_2, 0b11101, (rd), (rn))
15671567

1568+
#define arm_neon_frintm(p, width, type, rd, rn) arm_neon_2mvec_opcode ((p), (width), 0b0, (type), 0b11001, (rd), (rn))
1569+
#define arm_neon_frintp(p, width, type, rd, rn) arm_neon_2mvec_opcode ((p), (width), 0b0, 0b10 | (type), 0b11000, (rd), (rn))
1570+
15681571
/* NEON :: across lanes */
15691572
#define arm_neon_xln_opcode(p, q, u, size, opcode, rd, rn) arm_neon_opcode_2reg ((p), (q), 0b00001110001100000000100000000000 | (u) << 29 | (size) << 22 | (opcode) << 12, (rd), (rn))
15701573
#define arm_neon_addv(p, width, type, rd, rn) arm_neon_xln_opcode ((p), (width), 0b0, (type), 0b11011, (rd), (rn))

src/mono/mono/mini/cpu-arm64.mdesc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,7 @@ extract_i8: dest:i src1:x len:4
513513
extract_r4: dest:f src1:x len:4
514514
extract_r8: dest:f src1:x len:4
515515
arm64_xaddv: dest:x src1:x len:8
516+
xop_ovr_x_x: dest:x src1:x len:4
516517

517518
generic_class_init: src1:a len:44 clob:c
518519
gc_safe_point: src1:i len:12 clob:c

src/mono/mono/mini/mini-arm64.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#define OPFMT_WDSS _w, dreg, sreg1, sreg2
3939
#define OPFMT_WTDS _w, _t, dreg, sreg1
4040
#define OPFMT_WTDSS _w, _t, dreg, sreg1, sreg2
41+
#define OPFMT_WTDS _w, _t, dreg, sreg1
4142
#define OPFMT_WTDSS_REV _w, _t, dreg, sreg2, sreg1
4243
#define _UNDEF(...) g_assert_not_reached ()
4344
#define _SKIP(...) goto manual_instruction_emit

src/mono/mono/mini/simd-arm64.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,6 @@ SIMD_OP (128, OP_XBINOP_FORCEINT, XBINOP_FORCEINT_OR, WDSS, arm_neo
6464
SIMD_OP (128, OP_XBINOP_FORCEINT, XBINOP_FORCEINT_XOR, WDSS, arm_neon_eor, arm_neon_eor, arm_neon_eor, arm_neon_eor, arm_neon_eor, arm_neon_eor)
6565
SIMD_OP (128, OP_ARM64_XADDV, INTRINS_AARCH64_ADV_SIMD_UADDV, WTDS, arm_neon_addv, arm_neon_addv, arm_neon_addv, _SKIP, _UNDEF, _UNDEF)
6666
SIMD_OP (128, OP_ARM64_XADDV, INTRINS_AARCH64_ADV_SIMD_SADDV, WTDS, arm_neon_addv, arm_neon_addv, arm_neon_addv, _SKIP, _UNDEF, _UNDEF)
67-
SIMD_OP (128, OP_ARM64_XADDV, INTRINS_AARCH64_ADV_SIMD_FADDV, WTDS, _UNDEF, _UNDEF, _UNDEF, _UNDEF, _SKIP, _SKIP)
67+
SIMD_OP (128, OP_ARM64_XADDV, INTRINS_AARCH64_ADV_SIMD_FADDV, WTDS, _UNDEF, _UNDEF, _UNDEF, _UNDEF, _SKIP, _SKIP)
68+
SIMD_OP (128, OP_XOP_OVR_X_X, INTRINS_AARCH64_ADV_SIMD_FRINTP, WTDS, _UNDEF, _UNDEF, _UNDEF, _UNDEF, arm_neon_frintp, arm_neon_frintp)
69+
SIMD_OP (128, OP_XOP_OVR_X_X, INTRINS_AARCH64_ADV_SIMD_FRINTM, WTDS, _UNDEF, _UNDEF, _UNDEF, _UNDEF, arm_neon_frintm, arm_neon_frintm)

src/mono/mono/mini/simd-intrinsics.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,6 +1260,8 @@ emit_sri_vector (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsi
12601260
case SN_Min:
12611261
case SN_Sum:
12621262
case SN_ToScalar:
1263+
case SN_Floor:
1264+
case SN_Ceiling:
12631265
break;
12641266
default:
12651267
return NULL;

0 commit comments

Comments
 (0)