Index: nsUnitConversion.h
===================================================================
RCS file: /cvsroot/mozilla/xpcom/ds/nsUnitConversion.h,v
retrieving revision 3.12
diff -u -r3.12 nsUnitConversion.h
--- nsUnitConversion.h	3 Nov 2004 02:48:03 -0000	3.12
+++ nsUnitConversion.h	25 Nov 2005 18:55:56 -0000
@@ -79,7 +79,15 @@
 #ifdef NS_COORD_IS_FLOAT
   return floorf(aValue + ROUND_CONST_FLOAT);
 #else
+  /*
   return ((0.0f <= aValue) ? nscoord(aValue + ROUND_CONST_FLOAT) : nscoord(aValue - ROUND_CONST_FLOAT));
+  */
+  float fi;
+  int a[2];
+  aValue *= (float) 1.000001;
+  asm("fctiw  %0,%1" : "=f" (fi) : "f" (aValue));
+  asm("stfd   %1,%0" : "=m" (a) : "f" (fi));
+  return a[1];
 #endif
 }
 
@@ -96,9 +104,17 @@
   return ((0.0f <= aValue) ? PRInt32(aValue + CEIL_CONST_FLOAT) : PRInt32(aValue));
 }
 
-inline PRInt32 NSToIntRound(float aValue)
+inline PRInt32 NSToIntRound(float f)
 {
+  /*
   return ((0.0f <= aValue) ? PRInt32(aValue + ROUND_CONST_FLOAT) : PRInt32(aValue - ROUND_CONST_FLOAT));
+  */
+  float fi;
+  int a[2];
+  f *= (float) 1.000001;
+  asm("fctiw  %0,%1" : "=f" (fi) : "f" (f));
+  asm("stfd   %1,%0" : "=m" (a) : "f" (fi));
+  return a[1];
 }
 
 /* 
