1 #ifndef _ASMi386_SIGCONTEXT_H
2 #define _ASMi386_SIGCONTEXT_H
3 
4 /*
5  * As documented in the iBCS2 standard..
6  *
7  * The first part of "struct _fpstate" is just the normal i387
8  * hardware setup, the extra "status" word is used to save the
9  * coprocessor status word before entering the handler.
10  *
11  * Pentium III FXSR, SSE support
12  *	Gareth Hughes <gareth@valinux.com>, May 2000
13  *
14  * The FPU state data structure has had to grow to accomodate the
15  * extended FPU state required by the Streaming SIMD Extensions.
16  * There is no documented standard to accomplish this at the moment.
17  */
18 struct _fpreg {
19 	unsigned short significand[4];
20 	unsigned short exponent;
21 };
22 
23 struct _fpxreg {
24 	unsigned short significand[4];
25 	unsigned short exponent;
26 	unsigned short padding[3];
27 };
28 
29 struct _xmmreg {
30 	unsigned long element[4];
31 };
32 
33 struct _fpstate {
34 	/* Regular FPU environment */
35 	unsigned long 	cw;
36 	unsigned long	sw;
37 	unsigned long	tag;
38 	unsigned long	ipoff;
39 	unsigned long	cssel;
40 	unsigned long	dataoff;
41 	unsigned long	datasel;
42 	struct _fpreg	_st[8];
43 	unsigned short	status;
44 	unsigned short	magic;		/* 0xffff = regular FPU data only */
45 
46 	/* FXSR FPU environment */
47 	unsigned long	_fxsr_env[6];	/* FXSR FPU env is ignored */
48 	unsigned long	mxcsr;
49 	unsigned long	reserved;
50 	struct _fpxreg	_fxsr_st[8];	/* FXSR FPU reg data is ignored */
51 	struct _xmmreg	_xmm[8];
52 	unsigned long	padding[56];
53 };
54 
55 #define X86_FXSR_MAGIC		0x0000
56 
57 struct sigcontext {
58 	unsigned short gs, __gsh;
59 	unsigned short fs, __fsh;
60 	unsigned short es, __esh;
61 	unsigned short ds, __dsh;
62 	unsigned long edi;
63 	unsigned long esi;
64 	unsigned long ebp;
65 	unsigned long esp;
66 	unsigned long ebx;
67 	unsigned long edx;
68 	unsigned long ecx;
69 	unsigned long eax;
70 	unsigned long trapno;
71 	unsigned long err;
72 	unsigned long eip;
73 	unsigned short cs, __csh;
74 	unsigned long eflags;
75 	unsigned long esp_at_signal;
76 	unsigned short ss, __ssh;
77 	struct _fpstate * fpstate;
78 	unsigned long oldmask;
79 	unsigned long cr2;
80 };
81 
82 
83 #endif
84