@@ -12096,6 +12096,110 @@ pub unsafe fn vsha512su1q_u64(a: uint64x2_t, b: uint64x2_t, c: uint64x2_t) -> ui
12096
12096
vsha512su1q_u64_(a, b, c)
12097
12097
}
12098
12098
12099
+ /// Floating-point round to 32-bit integer, using current rounding mode
12100
+ #[inline]
12101
+ #[target_feature(enable = "neon,frintts")]
12102
+ #[cfg_attr(test, assert_instr(frint32x))]
12103
+ pub unsafe fn vrnd32x_f32(a: float32x2_t) -> float32x2_t {
12104
+ #[allow(improper_ctypes)]
12105
+ extern "unadjusted" {
12106
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.frint32x.v2f32")]
12107
+ fn vrnd32x_f32_(a: float32x2_t) -> float32x2_t;
12108
+ }
12109
+ vrnd32x_f32_(a)
12110
+ }
12111
+
12112
+ /// Floating-point round to 32-bit integer, using current rounding mode
12113
+ #[inline]
12114
+ #[target_feature(enable = "neon,frintts")]
12115
+ #[cfg_attr(test, assert_instr(frint32x))]
12116
+ pub unsafe fn vrnd32xq_f32(a: float32x4_t) -> float32x4_t {
12117
+ #[allow(improper_ctypes)]
12118
+ extern "unadjusted" {
12119
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.frint32x.v4f32")]
12120
+ fn vrnd32xq_f32_(a: float32x4_t) -> float32x4_t;
12121
+ }
12122
+ vrnd32xq_f32_(a)
12123
+ }
12124
+
12125
+ /// Floating-point round to 32-bit integer toward zero
12126
+ #[inline]
12127
+ #[target_feature(enable = "neon,frintts")]
12128
+ #[cfg_attr(test, assert_instr(frint32z))]
12129
+ pub unsafe fn vrnd32z_f32(a: float32x2_t) -> float32x2_t {
12130
+ #[allow(improper_ctypes)]
12131
+ extern "unadjusted" {
12132
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.frint32z.v2f32")]
12133
+ fn vrnd32z_f32_(a: float32x2_t) -> float32x2_t;
12134
+ }
12135
+ vrnd32z_f32_(a)
12136
+ }
12137
+
12138
+ /// Floating-point round to 32-bit integer toward zero
12139
+ #[inline]
12140
+ #[target_feature(enable = "neon,frintts")]
12141
+ #[cfg_attr(test, assert_instr(frint32z))]
12142
+ pub unsafe fn vrnd32zq_f32(a: float32x4_t) -> float32x4_t {
12143
+ #[allow(improper_ctypes)]
12144
+ extern "unadjusted" {
12145
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.frint32z.v4f32")]
12146
+ fn vrnd32zq_f32_(a: float32x4_t) -> float32x4_t;
12147
+ }
12148
+ vrnd32zq_f32_(a)
12149
+ }
12150
+
12151
+ /// Floating-point round to 64-bit integer, using current rounding mode
12152
+ #[inline]
12153
+ #[target_feature(enable = "neon,frintts")]
12154
+ #[cfg_attr(test, assert_instr(frint64x))]
12155
+ pub unsafe fn vrnd64x_f32(a: float32x2_t) -> float32x2_t {
12156
+ #[allow(improper_ctypes)]
12157
+ extern "unadjusted" {
12158
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.frint64x.v2f32")]
12159
+ fn vrnd64x_f32_(a: float32x2_t) -> float32x2_t;
12160
+ }
12161
+ vrnd64x_f32_(a)
12162
+ }
12163
+
12164
+ /// Floating-point round to 64-bit integer, using current rounding mode
12165
+ #[inline]
12166
+ #[target_feature(enable = "neon,frintts")]
12167
+ #[cfg_attr(test, assert_instr(frint64x))]
12168
+ pub unsafe fn vrnd64xq_f32(a: float32x4_t) -> float32x4_t {
12169
+ #[allow(improper_ctypes)]
12170
+ extern "unadjusted" {
12171
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.frint64x.v4f32")]
12172
+ fn vrnd64xq_f32_(a: float32x4_t) -> float32x4_t;
12173
+ }
12174
+ vrnd64xq_f32_(a)
12175
+ }
12176
+
12177
+ /// Floating-point round to 64-bit integer toward zero
12178
+ #[inline]
12179
+ #[target_feature(enable = "neon,frintts")]
12180
+ #[cfg_attr(test, assert_instr(frint64z))]
12181
+ pub unsafe fn vrnd64z_f32(a: float32x2_t) -> float32x2_t {
12182
+ #[allow(improper_ctypes)]
12183
+ extern "unadjusted" {
12184
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.frint64z.v2f32")]
12185
+ fn vrnd64z_f32_(a: float32x2_t) -> float32x2_t;
12186
+ }
12187
+ vrnd64z_f32_(a)
12188
+ }
12189
+
12190
+ /// Floating-point round to 64-bit integer toward zero
12191
+ #[inline]
12192
+ #[target_feature(enable = "neon,frintts")]
12193
+ #[cfg_attr(test, assert_instr(frint64z))]
12194
+ pub unsafe fn vrnd64zq_f32(a: float32x4_t) -> float32x4_t {
12195
+ #[allow(improper_ctypes)]
12196
+ extern "unadjusted" {
12197
+ #[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.frint64z.v4f32")]
12198
+ fn vrnd64zq_f32_(a: float32x4_t) -> float32x4_t;
12199
+ }
12200
+ vrnd64zq_f32_(a)
12201
+ }
12202
+
12099
12203
/// Transpose vectors
12100
12204
#[inline]
12101
12205
#[target_feature(enable = "neon")]
@@ -23147,6 +23251,70 @@ mod test {
23147
23251
assert_eq!(r, e);
23148
23252
}
23149
23253
23254
+ #[simd_test(enable = "neon,frintts")]
23255
+ unsafe fn test_vrnd32x_f32() {
23256
+ let a: f32x2 = f32x2::new(1.1, 1.9);
23257
+ let e: f32x2 = f32x2::new(1.0, 2.0);
23258
+ let r: f32x2 = transmute(vrnd32x_f32(transmute(a)));
23259
+ assert_eq!(r, e);
23260
+ }
23261
+
23262
+ #[simd_test(enable = "neon,frintts")]
23263
+ unsafe fn test_vrnd32xq_f32() {
23264
+ let a: f32x4 = f32x4::new(1.1, 1.9, -1.7, -2.3);
23265
+ let e: f32x4 = f32x4::new(1.0, 2.0, -2.0, -2.0);
23266
+ let r: f32x4 = transmute(vrnd32xq_f32(transmute(a)));
23267
+ assert_eq!(r, e);
23268
+ }
23269
+
23270
+ #[simd_test(enable = "neon,frintts")]
23271
+ unsafe fn test_vrnd32z_f32() {
23272
+ let a: f32x2 = f32x2::new(1.1, 1.9);
23273
+ let e: f32x2 = f32x2::new(1.0, 1.0);
23274
+ let r: f32x2 = transmute(vrnd32z_f32(transmute(a)));
23275
+ assert_eq!(r, e);
23276
+ }
23277
+
23278
+ #[simd_test(enable = "neon,frintts")]
23279
+ unsafe fn test_vrnd32zq_f32() {
23280
+ let a: f32x4 = f32x4::new(1.1, 1.9, -1.7, -2.3);
23281
+ let e: f32x4 = f32x4::new(1.0, 1.0, -1.0, -2.0);
23282
+ let r: f32x4 = transmute(vrnd32zq_f32(transmute(a)));
23283
+ assert_eq!(r, e);
23284
+ }
23285
+
23286
+ #[simd_test(enable = "neon,frintts")]
23287
+ unsafe fn test_vrnd64x_f32() {
23288
+ let a: f32x2 = f32x2::new(1.1, 1.9);
23289
+ let e: f32x2 = f32x2::new(1.0, 2.0);
23290
+ let r: f32x2 = transmute(vrnd64x_f32(transmute(a)));
23291
+ assert_eq!(r, e);
23292
+ }
23293
+
23294
+ #[simd_test(enable = "neon,frintts")]
23295
+ unsafe fn test_vrnd64xq_f32() {
23296
+ let a: f32x4 = f32x4::new(1.1, 1.9, -1.7, -2.3);
23297
+ let e: f32x4 = f32x4::new(1.0, 2.0, -2.0, -2.0);
23298
+ let r: f32x4 = transmute(vrnd64xq_f32(transmute(a)));
23299
+ assert_eq!(r, e);
23300
+ }
23301
+
23302
+ #[simd_test(enable = "neon,frintts")]
23303
+ unsafe fn test_vrnd64z_f32() {
23304
+ let a: f32x2 = f32x2::new(1.1, 1.9);
23305
+ let e: f32x2 = f32x2::new(1.0, 1.0);
23306
+ let r: f32x2 = transmute(vrnd64z_f32(transmute(a)));
23307
+ assert_eq!(r, e);
23308
+ }
23309
+
23310
+ #[simd_test(enable = "neon,frintts")]
23311
+ unsafe fn test_vrnd64zq_f32() {
23312
+ let a: f32x4 = f32x4::new(1.1, 1.9, -1.7, -2.3);
23313
+ let e: f32x4 = f32x4::new(1.0, 1.0, -1.0, -2.0);
23314
+ let r: f32x4 = transmute(vrnd64zq_f32(transmute(a)));
23315
+ assert_eq!(r, e);
23316
+ }
23317
+
23150
23318
#[simd_test(enable = "neon")]
23151
23319
unsafe fn test_vtrn1_s8() {
23152
23320
let a: i8x8 = i8x8::new(0, 2, 4, 6, 8, 10, 12, 14);
0 commit comments