1 /* Optimized string comparison.
2 Copyright (C) 2001-2002, 2007, 2009-2013 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published
6 by the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* Written by Bruno Haible <bruno@clisp.org>. */
24 /* STREQ_OPT allows to optimize string comparison with a small literal string.
25 STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
26 is semantically equivalent to
27 strcmp (s, "EUC-KR") == 0
30 /* Help GCC to generate good code for string comparisons with
32 #if defined (__GNUC__) && defined (__OPTIMIZE__)
35 streq9 (const char *s1
, const char *s2
)
37 return strcmp (s1
+ 9, s2
+ 9) == 0;
41 streq8 (const char *s1
, const char *s2
, char s28
)
48 return streq9 (s1
, s2
);
55 streq7 (const char *s1
, const char *s2
, char s27
, char s28
)
62 return streq8 (s1
, s2
, s28
);
69 streq6 (const char *s1
, const char *s2
, char s26
, char s27
, char s28
)
76 return streq7 (s1
, s2
, s27
, s28
);
83 streq5 (const char *s1
, const char *s2
, char s25
, char s26
, char s27
, char s28
)
90 return streq6 (s1
, s2
, s26
, s27
, s28
);
97 streq4 (const char *s1
, const char *s2
, char s24
, char s25
, char s26
, char s27
, char s28
)
104 return streq5 (s1
, s2
, s25
, s26
, s27
, s28
);
111 streq3 (const char *s1
, const char *s2
, char s23
, char s24
, char s25
, char s26
, char s27
, char s28
)
118 return streq4 (s1
, s2
, s24
, s25
, s26
, s27
, s28
);
125 streq2 (const char *s1
, const char *s2
, char s22
, char s23
, char s24
, char s25
, char s26
, char s27
, char s28
)
132 return streq3 (s1
, s2
, s23
, s24
, s25
, s26
, s27
, s28
);
139 streq1 (const char *s1
, const char *s2
, char s21
, char s22
, char s23
, char s24
, char s25
, char s26
, char s27
, char s28
)
146 return streq2 (s1
, s2
, s22
, s23
, s24
, s25
, s26
, s27
, s28
);
153 streq0 (const char *s1
, const char *s2
, char s20
, char s21
, char s22
, char s23
, char s24
, char s25
, char s26
, char s27
, char s28
)
160 return streq1 (s1
, s2
, s21
, s22
, s23
, s24
, s25
, s26
, s27
, s28
);
166 #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
167 streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
171 #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
172 (strcmp (s1, s2) == 0)
176 #endif /* _GL_STREQ_H */