This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: target attributes, pragmas and preprocessor macros

On 18/05/15 09:25, Kyrill Tkachov wrote:
Hi Christian,

On 18/05/15 07:26, Christian Bruel wrote:
Hi Kyrill,

On 05/13/2015 05:43 PM, Kyrill Tkachov wrote:
Hi all,

Are target attributes supposed to redefine the preprocessor macros available?
For example, on aarch64 if the file is compiled with floating point support
the __ARM_FEATURE_FMA predefine is available. If the user adds to a function
a target attribute disabling floating point, then is __ARM_FEATURE_FMA supposed
to be undefined in the body of that function?

Looking at some backends, it seems that only #pragmas are supposed to have that effect,
but I just wanted to confirm.

yes they do, But careful, even the "inherited" macros should be redefined...
Implementation question then.
Is TARGET_PRAGMA_PARSE actually called during preprocessing time?
I built an x86_64 toolchain, compiled a file with target pragmas in it,
put a breakpoint on the hook entry and it only triggered later on during parsing.
Same for an aarch64 implementation of target pragmas that I'm working on.
Am I just doing something wrong? Or is there some other place where I should
be looking?

Actually, scratch that. I got it working, sorry for the noise.



for instance for arm/thumb we can have something like:

#pragma GCC target ("thumb")

#ifndef __thumb__
#error "__thumb__ is not defined"

#ifdef __thumb2__
#ifndef __ARM_32BIT_STATE
#error  "__ARM_32BIT_STATE is not defined"
#else /* thumb1 */
#ifdef __ARM_32BIT_STATE
#error  "__ARM_32BIT_STATE is defined"
#endif /* thumb1 */





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]