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