147 unsigned long val, val2;
149 for (i = 0; i < 8; i++)
151 ((
char *) &fp->
st_space[0]) + i * 10);
158 fp->
fop = (val2 & 0x7FF) | (fp->
fop & 0xF800);
189 for (i = 0; i < 8; i++)
191 ((
char *) &fp->
st_space[0]) + i * 10);
197 val = fp->
fctrl & 0xFFFF;
200 val = fp->
fstat & 0xFFFF;
203 val = fp->
ftag & 0xFFFF;
206 val = fp->
fiseg & 0xFFFF;
209 val = fp->
foseg & 0xFFFF;
213 val = (fp->
fop) & 0x7FF;
224 unsigned long val, val2;
228 for (i = 0; i < 8; i++)
230 ((
char *) &fp->
st_space[0]) + i * 16);
231 for (i = 0; i < num_xmm_registers; i++)
241 fp->
fop = (val2 & 0x7FF) | (fp->
fop & 0xF800);
254 for (i = 7; i >= 0; i--)
256 int tag = (val >> (i * 2)) & 3;
275 unsigned long val, val2;
276 unsigned int clear_bv;
292 for (i = 0; i < 8; i++)
293 memset (((
char *) &fp->
st_space[0]) + i * 16, 0, 10);
296 for (i = 0; i < num_xmm_registers; i++)
297 memset (((
char *) &fp->
xmm_space[0]) + i * 16, 0, 16);
300 for (i = 0; i < num_xmm_registers; i++)
301 memset (((
char *) &fp->
ymmh_space[0]) + i * 16, 0, 16);
313 memset (((
char *) &fp->
k_space[0]) + i * 8, 0, 8);
335 for (i = 0; i < 8; i++)
338 p = ((
char *) &fp->
st_space[0]) + i * 16;
339 if (memcmp (raw, p, 10))
352 for (i = 0; i < num_xmm_registers; i++)
355 p = ((
char *) &fp->
xmm_space[0]) + i * 16;
356 if (memcmp (raw, p, 16))
369 for (i = 0; i < num_xmm_registers; i++)
373 if (memcmp (raw, p, 16))
390 if (memcmp (raw, p, 16))
407 if (memcmp (raw, p, 8))
423 p = ((
char *) &fp->
k_space[0]) + i * 8;
424 if (memcmp (raw, p, 8) != 0)
441 if (memcmp (raw, p, 32) != 0)
458 if (memcmp (raw, p, 32) != 0)
475 if (memcmp (raw, p, 16) != 0)
492 if (memcmp (raw, p, 16) != 0)
510 fp->
fop = (val2 & 0x7FF) | (fp->
fop & 0xF800);
523 for (i = 7; i >= 0; i--)
525 int tag = (val >> (i * 2)) & 3;
542 unsigned char *raw = &fp->
st_space[regno * 16];
543 unsigned int exponent;
544 unsigned long fraction[2];
547 integer = raw[7] & 0x80;
548 exponent = (((raw[9] & 0x7f) << 8) | raw[8]);
549 fraction[0] = ((raw[3] << 24) | (raw[2] << 16) | (raw[1] << 8) | raw[0]);
550 fraction[1] = (((raw[7] & 0x7f) << 24) | (raw[6] << 16)
551 | (raw[5] << 8) | raw[4]);
553 if (exponent == 0x7fff)
558 else if (exponent == 0x0000)
560 if (fraction[0] == 0x0000 && fraction[1] == 0x0000 && !integer)
597 for (i = 0; i < 8; i++)
599 ((
char *) &fp->
st_space[0]) + i * 16);
600 for (i = 0; i < num_xmm_registers; i++)
609 val = fp->
fctrl & 0xFFFF;
612 val = fp->
fstat & 0xFFFF;
616 top = (fp->
fstat >> 11) & 0x7;
618 for (i = 7; i >= 0; i--)
621 if (fp->
ftag & (1 << i))
625 val |= tag << (2 * i);
629 val = fp->
fiseg & 0xFFFF;
632 val = fp->
foseg & 0xFFFF;
635 val = (fp->
fop) & 0x7FF;
646 unsigned int clear_bv;
660 if ((clear_bv & X86_XSTATE_X87) != 0)
662 for (i = 0; i < 8; i++)
668 for (i = 0; i < 8; i++)
677 if ((clear_bv & X86_XSTATE_SSE))
679 for (i = 0; i < num_xmm_registers; i++)
685 for (i = 0; i < num_xmm_registers; i++)
694 if ((clear_bv & X86_XSTATE_AVX) != 0)
696 for (i = 0; i < num_xmm_registers; i++)
702 for (i = 0; i < num_xmm_registers; i++)
712 if ((clear_bv & X86_XSTATE_BNDREGS) != 0)
730 if ((clear_bv & X86_XSTATE_BNDCFG) != 0)
747 if ((clear_bv & X86_XSTATE_K) != 0)
764 if ((clear_bv & X86_XSTATE_ZMM_H) != 0)
783 if ((clear_bv & X86_XSTATE_ZMM) != 0)
809 val = fp->
fctrl & 0xFFFF;
812 val = fp->
fstat & 0xFFFF;
816 top = (fp->
fstat >> 11) & 0x7;
818 for (i = 7; i >= 0; i--)
821 if (fp->
ftag & (1 << i))
822 tag =
i387_ftag (fxp, (i + 8 - top) % 8);
825 val |= tag << (2 * i);
829 val = fp->
fiseg & 0xFFFF;
832 val = fp->
foseg & 0xFFFF;
835 val = (fp->
fop) & 0x7FF;
const struct target_desc * tdesc
void i387_xsave_to_cache(struct regcache *regcache, const void *buf)
void collect_register(struct regcache *regcache, int n, void *buf)
#define X86_XSTATE_BNDCFG
unsigned char reserved5[48]
#define X86_XSTATE_SSE_MASK
void supply_register_by_name(struct regcache *regcache, const char *name, const void *buf)
unsigned char reserved4[128]
void i387_fxsave_to_cache(struct regcache *regcache, const void *buf)
void supply_register_zeroed(struct regcache *regcache, int n)
unsigned char st_space[128]
static const int num_avx512_zmmh_high_registers
void i387_fsave_to_cache(struct regcache *regcache, const void *buf)
static int i387_ftag(struct i387_fxsave *fp, int regno)
void collect_register_by_name(struct regcache *regcache, const char *name, void *buf)
static const int num_mpx_bnd_registers
static const int num_avx512_xmm_registers
unsigned long long xstate_bv
static const int num_avx512_ymmh_registers
unsigned char reserved1[48]
unsigned char reserved2[40]
unsigned char zmmh_high_space[1024]
#define X86_XSTATE_BNDREGS
unsigned char st_space[128]
int register_size(const struct target_desc *tdesc, int n)
unsigned char ymmh_space[256]
static const int num_mpx_cfg_registers
unsigned char zmmh_low_space[512]
unsigned long long x86_xcr0
void i387_cache_to_xsave(struct regcache *regcache, void *buf)
void i387_cache_to_fsave(struct regcache *regcache, void *buf)
int find_regno(const struct target_desc *tdesc, const char *name)
void i387_cache_to_fxsave(struct regcache *regcache, void *buf)
unsigned char st_space[80]
unsigned char xmm_space[256]
unsigned char xmm_space[256]
unsigned char mpx_bnd_space[64]
unsigned char reserved3[56]
unsigned char mpx_cfg_space[16]
static const int num_avx512_zmmh_low_registers
void supply_register(struct regcache *regcache, int n, const void *buf)
unsigned char k_space[64]
static const int num_avx512_k_registers