in mono/mono/mini:
[mono.git] / mono / metadata / decimal.h
index a01c0ff7fa63a55508a119f2b20faddd7b6b19c1..1f3afd57c8dd89ccf584953c68452d4f27bcdec6 100644 (file)
@@ -1,4 +1,5 @@
 #include "mono/metadata/object.h"
+#include "mono/utils/mono-compiler.h"
 
 /* representation for C# type decimal */
 /* This is the layout of MSC */
@@ -6,12 +7,21 @@ typedef struct
 {
        union {
                guint32 ss32;
+#if G_BYTE_ORDER != G_LITTLE_ENDIAN
+           struct {
+                   unsigned int sign      : 1;
+                   unsigned int reserved2 : 7;
+                   unsigned int scale     : 8;
+                   unsigned int reserved1 : 16;
+           } signscale;
+#else
            struct {
                    unsigned int reserved1 : 16;
-               unsigned int scale : 8; 
+                   unsigned int scale     : 8;
                    unsigned int reserved2 : 7;
-               unsigned int sign : 1; 
-               } signscale;
+                   unsigned int sign      : 1;
+           } signscale;
+#endif
        } u;
     guint32 hi32;
     guint32 lo32;
@@ -20,20 +30,20 @@ typedef struct
 
 
 /* function prototypes */
-gint32 mono_decimalIncr(/*[In, Out]*/decimal_repr* pA, /*[In]*/decimal_repr* pB);
-gint32 mono_double2decimal(/*[Out]*/decimal_repr* pA, double val, gint32 digits);
-gint32 mono_decimal2UInt64(/*[In]*/decimal_repr* pD, guint64* pResult);
-gint32 mono_decimal2Int64(/*[In]*/decimal_repr* pD, gint64* pResult);
-void mono_decimalFloorAndTrunc(/*[In, Out]*/decimal_repr* pD, gint32 floorFlag);
-void mono_decimalRound(/*[In, Out]*/decimal_repr* pD, gint32 decimals);
-gint32 mono_decimalMult(/*[In, Out]*/decimal_repr* pA, /*[In]*/decimal_repr* pB);
-gint32 mono_decimalDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB);
-gint32 mono_decimalIntDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB);
-gint32 mono_decimalCompare(/*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB);
-double mono_decimal2double(/*[In]*/decimal_repr* pA);
-gint32 mono_decimalSetExponent(/*[In, Out]*/decimal_repr* pA, gint32 texp);
+gint32 mono_decimalIncr(/*[In, Out]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
+gint32 mono_double2decimal(/*[Out]*/decimal_repr* pA, double val, gint32 digits) MONO_INTERNAL;
+gint32 mono_decimal2UInt64(/*[In]*/decimal_repr* pD, guint64* pResult) MONO_INTERNAL;
+gint32 mono_decimal2Int64(/*[In]*/decimal_repr* pD, gint64* pResult) MONO_INTERNAL;
+void mono_decimalFloorAndTrunc(/*[In, Out]*/decimal_repr* pD, gint32 floorFlag) MONO_INTERNAL;
+void mono_decimalRound(/*[In, Out]*/decimal_repr* pD, gint32 decimals) MONO_INTERNAL;
+gint32 mono_decimalMult(/*[In, Out]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
+gint32 mono_decimalDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
+gint32 mono_decimalIntDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
+gint32 mono_decimalCompare(/*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
+double mono_decimal2double(/*[In]*/decimal_repr* pA) MONO_INTERNAL;
+gint32 mono_decimalSetExponent(/*[In, Out]*/decimal_repr* pA, gint32 texp) MONO_INTERNAL;
 
-gint32 mono_string2decimal(/*[Out]*/decimal_repr* pA, /*[In]*/MonoString* s, gint32 decrDecimal, gint32 sign);
+gint32 mono_string2decimal(/*[Out]*/decimal_repr* pA, /*[In]*/MonoString* s, gint32 decrDecimal, gint32 sign) MONO_INTERNAL;
 gint32 mono_decimal2string(/*[In]*/decimal_repr* pA, int digits, int decimals,
-                        /*[Out]*/MonoArray* pArray, gint32 bufSize, gint32* pDecPos, gint32* pSign);
+                        /*[Out]*/MonoArray* pArray, gint32 bufSize, gint32* pDecPos, gint32* pSign) MONO_INTERNAL;