Skip to content

Xtensa compiler-rt build fails on FreeBSD: unsupported instructions in ieee754_sqrtf.S #118

@res2500

Description

@res2500

Checklist

  • Checked the issue tracker for similar issues to ensure this is not a duplicate
  • Read the documentation to confirm the issue is not addressed there and your configuration is set correctly
  • Tested with the latest version to ensure the issue hasn't been fixed

How often does this bug occurs?

always

Expected behavior

When building llvm-project-xtensa on FreeBSD 14.3 using the official instructions and the Xtensa target, the build fails during the compiler-rt phase.
The Xtensa assembler in Clang reports that several ESP32-specific floating-point/DSP instructions require CPU options which are not enabled by default.

This prevents compiler-rt builtins for Xtensa from being built.

compiler-rt builtins for the Xtensa target should build successfully
with --target=xtensa-esp32-elf, including assembly files that use
ESP32 FPU/DSP instructions (sqrt0.s, maddn.s, nexp01.s, wfr, etc.).

The Xtensa assembler should recognize these instructions via the default
Xtensa CPU/features configuration or an appropriate CPU profile (e.g. ESP32).

OS: FreeBSD 14.3-RELEASE amd64
Kernel: releng/14.3-n271432-8c9ce319fef7 GENERIC amd64

CMake: 3.31.9
ninja: 1.13.1
Clang (system): FreeBSD clang version 19.1.7
Target triple: xtensa-esp32-elf (via CMAKE options)

Actual behavior (suspected bug)

During the compiler-rt build step, the Xtensa assembler in Clang fails to
assemble several ESP32-specific FPU/DSP instructions used in
compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S.

The build stops with multiple errors of the form:

error: instruction use requires an option to be enabled
  entry sp, 16
  ^
error: instruction use requires an option to be enabled
  wfr f0, a2
  ^
error: instruction use requires an option to be enabled
  sqrt0.s f1, f0
  ^
... (many similar errors)

This indicates that the Xtensa backend is not enabling the required CPU
features/extensions (ESP32 FPU/DSP instruction set) when assembling the
builtins.

As a result, the compiler-rt builtins for Xtensa cannot be built and the
entire build process fails.

Error logs or terminal output

100%] Built target builtins-clobber
[100%] Built target builtins-configure
[100%] Performing build step for 'builtins'
[  0%] Building ASM object CMakeFiles/clang_rt.builtins-xtensa.dir/xtensa/ieee754_sqrtf.S.o
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:17:3: error: instruction use requires an option to be enabled
  entry sp, 16
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:19:3: error: instruction use requires an option to be enabled                                
  wfr f0, a2
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:20:3: error: instruction use requires an option to be enabled                                
  sqrt0.s f1, f0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:21:3: error: instruction use requires an option to be enabled                                
  const.s f2, 0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:22:3: error: instruction use requires an option to be enabled                                
  maddn.s f2, f1, f1
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:23:3: error: instruction use requires an option to be enabled                                
  nexp01.s f3, f0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:24:3: error: instruction use requires an option to be enabled                                
  const.s f7, 3
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:25:3: error: instruction use requires an option to be enabled                                
  addexp.s f3, f7
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:26:3: error: instruction use requires an option to be enabled                                
  maddn.s f7, f2, f3
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:27:3: error: instruction use requires an option to be enabled                                
  nexp01.s f2, f0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:28:3: error: instruction use requires an option to be enabled                                
  neg.s f4, f2
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:29:3: error: instruction use requires an option to be enabled                                
  maddn.s f1, f7, f1
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:30:3: error: instruction use requires an option to be enabled                                
  const.s f7, 0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:31:3: error: instruction use requires an option to be enabled                                
  const.s f5, 0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:32:3: error: instruction use requires an option to be enabled                                
  const.s f6, 0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:33:3: error: instruction use requires an option to be enabled                                
  maddn.s f7, f4, f1
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:34:3: error: instruction use requires an option to be enabled                                
  maddn.s f5, f1, f3
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:35:3: error: instruction use requires an option to be enabled                                
  const.s f3, 3
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:36:3: error: instruction use requires an option to be enabled                                
  maddn.s f6, f3, f1
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:37:3: error: instruction use requires an option to be enabled                                
  maddn.s f2, f7, f7
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:38:3: error: instruction use requires an option to be enabled                                
  maddn.s f3, f5, f1
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:39:3: error: instruction use requires an option to be enabled                                
  neg.s f1, f6
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:40:3: error: instruction use requires an option to be enabled                                
  maddn.s f7, f2, f1
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:41:3: error: instruction use requires an option to be enabled                                
  maddn.s f6, f3, f6
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:42:3: error: instruction use requires an option to be enabled                                
  mksadj.s f1, f0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:43:3: error: instruction use requires an option to be enabled                                
  nexp01.s f0, f0
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:44:3: error: instruction use requires an option to be enabled                                
  maddn.s f0, f7, f7
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:45:3: error: instruction use requires an option to be enabled                                
  neg.s f2, f6
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:46:3: error: instruction use requires an option to be enabled                                
  addexpm.s f7, f1
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:47:3: error: instruction use requires an option to be enabled                                
  addexp.s f2, f1
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:48:3: error: instruction use requires an option to be enabled                                
  divn.s f7, f0, f2
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:49:3: error: instruction use requires an option to be enabled                                
  rfr a2, f7
  ^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:51:3: error: instruction use requires an option to be enabled                                
  retw
  ^
