@@ -1015,6 +1015,90 @@ pub unsafe fn vcltzq_f64(a: float64x2_t) -> uint64x2_t {
1015
1015
simd_lt ( a, transmute ( b) )
1016
1016
}
1017
1017
1018
+ /// Floating-point absolute compare greater than
1019
+ #[ inline]
1020
+ #[ target_feature( enable = "neon" ) ]
1021
+ #[ cfg_attr( test, assert_instr( facgt) ) ]
1022
+ pub unsafe fn vcagt_f64 ( a : float64x1_t , b : float64x1_t ) -> uint64x1_t {
1023
+ #[ allow( improper_ctypes) ]
1024
+ extern "C" {
1025
+ #[ cfg_attr( target_arch = "aarch64" , link_name = "llvm.aarch64.neon.facgt.v1i64.v1f64" ) ]
1026
+ fn vcagt_f64_ ( a : float64x1_t , b : float64x1_t ) -> uint64x1_t ;
1027
+ }
1028
+ vcagt_f64_ ( a, b)
1029
+ }
1030
+
1031
+ /// Floating-point absolute compare greater than
1032
+ #[ inline]
1033
+ #[ target_feature( enable = "neon" ) ]
1034
+ #[ cfg_attr( test, assert_instr( facgt) ) ]
1035
+ pub unsafe fn vcagtq_f64 ( a : float64x2_t , b : float64x2_t ) -> uint64x2_t {
1036
+ #[ allow( improper_ctypes) ]
1037
+ extern "C" {
1038
+ #[ cfg_attr( target_arch = "aarch64" , link_name = "llvm.aarch64.neon.facgt.v2i64.v2f64" ) ]
1039
+ fn vcagtq_f64_ ( a : float64x2_t , b : float64x2_t ) -> uint64x2_t ;
1040
+ }
1041
+ vcagtq_f64_ ( a, b)
1042
+ }
1043
+
1044
+ /// Floating-point absolute compare greater than or equal
1045
+ #[ inline]
1046
+ #[ target_feature( enable = "neon" ) ]
1047
+ #[ cfg_attr( test, assert_instr( facge) ) ]
1048
+ pub unsafe fn vcage_f64 ( a : float64x1_t , b : float64x1_t ) -> uint64x1_t {
1049
+ #[ allow( improper_ctypes) ]
1050
+ extern "C" {
1051
+ #[ cfg_attr( target_arch = "aarch64" , link_name = "llvm.aarch64.neon.facge.v1i64.v1f64" ) ]
1052
+ fn vcage_f64_ ( a : float64x1_t , b : float64x1_t ) -> uint64x1_t ;
1053
+ }
1054
+ vcage_f64_ ( a, b)
1055
+ }
1056
+
1057
+ /// Floating-point absolute compare greater than or equal
1058
+ #[ inline]
1059
+ #[ target_feature( enable = "neon" ) ]
1060
+ #[ cfg_attr( test, assert_instr( facge) ) ]
1061
+ pub unsafe fn vcageq_f64 ( a : float64x2_t , b : float64x2_t ) -> uint64x2_t {
1062
+ #[ allow( improper_ctypes) ]
1063
+ extern "C" {
1064
+ #[ cfg_attr( target_arch = "aarch64" , link_name = "llvm.aarch64.neon.facge.v2i64.v2f64" ) ]
1065
+ fn vcageq_f64_ ( a : float64x2_t , b : float64x2_t ) -> uint64x2_t ;
1066
+ }
1067
+ vcageq_f64_ ( a, b)
1068
+ }
1069
+
1070
+ /// Floating-point absolute compare less than
1071
+ #[ inline]
1072
+ #[ target_feature( enable = "neon" ) ]
1073
+ #[ cfg_attr( test, assert_instr( facgt) ) ]
1074
+ pub unsafe fn vcalt_f64 ( a : float64x1_t , b : float64x1_t ) -> uint64x1_t {
1075
+ vcagt_f64 ( b, a)
1076
+ }
1077
+
1078
+ /// Floating-point absolute compare less than
1079
+ #[ inline]
1080
+ #[ target_feature( enable = "neon" ) ]
1081
+ #[ cfg_attr( test, assert_instr( facgt) ) ]
1082
+ pub unsafe fn vcaltq_f64 ( a : float64x2_t , b : float64x2_t ) -> uint64x2_t {
1083
+ vcagtq_f64 ( b, a)
1084
+ }
1085
+
1086
+ /// Floating-point absolute compare less than or equal
1087
+ #[ inline]
1088
+ #[ target_feature( enable = "neon" ) ]
1089
+ #[ cfg_attr( test, assert_instr( facge) ) ]
1090
+ pub unsafe fn vcale_f64 ( a : float64x1_t , b : float64x1_t ) -> uint64x1_t {
1091
+ vcage_f64 ( b, a)
1092
+ }
1093
+
1094
+ /// Floating-point absolute compare less than or equal
1095
+ #[ inline]
1096
+ #[ target_feature( enable = "neon" ) ]
1097
+ #[ cfg_attr( test, assert_instr( facge) ) ]
1098
+ pub unsafe fn vcaleq_f64 ( a : float64x2_t , b : float64x2_t ) -> uint64x2_t {
1099
+ vcageq_f64 ( b, a)
1100
+ }
1101
+
1018
1102
/// Multiply
1019
1103
#[ inline]
1020
1104
#[ target_feature( enable = "neon" ) ]
@@ -2210,6 +2294,78 @@ mod test {
2210
2294
assert_eq ! ( r, e) ;
2211
2295
}
2212
2296
2297
+ #[ simd_test( enable = "neon" ) ]
2298
+ unsafe fn test_vcagt_f64 ( ) {
2299
+ let a: f64 = -1.2 ;
2300
+ let b: f64 = -1.1 ;
2301
+ let e: u64x1 = u64x1:: new ( 0xFF_FF_FF_FF_FF_FF_FF_FF ) ;
2302
+ let r: u64x1 = transmute ( vcagt_f64 ( transmute ( a) , transmute ( b) ) ) ;
2303
+ assert_eq ! ( r, e) ;
2304
+ }
2305
+
2306
+ #[ simd_test( enable = "neon" ) ]
2307
+ unsafe fn test_vcagtq_f64 ( ) {
2308
+ let a: f64x2 = f64x2:: new ( -1.2 , 0.0 ) ;
2309
+ let b: f64x2 = f64x2:: new ( -1.1 , 0.0 ) ;
2310
+ let e: u64x2 = u64x2:: new ( 0xFF_FF_FF_FF_FF_FF_FF_FF , 0 ) ;
2311
+ let r: u64x2 = transmute ( vcagtq_f64 ( transmute ( a) , transmute ( b) ) ) ;
2312
+ assert_eq ! ( r, e) ;
2313
+ }
2314
+
2315
+ #[ simd_test( enable = "neon" ) ]
2316
+ unsafe fn test_vcage_f64 ( ) {
2317
+ let a: f64 = -1.2 ;
2318
+ let b: f64 = -1.1 ;
2319
+ let e: u64x1 = u64x1:: new ( 0xFF_FF_FF_FF_FF_FF_FF_FF ) ;
2320
+ let r: u64x1 = transmute ( vcage_f64 ( transmute ( a) , transmute ( b) ) ) ;
2321
+ assert_eq ! ( r, e) ;
2322
+ }
2323
+
2324
+ #[ simd_test( enable = "neon" ) ]
2325
+ unsafe fn test_vcageq_f64 ( ) {
2326
+ let a: f64x2 = f64x2:: new ( -1.2 , 0.0 ) ;
2327
+ let b: f64x2 = f64x2:: new ( -1.1 , 0.0 ) ;
2328
+ let e: u64x2 = u64x2:: new ( 0xFF_FF_FF_FF_FF_FF_FF_FF , 0xFF_FF_FF_FF_FF_FF_FF_FF ) ;
2329
+ let r: u64x2 = transmute ( vcageq_f64 ( transmute ( a) , transmute ( b) ) ) ;
2330
+ assert_eq ! ( r, e) ;
2331
+ }
2332
+
2333
+ #[ simd_test( enable = "neon" ) ]
2334
+ unsafe fn test_vcalt_f64 ( ) {
2335
+ let a: f64 = -1.2 ;
2336
+ let b: f64 = -1.1 ;
2337
+ let e: u64x1 = u64x1:: new ( 0 ) ;
2338
+ let r: u64x1 = transmute ( vcalt_f64 ( transmute ( a) , transmute ( b) ) ) ;
2339
+ assert_eq ! ( r, e) ;
2340
+ }
2341
+
2342
+ #[ simd_test( enable = "neon" ) ]
2343
+ unsafe fn test_vcaltq_f64 ( ) {
2344
+ let a: f64x2 = f64x2:: new ( -1.2 , 0.0 ) ;
2345
+ let b: f64x2 = f64x2:: new ( -1.1 , 0.0 ) ;
2346
+ let e: u64x2 = u64x2:: new ( 0 , 0 ) ;
2347
+ let r: u64x2 = transmute ( vcaltq_f64 ( transmute ( a) , transmute ( b) ) ) ;
2348
+ assert_eq ! ( r, e) ;
2349
+ }
2350
+
2351
+ #[ simd_test( enable = "neon" ) ]
2352
+ unsafe fn test_vcale_f64 ( ) {
2353
+ let a: f64 = -1.2 ;
2354
+ let b: f64 = -1.1 ;
2355
+ let e: u64x1 = u64x1:: new ( 0 ) ;
2356
+ let r: u64x1 = transmute ( vcale_f64 ( transmute ( a) , transmute ( b) ) ) ;
2357
+ assert_eq ! ( r, e) ;
2358
+ }
2359
+
2360
+ #[ simd_test( enable = "neon" ) ]
2361
+ unsafe fn test_vcaleq_f64 ( ) {
2362
+ let a: f64x2 = f64x2:: new ( -1.2 , 0.0 ) ;
2363
+ let b: f64x2 = f64x2:: new ( -1.1 , 0.0 ) ;
2364
+ let e: u64x2 = u64x2:: new ( 0 , 0xFF_FF_FF_FF_FF_FF_FF_FF ) ;
2365
+ let r: u64x2 = transmute ( vcaleq_f64 ( transmute ( a) , transmute ( b) ) ) ;
2366
+ assert_eq ! ( r, e) ;
2367
+ }
2368
+
2213
2369
#[ simd_test( enable = "neon" ) ]
2214
2370
unsafe fn test_vmul_f64 ( ) {
2215
2371
let a: f64 = 1.0 ;
0 commit comments