@@ -1122,61 +1122,38 @@ define <4 x i32> @usubo_v4i24(<4 x i24> %a0, <4 x i24> %a1, ptr %p2) nounwind {
1122
1122
define <4 x i32 > @usubo_v4i1 (<4 x i1 > %a0 , <4 x i1 > %a1 , ptr %p2 ) nounwind {
1123
1123
; SSE-LABEL: usubo_v4i1:
1124
1124
; SSE: # %bb.0:
1125
- ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [1,1,1,1]
1126
- ; SSE-NEXT: pand %xmm2, %xmm1
1127
- ; SSE-NEXT: pand %xmm2, %xmm0
1128
- ; SSE-NEXT: psubd %xmm1, %xmm0
1129
- ; SSE-NEXT: pand %xmm0, %xmm2
1130
- ; SSE-NEXT: pcmpeqd %xmm0, %xmm2
1131
- ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
1132
- ; SSE-NEXT: pxor %xmm2, %xmm1
1125
+ ; SSE-NEXT: movdqa %xmm0, %xmm2
1126
+ ; SSE-NEXT: pxor %xmm1, %xmm2
1127
+ ; SSE-NEXT: pslld $31, %xmm2
1128
+ ; SSE-NEXT: movmskps %xmm2, %eax
1129
+ ; SSE-NEXT: pandn %xmm1, %xmm0
1133
1130
; SSE-NEXT: pslld $31, %xmm0
1134
- ; SSE-NEXT: movmskps %xmm0 , %eax
1131
+ ; SSE-NEXT: psrad $31 , %xmm0
1135
1132
; SSE-NEXT: movb %al, (%rdi)
1136
- ; SSE-NEXT: movdqa %xmm1, %xmm0
1137
1133
; SSE-NEXT: retq
1138
1134
;
1139
- ; AVX1-LABEL: usubo_v4i1:
1140
- ; AVX1: # %bb.0:
1141
- ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [1,1,1,1]
1142
- ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm1
1143
- ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
1144
- ; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm1
1145
- ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm0
1146
- ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
1147
- ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
1148
- ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0
1149
- ; AVX1-NEXT: vpslld $31, %xmm1, %xmm1
1150
- ; AVX1-NEXT: vmovmskps %xmm1, %eax
1151
- ; AVX1-NEXT: movb %al, (%rdi)
1152
- ; AVX1-NEXT: retq
1153
- ;
1154
- ; AVX2-LABEL: usubo_v4i1:
1155
- ; AVX2: # %bb.0:
1156
- ; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm2 = [1,1,1,1]
1157
- ; AVX2-NEXT: vpand %xmm2, %xmm1, %xmm1
1158
- ; AVX2-NEXT: vpand %xmm2, %xmm0, %xmm0
1159
- ; AVX2-NEXT: vpsubd %xmm1, %xmm0, %xmm1
1160
- ; AVX2-NEXT: vpand %xmm2, %xmm1, %xmm0
1161
- ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
1162
- ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
1163
- ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
1164
- ; AVX2-NEXT: vpslld $31, %xmm1, %xmm1
1165
- ; AVX2-NEXT: vmovmskps %xmm1, %eax
1166
- ; AVX2-NEXT: movb %al, (%rdi)
1167
- ; AVX2-NEXT: retq
1135
+ ; AVX-LABEL: usubo_v4i1:
1136
+ ; AVX: # %bb.0:
1137
+ ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm2
1138
+ ; AVX-NEXT: vpslld $31, %xmm2, %xmm2
1139
+ ; AVX-NEXT: vmovmskps %xmm2, %eax
1140
+ ; AVX-NEXT: vpandn %xmm1, %xmm0, %xmm0
1141
+ ; AVX-NEXT: vpslld $31, %xmm0, %xmm0
1142
+ ; AVX-NEXT: vpsrad $31, %xmm0, %xmm0
1143
+ ; AVX-NEXT: movb %al, (%rdi)
1144
+ ; AVX-NEXT: retq
1168
1145
;
1169
1146
; AVX512-LABEL: usubo_v4i1:
1170
1147
; AVX512: # %bb.0:
1171
1148
; AVX512-NEXT: vpslld $31, %xmm0, %xmm0
1172
1149
; AVX512-NEXT: vptestmd %xmm0, %xmm0, %k0
1173
1150
; AVX512-NEXT: vpslld $31, %xmm1, %xmm1
1174
1151
; AVX512-NEXT: vptestmd %xmm1, %xmm1, %k1
1175
- ; AVX512-NEXT: kxorw %k1, %k0, %k1
1176
- ; AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k2 {%k1}
1152
+ ; AVX512-NEXT: kxorw %k1, %k0, %k0
1153
+ ; AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k1 {%k1}
1177
1154
; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
1178
- ; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k2 } {z}
1179
- ; AVX512-NEXT: kshiftlw $12, %k1 , %k0
1155
+ ; AVX512-NEXT: vmovdqa32 %xmm0, %xmm0 {%k1 } {z}
1156
+ ; AVX512-NEXT: kshiftlw $12, %k0 , %k0
1180
1157
; AVX512-NEXT: kshiftrw $12, %k0, %k0
1181
1158
; AVX512-NEXT: kmovd %k0, %eax
1182
1159
; AVX512-NEXT: movb %al, (%rdi)
0 commit comments