gmake[5]: *** [CMakeFiles/clang_rt.builtins-xtensa.dir/build.make:78: CMakeFiles/clang_rt.builtins-xtensa.dir/xtensa/ieee754_sqrtf.S.o] Помилка 1                                             
gmake[4]: *** [CMakeFiles/Makefile2:390: CMakeFiles/clang_rt.builtins-xtensa.dir/all] Помилка 2
gmake[3]: *** [Makefile:136: all] Помилка 2
gmake[2]: *** [runtimes/CMakeFiles/builtins-build.dir/build.make:76: runtimes/builtins-stamps/builtins-build] Помилка 2
gmake[1]: *** [CMakeFiles/Makefile2:57226: runtimes/CMakeFiles/builtins-build.dir/all] Помилка 2
gmake: *** [Makefile:156: all] Помилка 2
res2500@res2500:~/test/llvm-project-release-esp_21.x/build $

Steps to reproduce the behavior

git clone https://github.com/espressif/llvm-project-xtensa.git
cd llvm-project-xtensa
mkdir build && cd build

cmake -G "Unix Makefiles"
-DLLVM_TARGETS_TO_BUILD="Xtensa"
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="Xtensa"
-DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_PROJECTS="clang;lld"
-DLLVM_ENABLE_RUNTIMES="compiler-rt"
-DCMAKE_INSTALL_PREFIX=/usr/local/xtensa-esp32-elf
-DLLVM_DEFAULT_TARGET_TRIPLE="xtensa-esp32-elf"
-DLLVM_INCLUDE_BENCHMARKS=OFF
-DLLVM_INCLUDE_TESTS=OFF
../llvm

gmake

Project release version

master

System architecture

other (details in Additional context)

Operating system

Linux

Operating system version

OS: FreeBSD 14.3-RELEASE amd64 Kernel: releng/14.3-n271432-8c9ce319fef7 GENERIC amd64

Shell

sh

Additional context

The same source file (ieee754_sqrtf.S) builds correctly when using
Espressif’s prebuilt GCC-based Xtensa toolchain.
The issue appears only when assembling the file using the Clang Xtensa
backend built from this repository.

This suggests that the LLVM Xtensa assembler is missing one or more
feature flags or CPU definitions required for the ESP32 FPU/DSP
instruction subset.

Since ESP32 uses a customized Xtensa core (with specific coprocessors and
instruction extensions), the assembler may need explicit configuration
(e.g. a CPU profile similar to xtensa_esp32) to accept these
instructions during compiler-rt build.

No patches or custom flags were applied; this is a clean build using the
default CMake configuration provided in the documentation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions