- Hard code gdtoa constants for OS X since the programs can’t always be run on the target. (The values are the same for GCC and Clang.)

This commit is contained in:
Braden Obrzut 2014-01-02 03:06:06 -05:00
parent 49edd7c60c
commit 1e50a0af9e
3 changed files with 52 additions and 4 deletions

View file

@ -15,7 +15,7 @@ endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" S
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
add_definitions( -DINFNAN_CHECK -DMULTIPLE_THREADS )
if( NOT MSVC )
if( NOT MSVC AND NOT APPLE )
if( NOT CMAKE_CROSSCOMPILING )
add_executable( arithchk arithchk.c )
endif( NOT CMAKE_CROSSCOMPILING )
@ -35,7 +35,7 @@ if( NOT MSVC )
set( GEN_FP_FILES arith.h gd_qnan.h )
set( GEN_FP_DEPS ${CMAKE_CURRENT_BINARY_DIR}/arith.h ${CMAKE_CURRENTY_BINARY_DIR}/gd_qnan.h )
endif( NOT MSVC )
endif( NOT MSVC AND NOT APPLE )
add_library( gdtoa
${GEN_FP_FILES}

View file

@ -32,7 +32,7 @@ THIS SOFTWARE.
#ifndef GDTOA_H_INCLUDED
#define GDTOA_H_INCLUDED
#ifdef _MSC_VER
#if defined(_MSC_VER)
/* [RH] Generating arith.h strikes me as too cumbersome under Visual
* Studio, so here's the equivalent, given the limited number of
* architectures that MSC can target. (Itanium? Who cares about that?)
@ -43,6 +43,26 @@ THIS SOFTWARE.
#ifdef _M_X64
#define X64_bit_pointers
#endif
#elif defined(__APPLE__)
/* [BL] While generating the files may be easy, on OS X we have cross
* compiling to deal with, which means we can't run the generation
* program on the target.
*/
#if defined(__x86_64__)
#define IEEE_8087
#define Arith_Kind_ASL 1
#define Long int
#define Intcast (int)(long)
#define Double_Align
#define X64_bit_pointers
#elif defined(__i386__)
#define IEEE_8087
#define Arith_Kind_ASL 1
#else
#define IEEE_MC68k
#define Arith_Kind_ASL 2
#define Double_Align
#endif
#else
#include "arith.h"
#endif

View file

@ -167,7 +167,7 @@ THIS SOFTWARE.
#define GDTOAIMP_H_INCLUDED
#include "gdtoa.h"
#ifdef _MSC_VER
#if defined(_MSC_VER)
/* [RH] Generating gd_qnan.h strikes me as too cumbersome under Visual
* Studio, so here's the equivalent, given the limited number of
* architectures that MSC can target. (Itanium? Who cares about that?)
@ -188,6 +188,34 @@ THIS SOFTWARE.
* it turns out that it has a true long double type. I thought that
* all ia32 compilers had phased out extended precision.
*/
#elif defined(__APPLE__)
#if defined(__x86_64__) || defined(__i386__)
#define f_QNAN 0xffc00000
#define d_QNAN0 0x0
#define d_QNAN1 0xfff80000
#define ld_QNAN0 0x0
#define ld_QNAN1 0xc0000000
#define ld_QNAN2 0xffff
#define ld_QNAN3 0x0
#define ldus_QNAN0 0x0
#define ldus_QNAN1 0x0
#define ldus_QNAN2 0x0
#define ldus_QNAN3 0xc000
#define ldus_QNAN4 0xffff
#else
#define f_QNAN 0xffc00000
#define d_QNAN0 0xfff80000
#define d_QNAN1 0x0
#define ld_QNAN0 0xfff80000
#define ld_QNAN1 0x0
#define ld_QNAN2 0x0
#define ld_QNAN3 0x0
#define ldus_QNAN0 0xfff8
#define ldus_QNAN1 0x0
#define ldus_QNAN2 0x0
#define ldus_QNAN3 0x0
#define ldus_QNAN4 0x0
#endif
#else
#include "gd_qnan.h"
#endif