#ifndef _SYS_PROCFS_ISA_H
#define _SYS_PROCFS_ISA_H
#include <sys/regset.h>
#ifdef __cplusplus
extern "C" {
#endif
#define PR_MODEL_UNKNOWN 0
#define PR_MODEL_ILP32 1
#define PR_MODEL_LP64 2
#if defined(_LP64)
#define PR_MODEL_NATIVE PR_MODEL_LP64
#elif defined(_ILP32)
#define PR_MODEL_NATIVE PR_MODEL_ILP32
#else
#error "No DATAMODEL_NATIVE specified"
#endif
#if defined(__i386) || defined(__amd64)
typedef uchar_t instr_t;
#endif
#define NPRGREG _NGREG
#define prgreg_t greg_t
#define prgregset_t gregset_t
#define prfpregset _fpu
#define prfpregset_t fpregset_t
#if defined(_SYSCALL32)
typedef uchar_t instr32_t;
#if defined(__amd64)
#define NPRGREG32 _NGREG32
#define prgreg32_t greg32_t
#define prgregset32_t gregset32_t
#define prfpregset32 fpu32
#define prfpregset32_t fpregset32_t
#else
#define NPRGREG32 _NGREG
#define prgreg32_t greg_t
#define prgregset32_t gregset_t
#define prfpregset32 _fpu
#define prfpregset32_t fpregset_t
#endif
#endif
#if defined(__amd64)
#define R_PC REG_RIP
#define R_PS REG_RFL
#define R_SP REG_RSP
#define R_FP REG_RBP
#define R_R0 REG_RAX
#define R_R1 REG_RDX
#elif defined(__i386)
#define R_PC EIP
#define R_PS EFL
#define R_SP UESP
#define R_FP EBP
#define R_R0 EAX
#define R_R1 EDX
#endif
typedef struct prxregset prxregset_t;
#define PRX_INFO_XCR 0x01
#define PRX_INFO_XSAVE 0x02
#define PRX_INFO_YMM 0x03
#define PRX_INFO_OPMASK 0x04
#define PRX_INFO_ZMM 0x05
#define PRX_INFO_HI_ZMM 0x06
typedef struct prxregset_info {
uint32_t pri_type;
uint32_t pri_flags;
uint32_t pri_size;
uint32_t pri_offset;
} prxregset_info_t;
#define PR_TYPE_XSAVE 0x01
typedef struct prxregset_hdr {
uint32_t pr_type;
uint32_t pr_size;
uint32_t pr_flags;
uint32_t pr_pad[4];
uint32_t pr_ninfo;
#if defined(_STDC_C99) || defined(__C99FEATURES__)
prxregset_info_t pr_info[];
#endif
} prxregset_hdr_t;
typedef struct prxregset_xcr {
uint64_t prx_xcr_xcr0;
uint64_t prx_xcr_xfd;
uint64_t prx_xcr_pad[2];
} prxregset_xcr_t;
typedef struct prxregset_xsave {
uint16_t prx_fx_fcw;
uint16_t prx_fx_fsw;
uint16_t prx_fx_fctw;
uint16_t prx_fx_fop;
#if defined(__amd64)
uint64_t prx_fx_rip;
uint64_t prx_fx_rdp;
#else
uint32_t prx_fx_eip;
uint16_t prx_fx_cs;
uint16_t __prx_fx_ign0;
uint32_t prx_fx_dp;
uint16_t prx_fx_ds;
uint16_t __prx_fx_ign1;
#endif
uint32_t prx_fx_mxcsr;
uint32_t prx_fx_mxcsr_mask;
union {
uint16_t prx_fpr_16[5];
u_longlong_t prx_fpr_mmx;
uint32_t _prx__fpr_pad[4];
} fx_st[8];
#if defined(__amd64)
upad128_t prx_fx_xmm[16];
upad128_t __prx_fx_ign2[6];
#else
upad128_t prx_fx_xmm[8];
upad128_t __prx_fx_ign2[14];
#endif
uint64_t prx_xsh_xstate_bv;
uint64_t prx_xsh_xcomp_bv;
uint64_t prx_xsh_reserved[6];
} prxregset_xsave_t;
typedef struct prxregset_ymm {
#if defined(__amd64)
upad128_t prx_ymm[16];
#else
upad128_t prx_ymm[8];
upad128_t prx_rsvd[8];
#endif
} prxregset_ymm_t;
typedef struct prxregset_opmask {
uint64_t prx_opmask[8];
} prxregset_opmask_t;
typedef struct prxregset_zmm {
#if defined(__amd64)
upad256_t prx_zmm[16];
#else
upad256_t prx_zmm[8];
upad256_t prx_rsvd[8];
#endif
} prxregset_zmm_t;
typedef struct prxregset_hi_zmm {
#if defined(__amd64)
upad512_t prx_hi_zmm[16];
#else
upad512_t prx_rsvd[16];
#endif
} prxregset_hi_zmm_t;
#ifdef __cplusplus
}
#endif
#endif