static void mn10300_store_return_value (struct type *type, char *valbuf) { if (TYPE_CODE (type) == TYPE_CODE_PTR) write_register_bytes (REGISTER_BYTE (4), valbuf, TYPE_LENGTH (type)); else write_register_bytes (REGISTER_BYTE (0), valbuf, TYPE_LENGTH (type)); }
void microblaze_store_return_value (struct type *type, char *valbuf) { int value_size; int return_size; int offset; char *zeros; value_size = TYPE_LENGTH (type); /* Return value fits into registers. */ return_size = (value_size + REGISTER_SIZE - 1) & ~(REGISTER_SIZE - 1); offset = REGISTER_BYTE (RETVAL_REGNUM) + (return_size - value_size); zeros = alloca (return_size); memset (zeros, 0, return_size); write_register_bytes (REGISTER_BYTE (RETVAL_REGNUM), zeros, return_size); write_register_bytes (offset, valbuf, value_size); }
void generic_pop_dummy_frame (void) { struct dummy_frame *dummy_frame = dummy_frame_stack; /* FIXME: what if the first frame isn't the right one, eg.. because one call-by-hand function has done a longjmp into another one? */ if (!dummy_frame) error ("Can't pop dummy frame!"); dummy_frame_stack = dummy_frame->next; write_register_bytes (0, dummy_frame->registers, REGISTER_BYTES); flush_cached_frames (); xfree (dummy_frame->registers); xfree (dummy_frame); }
void m68k_pop_frame () { register FRAME frame = get_current_frame (); register CORE_ADDR fp; register int regnum; struct frame_saved_regs fsr; struct frame_info *fi; char raw_buffer[12]; fi = get_frame_info (frame); fp = fi -> frame; get_frame_saved_regs (fi, &fsr); #if defined (HAVE_68881) for (regnum = FP0_REGNUM + 7 ; regnum >= FP0_REGNUM ; regnum--) { if (fsr.regs[regnum]) { read_memory (fsr.regs[regnum], raw_buffer, 12); write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, 12); } } #endif for (regnum = FP_REGNUM - 1 ; regnum >= 0 ; regnum--) { if (fsr.regs[regnum]) { write_register (regnum, read_memory_integer (fsr.regs[regnum], 4)); } } if (fsr.regs[PS_REGNUM]) { write_register (PS_REGNUM, read_memory_integer (fsr.regs[PS_REGNUM], 4)); } write_register (FP_REGNUM, read_memory_integer (fp, 4)); write_register (PC_REGNUM, read_memory_integer (fp + 4, 4)); write_register (SP_REGNUM, fp + 8); flush_cached_frames (); set_current_frame (create_new_frame (read_register (FP_REGNUM), read_pc ())); }
static void m68k_store_return_value (struct type *type, char *valbuf) { write_register_bytes (0, valbuf, TYPE_LENGTH (type)); }