target attributes, pragmas and preprocessor macros

Kyrill Tkachov kyrylo.tkachov@arm.com
Mon May 18 09:46:00 GMT 2015


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...
> Thanks.
> 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.

Kyrill

>
> Thanks,
> Kyrill
>
>> for instance for arm/thumb we can have something like:
>>
>> #pragma GCC target ("thumb")
>>
>> #ifndef __thumb__
>> #error "__thumb__ is not defined"
>> #endif
>>
>> #ifdef __thumb2__
>> #ifndef __ARM_32BIT_STATE
>> #error  "__ARM_32BIT_STATE is not defined"
>> #endif
>> #else /* thumb1 */
>> #ifdef __ARM_32BIT_STATE
>> #error  "__ARM_32BIT_STATE is defined"
>> #endif
>> #endif /* thumb1 */
>>
>> ...
>>
>>> Thanks,
>>> Kyrill
>>>
>> Cheers
>>
>> Christian
>>



More information about the Gcc mailing list