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

Side by Side Diff: src/mips64/disasm-mips64.cc

Issue 1413463009: Implemented the Word64Clz TurboFan operator for x64, arm64, and mips64. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fixed a typing problem, and added mips64. Created 5 years, 1 month 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/mips64/constants-mips64.h ('k') | src/mips64/simulator-mips64.cc » ('j') | 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 // A Disassembler object is used to disassemble a block of code instruction by 5 // A Disassembler object is used to disassemble a block of code instruction by
6 // instruction. The default implementation of the NameConverter object can be 6 // instruction. The default implementation of the NameConverter object can be
7 // overriden to modify register names or to do symbol lookup on addresses. 7 // overriden to modify register names or to do symbol lookup on addresses.
8 // 8 //
9 // The example below will disassemble a block of code and print it to stdout. 9 // The example below will disassemble a block of code and print it to stdout.
10 // 10 //
(...skipping 1161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 } else { 1172 } else {
1173 if ((instr->FunctionFieldRaw() == CLZ_R6) && (instr->FdValue() == 1)) { 1173 if ((instr->FunctionFieldRaw() == CLZ_R6) && (instr->FdValue() == 1)) {
1174 Format(instr, "clz 'rd, 'rs"); 1174 Format(instr, "clz 'rd, 'rs");
1175 } else if ((instr->FunctionFieldRaw() == CLO_R6) && 1175 } else if ((instr->FunctionFieldRaw() == CLO_R6) &&
1176 (instr->FdValue() == 1)) { 1176 (instr->FdValue() == 1)) {
1177 Format(instr, "clo 'rd, 'rs"); 1177 Format(instr, "clo 'rd, 'rs");
1178 } 1178 }
1179 } 1179 }
1180 break; 1180 break;
1181 case MFLO: 1181 case MFLO:
1182 Format(instr, "mflo 'rd"); 1182 if (instr->Bits(25, 16) == 0) {
1183 Format(instr, "mflo 'rd");
1184 } else {
1185 if ((instr->FunctionFieldRaw() == DCLZ_R6) && (instr->FdValue() == 1)) {
1186 Format(instr, "dclz 'rd, 'rs");
1187 } else if ((instr->FunctionFieldRaw() == DCLO_R6) &&
1188 (instr->FdValue() == 1)) {
1189 Format(instr, "dclo 'rd, 'rs");
1190 }
1191 }
1183 break; 1192 break;
1184 case D_MUL_MUH_U: // Equals to DMULTU. 1193 case D_MUL_MUH_U: // Equals to DMULTU.
1185 if (kArchVariant != kMips64r6) { 1194 if (kArchVariant != kMips64r6) {
1186 Format(instr, "dmultu 'rs, 'rt"); 1195 Format(instr, "dmultu 'rs, 'rt");
1187 } else { 1196 } else {
1188 if (instr->SaValue() == MUL_OP) { 1197 if (instr->SaValue() == MUL_OP) {
1189 Format(instr, "dmulu 'rd, 'rs, 'rt"); 1198 Format(instr, "dmulu 'rd, 'rs, 'rt");
1190 } else { 1199 } else {
1191 Format(instr, "dmuhu 'rd, 'rs, 'rt"); 1200 Format(instr, "dmuhu 'rd, 'rs, 'rt");
1192 } 1201 }
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1353 void Decoder::DecodeTypeRegisterSPECIAL2(Instruction* instr) { 1362 void Decoder::DecodeTypeRegisterSPECIAL2(Instruction* instr) {
1354 switch (instr->FunctionFieldRaw()) { 1363 switch (instr->FunctionFieldRaw()) {
1355 case MUL: 1364 case MUL:
1356 Format(instr, "mul 'rd, 'rs, 'rt"); 1365 Format(instr, "mul 'rd, 'rs, 'rt");
1357 break; 1366 break;
1358 case CLZ: 1367 case CLZ:
1359 if (kArchVariant != kMips64r6) { 1368 if (kArchVariant != kMips64r6) {
1360 Format(instr, "clz 'rd, 'rs"); 1369 Format(instr, "clz 'rd, 'rs");
1361 } 1370 }
1362 break; 1371 break;
1372 case DCLZ:
1373 if (kArchVariant != kMips64r6) {
1374 Format(instr, "dclz 'rd, 'rs");
1375 }
1376 break;
1363 default: 1377 default:
1364 UNREACHABLE(); 1378 UNREACHABLE();
1365 } 1379 }
1366 } 1380 }
1367 1381
1368 1382
1369 void Decoder::DecodeTypeRegisterSPECIAL3(Instruction* instr) { 1383 void Decoder::DecodeTypeRegisterSPECIAL3(Instruction* instr) {
1370 switch (instr->FunctionFieldRaw()) { 1384 switch (instr->FunctionFieldRaw()) {
1371 case INS: { 1385 case INS: {
1372 Format(instr, "ins 'rt, 'rs, 'sa, 'ss2"); 1386 Format(instr, "ins 'rt, 'rs, 'sa, 'ss2");
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
1925 prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); 1939 prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start());
1926 } 1940 }
1927 } 1941 }
1928 1942
1929 1943
1930 #undef UNSUPPORTED 1944 #undef UNSUPPORTED
1931 1945
1932 } // namespace disasm 1946 } // namespace disasm
1933 1947
1934 #endif // V8_TARGET_ARCH_MIPS64 1948 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips64/constants-mips64.h ('k') | src/mips64/simulator-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698