mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
Add an LLVM_PTR_SIZE macro to make LLVM_ALIGNAS more useful
MSVC 2013 requires the argument to __declspec(align()) to be an integer constant expression that doesn't involve any identifiers like sizeof. For GCC and Clang, LLVM_PTR_SIZE is equivalent to __SIZEOF_POINTER__, which dates back to GCC 4.6 and Clang 2010. If that's not available, we get sizeof(void*), which works with alignas() and __attribute__((aligned())). For MSVC, LLVM_PTR_SIZE is 4 or 8 depending on _WIN64. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233929 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5e66a2ab59
commit
2647380f59
@ -283,7 +283,8 @@
|
||||
|
||||
/// \macro LLVM_ALIGNAS
|
||||
/// \brief Used to specify a minimum alignment for a structure or variable. The
|
||||
/// alignment must be a constant integer.
|
||||
/// alignment must be a constant integer. Use LLVM_PTR_SIZE to compute
|
||||
/// alignments in terms of the size of a pointer.
|
||||
///
|
||||
/// Note that __declspec(align) has special quirks, it's not legal to pass a
|
||||
/// structure with __declspec(align) as a formal parameter.
|
||||
@ -295,6 +296,22 @@
|
||||
# define LLVM_ALIGNAS(x) alignas(x)
|
||||
#endif
|
||||
|
||||
/// \macro LLVM_PTR_SIZE
|
||||
/// \brief A constant integer equivalent to the value of sizeof(void*).
|
||||
/// Generally used in combination with LLVM_ALIGNAS or when doing computation in
|
||||
/// the preprocessor.
|
||||
#ifdef __SIZEOF_POINTER__
|
||||
# define LLVM_PTR_SIZE __SIZEOF_POINTER__
|
||||
#elif defined(_WIN64)
|
||||
# define LLVM_PTR_SIZE 8
|
||||
#elif defined(_WIN32)
|
||||
# define LLVM_PTR_SIZE 4
|
||||
#elif defined(_MSC_VER)
|
||||
# error "could not determine LLVM_PTR_SIZE as a constant int for MSVC"
|
||||
#else
|
||||
# define LLVM_PTR_SIZE sizeof(void *)
|
||||
#endif
|
||||
|
||||
/// \macro LLVM_FUNCTION_NAME
|
||||
/// \brief Expands to __func__ on compilers which support it. Otherwise,
|
||||
/// expands to a compiler-dependent replacement.
|
||||
|
Loading…
Reference in New Issue
Block a user