Mercurial > vec
annotate src/impl/gcc.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 | |
children |
rev | line source |
---|---|
28
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
1 /** |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
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:
diff
changeset
|
3 * |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
4 * Copyright (c) 2024 Paper |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
5 * |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
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:
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:
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:
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:
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:
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:
diff
changeset
|
12 * |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
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:
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:
diff
changeset
|
15 * |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
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:
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:
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:
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:
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:
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:
diff
changeset
|
22 * SOFTWARE. |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
23 **/ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
24 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
25 #include "vec/impl/gcc.h" |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
26 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
27 // ----------------------------------------------------------------- |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
28 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
29 #define VEC_GENERIC_OPERATION(op, sign, csign, bits, size) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
30 do { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
31 for (int i = 0; i < size; i++) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
32 ((union v##sign##int##bits##x##size##_impl_data *)&vec1)->impl[i] = (op); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
33 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
34 return vec1; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
35 } while (0) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
36 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
37 #define VEC_GENERIC_BUILTIN_OPERATION(op, sign, csign, bits, size) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
38 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) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
39 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
40 #define VEC_GENERIC_CMP(op, sign, csign, bits, size) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
41 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) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
42 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
43 // TODO implement these so we don't waste stack space by doing the |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
44 // generics |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
45 #define VEC_GENERIC_DEFINE_OPERATIONS_SIGN(sign, csign, bits, size) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
46 union v##sign##int##bits##x##size##_impl_data { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
47 v##sign##int##bits##x##size vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
48 vec_##sign##int##bits impl[size]; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
49 }; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
50 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
51 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_splat(vec_##sign##int##bits x) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
52 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
53 v##sign##int##bits##x##size vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
54 for (int i = 0; i < size; i++) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
55 ((union v##sign##int##bits##x##size##_impl_data *)&vec)->impl[i] = x; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
56 return vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
57 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
58 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
59 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]) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
60 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
61 v##sign##int##bits##x##size vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
62 memcpy(&vec, in, sizeof(vec_##sign##int##bits) * size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
63 return vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
64 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
65 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
66 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]) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
67 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
68 memcpy(out, &vec, sizeof(vec_##sign##int##bits) * size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
69 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
70 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
71 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
72 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
73 VEC_GENERIC_BUILTIN_OPERATION(+, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
74 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
75 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
76 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
77 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
78 VEC_GENERIC_BUILTIN_OPERATION(-, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
79 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
80 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
81 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
82 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
83 VEC_GENERIC_BUILTIN_OPERATION(*, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
84 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
85 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
86 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
87 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
88 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); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
89 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
90 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
91 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
92 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
93 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:
diff
changeset
|
94 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:
diff
changeset
|
95 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
96 for (int i = 0; i < size; i++) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
97 vec1d->impl[i] = vec_##sign##avg(vec1d->impl[i], vec2d->impl[i]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
98 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
99 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
100 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
101 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
102 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
103 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
104 VEC_GENERIC_BUILTIN_OPERATION(&, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
105 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
106 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
107 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
108 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
109 VEC_GENERIC_BUILTIN_OPERATION(|, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
110 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
111 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
112 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
113 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
114 VEC_GENERIC_BUILTIN_OPERATION(^, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
115 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
116 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
117 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
118 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
119 VEC_GENERIC_CMP(<, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
120 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
121 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
122 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
123 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
124 return v##sign##int##bits##x##size##_not(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:
diff
changeset
|
125 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
126 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
127 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
128 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
129 VEC_GENERIC_CMP(==, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
130 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
131 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
132 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
133 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
134 return v##sign##int##bits##x##size##_not(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:
diff
changeset
|
135 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
136 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
137 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
138 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
139 VEC_GENERIC_CMP(>, sign, csign, bits, size); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
140 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
141 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
142 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
143 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
144 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); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
145 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
146 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
147 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
148 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
149 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); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
150 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
151 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
152 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
153 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
154 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); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
155 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
156 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
157 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:
diff
changeset
|
158 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
159 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:
diff
changeset
|
160 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
161 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:
diff
changeset
|
162 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:
diff
changeset
|
163 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
164 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:
diff
changeset
|
165 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
166 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
167 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:
diff
changeset
|
168 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
169 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:
diff
changeset
|
170 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
171 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:
diff
changeset
|
172 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:
diff
changeset
|
173 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
174 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:
diff
changeset
|
175 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
176 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
177 const v##sign##int##bits##x##size##_impl v##sign##int##bits##x##size##_impl_generic = { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
178 .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:
diff
changeset
|
179 .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:
diff
changeset
|
180 .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:
diff
changeset
|
181 .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:
diff
changeset
|
182 .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:
diff
changeset
|
183 .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:
diff
changeset
|
184 .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:
diff
changeset
|
185 .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:
diff
changeset
|
186 .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:
diff
changeset
|
187 .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:
diff
changeset
|
188 .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:
diff
changeset
|
189 .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:
diff
changeset
|
190 .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:
diff
changeset
|
191 .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:
diff
changeset
|
192 .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:
diff
changeset
|
193 .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:
diff
changeset
|
194 .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:
diff
changeset
|
195 .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:
diff
changeset
|
196 .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:
diff
changeset
|
197 .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:
diff
changeset
|
198 .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:
diff
changeset
|
199 .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:
diff
changeset
|
200 .max = v##sign##int##bits##x##size##_generic_max, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
201 }; |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
202 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
203 #define VEC_GENERIC_DEFINE_OPERATIONS(bits, size) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
204 VEC_GENERIC_DEFINE_OPERATIONS_SIGN(u, U, bits, size) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
205 VEC_GENERIC_DEFINE_OPERATIONS_SIGN( , , bits, size) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
206 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
207 VEC_GENERIC_DEFINE_OPERATIONS(8, 2) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
208 VEC_GENERIC_DEFINE_OPERATIONS(16, 2) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
209 VEC_GENERIC_DEFINE_OPERATIONS(32, 2) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
210 VEC_GENERIC_DEFINE_OPERATIONS(64, 2) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
211 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
212 #undef VEC_GENERIC_DEFINE_OPERATIONS |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
213 #undef VEC_GENERIC_DEFINE_OPERATIONS_SIGN |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
214 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
215 // ----------------------------------------------------------------- |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
216 // now we can just keep doubling the same implementation |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
217 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
218 #define VEC_GENERIC_DEFINE_OPERATIONS_SIGN(sign, csign, bits, size, halfsize) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
219 union v##sign##int##bits##x##size##_impl_data { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
220 v##sign##int##bits##x##size vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
221 v##sign##int##bits##x##halfsize impl[2]; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
222 }; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
223 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
224 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_splat(vec_##sign##int##bits x) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
225 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
226 union v##sign##int##bits##x##size##_impl_data vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
227 vec.impl[0] = v##sign##int##bits##x##halfsize##_splat(x); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
228 vec.impl[1] = v##sign##int##bits##x##halfsize##_splat(x); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
229 return vec.vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
230 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
231 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
232 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]) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
233 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
234 union v##sign##int##bits##x##size##_impl_data vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
235 vec.impl[0] = v##sign##int##bits##x##halfsize##_load_aligned(in); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
236 vec.impl[1] = v##sign##int##bits##x##halfsize##_load_aligned(in + halfsize); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
237 return vec.vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
238 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
239 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
240 VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_generic_load(const vec_##sign##int##bits in[size]) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
241 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
242 union v##sign##int##bits##x##size##_impl_data vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
243 vec.impl[0] = v##sign##int##bits##x##halfsize##_load(in); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
244 vec.impl[1] = v##sign##int##bits##x##halfsize##_load(in + halfsize); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
245 return vec.vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
246 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
247 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
248 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]) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
249 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
250 union v##sign##int##bits##x##size##_impl_data *vecd = (union v##sign##int##bits##x##size##_impl_data *)&vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
251 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
252 v##sign##int##bits##x##halfsize##_store_aligned(vecd->impl[0], out); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
253 v##sign##int##bits##x##halfsize##_store_aligned(vecd->impl[1], out + halfsize); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
254 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
255 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
256 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]) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
257 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
258 union v##sign##int##bits##x##size##_impl_data *vecd = (union v##sign##int##bits##x##size##_impl_data *)&vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
259 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
260 v##sign##int##bits##x##halfsize##_store(vecd->impl[0], out); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
261 v##sign##int##bits##x##halfsize##_store(vecd->impl[1], out + halfsize); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
262 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
263 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
264 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
265 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
266 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:
diff
changeset
|
267 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:
diff
changeset
|
268 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
269 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_add(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
270 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_add(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
271 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
272 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
273 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
274 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
275 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
276 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
277 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:
diff
changeset
|
278 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:
diff
changeset
|
279 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
280 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_sub(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
281 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_sub(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
282 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
283 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
284 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
285 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
286 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
287 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
288 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:
diff
changeset
|
289 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:
diff
changeset
|
290 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
291 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_mul(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
292 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_mul(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
293 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
294 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
295 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
296 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
297 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
298 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
299 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:
diff
changeset
|
300 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:
diff
changeset
|
301 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
302 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_div(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
303 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_div(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
304 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
305 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
306 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
307 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
308 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
309 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
310 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:
diff
changeset
|
311 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:
diff
changeset
|
312 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
313 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_avg(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
314 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_avg(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
315 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
316 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
317 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
318 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
319 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
320 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
321 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:
diff
changeset
|
322 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:
diff
changeset
|
323 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
324 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_and(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
325 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_and(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
326 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
327 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
328 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
329 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
330 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
331 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
332 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:
diff
changeset
|
333 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:
diff
changeset
|
334 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
335 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_or(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
336 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_or(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
337 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
338 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
339 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
340 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
341 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
342 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
343 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:
diff
changeset
|
344 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:
diff
changeset
|
345 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
346 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_xor(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
347 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_xor(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
348 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
349 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
350 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
351 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
352 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
353 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
354 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:
diff
changeset
|
355 union vuint##bits##x##size##_impl_data *vec2d = (union vuint##bits##x##size##_impl_data *)&vec2; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
356 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
357 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_lshift(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
358 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_lshift(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
359 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
360 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
361 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
362 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
363 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
364 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
365 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:
diff
changeset
|
366 union vuint##bits##x##size##_impl_data *vec2d = (union vuint##bits##x##size##_impl_data *)&vec2; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
367 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
368 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_rshift(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
369 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_rshift(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
370 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
371 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
372 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
373 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
374 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
375 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
376 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:
diff
changeset
|
377 union vuint##bits##x##size##_impl_data *vec2d = (union vuint##bits##x##size##_impl_data *)&vec2; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
378 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
379 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_lrshift(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
380 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_lrshift(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
381 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
382 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
383 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
384 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
385 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
386 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
387 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:
diff
changeset
|
388 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:
diff
changeset
|
389 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
390 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmplt(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
391 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmplt(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
392 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
393 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
394 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
395 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
396 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
397 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
398 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:
diff
changeset
|
399 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:
diff
changeset
|
400 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
401 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmple(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
402 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmple(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
403 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
404 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
405 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
406 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
407 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
408 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
409 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:
diff
changeset
|
410 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:
diff
changeset
|
411 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
412 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmpeq(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
413 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmpeq(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
414 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
415 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
416 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
417 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
418 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
419 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
420 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:
diff
changeset
|
421 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:
diff
changeset
|
422 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
423 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmpge(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
424 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmpge(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
425 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
426 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
427 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
428 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
429 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) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
430 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
431 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:
diff
changeset
|
432 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:
diff
changeset
|
433 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
434 vec1d->impl[0] = v##sign##int##bits##x##halfsize##_cmpgt(vec1d->impl[0], vec2d->impl[0]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
435 vec1d->impl[1] = v##sign##int##bits##x##halfsize##_cmpgt(vec1d->impl[1], vec2d->impl[1]); \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
436 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
437 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
438 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
439 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
440 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:
diff
changeset
|
441 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
442 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:
diff
changeset
|
443 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:
diff
changeset
|
444 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
445 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:
diff
changeset
|
446 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:
diff
changeset
|
447 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
448 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
449 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
450 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
451 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:
diff
changeset
|
452 { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
453 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:
diff
changeset
|
454 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:
diff
changeset
|
455 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
456 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:
diff
changeset
|
457 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:
diff
changeset
|
458 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
459 return vec1d->vec; \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
460 } \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
461 \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
462 const v##sign##int##bits##x##size##_impl v##sign##int##bits##x##size##_impl_generic = { \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
463 .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:
diff
changeset
|
464 .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:
diff
changeset
|
465 .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:
diff
changeset
|
466 .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:
diff
changeset
|
467 .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:
diff
changeset
|
468 .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:
diff
changeset
|
469 .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:
diff
changeset
|
470 .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:
diff
changeset
|
471 .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:
diff
changeset
|
472 .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:
diff
changeset
|
473 .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:
diff
changeset
|
474 .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:
diff
changeset
|
475 .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:
diff
changeset
|
476 .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:
diff
changeset
|
477 .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:
diff
changeset
|
478 .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:
diff
changeset
|
479 .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:
diff
changeset
|
480 .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:
diff
changeset
|
481 .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:
diff
changeset
|
482 .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:
diff
changeset
|
483 .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:
diff
changeset
|
484 .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:
diff
changeset
|
485 .max = v##sign##int##bits##x##size##_generic_max, \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
486 }; |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
487 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
488 #define VEC_GENERIC_DEFINE_OPERATIONS(bits, size, halfsize) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
489 VEC_GENERIC_DEFINE_OPERATIONS_SIGN(u, U, bits, size, halfsize) \ |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
490 VEC_GENERIC_DEFINE_OPERATIONS_SIGN( , , bits, size, halfsize) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
491 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
492 // 32-bit |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
493 VEC_GENERIC_DEFINE_OPERATIONS(8, 4, 2) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
494 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
495 // 64-bit |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
496 VEC_GENERIC_DEFINE_OPERATIONS(8, 8, 4) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
497 VEC_GENERIC_DEFINE_OPERATIONS(16, 4, 2) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
498 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
499 // 128-bit |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
500 VEC_GENERIC_DEFINE_OPERATIONS(8, 16, 8) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
501 VEC_GENERIC_DEFINE_OPERATIONS(16, 8, 4) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
502 VEC_GENERIC_DEFINE_OPERATIONS(32, 4, 2) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
503 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
504 // 256-bit |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
505 VEC_GENERIC_DEFINE_OPERATIONS(8, 32, 16) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
506 VEC_GENERIC_DEFINE_OPERATIONS(16, 16, 8) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
507 VEC_GENERIC_DEFINE_OPERATIONS(32, 8, 4) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
508 VEC_GENERIC_DEFINE_OPERATIONS(64, 4, 2) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
509 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
510 // 512-bit |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
511 VEC_GENERIC_DEFINE_OPERATIONS(8, 64, 32) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
512 VEC_GENERIC_DEFINE_OPERATIONS(16, 32, 16) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
513 VEC_GENERIC_DEFINE_OPERATIONS(32, 16, 8) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
514 VEC_GENERIC_DEFINE_OPERATIONS(64, 8, 4) |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
515 |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
516 #undef VEC_GENERIC_DEFINE_OPERATIONS |
c6c99ab1088a
*: add min/max functions and a big big refactor (again)
Paper <paper@tflc.us>
parents:
diff
changeset
|
517 #undef VEC_GENERIC_DEFINE_OPERATIONS_SIGN |