Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(499)

Side by Side Diff: src/mips/macro-assembler-mips.cc

Issue 2434973002: MIPS: Fix several failures due to unsupported Sed and Seh innstructions on MIPS32R1 (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips/macro-assembler-mips.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <limits.h> // For LONG_MIN, LONG_MAX. 5 #include <limits.h> // For LONG_MIN, LONG_MAX.
6 6
7 #if V8_TARGET_ARCH_MIPS 7 #if V8_TARGET_ARCH_MIPS
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/division-by-constant.h" 10 #include "src/base/division-by-constant.h"
(...skipping 1118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 bnvc(rs, rt, L); 1129 bnvc(rs, rt, L);
1130 } 1130 }
1131 } 1131 }
1132 1132
1133 // ------------Pseudo-instructions------------- 1133 // ------------Pseudo-instructions-------------
1134 1134
1135 // Word Swap Byte 1135 // Word Swap Byte
1136 void MacroAssembler::ByteSwapSigned(Register dest, Register src, 1136 void MacroAssembler::ByteSwapSigned(Register dest, Register src,
1137 int operand_size) { 1137 int operand_size) {
1138 DCHECK(operand_size == 1 || operand_size == 2 || operand_size == 4); 1138 DCHECK(operand_size == 1 || operand_size == 2 || operand_size == 4);
1139
1140 if (operand_size == 2) {
1141 Seh(src, src);
1142 } else if (operand_size == 1) {
1143 Seb(src, src);
1144 }
1145 // No need to do any preparation if operand_size is 4
1146
1139 if (IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) { 1147 if (IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) {
1140 if (operand_size == 2) {
1141 seh(src, src);
1142 } else if (operand_size == 1) {
1143 seb(src, src);
1144 }
1145 // No need to do any preparation if operand_size is 4
1146
1147 wsbh(dest, src); 1148 wsbh(dest, src);
1148 rotr(dest, dest, 16); 1149 rotr(dest, dest, 16);
1149 } else if (IsMipsArchVariant(kMips32r1) || IsMipsArchVariant(kLoongson)) { 1150 } else if (IsMipsArchVariant(kMips32r1) || IsMipsArchVariant(kLoongson)) {
1150 if (operand_size == 1) {
1151 sll(src, src, 24);
1152 sra(src, src, 24);
1153 } else if (operand_size == 2) {
1154 sll(src, src, 16);
1155 sra(src, src, 16);
1156 }
1157 // No need to do any preparation if operand_size is 4
1158
1159 Register tmp = t0; 1151 Register tmp = t0;
1160 Register tmp2 = t1; 1152 Register tmp2 = t1;
1161 1153
1162 andi(tmp2, src, 0xFF); 1154 andi(tmp2, src, 0xFF);
1163 sll(tmp2, tmp2, 24); 1155 sll(tmp2, tmp2, 24);
1164 or_(tmp, zero_reg, tmp2); 1156 or_(tmp, zero_reg, tmp2);
1165 1157
1166 andi(tmp2, src, 0xFF00); 1158 andi(tmp2, src, 0xFF00);
1167 sll(tmp2, tmp2, 8); 1159 sll(tmp2, tmp2, 8);
1168 or_(tmp, tmp, tmp2); 1160 or_(tmp, tmp, tmp2);
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after
1829 srl(at, at, 32 - size); 1821 srl(at, at, 32 - size);
1830 and_(t8, rs, at); 1822 and_(t8, rs, at);
1831 sll(t8, t8, pos); 1823 sll(t8, t8, pos);
1832 sll(at, at, pos); 1824 sll(at, at, pos);
1833 nor(at, at, zero_reg); 1825 nor(at, at, zero_reg);
1834 and_(at, rt, at); 1826 and_(at, rt, at);
1835 or_(rt, t8, at); 1827 or_(rt, t8, at);
1836 } 1828 }
1837 } 1829 }
1838 1830
1831 void MacroAssembler::Seb(Register rd, Register rt) {
1832 if (IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) {
1833 seb(rd, rt);
1834 } else {
1835 DCHECK(IsMipsArchVariant(kMips32r1) || IsMipsArchVariant(kLoongson));
1836 sll(rd, rt, 24);
1837 sra(rd, rd, 24);
1838 }
1839 }
1840
1841 void MacroAssembler::Seh(Register rd, Register rt) {
1842 if (IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) {
1843 seh(rd, rt);
1844 } else {
1845 DCHECK(IsMipsArchVariant(kMips32r1) || IsMipsArchVariant(kLoongson));
1846 sll(rd, rt, 16);
1847 sra(rd, rd, 16);
1848 }
1849 }
1850
1839 void MacroAssembler::Neg_s(FPURegister fd, FPURegister fs) { 1851 void MacroAssembler::Neg_s(FPURegister fd, FPURegister fs) {
1840 if (IsMipsArchVariant(kMips32r6)) { 1852 if (IsMipsArchVariant(kMips32r6)) {
1841 // r6 neg_s changes the sign for NaN-like operands as well. 1853 // r6 neg_s changes the sign for NaN-like operands as well.
1842 neg_s(fd, fs); 1854 neg_s(fd, fs);
1843 } else { 1855 } else {
1844 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r1) || 1856 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r1) ||
1845 IsMipsArchVariant(kLoongson)); 1857 IsMipsArchVariant(kLoongson));
1846 Label is_nan, done; 1858 Label is_nan, done;
1847 Register scratch1 = t8; 1859 Register scratch1 = t8;
1848 Register scratch2 = t9; 1860 Register scratch2 = t9;
(...skipping 5029 matching lines...) Expand 10 before | Expand all | Expand 10 after
6878 if (mag.shift > 0) sra(result, result, mag.shift); 6890 if (mag.shift > 0) sra(result, result, mag.shift);
6879 srl(at, dividend, 31); 6891 srl(at, dividend, 31);
6880 Addu(result, result, Operand(at)); 6892 Addu(result, result, Operand(at));
6881 } 6893 }
6882 6894
6883 6895
6884 } // namespace internal 6896 } // namespace internal
6885 } // namespace v8 6897 } // namespace v8
6886 6898
6887 #endif // V8_TARGET_ARCH_MIPS 6899 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/mips/macro-assembler-mips.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698