Mercurial > vec
annotate src/impl/generic.c @ 28:c6c99ab1088a
*: add min/max functions and a big big refactor (again)
agh, this time I added a few more implementations (and generally
made the code just a little faster...)
author | Paper <paper@tflc.us> |
---|---|
date | Thu, 24 Apr 2025 00:54:02 -0400 |
parents | 92156fe32755 |
children | bf6ad516f1e6 |
rev | line source |
---|---|
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
1 /** |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
2 * vec - a tiny SIMD vector library in C99 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
3 * |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
4 * Copyright (c) 2024 Paper |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
5 * |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
6 * Permission is hereby granted, free of charge, to any person obtaining a copy |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
7 * of this software and associated documentation files (the "Software"), to deal |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
8 * in the Software without restriction, including without limitation the rights |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
10 * copies of the Software, and to permit persons to whom the Software is |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
11 * furnished to do so, subject to the following conditions: |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
12 * |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
13 * The above copyright notice and this permission notice shall be included in all |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
14 * copies or substantial portions of the Software. |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
15 * |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
22 * SOFTWARE. |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
23 **/ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
24 |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
25 #include "vec/impl/generic.h" |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
26 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
27 #include <string.h> |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
28 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
29 // ----------------------------------------------------------------- |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
30 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
31 #define VEC_GENERIC_OPERATION(op, sign, csign, bits, size) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
32 do { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
33 for (int i = 0; i < size; i++) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
34 ((union v##sign##int##bits##x##size##_impl_data *)&vec1)->impl[i] = (op); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
35 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
36 return vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
37 } while (0) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
38 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
39 #define VEC_GENERIC_BUILTIN_OPERATION(op, sign, csign, bits, size) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
40 VEC_GENERIC_OPERATION(((union v##sign##int##bits##x##size##_impl_data *)&vec1)->impl[i] op ((union v##sign##int##bits##x##size##_impl_data *)&vec2)->impl[i], sign, csign, bits, size) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
41 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
42 #define VEC_GENERIC_CMP(op, sign, csign, bits, size) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
43 VEC_GENERIC_OPERATION((((union v##sign##int##bits##x##size##_impl_data *)&vec1)->impl[i] op ((union v##sign##int##bits##x##size##_impl_data *)&vec2)->impl[i]) ? VEC_UINT##bits##_MAX : 0, sign, csign, bits, size) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
44 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
45 // TODO implement these so we don't waste stack space by doing the |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
46 // generics |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
47 #define VEC_GENERIC_DEFINE_OPERATIONS_SIGN(sign, csign, bits, size) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
48 union v##sign##int##bits##x##size##_impl_data { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
49 v##sign##int##bits##x##size vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
50 vec_##sign##int##bits impl[size]; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
51 }; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
52 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
53 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_splat(vec_##sign##int##bits x) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
54 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
55 v##sign##int##bits##x##size vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
56 for (int i = 0; i < size; i++) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
57 ((union v##sign##int##bits##x##size##_impl_data *)&vec)->impl[i] = x; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
58 return vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
59 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
60 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
61 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_load_aligned(const vec_##sign##int##bits in[size]) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
62 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
63 v##sign##int##bits##x##size vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
64 memcpy(&vec, in, sizeof(vec_##sign##int##bits) * size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
65 return vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
66 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
67 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
68 VEC_FUNC_IMPL void v##sign##int##bits##x##size##_generic_store_aligned(v##sign##int##bits##x##size vec, vec_##sign##int##bits out[size]) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
69 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
70 memcpy(out, &vec, sizeof(vec_##sign##int##bits) * size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
71 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
72 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
73 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_add(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
74 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
75 VEC_GENERIC_BUILTIN_OPERATION(+, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
76 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
77 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
78 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_sub(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
79 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
80 VEC_GENERIC_BUILTIN_OPERATION(-, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
81 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
82 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
83 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_mul(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
84 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
85 VEC_GENERIC_BUILTIN_OPERATION(*, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
86 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
87 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
88 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_div(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
89 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
90 VEC_GENERIC_OPERATION(((union v##sign##int##bits##x##size##_impl_data *)&vec2)->impl[i] ? (((union v##sign##int##bits##x##size##_impl_data *)&vec1)->impl[i] / ((union v##sign##int##bits##x##size##_impl_data *)&vec2)->impl[i]) : 0, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
91 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
92 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
93 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_avg(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
94 { \ |
25
92156fe32755
impl/ppc/altivec: update to new implementation
Paper <paper@tflc.us>
parents:
23
diff
changeset
|
95 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
92156fe32755
impl/ppc/altivec: update to new implementation
Paper <paper@tflc.us>
parents:
23
diff
changeset
|
96 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
92156fe32755
impl/ppc/altivec: update to new implementation
Paper <paper@tflc.us>
parents:
23
diff
changeset
|
97 \ |
92156fe32755
impl/ppc/altivec: update to new implementation
Paper <paper@tflc.us>
parents:
23
diff
changeset
|
98 for (int i = 0; i < size; i++) \ |
92156fe32755
impl/ppc/altivec: update to new implementation
Paper <paper@tflc.us>
parents:
23
diff
changeset
|
99 vec1d->impl[i] = vec_##sign##avg(vec1d->impl[i], vec2d->impl[i]); \ |
92156fe32755
impl/ppc/altivec: update to new implementation
Paper <paper@tflc.us>
parents:
23
diff
changeset
|
100 \ |
92156fe32755
impl/ppc/altivec: update to new implementation
Paper <paper@tflc.us>
parents:
23
diff
changeset
|
101 return vec1d->vec; \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
102 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
103 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
104 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_and(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
105 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
106 VEC_GENERIC_BUILTIN_OPERATION(&, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
107 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
108 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
109 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_or(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
110 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
111 VEC_GENERIC_BUILTIN_OPERATION(|, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
112 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
113 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
114 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_xor(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
115 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
116 VEC_GENERIC_BUILTIN_OPERATION(^, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
117 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
118 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
119 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmplt(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
120 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
121 VEC_GENERIC_CMP(<, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
122 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
123 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
124 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmple(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
125 { \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
126 return v##sign##int##bits##x##size##_not(v##sign##int##bits##x##size##_cmpgt(vec1, vec2)); \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
127 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
128 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
129 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmpeq(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
130 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
131 VEC_GENERIC_CMP(==, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
132 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
133 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
134 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmpge(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
135 { \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
136 return v##sign##int##bits##x##size##_not(v##sign##int##bits##x##size##_cmplt(vec1, vec2)); \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
137 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
138 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
139 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmpgt(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
140 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
141 VEC_GENERIC_CMP(>, sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
142 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
143 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
144 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_lshift(v##sign##int##bits##x##size vec1, vuint##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
145 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
146 VEC_GENERIC_OPERATION(vec_##sign##lshift(((union v##sign##int##bits##x##size##_impl_data *)&vec1)->impl[i], ((union v##sign##int##bits##x##size##_impl_data *)&vec2)->impl[i]), sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
147 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
148 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
149 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_rshift(v##sign##int##bits##x##size vec1, vuint##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
150 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
151 VEC_GENERIC_OPERATION(vec_##sign##rshift(((union v##sign##int##bits##x##size##_impl_data *)&vec1)->impl[i], ((union v##sign##int##bits##x##size##_impl_data *)&vec2)->impl[i]), sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
152 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
153 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
154 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_lrshift(v##sign##int##bits##x##size vec1, vuint##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
155 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
156 VEC_GENERIC_OPERATION(vec_lrshift((vec_uint##bits)(((union v##sign##int##bits##x##size##_impl_data *)&vec1)->impl[i]), ((union v##sign##int##bits##x##size##_impl_data *)&vec2)->impl[i]), sign, csign, bits, size); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
157 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
158 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
159 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_min(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
160 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
161 v##sign##int##bits##x##size cmplt = v##sign##int##bits##x##size##_cmplt(vec1, vec2); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
162 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
163 v##sign##int##bits##x##size a = v##sign##int##bits##x##size##_and(vec1, cmplt); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
164 v##sign##int##bits##x##size b = v##sign##int##bits##x##size##_and(vec2, v##sign##int##bits##x##size##_not(cmplt)); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
165 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
166 return v##sign##int##bits##x##size##_or(a, b); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
167 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
168 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
169 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_max(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
170 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
171 v##sign##int##bits##x##size cmplt = v##sign##int##bits##x##size##_cmpgt(vec1, vec2); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
172 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
173 v##sign##int##bits##x##size a = v##sign##int##bits##x##size##_and(vec1, cmplt); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
174 v##sign##int##bits##x##size b = v##sign##int##bits##x##size##_and(vec2, v##sign##int##bits##x##size##_not(cmplt)); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
175 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
176 return v##sign##int##bits##x##size##_or(a, b); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
177 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
178 \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
179 const v##sign##int##bits##x##size##_impl v##sign##int##bits##x##size##_impl_generic = { \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
180 .splat = v##sign##int##bits##x##size##_generic_splat, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
181 .load_aligned = v##sign##int##bits##x##size##_generic_load_aligned, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
182 .load = v##sign##int##bits##x##size##_generic_load_aligned, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
183 .store_aligned = v##sign##int##bits##x##size##_generic_store_aligned, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
184 .store = v##sign##int##bits##x##size##_generic_store_aligned, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
185 .add = v##sign##int##bits##x##size##_generic_add, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
186 .sub = v##sign##int##bits##x##size##_generic_sub, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
187 .mul = v##sign##int##bits##x##size##_generic_mul, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
188 .div = v##sign##int##bits##x##size##_generic_div, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
189 .avg = v##sign##int##bits##x##size##_generic_avg, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
190 .band = v##sign##int##bits##x##size##_generic_and, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
191 .bor = v##sign##int##bits##x##size##_generic_or, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
192 .bxor = v##sign##int##bits##x##size##_generic_xor, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
193 .lshift = v##sign##int##bits##x##size##_generic_lshift, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
194 .rshift = v##sign##int##bits##x##size##_generic_rshift, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
195 .lrshift = v##sign##int##bits##x##size##_generic_lrshift, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
196 .cmplt = v##sign##int##bits##x##size##_generic_cmplt, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
197 .cmple = v##sign##int##bits##x##size##_generic_cmple, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
198 .cmpeq = v##sign##int##bits##x##size##_generic_cmpeq, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
199 .cmpge = v##sign##int##bits##x##size##_generic_cmpge, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
200 .cmpgt = v##sign##int##bits##x##size##_generic_cmpgt, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
201 .min = v##sign##int##bits##x##size##_generic_min, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
202 .max = v##sign##int##bits##x##size##_generic_max, \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
203 }; |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
204 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
205 #define VEC_GENERIC_DEFINE_OPERATIONS(bits, size) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
206 VEC_GENERIC_DEFINE_OPERATIONS_SIGN(u, U, bits, size) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
207 VEC_GENERIC_DEFINE_OPERATIONS_SIGN( , , bits, size) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
208 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
209 VEC_GENERIC_DEFINE_OPERATIONS(8, 2) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
210 VEC_GENERIC_DEFINE_OPERATIONS(16, 2) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
211 VEC_GENERIC_DEFINE_OPERATIONS(32, 2) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
212 VEC_GENERIC_DEFINE_OPERATIONS(64, 2) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
213 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
214 #undef VEC_GENERIC_DEFINE_OPERATIONS |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
215 #undef VEC_GENERIC_DEFINE_OPERATIONS_SIGN |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
216 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
217 // ----------------------------------------------------------------- |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
218 // now we can just keep doubling the same implementation |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
219 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
220 #define VEC_GENERIC_DEFINE_OPERATIONS_SIGN(sign, csign, bits, size, halfsize) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
221 union v##sign##int##bits##x##size##_impl_data { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
222 v##sign##int##bits##x##size vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
223 v##sign##int##bits##x##halfsize impl[2]; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
224 }; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
225 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
226 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_splat(vec_##sign##int##bits x) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
227 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
228 union v##sign##int##bits##x##size##_impl_data vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
229 vec.impl[0] = v##sign##int##bits##x##halfsize##_splat(x); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
230 vec.impl[1] = v##sign##int##bits##x##halfsize##_splat(x); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
231 return vec.vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
232 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
233 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
234 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_load_aligned(const vec_##sign##int##bits in[size]) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
235 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
236 union v##sign##int##bits##x##size##_impl_data vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
237 vec.impl[0] = v##sign##int##bits##x##halfsize##_load_aligned(in); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
238 vec.impl[1] = v##sign##int##bits##x##halfsize##_load_aligned(in + halfsize); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
239 return vec.vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
240 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
241 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
242 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_load(const vec_##sign##int##bits in[size]) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
243 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
244 union v##sign##int##bits##x##size##_impl_data vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
245 vec.impl[0] = v##sign##int##bits##x##halfsize##_load(in); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
246 vec.impl[1] = v##sign##int##bits##x##halfsize##_load(in + halfsize); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
247 return vec.vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
248 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
249 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
250 VEC_FUNC_IMPL void v##sign##int##bits##x##size##_generic_store_aligned(v##sign##int##bits##x##size vec, vec_##sign##int##bits out[size]) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
251 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
252 union v##sign##int##bits##x##size##_impl_data *vecd = (union v##sign##int##bits##x##size##_impl_data *)&vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
253 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
254 v##sign##int##bits##x##halfsize##_store_aligned(vecd->impl[0], out); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
255 v##sign##int##bits##x##halfsize##_store_aligned(vecd->impl[1], out + halfsize); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
256 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
257 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
258 VEC_FUNC_IMPL void v##sign##int##bits##x##size##_generic_store(v##sign##int##bits##x##size vec, vec_##sign##int##bits out[size]) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
259 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
260 union v##sign##int##bits##x##size##_impl_data *vecd = (union v##sign##int##bits##x##size##_impl_data *)&vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
261 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
262 v##sign##int##bits##x##halfsize##_store(vecd->impl[0], out); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
263 v##sign##int##bits##x##halfsize##_store(vecd->impl[1], out + halfsize); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
264 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
265 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
266 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_add(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
267 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
268 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
269 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
270 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
271 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_add(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
272 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_add(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
273 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
274 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
275 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
276 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
277 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_sub(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
278 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
279 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
280 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
281 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
282 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_sub(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
283 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_sub(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
284 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
285 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
286 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
287 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
288 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_mul(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
289 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
290 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
291 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
292 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
293 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_mul(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
294 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_mul(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
295 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
296 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
297 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
298 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
299 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_div(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
300 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
301 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
302 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
303 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
304 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_div(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
305 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_div(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
306 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
307 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
308 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
309 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
310 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_avg(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
311 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
312 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
313 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
314 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
315 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_avg(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
316 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_avg(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
317 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
318 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
319 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
320 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
321 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_and(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
322 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
323 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
324 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
325 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
326 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_and(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
327 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_and(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
328 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
329 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
330 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
331 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
332 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_or(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
333 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
334 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
335 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
336 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
337 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_or(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
338 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_or(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
339 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
340 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
341 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
342 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
343 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_xor(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
344 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
345 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
346 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
347 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
348 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_xor(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
349 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_xor(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
350 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
351 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
352 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
353 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
354 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_lshift(v##sign##int##bits##x##size vec1, vuint##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
355 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
356 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
357 union vuint##bits##x##size##_impl_data *vec2d = (union vuint##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
358 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
359 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_lshift(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
360 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_lshift(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
361 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
362 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
363 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
364 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
365 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_rshift(v##sign##int##bits##x##size vec1, vuint##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
366 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
367 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
368 union vuint##bits##x##size##_impl_data *vec2d = (union vuint##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
369 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
370 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_rshift(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
371 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_rshift(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
372 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
373 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
374 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
375 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
376 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_lrshift(v##sign##int##bits##x##size vec1, vuint##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
377 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
378 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
379 union vuint##bits##x##size##_impl_data *vec2d = (union vuint##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
380 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
381 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_lrshift(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
382 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_lrshift(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
383 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
384 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
385 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
386 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
387 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmplt(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
388 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
389 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
390 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
391 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
392 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmplt(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
393 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmplt(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
394 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
395 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
396 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
397 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
398 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmple(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
399 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
400 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
401 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
402 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
403 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmple(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
404 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmple(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
405 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
406 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
407 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
408 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
409 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmpeq(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
410 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
411 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
412 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
413 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
414 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmpeq(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
415 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmpeq(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
416 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
417 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
418 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
419 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
420 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmpge(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
421 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
422 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
423 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
424 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
425 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmpge(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
426 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmpge(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
427 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
428 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
429 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
430 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
431 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_cmpgt(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
432 { \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
433 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
434 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
435 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
436 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmpgt(vec1d->impl[0], vec2d->impl[0]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
437 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmpgt(vec1d->impl[1], vec2d->impl[1]); \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
438 \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
439 return vec1d->vec; \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
440 } \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
441 \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
442 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_min(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
443 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
444 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
445 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
446 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
447 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_min(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
448 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_min(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
449 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
450 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
451 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
452 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
453 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_max(v##sign##int##bits##x##size vec1, v##sign##int##bits##x##size vec2) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
454 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
455 union v##sign##int##bits##x##size##_impl_data *vec1d = (union v##sign##int##bits##x##size##_impl_data *)&vec1; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
456 union v##sign##int##bits##x##size##_impl_data *vec2d = (union v##sign##int##bits##x##size##_impl_data *)&vec2; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
457 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
458 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_max(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
459 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_max(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
460 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
461 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
462 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
463 \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
464 const v##sign##int##bits##x##size##_impl v##sign##int##bits##x##size##_impl_generic = { \ |
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
465 .splat = v##sign##int##bits##x##size##_generic_splat, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
466 .load_aligned = v##sign##int##bits##x##size##_generic_load_aligned, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
467 .load = v##sign##int##bits##x##size##_generic_load, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
468 .store_aligned = v##sign##int##bits##x##size##_generic_store_aligned, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
469 .store = v##sign##int##bits##x##size##_generic_store, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
470 .add = v##sign##int##bits##x##size##_generic_add, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
471 .sub = v##sign##int##bits##x##size##_generic_sub, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
472 .mul = v##sign##int##bits##x##size##_generic_mul, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
473 .div = v##sign##int##bits##x##size##_generic_div, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
474 .avg = v##sign##int##bits##x##size##_generic_avg, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
475 .band = v##sign##int##bits##x##size##_generic_and, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
476 .bor = v##sign##int##bits##x##size##_generic_or, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
477 .bxor = v##sign##int##bits##x##size##_generic_xor, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
478 .lshift = v##sign##int##bits##x##size##_generic_lshift, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
479 .rshift = v##sign##int##bits##x##size##_generic_rshift, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
480 .lrshift = v##sign##int##bits##x##size##_generic_lrshift, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
481 .cmplt = v##sign##int##bits##x##size##_generic_cmplt, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
482 .cmple = v##sign##int##bits##x##size##_generic_cmple, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
483 .cmpeq = v##sign##int##bits##x##size##_generic_cmpeq, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
484 .cmpge = v##sign##int##bits##x##size##_generic_cmpge, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
485 .cmpgt = v##sign##int##bits##x##size##_generic_cmpgt, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
486 .min = v##sign##int##bits##x##size##_generic_min, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
25
diff
changeset
|
487 .max = v##sign##int##bits##x##size##_generic_max, \ |
23
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
488 }; |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
489 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
490 #define VEC_GENERIC_DEFINE_OPERATIONS(bits, size, halfsize) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
491 VEC_GENERIC_DEFINE_OPERATIONS_SIGN(u, U, bits, size, halfsize) \ |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
492 VEC_GENERIC_DEFINE_OPERATIONS_SIGN( , , bits, size, halfsize) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
493 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
494 // 32-bit |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
495 VEC_GENERIC_DEFINE_OPERATIONS(8, 4, 2) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
496 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
497 // 64-bit |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
498 VEC_GENERIC_DEFINE_OPERATIONS(8, 8, 4) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
499 VEC_GENERIC_DEFINE_OPERATIONS(16, 4, 2) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
500 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
501 // 128-bit |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
502 VEC_GENERIC_DEFINE_OPERATIONS(8, 16, 8) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
503 VEC_GENERIC_DEFINE_OPERATIONS(16, 8, 4) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
504 VEC_GENERIC_DEFINE_OPERATIONS(32, 4, 2) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
505 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
506 // 256-bit |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
507 VEC_GENERIC_DEFINE_OPERATIONS(8, 32, 16) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
508 VEC_GENERIC_DEFINE_OPERATIONS(16, 16, 8) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
509 VEC_GENERIC_DEFINE_OPERATIONS(32, 8, 4) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
510 VEC_GENERIC_DEFINE_OPERATIONS(64, 4, 2) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
511 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
512 // 512-bit |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
513 VEC_GENERIC_DEFINE_OPERATIONS(8, 64, 32) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
514 VEC_GENERIC_DEFINE_OPERATIONS(16, 32, 16) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
515 VEC_GENERIC_DEFINE_OPERATIONS(32, 16, 8) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
516 VEC_GENERIC_DEFINE_OPERATIONS(64, 8, 4) |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
517 |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
518 #undef VEC_GENERIC_DEFINE_OPERATIONS |
e26874655738
*: huge refactor, new major release (hahaha)
Paper <paper@tflc.us>
parents:
diff
changeset
|
519 #undef VEC_GENERIC_DEFINE_OPERATIONS_SIGN |