compiler-rt uses non-existent macro: __SOFT_FP__

A handful of files in compiler-rt/builtins use the macro “SOFT_FP”. All the uses are along the same lines. Here’s a representative example from compiler-rt/lib/builtins/fixdfdi.c:

#ifndef SOFT_FP

// Support for systems that have hardware floating-point; can set the invalid

// flag as a side-effect of computation.

#else

// Support for systems that don’t have hardware floating-point; there are no

// flags to set, and we don’t want to code-gen to an unknown soft-float

// implementation.

#endif

My question is : when - if ever - should SOFT_FP be defined?

The obvious answer is “when compiling for a soft-float target”.

However: SOFT_FP is never set by the compiler (neither clang nor GCC).

Nor (as far as I can tell) does it appear in any compiler-rt header file, build script, or Makefile. In fact the only occurrences of this macro anywhere in the llvm-project and GCC source trees are the aforementioned uses under compiler-rt/builtins.

On the other hand both clang and GCC do set an alarmingly similar looking macro - “SOFTFP” (no middle underscore) - when compiling for soft-float.

Since we need to build compiler-rt libraries for a couple of our soft-float targets at Wind River, we want to make sure we’re building them in the “right” way. Currently we do not define SOFT_FP for soft-float targets (and our tests pass!).

Regards,
Salim

Salim Nasser | Compilers | Wind River

+Renato Golin

A handful of files in compiler-rt/builtins use the macro “SOFT_FP”. All the uses are along the same lines. Here’s a representative example from compiler-rt/lib/builtins/fixdfdi.c:

#ifndef SOFT_FP

// Support for systems that have hardware floating-point; can set the invalid

// flag as a side-effect of computation.

#else

// Support for systems that don’t have hardware floating-point; there are no

// flags to set, and we don’t want to code-gen to an unknown soft-float

// implementation.

#endif

My question is : when - if ever - should SOFT_FP be defined?

The obvious answer is “when compiling for a soft-float target”.

However: SOFT_FP is never set by the compiler (neither clang nor GCC).

Nor (as far as I can tell) does it appear in any compiler-rt header file, build script, or Makefile. In fact the only occurrences of this macro anywhere in the llvm-project and GCC source trees are the aforementioned uses under compiler-rt/builtins.

On the other hand both clang and GCC do set an alarmingly similar looking macro - “SOFTFP” (no middle underscore) - when compiling for soft-float.

Since we need to build compiler-rt libraries for a couple of our soft-float targets at Wind River, we want to make sure we’re building them in the “right” way. Currently we do not define SOFT_FP for soft-float targets (and our tests pass!).

I believe that this is an accidental misspelling and went unnoticed. This should be __SOFTFP__ instead.

I believe that this is an accidental misspelling and went unnoticed. This should be __SOFTFP__ instead.

Thanks Saleem. I’ve filed the following PR:

https://bugs.llvm.org/show_bug.cgi?id=46294

Regards,

Salim.