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 }