Message ID | 20220712192910.351121-10-goldstein.w.n@gmail.com |
---|---|
State | New |
Headers | show |
Series | [v1] x86: Add missing rtm tests for strcmp family | expand |
On Tue, Jul 12, 2022 at 12:29 PM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > Add new tests for: > strcasecmp > strncasecmp > strcmp > wcscmp > > These functions all have avx2_rtm implementations so should be tested. > --- > sysdeps/x86/Makefile | 8 ++++ > sysdeps/x86/tst-strcasecmp-rtm.c | 23 ++++++++++ > sysdeps/x86/tst-strcmp-rtm.c | 70 +++++++++++++++++++++++++++++++ > sysdeps/x86/tst-strncasecmp-rtm.c | 23 ++++++++++ > sysdeps/x86/tst-strncmp-rtm.c | 6 ++- > sysdeps/x86/tst-wcscmp-rtm.c | 22 ++++++++++ > 6 files changed, 150 insertions(+), 2 deletions(-) > create mode 100644 sysdeps/x86/tst-strcasecmp-rtm.c > create mode 100644 sysdeps/x86/tst-strcmp-rtm.c > create mode 100644 sysdeps/x86/tst-strncasecmp-rtm.c > create mode 100644 sysdeps/x86/tst-wcscmp-rtm.c > > diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile > index c6bee981f8..56fd5fc805 100644 > --- a/sysdeps/x86/Makefile > +++ b/sysdeps/x86/Makefile > @@ -95,11 +95,15 @@ tests += \ > tst-memmove-rtm \ > tst-memrchr-rtm \ > tst-memset-rtm \ > + tst-strcasecmp-rtm \ > tst-strchr-rtm \ > + tst-strcmp-rtm \ > tst-strcpy-rtm \ > tst-strlen-rtm \ > + tst-strncasecmp-rtm \ > tst-strncmp-rtm \ > tst-strrchr-rtm \ > + tst-wcscmp-rtm \ > tst-wcsncmp-rtm \ > # tests > > @@ -108,11 +112,15 @@ CFLAGS-tst-memcmp-rtm.c += -mrtm > CFLAGS-tst-memmove-rtm.c += -mrtm > CFLAGS-tst-memrchr-rtm.c += -mrtm > CFLAGS-tst-memset-rtm.c += -mrtm > +CFLAGS-tst-strcasecmp-rtm.c += -mrtm > CFLAGS-tst-strchr-rtm.c += -mrtm > +CFLAGS-tst-strcmp-rtm.c += -mrtm > CFLAGS-tst-strcpy-rtm.c += -mrtm > CFLAGS-tst-strlen-rtm.c += -mrtm > +CFLAGS-tst-strncasecmp-rtm.c += -mrtm -Wno-error > CFLAGS-tst-strncmp-rtm.c += -mrtm -Wno-error > CFLAGS-tst-strrchr-rtm.c += -mrtm > +CFLAGS-tst-wcscmp-rtm.c += -mrtm > CFLAGS-tst-wcsncmp-rtm.c += -mrtm -Wno-error > endif > > diff --git a/sysdeps/x86/tst-strcasecmp-rtm.c b/sysdeps/x86/tst-strcasecmp-rtm.c > new file mode 100644 > index 0000000000..da460799ce > --- /dev/null > +++ b/sysdeps/x86/tst-strcasecmp-rtm.c > @@ -0,0 +1,23 @@ > +/* Test case for strcasecmp inside a transactionally executing RTM > + region. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define STRCMP strcasecmp > +#define TEST_NAME "strcasecmp" > + > +#include "tst-strcmp-rtm.c" > diff --git a/sysdeps/x86/tst-strcmp-rtm.c b/sysdeps/x86/tst-strcmp-rtm.c > new file mode 100644 > index 0000000000..371916a2f0 > --- /dev/null > +++ b/sysdeps/x86/tst-strcmp-rtm.c > @@ -0,0 +1,70 @@ > +/* Test case for strcmp inside a transactionally executing RTM > + region. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <stdint.h> > +#include <tst-string-rtm.h> > + > +#ifdef WIDE > +# define CHAR wchar_t > +# define MEMSET wmemset > +# define STRCMP wcscmp > +# define TEST_NAME "wcscmp" > +#else /* !WIDE */ > +# define CHAR char > +# define MEMSET memset > + > +# ifndef STRCMP > +# define STRCMP strcmp > +# define TEST_NAME "strcmp" > +# endif > +#endif > + > +#define LOOP 3000 > +#define STRING_SIZE 1024 > +CHAR string1[STRING_SIZE]; > +CHAR string2[STRING_SIZE]; > + > +__attribute__ ((noinline, noclone)) > +static int > +prepare (void) > +{ > + MEMSET (string1, 'a', STRING_SIZE - 1); > + MEMSET (string2, 'a', STRING_SIZE - 1); > + if (STRCMP (string1, string2) == 0) > + return EXIT_SUCCESS; > + else > + return EXIT_FAILURE; > +} > + > +__attribute__ ((noinline, noclone)) > +static int > +function (void) > +{ > + if (STRCMP (string1, string2) == 0) > + return 0; > + else > + return 1; > +} > + > + > +static int > +do_test (void) > +{ > + return do_test_1 (TEST_NAME, LOOP, prepare, function); > +} > diff --git a/sysdeps/x86/tst-strncasecmp-rtm.c b/sysdeps/x86/tst-strncasecmp-rtm.c > new file mode 100644 > index 0000000000..4ebe58951b > --- /dev/null > +++ b/sysdeps/x86/tst-strncasecmp-rtm.c > @@ -0,0 +1,23 @@ > +/* Test case for strncasecmp inside a transactionally executing RTM > + region. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define STRNCMP strncasecmp > +#define TEST_NAME "strncasecmp" > + > +#include "tst-strncmp-rtm.c" > diff --git a/sysdeps/x86/tst-strncmp-rtm.c b/sysdeps/x86/tst-strncmp-rtm.c > index a3b14e72ff..2d27b20a68 100644 > --- a/sysdeps/x86/tst-strncmp-rtm.c > +++ b/sysdeps/x86/tst-strncmp-rtm.c > @@ -27,8 +27,10 @@ > #else /* !WIDE */ > # define CHAR char > # define MEMSET memset > -# define STRNCMP strncmp > -# define TEST_NAME "strncmp" > +# ifndef STRNCMP > +# define STRNCMP strncmp > +# define TEST_NAME "strncmp" > +# endif > #endif /* !WIDE */ > > > diff --git a/sysdeps/x86/tst-wcscmp-rtm.c b/sysdeps/x86/tst-wcscmp-rtm.c > new file mode 100644 > index 0000000000..28a5b4b82d > --- /dev/null > +++ b/sysdeps/x86/tst-wcscmp-rtm.c > @@ -0,0 +1,22 @@ > +/* Test case for wcscmp inside a transactionally executing RTM > + region. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define WIDE 1 > +#include <wchar.h> > +#include "tst-strcmp-rtm.c" > -- > 2.34.1 > LGTM. Thanks.
diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile index c6bee981f8..56fd5fc805 100644 --- a/sysdeps/x86/Makefile +++ b/sysdeps/x86/Makefile @@ -95,11 +95,15 @@ tests += \ tst-memmove-rtm \ tst-memrchr-rtm \ tst-memset-rtm \ + tst-strcasecmp-rtm \ tst-strchr-rtm \ + tst-strcmp-rtm \ tst-strcpy-rtm \ tst-strlen-rtm \ + tst-strncasecmp-rtm \ tst-strncmp-rtm \ tst-strrchr-rtm \ + tst-wcscmp-rtm \ tst-wcsncmp-rtm \ # tests @@ -108,11 +112,15 @@ CFLAGS-tst-memcmp-rtm.c += -mrtm CFLAGS-tst-memmove-rtm.c += -mrtm CFLAGS-tst-memrchr-rtm.c += -mrtm CFLAGS-tst-memset-rtm.c += -mrtm +CFLAGS-tst-strcasecmp-rtm.c += -mrtm CFLAGS-tst-strchr-rtm.c += -mrtm +CFLAGS-tst-strcmp-rtm.c += -mrtm CFLAGS-tst-strcpy-rtm.c += -mrtm CFLAGS-tst-strlen-rtm.c += -mrtm +CFLAGS-tst-strncasecmp-rtm.c += -mrtm -Wno-error CFLAGS-tst-strncmp-rtm.c += -mrtm -Wno-error CFLAGS-tst-strrchr-rtm.c += -mrtm +CFLAGS-tst-wcscmp-rtm.c += -mrtm CFLAGS-tst-wcsncmp-rtm.c += -mrtm -Wno-error endif diff --git a/sysdeps/x86/tst-strcasecmp-rtm.c b/sysdeps/x86/tst-strcasecmp-rtm.c new file mode 100644 index 0000000000..da460799ce --- /dev/null +++ b/sysdeps/x86/tst-strcasecmp-rtm.c @@ -0,0 +1,23 @@ +/* Test case for strcasecmp inside a transactionally executing RTM + region. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define STRCMP strcasecmp +#define TEST_NAME "strcasecmp" + +#include "tst-strcmp-rtm.c" diff --git a/sysdeps/x86/tst-strcmp-rtm.c b/sysdeps/x86/tst-strcmp-rtm.c new file mode 100644 index 0000000000..371916a2f0 --- /dev/null +++ b/sysdeps/x86/tst-strcmp-rtm.c @@ -0,0 +1,70 @@ +/* Test case for strcmp inside a transactionally executing RTM + region. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdint.h> +#include <tst-string-rtm.h> + +#ifdef WIDE +# define CHAR wchar_t +# define MEMSET wmemset +# define STRCMP wcscmp +# define TEST_NAME "wcscmp" +#else /* !WIDE */ +# define CHAR char +# define MEMSET memset + +# ifndef STRCMP +# define STRCMP strcmp +# define TEST_NAME "strcmp" +# endif +#endif + +#define LOOP 3000 +#define STRING_SIZE 1024 +CHAR string1[STRING_SIZE]; +CHAR string2[STRING_SIZE]; + +__attribute__ ((noinline, noclone)) +static int +prepare (void) +{ + MEMSET (string1, 'a', STRING_SIZE - 1); + MEMSET (string2, 'a', STRING_SIZE - 1); + if (STRCMP (string1, string2) == 0) + return EXIT_SUCCESS; + else + return EXIT_FAILURE; +} + +__attribute__ ((noinline, noclone)) +static int +function (void) +{ + if (STRCMP (string1, string2) == 0) + return 0; + else + return 1; +} + + +static int +do_test (void) +{ + return do_test_1 (TEST_NAME, LOOP, prepare, function); +} diff --git a/sysdeps/x86/tst-strncasecmp-rtm.c b/sysdeps/x86/tst-strncasecmp-rtm.c new file mode 100644 index 0000000000..4ebe58951b --- /dev/null +++ b/sysdeps/x86/tst-strncasecmp-rtm.c @@ -0,0 +1,23 @@ +/* Test case for strncasecmp inside a transactionally executing RTM + region. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define STRNCMP strncasecmp +#define TEST_NAME "strncasecmp" + +#include "tst-strncmp-rtm.c" diff --git a/sysdeps/x86/tst-strncmp-rtm.c b/sysdeps/x86/tst-strncmp-rtm.c index a3b14e72ff..2d27b20a68 100644 --- a/sysdeps/x86/tst-strncmp-rtm.c +++ b/sysdeps/x86/tst-strncmp-rtm.c @@ -27,8 +27,10 @@ #else /* !WIDE */ # define CHAR char # define MEMSET memset -# define STRNCMP strncmp -# define TEST_NAME "strncmp" +# ifndef STRNCMP +# define STRNCMP strncmp +# define TEST_NAME "strncmp" +# endif #endif /* !WIDE */ diff --git a/sysdeps/x86/tst-wcscmp-rtm.c b/sysdeps/x86/tst-wcscmp-rtm.c new file mode 100644 index 0000000000..28a5b4b82d --- /dev/null +++ b/sysdeps/x86/tst-wcscmp-rtm.c @@ -0,0 +1,22 @@ +/* Test case for wcscmp inside a transactionally executing RTM + region. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define WIDE 1 +#include <wchar.h> +#include "tst-strcmp-rtm.c"