]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/i387-tdep.h
PR16867, linking object with separate debug file
[thirdparty/binutils-gdb.git] / gdb / i387-tdep.h
CommitLineData
e750d25e 1/* Target-dependent code for the i387.
2de139ba 2
ecd75fc8 3 Copyright (C) 2000-2014 Free Software Foundation, Inc.
b2450fc5
MK
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
b2450fc5
MK
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
b2450fc5 19
e750d25e
JT
20#ifndef I387_TDEP_H
21#define I387_TDEP_H
b2450fc5 22
da3331ec 23struct gdbarch;
da3331ec 24struct frame_info;
41d041d6 25struct regcache;
d532c08f 26struct type;
41d041d6 27struct ui_file;
da3331ec 28
90884b2b
L
29/* Number of i387 floating point registers. */
30#define I387_NUM_REGS 16
31
20a6ec49
MD
32#define I387_ST0_REGNUM(tdep) ((tdep)->st0_regnum)
33#define I387_NUM_XMM_REGS(tdep) ((tdep)->num_xmm_regs)
34#define I387_MM0_REGNUM(tdep) ((tdep)->mm0_regnum)
31aeac78
L
35#define I387_NUM_YMM_REGS(tdep) ((tdep)->num_ymm_regs)
36#define I387_YMM0H_REGNUM(tdep) ((tdep)->ymm0h_regnum)
1dbcd68c
WT
37#define I387_BND0R_REGNUM(tdep) ((tdep)->bnd0r_regnum)
38#define I387_BNDCFGU_REGNUM(tdep) ((tdep)->bndcfgu_regnum)
39
40/* Set of constants used for 32 and 64-bit. */
41#define I387_NUM_MPX_REGS 6
42#define I387_NUM_BND_REGS 4
43#define I387_NUM_MPX_CTRL_REGS 2
20a6ec49
MD
44
45#define I387_FCTRL_REGNUM(tdep) (I387_ST0_REGNUM (tdep) + 8)
46#define I387_FSTAT_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + 1)
47#define I387_FTAG_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + 2)
48#define I387_FISEG_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + 3)
49#define I387_FIOFF_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + 4)
50#define I387_FOSEG_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + 5)
51#define I387_FOOFF_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + 6)
52#define I387_FOP_REGNUM(tdep) (I387_FCTRL_REGNUM (tdep) + 7)
53#define I387_XMM0_REGNUM(tdep) (I387_ST0_REGNUM (tdep) + 16)
54#define I387_MXCSR_REGNUM(tdep) \
55 (I387_XMM0_REGNUM (tdep) + I387_NUM_XMM_REGS (tdep))
31aeac78
L
56#define I387_YMMENDH_REGNUM(tdep) \
57 (I387_YMM0H_REGNUM (tdep) + I387_NUM_YMM_REGS (tdep))
1dbcd68c
WT
58#define I387_MPXEND_REGNUM(tdep) \
59 (I387_BND0R_REGNUM (tdep) + I387_NUM_MPX_REGS)
5716833c 60
61113f8b
MK
61/* Print out the i387 floating point state. */
62
63extern void i387_print_float_info (struct gdbarch *gdbarch,
64 struct ui_file *file,
8e186fd6
AC
65 struct frame_info *frame,
66 const char *args);
61113f8b 67
83acabca
DJ
68/* Return nonzero if a value of type TYPE stored in register REGNUM
69 needs any special handling. */
70
0abe36f5
MD
71extern int i387_convert_register_p (struct gdbarch *gdbarch, int regnum,
72 struct type *type);
83acabca 73
d532c08f
MK
74/* Read a value of type TYPE from register REGNUM in frame FRAME, and
75 return its contents in TO. */
76
8dccd430
PA
77extern int i387_register_to_value (struct frame_info *frame, int regnum,
78 struct type *type, gdb_byte *to,
79 int *optimizedp, int *unavailablep);
d532c08f
MK
80
81/* Write the contents FROM of a value of type TYPE into register
82 REGNUM in frame FRAME. */
83
84extern void i387_value_to_register (struct frame_info *frame, int regnum,
42835c2b 85 struct type *type, const gdb_byte *from);
2de139ba
MK
86\f
87
88/* Size of the memory area use by the 'fsave' and 'fxsave'
89 instructions. */
90#define I387_SIZEOF_FSAVE 108
91#define I387_SIZEOF_FXSAVE 512
d532c08f 92
41d041d6
MK
93/* Fill register REGNUM in REGCACHE with the appropriate value from
94 *FSAVE. This function masks off any of the reserved bits in
95 *FSAVE. */
f31e928c 96
41d041d6
MK
97extern void i387_supply_fsave (struct regcache *regcache, int regnum,
98 const void *fsave);
b2450fc5 99
63b6c53f
MK
100/* Fill register REGNUM (if it is a floating-point register) in *FSAVE
101 with the value from REGCACHE. If REGNUM is -1, do this for all
102 registers. This function doesn't touch any of the reserved bits in
103 *FSAVE. */
104
105extern void i387_collect_fsave (const struct regcache *regcache, int regnum,
106 void *fsave);
107
41d041d6 108/* Fill register REGNUM in REGCACHE with the appropriate
ed504bdf
MK
109 floating-point or SSE register value from *FXSAVE. This function
110 masks off any of the reserved bits in *FXSAVE. */
e2890f08 111
41d041d6
MK
112extern void i387_supply_fxsave (struct regcache *regcache, int regnum,
113 const void *fxsave);
e2890f08 114
31aeac78
L
115/* Similar to i387_supply_fxsave, but use XSAVE extended state. */
116
117extern void i387_supply_xsave (struct regcache *regcache, int regnum,
118 const void *xsave);
119
80571bff
MK
120/* Fill register REGNUM (if it is a floating-point or SSE register) in
121 *FXSAVE with the value from REGCACHE. If REGNUM is -1, do this for
122 all registers. This function doesn't touch any of the reserved
123 bits in *FXSAVE. */
124
125extern void i387_collect_fxsave (const struct regcache *regcache, int regnum,
126 void *fxsave);
127
31aeac78
L
128/* Similar to i387_collect_fxsave, but use XSAVE extended state. */
129
130extern void i387_collect_xsave (const struct regcache *regcache,
131 int regnum, void *xsave, int gcore);
132
efb1c01c
MK
133/* Prepare the FPU stack in REGCACHE for a function return. */
134
135extern void i387_return_value (struct gdbarch *gdbarch,
136 struct regcache *regcache);
137
e750d25e 138#endif /* i387-tdep.h */