diff options
Diffstat (limited to 'arch/mips/math-emu/cp1emu.c')
-rw-r--r-- | arch/mips/math-emu/cp1emu.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c index cac529a405b8..9dfcd7fc1bc3 100644 --- a/arch/mips/math-emu/cp1emu.c +++ b/arch/mips/math-emu/cp1emu.c | |||
@@ -643,9 +643,14 @@ static inline int cop1_64bit(struct pt_regs *xcp) | |||
643 | return !test_thread_flag(TIF_32BIT_FPREGS); | 643 | return !test_thread_flag(TIF_32BIT_FPREGS); |
644 | } | 644 | } |
645 | 645 | ||
646 | static inline bool hybrid_fprs(void) | ||
647 | { | ||
648 | return test_thread_flag(TIF_HYBRID_FPREGS); | ||
649 | } | ||
650 | |||
646 | #define SIFROMREG(si, x) \ | 651 | #define SIFROMREG(si, x) \ |
647 | do { \ | 652 | do { \ |
648 | if (cop1_64bit(xcp)) \ | 653 | if (cop1_64bit(xcp) && !hybrid_fprs()) \ |
649 | (si) = (int)get_fpr32(&ctx->fpr[x], 0); \ | 654 | (si) = (int)get_fpr32(&ctx->fpr[x], 0); \ |
650 | else \ | 655 | else \ |
651 | (si) = (int)get_fpr32(&ctx->fpr[(x) & ~1], (x) & 1); \ | 656 | (si) = (int)get_fpr32(&ctx->fpr[(x) & ~1], (x) & 1); \ |
@@ -653,7 +658,7 @@ do { \ | |||
653 | 658 | ||
654 | #define SITOREG(si, x) \ | 659 | #define SITOREG(si, x) \ |
655 | do { \ | 660 | do { \ |
656 | if (cop1_64bit(xcp)) { \ | 661 | if (cop1_64bit(xcp) && !hybrid_fprs()) { \ |
657 | unsigned i; \ | 662 | unsigned i; \ |
658 | set_fpr32(&ctx->fpr[x], 0, si); \ | 663 | set_fpr32(&ctx->fpr[x], 0, si); \ |
659 | for (i = 1; i < ARRAY_SIZE(ctx->fpr[x].val32); i++) \ | 664 | for (i = 1; i < ARRAY_SIZE(ctx->fpr[x].val32); i++) \ |