summaryrefslogtreecommitdiff
path: root/Inferno/thumb
diff options
context:
space:
mode:
Diffstat (limited to 'Inferno/thumb')
-rw-r--r--Inferno/thumb/include/lib9.h8
-rw-r--r--Inferno/thumb/include/u.h65
-rw-r--r--Inferno/thumb/include/ureg.h24
3 files changed, 97 insertions, 0 deletions
diff --git a/Inferno/thumb/include/lib9.h b/Inferno/thumb/include/lib9.h
new file mode 100644
index 00000000..aa72ded4
--- /dev/null
+++ b/Inferno/thumb/include/lib9.h
@@ -0,0 +1,8 @@
+#include <u.h>
+#include <kern.h>
+
+/*
+ * Extensions for Inferno to basic libc.h
+ */
+
+#undef __LITTLE_ENDIAN /* math/dtoa.c; longs in ARM doubles are big-endian */
diff --git a/Inferno/thumb/include/u.h b/Inferno/thumb/include/u.h
new file mode 100644
index 00000000..2ab381d2
--- /dev/null
+++ b/Inferno/thumb/include/u.h
@@ -0,0 +1,65 @@
+#define nil ((void*)0)
+
+typedef unsigned short ushort;
+typedef unsigned char uchar;
+typedef unsigned long ulong;
+typedef unsigned int uint;
+typedef signed char schar;
+typedef long long vlong;
+typedef unsigned long long uvlong;
+typedef ushort Rune;
+typedef union FPdbleword FPdbleword;
+typedef long jmp_buf[2];
+#define JMPBUFSP 0
+#define JMPBUFPC 1
+#define JMPBUFDPC 0
+typedef unsigned int mpdigit; /* for /sys/include/mp.h */
+typedef unsigned char u8int;
+typedef unsigned short u16int;
+typedef unsigned int u32int;
+typedef unsigned long long u64int;
+typedef unsigned long uintptr;
+
+/* FCR */
+#define FPINEX (1<<20)
+#define FPUNFL (1<<19)
+#define FPOVFL (1<<18)
+#define FPZDIV (1<<17)
+#define FPINVAL (1<<16)
+#define FPRNR (0<<0)
+#define FPRZ (1<<0)
+#define FPRPINF (2<<0)
+#define FPRNINF (3<<0)
+#define FPRMASK (3<<0)
+#define FPPEXT 0
+#define FPPSGL 0
+#define FPPDBL 0
+#define FPPMASK 0
+/* FSR */
+#define FPAINEX (1<<4)
+#define FPAUNFL (1<<3)
+#define FPAOVFL (1<<2)
+#define FPAZDIV (1<<1)
+#define FPAINVAL (1<<0)
+union FPdbleword
+{
+ double x;
+ struct { /* big endian (on 7500) */
+ ulong hi;
+ ulong lo;
+ };
+};
+
+typedef char* va_list;
+#define va_start(list, start) list =\
+ (sizeof(start) < 4?\
+ (char*)((int*)&(start)+1):\
+ (char*)(&(start)+1))
+#define va_end(list)\
+ USED(list)
+#define va_arg(list, mode)\
+ ((sizeof(mode) == 1)?\
+ ((mode*)(list += 4))[-4]:\
+ (sizeof(mode) == 2)?\
+ ((mode*)(list += 4))[-2]:\
+ ((mode*)(list += sizeof(mode)))[-1])
diff --git a/Inferno/thumb/include/ureg.h b/Inferno/thumb/include/ureg.h
new file mode 100644
index 00000000..7784f4d5
--- /dev/null
+++ b/Inferno/thumb/include/ureg.h
@@ -0,0 +1,24 @@
+typedef struct Ureg {
+ uint r0;
+ uint r1;
+ uint r2;
+ uint r3;
+ uint r4;
+ uint r5;
+ uint r6;
+ uint r7;
+ uint r8;
+ uint r9;
+ uint r10;
+ uint r11;
+ uint r12;
+ union {
+ uint r13;
+ uint sp;
+ };
+ uint r14;
+ uint link;
+ uint type;
+ uint psr;
+ uint pc;
+} Ureg;