diff options
Diffstat (limited to 'sys/lib')
-rw-r--r-- | sys/lib/libkern/crt_glue.h | 66 | ||||
-rw-r--r-- | sys/lib/libkern/lshrti3.c | 34 |
2 files changed, 68 insertions, 32 deletions
diff --git a/sys/lib/libkern/crt_glue.h b/sys/lib/libkern/crt_glue.h new file mode 100644 index 00000000000..a00bea0a70e --- /dev/null +++ b/sys/lib/libkern/crt_glue.h @@ -0,0 +1,66 @@ +/* ===-- int_lib.h - configuration header for compiler-rt -----------------=== + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + * ===----------------------------------------------------------------------=== + * + * This file is a compat header for compiler-rt source files used in the OpenBSD + * kernel. + * This file is not part of the interface of this library. + * + * ===----------------------------------------------------------------------=== + */ + +#ifndef _CRT_INT_LIB_H_ +#define _CRT_INT_LIB_H_ + +#include <sys/limits.h> +#include <sys/endian.h> + +typedef int si_int; +typedef unsigned int su_int; +typedef long long di_int; +typedef unsigned long long du_int; +typedef int ti_int __attribute__ ((mode (TI))); +typedef int tu_int __attribute__ ((mode (TI))); + +#if BYTE_ORDER == LITTLE_ENDIAN +#define _YUGA_LITTLE_ENDIAN 0 +#else +#define _YUGA_LITTLE_ENDIAN 1 +#endif + +typedef union +{ + ti_int all; + struct + { +#if _YUGA_LITTLE_ENDIAN + du_int low; + di_int high; +#else + di_int high; + du_int low; +#endif /* _YUGA_LITTLE_ENDIAN */ + }s; +} twords; + +typedef union +{ + tu_int all; + struct + { +#if _YUGA_LITTLE_ENDIAN + du_int low; + du_int high; +#else + du_int high; + du_int low; +#endif /* _YUGA_LITTLE_ENDIAN */ + }s; +} utwords; + +#endif /* _CRT_INT_LIB_H_ */ diff --git a/sys/lib/libkern/lshrti3.c b/sys/lib/libkern/lshrti3.c index 1e1009f142a..82fa63ceca6 100644 --- a/sys/lib/libkern/lshrti3.c +++ b/sys/lib/libkern/lshrti3.c @@ -12,42 +12,12 @@ * ===----------------------------------------------------------------------=== */ +#include "crt_glue.h" + /* Returns: logical a >> b */ /* Precondition: 0 <= b < bits_in_tword */ -#include <sys/limits.h> -#include <sys/endian.h> - -typedef int si_int; -typedef unsigned int su_int; -typedef long long di_int; -typedef unsigned long long du_int; -typedef int ti_int __attribute__ ((mode (TI))); -typedef int tu_int __attribute__ ((mode (TI))); - -#if BYTE_ORDER == LITTLE_ENDIAN -#define _YUGA_LITTLE_ENDIAN 0 -#else -#define _YUGA_LITTLE_ENDIAN 1 -#endif - -typedef union -{ - tu_int all; - struct - { -#if _YUGA_LITTLE_ENDIAN - du_int low; - du_int high; -#else - du_int high; - du_int low; -#endif /* _YUGA_LITTLE_ENDIAN */ - }s; -} utwords; - - ti_int __lshrti3(ti_int a, si_int b) { |