aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2008-01-30 07:31:48 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:31:48 -0500
commit99f8ecdf4506010feda26ffe4ac0d23962947106 (patch)
treec2f7de8ef55c4dca6dc92750a479b88784181191
parent863aec860259f287797f886c3f373389cdafc8e3 (diff)
x86: x86 i387 unify structs
The i387_fxsave_struct formats really have the same layout on 32 and 64, with only some slightly different use of a few fields. The i387_fsave_struct and i387_soft_struct formats are never used by 64-bit kernels, but it doesn't hurt to have the unused types in the union and cuts down on the amount of #ifdef hair required throughout the i387 code. Signed-off-by: Roland McGrath <roland@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--include/asm-x86/processor.h92
1 files changed, 42 insertions, 50 deletions
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h
index 80c50020ef60..ea222cfe7b00 100644
--- a/include/asm-x86/processor.h
+++ b/include/asm-x86/processor.h
@@ -226,64 +226,37 @@ struct orig_ist {
226 unsigned long ist[7]; 226 unsigned long ist[7];
227}; 227};
228 228
229#ifdef CONFIG_X86_32 229#define MXCSR_DEFAULT 0x1f80
230struct i387_fsave_struct {
231 long cwd;
232 long swd;
233 long twd;
234 long fip;
235 long fcs;
236 long foo;
237 long fos;
238 long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */
239 long status; /* software status information */
240};
241
242struct i387_fxsave_struct {
243 unsigned short cwd;
244 unsigned short swd;
245 unsigned short twd;
246 unsigned short fop;
247 long fip;
248 long fcs;
249 long foo;
250 long fos;
251 long mxcsr;
252 long mxcsr_mask;
253 long st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
254 long xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */
255 long padding[56];
256} __attribute__((aligned(16)));
257 230
258struct i387_soft_struct { 231struct i387_fsave_struct {
259 long cwd; 232 u32 cwd;
260 long swd; 233 u32 swd;
261 long twd; 234 u32 twd;
262 long fip; 235 u32 fip;
263 long fcs; 236 u32 fcs;
264 long foo; 237 u32 foo;
265 long fos; 238 u32 fos;
266 long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ 239 u32 st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */
267 unsigned char ftop, changed, lookahead, no_update, rm, alimit; 240 u32 status; /* software status information */
268 struct info *info;
269 unsigned long entry_eip;
270};
271
272union i387_union {
273 struct i387_fsave_struct fsave;
274 struct i387_fxsave_struct fxsave;
275 struct i387_soft_struct soft;
276}; 241};
277 242
278# include "processor_32.h"
279#else
280struct i387_fxsave_struct { 243struct i387_fxsave_struct {
281 u16 cwd; 244 u16 cwd;
282 u16 swd; 245 u16 swd;
283 u16 twd; 246 u16 twd;
284 u16 fop; 247 u16 fop;
285 u64 rip; 248 union {
286 u64 rdp; 249 struct {
250 u64 rip;
251 u64 rdp;
252 };
253 struct {
254 u32 fip;
255 u32 fcs;
256 u32 foo;
257 u32 fos;
258 };
259 };
287 u32 mxcsr; 260 u32 mxcsr;
288 u32 mxcsr_mask; 261 u32 mxcsr_mask;
289 u32 st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ 262 u32 st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
@@ -291,10 +264,29 @@ struct i387_fxsave_struct {
291 u32 padding[24]; 264 u32 padding[24];
292} __attribute__((aligned(16))); 265} __attribute__((aligned(16)));
293 266
267struct i387_soft_struct {
268 u32 cwd;
269 u32 swd;
270 u32 twd;
271 u32 fip;
272 u32 fcs;
273 u32 foo;
274 u32 fos;
275 u32 st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */
276 u8 ftop, changed, lookahead, no_update, rm, alimit;
277 struct info *info;
278 u32 entry_eip;
279};
280
294union i387_union { 281union i387_union {
282 struct i387_fsave_struct fsave;
295 struct i387_fxsave_struct fxsave; 283 struct i387_fxsave_struct fxsave;
284 struct i387_soft_struct soft;
296}; 285};
297 286
287#ifdef CONFIG_X86_32
288# include "processor_32.h"
289#else
298# include "processor_64.h" 290# include "processor_64.h"
299#endif 291#endif
300 292