Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/memcmp-1.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <string.h> | 8 #include <string.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
11 int lib_memcmp(const void *a, const void *b, size_t n) asm("memcmp"); | 11 #define STR1(X) #X |
12 int lib_strncmp(const char *a, const char *b, size_t n) asm("strncmp"); | 12 #define STR2(X) STR1(X) |
13 | |
14 int lib_memcmp(const void *a, const void *b, size_t n) | |
15 asm(STR2(__USER_LABEL_PREFIX__) "memcmp"); | |
16 int lib_strncmp(const char *a, const char *b, size_t n) | |
17 asm(STR2(__USER_LABEL_PREFIX__) "strncmp"); | |
13 | 18 |
14 #ifndef NRAND | 19 #ifndef NRAND |
20 #ifdef TEST_ALL | |
15 #define NRAND 10000 | 21 #define NRAND 10000 |
22 #else | |
23 #define NRAND 500 | |
16 #endif | 24 #endif |
17 #define MAX_SZ 200 | 25 #endif |
26 #ifndef TZONE | |
27 #ifdef TEST_ALL | |
28 #define TZONE 16 | |
29 #else | |
30 #define TZONE 8 | |
31 #endif | |
32 #endif | |
33 | |
34 #define MAX_SZ 600 | |
35 | |
36 #define DEF_RS(ALIGN) \ | |
37 static void test_memcmp_runtime_size_ ## ALIGN (const char *str1, \ | |
38 const char *str2, \ | |
39 size_t sz, int expect) \ | |
40 { \ | |
41 char three[8192] __attribute__ ((aligned (4096))); \ | |
42 char four[8192] __attribute__ ((aligned (4096))); \ | |
43 char *a, *b; \ | |
44 int i,j,a1,a2,r; \ | |
45 for (j = 0; j < 2; j++) \ | |
46 { \ | |
47 for (i = 0; i < 2; i++) \ | |
48 { \ | |
49 a = three+i*ALIGN+j*(4096-2*i*ALIGN); \ | |
50 b = four+i*ALIGN+j*(4096-2*i*ALIGN); \ | |
51 memcpy(a,str1,sz); \ | |
52 memcpy(b,str2,sz); \ | |
53 r = memcmp(a,b,sz); \ | |
54 if ( r < 0 && !(expect < 0) ) abort(); \ | |
55 if ( r > 0 && !(expect > 0) ) abort(); \ | |
56 if ( r == 0 && !(expect == 0) ) abort(); \ | |
57 } \ | |
58 } \ | |
59 } | |
60 | |
61 DEF_RS(1) | |
62 DEF_RS(2) | |
63 DEF_RS(4) | |
64 DEF_RS(8) | |
65 DEF_RS(16) | |
66 | |
67 static void test_memcmp_runtime_size (const char *str1, const char *str2, | |
68 size_t sz, int expect) | |
69 { | |
70 char three[8192] __attribute__ ((aligned (4096))); | |
71 char four[8192] __attribute__ ((aligned (4096))); | |
72 char *a, *b; | |
73 int i,j,a1,a2,r; | |
74 test_memcmp_runtime_size_1 (str1,str2,sz,expect); | |
75 test_memcmp_runtime_size_2 (str1,str2,sz,expect); | |
76 test_memcmp_runtime_size_4 (str1,str2,sz,expect); | |
77 test_memcmp_runtime_size_8 (str1,str2,sz,expect); | |
78 test_memcmp_runtime_size_16 (str1,str2,sz,expect); | |
79 for (j = 0; j < 2; j++) | |
80 { | |
81 for (i = 0; i < 2; i++) | |
82 { | |
83 for (a1=0; a1 < 2*sizeof(void *); a1++) | |
84 { | |
85 a = three+i*a1+j*(4096-2*i*a1); | |
86 memcpy(a,str1,sz); | |
87 for (a2=0; a2 < 2*sizeof(void *); a2++) | |
88 { | |
89 b = four+i*a2+j*(4096-2*i*a2); | |
90 memcpy(b,str2,sz); | |
91 r = memcmp(a,b,sz); | |
92 if ( r < 0 && !(expect < 0) ) abort(); | |
93 if ( r > 0 && !(expect > 0) ) abort(); | |
94 if ( r == 0 && !(expect == 0) ) abort(); | |
95 } | |
96 } | |
97 } | |
98 } | |
99 } | |
18 | 100 |
19 static void test_driver_memcmp (void (test_memcmp)(const char *, const char *, int), | 101 static void test_driver_memcmp (void (test_memcmp)(const char *, const char *, int), |
20 void (test_strncmp)(const char *, const char *, int), | 102 void (test_strncmp)(const char *, const char *, int), |
21 size_t sz, int align) | 103 size_t sz, int align) |
22 { | 104 { |
23 char buf1[MAX_SZ*2+10],buf2[MAX_SZ*2+10]; | 105 char buf1[MAX_SZ*2+TZONE],buf2[MAX_SZ*2+TZONE]; |
24 size_t test_sz = (sz<MAX_SZ)?sz:MAX_SZ; | 106 size_t test_sz = (sz<MAX_SZ)?sz:MAX_SZ; |
25 size_t diff_pos, zero_pos; | 107 size_t diff_pos, zero_pos; |
26 uint32_t e; | 108 uint32_t e; |
27 int i,j,l; | 109 int i,j,l; |
28 for(l=0;l<sz;l++) { | 110 for(l=0;l<sz;l++) { |
33 } | 115 } |
34 for(j=l;j<sz;j++) { | 116 for(j=l;j<sz;j++) { |
35 buf1[j] = rand() & 0xff; | 117 buf1[j] = rand() & 0xff; |
36 buf2[j] = rand() & 0xff; | 118 buf2[j] = rand() & 0xff; |
37 } | 119 } |
120 e = lib_memcmp(buf1,buf2,sz); | |
121 (*test_memcmp)(buf1,buf2,e); | |
122 test_memcmp_runtime_size (buf1, buf2, sz, e); | |
123 e = lib_strncmp(buf1,buf2,sz); | |
124 (*test_strncmp)(buf1,buf2,e); | |
38 } | 125 } |
39 e = lib_memcmp(buf1,buf2,sz); | |
40 (*test_memcmp)(buf1,buf2,e); | |
41 e = lib_strncmp(buf1,buf2,sz); | |
42 (*test_strncmp)(buf1,buf2,e); | |
43 } | 126 } |
44 for(diff_pos = ((test_sz>10)?(test_sz-10):0); diff_pos < test_sz+10; diff_pos++) | 127 for(diff_pos = ((test_sz>TZONE)?(test_sz-TZONE):0); diff_pos < test_sz+TZONE; diff_pos++) |
45 for(zero_pos = ((test_sz>10)?(test_sz-10):0); zero_pos < test_sz+10; zero_pos++) | 128 for(zero_pos = ((test_sz>TZONE)?(test_sz-TZONE):0); zero_pos < test_sz+TZONE; zero_pos++) |
46 { | 129 { |
47 memset(buf1, 'A', 2*test_sz); | 130 memset(buf1, 'A', 2*test_sz); |
48 memset(buf2, 'A', 2*test_sz); | 131 memset(buf2, 'A', 2*test_sz); |
49 buf2[diff_pos] = 'B'; | 132 buf2[diff_pos] = 'B'; |
50 buf1[zero_pos] = 0; | 133 buf1[zero_pos] = 0; |
51 buf2[zero_pos] = 0; | 134 buf2[zero_pos] = 0; |
52 e = lib_memcmp(buf1,buf2,sz); | 135 e = lib_memcmp(buf1,buf2,sz); |
53 (*test_memcmp)(buf1,buf2,e); | 136 (*test_memcmp)(buf1,buf2,e); |
54 (*test_memcmp)(buf2,buf1,-e); | 137 (*test_memcmp)(buf2,buf1,-e); |
55 (*test_memcmp)(buf2,buf2,0); | 138 (*test_memcmp)(buf2,buf2,0); |
139 test_memcmp_runtime_size (buf1, buf2, sz, e); | |
140 test_memcmp_runtime_size (buf2, buf1, sz, -e); | |
56 e = lib_strncmp(buf1,buf2,sz); | 141 e = lib_strncmp(buf1,buf2,sz); |
57 (*test_strncmp)(buf1,buf2,e); | 142 (*test_strncmp)(buf1,buf2,e); |
58 (*test_strncmp)(buf2,buf1,-e); | 143 (*test_strncmp)(buf2,buf1,-e); |
59 (*test_strncmp)(buf2,buf2,0); | 144 (*test_strncmp)(buf2,buf2,0); |
60 /* differing length: */ | 145 /* differing length: */ |
61 buf2[diff_pos] = 0; | 146 buf2[diff_pos] = 0; |
62 e = lib_memcmp(buf1,buf2,sz); | 147 e = lib_memcmp(buf1,buf2,sz); |
63 (*test_memcmp)(buf1,buf2,e); | 148 (*test_memcmp)(buf1,buf2,e); |
149 test_memcmp_runtime_size (buf1, buf2, sz, e); | |
64 e = lib_strncmp(buf1,buf2,sz); | 150 e = lib_strncmp(buf1,buf2,sz); |
65 (*test_strncmp)(buf1,buf2,e); | 151 (*test_strncmp)(buf1,buf2,e); |
66 memset(buf2+diff_pos,'B',sizeof(buf2)-diff_pos); | 152 memset(buf2+diff_pos,'B',sizeof(buf2)-diff_pos); |
67 buf2[zero_pos] = 0; | 153 buf2[zero_pos] = 0; |
68 e = lib_memcmp(buf1,buf2,sz); | 154 e = lib_memcmp(buf1,buf2,sz); |
69 (*test_memcmp)(buf1,buf2,e); | 155 (*test_memcmp)(buf1,buf2,e); |
70 (*test_memcmp)(buf2,buf1,-e); | 156 (*test_memcmp)(buf2,buf1,-e); |
157 test_memcmp_runtime_size (buf1, buf2, sz, e); | |
158 test_memcmp_runtime_size (buf2, buf1, sz, -e); | |
71 e = lib_strncmp(buf1,buf2,sz); | 159 e = lib_strncmp(buf1,buf2,sz); |
72 (*test_strncmp)(buf1,buf2,e); | 160 (*test_strncmp)(buf1,buf2,e); |
73 (*test_strncmp)(buf2,buf1,-e); | 161 (*test_strncmp)(buf2,buf1,-e); |
74 } | 162 } |
75 } | 163 } |
369 DEF_TEST(100,1) | 457 DEF_TEST(100,1) |
370 DEF_TEST(100,2) | 458 DEF_TEST(100,2) |
371 DEF_TEST(100,4) | 459 DEF_TEST(100,4) |
372 DEF_TEST(100,8) | 460 DEF_TEST(100,8) |
373 DEF_TEST(100,16) | 461 DEF_TEST(100,16) |
462 DEF_TEST(191,1) | |
463 DEF_TEST(192,1) | |
464 DEF_TEST(193,1) | |
465 DEF_TEST(200,1) | |
466 DEF_TEST(400,1) | |
374 #else | 467 #else |
468 DEF_TEST(1,1) | |
469 DEF_TEST(2,1) | |
375 DEF_TEST(3,1) | 470 DEF_TEST(3,1) |
376 DEF_TEST(4,1) | 471 DEF_TEST(4,1) |
377 DEF_TEST(5,1) | 472 DEF_TEST(5,1) |
378 DEF_TEST(5,8) | 473 DEF_TEST(5,8) |
379 DEF_TEST(6,1) | 474 DEF_TEST(6,1) |
385 DEF_TEST(7,8) | 480 DEF_TEST(7,8) |
386 DEF_TEST(8,1) | 481 DEF_TEST(8,1) |
387 DEF_TEST(9,1) | 482 DEF_TEST(9,1) |
388 DEF_TEST(16,1) | 483 DEF_TEST(16,1) |
389 DEF_TEST(32,1) | 484 DEF_TEST(32,1) |
390 DEF_TEST(100,1) | 485 DEF_TEST(33,8) |
391 DEF_TEST(100,8) | 486 DEF_TEST(49,1) |
392 #endif | 487 #endif |
393 | 488 |
394 int | 489 int |
395 main(int argc, char **argv) | 490 main(int argc, char **argv) |
396 { | 491 { |
397 #ifdef TEST_ALL | 492 #ifdef TEST_ALL |
398 RUN_TEST(1,1) | 493 RUN_TEST(1,1) |
399 RUN_TEST(1,2) | 494 RUN_TEST(1,2) |
400 RUN_TEST(1,4) | 495 RUN_TEST(1,4) |
401 RUN_TEST(1,8) | 496 RUN_TEST(1,8) |
402 RUN_TEST(1,16) | 497 RUN_TEST(1,16) |
403 RUN_TEST(2,1) | 498 RUN_TEST(2,1) |
643 RUN_TEST(100,1) | 738 RUN_TEST(100,1) |
644 RUN_TEST(100,2) | 739 RUN_TEST(100,2) |
645 RUN_TEST(100,4) | 740 RUN_TEST(100,4) |
646 RUN_TEST(100,8) | 741 RUN_TEST(100,8) |
647 RUN_TEST(100,16) | 742 RUN_TEST(100,16) |
743 RUN_TEST(191,1) | |
744 RUN_TEST(192,1) | |
745 RUN_TEST(193,1) | |
746 RUN_TEST(200,1) | |
747 RUN_TEST(400,1) | |
648 #else | 748 #else |
749 RUN_TEST(1,1) | |
750 RUN_TEST(2,1) | |
649 RUN_TEST(3,1) | 751 RUN_TEST(3,1) |
650 RUN_TEST(4,1) | 752 RUN_TEST(4,1) |
651 RUN_TEST(5,1) | 753 RUN_TEST(5,1) |
652 RUN_TEST(5,8) | 754 RUN_TEST(5,8) |
653 RUN_TEST(6,1) | 755 RUN_TEST(6,1) |
659 RUN_TEST(7,8) | 761 RUN_TEST(7,8) |
660 RUN_TEST(8,1) | 762 RUN_TEST(8,1) |
661 RUN_TEST(9,1) | 763 RUN_TEST(9,1) |
662 RUN_TEST(16,1) | 764 RUN_TEST(16,1) |
663 RUN_TEST(32,1) | 765 RUN_TEST(32,1) |
664 RUN_TEST(100,1) | 766 RUN_TEST(33,8) |
665 RUN_TEST(100,8) | 767 RUN_TEST(49,1) |
666 #endif | 768 #endif |
667 } | 769 } |