1 /* Copyright (C) 2002 Free Software Foundation.
3 Test memset with various combinations of constant pointer alignments and
4 lengths to make sure any optimizations in the compiler are correct.
6 Written by Roger Sayle, July 22, 2002. */
14 #define MAX_OFFSET (sizeof (long long))
22 #define MAX_EXTRA (sizeof (long long))
25 #define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA)
39 for (i
= 0; i
< MAX_LENGTH
; i
++)
43 void check (int off
, int len
, int ch
)
49 for (i
= 0; i
< off
; i
++, q
++)
53 for (i
= 0; i
< len
; i
++, q
++)
57 for (i
= 0; i
< MAX_EXTRA
; i
++, q
++)
68 for (len
= 0; len
< MAX_COPY
; len
++)
72 p
= memset (u
.buf
, '\0', len
);
73 if (p
!= u
.buf
) abort ();
76 p
= memset (u
.buf
, A
, len
);
77 if (p
!= u
.buf
) abort ();
80 p
= memset (u
.buf
, 'B', len
);
81 if (p
!= u
.buf
) abort ();
86 for (len
= 0; len
< MAX_COPY
; len
++)
90 p
= memset (u
.buf
+1, '\0', len
);
91 if (p
!= u
.buf
+1) abort ();
94 p
= memset (u
.buf
+1, A
, len
);
95 if (p
!= u
.buf
+1) abort ();
98 p
= memset (u
.buf
+1, 'B', len
);
99 if (p
!= u
.buf
+1) abort ();
104 for (len
= 0; len
< MAX_COPY
; len
++)
108 p
= memset (u
.buf
+2, '\0', len
);
109 if (p
!= u
.buf
+2) abort ();
110 check (2, len
, '\0');
112 p
= memset (u
.buf
+2, A
, len
);
113 if (p
!= u
.buf
+2) abort ();
116 p
= memset (u
.buf
+2, 'B', len
);
117 if (p
!= u
.buf
+2) abort ();
122 for (len
= 0; len
< MAX_COPY
; len
++)
126 p
= memset (u
.buf
+3, '\0', len
);
127 if (p
!= u
.buf
+3) abort ();
128 check (3, len
, '\0');
130 p
= memset (u
.buf
+3, A
, len
);
131 if (p
!= u
.buf
+3) abort ();
134 p
= memset (u
.buf
+3, 'B', len
);
135 if (p
!= u
.buf
+3) abort ();
140 for (len
= 0; len
< MAX_COPY
; len
++)
144 p
= memset (u
.buf
+4, '\0', len
);
145 if (p
!= u
.buf
+4) abort ();
146 check (4, len
, '\0');
148 p
= memset (u
.buf
+4, A
, len
);
149 if (p
!= u
.buf
+4) abort ();
152 p
= memset (u
.buf
+4, 'B', len
);
153 if (p
!= u
.buf
+4) abort ();
158 for (len
= 0; len
< MAX_COPY
; len
++)
162 p
= memset (u
.buf
+5, '\0', len
);
163 if (p
!= u
.buf
+5) abort ();
164 check (5, len
, '\0');
166 p
= memset (u
.buf
+5, A
, len
);
167 if (p
!= u
.buf
+5) abort ();
170 p
= memset (u
.buf
+5, 'B', len
);
171 if (p
!= u
.buf
+5) abort ();
176 for (len
= 0; len
< MAX_COPY
; len
++)
180 p
= memset (u
.buf
+6, '\0', len
);
181 if (p
!= u
.buf
+6) abort ();
182 check (6, len
, '\0');
184 p
= memset (u
.buf
+6, A
, len
);
185 if (p
!= u
.buf
+6) abort ();
188 p
= memset (u
.buf
+6, 'B', len
);
189 if (p
!= u
.buf
+6) abort ();
194 for (len
= 0; len
< MAX_COPY
; len
++)
198 p
= memset (u
.buf
+7, '\0', len
);
199 if (p
!= u
.buf
+7) abort ();
200 check (7, len
, '\0');
202 p
= memset (u
.buf
+7, A
, len
);
203 if (p
!= u
.buf
+7) abort ();
206 p
= memset (u
.buf
+7, 'B', len
);
207 if (p
!= u
.buf
+7) abort ();