blob: 98d7ec2a24a606439730d51f53e256d99c0f8036 [file] [log] [blame]
Haibo Huangb9244ff2018-08-11 10:12:13 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
Elliott Hughesa4c78762019-09-17 09:53:14 -070029#include <private/bionic_ifuncs.h>
Elliott Hughesadc41712024-08-16 13:08:11 +000030#include <stddef.h>
Elliott Hughesa4c78762019-09-17 09:53:14 -070031
Haibo Huangb9244ff2018-08-11 10:12:13 -070032extern "C" {
33
Haibo Huangb9244ff2018-08-11 10:12:13 -070034DEFINE_IFUNC_FOR(memcmp) {
Elliott Hughesadc41712024-08-16 13:08:11 +000035 __builtin_cpu_init();
Elliott Hughesadc41712024-08-16 13:08:11 +000036 if (__builtin_cpu_supports("sse4.1")) RETURN_FUNC(memcmp_func_t, memcmp_sse4);
George Burgess IV41d403e2024-09-18 11:04:15 -060037 RETURN_FUNC(memcmp_func_t, memcmp_atom);
Haibo Huangb9244ff2018-08-11 10:12:13 -070038}
Elliott Hughesadc41712024-08-16 13:08:11 +000039MEMCMP_SHIM()
Haibo Huangb9244ff2018-08-11 10:12:13 -070040
Elliott Hughesadc41712024-08-16 13:08:11 +000041typedef int wmemcmp_func_t(const wchar_t*, const wchar_t*, size_t);
42DEFINE_IFUNC_FOR(wmemcmp) {
43 __builtin_cpu_init();
44 if (__builtin_cpu_supports("sse4.1")) RETURN_FUNC(wmemcmp_func_t, wmemcmp_sse4);
George Burgess IV3451c752024-09-11 20:33:55 -060045 RETURN_FUNC(wmemcmp_func_t, wmemcmp_atom);
Elliott Hughesadc41712024-08-16 13:08:11 +000046}
47DEFINE_STATIC_SHIM(int wmemcmp(const wchar_t* lhs, const wchar_t* rhs, size_t n) {
48 FORWARD(wmemcmp)(lhs, rhs, n);
49})
Haibo Huangb9244ff2018-08-11 10:12:13 -070050
51} // extern "C"