Skip to content

Commit 11ee0c4

Browse files
committed
update test
1 parent 6c1e225 commit 11ee0c4

File tree

2 files changed

+26
-26
lines changed

2 files changed

+26
-26
lines changed

src/shims/x86/avx512.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ pub(super) trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
5151
// Compute one lane with ternary table.
5252
let tern = |xa: u32, xb: u32, xc: u32, imm: u32| -> u32 {
5353
let mut out = 0u32;
54-
// For each bit position, select bit from imm8 at index = a | (b<<1) | (c<<2)
54+
// At each bit position, select bit from imm8 at index = (a << 2) | (b << 1) | c
5555
for bit in 0..32 {
5656
let ia = (xa >> bit) & 1;
5757
let ib = (xb >> bit) & 1;
5858
let ic = (xc >> bit) & 1;
59-
let idx = ia | (ib << 1) | (ic << 2);
59+
let idx = (ia << 2) | (ib << 1) | ic;
6060
let v = (imm >> idx) & 1;
6161
out |= v << bit;
6262
}

tests/pass/shims/x86/intrinsics-x86-avx512.rs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -197,21 +197,21 @@ unsafe fn test_avx512ternarylogic() {
197197
#[target_feature(enable = "avx512f")]
198198
unsafe fn test_mm512_ternarylogic_epi32() {
199199
let a = _mm512_set4_epi32(0b100, 0b110, 0b001, 0b101);
200-
let b = _mm512_set4_epi32(0b010, 0b011, 0b001, 0b101);
201-
let c = _mm512_set4_epi32(0b001, 0b000, 0b001, 0b101);
200+
let b = _mm512_set4_epi32(0b010, 0b011, 0b001, 0b110);
201+
let c = _mm512_set4_epi32(0b001, 0b000, 0b001, 0b111);
202202

203203
// Identity of A.
204-
let r = _mm512_ternarylogic_epi32::<0b1010_1010>(a, b, c);
204+
let r = _mm512_ternarylogic_epi32::<0b1111_0000>(a, b, c);
205205
assert_eq_m512i(r, a);
206206

207-
// Bitwise or.
208-
let r = _mm512_ternarylogic_epi32::<0b1111_1110>(a, b, c);
209-
let e = _mm512_set4_epi32(0b111, 0b111, 0b001, 0b101);
207+
// Bitwise xor.
208+
let r = _mm512_ternarylogic_epi32::<0b10010110>(a, b, c);
209+
let e = _mm512_set4_epi32(0b111, 0b101, 0b001, 0b100);
210210
assert_eq_m512i(r, e);
211211

212-
// Majority.
212+
// Majority (2 or more bits set).
213213
let r = _mm512_ternarylogic_epi32::<0b1110_1000>(a, b, c);
214-
let e = _mm512_set4_epi32(0b000, 0b010, 0b001, 0b101);
214+
let e = _mm512_set4_epi32(0b000, 0b010, 0b001, 0b111);
215215
assert_eq_m512i(r, e);
216216
}
217217
test_mm512_ternarylogic_epi32();
@@ -221,43 +221,43 @@ unsafe fn test_avx512ternarylogic() {
221221
let _mm256_set4_epi32 = |a, b, c, d| _mm256_setr_epi32(a, b, c, d, a, b, c, d);
222222

223223
let a = _mm256_set4_epi32(0b100, 0b110, 0b001, 0b101);
224-
let b = _mm256_set4_epi32(0b010, 0b011, 0b001, 0b101);
225-
let c = _mm256_set4_epi32(0b001, 0b000, 0b001, 0b101);
224+
let b = _mm256_set4_epi32(0b010, 0b011, 0b001, 0b110);
225+
let c = _mm256_set4_epi32(0b001, 0b000, 0b001, 0b111);
226226

227227
// Identity of A.
228-
let r = _mm256_ternarylogic_epi32::<0b1010_1010>(a, b, c);
228+
let r = _mm256_ternarylogic_epi32::<0b1111_0000>(a, b, c);
229229
assert_eq_m256i(r, a);
230230

231-
// Bitwise or.
232-
let r = _mm256_ternarylogic_epi32::<0b1111_1110>(a, b, c);
233-
let e = _mm256_set4_epi32(0b111, 0b111, 0b001, 0b101);
231+
// Bitwise xor.
232+
let r = _mm256_ternarylogic_epi32::<0b10010110>(a, b, c);
233+
let e = _mm256_set4_epi32(0b111, 0b101, 0b001, 0b100);
234234
assert_eq_m256i(r, e);
235235

236-
// Majority.
236+
// Majority (2 or more bits set).
237237
let r = _mm256_ternarylogic_epi32::<0b1110_1000>(a, b, c);
238-
let e = _mm256_set4_epi32(0b000, 0b010, 0b001, 0b101);
238+
let e = _mm256_set4_epi32(0b000, 0b010, 0b001, 0b111);
239239
assert_eq_m256i(r, e);
240240
}
241241
test_mm256_ternarylogic_epi32();
242242

243243
#[target_feature(enable = "avx512f,avx512vl")]
244244
unsafe fn test_mm_ternarylogic_epi32() {
245245
let a = _mm_setr_epi32(0b100, 0b110, 0b001, 0b101);
246-
let b = _mm_setr_epi32(0b010, 0b011, 0b001, 0b101);
247-
let c = _mm_setr_epi32(0b001, 0b000, 0b001, 0b101);
246+
let b = _mm_setr_epi32(0b010, 0b011, 0b001, 0b110);
247+
let c = _mm_setr_epi32(0b001, 0b000, 0b001, 0b111);
248248

249249
// Identity of A.
250-
let r = _mm_ternarylogic_epi32::<0b1010_1010>(a, b, c);
250+
let r = _mm_ternarylogic_epi32::<0b1111_0000>(a, b, c);
251251
assert_eq_m128i(r, a);
252252

253-
// Bitwise or.
254-
let r = _mm_ternarylogic_epi32::<0b1111_1110>(a, b, c);
255-
let e = _mm_setr_epi32(0b111, 0b111, 0b001, 0b101);
253+
// Bitwise xor.
254+
let r = _mm_ternarylogic_epi32::<0b10010110>(a, b, c);
255+
let e = _mm_setr_epi32(0b111, 0b101, 0b001, 0b100);
256256
assert_eq_m128i(r, e);
257257

258-
// Majority.
258+
// Majority (2 or more bits set).
259259
let r = _mm_ternarylogic_epi32::<0b1110_1000>(a, b, c);
260-
let e = _mm_setr_epi32(0b000, 0b010, 0b001, 0b101);
260+
let e = _mm_setr_epi32(0b000, 0b010, 0b001, 0b111);
261261
assert_eq_m128i(r, e);
262262
}
263263
test_mm_ternarylogic_epi32();

0 commit comments

Comments
 (0)