UASM_i_LW
UASM_i_LW(p, tmp, offsetof(struct pt_regs, cp0_epc), frame);
UASM_i_LW(p, tmp, offsetof(struct pt_regs, cp0_cause), frame);
UASM_i_LW(&p, GPR_K0, offsetof(struct kvm_vcpu_arch, guest_ebase), GPR_K1);
UASM_i_LW(&p, GPR_T0, offsetof(struct kvm_vcpu_arch, pc), GPR_K1);
UASM_i_LW(&p, GPR_S0, (int)offsetof(struct kvm_vcpu, kvm) -
UASM_i_LW(&p, GPR_A0, offsetof(struct kvm, arch.gpa_mm.pgd), GPR_S0);
UASM_i_LW(&p, GPR_K0, 0, GPR_T3);
UASM_i_LW(&p, GPR_T2, uasm_rel_lo((long)&cpu_data[0].asid_mask), GPR_AT);
UASM_i_LW(&p, i, offsetof(struct kvm_vcpu_arch, gprs[i]), GPR_K1);
UASM_i_LW(&p, GPR_K0, offsetof(struct kvm_vcpu_arch, hi), GPR_K1);
UASM_i_LW(&p, GPR_K0, offsetof(struct kvm_vcpu_arch, lo), GPR_K1);
UASM_i_LW(&p, GPR_K0, offsetof(struct kvm_vcpu_arch, gprs[GPR_K0]), GPR_K1);
UASM_i_LW(&p, GPR_K1, offsetof(struct kvm_vcpu_arch, gprs[GPR_K1]), GPR_K1);
UASM_i_LW(&p, GPR_K0, offsetof(struct kvm_vcpu, arch.gprs[GPR_K0]), GPR_K1);
UASM_i_LW(&p, GPR_K0, uasm_rel_lo((long)&ebase), GPR_K0);
UASM_i_LW(&p, GPR_K0, offsetof(struct kvm_vcpu_arch, host_entryhi),
UASM_i_LW(&p, GPR_A0,
UASM_i_LW(&p, GPR_GP, offsetof(struct kvm_vcpu_arch, host_gp), GPR_K1);
UASM_i_LW(&p, GPR_SP, offsetof(struct kvm_vcpu_arch, host_stack), GPR_K1);
UASM_i_LW(&p, GPR_T0, offsetof(struct kvm_vcpu_arch, guest_ebase), GPR_K1);
UASM_i_LW(&p, GPR_K1, offsetof(struct kvm_vcpu_arch, host_stack), GPR_K1);
UASM_i_LW(&p, i, offsetof(struct pt_regs, regs[i]), GPR_K1);
UASM_i_LW(&p, GPR_RA, offsetof(struct pt_regs, regs[GPR_RA]), GPR_K1);
UASM_i_LW(p, tmp, pte_off_even, ptep); /* get even pte */
UASM_i_LW(p, ptep, pte_off_odd, ptep); /* get odd pte */
UASM_i_LW(p, ptr, 0, ptr);
UASM_i_LW(p, scratch, 0, ptr);
UASM_i_LW(p, even, 0, ptr); /* get even pte */
UASM_i_LW(p, odd, sizeof(pte_t), ptr); /* get odd pte */
UASM_i_LW(p, scratch, scratchpad_offset(0), 0);
UASM_i_LW(p, scratch, scratchpad_offset(0), 0);
UASM_i_LW(&p, htlb_info.huge_pte, 0, GPR_K1);
UASM_i_LW(p, pte, 0, ptr);
UASM_i_LW(p, wr.r2, 0, wr.r2);
UASM_i_LW(p, 1, offsetof(struct tlb_reg_save, a), GPR_K0);
UASM_i_LW(p, 2, offsetof(struct tlb_reg_save, b), GPR_K0);
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
UASM_i_LW(p, tmp, 0, pmd);
UASM_i_LW(p, pte, 0, ptr); /* Needed because SC killed our PTE */
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
UASM_i_LW(p, ptr, 0, ptr);
UASM_i_LW(p, ptr, 0, ptr);