annotate test/samples/composite/args.c @ 215:2beca1d11c96

- dynload_plain test now run with helper script - added __aarch64__ detection to autovars (b/c still not merged with dyncall_macros)
author Tassilo Philipp
date Thu, 06 Apr 2017 02:17:35 +0200
parents 3e629dc19168
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 // types:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 typedef struct { int x, y; } s2i;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 typedef struct { int x, y, z, w; } s4i;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 typedef struct { int x, y, z, w, a, b, c, d; } s8i;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 typedef struct { float x, y; } s2f;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 typedef struct { float x, y, z, w; } s4f;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 typedef struct { double x; } s1d;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 typedef struct { double x, y; } s2d;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 typedef struct { double x, y, z, w; } s4d;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 typedef struct { long double x; } s1q;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 #if defined(__ARM_NEON__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 #include <arm_neon.h>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 #if defined(__i386__) || defined(__x86_64__) && ( defined(__MMX__) || defined(__SSE__) )
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 #if defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ > 2)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 #include <immintrin.h>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 #if defined(__AVX__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 #define V256 1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 typedef __m256 v256_t;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 #else
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 #include <emmintrin.h>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 #if defined(__MMX__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 #define V64 1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 typedef __m64 v64_t;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 #if defined(__SSE__)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 #define V128 1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 typedef __m128 v128_t;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 #if V64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 typedef struct { v64_t f1; } s1w;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 typedef struct { v64_t f1, f2; } s2w;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 typedef struct { v64_t f1, f2, f3, f4; } s4w;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 #if V128
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 typedef struct { v128_t f1; } s1x;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 typedef struct { v128_t f1, f2; } s2x;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 typedef struct { v64_t f1; v128_t f2; } swx;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 // x86_64:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 x86_64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 ------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 (v{ii}) regs int 8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 (v{iiii}) regs int 16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 (v{iiiiiiii}) stack 32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 (v{ff}) regs sse 8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 (v{ffff}) regs sse 16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 (v{d}) regs sse 8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 (v{dd}) regs sse 16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 (v{dddd}) stack 32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 (v{w}) regs sse 8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 (v{ww}) regs sse 16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 (v{wwww}) stack 32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 (v{x}) regs sse 16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 (v{xx}) stack 32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 (v(wx}) stack 32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 (v{xw}) stack 32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 (v{y}) stack 32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 (v{yy}{x}) stack 32
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 (v{ifif})
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 #if V256
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 typedef struct { v256_t f1; } s1y;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 typedef struct { v256_t f1; v256_t f2; } s2y;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 typedef v256_t y;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 extern void f_y(y a1); void call_f_y() { y a1 = {0,}; f_y(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 extern void f_s2ys1x(s2y a1,s1x a2); void call_f_s2ys1x() { s2y a1 = {0,}; s1x a2 = {0,}; f_s2ys1x(a1,a2); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 extern void f_s1xs2y(s1x a1,s2y a2); void call_f_s1xs2y() { s1x a1 = {0,}; s2y a2 = {0,}; f_s1xs2y(a1,a2); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 extern void f_s1y(s1y a1); void call_f_s1y() { s1y a1 = {0,}; f_s1y(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 extern void f_s2y(s2y a1); void call_f_s2y() { s2y a1 = {0,}; f_s2y(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 extern void f_s1ys1y(s1y a1,s1y a2); void call_f_s1ys1y() { s1y a1 = {0,}, a2 = {0,}; f_s1ys1y(a1,a2); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 extern void f_s2ys1y(s2y a1,s1y a2); void call_f_s2ys1y() { s2y a1 = {0,}; s1y a2 = {0,}; f_s2ys1y(a1,a2); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 #if V128
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 extern void f_swx(swx a1); void call_f_swx() { swx a1 = {0,}; f_swx(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 extern void f_s2x(s2x a1); void call_f_s2x() { s2x a1 = {0,}; f_s2x(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 extern void f_s1x(s1x a1); void call_f_s1x() { s1x a1 = {0,}; f_s1x(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 #if V64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 extern void f_s4w(s4w a1); void call_f_s4w() { s4w a1 = {0,}; f_s4w(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 extern void f_s2w(s2w a1); void call_f_s2w() { s2w a1 = {0,}; f_s2w(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 extern void f_s1w(s1w a1); void call_f_s1w() { s1w a1 = {0,}; f_s1w(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 #endif
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 // one composite argument:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 extern void f_s2i(s2i a1); void call_f_s2i() { s2i a1 = {0,}; f_s2i(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 extern void f_s4i(s4i a1); void call_f_s4i() { s4i a1 = {0,}; f_s4i(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 extern void f_s8i(s8i a1); void call_f_s8i() { s8i a1 = {0,}; f_s8i(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 extern void f_s2f(s2f a1); void call_f_s2f() { s2f a1 = {0,}; f_s2f(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 extern void f_s4f(s4f a1); void call_f_s4f() { s4f a1 = {0,}; f_s4f(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 extern void f_s1d(s1d a1); void call_f_s1d() { s1d a1 = {0,}; f_s1d(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 extern void f_s2d(s2d a1); void call_f_s2d() { s2d a1 = {0,}; f_s2d(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 extern void f_s4d(s4d a1); void call_f_s4d() { s4d a1 = {0,}; f_s4d(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 extern void f_s1q(s1q a1); void call_f_s1q() { s1q a1 = {0,}; f_s1q(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 // multiple arguments:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 extern void f_s2ds2d(s2d a1, s2d a2);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 void call_f_s2ds2d() {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 s2d a1={0,};
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 s2d a2={0,};
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 f_s2ds2d(a1,a2);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 typedef struct { float x; int y; float z; int w; } sfifi;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 extern void f_sfifi(sfifi a1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 void call_f_sfifi() { sfifi a1 = {0,1,2,3,}; f_sfifi(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 // int/float 4-byte alignment.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159 typedef struct { int x; float y; int z; float w; } sifif;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 extern void f_sifif(sifif a1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 void call_f_sifif() { sifif a1 = {0,1,2,3,}; f_sifif(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 #define FULL_T char, short, int, long int, char, char, char, char
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 #define FULL_V 0,1,2,3,4,5,6,7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 #define REMAIN64_T char, char
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 #define REMAIN64_V 0,1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168 extern void f_full_sifif(FULL_T, sifif a1); void call_f_full_sifif() { sifif a1 = {0,}; f_full_sifif(FULL_V,a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169 extern void f_remain64_sifif(REMAIN64_T, sifif a1); void call_f_remain64_sifif() { sifif a1 = {0,}; f_remain64_sifif(REMAIN64_V,a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
171 typedef struct { float f1,f2,f3; char f4; } sfffc;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172 extern void f_sfffc(sfffc a1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 void call_f_sfffc() { sfffc a1 = {0,1,2,3,}; f_sfffc(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175 typedef struct { char f1; float f2,f3,f4; } scfff;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176 extern void f_scfff(scfff a1);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 void call_f_scfff() { scfff a1 = {0,1,2,3,}; f_scfff(a1); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178