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__) ...) 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? 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/
----- 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__) ...)A general note: Given all of the compiler variance out there regarding whether the 32-bit macros are also defined on the 64-bit systems, I really think that you'll need to arrange these as: #define LLVM_PPC64 (defined(__ppc64__) || defined(__powerpc64__) ...) #define LLVM_PPC !LLVM_PPC64 && (defined(__ppc__) || defined(__powerpc__) ...)> > 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? -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/ > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-- Hal Finkel Assistant Computational Scientist Leadership Computing Facility Argonne National Laboratory
> ----- 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__) ...) > > A general note: Given all of the compiler variance out there regarding whether the 32-bit macros are also defined on the 64-bit systems, I really think that you'll need to arrange these as: > > #define LLVM_PPC64 (defined(__ppc64__) || defined(__powerpc64__) ...) > #define LLVM_PPC !LLVM_PPC64 && (defined(__ppc__) || defined(__powerpc__) ...)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'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/