diff options
Diffstat (limited to 'arch/mips/math-emu')
-rw-r--r-- | arch/mips/math-emu/cp1emu.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c index f2338d1c0b48..47842b7d26ae 100644 --- a/arch/mips/math-emu/cp1emu.c +++ b/arch/mips/math-emu/cp1emu.c | |||
@@ -354,7 +354,8 @@ static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx) | |||
354 | 354 | ||
355 | if (MIPSInst_RD(ir) == FPCREG_CSR) { | 355 | if (MIPSInst_RD(ir) == FPCREG_CSR) { |
356 | value = ctx->fcr31; | 356 | value = ctx->fcr31; |
357 | value = (value & ~0x3) | mips_rm[value & 0x3]; | 357 | value = (value & ~FPU_CSR_RM) | |
358 | mips_rm[modeindex(value)]; | ||
358 | #ifdef CSRTRACE | 359 | #ifdef CSRTRACE |
359 | printk("%p gpr[%d]<-csr=%08x\n", | 360 | printk("%p gpr[%d]<-csr=%08x\n", |
360 | (void *) (xcp->cp0_epc), | 361 | (void *) (xcp->cp0_epc), |
@@ -907,7 +908,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, | |||
907 | ieee754sp fs; | 908 | ieee754sp fs; |
908 | 909 | ||
909 | SPFROMREG(fs, MIPSInst_FS(ir)); | 910 | SPFROMREG(fs, MIPSInst_FS(ir)); |
910 | ieee754_csr.rm = ieee_rm[MIPSInst_FUNC(ir) & 0x3]; | 911 | ieee754_csr.rm = ieee_rm[modeindex(MIPSInst_FUNC(ir))]; |
911 | rv.w = ieee754sp_tint(fs); | 912 | rv.w = ieee754sp_tint(fs); |
912 | ieee754_csr.rm = oldrm; | 913 | ieee754_csr.rm = oldrm; |
913 | rfmt = w_fmt; | 914 | rfmt = w_fmt; |
@@ -933,7 +934,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, | |||
933 | ieee754sp fs; | 934 | ieee754sp fs; |
934 | 935 | ||
935 | SPFROMREG(fs, MIPSInst_FS(ir)); | 936 | SPFROMREG(fs, MIPSInst_FS(ir)); |
936 | ieee754_csr.rm = ieee_rm[MIPSInst_FUNC(ir) & 0x3]; | 937 | ieee754_csr.rm = ieee_rm[modeindex(MIPSInst_FUNC(ir))]; |
937 | rv.l = ieee754sp_tlong(fs); | 938 | rv.l = ieee754sp_tlong(fs); |
938 | ieee754_csr.rm = oldrm; | 939 | ieee754_csr.rm = oldrm; |
939 | rfmt = l_fmt; | 940 | rfmt = l_fmt; |
@@ -1081,7 +1082,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, | |||
1081 | ieee754dp fs; | 1082 | ieee754dp fs; |
1082 | 1083 | ||
1083 | DPFROMREG(fs, MIPSInst_FS(ir)); | 1084 | DPFROMREG(fs, MIPSInst_FS(ir)); |
1084 | ieee754_csr.rm = ieee_rm[MIPSInst_FUNC(ir) & 0x3]; | 1085 | ieee754_csr.rm = ieee_rm[modeindex(MIPSInst_FUNC(ir))]; |
1085 | rv.w = ieee754dp_tint(fs); | 1086 | rv.w = ieee754dp_tint(fs); |
1086 | ieee754_csr.rm = oldrm; | 1087 | ieee754_csr.rm = oldrm; |
1087 | rfmt = w_fmt; | 1088 | rfmt = w_fmt; |
@@ -1107,7 +1108,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx, | |||
1107 | ieee754dp fs; | 1108 | ieee754dp fs; |
1108 | 1109 | ||
1109 | DPFROMREG(fs, MIPSInst_FS(ir)); | 1110 | DPFROMREG(fs, MIPSInst_FS(ir)); |
1110 | ieee754_csr.rm = ieee_rm[MIPSInst_FUNC(ir) & 0x3]; | 1111 | ieee754_csr.rm = ieee_rm[modeindex(MIPSInst_FUNC(ir))]; |
1111 | rv.l = ieee754dp_tlong(fs); | 1112 | rv.l = ieee754dp_tlong(fs); |
1112 | ieee754_csr.rm = oldrm; | 1113 | ieee754_csr.rm = oldrm; |
1113 | rfmt = l_fmt; | 1114 | rfmt = l_fmt; |