14d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//===-- MachRegisterStatesI386.h --------------------------------*- C++ -*-===//
24d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//
34d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//                     The LLVM Compiler Infrastructure
44d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//
54d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan// This file is distributed under the University of Illinois Open Source
64d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan// License. See LICENSE.TXT for details.
74d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//
84d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//===----------------------------------------------------------------------===//
94d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//
104d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//  Created by Sean Callanan on 3/16/11.
114d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//
124d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan//===----------------------------------------------------------------------===//
134d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
144d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan#ifndef __MachRegisterStatesI386_h__
154d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan#define __MachRegisterStatesI386_h__
164d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
174d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan#include <inttypes.h>
184d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
194d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan#define __i386_THREAD_STATE         1
204d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan#define __i386_FLOAT_STATE          2
214d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan#define __i386_EXCEPTION_STATE      3
22e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton#define __i386_DEBUG_STATE          10
234d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan#define __i386_AVX_STATE            16
244d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
254d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanantypedef struct {
264d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __eax;
274d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __ebx;
284d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __ecx;
294d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __edx;
304d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __edi;
314d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __esi;
324d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __ebp;
334d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __esp;
344d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __ss;
354d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __eflags;
364d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __eip;
374d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __cs;
384d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __ds;
394d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __es;
404d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __fs;
414d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __gs;
424d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan} __i386_thread_state_t;
434d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
444d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanantypedef struct {
454d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __invalid   : 1;
464d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __denorm    : 1;
474d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __zdiv      : 1;
484d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __ovrfl     : 1;
494d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __undfl     : 1;
504d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __precis    : 1;
514d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __PAD1      : 2;
524d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __pc        : 2;
534d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __rc        : 2;
544d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __PAD2      : 1;
554d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __PAD3      : 3;
564d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan} __i386_fp_control_t;
574d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
584d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanantypedef struct {
594d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __invalid   : 1;
604d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __denorm    : 1;
614d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __zdiv      : 1;
624d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __ovrfl     : 1;
634d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __undfl     : 1;
644d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __precis    : 1;
654d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __stkflt    : 1;
664d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __errsumm   : 1;
674d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __c0        : 1;
684d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __c1        : 1;
694d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __c2        : 1;
704d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __tos       : 3;
714d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __c3        : 1;
724d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t    __busy      : 1;
734d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan} __i386_fp_status_t;
744d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
754d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanantypedef struct {
764d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t     __mmst_reg[10];
774d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t     __mmst_rsrv[6];
784d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan} __i386_mmst_reg;
794d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
804d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanantypedef struct {
814d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t     __xmm_reg[16];
824d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan} __i386_xmm_reg;
834d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
844d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanantypedef struct {
854d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_reserved[2];
864d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_fp_control_t     __fpu_fcw;
874d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_fp_status_t      __fpu_fsw;
884d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t                 __fpu_ftw;
894d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t                 __fpu_rsrv1;
904d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_fop;
914d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_ip;
924d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_cs;
934d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_rsrv2;
944d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_dp;
954d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_ds;
964d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_rsrv3;
974d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_mxcsr;
984d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_mxcsrmask;
994d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm0;
1004d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm1;
1014d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm2;
1024d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm3;
1034d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm4;
1044d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm5;
1054d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm6;
1064d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm7;
1074d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm0;
1084d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm1;
1094d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm2;
1104d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm3;
1114d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm4;
1124d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm5;
1134d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm6;
1144d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm7;
1154d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t                 __fpu_rsrv4[14*16];
1164d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_reserved1;
1174d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan} __i386_float_state_t;
1184d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
1194d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanantypedef struct {
1204d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_reserved[2];
1214d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_fp_control_t     __fpu_fcw;
1224d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_fp_status_t      __fpu_fsw;
1234d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t                 __fpu_ftw;
1244d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t                 __fpu_rsrv1;
1254d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_fop;
1264d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_ip;
1274d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_cs;
1284d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_rsrv2;
1294d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_dp;
1304d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_ds;
1314d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint16_t                __fpu_rsrv3;
1324d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_mxcsr;
1334d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_mxcsrmask;
1344d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm0;
1354d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm1;
1364d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm2;
1374d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm3;
1384d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm4;
1394d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm5;
1404d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm6;
1414d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_mmst_reg         __fpu_stmm7;
1424d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm0;
1434d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm1;
1444d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm2;
1454d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm3;
1464d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm4;
1474d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm5;
1484d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm6;
1494d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_xmm7;
1504d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t                 __fpu_rsrv4[14*16];
1514d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t                __fpu_reserved1;
1524d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint8_t                 __avx_reserved1[64];
1534d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_ymmh0;
1544d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_ymmh1;
1554d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_ymmh2;
1564d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_ymmh3;
1574d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_ymmh4;
1584d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_ymmh5;
1594d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_ymmh6;
1604d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    __i386_xmm_reg          __fpu_ymmh7;
1614d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan} __i386_avx_state_t;
1624d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
1634d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanantypedef struct {
1644d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __trapno;
1654d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __err;
1664d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan    uint32_t    __faultvaddr;
1674d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan} __i386_exception_state_t;
1684d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan
169e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Claytontypedef struct {
170e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton	uint32_t	__dr0;
171e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton	uint32_t	__dr1;
172e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton	uint32_t	__dr2;
173e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton	uint32_t	__dr3;
174e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton	uint32_t	__dr4;
175e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton	uint32_t	__dr5;
176e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton	uint32_t	__dr6;
177e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton	uint32_t	__dr7;
178e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton} __i386_debug_state_t;
179e39356825b86cd7484097ca4c4c9f07f9ff95e2eGreg Clayton
1804d3a89ef9d015e0cc3c12736b61d367fd98fe073Sean Callanan#endif
181