Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(598)

Side by Side Diff: crosstest/mem_intrin_main.cpp

Issue 1278173009: Inline memove for small constant sizes and refactor memcpy and memset. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « crosstest/mem_intrin.def ('k') | pydir/crosstest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* crosstest.py --test=mem_intrin.cpp --driver=mem_intrin_main.cpp \ 1 /* crosstest.py --test=mem_intrin.cpp --driver=mem_intrin_main.cpp \
2 --prefix=Subzero_ --output=mem_intrin */ 2 --prefix=Subzero_ --output=mem_intrin */
3 3
4 #include <stdint.h> /* cstdint requires -std=c++0x or higher */ 4 #include <stdint.h> /* cstdint requires -std=c++0x or higher */
5 #include <cstdio> 5 #include <cstdio>
6 6
7 #include "mem_intrin.h" 7 #include "mem_intrin.h"
8 #include "xdefs.h" 8 #include "xdefs.h"
9 9
10 namespace Subzero_ { 10 namespace Subzero_ {
11 #include "mem_intrin.h" 11 #include "mem_intrin.h"
12 } 12 }
13 13
14 #define XSTR(s) STR(s) 14 #define XSTR(s) STR(s)
15 #define STR(s) #s 15 #define STR(s) #s
16 16
17 void testFixedLen(SizeT &TotalTests, SizeT &Passes, SizeT &Failures) {
18 #define do_test_fixed(test_func) \
19 for (uint8_t init_val = 0; init_val < 100; ++init_val) { \
20 ++TotalTests; \
21 int llc_result = test_func(init_val); \
22 int sz_result = Subzero_::test_func(init_val); \
23 if (llc_result == sz_result) { \
24 ++Passes; \
25 } else { \
26 ++Failures; \
27 printf("Failure (%s): init_val=%d, llc=%d, sz=%d\n", STR(test_func), \
28 init_val, llc_result, sz_result); \
29 } \
30 }
31
32 do_test_fixed(memcpy_test_fixed_len);
33 do_test_fixed(memmove_test_fixed_len);
34 do_test_fixed(memset_test_fixed_len)
35 #undef do_test_fixed
36 }
37
38 void testVariableLen(SizeT &TotalTests, SizeT &Passes, SizeT &Failures) { 17 void testVariableLen(SizeT &TotalTests, SizeT &Passes, SizeT &Failures) {
39 uint8_t buf[256]; 18 uint8_t buf[256];
40 uint8_t buf2[256]; 19 uint8_t buf2[256];
41 #define do_test_variable(test_func) \ 20 #define do_test_variable(test_func) \
42 for (SizeT len = 4; len < 128; ++len) { \ 21 for (SizeT len = 4; len < 128; ++len) { \
43 for (uint8_t init_val = 0; init_val < 100; ++init_val) { \ 22 for (uint8_t init_val = 0; init_val < 100; ++init_val) { \
44 ++TotalTests; \ 23 ++TotalTests; \
45 int llc_result = test_func(buf, buf2, init_val, len); \ 24 int llc_result = test_func(buf, buf2, init_val, len); \
46 int sz_result = Subzero_::test_func(buf, buf2, init_val, len); \ 25 int sz_result = Subzero_::test_func(buf, buf2, init_val, len); \
47 if (llc_result == sz_result) { \ 26 if (llc_result == sz_result) { \
48 ++Passes; \ 27 ++Passes; \
49 } else { \ 28 } else { \
50 ++Failures; \ 29 ++Failures; \
51 printf("Failure (%s): init_val=%d, len=%d, llc=%d, sz=%d\n", \ 30 printf("Failure (%s): init_val=%d, len=%d, llc=%d, sz=%d\n", \
52 STR(test_func), init_val, len, llc_result, sz_result); \ 31 STR(test_func), init_val, len, llc_result, sz_result); \
53 } \ 32 } \
54 } \ 33 } \
55 } 34 }
56 35
57 do_test_variable(memcpy_test); 36 do_test_variable(memcpy_test);
58 do_test_variable(memmove_test); 37 do_test_variable(memmove_test);
59 do_test_variable(memset_test) 38 do_test_variable(memset_test)
60 #undef do_test_variable 39 #undef do_test_variable
61 } 40 }
62 41
42 void 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
63 #ifdef X8664_STACK_HACK 66 #ifdef X8664_STACK_HACK
64 extern "C" int wrapped_main(int argc, char *argv[]) { 67 extern "C" int wrapped_main(int argc, char *argv[]) {
65 #else // !defined(X8664_STACK_HACK) 68 #else // !defined(X8664_STACK_HACK)
66 int main(int argc, char *argv[]) { 69 int main(int argc, char *argv[]) {
67 #endif // X8664_STACK_HACK 70 #endif // X8664_STACK_HACK
68 unsigned TotalTests = 0; 71 unsigned TotalTests = 0;
69 unsigned Passes = 0; 72 unsigned Passes = 0;
70 unsigned Failures = 0; 73 unsigned Failures = 0;
71 testFixedLen(TotalTests, Passes, Failures); 74 testFixedLen(TotalTests, Passes, Failures);
72 testVariableLen(TotalTests, Passes, Failures); 75 testVariableLen(TotalTests, Passes, Failures);
73 printf("TotalTests=%u Passes=%u Failures=%u\n", TotalTests, Passes, Failures); 76 printf("TotalTests=%u Passes=%u Failures=%u\n", TotalTests, Passes, Failures);
74 return Failures; 77 return Failures;
75 } 78 }
OLDNEW
« no previous file with comments | « crosstest/mem_intrin.def ('k') | pydir/crosstest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698