|
From: | Christian Jullien |
Subject: | [Tinycc-devel] Why is __LP64__ defined for targets for 32bits targets? |
Date: | Sun, 18 Sep 2016 14:05:55 +0200 |
/* TinyCC & gcc defines */ #if defined TCC_TARGET_PE && defined TCC_TARGET_X86_64 tcc_define_symbol(s, "__SIZE_TYPE__", "unsigned long long"); tcc_define_symbol(s, "__PTRDIFF_TYPE__", "long long"); tcc_define_symbol(s, "__LLP64__", NULL); #else tcc_define_symbol(s, "__SIZE_TYPE__", "unsigned long"); tcc_define_symbol(s, "__PTRDIFF_TYPE__", "long"); tcc_define_symbol(s, "__LP64__", NULL); // <= here? #endif Compiling tcc on native 32BITS Windows for example, it defines __LP64__ This variable is specified as (see https://gcc.gnu.org/onlinedocs/gcc-4.9.2/cpp/Common-Predefined-Macros.html) __LP64__ _LP64 These macros are defined, with value 1, if (and only if) the compilation is for a target where long int and pointer both use 64-bits and int uses 32-bit. Testing this macro in programs compiled with tcc 32bits returns wrong behavior #if defined(__LP64__) #define MYPTR_SIZE_IN_BYTES 8 // Assume void* is a 64bits pointer which is false on Windows 32bit #endif |
[Prev in Thread] | Current Thread | [Next in Thread] |