1af170c50SDavid Howells #ifndef _ASM_X86_SIGCONTEXT32_H
2af170c50SDavid Howells #define _ASM_X86_SIGCONTEXT32_H
3af170c50SDavid Howells 
4c3f4986fSIngo Molnar /* Signal context definitions for compat 32-bit programs: */
5c3f4986fSIngo Molnar 
6af170c50SDavid Howells #include <linux/types.h>
7af170c50SDavid Howells 
8b76cb6c8SIngo Molnar #include <asm/sigcontext.h>
9b76cb6c8SIngo Molnar 
10c3f4986fSIngo Molnar /* 10-byte legacy floating point register: */
11af170c50SDavid Howells struct _fpreg {
12af170c50SDavid Howells 	unsigned short			significand[4];
13af170c50SDavid Howells 	unsigned short			exponent;
14af170c50SDavid Howells };
15af170c50SDavid Howells 
16c3f4986fSIngo Molnar /* 16-byte floating point register: */
17af170c50SDavid Howells struct _fpxreg {
18af170c50SDavid Howells 	unsigned short			significand[4];
19af170c50SDavid Howells 	unsigned short			exponent;
20af170c50SDavid Howells 	unsigned short			padding[3];
21af170c50SDavid Howells };
22af170c50SDavid Howells 
23c3f4986fSIngo Molnar /* 16-byte XMM vector register: */
24af170c50SDavid Howells struct _xmmreg {
25af170c50SDavid Howells 	__u32	element[4];
26af170c50SDavid Howells };
27af170c50SDavid Howells 
28c3f4986fSIngo Molnar #define X86_FXSR_MAGIC			0x0000
29c3f4986fSIngo Molnar 
30c3f4986fSIngo Molnar /* FXSAVE frame: FSAVE frame with extensions */
31af170c50SDavid Howells struct _fpstate_ia32 {
32c3f4986fSIngo Molnar 	/* Regular FPU environment: */
33af170c50SDavid Howells 	__u32				cw;
34af170c50SDavid Howells 	__u32				sw;
35c3f4986fSIngo Molnar 	__u32				tag;		/* Not compatible with the 64-bit frame */
36af170c50SDavid Howells 	__u32				ipoff;
37af170c50SDavid Howells 	__u32				cssel;
38af170c50SDavid Howells 	__u32				dataoff;
39af170c50SDavid Howells 	__u32				datasel;
40af170c50SDavid Howells 	struct _fpreg			_st[8];
41af170c50SDavid Howells 	unsigned short			status;
42c3f4986fSIngo Molnar 	unsigned short			magic;		/* 0xffff: regular FPU data only */
43c3f4986fSIngo Molnar 							/* 0x0000: FXSR data */
44af170c50SDavid Howells 
45c3f4986fSIngo Molnar 	/* Extended FXSR FPU environment: */
46af170c50SDavid Howells 	__u32				_fxsr_env[6];
47af170c50SDavid Howells 	__u32				mxcsr;
48af170c50SDavid Howells 	__u32				reserved;
49af170c50SDavid Howells 	struct _fpxreg			_fxsr_st[8];
50c3f4986fSIngo Molnar 	struct _xmmreg			_xmm[8];	/* The first  8 XMM registers */
51c3f4986fSIngo Molnar 	__u32				padding[44];	/* The second 8 XMM registers plus padding */
52af170c50SDavid Howells 	union {
53af170c50SDavid Howells 		__u32			padding2[12];
54c3f4986fSIngo Molnar 		/* Might encode xstate extensions, see asm/sigcontext.h: */
55af170c50SDavid Howells 		struct _fpx_sw_bytes	sw_reserved;
56af170c50SDavid Howells 	};
57af170c50SDavid Howells };
58af170c50SDavid Howells 
59c3f4986fSIngo Molnar /* 32-bit compat sigcontext: */
60af170c50SDavid Howells struct sigcontext_ia32 {
61af170c50SDavid Howells        unsigned short			gs, __gsh;
62af170c50SDavid Howells        unsigned short			fs, __fsh;
63af170c50SDavid Howells        unsigned short			es, __esh;
64af170c50SDavid Howells        unsigned short			ds, __dsh;
65af170c50SDavid Howells        unsigned int			di;
66af170c50SDavid Howells        unsigned int			si;
67af170c50SDavid Howells        unsigned int			bp;
68af170c50SDavid Howells        unsigned int			sp;
69af170c50SDavid Howells        unsigned int			bx;
70af170c50SDavid Howells        unsigned int			dx;
71af170c50SDavid Howells        unsigned int			cx;
72af170c50SDavid Howells        unsigned int			ax;
73af170c50SDavid Howells        unsigned int			trapno;
74af170c50SDavid Howells        unsigned int			err;
75af170c50SDavid Howells        unsigned int			ip;
76af170c50SDavid Howells        unsigned short			cs, __csh;
77af170c50SDavid Howells        unsigned int			flags;
78af170c50SDavid Howells        unsigned int			sp_at_signal;
79af170c50SDavid Howells        unsigned short			ss, __ssh;
80c3f4986fSIngo Molnar        unsigned int			fpstate;	/* Pointer to 'struct _fpstate_ia32' */
81af170c50SDavid Howells        unsigned int			oldmask;
82af170c50SDavid Howells        unsigned int			cr2;
83af170c50SDavid Howells };
84af170c50SDavid Howells 
85af170c50SDavid Howells #endif /* _ASM_X86_SIGCONTEXT32_H */
86