summaryrefslogtreecommitdiff
path: root/lib/libc/quad/quad.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/quad/quad.h')
-rw-r--r--lib/libc/quad/quad.h63
1 files changed, 46 insertions, 17 deletions
diff --git a/lib/libc/quad/quad.h b/lib/libc/quad/quad.h
index 59a1829fde1..49d20cf4889 100644
--- a/lib/libc/quad/quad.h
+++ b/lib/libc/quad/quad.h
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $OpenBSD: quad.h,v 1.4 2003/06/02 20:18:36 millert Exp $
+ * $OpenBSD: quad.h,v 1.5 2004/04/27 17:46:46 otto Exp $
*/
/*
@@ -40,17 +40,21 @@
*
* - The type long long (aka quad_t) exists.
*
- * - A quad variable is exactly twice as long as `long'.
+ * - A quad variable is exactly twice as long as `int'.
*
* - The machine's arithmetic is two's complement.
*
* This library can provide 128-bit arithmetic on a machine with 128-bit
- * quads and 64-bit longs, for instance, or 96-bit arithmetic on machines
- * with 48-bit longs.
+ * quads and 64-bit ints, for instance, or 96-bit arithmetic on machines
+ * with 48-bit ints.
*/
#include <sys/types.h>
+#if !defined(_KERNEL) && !defined(_STANDALONE)
#include <limits.h>
+#else
+#include <machine/limits.h>
+#endif
/*
* Depending on the desired operation, we view a `long long' (aka quad_t) in
@@ -59,12 +63,12 @@
union uu {
quad_t q; /* as a (signed) quad */
u_quad_t uq; /* as an unsigned quad */
- long sl[2]; /* as two signed longs */
- u_long ul[2]; /* as two unsigned longs */
+ int sl[2]; /* as two signed ints */
+ u_int ul[2]; /* as two unsigned ints */
};
/*
- * Define high and low longwords.
+ * Define high and low parts of a quad_t.
*/
#define H _QUAD_HIGHWORD
#define L _QUAD_LOWWORD
@@ -75,23 +79,21 @@ union uu {
* and assembly.
*/
#define QUAD_BITS (sizeof(quad_t) * CHAR_BIT)
-#define LONG_BITS (sizeof(long) * CHAR_BIT)
-#define HALF_BITS (sizeof(long) * CHAR_BIT / 2)
+#define INT_BITS (sizeof(int) * CHAR_BIT)
+#define HALF_BITS (sizeof(int) * CHAR_BIT / 2)
/*
* Extract high and low shortwords from longword, and move low shortword of
* longword to upper half of long, i.e., produce the upper longword of
- * ((quad_t)(x) << (number_of_bits_in_long/2)). (`x' must actually be u_long.)
+ * ((quad_t)(x) << (number_of_bits_in_int/2)). (`x' must actually be u_int.)
*
* These are used in the multiply code, to split a longword into upper
* and lower halves, and to reassemble a product as a quad_t, shifted left
- * (sizeof(long)*CHAR_BIT/2).
+ * (sizeof(int)*CHAR_BIT/2).
*/
-#define HHALF(x) ((u_long)(x) >> HALF_BITS)
-#define LHALF(x) ((u_long)(x) & (((long)1 << HALF_BITS) - 1))
-#define LHUP(x) ((u_long)(x) << HALF_BITS)
-
-extern u_quad_t __qdivrem(u_quad_t u, u_quad_t v, u_quad_t *rem);
+#define HHALF(x) ((u_int)(x) >> HALF_BITS)
+#define LHALF(x) ((u_int)(x) & (((int)1 << HALF_BITS) - 1))
+#define LHUP(x) ((u_int)(x) << HALF_BITS)
/*
* XXX
@@ -99,8 +101,35 @@ extern u_quad_t __qdivrem(u_quad_t u, u_quad_t v, u_quad_t *rem);
* as u_quad_t, while gcc 2 correctly uses int. Unfortunately, we still use
* both compilers.
*/
-#if __GNUC__ >= 2
+#if __GNUC_PREREQ__(2, 0) || defined(lint)
typedef unsigned int qshift_t;
#else
typedef u_quad_t qshift_t;
#endif
+
+quad_t __adddi3(quad_t, quad_t);
+quad_t __anddi3(quad_t, quad_t);
+quad_t __ashldi3(quad_t, qshift_t);
+quad_t __ashrdi3(quad_t, qshift_t);
+int __cmpdi2(quad_t, quad_t);
+quad_t __divdi3(quad_t, quad_t);
+quad_t __fixdfdi(double);
+quad_t __fixsfdi(float);
+u_quad_t __fixunsdfdi(double);
+u_quad_t __fixunssfdi(float);
+double __floatdidf(quad_t);
+float __floatdisf(quad_t);
+double __floatunsdidf(u_quad_t);
+quad_t __iordi3(quad_t, quad_t);
+quad_t __lshldi3(quad_t, qshift_t);
+quad_t __lshrdi3(quad_t, qshift_t);
+quad_t __moddi3(quad_t, quad_t);
+quad_t __muldi3(quad_t, quad_t);
+quad_t __negdi2(quad_t);
+quad_t __one_cmpldi2(quad_t);
+u_quad_t __qdivrem(u_quad_t, u_quad_t, u_quad_t *);
+quad_t __subdi3(quad_t, quad_t);
+int __ucmpdi2(u_quad_t, u_quad_t);
+u_quad_t __udivdi3(u_quad_t, u_quad_t );
+u_quad_t __umoddi3(u_quad_t, u_quad_t );
+quad_t __xordi3(quad_t, quad_t);