blob: f032cf921f5f33af942079c78d6f435c904086a2 [file] [log] [blame]
Jan Voung3bd9f1a2014-06-18 10:50:57 -07001/* crosstest.py --test=mem_intrin.cpp --driver=mem_intrin_main.cpp \
2 --prefix=Subzero_ --output=mem_intrin */
3
Jan Voung3bd9f1a2014-06-18 10:50:57 -07004#include <cstdio>
Antonio Maioranoca8a16e2020-11-10 16:56:20 -05005#include <stdint.h> /* cstdint requires -std=c++0x or higher */
Jan Voung3bd9f1a2014-06-18 10:50:57 -07006
7#include "mem_intrin.h"
John Porto1d235422015-08-12 12:37:53 -07008#include "xdefs.h"
9
Jan Voung3bd9f1a2014-06-18 10:50:57 -070010namespace Subzero_ {
11#include "mem_intrin.h"
12}
13
14#define XSTR(s) STR(s)
15#define STR(s) #s
16
John Porto1d235422015-08-12 12:37:53 -070017void testVariableLen(SizeT &TotalTests, SizeT &Passes, SizeT &Failures) {
Jan Voung3bd9f1a2014-06-18 10:50:57 -070018 uint8_t buf[256];
19 uint8_t buf2[256];
Jim Stichnothdd842db2015-01-27 12:53:53 -080020#define do_test_variable(test_func) \
John Porto1d235422015-08-12 12:37:53 -070021 for (SizeT len = 4; len < 128; ++len) { \
Jim Stichnothdd842db2015-01-27 12:53:53 -080022 for (uint8_t init_val = 0; init_val < 100; ++init_val) { \
23 ++TotalTests; \
24 int llc_result = test_func(buf, buf2, init_val, len); \
25 int sz_result = Subzero_::test_func(buf, buf2, init_val, len); \
26 if (llc_result == sz_result) { \
27 ++Passes; \
28 } else { \
29 ++Failures; \
30 printf("Failure (%s): init_val=%d, len=%d, llc=%d, sz=%d\n", \
31 STR(test_func), init_val, len, llc_result, sz_result); \
32 } \
33 } \
Jan Voung3bd9f1a2014-06-18 10:50:57 -070034 }
35
Jim Stichnothdd842db2015-01-27 12:53:53 -080036 do_test_variable(memcpy_test);
37 do_test_variable(memmove_test);
Jan Voung3bd9f1a2014-06-18 10:50:57 -070038 do_test_variable(memset_test)
39#undef do_test_variable
40}
41
Andrew Scullcfa628b2015-08-20 14:23:05 -070042void testFixedLen(SizeT &TotalTests, SizeT &Passes, SizeT &Failures) {
43#define do_test_fixed(test_func, NBYTES) \
44 for (uint8_t init_val = 0; init_val < 100; ++init_val) { \
45 ++TotalTests; \
46 int llc_result = test_func##_##NBYTES(init_val); \
47 int sz_result = Subzero_::test_func##_##NBYTES(init_val); \
48 if (llc_result == sz_result) { \
49 ++Passes; \
50 } else { \
51 ++Failures; \
52 printf("Failure (%s): init_val=%d, len=%d, llc=%d, sz=%d\n", \
53 STR(test_func), init_val, NBYTES, llc_result, sz_result); \
54 } \
55 }
56
57#define X(NBYTES) \
58 do_test_fixed(memcpy_test_fixed_len, NBYTES); \
59 do_test_fixed(memmove_test_fixed_len, NBYTES); \
60 do_test_fixed(memset_test_fixed_len, NBYTES);
61 MEMINTRIN_SIZE_TABLE
62#undef X
63#undef do_test_fixed
64}
65
John Porto1d235422015-08-12 12:37:53 -070066int main(int argc, char *argv[]) {
Jan Voung3bd9f1a2014-06-18 10:50:57 -070067 unsigned TotalTests = 0;
68 unsigned Passes = 0;
69 unsigned Failures = 0;
70 testFixedLen(TotalTests, Passes, Failures);
71 testVariableLen(TotalTests, Passes, Failures);
72 printf("TotalTests=%u Passes=%u Failures=%u\n", TotalTests, Passes, Failures);
73 return Failures;
74}