diff options
author | David S. Miller <davem@davemloft.net> | 2011-10-31 04:05:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-10-31 04:05:49 -0400 |
commit | 2e8ecdc008a16b9a6c4b9628bb64d0d1c05f9f92 (patch) | |
tree | dda40d127f783e204e149bdbfe42000ce474a5d4 | |
parent | a52312b88c8103e965979a79a07f6b34af82ca4b (diff) |
sparc64: Fix masking and shifting in VIS fpcmp emulation.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/sparc/kernel/visemul.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/arch/sparc/kernel/visemul.c b/arch/sparc/kernel/visemul.c index 32b626c9d815..73370674ccff 100644 --- a/arch/sparc/kernel/visemul.c +++ b/arch/sparc/kernel/visemul.c | |||
@@ -713,17 +713,17 @@ static void pcmp(struct pt_regs *regs, unsigned int insn, unsigned int opf) | |||
713 | s16 b = (rs2 >> (i * 16)) & 0xffff; | 713 | s16 b = (rs2 >> (i * 16)) & 0xffff; |
714 | 714 | ||
715 | if (a > b) | 715 | if (a > b) |
716 | rd_val |= 1 << i; | 716 | rd_val |= 8 >> i; |
717 | } | 717 | } |
718 | break; | 718 | break; |
719 | 719 | ||
720 | case FCMPGT32_OPF: | 720 | case FCMPGT32_OPF: |
721 | for (i = 0; i < 2; i++) { | 721 | for (i = 0; i < 2; i++) { |
722 | s32 a = (rs1 >> (i * 32)) & 0xffff; | 722 | s32 a = (rs1 >> (i * 32)) & 0xffffffff; |
723 | s32 b = (rs2 >> (i * 32)) & 0xffff; | 723 | s32 b = (rs2 >> (i * 32)) & 0xffffffff; |
724 | 724 | ||
725 | if (a > b) | 725 | if (a > b) |
726 | rd_val |= 1 << i; | 726 | rd_val |= 2 >> i; |
727 | } | 727 | } |
728 | break; | 728 | break; |
729 | 729 | ||
@@ -733,17 +733,17 @@ static void pcmp(struct pt_regs *regs, unsigned int insn, unsigned int opf) | |||
733 | s16 b = (rs2 >> (i * 16)) & 0xffff; | 733 | s16 b = (rs2 >> (i * 16)) & 0xffff; |
734 | 734 | ||
735 | if (a <= b) | 735 | if (a <= b) |
736 | rd_val |= 1 << i; | 736 | rd_val |= 8 >> i; |
737 | } | 737 | } |
738 | break; | 738 | break; |
739 | 739 | ||
740 | case FCMPLE32_OPF: | 740 | case FCMPLE32_OPF: |
741 | for (i = 0; i < 2; i++) { | 741 | for (i = 0; i < 2; i++) { |
742 | s32 a = (rs1 >> (i * 32)) & 0xffff; | 742 | s32 a = (rs1 >> (i * 32)) & 0xffffffff; |
743 | s32 b = (rs2 >> (i * 32)) & 0xffff; | 743 | s32 b = (rs2 >> (i * 32)) & 0xffffffff; |
744 | 744 | ||
745 | if (a <= b) | 745 | if (a <= b) |
746 | rd_val |= 1 << i; | 746 | rd_val |= 2 >> i; |
747 | } | 747 | } |
748 | break; | 748 | break; |
749 | 749 | ||
@@ -753,17 +753,17 @@ static void pcmp(struct pt_regs *regs, unsigned int insn, unsigned int opf) | |||
753 | s16 b = (rs2 >> (i * 16)) & 0xffff; | 753 | s16 b = (rs2 >> (i * 16)) & 0xffff; |
754 | 754 | ||
755 | if (a != b) | 755 | if (a != b) |
756 | rd_val |= 1 << i; | 756 | rd_val |= 8 >> i; |
757 | } | 757 | } |
758 | break; | 758 | break; |
759 | 759 | ||
760 | case FCMPNE32_OPF: | 760 | case FCMPNE32_OPF: |
761 | for (i = 0; i < 2; i++) { | 761 | for (i = 0; i < 2; i++) { |
762 | s32 a = (rs1 >> (i * 32)) & 0xffff; | 762 | s32 a = (rs1 >> (i * 32)) & 0xffffffff; |
763 | s32 b = (rs2 >> (i * 32)) & 0xffff; | 763 | s32 b = (rs2 >> (i * 32)) & 0xffffffff; |
764 | 764 | ||
765 | if (a != b) | 765 | if (a != b) |
766 | rd_val |= 1 << i; | 766 | rd_val |= 2 >> i; |
767 | } | 767 | } |
768 | break; | 768 | break; |
769 | 769 | ||
@@ -773,17 +773,17 @@ static void pcmp(struct pt_regs *regs, unsigned int insn, unsigned int opf) | |||
773 | s16 b = (rs2 >> (i * 16)) & 0xffff; | 773 | s16 b = (rs2 >> (i * 16)) & 0xffff; |
774 | 774 | ||
775 | if (a == b) | 775 | if (a == b) |
776 | rd_val |= 1 << i; | 776 | rd_val |= 8 >> i; |
777 | } | 777 | } |
778 | break; | 778 | break; |
779 | 779 | ||
780 | case FCMPEQ32_OPF: | 780 | case FCMPEQ32_OPF: |
781 | for (i = 0; i < 2; i++) { | 781 | for (i = 0; i < 2; i++) { |
782 | s32 a = (rs1 >> (i * 32)) & 0xffff; | 782 | s32 a = (rs1 >> (i * 32)) & 0xffffffff; |
783 | s32 b = (rs2 >> (i * 32)) & 0xffff; | 783 | s32 b = (rs2 >> (i * 32)) & 0xffffffff; |
784 | 784 | ||
785 | if (a == b) | 785 | if (a == b) |
786 | rd_val |= 1 << i; | 786 | rd_val |= 2 >> i; |
787 | } | 787 | } |
788 | break; | 788 | break; |
789 | } | 789 | } |