mirror of
https://github.com/ctm/executor.git
synced 2025-01-04 21:29:22 +00:00
Fixed floating point in Mac OS X ppc
This commit is contained in:
parent
19e4e464ed
commit
ffb371a163
4
README
4
README
@ -71,9 +71,7 @@ the SDL-based version of Executor on Mac OS X Intel, you can try:
|
|||||||
make
|
make
|
||||||
|
|
||||||
If you have SDL installed and would like to play with the SDL-based
|
If you have SDL installed and would like to play with the SDL-based
|
||||||
version of Executor on Mac OS X PPC, you can try the following. Be aware that
|
version of Executor on Mac OS X PPC, you can try the following.
|
||||||
the Mac OS X PPC port is the most recent port and is likely to have problems
|
|
||||||
above and beyond those of the other ports.
|
|
||||||
|
|
||||||
mkdir -p build/debug-macosx-sdl
|
mkdir -p build/debug-macosx-sdl
|
||||||
cd build/debug-macosx-sdl
|
cd build/debug-macosx-sdl
|
||||||
|
4
TODO
4
TODO
@ -1,7 +1,3 @@
|
|||||||
Look into Mac OS X PPC glitches
|
|
||||||
|
|
||||||
cards don't work right in Eric's Ultimate Solitaire demo
|
|
||||||
|
|
||||||
Yank all the misleading RCS strings
|
Yank all the misleading RCS strings
|
||||||
|
|
||||||
Update the copyright notices to make it that the code is under
|
Update the copyright notices to make it that the code is under
|
||||||
|
@ -23,14 +23,38 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "rsys/float.h"
|
#include "rsys/float.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* Unlike most of the rest of Executor's source, we're not using __ppc__
|
|
||||||
* in our tests below, because the code involved won't compile on Mac OS X
|
|
||||||
* 10.5.7, with gcc 4.0.1.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined (powerpc)
|
#if defined (powerpc)
|
||||||
#include <ieee754.h>
|
#include <ieee754.h>
|
||||||
|
#elif defined (__ppc__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This comes from gcc's ieee754.h,
|
||||||
|
* which does not come with gcc with Apple's XCode.
|
||||||
|
*/
|
||||||
|
|
||||||
|
union ieee754_double
|
||||||
|
{
|
||||||
|
long double d;
|
||||||
|
struct {
|
||||||
|
unsigned int negative:1;
|
||||||
|
unsigned int exponent:11;
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa0:20;
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
|
||||||
|
} ieee;
|
||||||
|
struct {
|
||||||
|
unsigned int negative:1;
|
||||||
|
unsigned int exponent:11;
|
||||||
|
unsigned int quiet_nan:1;
|
||||||
|
/* Together these comprise the mantissa. */
|
||||||
|
unsigned int mantissa0:19;
|
||||||
|
unsigned int mantissa1:32;
|
||||||
|
} ieee_nan;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -92,7 +116,7 @@ x80_to_ieee (const x80_t *x)
|
|||||||
}
|
}
|
||||||
retval = *(double *)&temp64;
|
retval = *(double *)&temp64;
|
||||||
|
|
||||||
#elif defined (powerpc)
|
#elif defined (powerpc) || defined (__ppc__)
|
||||||
|
|
||||||
union ieee754_double d;
|
union ieee754_double d;
|
||||||
long long f; /* see SANE 2-18 for names */
|
long long f; /* see SANE 2-18 for names */
|
||||||
@ -103,7 +127,7 @@ x80_to_ieee (const x80_t *x)
|
|||||||
s = GET_X80_SGN (x);
|
s = GET_X80_SGN (x);
|
||||||
e = GET_X80_EXP (x);
|
e = GET_X80_EXP (x);
|
||||||
i = x->man.man >> 63;
|
i = x->man.man >> 63;
|
||||||
f = x->man.man & 0x7fffffffffffffff;
|
f = x->man.man & 0x7fffffffffffffffULL;
|
||||||
|
|
||||||
if (e == 32767)
|
if (e == 32767)
|
||||||
{
|
{
|
||||||
@ -163,7 +187,6 @@ x80_to_ieee (const x80_t *x)
|
|||||||
}
|
}
|
||||||
#warning using 8 byte to represent x80; precision will be lost
|
#warning using 8 byte to represent x80; precision will be lost
|
||||||
retval = d.d;
|
retval = d.d;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# warning x80_to_ieee not yet supported on this architecture.
|
# warning x80_to_ieee not yet supported on this architecture.
|
||||||
#endif
|
#endif
|
||||||
@ -330,7 +353,7 @@ ieee_to_x80 (ieee_t n, x80_t *x)
|
|||||||
templ = temp64p->man_lo;
|
templ = temp64p->man_lo;
|
||||||
x->man.hilo.man_hi = CL(0x80000000 | ((temp64p->man_hi) << 11) | (templ >> 21));
|
x->man.hilo.man_hi = CL(0x80000000 | ((temp64p->man_hi) << 11) | (templ >> 21));
|
||||||
x->man.hilo.man_lo = CL(templ << 11);
|
x->man.hilo.man_lo = CL(templ << 11);
|
||||||
#elif defined (powerpc)
|
#elif defined (powerpc) || defined (__ppc__)
|
||||||
union ieee754_double d;
|
union ieee754_double d;
|
||||||
|
|
||||||
d.d = n;
|
d.d = n;
|
||||||
|
Loading…
Reference in New Issue
Block a user