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

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

Issue 1409873002: [x64] Implement vmovd and vmovq AVX instructions. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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/x64/codegen-x64.cc ('k') | src/x64/lithium-codegen-x64.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 <assert.h> 5 #include <assert.h>
6 #include <stdarg.h> 6 #include <stdarg.h>
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #if V8_TARGET_ARCH_X64 9 #if V8_TARGET_ARCH_X64
10 10
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 344
345 // Actual number of base register given the low bits and the rex.b state. 345 // Actual number of base register given the low bits and the rex.b state.
346 int base_reg(int low_bits) { return low_bits | ((rex_ & 0x01) << 3); } 346 int base_reg(int low_bits) { return low_bits | ((rex_ & 0x01) << 3); }
347 347
348 bool rex_x() { return (rex_ & 0x02) != 0; } 348 bool rex_x() { return (rex_ & 0x02) != 0; }
349 349
350 bool rex_r() { return (rex_ & 0x04) != 0; } 350 bool rex_r() { return (rex_ & 0x04) != 0; }
351 351
352 bool rex_w() { return (rex_ & 0x08) != 0; } 352 bool rex_w() { return (rex_ & 0x08) != 0; }
353 353
354 bool vex_w() {
355 DCHECK(vex_byte0_ == VEX3_PREFIX || vex_byte0_ == VEX2_PREFIX);
356 return vex_byte0_ == VEX3_PREFIX ? (vex_byte2_ & 0x80) != 0 : false;
357 }
358
354 bool vex_128() { 359 bool vex_128() {
355 DCHECK(vex_byte0_ == VEX3_PREFIX || vex_byte0_ == VEX2_PREFIX); 360 DCHECK(vex_byte0_ == VEX3_PREFIX || vex_byte0_ == VEX2_PREFIX);
356 byte checked = vex_byte0_ == VEX3_PREFIX ? vex_byte2_ : vex_byte1_; 361 byte checked = vex_byte0_ == VEX3_PREFIX ? vex_byte2_ : vex_byte1_;
357 return (checked & 4) != 1; 362 return (checked & 4) != 1;
358 } 363 }
359 364
360 bool vex_none() { 365 bool vex_none() {
361 DCHECK(vex_byte0_ == VEX3_PREFIX || vex_byte0_ == VEX2_PREFIX); 366 DCHECK(vex_byte0_ == VEX3_PREFIX || vex_byte0_ == VEX2_PREFIX);
362 byte checked = vex_byte0_ == VEX3_PREFIX ? vex_byte2_ : vex_byte1_; 367 byte checked = vex_byte0_ == VEX3_PREFIX ? vex_byte2_ : vex_byte1_;
363 return (checked & 3) == 0; 368 return (checked & 3) == 0;
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after
1184 case 0x54: 1189 case 0x54:
1185 AppendToBuffer("vandpd %s,%s,", NameOfXMMRegister(regop), 1190 AppendToBuffer("vandpd %s,%s,", NameOfXMMRegister(regop),
1186 NameOfXMMRegister(vvvv)); 1191 NameOfXMMRegister(vvvv));
1187 current += PrintRightXMMOperand(current); 1192 current += PrintRightXMMOperand(current);
1188 break; 1193 break;
1189 case 0x57: 1194 case 0x57:
1190 AppendToBuffer("vxorpd %s,%s,", NameOfXMMRegister(regop), 1195 AppendToBuffer("vxorpd %s,%s,", NameOfXMMRegister(regop),
1191 NameOfXMMRegister(vvvv)); 1196 NameOfXMMRegister(vvvv));
1192 current += PrintRightXMMOperand(current); 1197 current += PrintRightXMMOperand(current);
1193 break; 1198 break;
1199 case 0x6e:
1200 AppendToBuffer("vmov%c %s,", vex_w() ? 'q' : 'd',
1201 NameOfXMMRegister(regop));
1202 current += PrintRightOperand(current);
1203 break;
1204 case 0x7e:
1205 AppendToBuffer("vmov%c ", vex_w() ? 'q' : 'd');
1206 current += PrintRightOperand(current);
1207 AppendToBuffer(",%s", NameOfXMMRegister(regop));
1208 break;
1194 default: 1209 default:
1195 UnimplementedInstruction(); 1210 UnimplementedInstruction();
1196 } 1211 }
1197 1212
1198 } else { 1213 } else {
1199 UnimplementedInstruction(); 1214 UnimplementedInstruction();
1200 } 1215 }
1201 1216
1202 return static_cast<int>(current - data); 1217 return static_cast<int>(current - data);
1203 } 1218 }
(...skipping 1170 matching lines...) Expand 10 before | Expand all | Expand 10 after
2374 for (int i = 6 - static_cast<int>(pc - prev_pc); i >= 0; i--) { 2389 for (int i = 6 - static_cast<int>(pc - prev_pc); i >= 0; i--) {
2375 fprintf(f, " "); 2390 fprintf(f, " ");
2376 } 2391 }
2377 fprintf(f, " %s\n", buffer.start()); 2392 fprintf(f, " %s\n", buffer.start());
2378 } 2393 }
2379 } 2394 }
2380 2395
2381 } // namespace disasm 2396 } // namespace disasm
2382 2397
2383 #endif // V8_TARGET_ARCH_X64 2398 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/codegen-x64.cc ('k') | src/x64/lithium-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698