mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 06:05:58 -06:00
Core: Developing SIMD
This commit is contained in:
parent
860777e329
commit
655233f338
2 changed files with 22 additions and 21 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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); }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue