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