mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01: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. llvm-svn: 233929
This commit is contained in:
parent
6b1c001175
commit
53dc058e4d
@ -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