summaryrefslogtreecommitdiff
path: root/sys/lib/libkern/crt_glue.h
diff options
context:
space:
mode:
authorJeremie Courreges-Anglas <jca@cvs.openbsd.org>2020-08-13 10:02:47 +0000
committerJeremie Courreges-Anglas <jca@cvs.openbsd.org>2020-08-13 10:02:47 +0000
commitce803099f3b364054f7a64faa8163dfb7d272b40 (patch)
treee37c507e0b30cf8f2ac5b76f083edec125eac8e3 /sys/lib/libkern/crt_glue.h
parent64bbc8e322d6caafd2b0373cfe0eb463698155f9 (diff)
Move compiler_rt type definitions to a separate header
so that we can reuse them in other compiler_rt routines. ok kettenis@
Diffstat (limited to 'sys/lib/libkern/crt_glue.h')
-rw-r--r--sys/lib/libkern/crt_glue.h66
1 files changed, 66 insertions, 0 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_ */