#define GDTTYPE(x) ((uvlong)(x)<<40)
enum {
GDTR = GDTTYPE(0x10), /* read-only */
GDTRW = GDTTYPE(0x12), /* read-write *
GDTX = GDTTYPE(0x18), /* execute-only */
GDTRX = GDTTYPE(0x1A), /* read-execute */
GDTTSS = GDTTYPE(0x09),
GDTA = 1ULL<<40, /* accessed */
GDTE = 1ULL<<42, /* expand down (data only) */
GDTC = GDTE, /* conforming (code only) */
GDTP = 1ULL<<47, /* present */
GDT64 = 1ULL<<53, /* 64-bit code segment */
GDT32 = 1ULL<<54, /* 32-bit segment */
GDTG = 1ULL<<55, /* granularity */
};
#define GDTLIM(l) ((l) & 0xffff | (uvlong)((l) & 0xf0000)<<32)
#define GDTBASE(l) (((uvlong)(l) & 0xffffff)<<16 | (uvlong)((l) & 0xff000000)<<32)
#define GDTDPL(l) ((uvlong)(l)<<45)
enum {
Cr0Pg = 1<<31,
Cr4Pse = 1<<4,
Cr4Pae = 1<<5,
EferLme = 1<<8,
};
extern char *x86reg[16];
extern char *x86segreg[8];
enum {
CF = 1<<0,
PF = 1<<2,
AF = 1<<4,
ZF = 1<<6,
SF = 1<<7,
OF = 1<<11,
};