From 9920ecc04b87cab3968f7f0c286b264bd31e132f Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Fri, 3 May 2019 20:57:30 +0200 Subject: libc: initial arm64 support --- arm64/include/u.h | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 arm64/include/u.h (limited to 'arm64/include/u.h') diff --git a/arm64/include/u.h b/arm64/include/u.h new file mode 100644 index 000000000..94d9cc3b7 --- /dev/null +++ b/arm64/include/u.h @@ -0,0 +1,77 @@ +#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 vlong intptr; +typedef uvlong uintptr; +typedef unsigned long usize; +typedef uint 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; +typedef signed char s8int; +typedef signed short s16int; +typedef signed int s32int; +typedef signed long long s64int; + +/* FPCR (control) */ +#define FPINEX (1<<12) +#define FPUNFL (1<<11) +#define FPOVFL (1<<10) +#define FPZDIV (1<<9) +#define FPINVAL (1<<8) + +#define FPRNR (0<<22) +#define FPRPINF (1<<22) +#define FPRNINF (2<<22) +#define FPRZ (3<<22) + +#define FPRMASK (3<<22) + +/* FPSR (status) */ +#define FPPEXT 0 +#define FPPSGL 0 +#define FPPDBL 0 +#define FPPMASK 0 +#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 { /* little endian */ + ulong lo; + ulong hi; + }; +}; + +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)?\ + ((list += 8), (mode*)list)[-8]:\ + (sizeof(mode) == 2)?\ + ((list += 8), (mode*)list)[-4]:\ + (sizeof(mode) == 4)?\ + ((list += 8), (mode*)list)[-2]:\ + ((list += sizeof(mode)), (mode*)list)[-1]) -- cgit v1.2.3