MSR_FP
msr_check_and_clear(MSR_FP);
msr_check_and_clear(MSR_FP|MSR_VEC|MSR_VSX);
unsigned long mathflags = MSR_FP;
new->thread.regs->msr &= ~(MSR_FP | MSR_VEC | MSR_VSX);
msr_diff &= MSR_FP | MSR_VEC | MSR_VSX;
if (msr_diff & MSR_FP)
if (usermsr & MSR_FP)
if (cpu_has_feature(CPU_FTR_VSX) && (bits & MSR_FP))
if (cpu_has_feature(CPU_FTR_VSX) && (bits & MSR_FP))
{MSR_FP, "FP"},
msr &= ~(MSR_FP|MSR_FE0|MSR_FE1);
msr_check_and_set(MSR_FP);
msr_check_and_clear(MSR_FP);
childregs->msr &= ~(MSR_FP|MSR_VEC|MSR_VSX);
if (tsk->thread.regs->msr & MSR_FP) {
if (regs != NULL && (regs->msr & MSR_FP) != 0) {
cpumsr = msr_check_and_set(MSR_FP);
if (current->thread.regs && (current->thread.regs->msr & MSR_FP)) {
WARN_ON((msr & MSR_VSX) && !((msr & MSR_FP) && (msr & MSR_VEC)));
if (msr & MSR_FP)
msr_check_and_set(MSR_FP|MSR_VEC|MSR_VSX);
msr_check_and_clear(MSR_FP|MSR_VEC|MSR_VSX);
cpumsr = msr_check_and_set(MSR_FP|MSR_VEC|MSR_VSX);
(current->thread.regs->msr & (MSR_VSX|MSR_VEC|MSR_FP))) {
if (tsk->thread.regs->msr & (MSR_VSX|MSR_VEC|MSR_FP)) {
msr_all_available |= MSR_FP;
WARN_ON((usermsr & MSR_VSX) && !((usermsr & MSR_FP) && (usermsr & MSR_VEC)));
if (usermsr & MSR_FP)
if ((!(msr & MSR_FP)) && should_restore_fp())
new_msr |= MSR_FP;
if (((msr | new_msr) & (MSR_FP | MSR_VEC)) == (MSR_FP | MSR_VEC))
if (new_msr & MSR_FP) {
WARN_ON((usermsr & MSR_VSX) && !((usermsr & MSR_FP) && (usermsr & MSR_VEC)));
if (usermsr & MSR_FP)
if ((thr->ckpt_regs.msr & MSR_FP) == 0)
if (msr & MSR_FP)
regs_set_return_msr(regs, regs->msr & ~(MSR_FP | MSR_FE0 | MSR_FE1));
regs_set_return_msr(regs, regs->msr & ~(MSR_FP | MSR_FE0 | MSR_FE1));
msr_check_and_set(msr & (MSR_FP | MSR_VEC));
if (msr & MSR_FP) {
regs_set_return_msr(regs, regs->msr | (MSR_FP | current->thread.fpexc_mode));
msr |= tsk->thread.ckpt_regs.msr & (MSR_FP | MSR_VEC | MSR_VSX);
if (msr & MSR_FP)
regs_set_return_msr(regs, regs->msr & ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC | MSR_VSX));
regs_set_return_msr(regs, regs->msr & ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC | MSR_VSX));
msr_check_and_set(msr & (MSR_FP | MSR_VEC));
if (msr & MSR_FP) {
regs_set_return_msr(regs, regs->msr | (MSR_FP | tsk->thread.fpexc_mode));
kvmppc_giveup_ext(vcpu, MSR_FP);
msr |= MSR_FP;
msr_needed |= MSR_FP;
if (!(kvmppc_get_msr(vcpu) & MSR_FP)) {
kvmppc_giveup_ext(vcpu, MSR_FP);
ext_msr = MSR_FP;
if (kvmppc_get_msr(vcpu) & MSR_FP)
kvmppc_handle_ext(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, MSR_FP);
kvmppc_giveup_ext(vcpu, MSR_FP | MSR_VEC | MSR_VSX);
kvmppc_giveup_ext(vcpu, MSR_FP | MSR_VEC | MSR_VSX);
(MSR_FP | MSR_VEC | MSR_VSX);
if (ext_diff == MSR_FP)
if (kvmppc_get_msr(vcpu) & MSR_FP)
kvmppc_handle_ext(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, MSR_FP);
msr |= MSR_FP | MSR_VEC;
if (msr & MSR_FP) {
if (t->regs->msr & MSR_FP)
msr = MSR_FP | MSR_VEC | MSR_VSX;
if (msr & MSR_FP) {
if (lost_ext & MSR_FP) {
if (!(current->thread.regs->msr & MSR_FP)) {
current->thread.regs->msr |= MSR_FP;
if (current->thread.regs->msr & MSR_FP)
vcpu->arch.shadow_msr &= ~MSR_FP;
vcpu->arch.shadow_msr |= vcpu->arch.shared->msr & MSR_FP;
MSR_FP);
if (!(kvmppc_get_msr(vcpu) & MSR_FP)) {
vcpu->kvm->arch.kvm_ops->giveup_ext(vcpu, MSR_FP);
if (regs->msr & MSR_FP) {
if (!user_mode(regs) && !(regs->msr & MSR_FP))
if (!user_mode(regs) && !(regs->msr & MSR_FP))
if (regs->msr & MSR_FP)
if (regs->msr & MSR_FP)
if (regs->msr & MSR_FP)
if (regs->msr & MSR_FP)
if (regs->msr & MSR_FP) {
regs->msr |= MSR_FP;