static int i386nto_regset_fill (int regset, char *data) { if (regset == NTO_REG_GENERAL) { int regno; for (regno = 0; regno < NUM_GPREGS; regno++) { int offset = nto_reg_offset (regno); if (offset != -1) regcache_collect (regno, data + offset); } } else if (regset == NTO_REG_FLOAT) { if (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR) i387_fill_fxsave (data, -1); else i387_fill_fsave (data, -1); } else return -1; return 0; }
/* Store the whole floating-point state into THREAD using information from the corresponding (pseudo) registers. */ static void store_fpregs (struct proc *thread, int regno) { mach_msg_type_number_t count = i386_FLOAT_STATE_COUNT; struct i386_float_state state; error_t err; err = thread_get_state (thread->port, i386_FLOAT_STATE, (thread_state_t) &state, &count); if (err) { warning ("Couldn't fetch floating-point state from %s", proc_string (thread)); return; } /* FIXME: kettenis/2001-07-15: Is this right? Should we somehow take into account DEPRECATED_REGISTER_VALID like the old code did? */ i387_fill_fsave (state.hw_state, regno); err = thread_set_state (thread->port, i386_FLOAT_STATE, (thread_state_t) &state, i386_FLOAT_STATE_COUNT); if (err) { warning ("Couldn't store floating-point state into %s", proc_string (thread)); return; } }
void fill_fpregset (fpregset_t *fpregsetp, int regno) { if (FP0_REGNUM == 0) return; i387_fill_fsave ((char *) fpregsetp, regno); }
void fill_fpregset (elf_fpregset_t *fpregsetp, int regno) { i387_fill_fsave ((char *) fpregsetp, regno); }