31#include "gdbsupport/x86-xstate.h"
37 const gdb_byte *raw,
struct ui_file *file)
52 const gdb_byte *raw,
struct ui_file *file)
56 unsigned int exponent;
57 unsigned long fraction[2];
60 integer = raw[7] & 0x80;
61 exponent = (((raw[9] & 0x7f) << 8) | raw[8]);
62 fraction[0] = ((raw[3] << 24) | (raw[2] << 16) | (raw[1] << 8) | raw[0]);
63 fraction[1] = (((raw[7] & 0x7f) << 24) | (raw[6] << 16)
64 | (raw[5] << 8) | raw[4]);
66 if (exponent == 0x7fff && integer)
68 if (fraction[0] == 0x00000000 && fraction[1] == 0x00000000)
70 gdb_printf (file,
" %cInf", (sign ?
'-' :
'+'));
71 else if (sign && fraction[0] == 0x00000000 && fraction[1] == 0x40000000)
73 gdb_puts (
" Real Indefinite (QNaN)", file);
74 else if (fraction[1] & 0x40000000)
81 else if (exponent < 0x7fff && exponent > 0x0000 && integer)
84 else if (exponent == 0x0000)
92 else if (fraction[0] || fraction[1])
111 gdb_printf (file,
"%s\n", _(
"<unavailable>"));
136 " TOP: %d\n", ((
status >> 11) & 7));
144 unsigned int control,
struct ui_file *file)
149 gdb_printf (file,
"%s\n", _(
"<unavailable>"));
153 gdb_printf (file,
"%s", hex_string_custom (control, 4));
155 gdb_printf (file,
" %s", (control & 0x0001) ?
"IM" :
" ");
156 gdb_printf (file,
" %s", (control & 0x0002) ?
"DM" :
" ");
157 gdb_printf (file,
" %s", (control & 0x0004) ?
"ZM" :
" ");
158 gdb_printf (file,
" %s", (control & 0x0008) ?
"OM" :
" ");
159 gdb_printf (file,
" %s", (control & 0x0010) ?
"UM" :
" ");
160 gdb_printf (file,
" %s", (control & 0x0020) ?
"PM" :
" ");
165 switch ((control >> 8) & 3)
168 gdb_puts (
"Single Precision (24-bits)\n", file);
174 gdb_puts (
"Double Precision (53-bits)\n", file);
177 gdb_puts (
"Extended Precision (64-bits)\n", file);
182 switch ((control >> 10) & 3)
185 gdb_puts (
"Round to nearest\n", file);
194 gdb_puts (
"Round toward zero\n", file);
248 top = ((fstat >> 11) & 7);
250 for (fpreg = 7; fpreg >= 0; fpreg--)
252 struct value *regval;
257 gdb_printf (file,
"%sR%d: ", fpreg == top ?
"=>" :
" ", fpreg);
261 tag = (ftag >> (fpreg * 2)) & 3;
287 const gdb_byte *raw = regval->
contents ().data ();
290 for (i = 9; i >= 0; i--)
293 if (tag != -1 && tag != 3)
307 ftag_p ? hex_string_custom (ftag, 4) : _(
"<unavailable>"));
309 fiseg_p ? hex_string_custom (fiseg, 2) : _(
"<unavailable>"));
311 fioff_p ? hex_string_custom (fioff, 8) : _(
"<unavailable>"));
313 foseg_p ? hex_string_custom (foseg, 2) : _(
"<unavailable>"));
315 fooff_p ? hex_string_custom (fooff, 8) : _(
"<unavailable>"));
318 ? (hex_string_custom (fop ? (fop | 0xd800) : 0, 4))
319 : _(
"<unavailable>"));
350 int *optimizedp,
int *unavailablep)
360 warning (_(
"Cannot convert floating-point register value "
361 "to non-floating-point type."));
362 *optimizedp = *unavailablep = 0;
368 gdb::make_array_view (from,
371 optimizedp, unavailablep))
375 *optimizedp = *unavailablep = 0;
384 struct type *
type,
const gdb_byte *from)
394 warning (_(
"Cannot convert non-floating-point type "
395 "to floating-point register value."));
431#define FSAVE_ADDR(tdep, fsave, regnum) \
432 (fsave + fsave_offset[regnum - I387_ST0_REGNUM (tdep)])
445 const gdb_byte *regs = (
const gdb_byte *) fsave;
469 val[1] &= ((1 << 3) - 1);
499 gdb_byte *regs = (gdb_byte *) fsave;
520 buf[1] &= ((1 << 3) - 1);
521 buf[1] |= ((
FSAVE_ADDR (tdep, regs, i))[1] & ~((1 << 3) - 1));
571#define FXSAVE_ADDR(tdep, fxsave, regnum) \
572 (fxsave + fxsave_offset[regnum - I387_ST0_REGNUM (tdep)])
579#define FXSAVE_MXCSR_ADDR(fxsave) (fxsave + 24)
581static int i387_tag (
const gdb_byte *raw);
593 const gdb_byte *regs = (
const gdb_byte *) fxsave;
618 val[1] &= ((1 << 3) - 1);
625 unsigned long ftag = 0;
633 for (fpreg = 7; fpreg >= 0; fpreg--)
637 if (val[0] & (1 << fpreg))
639 int thisreg = (fpreg + 8 - top) % 8
646 ftag |= tag << (2 * fpreg);
648 val[0] = ftag & 0xff;
649 val[1] = (ftag >> 8) & 0xff;
677 gdb_byte *regs = (gdb_byte *) fxsave;
699 buf[1] &= ((1 << 3) - 1);
700 buf[1] |= ((
FXSAVE_ADDR (tdep, regs, i))[1] & ~((1 << 3) - 1));
709 ftag = (buf[1] << 8) | buf[0];
713 for (fpreg = 7; fpreg >= 0; fpreg--)
715 int tag = (ftag >> (fpreg * 2)) & 3;
718 buf[0] |= (1 << fpreg);
733#define XSAVE_XSTATE_BV_ADDR(xsave) (xsave + 512)
759#define XSAVE_AVXH_ADDR(tdep, xsave, regnum) \
760 (xsave + (tdep)->xsave_layout.avx_offset \
761 + xsave_avxh_offset[regnum - I387_YMM0H_REGNUM (tdep)])
787#define XSAVE_YMM_AVX512_ADDR(tdep, xsave, regnum) \
788 (xsave + (tdep)->xsave_layout.zmm_offset \
789 + xsave_ymm_avx512_offset[regnum - I387_YMM16H_REGNUM (tdep)])
815#define XSAVE_XMM_AVX512_ADDR(tdep, xsave, regnum) \
816 (xsave + (tdep)->xsave_layout.zmm_offset \
817 + xsave_xmm_avx512_offset[regnum - I387_XMM16_REGNUM (tdep)])
830#define XSAVE_BNDREGS_ADDR(tdep, xsave, regnum) \
831 (xsave + (tdep)->xsave_layout.bndregs_offset \
832 + xsave_bndregs_offset[regnum - I387_BND0R_REGNUM (tdep)])
839#define XSAVE_BNDCFG_ADDR(tdep, xsave, regnum) \
840 (xsave + (tdep)->xsave_layout.bndcfg_offset \
841 + xsave_bndcfg_offset[regnum - I387_BNDCFGU_REGNUM (tdep)])
859#define XSAVE_AVX512_K_ADDR(tdep, xsave, regnum) \
860 (xsave + (tdep)->xsave_layout.k_offset \
861 + xsave_avx512_k_offset[regnum - I387_K0_REGNUM (tdep)])
888#define XSAVE_AVX512_ZMM0_H_ADDR(tdep, xsave, regnum) \
889 (xsave + (tdep)->xsave_layout.zmm_h_offset \
890 + xsave_avx512_zmm0_h_offset[regnum - I387_ZMM0H_REGNUM (tdep)])
916#define XSAVE_AVX512_ZMM16_H_ADDR(tdep, xsave, regnum) \
917 (xsave + (tdep)->xsave_layout.zmm_offset \
918 + xsave_avx512_zmm16_h_offset[regnum - I387_ZMM16H_REGNUM (tdep)])
930#define XSAVE_PKEYS_ADDR(tdep, xsave, regnum) \
931 (xsave + (tdep)->xsave_layout.pkru_offset \
932 + xsave_pkeys_offset[regnum - I387_PKRU_REGNUM (tdep)])
939 x86_xsave_layout &layout)
941 if (HAS_PKRU (xcr0) && xsave_size == 2696)
944 layout.avx_offset = 576;
945 layout.bndregs_offset = 960;
946 layout.bndcfg_offset = 1024;
947 layout.k_offset = 1088;
948 layout.zmm_h_offset = 1152;
949 layout.zmm_offset = 1664;
950 layout.pkru_offset = 2688;
952 else if (HAS_PKRU (xcr0) && xsave_size == 2440)
955 layout.avx_offset = 576;
956 layout.k_offset = 832;
957 layout.zmm_h_offset = 896;
958 layout.zmm_offset = 1408;
959 layout.pkru_offset = 2432;
961 else if (HAS_AVX512 (xcr0) && xsave_size == 2688)
964 layout.avx_offset = 576;
965 layout.bndregs_offset = 960;
966 layout.bndcfg_offset = 1024;
967 layout.k_offset = 1088;
968 layout.zmm_h_offset = 1152;
969 layout.zmm_offset = 1664;
971 else if (HAS_MPX (xcr0) && xsave_size == 1088)
974 layout.avx_offset = 576;
975 layout.bndregs_offset = 960;
976 layout.bndcfg_offset = 1024;
978 else if (HAS_AVX (xcr0) && xsave_size == 832)
981 layout.avx_offset = 576;
986 layout.sizeof_xsave = xsave_size;
995 x86_xsave_layout layout;
1000 layout.avx_offset = 576;
1001 layout.bndregs_offset = 960;
1002 layout.bndcfg_offset = 1024;
1003 layout.k_offset = 1088;
1004 layout.zmm_h_offset = 1152;
1005 layout.zmm_offset = 1664;
1006 layout.pkru_offset = 2688;
1007 layout.sizeof_xsave = 2696;
1009 else if (HAS_AVX512 (xcr0))
1012 layout.avx_offset = 576;
1013 layout.bndregs_offset = 960;
1014 layout.bndcfg_offset = 1024;
1015 layout.k_offset = 1088;
1016 layout.zmm_h_offset = 1152;
1017 layout.zmm_offset = 1664;
1018 layout.sizeof_xsave = 2688;
1020 else if (HAS_MPX (xcr0))
1023 layout.avx_offset = 576;
1024 layout.bndregs_offset = 960;
1025 layout.bndcfg_offset = 1024;
1026 layout.sizeof_xsave = 1088;
1028 else if (HAS_AVX (xcr0))
1031 layout.avx_offset = 576;
1032 layout.sizeof_xsave = 832;
1045 const gdb_byte *regs = (
const gdb_byte *) xsave;
1053 ULONGEST clear_bv = (~(xstate_bv)) & tdep->
xcr0;
1067 const gdb_byte *regs = (
const gdb_byte *) xsave;
1086 avx512_zmm0_h = 0x40,
1087 avx512_zmm16_h = 0x80,
1088 avx512_ymmh_avx512 = 0x100,
1089 avx512_xmm_avx512 = 0x200,
1091 all = x87 | sse | avxh | bndregs | bndcfg | avx512_k | avx512_zmm0_h
1092 | avx512_zmm16_h | avx512_ymmh_avx512 | avx512_xmm_avx512 | pkeys
1095 gdb_assert (regs != NULL);
1106 regclass = avx512_zmm0_h;
1109 regclass = avx512_zmm16_h;
1112 regclass = avx512_k;
1115 regclass = avx512_ymmh_avx512;
1118 regclass = avx512_xmm_avx512;
1154 if ((clear_bv & X86_XSTATE_PKRU))
1161 if ((clear_bv & X86_XSTATE_ZMM_H))
1168 case avx512_zmm16_h:
1169 if ((clear_bv & X86_XSTATE_ZMM))
1177 if ((clear_bv & X86_XSTATE_K))
1183 case avx512_ymmh_avx512:
1184 if ((clear_bv & X86_XSTATE_ZMM))
1191 case avx512_xmm_avx512:
1192 if ((clear_bv & X86_XSTATE_ZMM))
1200 if ((clear_bv & X86_XSTATE_AVX))
1207 if ((clear_bv & X86_XSTATE_BNDCFG))
1214 if ((clear_bv & X86_XSTATE_BNDREGS))
1221 if ((clear_bv & X86_XSTATE_SSE))
1228 if ((clear_bv & X86_XSTATE_X87))
1236 if ((tdep->
xcr0 & X86_XSTATE_PKRU))
1238 if ((clear_bv & X86_XSTATE_PKRU))
1255 if ((tdep->
xcr0 & X86_XSTATE_ZMM_H))
1257 if ((clear_bv & X86_XSTATE_ZMM_H))
1271 if ((tdep->
xcr0 & X86_XSTATE_K))
1273 if ((clear_bv & X86_XSTATE_K))
1290 if ((tdep->
xcr0 & X86_XSTATE_ZMM))
1292 if ((clear_bv & X86_XSTATE_ZMM))
1323 if ((tdep->
xcr0 & X86_XSTATE_AVX))
1325 if ((clear_bv & X86_XSTATE_AVX))
1342 if ((tdep->
xcr0 & X86_XSTATE_BNDREGS))
1344 if (clear_bv & X86_XSTATE_BNDREGS)
1359 if ((tdep->
xcr0 & X86_XSTATE_BNDCFG))
1361 if (clear_bv & X86_XSTATE_BNDCFG)
1376 if ((tdep->
xcr0 & X86_XSTATE_SSE))
1378 if ((clear_bv & X86_XSTATE_SSE))
1394 if ((tdep->
xcr0 & X86_XSTATE_X87))
1396 if ((clear_bv & X86_XSTATE_X87))
1418 if (clear_bv & X86_XSTATE_X87)
1425 I387_FCTRL_INIT_VAL);
1446 val[2] = val[3] = 0;
1448 val[1] &= ((1 << 3) - 1);
1455 unsigned long ftag = 0;
1463 for (fpreg = 7; fpreg >= 0; fpreg--)
1467 if (val[0] & (1 << fpreg))
1469 int thisreg = (fpreg + 8 - top) % 8
1476 ftag |= tag << (2 * fpreg);
1478 val[0] = ftag & 0xff;
1479 val[1] = (ftag >> 8) & 0xff;
1491 if ((clear_bv & (X86_XSTATE_AVX | X86_XSTATE_SSE))
1492 == (X86_XSTATE_AVX | X86_XSTATE_SSE))
1509 void *xsave,
int gcore)
1514 gdb_byte *p, *regs = (gdb_byte *) xsave;
1516 ULONGEST initial_xstate_bv, clear_bv, xstate_bv = 0;
1523 x87_ctrl_or_mxcsr = 0x1,
1530 avx512_zmm0_h = 0x80,
1531 avx512_zmm16_h = 0x100,
1532 avx512_ymmh_avx512 = 0x200,
1533 avx512_xmm_avx512 = 0x400,
1535 all = x87 | sse | avxh | bndregs | bndcfg | avx512_k | avx512_zmm0_h
1536 | avx512_zmm16_h | avx512_ymmh_avx512 | avx512_xmm_avx512 | pkeys
1549 regclass = avx512_zmm0_h;
1552 regclass = avx512_zmm16_h;
1555 regclass = avx512_k;
1558 regclass = avx512_ymmh_avx512;
1561 regclass = avx512_xmm_avx512;
1580 regclass = x87_ctrl_or_mxcsr;
1582 internal_error (_(
"invalid i387 regnum %d"),
regnum);
1598 clear_bv = (~(initial_xstate_bv)) & tdep->
xcr0;
1614 if ((clear_bv & X86_XSTATE_PKRU))
1619 if ((clear_bv & X86_XSTATE_BNDREGS))
1624 if ((clear_bv & X86_XSTATE_BNDCFG))
1629 if ((clear_bv & X86_XSTATE_ZMM_H))
1633 if ((clear_bv & X86_XSTATE_K))
1638 if ((clear_bv & X86_XSTATE_ZMM))
1651 if ((clear_bv & X86_XSTATE_AVX))
1656 if ((clear_bv & X86_XSTATE_SSE))
1664 if ((clear_bv & (X86_XSTATE_AVX | X86_XSTATE_SSE))
1665 == (X86_XSTATE_AVX | X86_XSTATE_SSE))
1667 I387_MXCSR_INIT_VAL);
1669 if ((clear_bv & X86_XSTATE_X87))
1680 byte_order, I387_FCTRL_INIT_VAL);
1688 if (regclass ==
all)
1691 if ((tdep->
xcr0 & X86_XSTATE_PKRU))
1697 if (memcmp (raw, p, 4) != 0)
1699 xstate_bv |= X86_XSTATE_PKRU;
1705 if ((tdep->
xcr0 & X86_XSTATE_ZMM))
1711 if (memcmp (raw, p, 32) != 0)
1713 xstate_bv |= X86_XSTATE_ZMM;
1714 memcpy (p, raw, 32);
1718 if ((tdep->
xcr0 & X86_XSTATE_ZMM_H))
1723 if (memcmp (raw, p, 32) != 0)
1725 xstate_bv |= X86_XSTATE_ZMM_H;
1726 memcpy (p, raw, 32);
1731 if ((tdep->
xcr0 & X86_XSTATE_K))
1737 if (memcmp (raw, p, 8) != 0)
1739 xstate_bv |= X86_XSTATE_K;
1745 if ((tdep->
xcr0 & X86_XSTATE_ZMM))
1752 if (memcmp (raw, p, 16) != 0)
1754 xstate_bv |= X86_XSTATE_ZMM;
1755 memcpy (p, raw, 16);
1763 if (memcmp (raw, p, 16) != 0)
1765 xstate_bv |= X86_XSTATE_ZMM;
1766 memcpy (p, raw, 16);
1772 if ((tdep->
xcr0 & X86_XSTATE_BNDREGS))
1778 if (memcmp (raw, p, 16))
1780 xstate_bv |= X86_XSTATE_BNDREGS;
1781 memcpy (p, raw, 16);
1786 if ((tdep->
xcr0 & X86_XSTATE_BNDCFG))
1792 if (memcmp (raw, p, 8))
1794 xstate_bv |= X86_XSTATE_BNDCFG;
1800 if ((tdep->
xcr0 & X86_XSTATE_AVX))
1806 if (memcmp (raw, p, 16))
1808 xstate_bv |= X86_XSTATE_AVX;
1809 memcpy (p, raw, 16);
1814 if ((tdep->
xcr0 & X86_XSTATE_SSE))
1820 if (memcmp (raw, p, 16))
1822 xstate_bv |= X86_XSTATE_SSE;
1823 memcpy (p, raw, 16);
1827 if ((tdep->
xcr0 & X86_XSTATE_AVX) || (tdep->
xcr0 & X86_XSTATE_SSE))
1832 if (memcmp (raw, p, 4))
1838 if ((xstate_bv & (X86_XSTATE_SSE | X86_XSTATE_AVX)) == 0)
1839 xstate_bv |= X86_XSTATE_SSE;
1847 if ((tdep->
xcr0 & X86_XSTATE_X87))
1853 if (memcmp (raw, p, 10))
1855 xstate_bv |= X86_XSTATE_X87;
1856 memcpy (p, raw, 10);
1868 internal_error (_(
"invalid i387 regclass"));
1873 if (memcmp (raw, p, 4) != 0)
1875 xstate_bv |= X86_XSTATE_PKRU;
1880 case avx512_zmm16_h:
1883 if (memcmp (raw, p, 32) != 0)
1885 xstate_bv |= X86_XSTATE_ZMM;
1886 memcpy (p, raw, 32);
1893 if (memcmp (raw, p, 32) != 0)
1895 xstate_bv |= X86_XSTATE_ZMM_H;
1896 memcpy (p, raw, 32);
1903 if (memcmp (raw, p, 8) != 0)
1905 xstate_bv |= X86_XSTATE_K;
1910 case avx512_ymmh_avx512:
1913 if (memcmp (raw, p, 16) != 0)
1915 xstate_bv |= X86_XSTATE_ZMM;
1916 memcpy (p, raw, 16);
1920 case avx512_xmm_avx512:
1923 if (memcmp (raw, p, 16) != 0)
1925 xstate_bv |= X86_XSTATE_ZMM;
1926 memcpy (p, raw, 16);
1933 if (memcmp (raw, p, 16))
1935 xstate_bv |= X86_XSTATE_AVX;
1936 memcpy (p, raw, 16);
1943 if (memcmp (raw, p, 16))
1945 xstate_bv |= X86_XSTATE_BNDREGS;
1946 memcpy (p, raw, 16);
1952 xstate_bv |= X86_XSTATE_BNDCFG;
1959 if (memcmp (raw, p, 16))
1961 xstate_bv |= X86_XSTATE_SSE;
1962 memcpy (p, raw, 16);
1969 if (memcmp (raw, p, 10))
1971 xstate_bv |= X86_XSTATE_X87;
1972 memcpy (p, raw, 10);
1976 case x87_ctrl_or_mxcsr:
1982 if (memcmp (raw, p, 2))
1989 xstate_bv |= (initial_xstate_bv
1990 & (X86_XSTATE_AVX | X86_XSTATE_SSE));
1991 if ((xstate_bv & (X86_XSTATE_AVX | X86_XSTATE_SSE)) == 0)
1992 xstate_bv |= X86_XSTATE_SSE;
2016 buf[1] &= ((1 << 3) - 1);
2017 buf[1] |= ((
FXSAVE_ADDR (tdep, regs, i))[1] & ~((1 << 3) - 1));
2023 unsigned short ftag;
2026 ftag = (buf[1] << 8) | buf[0];
2030 for (fpreg = 7; fpreg >= 0; fpreg--)
2032 int tag = (ftag >> (fpreg * 2)) & 3;
2035 buf[0] |= (1 << fpreg);
2039 if (memcmp (p, buf, 2))
2041 xstate_bv |= X86_XSTATE_X87;
2052 if (memcmp (raw, p, regsize))
2054 xstate_bv |= X86_XSTATE_X87;
2055 memcpy (p, raw, regsize);
2065 initial_xstate_bv |= xstate_bv;
2079 unsigned int exponent;
2080 unsigned long fraction[2];
2082 integer = raw[7] & 0x80;
2083 exponent = (((raw[9] & 0x7f) << 8) | raw[8]);
2084 fraction[0] = ((raw[3] << 24) | (raw[2] << 16) | (raw[1] << 8) | raw[0]);
2085 fraction[1] = (((raw[7] & 0x7f) << 24) | (raw[6] << 16)
2086 | (raw[5] << 8) | raw[4]);
2088 if (exponent == 0x7fff)
2093 else if (exponent == 0x0000)
2095 if (fraction[0] == 0x0000 && fraction[1] == 0x0000 && !integer)
2153 gdb_byte bnd_buf[16];
2155 memset (bnd_buf, 0, 16);
void raw_collect(int regnum, void *buf) const override
void raw_supply(int regnum, const void *buf) override
void raw_write(int regnum, const gdb_byte *buf)
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
static ULONGEST extract_unsigned_integer(gdb::array_view< const gdb_byte > buf, enum bfd_endian byte_order)
struct value * get_frame_register_value(frame_info_ptr frame, int regnum)
bool read_frame_register_unsigned(frame_info_ptr frame, int regnum, ULONGEST *val)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
bool get_frame_register_bytes(frame_info_ptr frame, int regnum, CORE_ADDR offset, gdb::array_view< gdb_byte > buffer, int *optimizedp, int *unavailablep)
void put_frame_register(frame_info_ptr frame, int regnum, const gdb_byte *buf)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
int i386_fp_regnum_p(struct gdbarch *gdbarch, int regnum)
struct type * i387_ext_type(struct gdbarch *gdbarch)
#define I386_MAX_REGISTER_SIZE
#define XSAVE_XSTATE_BV_ADDR(xsave)
void i387_value_to_register(frame_info_ptr frame, int regnum, struct type *type, const gdb_byte *from)
#define XSAVE_AVX512_ZMM16_H_ADDR(tdep, xsave, regnum)
ULONGEST i387_xsave_get_clear_bv(struct gdbarch *gdbarch, const void *xsave)
static void print_i387_ext(struct gdbarch *gdbarch, const gdb_byte *raw, struct ui_file *file)
void i387_supply_xsave(struct regcache *regcache, int regnum, const void *xsave)
static int xsave_xmm_avx512_offset[]
#define XSAVE_AVXH_ADDR(tdep, xsave, regnum)
static int xsave_avx512_k_offset[]
#define XSAVE_XMM_AVX512_ADDR(tdep, xsave, regnum)
static int xsave_bndcfg_offset[]
bool i387_guess_xsave_layout(uint64_t xcr0, size_t xsave_size, x86_xsave_layout &layout)
#define XSAVE_PKEYS_ADDR(tdep, xsave, regnum)
#define XSAVE_BNDCFG_ADDR(tdep, xsave, regnum)
void i387_supply_fxsave(struct regcache *regcache, int regnum, const void *fxsave)
static int xsave_ymm_avx512_offset[]
#define FXSAVE_ADDR(tdep, fxsave, regnum)
#define FXSAVE_MXCSR_ADDR(fxsave)
x86_xsave_layout i387_fallback_xsave_layout(uint64_t xcr0)
static int fxsave_offset[]
void i387_collect_fxsave(const struct regcache *regcache, int regnum, void *fxsave)
void i387_collect_xsave(const struct regcache *regcache, int regnum, void *xsave, int gcore)
#define FSAVE_ADDR(tdep, fsave, regnum)
#define XSAVE_YMM_AVX512_ADDR(tdep, xsave, regnum)
void i387_reset_bnd_regs(struct gdbarch *gdbarch, struct regcache *regcache)
static int xsave_avx512_zmm16_h_offset[]
int i387_convert_register_p(struct gdbarch *gdbarch, int regnum, struct type *type)
void i387_supply_fsave(struct regcache *regcache, int regnum, const void *fsave)
void i387_collect_fsave(const struct regcache *regcache, int regnum, void *fsave)
static int xsave_avx512_zmm0_h_offset[]
void i387_return_value(struct gdbarch *gdbarch, struct regcache *regcache)
#define XSAVE_BNDREGS_ADDR(tdep, xsave, regnum)
static int i387_tag(const gdb_byte *raw)
static void print_i387_control_word(int control_p, unsigned int control, struct ui_file *file)
static int xsave_avxh_offset[]
#define XSAVE_AVX512_ZMM0_H_ADDR(tdep, xsave, regnum)
static void print_i387_status_word(int status_p, unsigned int status, struct ui_file *file)
int i387_register_to_value(frame_info_ptr frame, int regnum, struct type *type, gdb_byte *to, int *optimizedp, int *unavailablep)
static int xsave_pkeys_offset[]
static int fsave_offset[]
static void print_i387_value(struct gdbarch *gdbarch, const gdb_byte *raw, struct ui_file *file)
static int xsave_bndregs_offset[]
#define XSAVE_AVX512_K_ADDR(tdep, xsave, regnum)
void i387_print_float_info(struct gdbarch *gdbarch, struct ui_file *file, frame_info_ptr frame, const char *args)
#define I387_K0_REGNUM(tdep)
#define I387_XMM0_REGNUM(tdep)
#define I387_ST0_REGNUM(tdep)
#define I387_KEND_REGNUM(tdep)
#define I387_FOOFF_REGNUM(tdep)
#define I387_XMM16_REGNUM(tdep)
#define I387_PKEYSEND_REGNUM(tdep)
#define I387_BND0R_REGNUM(tdep)
#define I387_NUM_BND_REGS
#define I387_YMM16H_REGNUM(tdep)
#define I387_XMM_AVX512_END_REGNUM(tdep)
#define I387_FSTAT_REGNUM(tdep)
#define I387_FOP_REGNUM(tdep)
#define I387_ZMM16H_REGNUM(tdep)
#define I387_FCTRL_REGNUM(tdep)
#define I387_FOSEG_REGNUM(tdep)
#define I387_MXCSR_REGNUM(tdep)
#define I387_YMM0H_REGNUM(tdep)
#define I387_FISEG_REGNUM(tdep)
#define I387_BNDCFGU_REGNUM(tdep)
#define I387_ZMMENDH_REGNUM(tdep)
#define I387_PKRU_REGNUM(tdep)
#define I387_YMMH_AVX512_END_REGNUM(tdep)
#define I387_ZMM0H_REGNUM(tdep)
#define I387_FTAG_REGNUM(tdep)
#define I387_YMMENDH_REGNUM(tdep)
#define I387_MPXEND_REGNUM(tdep)
#define I387_FIOFF_REGNUM(tdep)
int regcache_register_size(const struct regcache *regcache, int n)
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
int register_size(struct gdbarch *gdbarch, int regnum)
void regcache_raw_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
x86_xsave_layout xsave_layout
gdb::array_view< const gdb_byte > contents()
bool entirely_available()
void target_float_convert(const gdb_byte *from, const struct type *from_type, gdb_byte *to, const struct type *to_type)
std::string target_float_to_string(const gdb_byte *addr, const struct type *type, const char *format)
void gdb_printf(struct ui_file *stream, const char *format,...)
void gdb_puts(const char *linebuffer, struct ui_file *stream)