diff options
author | cinap_lenrek <devnull@localhost> | 2011-03-30 15:08:40 +0000 |
---|---|---|
committer | cinap_lenrek <devnull@localhost> | 2011-03-30 15:08:40 +0000 |
commit | 9b675a9941c8cc7957b3996e10fefdf40be0eb7e (patch) | |
tree | 2a55aaed627a642b2283434cd0d4bb7264208a00 /power64/include | |
parent | 55613b56d78d8e349174cbd576e346284977c362 (diff) |
continue...
Diffstat (limited to 'power64/include')
-rw-r--r-- | power64/include/u.h | 87 | ||||
-rw-r--r-- | power64/include/ureg.h | 44 |
2 files changed, 131 insertions, 0 deletions
diff --git a/power64/include/u.h b/power64/include/u.h new file mode 100644 index 000000000..d9dbf50be --- /dev/null +++ b/power64/include/u.h @@ -0,0 +1,87 @@ +#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 unsigned long long uintptr; +typedef unsigned long usize; +typedef ushort Rune; +typedef union FPdbleword FPdbleword; +typedef uintptr 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; + +/* FPSCR */ +#define FPSFX (1<<31) /* exception summary (sticky) */ +#define FPSEX (1<<30) /* enabled exception summary */ +#define FPSVX (1<<29) /* invalid operation exception summary */ +#define FPSOX (1<<28) /* overflow exception OX (sticky) */ +#define FPSUX (1<<27) /* underflow exception UX (sticky) */ +#define FPSZX (1<<26) /* zero divide exception ZX (sticky) */ +#define FPSXX (1<<25) /* inexact exception XX (sticky) */ +#define FPSVXSNAN (1<<24) /* invalid operation exception for SNaN (sticky) */ +#define FPSVXISI (1<<23) /* invalid operation exception for ∞-∞ (sticky) */ +#define FPSVXIDI (1<<22) /* invalid operation exception for ∞/∞ (sticky) */ +#define FPSVXZDZ (1<<21) /* invalid operation exception for 0/0 (sticky) */ +#define FPSVXIMZ (1<<20) /* invalid operation exception for ∞*0 (sticky) */ +#define FPSVXVC (1<<19) /* invalid operation exception for invalid compare (sticky) */ +#define FPSFR (1<<18) /* fraction rounded */ +#define FPSFI (1<<17) /* fraction inexact */ +#define FPSFPRF (1<<16) /* floating point result class */ +#define FPSFPCC (0xF<<12) /* <, >, =, unordered */ +#define FPVXCVI (1<<8) /* enable exception for invalid integer convert (sticky) */ +#define FPVE (1<<7) /* invalid operation exception enable */ +#define FPOVFL (1<<6) /* enable overflow exceptions */ +#define FPUNFL (1<<5) /* enable underflow */ +#define FPZDIV (1<<4) /* enable zero divide */ +#define FPINEX (1<<3) /* enable inexact exceptions */ +#define FPRMASK (3<<0) /* rounding mode */ +#define FPRNR (0<<0) +#define FPRZ (1<<0) +#define FPRPINF (2<<0) +#define FPRNINF (3<<0) +#define FPPEXT 0 +#define FPPSGL 0 +#define FPPDBL 0 +#define FPPMASK 0 +#define FPINVAL FPVE + +#define FPAOVFL FPSOX +#define FPAINEX FPSXX +#define FPAUNFL FPSUX +#define FPAZDIV FPSZX +#define FPAINVAL FPSVX + +union FPdbleword +{ + double x; + struct { /* big endian */ + ulong hi; + ulong lo; + }; +}; + +typedef char* va_list; +#define va_start(list, start) list =\ + (sizeof(start) < 8?\ + (char*)((vlong*)&(start)+1):\ + (char*)(&(start)+1)) +#define va_end(list)\ + USED(list) +#define va_arg(list, mode)\ + ((sizeof(mode) == 1)?\ + ((mode*)(list += 8))[-1]:\ + (sizeof(mode) == 2)?\ + ((mode*)(list += 8))[-1]:\ + (sizeof(mode) == 4)?\ + ((mode*)(list += 8))[-1]:\ + ((mode*)(list += sizeof(mode)))[-1]) diff --git a/power64/include/ureg.h b/power64/include/ureg.h new file mode 100644 index 000000000..676f5a570 --- /dev/null +++ b/power64/include/ureg.h @@ -0,0 +1,44 @@ +struct Ureg +{ +/* 0*/ u64int cause; /* trap or interrupt vector */ +/* 8*/ u64int msr; /* SRR1 */ +/* 16*/ u64int pc; /* SRR0 */ +/* 24*/ u64int unused; +/* 32*/ u64int lr; +/* 36*/ u32int pad; +/* 40*/ u32int cr; +/* 48*/ u64int xer; +/* 56*/ u64int ctr; +/* 64*/ u64int r0; +/* 72*/ union{ u64int r1; u64int sp; u64int usp; }; +/* 80*/ u64int r2; +/* 88*/ u64int r3; +/* 96*/ u64int r4; +/*104*/ u64int r5; +/*112*/ u64int r6; +/*120*/ u64int r7; +/*128*/ u64int r8; +/*136*/ u64int r9; +/*144*/ u64int r10; +/*152*/ u64int r11; +/*160*/ u64int r12; +/*168*/ u64int r13; +/*176*/ u64int r14; +/*184*/ u64int r15; +/*192*/ u64int r16; +/*200*/ u64int r17; +/*208*/ u64int r18; +/*216*/ u64int r19; +/*224*/ u64int r20; +/*232*/ u64int r21; +/*240*/ u64int r22; +/*248*/ u64int r23; +/*256*/ u64int r24; +/*264*/ u64int r25; +/*272*/ u64int r26; +/*280*/ u64int r27; +/*288*/ u64int r28; +/*296*/ u64int r29; +/*304*/ u64int r30; +/*312*/ u64int r31; +}; |