1
2
3
4
5
6
7
8
9
10 #ifndef _FPU_SYSTEM_H
11 #define _FPU_SYSTEM_H
12
13
14
15 #include <linux/sched.h>
16 #include <linux/kernel.h>
17 #include <linux/mm.h>
18
19
20
21 #define SETUP_DATA_AREA(arg) FPU_info = (struct info *) &arg
22
23 #define LDT_DESCRIPTOR(s) (current->ldt[(s) >> 3])
24 #define SEG_D_SIZE(x) ((x).b & (3 << 21))
25 #define SEG_G_BIT(x) ((x).b & (1 << 23))
26 #define SEG_GRANULARITY(x) (((x).b & (1 << 23)) ? 4096 : 1)
27 #define SEG_286_MODE(x) ((x).b & ( 0xff000000 | 0xf0000 | (1 << 23)))
28 #define SEG_BASE_ADDR(s) (((s).b & 0xff000000) \
29 | (((s).b & 0xff) << 16) | ((s).a >> 16))
30 #define SEG_LIMIT(s) (((s).b & 0xff0000) | ((s).a & 0xffff))
31 #define SEG_EXECUTE_ONLY(s) (((s).b & ((1 << 11) | (1 << 9))) == (1 << 11))
32 #define SEG_WRITE_PERM(s) (((s).b & ((1 << 11) | (1 << 9))) == (1 << 9))
33 #define SEG_EXPAND_DOWN(s) (((s).b & ((1 << 11) | (1 << 10))) \
34 == (1 << 10))
35
36 #define I387 (current->tss.i387)
37 #define FPU_info (I387.soft.info)
38
39 #define FPU_CS (*(unsigned short *) &(FPU_info->___cs))
40 #define FPU_SS (*(unsigned short *) &(FPU_info->___ss))
41 #define FPU_DS (*(unsigned short *) &(FPU_info->___ds))
42 #define FPU_EAX (FPU_info->___eax)
43 #define FPU_EFLAGS (FPU_info->___eflags)
44 #define FPU_EIP (FPU_info->___eip)
45 #define FPU_ORIG_EIP (FPU_info->___orig_eip)
46
47 #define FPU_lookahead (I387.soft.lookahead)
48
49
50
51 #define no_ip_update (((char *)&(I387.soft.twd))[0])
52 #define FPU_rm (((unsigned char *)&(I387.soft.twd))[1])
53
54
55
56 #define access_limit (((unsigned char *)&(I387.soft.twd))[2])
57
58 #define partial_status (I387.soft.swd)
59 #define control_word (I387.soft.cwd)
60 #define regs (I387.soft.regs)
61 #define top (I387.soft.top)
62
63 #define instruction_address (*(struct address *)&I387.soft.fip)
64 #define operand_address (*(struct address *)&I387.soft.foo)
65
66 #define FPU_verify_area(x,y,z) if ( verify_area(x,y,z) ) \
67 math_abort(FPU_info,SIGSEGV)
68
69 #undef FPU_IGNORE_CODE_SEGV
70 #ifdef FPU_IGNORE_CODE_SEGV
71
72
73
74
75 #define FPU_code_verify_area(z)
76 #else
77
78
79
80 #define FPU_code_verify_area(z) FPU_verify_area(VERIFY_READ,(void *)FPU_EIP,z)
81 #endif
82
83 #endif