Skip to content

Commit bc0d57e

Browse files
committed
[Xtensa] Initial porting compiler-rt library for
Xtensa.
1 parent 2a920d9 commit bc0d57e

File tree

5 files changed

+22
-1
lines changed

5 files changed

+22
-1
lines changed

compiler-rt/cmake/Modules/CompilerRTUtils.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,8 @@ macro(detect_target_arch)
214214
add_default_target_arch(sparc)
215215
elseif(__WEBASSEMBLY32)
216216
add_default_target_arch(wasm32)
217+
elseif(__XTENSA)
218+
add_default_target_arch(xtensa)
217219
elseif(__WEBASSEMBLY64)
218220
add_default_target_arch(wasm64)
219221
elseif(__VE)

compiler-rt/cmake/base-config-ix.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,8 @@ macro(test_targets)
261261
test_target_arch(riscv64 "" "")
262262
elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "wasm32")
263263
test_target_arch(wasm32 "" "--target=wasm32-unknown-unknown")
264+
elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "xtensa")
265+
test_target_arch(xtensa "" "--target=xtensa")
264266
elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "wasm64")
265267
test_target_arch(wasm64 "" "--target=wasm64-unknown-unknown")
266268
elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "ve")

compiler-rt/cmake/builtin-config-ix.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ set(SPARCV9 sparcv9)
5757
set(WASM32 wasm32)
5858
set(WASM64 wasm64)
5959
set(VE ve)
60+
set(XTENSA xtensa)
6061

6162
if(APPLE)
6263
set(ARM64 arm64 arm64e)
@@ -68,7 +69,7 @@ set(ALL_BUILTIN_SUPPORTED_ARCH
6869
${X86} ${X86_64} ${ARM32} ${ARM64} ${AVR}
6970
${HEXAGON} ${MIPS32} ${MIPS64} ${PPC32} ${PPC64}
7071
${RISCV32} ${RISCV64} ${SPARC} ${SPARCV9}
71-
${WASM32} ${WASM64} ${VE} ${LOONGARCH64})
72+
${WASM32} ${WASM64} ${VE} ${LOONGARCH64} ${XTENSA})
7273

7374
include(CompilerRTUtils)
7475
include(CompilerRTDarwinUtils)

compiler-rt/lib/builtins/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,8 @@ set(riscv64_SOURCES
716716
set(sparc_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
717717
set(sparcv9_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
718718

719+
set(xtensa_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
720+
719721
set(wasm32_SOURCES
720722
${GENERIC_TF_SOURCES}
721723
${GENERIC_SOURCES}

compiler-rt/lib/builtins/crtbegin.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ __asm__(".pushsection .init,\"ax\",@progbits\n\t"
7373
__asm__(".pushsection .init,\"ax\",@progbits\n\t"
7474
"call __do_init\n\t"
7575
".popsection");
76+
#elif defined(__xtensa__)
77+
__asm__(".pushsection .init.literal,\"ax\",@progbits\n\t"
78+
".popsection\n\t"
79+
".pushsection .init,\"ax\",@progbits\n\t"
80+
"movi a8, __do_init\n\t"
81+
"callx8 a8\n\t"
82+
".popsection");
7683
#else
7784
#error "crtbegin without .init_fini array unimplemented for this architecture"
7885
#endif // CRT_HAS_INITFINI_ARRAY
@@ -130,6 +137,13 @@ __asm__(".pushsection .fini,\"ax\",@progbits\n\t"
130137
__asm__(".pushsection .fini,\"ax\",@progbits\n\t"
131138
"call __do_fini\n\t"
132139
".popsection");
140+
#elif defined(__xtensa__)
141+
__asm__(".pushsection .fini.literal,\"ax\",@progbits\n\t"
142+
".popsection\n\t"
143+
".pushsection .fini,\"ax\",@progbits\n\t"
144+
"movi a8, __do_fini\n\t"
145+
"callx8 a8\n\t"
146+
".popsection");
133147
#else
134148
#error "crtbegin without .init_fini array unimplemented for this architecture"
135149
#endif // CRT_HAS_INIT_FINI_ARRAY

0 commit comments

Comments
 (0)