I've extended the patch a bit, see attachment. Does this look reasonable ? Basically I've changed all the inline assembler definitions in a simple function definition, under the #if __MINGW32CE__ condition.
Danny
On Wed, 2007-01-31 at 20:26 +0000, Nuno Lucas wrote:
> On 1/31/07, Danny Backx <[EMAIL PROTECTED]> wrote:
> > That's only a partial solution : from my scan, the "asm" construction
> > occurs in these places in math.h :
> >
> [...]
> > Your patch only addresses the lines between 634 and 703.
>
> I'm aware of that, but I didn't know if the patch was the right thing
> to do, and the others weren't generating errors (most probably because
> I wasn't using them in the source I was compiling), so I left the
> others out, waiting for someone to say something.
>
> > Some of the other constructions are less simple to fix, e.g. the first
> > one (definition of __fpclassifyl at line 362) doesn't appear to have an
> > equivalent anywhere else. There's no declaration for it in math.h, and
> > the only other mention of that function appears to be in
> > src/mingw/mingwex/math/fpclassifyl.c where it is coded in assembler
> > similar but slightly different from the implementation in math.h .
>
> As I have no idea on the ARM assembly code (I did had some practice on
> MIPS assembly on the University, but that was some years ago), I'll
> have to leave that to who knows it.
>
> Anyway, in the case of mingw32ce, I think we should only implement
> what is trivial or already implemented on mingw, and let the user make
> it's own routines if it needs to.
>
>
> Best regards,
> ~Nuno Lucas
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier.
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Cegcc-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/cegcc-devel
--
Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info
Index: math.h
===================================================================
--- math.h (revision 856)
+++ math.h (working copy)
@@ -329,11 +329,15 @@
extern int __cdecl __fpclassifyf (float);
extern int __cdecl __fpclassify (double);
+#ifdef __MINGW32CE__
+extern int __cdecl __fpclassifyl (long double);
+#else
__CRT_INLINE int __cdecl __fpclassifyl (long double x){
unsigned short sw;
__asm__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
}
+#endif
#define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x) \
: sizeof (x) == sizeof (double) ? __fpclassify (x) \
@@ -349,6 +353,11 @@
/* We don't need to worry about trucation here:
A NaN stays a NaN. */
+#ifdef __MINGW32CE__
+extern int __cdecl __isnan (double);
+extern int __cdecl __isnanf (float);
+extern int __cdecl __isnanl (long double);
+#else
__CRT_INLINE int __cdecl __isnan (double _x)
{
unsigned short sw;
@@ -375,6 +384,7 @@
return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
== FP_NAN;
}
+#endif
#define isnan(x) (sizeof (x) == sizeof (float) ? __isnanf (x) \
@@ -384,6 +394,11 @@
/* 7.12.3.5 */
#define isnormal(x) (fpclassify(x) == FP_NORMAL)
+#ifdef __MINGW32CE__
+extern int __cdecl __signbit (double);
+extern int __cdecl __signbitf (float);
+extern int __cdecl __signbitl (long double);
+#else
/* 7.12.3.6 The signbit macro */
__CRT_INLINE int __cdecl __signbit (double x) {
unsigned short stw;
@@ -402,6 +417,7 @@
__asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
return (stw & 0x0200) != 0;
}
+#endif
#define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x) \
: sizeof (x) == sizeof (double) ? __signbit (x) \
@@ -517,7 +533,7 @@
/* Inline versions. GCC-4.0+ can do a better fast-math optimization
with __builtins. */
-#if !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ )
+#if !defined(__MINGW32CE__ & !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ )
__CRT_INLINE double __cdecl logb (double x)
{
double res;
@@ -631,7 +647,7 @@
/* Inline versions of above.
GCC 4.0+ can do a better fast-math job with __builtins. */
-#if !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ )
+#if !defined(__MINGW32CE__) && !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ )
__CRT_INLINE double __cdecl rint (double x)
{
double retval;
@@ -811,6 +827,9 @@
#else
/* helper */
+#ifdef __MINGW32CE__
+extern int __cdecl __fp_unordered_compare (long double, long double);
+#else
__CRT_INLINE int __cdecl
__fp_unordered_compare (long double x, long double y){
unsigned short retval;
@@ -818,6 +837,7 @@
"fnstsw;": "=a" (retval) : "t" (x), "u" (y));
return retval;
}
+#endif
#define isgreater(x, y) ((__fp_unordered_compare(x, y) \
& 0x4500) == 0)
signature.asc
Description: This is a digitally signed message part
------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________ Cegcc-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/cegcc-devel
