Skip to content

Commit 35f1de1

Browse files
authored
Add RISC-V clang build (#2737)
* Add RISC-V clang build We add a RISC-V target. We are interested in higher-performance cores, so make sure that the vector extension is in place for this. The functionality is on par with aarch64 cross builds. CI is added as well. We assume that the RISC-V target has vector extensions enabled, and that this is at least 128-bits long. This is in line with RISC-V International guidelines that application class processors have a vector length >= 128-bits There are some modifications of the toolchain that are required to get vector support up and running. In particular, a newer qemu is required, and this needs to be set up with binfmt support, as the deb package does not automatically setup binfmt. Changes made: * Add ability to install LLVM from an upstream repo * Pass the architecture to install GNU cross-compilers to apt.sh * Add ability to install qemu from a Debian package * Add a file for setting up binfmt to run RISC-V binaries without specifying QEMU on the command line * Add clang CMake toolchain file for RISC-V * Add a CI pipeline for running and testing (under emulation) RISC-V builds using LLVM * Allow the architecture string in the PLATFORM variable to be more than 3 characters long, so that we can use riscv64 as the architecture name in the oneDAL build * Update openBLAS builds to use RISC-V optimized builds with 128-bit vector length * Add a precompile macro TARGET_RISCV64 to identify when the build is targeting RISC-V, in order to target RISC-V specific parts of the code base * Add structs, macros and enums, as per the SVE build, so that future commits can target specific micro-architectures more easily, and so that the current build completes for RISC-V * Add a cpu_vendor to all builds for riscv64 * Add lnxriscv64 as a platform to use in the makefile * Explicitly specify at least 128-bit vector length * Restart system binfmt service * Run clang-format * Need to fix x86 * Add license header * Bump the priority of the clang alternative
1 parent b191223 commit 35f1de1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+771
-32
lines changed

.ci/env/apt.sh

+20-10
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,28 @@ function install_dev-base-conda {
5454
conda env create -f .ci/env/environment.yml
5555
}
5656

57-
function install_arm-cross-compilers {
58-
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu gfortran-aarch64-linux-gnu
57+
function install_gnu-cross-compilers {
58+
sudo apt-get install -y "gcc-$1-linux-gnu" "g++-$1-linux-gnu" "gfortran-$1-linux-gnu"
5959
}
6060

61-
function install_qemu_emulation {
61+
function install_qemu_emulation_apt {
6262
sudo apt-get install -y qemu-user-static
6363
}
6464

65+
function install_qemu_emulation_deb {
66+
qemu_deb=qemu-user-static_8.2.2+ds-2+b1_amd64.deb
67+
wget http://ftp.de.debian.org/debian/pool/main/q/qemu/${qemu_deb}
68+
sudo dpkg -i ${qemu_deb}
69+
sudo systemctl restart systemd-binfmt.service
70+
}
71+
6572
function install_llvm_version {
6673
sudo apt-get install -y curl
6774
curl -o llvm.sh https://apt.llvm.org/llvm.sh
6875
chmod u+x llvm.sh
6976
sudo ./llvm.sh "$1"
70-
sudo update-alternatives --install /usr/bin/clang clang "/usr/bin/clang-$1" "$1"
71-
sudo update-alternatives --install /usr/bin/clang++ clang++ "/usr/bin/clang++-$1" "$1"
77+
sudo update-alternatives --install /usr/bin/clang clang "/usr/bin/clang-$1" "${1}00"
78+
sudo update-alternatives --install /usr/bin/clang++ clang++ "/usr/bin/clang++-$1" "${1}00"
7279
}
7380

7481
function build_sysroot {
@@ -96,19 +103,22 @@ if [ "${component}" == "dpcpp" ]; then
96103
elif [ "${component}" == "mkl" ]; then
97104
add_repo
98105
install_mkl
99-
elif [ "${component}" == "arm-compiler" ]; then
106+
elif [ "${component}" == "gnu-cross-compilers" ]; then
100107
update
101-
install_arm-cross-compilers
108+
install_gnu-cross-compilers "$2"
102109
elif [ "${component}" == "clang-format" ]; then
103110
update
104111
install_clang-format
105112
elif [ "${component}" == "dev-base" ]; then
106113
update
107114
install_dev-base
108115
install_dev-base-conda
109-
elif [ "${component}" == "qemu-emulation" ]; then
116+
elif [ "${component}" == "qemu-apt" ]; then
117+
update
118+
install_qemu_emulation_apt
119+
elif [ "${component}" == "qemu-deb" ]; then
110120
update
111-
install_qemu_emulation
121+
install_qemu_emulation_deb
112122
elif [ "${component}" == "llvm-version" ] ; then
113123
update
114124
install_llvm_version "$2"
@@ -117,6 +127,6 @@ elif [ "${component}" == "build-sysroot" ] ; then
117127
build_sysroot "$2" "$3" "$4" "$5"
118128
else
119129
echo "Usage:"
120-
echo " $0 [dpcpp|mkl|arm-compiler|clang-format|dev-base|qemu-emulation|llvm-version|build-sysroot]"
130+
echo " $0 [dpcpp|mkl|gnu-cross-compilers|clang-format|dev-base|qemu-apt|qemu-deb|llvm-version|build-sysroot]"
121131
exit 1
122132
fi
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#===============================================================================
2+
# Copyright contributors to the oneDAL project
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
#===============================================================================
16+
17+
18+
SET(MAKE_CROSS_COMPILING TRUE)
19+
SET(CMAKE_SYSTEM_NAME "Linux")
20+
SET(CMAKE_SYSTEM_PROCESSOR "riscv64")
21+
22+
SET(CMAKE_SYSROOT $ENV{ONEDAL_SYSROOT})
23+
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
24+
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
25+
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
26+
27+
find_program(CMAKE_C_COMPILER NAMES clang)
28+
SET(CMAKE_C_COMPILER_TARGET riscv64-linux-gnu)
29+
30+
find_program(CMAKE_CXX_COMPILER NAMES clang++)
31+
SET(CMAKE_CXX_COMPILER_TARGET riscv64-linux-gnu)
32+

.ci/env/tbb.sh

+2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ set_arch_dir() {
8888
arch_dir="intel64"
8989
elif [ "$arch" == "aarch64" ]; then
9090
arch_dir="arm"
91+
elif [ "$arch" == "riscv64" ]; then
92+
arch_dir="riscv64"
9193
else
9294
echo "Unsupported architecture '${arch}'. Quitting tbb build script."
9395
exit 1

.ci/pipeline/ci.yml

+96-4
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,10 @@ jobs:
104104
.ci/env/apt.sh dev-base
105105
displayName: 'apt-get and conda install'
106106
- script: |
107-
.ci/env/apt.sh arm-compiler
107+
.ci/env/apt.sh gnu-cross-compilers aarch64
108108
displayName: 'arm-compiler installation'
109109
- script: |
110-
.ci/env/apt.sh qemu-emulation
110+
.ci/env/apt.sh qemu-apt
111111
displayName: 'qemu-emulation installation'
112112
- script: |
113113
.ci/scripts/describe_system.sh
@@ -179,13 +179,13 @@ jobs:
179179
.ci/env/apt.sh dev-base
180180
displayName: 'apt-get and conda install'
181181
- script: |
182-
.ci/env/apt.sh arm-compiler
182+
.ci/env/apt.sh gnu-cross-compilers aarch64
183183
displayName: 'arm-compiler installation'
184184
- script: |
185185
.ci/env/apt.sh llvm-version 18
186186
displayName: 'llvm 18 installation'
187187
- script: |
188-
.ci/env/apt.sh qemu-emulation
188+
.ci/env/apt.sh qemu-apt
189189
displayName: 'qemu-emulation installation'
190190
- task: Cache@2
191191
inputs:
@@ -254,6 +254,98 @@ jobs:
254254
condition: failed()
255255
continueOnError: true
256256

257+
- job: 'LinuxMakeLLVM_OpenBLAS_rv64'
258+
timeoutInMinutes: 0
259+
variables:
260+
release.dir: '__release_lnx_clang'
261+
platform.type : 'lnxriscv64'
262+
OPENBLAS_VERSION : 'v0.3.27'
263+
OPENBLAS_CACHE_DIR : $(Pipeline.Workspace)/openblas-riscv64-clang
264+
TBB_VERSION : 'v2021.10.0'
265+
TBB_CACHE_DIR : $(Pipeline.Workspace)/tbb-riscv64-clang
266+
SYSROOT_CACHE_DIR: $(Pipeline.Workspace)/sysroot-riscv64
267+
pool:
268+
vmImage: 'ubuntu-22.04'
269+
steps:
270+
- script: |
271+
.ci/env/apt.sh dev-base
272+
displayName: 'apt-get and conda install'
273+
- script: |
274+
.ci/env/apt.sh gnu-cross-compilers riscv64
275+
displayName: 'riscv64-compiler installation'
276+
- script: |
277+
.ci/env/apt.sh llvm-version 18
278+
displayName: 'llvm 18 installation'
279+
- script: |
280+
.ci/env/apt.sh qemu-deb
281+
displayName: 'qemu-emulation installation'
282+
- task: Cache@2
283+
inputs:
284+
key: '"riscv64" | "sysroot"'
285+
path: $(SYSROOT_CACHE_DIR)
286+
cacheHitVar: SYSROOT_RESTORED
287+
- script: |
288+
.ci/env/apt.sh build-sysroot $(Pipeline.Workspace) riscv64 $(SYSROOT_OS) sysroot-riscv64
289+
displayName: 'Build riscv64 sysroot'
290+
condition: ne(variables.SYSROOT_RESTORED, 'true')
291+
- script: |
292+
.ci/scripts/describe_system.sh
293+
displayName: 'System info'
294+
- task: Cache@2
295+
inputs:
296+
key: '"clang" | "riscv64" | "openblas" | "$(OPENBLAS_VERSION)"'
297+
path: $(OPENBLAS_CACHE_DIR)
298+
cacheHitVar: OPENBLAS_RESTORED
299+
- script: |
300+
.ci/env/openblas.sh --target RISCV64_ZVL128B --host-compiler gcc --compiler clang --target-arch riscv64 --cross-compile --prefix $(OPENBLAS_CACHE_DIR) --sysroot $(SYSROOT_CACHE_DIR) --version $(OPENBLAS_VERSION)
301+
displayName: 'Build OpenBLAS'
302+
condition: ne(variables.OPENBLAS_RESTORED, 'true')
303+
- task: Cache@2
304+
inputs:
305+
key: '"clang" | "riscv64" | "tbb" | "$(TBB_VERSION)"'
306+
path: $(TBB_CACHE_DIR)
307+
cacheHitVar: TBB_RESTORED
308+
- script: |
309+
export ONEDAL_SYSROOT=$(SYSROOT_CACHE_DIR)
310+
.ci/env/tbb.sh --cross-compile --toolchain-file $(Build.Repository.LocalPath)/.ci/env/riscv64-clang-crosscompile-toolchain.cmake --target-arch riscv64 --prefix $(TBB_CACHE_DIR) --version $(TBB_VERSION)
311+
displayName: 'Build oneTBB'
312+
condition: ne(variables.TBB_RESTORED, 'true')
313+
- script: |
314+
.ci/scripts/build.sh --compiler clang --optimizations rv64 --target daal --backend-config ref --conda-env ci-env --cross-compile --plat lnxriscv64 --sysroot $(SYSROOT_CACHE_DIR) --blas-dir $(OPENBLAS_CACHE_DIR) --tbb-dir $(TBB_CACHE_DIR)
315+
displayName: 'make daal'
316+
- script: |
317+
.ci/scripts/build.sh --compiler clang --optimizations rv64 --target onedal_c --backend-config ref --cross-compile --plat lnxriscv64 --sysroot $(SYSROOT_CACHE_DIR) --blas-dir $(OPENBLAS_CACHE_DIR) --tbb-dir $(TBB_CACHE_DIR)
318+
displayName: 'make onedal_c'
319+
- task: PublishPipelineArtifact@1
320+
inputs:
321+
artifactName: '$(platform.type) RISCV64 OpenBLAS build'
322+
targetPath: '$(Build.Repository.LocalPath)/$(release.dir)'
323+
displayName: 'Upload build artifacts'
324+
continueOnError: true
325+
- script: |
326+
export QEMU_LD_PREFIX=$(SYSROOT_CACHE_DIR)
327+
export QEMU_CPU="max"
328+
export TBBROOT=$(TBB_CACHE_DIR)
329+
export ARCH_ONEDAL=riscv64
330+
export ONEDAL_SYSROOT=$(SYSROOT_CACHE_DIR)
331+
.ci/scripts/test.sh --test-kind examples --build-dir $(release.dir) --compiler clang --interface daal/cpp --build-system cmake --platform lnxriscv64 --cross-compile --backend ref
332+
displayName: 'daal/cpp examples'
333+
- script: |
334+
export QEMU_LD_PREFIX=$(SYSROOT_CACHE_DIR)
335+
export QEMU_CPU="max"
336+
export TBBROOT=$(TBB_CACHE_DIR)
337+
export ARCH_ONEDAL=riscv64
338+
export ONEDAL_SYSROOT=$(SYSROOT_CACHE_DIR)
339+
.ci/scripts/test.sh --test-kind examples --build-dir $(release.dir) --compiler clang --interface oneapi/cpp --build-system cmake --platform lnxriscv64 --cross-compile --backend ref
340+
displayName: 'oneapi/cpp examples'
341+
- task: PublishPipelineArtifact@1
342+
inputs:
343+
artifactName: '$(platform.type) fail'
344+
targetPath: '$(Build.Repository.LocalPath)/$(release.dir)'
345+
displayName: 'Uploading on fail'
346+
condition: failed()
347+
continueOnError: true
348+
257349
- job: 'LinuxMakeGNU_OpenBLAS_x86'
258350
timeoutInMinutes: 0
259351
variables:

.ci/scripts/build.sh

+25-15
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ done
8686

8787
PLAT=${PLAT:-$(bash "${ONEDAL_DIR}"/dev/make/identify_os.sh)}
8888
OS=${PLAT::3}
89-
ARCH=${PLAT:3:3}
89+
ARCH=${PLAT:3}
9090

9191
backend_config=${backend_config:-mkl}
9292

@@ -167,21 +167,24 @@ elif [ "${backend_config}" == "ref" ] && [ ! -z "${BLAS_INSTALL_DIR}" ]; then
167167
elif [ "${backend_config}" == "ref" ]; then
168168
echo "Sourcing ref(openblas) env"
169169
if [ ! -d "${ONEDAL_DIR}/__deps/openblas_${ARCH}" ]; then
170-
if [ "${optimizations}" == "sve" ] && [ "${cross_compile}" == "yes" ]; then
171-
openblas_options=(--target ARMV8
172-
--host-compiler gcc
170+
openblas_options=(--target-arch "${ARCH}")
171+
if [ "${cross_compile}" == "yes" ] ; then
172+
openblas_options+=(--host-compiler gcc
173173
--compiler "${CC}"
174-
--cflags -march=armv8-a+sve
175-
--cross-compile
176-
--target-arch "${ARCH}")
174+
--cross-compile)
175+
if [ "${optimizations}" == "sve" ] ; then
176+
openblas_options+=(--target ARMV8
177+
--cflags -march=armv8-a+sve)
178+
elif [ "${optimizations}" == "rv64" ] ; then
179+
openblas_options+=(--target RISCV64_ZVL128B)
180+
fi
181+
177182
if [ "${compiler}" == "clang" ] ; then
178183
openblas_options+=(--sysroot "${sysroot}")
179184
fi
180-
echo "${ONEDAL_DIR}"/.ci/env/openblas.sh "${openblas_options[@]}"
181-
"${ONEDAL_DIR}"/.ci/env/openblas.sh "${openblas_options[@]}"
182-
else
183-
"${ONEDAL_DIR}"/.ci/env/openblas.sh --target-arch "${ARCH}"
184185
fi
186+
echo "${ONEDAL_DIR}"/.ci/env/openblas.sh "${openblas_options[@]}"
187+
"${ONEDAL_DIR}"/.ci/env/openblas.sh "${openblas_options[@]}"
185188
fi
186189
export OPENBLASROOT="${ONEDAL_DIR}/__deps/openblas_${ARCH}"
187190
else
@@ -194,19 +197,26 @@ if [[ ! -z "${TBB_INSTALL_DIR}" ]] ; then
194197
export LD_LIBRARY_PATH="${TBBROOT}/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
195198
elif [[ "${ARCH}" == "32e" ]]; then
196199
"${ONEDAL_DIR}"/dev/download_tbb.sh
197-
elif [[ "${ARCH}" == "arm" ]]; then
200+
elif [[ "${ARCH}" == "arm" || ("${ARCH}" == "riscv64") ]]; then
201+
if [[ "${ARCH}" == "arm" ]] ; then
202+
ARCH_STR=aarch64
203+
else
204+
# RISCV64
205+
ARCH_STR="${ARCH}"
206+
fi
207+
198208
if [[ "${cross_compile}" == "yes" ]]; then
199209
tbb_options=(--cross-compile
200210
--toolchain-file
201-
"${ONEDAL_DIR}"/.ci/env/arm-${compiler}-crosscompile-toolchain.cmake
202-
--target-arch aarch64
211+
"${ONEDAL_DIR}"/.ci/env/${ARCH}-${compiler}-crosscompile-toolchain.cmake
212+
--target-arch ${ARCH_STR}
203213
)
204214
echo "${ONEDAL_DIR}"/.ci/env/tbb.sh "${tbb_options[@]}"
205215
"${ONEDAL_DIR}"/.ci/env/tbb.sh "${tbb_options[@]}"
206216
else
207217
"${ONEDAL_DIR}"/.ci/env/tbb.sh
208218
fi
209-
export TBBROOT="$ONEDAL_DIR/__deps/tbb-aarch64"
219+
export TBBROOT="$ONEDAL_DIR/__deps/tbb-${ARCH_STR}"
210220
export LD_LIBRARY_PATH=${TBBROOT}/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
211221
fi
212222

.ci/scripts/test.sh

+4-1
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,16 @@ done
9090
TESTING_RETURN=0
9191
PLATFORM=${platform:-$(bash dev/make/identify_os.sh)}
9292
OS=${PLATFORM::3}
93-
ARCH=${PLATFORM:3:3}
93+
ARCH=${PLATFORM:3}
9494
if [ "$ARCH" == "32e" ]; then
9595
full_arch=intel64
9696
arch_dir=intel_intel64
9797
elif [ "$ARCH" == "arm" ]; then
9898
full_arch=arm
9999
arch_dir=arm_aarch64
100+
elif [ "$ARCH" == "riscv64" ]; then
101+
full_arch=riscv64
102+
arch_dir=riscv64_riscv64
100103
else
101104
echo "Unknown architecture ${ARCH} detected for platform ${PLATFORM}"
102105
exit 1

cpp/daal/include/algorithms/algorithm_container_base_batch.h

+3
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ class DAAL_EXPORT AlgorithmDispatchContainer<batch, sse2Container DAAL_KERNEL_SS
154154
#elif defined(TARGET_ARM)
155155
template <typename SVEContainer DAAL_KERNEL_SVE_ONLY(typename sveContainer)>
156156
class DAAL_EXPORT AlgorithmDispatchContainer<batch, SVEContainer DAAL_KERNEL_SVE_ONLY(sveContainer)> : public AlgorithmContainerImpl<batch>
157+
#elif defined(TARGET_RISCV64)
158+
template <typename RV64Container DAAL_KERNEL_RV64_ONLY(typename rv64Container)>
159+
class DAAL_EXPORT AlgorithmDispatchContainer<batch, RV64Container DAAL_KERNEL_RV64_ONLY(rv64Container)> : public AlgorithmContainerImpl<batch>
157160
#endif
158161
{
159162
public:

cpp/daal/include/algorithms/algorithm_container_base_common.h

+5
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ template <ComputeMode mode, typename sse2Container DAAL_KERNEL_SSE42_ONLY(typena
6262
DAAL_KERNEL_AVX512_ONLY(typename avx512Container)>
6363
#elif defined(TARGET_ARM)
6464
template <ComputeMode mode, typename SVEContainer DAAL_KERNEL_SVE_ONLY(typename sveContainer)>
65+
#elif defined(TARGET_RISCV64)
66+
template <ComputeMode mode, typename RV64Container DAAL_KERNEL_RV64_ONLY(typename rv64Container)>
6567
#endif
6668
class DAAL_EXPORT AlgorithmDispatchContainer : public AlgorithmContainerImpl<mode>
6769
{
@@ -115,6 +117,9 @@ class DAAL_EXPORT AlgorithmDispatchContainer : public AlgorithmContainerImpl<mod
115117
#elif defined(TARGET_ARM)
116118
#define __DAAL_ALGORITHM_CONTAINER(Mode, ContainerTemplate, ...) \
117119
algorithms::AlgorithmDispatchContainer<Mode, ContainerTemplate<__VA_ARGS__, sve> DAAL_KERNEL_SVE_CONTAINER(ContainerTemplate, __VA_ARGS__)>
120+
#elif defined(TARGET_RISCV64)
121+
#define __DAAL_ALGORITHM_CONTAINER(Mode, ContainerTemplate, ...) \
122+
algorithms::AlgorithmDispatchContainer<Mode, ContainerTemplate<__VA_ARGS__, rv64> DAAL_KERNEL_RV64_CONTAINER(ContainerTemplate, __VA_ARGS__)>
118123
#endif
119124

120125
/** @} */

cpp/daal/include/services/daal_defines.h

+6
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@
3737
#define TARGET_ARM
3838
#endif
3939

40+
#if defined(__riscv) && (__riscv_xlen == 64)
41+
#define TARGET_RISCV64
42+
#endif
43+
4044
#if (defined(__INTEL_COMPILER) || defined(__INTEL_LLVM_COMPILER)) && !defined(SYCL_LANGUAGE_VERSION)
4145
#define DAAL_INTEL_CPP_COMPILER
4246
#endif
@@ -76,6 +80,8 @@
7680
#define DAAL_INT __int64
7781
#elif defined(TARGET_ARM)
7882
#define DAAL_INT __int64
83+
#elif defined(TARGET_RISCV64)
84+
#define DAAL_INT __int64
7985
#else
8086
#define DAAL_INT __int32
8187
#endif

cpp/daal/include/services/env_detect.h

+5
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ enum CpuType
5252
#elif defined(TARGET_ARM)
5353
sve = 0, /*!< ARM(R) processors based on Arm's Scalable Vector Extension (SVE) */
5454
lastCpuType = sve
55+
#elif defined(TARGET_RISCV64)
56+
rv64 = 0,
57+
lastCpuType = rv64
5558
#endif
5659
};
5760

@@ -102,6 +105,8 @@ class DAAL_EXPORT Environment : public Base
102105
avx512 = 2 /*!< Intel(R) Xeon(R) processors based on Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX-512) \DAAL_DEPRECATED */
103106
#elif defined(TARGET_ARM)
104107
sve = 2, /*!< ARM(R) processors based on Arm's Scalable Vector Extension (SVE) */
108+
#elif defined(TARGET_RISCV64)
109+
rv64 = 1
105110
#endif
106111
};
107112

0 commit comments

Comments
 (0)