[LLVMdev] Odd PPC inline asm constraint
Hal Finkel
hfinkel at anl.gov
Fri Apr 27 12:54:52 PDT 2012
Hello,
I am not sure whether this is a clang issue, an LLVM issue, or both;
but clang chokes when parsing expanded macros from the
glibc /usr/include/bits/fenvinline.h with an error like:
./boost/math/tools/config.hpp:279:10: error: invalid input constraint
'i#*X' in asm feclearexcept(FE_ALL_EXCEPT);
^
/usr/include/bits/fenvinline.h:56:11: note: expanded from macro
'feclearexcept' : : "i#*X"(__builtin_ffs (__excepts))); \
^
1 error generated.
There is a comment in the file which reads:
/* The weird 'i#*X' constraints on the following suppress a gcc
warning when __excepts is not a constant. Otherwise, they mean the
same as just plain 'i'. */
For example, one of the full macros is:
/* Inline definition for feclearexcept. */
# define feclearexcept(__excepts) \
((__builtin_constant_p
(__excepts) \ && ((__excepts)
& ((__excepts)-1)) == 0 \ &&
(__excepts) != FE_INVALID)
\ ? ((__excepts) !=
0 \ ?
(__extension__ ({ __asm__ __volatile__ \
("mtfsb0 %s0" \ : :
"i#*X"(__builtin_ffs (__excepts))); \
0; })) \ :
0)
\ : (feclearexcept) (__excepts))
Does anyone know what that "weird" asm constraint actually means? (and
where I should add support for it?)
Thanks again,
Hal
--
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-dev
mailing list