Lines Matching defs:sr

360 push (struct unw_state_record *sr)
363 memcpy (rs, &sr->curr, sizeof (*rs));
364 sr->curr.next = rs;
368 pop (struct unw_state_record *sr)
370 struct unw_reg_state *rs = sr->curr.next;
374 memcpy (&sr->curr, rs, sizeof(*rs));
511 finish_prologue (struct unw_state_record *sr)
522 reg = sr->curr.reg + save_order[i];
526 reg->val = sr->gr_save_loc++;
533 if (sr->imask)
539 unsigned char kind, mask = 0, *cp = sr->imask;
543 regs[0] = sr->curr.reg + UNW_REG_F2;
544 regs[1] = sr->curr.reg + UNW_REG_R4;
545 regs[2] = sr->curr.reg + UNW_REG_B1;
547 for (t = 0; t < sr->region_len; ++t)
553 spill_next_when (&regs[kind - 1], sr->curr.reg + limit[kind - 1],
554 sr->region_start + t);
559 if (sr->any_spills)
561 off = sr->spill_offset;
562 alloc_spill_area (&off, 16, sr->curr.reg + UNW_REG_F2,
563 sr->curr.reg + UNW_REG_F31);
564 alloc_spill_area (&off, 8, sr->curr.reg + UNW_REG_B1,
565 sr->curr.reg + UNW_REG_B5);
566 alloc_spill_area (&off, 8, sr->curr.reg + UNW_REG_R4,
567 sr->curr.reg + UNW_REG_R7);
577 unsigned char grsave, struct unw_state_record *sr)
581 if (!(sr->in_body || sr->first_region))
582 finish_prologue (sr);
583 sr->first_region = 0;
586 if (sr->when_target < sr->region_start + sr->region_len)
588 sr->done = 1;
592 for (i = 0; i < sr->epilogue_count; ++i)
593 pop (sr);
595 sr->epilogue_count = 0;
596 sr->epilogue_start = UNW_WHEN_NEVER;
599 push (sr);
601 sr->region_start += sr->region_len;
602 sr->region_len = rlen;
603 sr->in_body = body;
610 set_reg (sr->curr.reg + save_order[i], UNW_WHERE_GR,
611 sr->region_start + sr->region_len - 1, grsave++);
614 sr->gr_save_loc = grsave;
615 sr->any_spills = 0;
616 sr->imask = 0;
617 sr->spill_offset = 0x10; /* default to psp+16 */
628 struct unw_state_record *sr)
630 sr->unwabi = (abi << 8) | context;
635 struct unw_state_record *sr)
642 set_reg (sr->curr.reg + UNW_REG_B1 + i, UNW_WHERE_GR,
643 sr->region_start + sr->region_len - 1, gr++);
649 desc_br_mem (unsigned char brmask, struct unw_state_record *sr)
657 set_reg (sr->curr.reg + UNW_REG_B1 + i, UNW_WHERE_SPILL_HOME,
658 sr->region_start + sr->region_len - 1, 0);
659 sr->any_spills = 1;
667 struct unw_state_record *sr)
675 set_reg (sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_SPILL_HOME,
676 sr->region_start + sr->region_len - 1, 0);
677 sr->any_spills = 1;
686 set_reg (sr->curr.reg + base + i, UNW_WHERE_SPILL_HOME,
687 sr->region_start + sr->region_len - 1, 0);
688 sr->any_spills = 1;
695 desc_fr_mem (unsigned char frmask, struct unw_state_record *sr)
703 set_reg (sr->curr.reg + UNW_REG_F2 + i, UNW_WHERE_SPILL_HOME,
704 sr->region_start + sr->region_len - 1, 0);
705 sr->any_spills = 1;
713 struct unw_state_record *sr)
720 set_reg (sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_GR,
721 sr->region_start + sr->region_len - 1, gr++);
727 desc_gr_mem (unsigned char grmask, struct unw_state_record *sr)
735 set_reg (sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_SPILL_HOME,
736 sr->region_start + sr->region_len - 1, 0);
737 sr->any_spills = 1;
744 desc_mem_stack_f (unw_word t, unw_word size, struct unw_state_record *sr)
746 set_reg (sr->curr.reg + UNW_REG_PSP, UNW_WHERE_NONE,
747 sr->region_start + MIN ((int)t, sr->region_len - 1), 16*size);
751 desc_mem_stack_v (unw_word t, struct unw_state_record *sr)
753 sr->curr.reg[UNW_REG_PSP].when
754 = sr->region_start + MIN ((int)t, sr->region_len - 1);
758 desc_reg_gr (unsigned char reg, unsigned char dst, struct unw_state_record *sr)
760 set_reg (sr->curr.reg + reg, UNW_WHERE_GR,
761 sr->region_start + sr->region_len - 1, dst);
766 struct unw_state_record *sr)
768 set_reg (sr->curr.reg + reg, UNW_WHERE_PSPREL,
769 sr->region_start + sr->region_len - 1,
774 desc_reg_sprel (unsigned char reg, unw_word spoff, struct unw_state_record *sr)
776 set_reg (sr->curr.reg + reg, UNW_WHERE_SPREL,
777 sr->region_start + sr->region_len - 1,
782 desc_rp_br (unsigned char dst, struct unw_state_record *sr)
784 sr->return_link_reg = dst;
788 desc_reg_when (unsigned char regnum, unw_word t, struct unw_state_record *sr)
790 struct unw_reg_info *reg = sr->curr.reg + regnum;
794 reg->when = sr->region_start + MIN ((int)t, sr->region_len - 1);
798 desc_spill_base (unw_word pspoff, struct unw_state_record *sr)
800 sr->spill_offset = 0x10 - 4*pspoff;
804 desc_spill_mask (unsigned char *imaskp, struct unw_state_record *sr)
806 sr->imask = imaskp;
807 return imaskp + (2*sr->region_len + 7)/8;
814 desc_epilogue (unw_word t, unw_word ecount, struct unw_state_record *sr)
816 sr->epilogue_start = sr->region_start + sr->region_len - 1 - t;
817 sr->epilogue_count = ecount + 1;
821 desc_copy_state (unw_word label, struct unw_state_record *sr)
825 for (ls = sr->labeled_states; ls; ls = ls->next)
829 free_state_stack (&sr->curr);
830 memcpy (&sr->curr, &ls->saved_state, sizeof (sr->curr));
831 sr->curr.next = dup_state_stack (ls->saved_state.next);
839 desc_label_state (unw_word label, struct unw_state_record *sr)
844 memcpy (&ls->saved_state, &sr->curr, sizeof (ls->saved_state));
845 ls->saved_state.next = dup_state_stack (sr->curr.next);
848 ls->next = sr->labeled_states;
849 sr->labeled_states = ls;
857 desc_is_active (unsigned char qp, unw_word t, struct unw_state_record *sr)
859 if (sr->when_target <= sr->region_start + MIN ((int)t, sr->region_len - 1))
863 if ((sr->pr_val & (1UL << qp)) == 0)
865 sr->pr_mask |= (1UL << qp);
872 struct unw_state_record *sr)
876 if (! desc_is_active (qp, t, sr))
879 r = sr->curr.reg + decode_abreg (abreg, 0);
881 r->when = sr->region_start + MIN ((int)t, sr->region_len - 1);
888 struct unw_state_record *sr)
893 if (! desc_is_active (qp, t, sr))
901 r = sr->curr.reg + decode_abreg (abreg, 0);
903 r->when = sr->region_start + MIN ((int)t, sr->region_len - 1);
909 unw_word pspoff, struct unw_state_record *sr)
913 if (! desc_is_active (qp, t, sr))
916 r = sr->curr.reg + decode_abreg (abreg, 1);
918 r->when = sr->region_start + MIN((int)t, sr->region_len - 1);
924 unw_word spoff, struct unw_state_record *sr)
928 if (! desc_is_active (qp, t, sr))
931 r = sr->curr.reg + decode_abreg (abreg, 1);
933 r->when = sr->region_start + MIN ((int)t, sr->region_len - 1);