[LLVMdev] arch-specific predefines in LLVM's source

David Fang fang at csl.cornell.edu
Sat Jul 27 08:18:46 PDT 2013


Hi,

> ----- Original Message -----
>>> ----- Original Message -----
>>>> Hi all,
>>>>  	My recent commit r187027 fixed a simple oversight of forgetting
>>>>  	to
>>>> check for __ppc__ (only checking __powerpc__), which broke my
>>>> powerpc-apple-darwin8 stage1 tests, since the system gcc only
>>>> provided
>>>> __ppc__.  I was wondering if this justifies using simpler macros
>>>> like
>>>>
>>>> #define LLVM_PPC	(defined(__ppc__) || defined(__powerpc__) ...)
>>>> #define LLVM_PPC64	(defined(__ppc64__) || defined(__powerpc64__)
>>>> ...)
>> or define more clearly:
>>
>> #define	LLVM_PPC32	(((defined(__ppc__) || defined(__powerpc__)) &&
>> !LLVM_PPC64)
>> #define	LLVM_PPC_ANY	(LLVM_PPC32 || LLVM_PPC64)
>>
>> or
>>
>> #define	LLVM_PPC_ANY	(defined(__ppc__) || defined(__powerpc__))
>> #define	LLVM_PPC32	(LLVM_PPC_ANY && !LLVM_PPC64)
>
> I thought that you had discovered that on Darwin __ppc__, etc. are defined only for 32-bit builds. Is that correct?
>
> -Hal

 	Ah yes, with apple-gcc-4.0.1 (powerpc)

-m32 only defines __ppc__
-m64 only defines __ppc64__

So a more correct set of definitions would be:

#define	LLVM_PPC32	((defined(__ppc__) || (defined(__powerpc__) && !defined(__powerpc64__)))
#define	LLVM_PPC64	(defined(__ppc64__) || defined(__powerpc64__))
#define	LLVM_PPC_ANY	(LLVM_PPC32 || LLVM_PPC64)

Fang

>>>> I've even seen __POWERPC__, _POWER, _ARCH_PPC being tested in
>>>> conditionals.
>>>>
>>>> These proposed standardized macros would only be used in LLVM
>>>> project
>>>> sources; there's no reason to exported them.
>>>> The standardized macros would simplify conditionals and make their
>>>> use
>>>> less error-prone.
>>>>
>>>> What predefines do other architectures use?
>>>
>>> Would all uses of these macros be restricted to the PPC backend, or
>>> would they appear elsewhere as well?
>>
>> One place I see these predefines outside of the PPC backend is
>> lib/Support/Host.cpp
>>
>> Fang
>>
>>> -Hal
>>>
>>>>
>>>> What would be a suitable place for these proposed macros?
>>>> include/llvm/Support/Compiler.h?
>>>> include/llvm/Support/Arch.h (new)?
>>>>
>>>> Fang
>>
>>
>> --
>> David Fang
>> http://www.csl.cornell.edu/~fang/
>>
>>
>
>

-- 
David Fang
http://www.csl.cornell.edu/~fang/




More information about the llvm-dev mailing list