Core: Developing SIMD

This commit is contained in:
Mirek Fidler 2025-04-10 07:52:53 +02:00
parent 860777e329
commit 655233f338
2 changed files with 22 additions and 21 deletions

View file

@ -1,4 +1,4 @@
* C:\upp\out\autotest\CLANGx64.Debug.Debug_Full\SIMD_CMP.exe 10.04.2025 07:43:11, user: mirek
* C:\upp\out\autotest\CLANGx64.Debug.Debug_Full\SIMD_CMP.exe 10.04.2025 07:52:02, user: mirek
=============== f32x4
a = 9 9 9 9
@ -303,7 +303,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 15
FirstTrue(c == a) = 0
FirstTrue(c == a) = 1
FirstFalse(c == a) = 0
matches = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 0 . 0 0 0 0 . 0 0 0 9
@ -319,7 +319,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 14
FirstTrue(c == a) = 1
FirstTrue(c == a) = 2
FirstFalse(c == a) = 0
matches = 2 3 4 5 6 7 8 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 0 . 0 0 0 0 . 0 0 9 9
@ -335,7 +335,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 13
FirstTrue(c == a) = 1
FirstTrue(c == a) = 3
FirstFalse(c == a) = 0
matches = 3 4 5 6 7 8 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 0 . 0 0 0 0 . 0 9 9 9
@ -351,7 +351,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 12
FirstTrue(c == a) = 2
FirstTrue(c == a) = 4
FirstFalse(c == a) = 0
matches = 4 5 6 7 8 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 0 . 0 0 0 0 . 9 9 9 9
@ -367,7 +367,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 11
FirstTrue(c == a) = 2
FirstTrue(c == a) = 5
FirstFalse(c == a) = 0
matches = 5 6 7 8 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 0 . 0 0 0 9 . 9 9 9 9
@ -383,7 +383,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 10
FirstTrue(c == a) = 3
FirstTrue(c == a) = 6
FirstFalse(c == a) = 0
matches = 6 7 8 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 0 . 0 0 9 9 . 9 9 9 9
@ -399,7 +399,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 9
FirstTrue(c == a) = 3
FirstTrue(c == a) = 7
FirstFalse(c == a) = 0
matches = 7 8 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 0 . 0 9 9 9 . 9 9 9 9
@ -415,7 +415,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 8
FirstTrue(c == a) = 4
FirstTrue(c == a) = 8
FirstFalse(c == a) = 0
matches = 8 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 0 . 9 9 9 9 . 9 9 9 9
@ -431,7 +431,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 7
FirstTrue(c == a) = 4
FirstTrue(c == a) = 9
FirstFalse(c == a) = 0
matches = 9 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 0 9 . 9 9 9 9 . 9 9 9 9
@ -447,7 +447,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 6
FirstTrue(c == a) = 5
FirstTrue(c == a) = 10
FirstFalse(c == a) = 0
matches = 10 11 12 13 14 15
b = 0 0 0 0 . 0 0 9 9 . 9 9 9 9 . 9 9 9 9
@ -463,7 +463,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 5
FirstTrue(c == a) = 5
FirstTrue(c == a) = 11
FirstFalse(c == a) = 0
matches = 11 12 13 14 15
b = 0 0 0 0 . 0 9 9 9 . 9 9 9 9 . 9 9 9 9
@ -479,7 +479,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 4
FirstTrue(c == a) = 6
FirstTrue(c == a) = 12
FirstFalse(c == a) = 0
matches = 12 13 14 15
b = 0 0 0 0 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
@ -495,7 +495,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 3
FirstTrue(c == a) = 6
FirstTrue(c == a) = 13
FirstFalse(c == a) = 0
matches = 13 14 15
b = 0 0 0 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
@ -511,7 +511,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 2
FirstTrue(c == a) = 7
FirstTrue(c == a) = 14
FirstFalse(c == a) = 0
matches = 14 15
b = 0 0 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
@ -527,7 +527,7 @@ c = 9 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
AllTrue(c == a) = false
AnyTrue(c == a) = true
CountTrue(c == a) = 1
FirstTrue(c == a) = 7
FirstTrue(c == a) = 15
FirstFalse(c == a) = 0
matches = 15
b = 0 9 9 9 . 9 9 9 9 . 9 9 9 9 . 9 9 9 9
@ -546,5 +546,5 @@ AllTrue(a == a) = true
AnyTrue(a == b) = true
AnyTrue(a == c) = false
CountTrue(a == b) = 8
FirstTrue(a == b) = 0
FirstTrue(a == b) = 1
FirstFalse(a == b) = 0

View file

@ -173,10 +173,11 @@ force_inline i8x16 operator==(i8x16 a, i8x16 b) { return _mm_cmpeq_epi8(a.dat
force_inline i8x16 operator<(i8x16 a, i8x16 b) { return _mm_cmplt_epi8(a.data, b.data); }
force_inline i8x16 operator>(i8x16 a, i8x16 b) { return _mm_cmpgt_epi8(a.data, b.data); }
force_inline bool AllTrue(i8x16 a) { return _mm_movemask_epi8(a.data) == 0xffff; }
force_inline bool AnyTrue(i8x16 a) { return _mm_movemask_epi8(a.data); }
force_inline int CountTrue(i8x16 a) { return CountBits(_mm_movemask_epi8(a.data)); }
force_inline int FirstFalse(i8x16 a) { return CountTrailingZeroBits(~_mm_movemask_epi8(a.data)); }
force_inline bool IsTrue(i8x16 a, int i) { return _mm_movemask_epi8(a.data) & (1 << i); }
force_inline bool AnyTrue(i8x16 a) { return _mm_movemask_epi8(a.data); }
force_inline int CountTrue(i8x16 a) { return CountBits(_mm_movemask_epi8(a.data)); }
force_inline int FirstTrue(i8x16 a) { return CountTrailingZeroBits(_mm_movemask_epi8(a.data)); }
force_inline int FirstFalse(i8x16 a) { return CountTrailingZeroBits(~_mm_movemask_epi8(a.data)); }
force_inline bool IsTrue(i8x16 a, int i) { return _mm_movemask_epi8(a.data) & (1 << i); }
force_inline f32x4 ToFloat(i32x4 a) { return _mm_cvtepi32_ps(a.data); }
force_inline i32x4 Truncate(f32x4 a) { return _mm_cvttps_epi32(a.data); }