fcr31
cfc1 \tmp, fcr31
ctc1 \tmp, fcr31
ctc1 \tmp, fcr31
cfc1 \tmp, fcr31
if (current->thread.fpu.fcr31 & FPU_CSR_NAN2008) {
tsk->thread.fpu.fcr31 =
void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr,
unsigned long fcr31);
static inline unsigned long mask_fcr31_x(unsigned long fcr31)
return fcr31 & (FPU_CSR_UNI_X |
((fcr31 & FPU_CSR_ALL_E) <<
unsigned long *fcr31)
unsigned long *fcr31);
unsigned int fcr31;
.fcr31 = 0, \
unsigned long fcr31 = mask_fcr31_x(next->thread.fpu.fcr31); \
if (unlikely(fcr31)) { \
next->thread.fpu.fcr31 &= ~fcr31; \
force_fcr31_sig(fcr31, pc, next); \
asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31);
OFFSET(THREAD_FCR31, task_struct, thread.fpu.fcr31);
OFFSET(VCPU_FCR31, kvm_vcpu_arch, fpu.fcr31);
unsigned int fcr31;
fcr31 = read_32bit_cp1_register(CP1_STATUS);
fcr31 = current->thread.fpu.fcr31;
fcr31 = ~fcr31;
if (fcr31 & (1 << bit))
unsigned int bit, fcr31, reg;
fcr31 = read_32bit_cp1_register(CP1_STATUS);
fcr31 = current->thread.fpu.fcr31;
if (~fcr31 & (1 << bit)) {
if (fcr31 & (1 << bit)) {
t->thread.fpu.fcr31 = c->fpu_csr31;
t->thread.fpu.fcr31 &= ~FPU_CSR_NAN2008;
t->thread.fpu.fcr31 &= ~FPU_CSR_ABS2008;
t->thread.fpu.fcr31 |= FPU_CSR_NAN2008;
t->thread.fpu.fcr31 |= FPU_CSR_ABS2008;
memcpy((void *)¤t->thread.fpu.fcr31, mem,
memcpy(mem, (void *)¤t->thread.fpu.fcr31,
*fcr31 = res = mask_fcr31_x(current->thread.fpu.fcr31);
current->thread.fpu.fcr31 &= ~res;
csr = current->thread.fpu.fcr31;
csr = current->thread.fpu.fcr31;
int mipsr2_decoder(struct pt_regs *regs, u32 inst, unsigned long *fcr31)
tmp = child->thread.fpu.fcr31;
u32 fcr31;
fcr31 = child->thread.fpu.fcr31;
child->thread.fpu.fcr31 = (value & ~mask) | (fcr31 & mask);
__put_user(child->thread.fpu.fcr31, data + 64);
membuf_write(&to, &target->thread.fpu.fcr31, sizeof(u32));
u32 fcr31;
&fcr31,
ptrace_setfcr31(target, fcr31);
.fcsr = target->thread.fpu.fcr31,
target->thread.fpu.fcr31 = ctrl_regs.fcsr & ~FPU_CSR_ALL_X;
tmp = child->thread.fpu.fcr31;
child->thread.fpu.fcr31 = 0;
child->thread.fpu.fcr31 = data;
err |= __get_user(current->thread.fpu.fcr31, csr);
err |= __put_user(current->thread.fpu.fcr31, csr);
unsigned long fcr31 = 0;
status = mipsr2_decoder(regs, opcode, &fcr31);
fcr31);
current->thread.fpu.fcr31);
unsigned long fcr31;
fcr31 = mask_fcr31_x(current->thread.fpu.fcr31);
current->thread.fpu.fcr31 &= ~fcr31;
if (!process_fpemu_return(sig, fault_addr, fcr31) && !err)
void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr,
if (fcr31 & FPU_CSR_INV_X)
else if (fcr31 & FPU_CSR_DIV_X)
else if (fcr31 & FPU_CSR_OVF_X)
else if (fcr31 & FPU_CSR_UDF_X)
else if (fcr31 & FPU_CSR_INE_X)
int process_fpemu_return(int sig, void __user *fault_addr, unsigned long fcr31)
force_fcr31_sig(fcr31, fault_addr, current);
unsigned long fcr31;
fcr31 = mask_fcr31_x(current->thread.fpu.fcr31);
current->thread.fpu.fcr31 &= ~fcr31;
process_fpemu_return(sig, fault_addr, fcr31);
asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31)
write_32bit_cp1_register(CP1_STATUS, fcr31 & ~mask_fcr31_x(fcr31));
if (fcr31 & FPU_CSR_UNI_X) {
fcr31 = mask_fcr31_x(current->thread.fpu.fcr31);
current->thread.fpu.fcr31 &= ~fcr31;
process_fpemu_return(sig, fault_addr, fcr31);
uasm_i_sw(&p, GPR_T0, offsetof(struct kvm_vcpu_arch, fpu.fcr31),
v = fpu->fcr31;
fpu->fcr31 = v;
if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) {
cond = ctx->fcr31 & cbit;
if (((ctx->fcr31 & cond) != 0) == ((MIPSInst_RT(ir) & 1) != 0))
ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr;
if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) {
if (((ctx->fcr31 & cond) != 0) !=
if (((ctx->fcr31 & cond) != 0) !=
ctx->fcr31 = (ctx->fcr31 & ~FPU_CSR_ALL_X) | rcsr;
if ((ctx->fcr31 >> 5) & ctx->fcr31 & FPU_CSR_ALL_E) {
ctx->fcr31 |= cbit;
ctx->fcr31 &= ~cbit;
unsigned int fcr31;
fcr31 = read_32bit_cp1_register(CP1_STATUS);
fcr31 = current->thread.fpu.fcr31;
if (~fcr31 & (1 << bit))
if (fcr31 & (1 << bit))
u32 fcr31 = ctx->fcr31;
value = fcr31;
value = (fcr31 >> (FPU_CSR_FS_S - MIPS_FENR_FS_S)) &
value |= fcr31 & (FPU_CSR_ALL_E | FPU_CSR_RM);
value = fcr31 & (FPU_CSR_ALL_X | FPU_CSR_ALL_S);
value = (fcr31 >> (FPU_CSR_COND_S - MIPS_FCCR_COND0_S)) &
value |= (fcr31 >> (FPU_CSR_COND1_S - MIPS_FCCR_COND1_S)) &
u32 fcr31 = ctx->fcr31;
fcr31 = (value & ~mask) | (fcr31 & mask);
fcr31 &= ~(FPU_CSR_FS | FPU_CSR_ALL_E | FPU_CSR_RM);
fcr31 |= (value << (FPU_CSR_FS_S - MIPS_FENR_FS_S)) &
fcr31 |= value & (FPU_CSR_ALL_E | FPU_CSR_RM);
fcr31 &= ~(FPU_CSR_ALL_X | FPU_CSR_ALL_S);
fcr31 |= value & (FPU_CSR_ALL_X | FPU_CSR_ALL_S);
fcr31 &= ~(FPU_CSR_CONDX | FPU_CSR_COND);
fcr31 |= (value << (FPU_CSR_COND_S - MIPS_FCCR_COND0_S)) &
fcr31 |= (value << (FPU_CSR_COND1_S - MIPS_FCCR_COND1_S)) &
ctx->fcr31 = fcr31;
#define ieee754_csr (*(struct _ieee754_csr *)(¤t->thread.fpu.fcr31))