[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