/* 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

 

_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to