@@ -171,6 +171,61 @@ typedef union {
171171 } \
172172 }
173173
174+ #define func_i_q_q (funcStr , funcName ) { \
175+ while (startsWith(buf, funcStr " ")) { \
176+ sentinel = 0; \
177+ int lane = xrand() % VECTLENDP; \
178+ cnv128 c0, c1; \
179+ sscanf(buf, funcStr " %" PRIx64 ":%" PRIx64 " %" PRIx64 ":%" PRIx64, &c0.h, &c0.l, &c1.h, &c1.l); \
180+ vargquad a0, a1; \
181+ memrand(&a0, sizeof(vargquad)); \
182+ memrand(&a1, sizeof(vargquad)); \
183+ a0.s[lane] = c0.q; \
184+ a1.s[lane] = c1.q; \
185+ vint vi = funcName(a0, a1); \
186+ int t[VECTLENDP]; \
187+ vstoreu_v_p_vi(t, vi); \
188+ printf("%d\n", t[lane]); \
189+ fflush(stdout); \
190+ if (fgets(buf, BUFSIZE-1, stdin) == NULL) break; \
191+ } \
192+ }
193+
194+ #define func_d_q (funcStr , funcName ) { \
195+ while (startsWith(buf, funcStr " ")) { \
196+ sentinel = 0; \
197+ int lane = xrand() % VECTLENDP; \
198+ cnv128 c0; \
199+ sscanf(buf, funcStr " %" PRIx64 ":%" PRIx64, &c0.h, &c0.l); \
200+ vargquad a0; \
201+ memrand(&a0, sizeof(vargquad)); \
202+ a0.s[lane] = c0.q; \
203+ double d[VECTLENDP]; \
204+ vstoreu_v_p_vd(d, funcName(a0)); \
205+ printf("%" PRIx64 "\n", d2u(d[lane])); \
206+ fflush(stdout); \
207+ if (fgets(buf, BUFSIZE-1, stdin) == NULL) break; \
208+ } \
209+ }
210+
211+ #define func_q_d (funcStr , funcName ) { \
212+ while (startsWith(buf, funcStr " ")) { \
213+ sentinel = 0; \
214+ int lane = xrand() % VECTLENDP; \
215+ uint64_t u; \
216+ sscanf(buf, funcStr " %" PRIx64, &u); \
217+ double s[VECTLENDP]; \
218+ memrand(s, sizeof(s)); \
219+ s[lane] = u2d(u); \
220+ vargquad a0 = funcName(vloadu_vd_p(s)); \
221+ cnv128 c0; \
222+ c0.q = a0.s[lane]; \
223+ printf("%" PRIx64 ":%" PRIx64 "\n", c0.h, c0.l); \
224+ fflush(stdout); \
225+ if (fgets(buf, BUFSIZE-1, stdin) == NULL) break; \
226+ } \
227+ }
228+
174229#define func_strtoq (funcStr ) { \
175230 while (startsWith(buf, funcStr " ")) { \
176231 sentinel = 0; \
@@ -224,7 +279,30 @@ int do_test(int argc, char **argv) {
224279 func_q_q_q ("mulq_u05" , xmulq_u05 );
225280 func_q_q_q ("divq_u05" , xdivq_u05 );
226281 func_q_q ("sqrtq_u05" , xsqrtq_u05 );
282+ func_q_q ("sinq_u10" , xsinq_u10 );
283+ func_q_q ("cosq_u10" , xcosq_u10 );
284+ func_q_q ("tanq_u10" , xtanq_u10 );
285+ func_q_q ("asinq_u10" , xasinq_u10 );
286+ func_q_q ("acosq_u10" , xacosq_u10 );
287+ func_q_q ("atanq_u10" , xatanq_u10 );
288+ func_q_q ("expq_u10" , xexpq_u10 );
289+ func_q_q ("exp2q_u10" , xexp2q_u10 );
290+ func_q_q ("exp10q_u10" , xexp10q_u10 );
291+ func_q_q ("expm1q_u10" , xexpm1q_u10 );
292+ func_q_q ("logq_u10" , xlogq_u10 );
293+ func_q_q ("log2q_u10" , xlog2q_u10 );
294+ func_q_q ("log10q_u10" , xlog10q_u10 );
295+ func_q_q ("log1pq_u10" , xlog1pq_u10 );
227296 func_q_q ("negq" , xnegq );
297+ func_q_d ("cast_from_doubleq" , xcast_from_doubleq );
298+ func_d_q ("cast_to_doubleq" , xcast_to_doubleq );
299+ func_i_q_q ("cmpltq" , xcmpltq );
300+ func_i_q_q ("cmpgtq" , xcmpgtq );
301+ func_i_q_q ("cmpleq" , xcmpleq );
302+ func_i_q_q ("cmpgeq" , xcmpgeq );
303+ func_i_q_q ("cmpeqq" , xcmpeqq );
304+ func_i_q_q ("cmpneqq" , xcmpneqq );
305+ func_i_q_q ("unordq" , xunordq );
228306 func_strtoq ("strtoq" );
229307 func_qtostr ("qtostr" );
230308 sentinel ++ ;
0 commit comments