|
| 1 | +/********************************************************************** |
| 2 | + Copyright (c) 2025 Institute of Software Chinese Academy of Sciences (ISCAS). |
| 3 | +
|
| 4 | + Redistribution and use in source and binary forms, with or without |
| 5 | + modification, are permitted provided that the following conditions |
| 6 | + are met: |
| 7 | + * Redistributions of source code must retain the above copyright |
| 8 | + notice, this list of conditions and the following disclaimer. |
| 9 | + * Redistributions in binary form must reproduce the above copyright |
| 10 | + notice, this list of conditions and the following disclaimer in |
| 11 | + the documentation and/or other materials provided with the |
| 12 | + distribution. |
| 13 | + * Neither the name of ISCAS nor the names of its |
| 14 | + contributors may be used to endorse or promote products derived |
| 15 | + from this software without specific prior written permission. |
| 16 | +
|
| 17 | + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 18 | + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 19 | + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 20 | + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 21 | + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 22 | + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 23 | + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 24 | + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 25 | + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 26 | + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 27 | + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 28 | +**********************************************************************/ |
| 29 | +#include "riscv64_multibinary.h" |
| 30 | +#include <stddef.h> |
| 31 | + |
| 32 | +extern int |
| 33 | +mem_zero_detect_rvv(void *buf, size_t n); |
| 34 | +extern int |
| 35 | +mem_zero_detect_base(void *buf, size_t n); |
| 36 | + |
| 37 | +DEFINE_INTERFACE_DISPATCHER(isal_zero_detect) |
| 38 | +{ |
| 39 | +#if HAVE_RVV |
| 40 | + const unsigned long hwcap = getauxval(AT_HWCAP); |
| 41 | + if (hwcap & HWCAP_RV('V')) |
| 42 | + return mem_zero_detect_rvv; |
| 43 | + else |
| 44 | +#endif |
| 45 | + return mem_zero_detect_base; |
| 46 | +} |
0 commit comments