@@ -32,6 +32,14 @@ pub unsafe fn _mm_add_pi8(a: __m64, b: __m64) -> __m64 {
32
32
paddb ( a, b)
33
33
}
34
34
35
+ /// Add packed 8-bit integers in `a` and `b`.
36
+ #[ inline( always) ]
37
+ #[ target_feature = "+mmx" ]
38
+ #[ cfg_attr( test, assert_instr( paddb) ) ]
39
+ pub unsafe fn _m_paddb ( a : __m64 , b : __m64 ) -> __m64 {
40
+ _mm_add_pi8 ( a, b)
41
+ }
42
+
35
43
/// Add packed 16-bit integers in `a` and `b`.
36
44
#[ inline( always) ]
37
45
#[ target_feature = "+mmx" ]
@@ -40,6 +48,14 @@ pub unsafe fn _mm_add_pi16(a: __m64, b: __m64) -> __m64 {
40
48
paddw ( a, b)
41
49
}
42
50
51
+ /// Add packed 16-bit integers in `a` and `b`.
52
+ #[ inline( always) ]
53
+ #[ target_feature = "+mmx" ]
54
+ #[ cfg_attr( test, assert_instr( paddw) ) ]
55
+ pub unsafe fn _m_paddw ( a : __m64 , b : __m64 ) -> __m64 {
56
+ _mm_add_pi16 ( a, b)
57
+ }
58
+
43
59
/// Add packed 32-bit integers in `a` and `b`.
44
60
#[ inline( always) ]
45
61
#[ target_feature = "+mmx" ]
@@ -48,6 +64,14 @@ pub unsafe fn _mm_add_pi32(a: __m64, b: __m64) -> __m64 {
48
64
paddd ( a, b)
49
65
}
50
66
67
+ /// Add packed 32-bit integers in `a` and `b`.
68
+ #[ inline( always) ]
69
+ #[ target_feature = "+mmx" ]
70
+ #[ cfg_attr( test, assert_instr( paddd) ) ]
71
+ pub unsafe fn _m_paddd ( a : __m64 , b : __m64 ) -> __m64 {
72
+ _mm_add_pi32 ( a, b)
73
+ }
74
+
51
75
/// Add packed 8-bit integers in `a` and `b` using saturation.
52
76
#[ inline( always) ]
53
77
#[ target_feature = "+mmx" ]
@@ -56,6 +80,14 @@ pub unsafe fn _mm_adds_pi8(a: __m64, b: __m64) -> __m64 {
56
80
paddsb ( a, b)
57
81
}
58
82
83
+ /// Add packed 8-bit integers in `a` and `b` using saturation.
84
+ #[ inline( always) ]
85
+ #[ target_feature = "+mmx" ]
86
+ #[ cfg_attr( test, assert_instr( paddsb) ) ]
87
+ pub unsafe fn _m_paddsb ( a : __m64 , b : __m64 ) -> __m64 {
88
+ _mm_adds_pi8 ( a, b)
89
+ }
90
+
59
91
/// Add packed 16-bit integers in `a` and `b` using saturation.
60
92
#[ inline( always) ]
61
93
#[ target_feature = "+mmx" ]
@@ -64,6 +96,14 @@ pub unsafe fn _mm_adds_pi16(a: __m64, b: __m64) -> __m64 {
64
96
paddsw ( a, b)
65
97
}
66
98
99
+ /// Add packed 16-bit integers in `a` and `b` using saturation.
100
+ #[ inline( always) ]
101
+ #[ target_feature = "+mmx" ]
102
+ #[ cfg_attr( test, assert_instr( paddsw) ) ]
103
+ pub unsafe fn _m_paddsw ( a : __m64 , b : __m64 ) -> __m64 {
104
+ _mm_adds_pi16 ( a, b)
105
+ }
106
+
67
107
/// Add packed unsigned 8-bit integers in `a` and `b` using saturation.
68
108
#[ inline( always) ]
69
109
#[ target_feature = "+mmx" ]
@@ -72,6 +112,14 @@ pub unsafe fn _mm_adds_pu8(a: __m64, b: __m64) -> __m64 {
72
112
paddusb ( a, b)
73
113
}
74
114
115
+ /// Add packed unsigned 8-bit integers in `a` and `b` using saturation.
116
+ #[ inline( always) ]
117
+ #[ target_feature = "+mmx" ]
118
+ #[ cfg_attr( test, assert_instr( paddusb) ) ]
119
+ pub unsafe fn _m_paddusb ( a : __m64 , b : __m64 ) -> __m64 {
120
+ _mm_adds_pu8 ( a, b)
121
+ }
122
+
75
123
/// Add packed unsigned 16-bit integers in `a` and `b` using saturation.
76
124
#[ inline( always) ]
77
125
#[ target_feature = "+mmx" ]
@@ -80,6 +128,14 @@ pub unsafe fn _mm_adds_pu16(a: __m64, b: __m64) -> __m64 {
80
128
paddusw ( a, b)
81
129
}
82
130
131
+ /// Add packed unsigned 16-bit integers in `a` and `b` using saturation.
132
+ #[ inline( always) ]
133
+ #[ target_feature = "+mmx" ]
134
+ #[ cfg_attr( test, assert_instr( paddusw) ) ]
135
+ pub unsafe fn _m_paddusw ( a : __m64 , b : __m64 ) -> __m64 {
136
+ _mm_adds_pu16 ( a, b)
137
+ }
138
+
83
139
/// Subtract packed 8-bit integers in `b` from packed 8-bit integers in `a`.
84
140
#[ inline( always) ]
85
141
#[ target_feature = "+mmx" ]
@@ -444,9 +500,9 @@ mod tests {
444
500
unsafe fn _mm_add_pi8 ( ) {
445
501
let a = i8x8:: new ( -1 , -1 , 1 , 1 , -1 , 0 , 1 , 0 ) ;
446
502
let b = i8x8:: new ( -127 , 101 , 99 , 126 , 0 , -1 , 0 , 1 ) ;
447
- let r = i8x8:: from ( mmx:: _mm_add_pi8 ( a. into ( ) , b. into ( ) ) ) ;
448
503
let e = i8x8:: new ( -128 , 100 , 100 , 127 , -1 , -1 , 1 , 1 ) ;
449
- assert_eq ! ( r, e) ;
504
+ assert_eq ! ( e, i8x8:: from( mmx:: _mm_add_pi8( a. into( ) , b. into( ) ) ) ) ;
505
+ assert_eq ! ( e, i8x8:: from( mmx:: _m_paddb( a. into( ) , b. into( ) ) ) ) ;
450
506
}
451
507
452
508
#[ simd_test = "mmx" ]
@@ -458,55 +514,55 @@ mod tests {
458
514
-30001 ,
459
515
i16:: max_value ( ) - 1 ,
460
516
) ;
461
- let r = i16x4:: from ( mmx:: _mm_add_pi16 ( a. into ( ) , b. into ( ) ) ) ;
462
517
let e = i16x4:: new ( i16:: min_value ( ) , 30000 , -30000 , i16:: max_value ( ) ) ;
463
- assert_eq ! ( r, e) ;
518
+ assert_eq ! ( e, i16x4:: from( mmx:: _mm_add_pi16( a. into( ) , b. into( ) ) ) ) ;
519
+ assert_eq ! ( e, i16x4:: from( mmx:: _m_paddw( a. into( ) , b. into( ) ) ) ) ;
464
520
}
465
521
466
522
#[ simd_test = "mmx" ]
467
523
unsafe fn _mm_add_pi32 ( ) {
468
524
let a = i32x2:: new ( 1 , -1 ) ;
469
525
let b = i32x2:: new ( i32:: max_value ( ) - 1 , i32:: min_value ( ) + 1 ) ;
470
- let r = i32x2:: from ( mmx:: _mm_add_pi32 ( a. into ( ) , b. into ( ) ) ) ;
471
526
let e = i32x2:: new ( i32:: max_value ( ) , i32:: min_value ( ) ) ;
472
- assert_eq ! ( r, e) ;
527
+ assert_eq ! ( e, i32x2:: from( mmx:: _mm_add_pi32( a. into( ) , b. into( ) ) ) ) ;
528
+ assert_eq ! ( e, i32x2:: from( mmx:: _m_paddd( a. into( ) , b. into( ) ) ) ) ;
473
529
}
474
530
475
531
#[ simd_test = "mmx" ]
476
532
unsafe fn _mm_adds_pi8 ( ) {
477
533
let a = i8x8:: new ( -100 , -1 , 1 , 100 , -1 , 0 , 1 , 0 ) ;
478
534
let b = i8x8:: new ( -100 , 1 , -1 , 100 , 0 , -1 , 0 , 1 ) ;
479
- let r = i8x8:: from ( mmx:: _mm_adds_pi8 ( a. into ( ) , b. into ( ) ) ) ;
480
535
let e =
481
536
i8x8:: new ( i8:: min_value ( ) , 0 , 0 , i8:: max_value ( ) , -1 , -1 , 1 , 1 ) ;
482
- assert_eq ! ( r, e) ;
537
+ assert_eq ! ( e, i8x8:: from( mmx:: _mm_adds_pi8( a. into( ) , b. into( ) ) ) ) ;
538
+ assert_eq ! ( e, i8x8:: from( mmx:: _m_paddsb( a. into( ) , b. into( ) ) ) ) ;
483
539
}
484
540
485
541
#[ simd_test = "mmx" ]
486
542
unsafe fn _mm_adds_pi16 ( ) {
487
543
let a = i16x4:: new ( -32000 , 32000 , 4 , 0 ) ;
488
544
let b = i16x4:: new ( -32000 , 32000 , -5 , 1 ) ;
489
- let r = i16x4:: from ( mmx:: _mm_adds_pi16 ( a. into ( ) , b. into ( ) ) ) ;
490
545
let e = i16x4:: new ( i16:: min_value ( ) , i16:: max_value ( ) , -1 , 1 ) ;
491
- assert_eq ! ( r, e) ;
546
+ assert_eq ! ( e, i16x4:: from( mmx:: _mm_adds_pi16( a. into( ) , b. into( ) ) ) ) ;
547
+ assert_eq ! ( e, i16x4:: from( mmx:: _m_paddsw( a. into( ) , b. into( ) ) ) ) ;
492
548
}
493
549
494
550
#[ simd_test = "mmx" ]
495
551
unsafe fn _mm_adds_pu8 ( ) {
496
552
let a = u8x8:: new ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 200 ) ;
497
553
let b = u8x8:: new ( 0 , 10 , 20 , 30 , 40 , 50 , 60 , 200 ) ;
498
- let r = u8x8:: from ( mmx:: _mm_adds_pu8 ( a. into ( ) , b. into ( ) ) ) ;
499
554
let e = u8x8:: new ( 0 , 11 , 22 , 33 , 44 , 55 , 66 , u8:: max_value ( ) ) ;
500
- assert_eq ! ( r, e) ;
555
+ assert_eq ! ( e, u8x8:: from( mmx:: _mm_adds_pu8( a. into( ) , b. into( ) ) ) ) ;
556
+ assert_eq ! ( e, u8x8:: from( mmx:: _m_paddusb( a. into( ) , b. into( ) ) ) ) ;
501
557
}
502
558
503
559
#[ simd_test = "mmx" ]
504
560
unsafe fn _mm_adds_pu16 ( ) {
505
561
let a = u16x4:: new ( 0 , 1 , 2 , 60000 ) ;
506
562
let b = u16x4:: new ( 0 , 10 , 20 , 60000 ) ;
507
- let r = u16x4:: from ( mmx:: _mm_adds_pu16 ( a. into ( ) , b. into ( ) ) ) ;
508
563
let e = u16x4:: new ( 0 , 11 , 22 , u16:: max_value ( ) ) ;
509
- assert_eq ! ( r, e) ;
564
+ assert_eq ! ( e, u16x4:: from( mmx:: _mm_adds_pu16( a. into( ) , b. into( ) ) ) ) ;
565
+ assert_eq ! ( e, u16x4:: from( mmx:: _m_paddusw( a. into( ) , b. into( ) ) ) ) ;
510
566
}
511
567
512
568
#[ simd_test = "mmx" ]
0 commit comments