Lines Matching refs:sa
63 static void pushw(StackAccess *sa, uint16_t val) in pushw() argument
65 sa->sp -= 2; in pushw()
66 cpu_stw_mmuidx_ra(sa->env, sa->ss_base + (sa->sp & sa->sp_mask), in pushw()
67 val, sa->mmu_index, sa->ra); in pushw()
70 static void pushl(StackAccess *sa, uint32_t val) in pushl() argument
72 sa->sp -= 4; in pushl()
73 cpu_stl_mmuidx_ra(sa->env, sa->ss_base + (sa->sp & sa->sp_mask), in pushl()
74 val, sa->mmu_index, sa->ra); in pushl()
77 static uint16_t popw(StackAccess *sa) in popw() argument
79 uint16_t ret = cpu_lduw_mmuidx_ra(sa->env, in popw()
80 sa->ss_base + (sa->sp & sa->sp_mask), in popw()
81 sa->mmu_index, sa->ra); in popw()
82 sa->sp += 2; in popw()
86 static uint32_t popl(StackAccess *sa) in popl() argument
88 uint32_t ret = cpu_ldl_mmuidx_ra(sa->env, in popl()
89 sa->ss_base + (sa->sp & sa->sp_mask), in popl()
90 sa->mmu_index, sa->ra); in popl()
91 sa->sp += 4; in popl()
654 StackAccess sa; in do_interrupt_protected() local
696 sa.env = env; in do_interrupt_protected()
697 sa.ra = 0; in do_interrupt_protected()
709 sa.mmu_index = x86_mmu_index_pl(env, cpl); in do_interrupt_protected()
711 sa.sp_mask = 0xffffffff; in do_interrupt_protected()
713 sa.sp_mask = 0xffff; in do_interrupt_protected()
715 sa.sp = env->regs[R_ESP]; in do_interrupt_protected()
716 sa.ss_base = env->segs[R_SS].base; in do_interrupt_protected()
718 pushl(&sa, error_code); in do_interrupt_protected()
720 pushw(&sa, error_code); in do_interrupt_protected()
722 SET_ESP(sa.sp, sa.sp_mask); in do_interrupt_protected()
754 sa.mmu_index = x86_mmu_index_pl(env, dpl); in do_interrupt_protected()
781 sa.sp = esp; in do_interrupt_protected()
782 sa.sp_mask = get_sp_mask(ss_e2); in do_interrupt_protected()
783 sa.ss_base = get_seg_base(ss_e1, ss_e2); in do_interrupt_protected()
790 sa.sp = env->regs[R_ESP]; in do_interrupt_protected()
791 sa.sp_mask = get_sp_mask(env->segs[R_SS].flags); in do_interrupt_protected()
792 sa.ss_base = env->segs[R_SS].base; in do_interrupt_protected()
817 pushl(&sa, env->segs[R_GS].selector); in do_interrupt_protected()
818 pushl(&sa, env->segs[R_FS].selector); in do_interrupt_protected()
819 pushl(&sa, env->segs[R_DS].selector); in do_interrupt_protected()
820 pushl(&sa, env->segs[R_ES].selector); in do_interrupt_protected()
822 pushl(&sa, env->segs[R_SS].selector); in do_interrupt_protected()
823 pushl(&sa, env->regs[R_ESP]); in do_interrupt_protected()
825 pushl(&sa, eflags); in do_interrupt_protected()
826 pushl(&sa, env->segs[R_CS].selector); in do_interrupt_protected()
827 pushl(&sa, old_eip); in do_interrupt_protected()
829 pushl(&sa, error_code); in do_interrupt_protected()
834 pushw(&sa, env->segs[R_GS].selector); in do_interrupt_protected()
835 pushw(&sa, env->segs[R_FS].selector); in do_interrupt_protected()
836 pushw(&sa, env->segs[R_DS].selector); in do_interrupt_protected()
837 pushw(&sa, env->segs[R_ES].selector); in do_interrupt_protected()
839 pushw(&sa, env->segs[R_SS].selector); in do_interrupt_protected()
840 pushw(&sa, env->regs[R_ESP]); in do_interrupt_protected()
842 pushw(&sa, eflags); in do_interrupt_protected()
843 pushw(&sa, env->segs[R_CS].selector); in do_interrupt_protected()
844 pushw(&sa, old_eip); in do_interrupt_protected()
846 pushw(&sa, error_code); in do_interrupt_protected()
864 cpu_x86_load_seg_cache(env, R_SS, ss, sa.ss_base, in do_interrupt_protected()
867 SET_ESP(sa.sp, sa.sp_mask); in do_interrupt_protected()
879 static void pushq(StackAccess *sa, uint64_t val) in pushq() argument
881 sa->sp -= 8; in pushq()
882 cpu_stq_mmuidx_ra(sa->env, sa->sp, val, sa->mmu_index, sa->ra); in pushq()
885 static uint64_t popq(StackAccess *sa) in popq() argument
887 uint64_t ret = cpu_ldq_mmuidx_ra(sa->env, sa->sp, sa->mmu_index, sa->ra); in popq()
888 sa->sp += 8; in popq()
935 StackAccess sa; in do_interrupt64() local
1004 sa.env = env; in do_interrupt64()
1005 sa.ra = 0; in do_interrupt64()
1006 sa.mmu_index = x86_mmu_index_pl(env, dpl); in do_interrupt64()
1007 sa.sp_mask = -1; in do_interrupt64()
1008 sa.ss_base = 0; in do_interrupt64()
1012 sa.sp = get_rsp_from_tss(env, ist != 0 ? ist + 3 : dpl); in do_interrupt64()
1019 sa.sp = env->regs[R_ESP]; in do_interrupt64()
1021 sa.sp &= ~0xfLL; /* align stack */ in do_interrupt64()
1029 pushq(&sa, env->segs[R_SS].selector); in do_interrupt64()
1030 pushq(&sa, env->regs[R_ESP]); in do_interrupt64()
1031 pushq(&sa, eflags); in do_interrupt64()
1032 pushq(&sa, env->segs[R_CS].selector); in do_interrupt64()
1033 pushq(&sa, old_eip); in do_interrupt64()
1035 pushq(&sa, error_code); in do_interrupt64()
1048 env->regs[R_ESP] = sa.sp; in do_interrupt64()
1124 StackAccess sa; in do_interrupt_real() local
1135 sa.env = env; in do_interrupt_real()
1136 sa.ra = 0; in do_interrupt_real()
1137 sa.sp = env->regs[R_ESP]; in do_interrupt_real()
1138 sa.sp_mask = 0xffff; in do_interrupt_real()
1139 sa.ss_base = env->segs[R_SS].base; in do_interrupt_real()
1140 sa.mmu_index = x86_mmu_index_pl(env, 0); in do_interrupt_real()
1149 pushw(&sa, cpu_compute_eflags(env)); in do_interrupt_real()
1150 pushw(&sa, old_cs); in do_interrupt_real()
1151 pushw(&sa, old_eip); in do_interrupt_real()
1154 SET_ESP(sa.sp, sa.sp_mask); in do_interrupt_real()
1597 StackAccess sa; in helper_lcall_real() local
1599 sa.env = env; in helper_lcall_real()
1600 sa.ra = GETPC(); in helper_lcall_real()
1601 sa.sp = env->regs[R_ESP]; in helper_lcall_real()
1602 sa.sp_mask = get_sp_mask(env->segs[R_SS].flags); in helper_lcall_real()
1603 sa.ss_base = env->segs[R_SS].base; in helper_lcall_real()
1604 sa.mmu_index = x86_mmu_index_pl(env, 0); in helper_lcall_real()
1607 pushl(&sa, env->segs[R_CS].selector); in helper_lcall_real()
1608 pushl(&sa, next_eip); in helper_lcall_real()
1610 pushw(&sa, env->segs[R_CS].selector); in helper_lcall_real()
1611 pushw(&sa, next_eip); in helper_lcall_real()
1614 SET_ESP(sa.sp, sa.sp_mask); in helper_lcall_real()
1629 StackAccess sa; in helper_lcall_protected() local
1642 sa.env = env; in helper_lcall_protected()
1643 sa.ra = GETPC(); in helper_lcall_protected()
1670 sa.mmu_index = x86_mmu_index_pl(env, cpl); in helper_lcall_protected()
1675 sa.sp = env->regs[R_ESP]; in helper_lcall_protected()
1676 sa.sp_mask = -1; in helper_lcall_protected()
1677 sa.ss_base = 0; in helper_lcall_protected()
1678 pushq(&sa, env->segs[R_CS].selector); in helper_lcall_protected()
1679 pushq(&sa, next_eip); in helper_lcall_protected()
1681 env->regs[R_ESP] = sa.sp; in helper_lcall_protected()
1689 sa.sp = env->regs[R_ESP]; in helper_lcall_protected()
1690 sa.sp_mask = get_sp_mask(env->segs[R_SS].flags); in helper_lcall_protected()
1691 sa.ss_base = env->segs[R_SS].base; in helper_lcall_protected()
1693 pushl(&sa, env->segs[R_CS].selector); in helper_lcall_protected()
1694 pushl(&sa, next_eip); in helper_lcall_protected()
1696 pushw(&sa, env->segs[R_CS].selector); in helper_lcall_protected()
1697 pushw(&sa, next_eip); in helper_lcall_protected()
1705 SET_ESP(sa.sp, sa.sp_mask); in helper_lcall_protected()
1798 sa.mmu_index = x86_mmu_index_pl(env, dpl); in helper_lcall_protected()
1803 sa.sp = get_rsp_from_tss(env, dpl); in helper_lcall_protected()
1804 sa.sp_mask = -1; in helper_lcall_protected()
1805 sa.ss_base = 0; /* SS base is always zero in IA-32e mode */ in helper_lcall_protected()
1807 TARGET_FMT_lx "\n", ss, sa.sp, env->regs[R_ESP]); in helper_lcall_protected()
1838 sa.sp = sp32; in helper_lcall_protected()
1839 sa.sp_mask = get_sp_mask(ss_e2); in helper_lcall_protected()
1840 sa.ss_base = get_seg_base(ss_e1, ss_e2); in helper_lcall_protected()
1850 pushq(&sa, env->segs[R_SS].selector); in helper_lcall_protected()
1851 pushq(&sa, env->regs[R_ESP]); in helper_lcall_protected()
1856 pushl(&sa, env->segs[R_SS].selector); in helper_lcall_protected()
1857 pushl(&sa, env->regs[R_ESP]); in helper_lcall_protected()
1862 pushl(&sa, val); in helper_lcall_protected()
1865 pushw(&sa, env->segs[R_SS].selector); in helper_lcall_protected()
1866 pushw(&sa, env->regs[R_ESP]); in helper_lcall_protected()
1871 pushw(&sa, val); in helper_lcall_protected()
1877 sa.mmu_index = x86_mmu_index_pl(env, cpl); in helper_lcall_protected()
1878 sa.sp = env->regs[R_ESP]; in helper_lcall_protected()
1879 sa.sp_mask = get_sp_mask(env->segs[R_SS].flags); in helper_lcall_protected()
1880 sa.ss_base = env->segs[R_SS].base; in helper_lcall_protected()
1887 pushq(&sa, env->segs[R_CS].selector); in helper_lcall_protected()
1888 pushq(&sa, next_eip); in helper_lcall_protected()
1892 pushl(&sa, env->segs[R_CS].selector); in helper_lcall_protected()
1893 pushl(&sa, next_eip); in helper_lcall_protected()
1895 pushw(&sa, env->segs[R_CS].selector); in helper_lcall_protected()
1896 pushw(&sa, next_eip); in helper_lcall_protected()
1910 sa.ss_base, in helper_lcall_protected()
1921 SET_ESP(sa.sp, sa.sp_mask); in helper_lcall_protected()
1931 StackAccess sa; in helper_iret_real() local
1933 sa.env = env; in helper_iret_real()
1934 sa.ra = GETPC(); in helper_iret_real()
1935 sa.mmu_index = x86_mmu_index_pl(env, 0); in helper_iret_real()
1936 sa.sp_mask = 0xffff; /* XXXX: use SS segment size? */ in helper_iret_real()
1937 sa.sp = env->regs[R_ESP]; in helper_iret_real()
1938 sa.ss_base = env->segs[R_SS].base; in helper_iret_real()
1942 new_eip = popl(&sa); in helper_iret_real()
1943 new_cs = popl(&sa) & 0xffff; in helper_iret_real()
1944 new_eflags = popl(&sa); in helper_iret_real()
1947 new_eip = popw(&sa); in helper_iret_real()
1948 new_cs = popw(&sa); in helper_iret_real()
1949 new_eflags = popw(&sa); in helper_iret_real()
1951 SET_ESP(sa.sp, sa.sp_mask); in helper_iret_real()
2005 StackAccess sa; in helper_ret_protected() local
2009 sa.env = env; in helper_ret_protected()
2010 sa.ra = retaddr; in helper_ret_protected()
2011 sa.mmu_index = x86_mmu_index_pl(env, cpl); in helper_ret_protected()
2015 sa.sp_mask = -1; in helper_ret_protected()
2019 sa.sp_mask = get_sp_mask(env->segs[R_SS].flags); in helper_ret_protected()
2021 sa.sp = env->regs[R_ESP]; in helper_ret_protected()
2022 sa.ss_base = env->segs[R_SS].base; in helper_ret_protected()
2026 new_eip = popq(&sa); in helper_ret_protected()
2027 new_cs = popq(&sa) & 0xffff; in helper_ret_protected()
2029 new_eflags = popq(&sa); in helper_ret_protected()
2036 new_eip = popl(&sa); in helper_ret_protected()
2037 new_cs = popl(&sa) & 0xffff; in helper_ret_protected()
2039 new_eflags = popl(&sa); in helper_ret_protected()
2046 new_eip = popw(&sa); in helper_ret_protected()
2047 new_cs = popw(&sa); in helper_ret_protected()
2049 new_eflags = popw(&sa); in helper_ret_protected()
2084 sa.sp += addend; in helper_ret_protected()
2096 new_esp = popq(&sa); in helper_ret_protected()
2097 new_ss = popq(&sa) & 0xffff; in helper_ret_protected()
2103 new_esp = popl(&sa); in helper_ret_protected()
2104 new_ss = popl(&sa) & 0xffff; in helper_ret_protected()
2107 new_esp = popw(&sa); in helper_ret_protected()
2108 new_ss = popw(&sa); in helper_ret_protected()
2158 sa.sp = new_esp; in helper_ret_protected()
2161 sa.sp_mask = -1; in helper_ret_protected()
2165 sa.sp_mask = get_sp_mask(ss_e2); in helper_ret_protected()
2174 sa.sp += addend; in helper_ret_protected()
2176 SET_ESP(sa.sp, sa.sp_mask); in helper_ret_protected()
2196 new_esp = popl(&sa); in helper_ret_protected()
2197 new_ss = popl(&sa); in helper_ret_protected()
2198 new_es = popl(&sa); in helper_ret_protected()
2199 new_ds = popl(&sa); in helper_ret_protected()
2200 new_fs = popl(&sa); in helper_ret_protected()
2201 new_gs = popl(&sa); in helper_ret_protected()