diff options
author | Roland McGrath <roland@redhat.com> | 2008-01-30 07:31:48 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 07:31:48 -0500 |
commit | 99f8ecdf4506010feda26ffe4ac0d23962947106 (patch) | |
tree | c2f7de8ef55c4dca6dc92750a479b88784181191 /include/asm-x86/processor.h | |
parent | 863aec860259f287797f886c3f373389cdafc8e3 (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>
Diffstat (limited to 'include/asm-x86/processor.h')
-rw-r--r-- | include/asm-x86/processor.h | 92 |
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 |
230 | struct 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 | |||
242 | struct 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 | ||
258 | struct i387_soft_struct { | 231 | struct 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 | |||
272 | union 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 | ||
280 | struct i387_fxsave_struct { | 243 | struct 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 | ||
267 | struct 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 | |||
294 | union i387_union { | 281 | union 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 | ||