annotate utils/genaltivec.c @ 43:d96806b543ac

altivec: for soem reason the entire file got overwritten with zeroes
author Paper <paper@tflc.us>
date Tue, 29 Apr 2025 16:48:58 -0400
parents ca0f0223a62d
children b0a3f0248ecc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
41
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
1 /**
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
2 * vec - a tiny SIMD vector library in C99
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
3 *
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
4 * Copyright (c) 2024-2025 Paper
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
5 *
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
7 * of this software and associated documentation files (the "Software"), to deal
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
8 * in the Software without restriction, including without limitation the rights
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
10 * copies of the Software, and to permit persons to whom the Software is
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
11 * furnished to do so, subject to the following conditions:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
12 *
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
13 * The above copyright notice and this permission notice shall be included in all
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
14 * copies or substantial portions of the Software.
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
15 *
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
22 * SOFTWARE.
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
23 **/
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
24
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
25 /* Use this file to generate include/vec/impl/ppc/altivec.h !!
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
26 *
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
27 * `gcc -o genaltivec genaltivec.c` */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
28
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
29 #include <stdio.h>
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
30 #include <stdlib.h>
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
31 #include <string.h>
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
32 #include <ctype.h>
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
33
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
34 #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
35
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
36 /* ------------------------------------------------------------------------ */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
37
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
38 /* #define USE_VSX_EXTENSIONS */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
39
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
40 enum op {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
41 /* return vector, take in a integer */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
42 OP_SPLAT = 0,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
43
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
44 /* return vector, take in an array */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
45 OP_LOAD_ALIGNED,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
46 OP_LOAD,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
47
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
48 /* void, take in vector and array */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
49 OP_STORE_ALIGNED,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
50 OP_STORE,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
51
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
52 /* return vector, takes in two vectors */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
53 OP_ADD,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
54 OP_SUB,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
55 OP_MUL,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
56 OP_AND,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
57 OP_OR,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
58 OP_XOR,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
59 OP_CMPLT,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
60 OP_CMPEQ,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
61 OP_CMPGT,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
62 #ifdef USE_VSX_EXTENSIONS
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
63 OP_CMPLE,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
64 OP_CMPGE,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
65 #endif
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
66 OP_MIN,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
67 OP_MAX,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
68 OP_AVG,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
69
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
70 /* return vector, takes in a vector and an explicitly unsigned vector */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
71 OP_LSHIFT,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
72 OP_LRSHIFT,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
73 OP_RSHIFT,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
74
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
75 OP_FINAL_,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
76
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
77 /* unimplemented, no altivec version :) */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
78 OP_NOT,
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
79 };
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
80
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
81 /* convert op -> string */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
82 static struct {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
83 const char *u;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
84 const char *l;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
85 } op_names[] = {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
86 [OP_SPLAT] = {"SPLAT", "splat"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
87 [OP_LOAD_ALIGNED] = {"LOAD_ALIGNED", "load_aligned"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
88 [OP_LOAD] = {"LOAD", "load"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
89 [OP_STORE_ALIGNED] = {"STORE_ALIGNED", "store_aligned"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
90 [OP_STORE] = {"STORE", "store"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
91 [OP_ADD] = {"ADD", "add"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
92 [OP_SUB] = {"SUB", "sub"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
93 [OP_MUL] = {"MUL", "mul"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
94 [OP_AVG] = {"AVG", "avg"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
95 [OP_AND] = {"AND", "and"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
96 [OP_OR] = {"OR", "or"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
97 [OP_XOR] = {"XOR", "xor"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
98 [OP_NOT] = {"NOT", "not"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
99 [OP_CMPLT] = {"CMPLT", "cmplt"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
100 [OP_CMPEQ] = {"CMPEQ", "cmpeq"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
101 [OP_CMPGT] = {"CMPGT", "cmpgt"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
102 #ifdef USE_VSX_EXTENSIONS
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
103 [OP_CMPLE] = {"CMPLE", "cmple"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
104 [OP_CMPGE] = {"CMPGE", "cmpge"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
105 #endif
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
106 [OP_MIN] = {"MIN", "min"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
107 [OP_MAX] = {"MAX", "max"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
108 [OP_RSHIFT] = {"RSHIFT", "rshift"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
109 [OP_LRSHIFT] = {"LRSHIFT", "lrshift"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
110 [OP_LSHIFT] = {"LSHIFT", "lshift"},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
111 };
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
112
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
113 #define UPSIGN(x) ((x) ? "" : "U")
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
114 #define LOSIGN(x) ((x) ? "" : "u")
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
115
42
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
116 #define LOAVSIGN(x) ((x) ? "s" : "u")
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
117
41
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
118 static void print_gcc_op(enum op op, int is_signed, int bits, int size)
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
119 {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
120 int i;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
121
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
122 /* compatibility with ancient gcc */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
123 switch (op) {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
124 case OP_MUL:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
125 puts("#ifdef vec_mul");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
126 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
127 case OP_SPLAT:
42
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
128 printf("#if defined(vec_splats) || defined(vec_splat_%s%d)\n", (is_signed) ? "s" : "u", bits);
41
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
129 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
130 default:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
131 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
132 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
133
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
134 printf("#ifndef V%sINT%dx%d_%s_DEFINED\n", UPSIGN(is_signed), bits, size, op_names[op].u);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
135
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
136 printf("VEC_FUNC_IMPL ");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
137
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
138 /* first; the return value */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
139 switch (op) {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
140 case OP_SPLAT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
141 case OP_LOAD_ALIGNED:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
142 case OP_LOAD:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
143 case OP_ADD:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
144 case OP_SUB:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
145 case OP_MUL:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
146 case OP_AND:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
147 case OP_OR:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
148 case OP_XOR:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
149 case OP_CMPLT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
150 case OP_CMPEQ:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
151 case OP_CMPGT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
152 #ifdef USE_VSX_EXTENSIONS
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
153 case OP_CMPLE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
154 case OP_CMPGE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
155 #endif
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
156 case OP_MIN:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
157 case OP_MAX:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
158 case OP_AVG:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
159 case OP_RSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
160 case OP_LRSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
161 case OP_LSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
162 case OP_NOT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
163 printf("v%sint%dx%d", LOSIGN(is_signed), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
164 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
165 case OP_STORE_ALIGNED:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
166 case OP_STORE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
167 printf("void");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
168 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
169 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
170
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
171 /* whitespace and function name */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
172 printf(" v%sint%dx%d_%s(", LOSIGN(is_signed), bits, size, op_names[op].l);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
173
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
174 /* parameters */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
175 switch (op) {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
176 case OP_SPLAT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
177 printf("vec_%sint%d x", LOSIGN(is_signed), bits);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
178 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
179 case OP_LOAD_ALIGNED:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
180 case OP_LOAD:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
181 printf("const vec_%sint%d x[%d]", LOSIGN(is_signed), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
182 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
183 case OP_STORE_ALIGNED:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
184 case OP_STORE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
185 printf("v%sint%dx%d vec, vec_%sint%d arr[%d]", LOSIGN(is_signed), bits, size, LOSIGN(is_signed), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
186 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
187 case OP_ADD:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
188 case OP_SUB:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
189 case OP_MUL:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
190 case OP_AND:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
191 case OP_OR:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
192 case OP_XOR:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
193 case OP_CMPLT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
194 case OP_CMPEQ:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
195 case OP_CMPGT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
196 #ifdef USE_VSX_EXTENSIONS
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
197 case OP_CMPLE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
198 case OP_CMPGE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
199 #endif
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
200 case OP_MIN:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
201 case OP_MAX:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
202 case OP_AVG:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
203 printf("v%sint%dx%d vec1, v%sint%dx%d vec2", LOSIGN(is_signed), bits, size, LOSIGN(is_signed), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
204 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
205 case OP_RSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
206 case OP_LRSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
207 case OP_LSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
208 printf("v%sint%dx%d vec1, vuint%dx%d vec2", LOSIGN(is_signed), bits, size, bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
209 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
210 case OP_NOT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
211 printf("v%sint%dx%d vec", LOSIGN(is_signed), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
212 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
213 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
214
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
215 puts(")\n{");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
216
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
217 switch (op) {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
218 case OP_SPLAT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
219 printf("\tv%sint%dx%d vec;\n", LOSIGN(is_signed), bits, size);
42
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
220 puts("#ifdef vec_splats");
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
221 puts("\tvec.altivec = vec_splats(x);");
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
222 printf("#elif defined(vec_splat_%s%d)\n", LOAVSIGN(is_signed), bits);
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
223 printf("\tvec.altivec = vec_splat_%s%d(x);\n", LOAVSIGN(is_signed), bits);
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
224 puts("#else");
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
225 puts("# error logic error");
ca0f0223a62d altivec: use vec_splat_* funcs if available
Paper <paper@tflc.us>
parents: 41
diff changeset
226 puts("#endif");
41
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
227 printf("\treturn vec;\n");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
228 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
229 case OP_LOAD_ALIGNED:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
230 printf("\tv%sint%dx%d vec;\n", LOSIGN(is_signed), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
231 puts("\tvec.altivec = vec_ld(0, x);");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
232 printf("\treturn vec;\n");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
233 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
234 case OP_LOAD:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
235 printf("\tv%sint%dx%d vec;\n", LOSIGN(is_signed), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
236 puts("\tvec.altivec = vec_perm(vec_ld(0, x), vec_ld(16, x), vec_lvsl(0, x));");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
237 printf("\treturn vec;\n");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
238 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
239 case OP_STORE_ALIGNED:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
240 puts("\tvec_st(vec.altivec, 0, arr);");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
241 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
242 case OP_STORE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
243 /* ??? */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
244 puts("\tmemcpy(arr, &vec, sizeof(vec));");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
245 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
246 case OP_ADD:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
247 case OP_SUB:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
248 case OP_MUL:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
249 case OP_AND:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
250 case OP_OR:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
251 case OP_XOR:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
252 case OP_AVG:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
253 case OP_CMPLT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
254 case OP_CMPEQ:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
255 case OP_CMPGT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
256 #ifdef USE_VSX_EXTENSIONS
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
257 case OP_CMPLE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
258 case OP_CMPGE:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
259 #endif
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
260 case OP_LSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
261 case OP_LRSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
262 case OP_RSHIFT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
263 case OP_MIN:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
264 case OP_MAX: {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
265 static const char *op_altivec[OP_LRSHIFT - OP_ADD + 1] = {"add", "sub", "mul", "and", "or", "xor", "cmplt", "cmpeq", "cmpgt",
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
266 #ifdef USE_VSX_EXTENSIONS
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
267 "cmple",
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
268 "cmpge",
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
269 #endif
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
270 "min", "max", "avg", "sl", "sr"};
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
271 static const char *types[] = {"char", "short", NULL, "int"};
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
272
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
273 printf("\tv%sint%dx%d vec;\n", LOSIGN(is_signed), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
274 if (op == OP_RSHIFT) {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
275 printf("\tvec.altivec = vec_sr%s(vec1.altivec, vec2.altivec);\n", (is_signed) ? "a" : "");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
276 } else {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
277 printf("\tvec.altivec = (vector %s %s)vec_%s(vec1.altivec, vec2.altivec);\n", (is_signed) ? "signed" : "unsigned", types[(bits / 8) - 1], op_altivec[op - OP_ADD]);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
278 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
279 printf("\treturn vec;\n");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
280 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
281 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
282 default:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
283 printf("#error implement this operation");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
284 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
285 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
286
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
287 /* end function definition */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
288 puts("}");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
289
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
290 printf("# define V%sINT%dx%d_%s_DEFINED\n", UPSIGN(is_signed), bits, size, op_names[op].u);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
291 puts("#endif");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
292
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
293 switch (op) {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
294 case OP_SPLAT:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
295 case OP_MUL:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
296 puts("#endif");
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
297 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
298 default:
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
299 break;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
300 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
301 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
302
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
303 static inline void print_ops(int is_signed, int bits, int size)
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
304 {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
305 int i;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
306
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
307 printf("\n\n/* v%sint%dx%d */\n\n", (is_signed ? "u" : ""), bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
308
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
309 for (i = 0; i < OP_FINAL_; i++)
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
310 print_gcc_op(i, is_signed, bits, size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
311 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
312
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
313 #ifdef USE_VSX_EXTENSIONS
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
314 # define HEADER_GUARD_NAME "VSX"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
315 #else
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
316 # define HEADER_GUARD_NAME "ALTIVEC"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
317 #endif
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
318
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
319 static const char *header =
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
320 "/**\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
321 " * vec - a tiny SIMD vector library in C99\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
322 " * \n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
323 " * Copyright (c) 2024-2025 Paper\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
324 " * \n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
325 " * Permission is hereby granted, free of charge, to any person obtaining a copy\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
326 " * of this software and associated documentation files (the \"Software\"), to deal\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
327 " * in the Software without restriction, including without limitation the rights\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
328 " * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
329 " * copies of the Software, and to permit persons to whom the Software is\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
330 " * furnished to do so, subject to the following conditions:\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
331 " * \n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
332 " * The above copyright notice and this permission notice shall be included in all\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
333 " * copies or substantial portions of the Software.\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
334 " * \n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
335 " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
336 " * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
337 " * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
338 " * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
339 " * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
340 " * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
341 " * SOFTWARE.\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
342 "**/\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
343 "\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
344 "/* This file is automatically generated! Do not edit it directly!\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
345 " * Edit the code that generates it in utils/genaltivec.c --paper */\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
346 "\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
347 "#ifndef VEC_IMPL_PPC_" HEADER_GUARD_NAME "_H_\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
348 "#define VEC_IMPL_PPC_" HEADER_GUARD_NAME "_H_\n"
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
349 "\n";
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
350
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
351 static const char *footer =
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
352 "#endif /* VEC_IMPL_PPC_" HEADER_GUARD_NAME "_H_ */\n";
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
353
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
354 int main(void)
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
355 {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
356 static struct {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
357 int bits, size;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
358 } defs[] = {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
359 /* -- 8-bit */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
360 {8, 16},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
361 /* -- 16-bit */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
362 {16, 8},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
363
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
364 /* -- 32-bit */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
365 {32, 4},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
366
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
367 #ifdef USE_VSX_EXTENSIONS
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
368 /* -- 64-bit */
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
369 {64, 2},
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
370 #endif
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
371 };
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
372 int i;
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
373
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
374 puts(header);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
375
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
376 for (i = 0; i < ARRAY_SIZE(defs); i++) {
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
377 print_ops(1, defs[i].bits, defs[i].size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
378 print_ops(0, defs[i].bits, defs[i].size);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
379 }
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
380
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
381 puts(footer);
c6e0df09b86f *: performance improvements with old GCC, reimplement altivec
Paper <paper@tflc.us>
parents:
diff changeset
382 }