Skip to content

Commit 23c2e49

Browse files
committed
[Xtensa] Initial porting compiler-rt library for Xtensa.
1 parent 2993aeb commit 23c2e49

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
@@ -208,6 +208,8 @@ macro(detect_target_arch)
208208
add_default_target_arch(sparc)
209209
elseif(__WEBASSEMBLY32)
210210
add_default_target_arch(wasm32)
211+
elseif(__XTENSA)
212+
add_default_target_arch(xtensa)
211213
elseif(__WEBASSEMBLY64)
212214
add_default_target_arch(wasm64)
213215
elseif(__VE)

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,8 @@ macro(test_targets)
237237
test_target_arch(riscv64 "" "")
238238
elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "wasm32")
239239
test_target_arch(wasm32 "" "--target=wasm32-unknown-unknown")
240+
elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "xtensa")
241+
test_target_arch(xtensa "" "--target=xtensa")
240242
elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "wasm64")
241243
test_target_arch(wasm64 "" "--target=wasm64-unknown-unknown")
242244
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
@@ -51,6 +51,7 @@ set(SPARC sparc)
5151
set(SPARCV9 sparcv9)
5252
set(WASM32 wasm32)
5353
set(WASM64 wasm64)
54+
set(XTENSA xtensa)
5455
set(VE ve)
5556

5657
if(APPLE)
@@ -63,7 +64,7 @@ set(ALL_BUILTIN_SUPPORTED_ARCH
6364
${X86} ${X86_64} ${ARM32} ${ARM64}
6465
${HEXAGON} ${MIPS32} ${MIPS64} ${PPC32} ${PPC64}
6566
${RISCV32} ${RISCV64} ${SPARC} ${SPARCV9}
66-
${WASM32} ${WASM64} ${VE})
67+
${WASM32} ${WASM64} ${VE} ${XTENSA})
6768

6869
include(CompilerRTUtils)
6970
include(CompilerRTDarwinUtils)

compiler-rt/lib/builtins/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,8 @@ set(riscv64_SOURCES
653653
set(sparc_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
654654
set(sparcv9_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
655655

656+
set(xtensa_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
657+
656658
set(wasm32_SOURCES
657659
${GENERIC_TF_SOURCES}
658660
${GENERIC_SOURCES}

compiler-rt/lib/crt/crtbegin.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ __asm__(".pushsection .init,\"ax\",@progbits\n\t"
6969
__asm__(".pushsection .init,\"ax\",@progbits\n\t"
7070
"call " __USER_LABEL_PREFIX__ "__do_init\n\t"
7171
".popsection");
72+
#elif defined(__xtensa__)
73+
__asm__(".pushsection .init.literal,\"ax\",@progbits\n\t"
74+
".popsection\n\t"
75+
".pushsection .init,\"ax\",@progbits\n\t"
76+
"movi a8, __do_init\n\t"
77+
"callx8 a8\n\t"
78+
".popsection");
7279
#else
7380
#error "crtbegin without .init_fini array unimplemented for this architecture"
7481
#endif // CRT_HAS_INITFINI_ARRAY
@@ -122,6 +129,13 @@ __asm__(".pushsection .fini,\"ax\",@progbits\n\t"
122129
__asm__(".pushsection .fini,\"ax\",@progbits\n\t"
123130
"call " __USER_LABEL_PREFIX__ "__do_fini\n\t"
124131
".popsection");
132+
#elif defined(__xtensa__)
133+
__asm__(".pushsection .fini.literal,\"ax\",@progbits\n\t"
134+
".popsection\n\t"
135+
".pushsection .fini,\"ax\",@progbits\n\t"
136+
"movi a8, __do_fini\n\t"
137+
"callx8 a8\n\t"
138+
".popsection");
125139
#else
126140
#error "crtbegin without .init_fini array unimplemented for this architecture"
127141
#endif // CRT_HAS_INIT_FINI_ARRAY

0 commit comments

Comments
 (0)