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

Side by Side Diff: src/assembler_ia32.cpp

Issue 613483002: Change some explicit type checks into using helper functions. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: rename Created 6 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
« src/IceTargetLoweringX8632.cpp ('K') | « src/assembler_ia32.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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 // 4 //
5 // Modified by the Subzero authors. 5 // Modified by the Subzero authors.
6 // 6 //
7 //===- subzero/src/assembler_ia32.cpp - Assembler for x86-32 -------------===// 7 //===- subzero/src/assembler_ia32.cpp - Assembler for x86-32 -------------===//
8 // 8 //
9 // The Subzero Code Generator 9 // The Subzero Code Generator
10 // 10 //
(...skipping 17 matching lines...) Expand all
28 const Type BrokenType = IceType_i32; 28 const Type BrokenType = IceType_i32;
29 29
30 class DirectCallRelocation : public AssemblerFixup { 30 class DirectCallRelocation : public AssemblerFixup {
31 public: 31 public:
32 static DirectCallRelocation *create(Assembler *Asm, FixupKind Kind, 32 static DirectCallRelocation *create(Assembler *Asm, FixupKind Kind,
33 const ConstantRelocatable *Sym) { 33 const ConstantRelocatable *Sym) {
34 return new (Asm->Allocate<DirectCallRelocation>()) 34 return new (Asm->Allocate<DirectCallRelocation>())
35 DirectCallRelocation(Kind, Sym); 35 DirectCallRelocation(Kind, Sym);
36 } 36 }
37 37
38 void Process(const MemoryRegion &region, intptr_t position) { 38 void Process(const MemoryRegion &region, intptr_t position) override {
39 // Direct calls are relative to the following instruction on x86. 39 // Direct calls are relative to the following instruction on x86.
40 int32_t pointer = region.Load<int32_t>(position); 40 int32_t pointer = region.Load<int32_t>(position);
41 int32_t delta = region.start() + position + sizeof(int32_t); 41 int32_t delta = region.start() + position + sizeof(int32_t);
42 region.Store<int32_t>(position, pointer - delta); 42 region.Store<int32_t>(position, pointer - delta);
43 } 43 }
44 44
45 private: 45 private:
46 DirectCallRelocation(FixupKind Kind, const ConstantRelocatable *Sym) 46 DirectCallRelocation(FixupKind Kind, const ConstantRelocatable *Sym)
47 : AssemblerFixup(Kind, Sym) {} 47 : AssemblerFixup(Kind, Sym) {}
48 }; 48 };
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 void AssemblerX86::movq(XmmRegister dst, const Address &src) { 350 void AssemblerX86::movq(XmmRegister dst, const Address &src) {
351 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 351 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
352 EmitUint8(0xF3); 352 EmitUint8(0xF3);
353 EmitUint8(0x0F); 353 EmitUint8(0x0F);
354 EmitUint8(0x7E); 354 EmitUint8(0x7E);
355 EmitOperand(dst, Operand(src)); 355 EmitOperand(dst, Operand(src));
356 } 356 }
357 357
358 void AssemblerX86::addss(Type Ty, XmmRegister dst, XmmRegister src) { 358 void AssemblerX86::addss(Type Ty, XmmRegister dst, XmmRegister src) {
359 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 359 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
360 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 360 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
361 EmitUint8(0x0F); 361 EmitUint8(0x0F);
362 EmitUint8(0x58); 362 EmitUint8(0x58);
363 EmitXmmRegisterOperand(dst, src); 363 EmitXmmRegisterOperand(dst, src);
364 } 364 }
365 365
366 void AssemblerX86::addss(Type Ty, XmmRegister dst, const Address &src) { 366 void AssemblerX86::addss(Type Ty, XmmRegister dst, const Address &src) {
367 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 367 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
368 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 368 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
369 EmitUint8(0x0F); 369 EmitUint8(0x0F);
370 EmitUint8(0x58); 370 EmitUint8(0x58);
371 EmitOperand(dst, src); 371 EmitOperand(dst, src);
372 } 372 }
373 373
374 void AssemblerX86::subss(Type Ty, XmmRegister dst, XmmRegister src) { 374 void AssemblerX86::subss(Type Ty, XmmRegister dst, XmmRegister src) {
375 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 375 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
376 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 376 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
377 EmitUint8(0x0F); 377 EmitUint8(0x0F);
378 EmitUint8(0x5C); 378 EmitUint8(0x5C);
379 EmitXmmRegisterOperand(dst, src); 379 EmitXmmRegisterOperand(dst, src);
380 } 380 }
381 381
382 void AssemblerX86::subss(Type Ty, XmmRegister dst, const Address &src) { 382 void AssemblerX86::subss(Type Ty, XmmRegister dst, const Address &src) {
383 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 383 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
384 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 384 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
385 EmitUint8(0x0F); 385 EmitUint8(0x0F);
386 EmitUint8(0x5C); 386 EmitUint8(0x5C);
387 EmitOperand(dst, src); 387 EmitOperand(dst, src);
388 } 388 }
389 389
390 void AssemblerX86::mulss(Type Ty, XmmRegister dst, XmmRegister src) { 390 void AssemblerX86::mulss(Type Ty, XmmRegister dst, XmmRegister src) {
391 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 391 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
392 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 392 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
393 EmitUint8(0x0F); 393 EmitUint8(0x0F);
394 EmitUint8(0x59); 394 EmitUint8(0x59);
395 EmitXmmRegisterOperand(dst, src); 395 EmitXmmRegisterOperand(dst, src);
396 } 396 }
397 397
398 void AssemblerX86::mulss(Type Ty, XmmRegister dst, const Address &src) { 398 void AssemblerX86::mulss(Type Ty, XmmRegister dst, const Address &src) {
399 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 399 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
400 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 400 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
401 EmitUint8(0x0F); 401 EmitUint8(0x0F);
402 EmitUint8(0x59); 402 EmitUint8(0x59);
403 EmitOperand(dst, src); 403 EmitOperand(dst, src);
404 } 404 }
405 405
406 void AssemblerX86::divss(Type Ty, XmmRegister dst, XmmRegister src) { 406 void AssemblerX86::divss(Type Ty, XmmRegister dst, XmmRegister src) {
407 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 407 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
408 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 408 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
409 EmitUint8(0x0F); 409 EmitUint8(0x0F);
410 EmitUint8(0x5E); 410 EmitUint8(0x5E);
411 EmitXmmRegisterOperand(dst, src); 411 EmitXmmRegisterOperand(dst, src);
412 } 412 }
413 413
414 void AssemblerX86::divss(Type Ty, XmmRegister dst, const Address &src) { 414 void AssemblerX86::divss(Type Ty, XmmRegister dst, const Address &src) {
415 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 415 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
416 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 416 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
417 EmitUint8(0x0F); 417 EmitUint8(0x0F);
418 EmitUint8(0x5E); 418 EmitUint8(0x5E);
419 EmitOperand(dst, src); 419 EmitOperand(dst, src);
420 } 420 }
421 421
422 void AssemblerX86::flds(const Address &src) { 422 void AssemblerX86::flds(const Address &src) {
423 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 423 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
424 EmitUint8(0xD9); 424 EmitUint8(0xD9);
425 EmitOperand(0, src); 425 EmitOperand(0, src);
426 } 426 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 473 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
474 EmitUint8(0x0F); 474 EmitUint8(0x0F);
475 EmitUint8(0x11); 475 EmitUint8(0x11);
476 EmitOperand(src, dst); 476 EmitOperand(src, dst);
477 } 477 }
478 478
479 void AssemblerX86::padd(Type Ty, XmmRegister dst, XmmRegister src) { 479 void AssemblerX86::padd(Type Ty, XmmRegister dst, XmmRegister src) {
480 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 480 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
481 EmitUint8(0x66); 481 EmitUint8(0x66);
482 EmitUint8(0x0F); 482 EmitUint8(0x0F);
483 if (Ty == IceType_i8 || Ty == IceType_i1) { 483 if (isByteSizedArithType(Ty)) {
484 EmitUint8(0xFC); 484 EmitUint8(0xFC);
485 } else if (Ty == IceType_i16) { 485 } else if (Ty == IceType_i16) {
486 EmitUint8(0xFD); 486 EmitUint8(0xFD);
487 } else { 487 } else {
488 EmitUint8(0xFE); 488 EmitUint8(0xFE);
489 } 489 }
490 EmitXmmRegisterOperand(dst, src); 490 EmitXmmRegisterOperand(dst, src);
491 } 491 }
492 492
493 void AssemblerX86::padd(Type Ty, XmmRegister dst, const Address &src) { 493 void AssemblerX86::padd(Type Ty, XmmRegister dst, const Address &src) {
494 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 494 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
495 EmitUint8(0x66); 495 EmitUint8(0x66);
496 EmitUint8(0x0F); 496 EmitUint8(0x0F);
497 if (Ty == IceType_i8 || Ty == IceType_i1) { 497 if (isByteSizedArithType(Ty)) {
498 EmitUint8(0xFC); 498 EmitUint8(0xFC);
499 } else if (Ty == IceType_i16) { 499 } else if (Ty == IceType_i16) {
500 EmitUint8(0xFD); 500 EmitUint8(0xFD);
501 } else { 501 } else {
502 EmitUint8(0xFE); 502 EmitUint8(0xFE);
503 } 503 }
504 EmitOperand(dst, src); 504 EmitOperand(dst, src);
505 } 505 }
506 506
507 void AssemblerX86::pand(Type /* Ty */, XmmRegister dst, XmmRegister src) { 507 void AssemblerX86::pand(Type /* Ty */, XmmRegister dst, XmmRegister src) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 EmitUint8(0x66); 565 EmitUint8(0x66);
566 EmitUint8(0x0F); 566 EmitUint8(0x0F);
567 EmitUint8(0xEB); 567 EmitUint8(0xEB);
568 EmitOperand(dst, src); 568 EmitOperand(dst, src);
569 } 569 }
570 570
571 void AssemblerX86::psub(Type Ty, XmmRegister dst, XmmRegister src) { 571 void AssemblerX86::psub(Type Ty, XmmRegister dst, XmmRegister src) {
572 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 572 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
573 EmitUint8(0x66); 573 EmitUint8(0x66);
574 EmitUint8(0x0F); 574 EmitUint8(0x0F);
575 if (Ty == IceType_i8 || Ty == IceType_i1) { 575 if (isByteSizedArithType(Ty)) {
576 EmitUint8(0xF8); 576 EmitUint8(0xF8);
577 } else if (Ty == IceType_i16) { 577 } else if (Ty == IceType_i16) {
578 EmitUint8(0xF9); 578 EmitUint8(0xF9);
579 } else { 579 } else {
580 EmitUint8(0xFA); 580 EmitUint8(0xFA);
581 } 581 }
582 EmitXmmRegisterOperand(dst, src); 582 EmitXmmRegisterOperand(dst, src);
583 } 583 }
584 584
585 void AssemblerX86::psub(Type Ty, XmmRegister dst, const Address &src) { 585 void AssemblerX86::psub(Type Ty, XmmRegister dst, const Address &src) {
586 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 586 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
587 EmitUint8(0x66); 587 EmitUint8(0x66);
588 EmitUint8(0x0F); 588 EmitUint8(0x0F);
589 if (Ty == IceType_i8 || Ty == IceType_i1) { 589 if (isByteSizedArithType(Ty)) {
590 EmitUint8(0xF8); 590 EmitUint8(0xF8);
591 } else if (Ty == IceType_i16) { 591 } else if (Ty == IceType_i16) {
592 EmitUint8(0xF9); 592 EmitUint8(0xF9);
593 } else { 593 } else {
594 EmitUint8(0xFA); 594 EmitUint8(0xFA);
595 } 595 }
596 EmitOperand(dst, src); 596 EmitOperand(dst, src);
597 } 597 }
598 598
599 void AssemblerX86::pxor(Type /* Ty */, XmmRegister dst, XmmRegister src) { 599 void AssemblerX86::pxor(Type /* Ty */, XmmRegister dst, XmmRegister src) {
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 960
961 void AssemblerX86::movmskps(GPRRegister dst, XmmRegister src) { 961 void AssemblerX86::movmskps(GPRRegister dst, XmmRegister src) {
962 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 962 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
963 EmitUint8(0x0F); 963 EmitUint8(0x0F);
964 EmitUint8(0x50); 964 EmitUint8(0x50);
965 EmitXmmRegisterOperand(dst, src); 965 EmitXmmRegisterOperand(dst, src);
966 } 966 }
967 967
968 void AssemblerX86::sqrtss(Type Ty, XmmRegister dst, const Address &src) { 968 void AssemblerX86::sqrtss(Type Ty, XmmRegister dst, const Address &src) {
969 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 969 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
970 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 970 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
971 EmitUint8(0x0F); 971 EmitUint8(0x0F);
972 EmitUint8(0x51); 972 EmitUint8(0x51);
973 EmitOperand(dst, src); 973 EmitOperand(dst, src);
974 } 974 }
975 975
976 void AssemblerX86::sqrtss(Type Ty, XmmRegister dst, XmmRegister src) { 976 void AssemblerX86::sqrtss(Type Ty, XmmRegister dst, XmmRegister src) {
977 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 977 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
978 EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); 978 EmitUint8(isFloat32Asserting32Or64(Ty) ? 0xF3 : 0xF2);
979 EmitUint8(0x0F); 979 EmitUint8(0x0F);
980 EmitUint8(0x51); 980 EmitUint8(0x51);
981 EmitXmmRegisterOperand(dst, src); 981 EmitXmmRegisterOperand(dst, src);
982 } 982 }
983 983
984 void AssemblerX86::xorpd(XmmRegister dst, const Address &src) { 984 void AssemblerX86::xorpd(XmmRegister dst, const Address &src) {
985 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 985 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
986 EmitUint8(0x66); 986 EmitUint8(0x66);
987 EmitUint8(0x0F); 987 EmitUint8(0x0F);
988 EmitUint8(0x57); 988 EmitUint8(0x57);
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1194 EmitUint8(0xF7); 1194 EmitUint8(0xF7);
1195 EmitOperand(0, Operand(reg)); 1195 EmitOperand(0, Operand(reg));
1196 EmitImmediate(BrokenType, immediate); 1196 EmitImmediate(BrokenType, immediate);
1197 } 1197 }
1198 } 1198 }
1199 1199
1200 void AssemblerX86::And(Type Ty, GPRRegister dst, GPRRegister src) { 1200 void AssemblerX86::And(Type Ty, GPRRegister dst, GPRRegister src) {
1201 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1201 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1202 if (Ty == IceType_i16) 1202 if (Ty == IceType_i16)
1203 EmitOperandSizeOverride(); 1203 EmitOperandSizeOverride();
1204 if (Ty == IceType_i8 || Ty == IceType_i1) 1204 if (isByteSizedType(Ty))
1205 EmitUint8(0x22); 1205 EmitUint8(0x22);
1206 else 1206 else
1207 EmitUint8(0x23); 1207 EmitUint8(0x23);
1208 EmitRegisterOperand(dst, src); 1208 EmitRegisterOperand(dst, src);
1209 } 1209 }
1210 1210
1211 void AssemblerX86::And(Type Ty, GPRRegister dst, const Address &address) { 1211 void AssemblerX86::And(Type Ty, GPRRegister dst, const Address &address) {
1212 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1212 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1213 if (Ty == IceType_i16) 1213 if (Ty == IceType_i16)
1214 EmitOperandSizeOverride(); 1214 EmitOperandSizeOverride();
1215 if (Ty == IceType_i8 || Ty == IceType_i1) 1215 if (isByteSizedType(Ty))
1216 EmitUint8(0x22); 1216 EmitUint8(0x22);
1217 else 1217 else
1218 EmitUint8(0x23); 1218 EmitUint8(0x23);
1219 EmitOperand(dst, address); 1219 EmitOperand(dst, address);
1220 } 1220 }
1221 1221
1222 void AssemblerX86::And(Type Ty, GPRRegister dst, const Immediate &imm) { 1222 void AssemblerX86::And(Type Ty, GPRRegister dst, const Immediate &imm) {
1223 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1223 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1224 if (Ty == IceType_i8 || Ty == IceType_i1) { 1224 if (isByteSizedType(Ty)) {
1225 EmitComplexI8(4, Operand(dst), imm); 1225 EmitComplexI8(4, Operand(dst), imm);
1226 return; 1226 return;
1227 } 1227 }
1228 if (Ty == IceType_i16) 1228 if (Ty == IceType_i16)
1229 EmitOperandSizeOverride(); 1229 EmitOperandSizeOverride();
1230 EmitComplex(Ty, 4, Operand(dst), imm); 1230 EmitComplex(Ty, 4, Operand(dst), imm);
1231 } 1231 }
1232 1232
1233 void AssemblerX86::Or(Type Ty, GPRRegister dst, GPRRegister src) { 1233 void AssemblerX86::Or(Type Ty, GPRRegister dst, GPRRegister src) {
1234 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1234 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1235 if (Ty == IceType_i16) 1235 if (Ty == IceType_i16)
1236 EmitOperandSizeOverride(); 1236 EmitOperandSizeOverride();
1237 if (Ty == IceType_i8 || Ty == IceType_i1) 1237 if (isByteSizedType(Ty))
1238 EmitUint8(0x0A); 1238 EmitUint8(0x0A);
1239 else 1239 else
1240 EmitUint8(0x0B); 1240 EmitUint8(0x0B);
1241 EmitRegisterOperand(dst, src); 1241 EmitRegisterOperand(dst, src);
1242 } 1242 }
1243 1243
1244 void AssemblerX86::Or(Type Ty, GPRRegister dst, const Address &address) { 1244 void AssemblerX86::Or(Type Ty, GPRRegister dst, const Address &address) {
1245 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1245 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1246 if (Ty == IceType_i16) 1246 if (Ty == IceType_i16)
1247 EmitOperandSizeOverride(); 1247 EmitOperandSizeOverride();
1248 if (Ty == IceType_i8 || Ty == IceType_i1) 1248 if (isByteSizedType(Ty))
1249 EmitUint8(0x0A); 1249 EmitUint8(0x0A);
1250 else 1250 else
1251 EmitUint8(0x0B); 1251 EmitUint8(0x0B);
1252 EmitOperand(dst, address); 1252 EmitOperand(dst, address);
1253 } 1253 }
1254 1254
1255 void AssemblerX86::Or(Type Ty, GPRRegister dst, const Immediate &imm) { 1255 void AssemblerX86::Or(Type Ty, GPRRegister dst, const Immediate &imm) {
1256 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1256 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1257 if (Ty == IceType_i8 || Ty == IceType_i1) { 1257 if (isByteSizedType(Ty)) {
1258 EmitComplexI8(1, Operand(dst), imm); 1258 EmitComplexI8(1, Operand(dst), imm);
1259 return; 1259 return;
1260 } 1260 }
1261 if (Ty == IceType_i16) 1261 if (Ty == IceType_i16)
1262 EmitOperandSizeOverride(); 1262 EmitOperandSizeOverride();
1263 EmitComplex(Ty, 1, Operand(dst), imm); 1263 EmitComplex(Ty, 1, Operand(dst), imm);
1264 } 1264 }
1265 1265
1266 void AssemblerX86::Xor(Type Ty, GPRRegister dst, GPRRegister src) { 1266 void AssemblerX86::Xor(Type Ty, GPRRegister dst, GPRRegister src) {
1267 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1267 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1268 if (Ty == IceType_i16) 1268 if (Ty == IceType_i16)
1269 EmitOperandSizeOverride(); 1269 EmitOperandSizeOverride();
1270 if (Ty == IceType_i8 || Ty == IceType_i1) 1270 if (isByteSizedType(Ty))
1271 EmitUint8(0x32); 1271 EmitUint8(0x32);
1272 else 1272 else
1273 EmitUint8(0x33); 1273 EmitUint8(0x33);
1274 EmitRegisterOperand(dst, src); 1274 EmitRegisterOperand(dst, src);
1275 } 1275 }
1276 1276
1277 void AssemblerX86::Xor(Type Ty, GPRRegister dst, const Address &address) { 1277 void AssemblerX86::Xor(Type Ty, GPRRegister dst, const Address &address) {
1278 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1278 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1279 if (Ty == IceType_i16) 1279 if (Ty == IceType_i16)
1280 EmitOperandSizeOverride(); 1280 EmitOperandSizeOverride();
1281 if (Ty == IceType_i8 || Ty == IceType_i1) 1281 if (isByteSizedType(Ty))
1282 EmitUint8(0x32); 1282 EmitUint8(0x32);
1283 else 1283 else
1284 EmitUint8(0x33); 1284 EmitUint8(0x33);
1285 EmitOperand(dst, address); 1285 EmitOperand(dst, address);
1286 } 1286 }
1287 1287
1288 void AssemblerX86::Xor(Type Ty, GPRRegister dst, const Immediate &imm) { 1288 void AssemblerX86::Xor(Type Ty, GPRRegister dst, const Immediate &imm) {
1289 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1289 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1290 if (Ty == IceType_i8 || Ty == IceType_i1) { 1290 if (isByteSizedType(Ty)) {
1291 EmitComplexI8(6, Operand(dst), imm); 1291 EmitComplexI8(6, Operand(dst), imm);
1292 return; 1292 return;
1293 } 1293 }
1294 if (Ty == IceType_i16) 1294 if (Ty == IceType_i16)
1295 EmitOperandSizeOverride(); 1295 EmitOperandSizeOverride();
1296 EmitComplex(Ty, 6, Operand(dst), imm); 1296 EmitComplex(Ty, 6, Operand(dst), imm);
1297 } 1297 }
1298 1298
1299 void AssemblerX86::add(Type Ty, GPRRegister dst, GPRRegister src) { 1299 void AssemblerX86::add(Type Ty, GPRRegister dst, GPRRegister src) {
1300 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1300 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1301 if (Ty == IceType_i16) 1301 if (Ty == IceType_i16)
1302 EmitOperandSizeOverride(); 1302 EmitOperandSizeOverride();
1303 if (Ty == IceType_i8 || Ty == IceType_i1) 1303 if (isByteSizedArithType(Ty))
1304 EmitUint8(0x02); 1304 EmitUint8(0x02);
1305 else 1305 else
1306 EmitUint8(0x03); 1306 EmitUint8(0x03);
1307 EmitRegisterOperand(dst, src); 1307 EmitRegisterOperand(dst, src);
1308 } 1308 }
1309 1309
1310 void AssemblerX86::add(Type Ty, GPRRegister reg, const Address &address) { 1310 void AssemblerX86::add(Type Ty, GPRRegister reg, const Address &address) {
1311 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1311 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1312 if (Ty == IceType_i16) 1312 if (Ty == IceType_i16)
1313 EmitOperandSizeOverride(); 1313 EmitOperandSizeOverride();
1314 if (Ty == IceType_i8 || Ty == IceType_i1) 1314 if (isByteSizedArithType(Ty))
1315 EmitUint8(0x02); 1315 EmitUint8(0x02);
1316 else 1316 else
1317 EmitUint8(0x03); 1317 EmitUint8(0x03);
1318 EmitOperand(reg, address); 1318 EmitOperand(reg, address);
1319 } 1319 }
1320 1320
1321 void AssemblerX86::add(Type Ty, GPRRegister reg, const Immediate &imm) { 1321 void AssemblerX86::add(Type Ty, GPRRegister reg, const Immediate &imm) {
1322 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1322 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1323 if (Ty == IceType_i8 || Ty == IceType_i1) { 1323 if (isByteSizedArithType(Ty)) {
1324 EmitComplexI8(0, Operand(reg), imm); 1324 EmitComplexI8(0, Operand(reg), imm);
1325 return; 1325 return;
1326 } 1326 }
1327 if (Ty == IceType_i16) 1327 if (Ty == IceType_i16)
1328 EmitOperandSizeOverride(); 1328 EmitOperandSizeOverride();
1329 EmitComplex(Ty, 0, Operand(reg), imm); 1329 EmitComplex(Ty, 0, Operand(reg), imm);
1330 } 1330 }
1331 1331
1332 void AssemblerX86::adc(Type Ty, GPRRegister dst, GPRRegister src) { 1332 void AssemblerX86::adc(Type Ty, GPRRegister dst, GPRRegister src) {
1333 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1333 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1334 if (Ty == IceType_i16) 1334 if (Ty == IceType_i16)
1335 EmitOperandSizeOverride(); 1335 EmitOperandSizeOverride();
1336 if (Ty == IceType_i8 || Ty == IceType_i1) 1336 if (isByteSizedArithType(Ty))
1337 EmitUint8(0x12); 1337 EmitUint8(0x12);
1338 else 1338 else
1339 EmitUint8(0x13); 1339 EmitUint8(0x13);
1340 EmitRegisterOperand(dst, src); 1340 EmitRegisterOperand(dst, src);
1341 } 1341 }
1342 1342
1343 void AssemblerX86::adc(Type Ty, GPRRegister dst, const Address &address) { 1343 void AssemblerX86::adc(Type Ty, GPRRegister dst, const Address &address) {
1344 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1344 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1345 if (Ty == IceType_i16) 1345 if (Ty == IceType_i16)
1346 EmitOperandSizeOverride(); 1346 EmitOperandSizeOverride();
1347 if (Ty == IceType_i8 || Ty == IceType_i1) 1347 if (isByteSizedArithType(Ty))
1348 EmitUint8(0x12); 1348 EmitUint8(0x12);
1349 else 1349 else
1350 EmitUint8(0x13); 1350 EmitUint8(0x13);
1351 EmitOperand(dst, address); 1351 EmitOperand(dst, address);
1352 } 1352 }
1353 1353
1354 void AssemblerX86::adc(Type Ty, GPRRegister reg, const Immediate &imm) { 1354 void AssemblerX86::adc(Type Ty, GPRRegister reg, const Immediate &imm) {
1355 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1355 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1356 if (Ty == IceType_i8 || Ty == IceType_i1) { 1356 if (isByteSizedArithType(Ty)) {
1357 EmitComplexI8(2, Operand(reg), imm); 1357 EmitComplexI8(2, Operand(reg), imm);
1358 return; 1358 return;
1359 } 1359 }
1360 if (Ty == IceType_i16) 1360 if (Ty == IceType_i16)
1361 EmitOperandSizeOverride(); 1361 EmitOperandSizeOverride();
1362 EmitComplex(Ty, 2, Operand(reg), imm); 1362 EmitComplex(Ty, 2, Operand(reg), imm);
1363 } 1363 }
1364 1364
1365 void AssemblerX86::sub(Type Ty, GPRRegister dst, GPRRegister src) { 1365 void AssemblerX86::sub(Type Ty, GPRRegister dst, GPRRegister src) {
1366 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1366 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1367 if (Ty == IceType_i16) 1367 if (Ty == IceType_i16)
1368 EmitOperandSizeOverride(); 1368 EmitOperandSizeOverride();
1369 if (Ty == IceType_i8 || Ty == IceType_i1) 1369 if (isByteSizedArithType(Ty))
1370 EmitUint8(0x2A); 1370 EmitUint8(0x2A);
1371 else 1371 else
1372 EmitUint8(0x2B); 1372 EmitUint8(0x2B);
1373 EmitRegisterOperand(dst, src); 1373 EmitRegisterOperand(dst, src);
1374 } 1374 }
1375 1375
1376 void AssemblerX86::sub(Type Ty, GPRRegister reg, const Address &address) { 1376 void AssemblerX86::sub(Type Ty, GPRRegister reg, const Address &address) {
1377 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1377 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1378 if (Ty == IceType_i16) 1378 if (Ty == IceType_i16)
1379 EmitOperandSizeOverride(); 1379 EmitOperandSizeOverride();
1380 if (Ty == IceType_i8 || Ty == IceType_i1) 1380 if (isByteSizedArithType(Ty))
1381 EmitUint8(0x2A); 1381 EmitUint8(0x2A);
1382 else 1382 else
1383 EmitUint8(0x2B); 1383 EmitUint8(0x2B);
1384 EmitOperand(reg, address); 1384 EmitOperand(reg, address);
1385 } 1385 }
1386 1386
1387 void AssemblerX86::sub(Type Ty, GPRRegister reg, const Immediate &imm) { 1387 void AssemblerX86::sub(Type Ty, GPRRegister reg, const Immediate &imm) {
1388 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1388 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1389 if (Ty == IceType_i8 || Ty == IceType_i1) { 1389 if (isByteSizedArithType(Ty)) {
1390 EmitComplexI8(5, Operand(reg), imm); 1390 EmitComplexI8(5, Operand(reg), imm);
1391 return; 1391 return;
1392 } 1392 }
1393 if (Ty == IceType_i16) 1393 if (Ty == IceType_i16)
1394 EmitOperandSizeOverride(); 1394 EmitOperandSizeOverride();
1395 EmitComplex(Ty, 5, Operand(reg), imm); 1395 EmitComplex(Ty, 5, Operand(reg), imm);
1396 } 1396 }
1397 1397
1398 void AssemblerX86::sbb(Type Ty, GPRRegister dst, GPRRegister src) { 1398 void AssemblerX86::sbb(Type Ty, GPRRegister dst, GPRRegister src) {
1399 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1399 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1400 if (Ty == IceType_i16) 1400 if (Ty == IceType_i16)
1401 EmitOperandSizeOverride(); 1401 EmitOperandSizeOverride();
1402 if (Ty == IceType_i8 || Ty == IceType_i1) 1402 if (isByteSizedArithType(Ty))
1403 EmitUint8(0x1A); 1403 EmitUint8(0x1A);
1404 else 1404 else
1405 EmitUint8(0x1B); 1405 EmitUint8(0x1B);
1406 EmitRegisterOperand(dst, src); 1406 EmitRegisterOperand(dst, src);
1407 } 1407 }
1408 1408
1409 void AssemblerX86::sbb(Type Ty, GPRRegister dst, const Address &address) { 1409 void AssemblerX86::sbb(Type Ty, GPRRegister dst, const Address &address) {
1410 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1410 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1411 if (Ty == IceType_i16) 1411 if (Ty == IceType_i16)
1412 EmitOperandSizeOverride(); 1412 EmitOperandSizeOverride();
1413 if (Ty == IceType_i8 || Ty == IceType_i1) 1413 if (isByteSizedArithType(Ty))
1414 EmitUint8(0x1A); 1414 EmitUint8(0x1A);
1415 else 1415 else
1416 EmitUint8(0x1B); 1416 EmitUint8(0x1B);
1417 EmitOperand(dst, address); 1417 EmitOperand(dst, address);
1418 } 1418 }
1419 1419
1420 void AssemblerX86::sbb(Type Ty, GPRRegister reg, const Immediate &imm) { 1420 void AssemblerX86::sbb(Type Ty, GPRRegister reg, const Immediate &imm) {
1421 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1421 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1422 if (Ty == IceType_i8 || Ty == IceType_i1) { 1422 if (isByteSizedArithType(Ty)) {
1423 EmitComplexI8(3, Operand(reg), imm); 1423 EmitComplexI8(3, Operand(reg), imm);
1424 return; 1424 return;
1425 } 1425 }
1426 if (Ty == IceType_i16) 1426 if (Ty == IceType_i16)
1427 EmitOperandSizeOverride(); 1427 EmitOperandSizeOverride();
1428 EmitComplex(Ty, 3, Operand(reg), imm); 1428 EmitComplex(Ty, 3, Operand(reg), imm);
1429 } 1429 }
1430 1430
1431 void AssemblerX86::cbw() { 1431 void AssemblerX86::cbw() {
1432 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1432 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1433 EmitOperandSizeOverride(); 1433 EmitOperandSizeOverride();
1434 EmitUint8(0x98); 1434 EmitUint8(0x98);
1435 } 1435 }
1436 1436
1437 void AssemblerX86::cwd() { 1437 void AssemblerX86::cwd() {
1438 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1438 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1439 EmitOperandSizeOverride(); 1439 EmitOperandSizeOverride();
1440 EmitUint8(0x99); 1440 EmitUint8(0x99);
1441 } 1441 }
1442 1442
1443 void AssemblerX86::cdq() { 1443 void AssemblerX86::cdq() {
1444 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1444 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1445 EmitUint8(0x99); 1445 EmitUint8(0x99);
1446 } 1446 }
1447 1447
1448 void AssemblerX86::div(Type Ty, GPRRegister reg) { 1448 void AssemblerX86::div(Type Ty, GPRRegister reg) {
1449 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1449 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1450 if (Ty == IceType_i16) 1450 if (Ty == IceType_i16)
1451 EmitOperandSizeOverride(); 1451 EmitOperandSizeOverride();
1452 if (Ty == IceType_i8 || Ty == IceType_i1) 1452 if (isByteSizedArithType(Ty))
1453 EmitUint8(0xF6); 1453 EmitUint8(0xF6);
1454 else 1454 else
1455 EmitUint8(0xF7); 1455 EmitUint8(0xF7);
1456 EmitRegisterOperand(6, reg); 1456 EmitRegisterOperand(6, reg);
1457 } 1457 }
1458 1458
1459 void AssemblerX86::div(Type Ty, const Address &addr) { 1459 void AssemblerX86::div(Type Ty, const Address &addr) {
1460 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1460 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1461 if (Ty == IceType_i16) 1461 if (Ty == IceType_i16)
1462 EmitOperandSizeOverride(); 1462 EmitOperandSizeOverride();
1463 if (Ty == IceType_i8 || Ty == IceType_i1) 1463 if (isByteSizedArithType(Ty))
1464 EmitUint8(0xF6); 1464 EmitUint8(0xF6);
1465 else 1465 else
1466 EmitUint8(0xF7); 1466 EmitUint8(0xF7);
1467 EmitOperand(6, addr); 1467 EmitOperand(6, addr);
1468 } 1468 }
1469 1469
1470 void AssemblerX86::idiv(Type Ty, GPRRegister reg) { 1470 void AssemblerX86::idiv(Type Ty, GPRRegister reg) {
1471 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1471 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1472 if (Ty == IceType_i16) 1472 if (Ty == IceType_i16)
1473 EmitOperandSizeOverride(); 1473 EmitOperandSizeOverride();
1474 if (Ty == IceType_i8 || Ty == IceType_i1) 1474 if (isByteSizedArithType(Ty))
1475 EmitUint8(0xF6); 1475 EmitUint8(0xF6);
1476 else 1476 else
1477 EmitUint8(0xF7); 1477 EmitUint8(0xF7);
1478 EmitRegisterOperand(7, reg); 1478 EmitRegisterOperand(7, reg);
1479 } 1479 }
1480 1480
1481 void AssemblerX86::idiv(Type Ty, const Address &addr) { 1481 void AssemblerX86::idiv(Type Ty, const Address &addr) {
1482 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1482 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1483 if (Ty == IceType_i16) 1483 if (Ty == IceType_i16)
1484 EmitOperandSizeOverride(); 1484 EmitOperandSizeOverride();
1485 if (Ty == IceType_i8 || Ty == IceType_i1) 1485 if (isByteSizedArithType(Ty))
1486 EmitUint8(0xF6); 1486 EmitUint8(0xF6);
1487 else 1487 else
1488 EmitUint8(0xF7); 1488 EmitUint8(0xF7);
1489 EmitOperand(7, addr); 1489 EmitOperand(7, addr);
1490 } 1490 }
1491 1491
1492 void AssemblerX86::imull(GPRRegister dst, GPRRegister src) { 1492 void AssemblerX86::imull(GPRRegister dst, GPRRegister src) {
1493 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1493 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1494 EmitUint8(0x0F); 1494 EmitUint8(0x0F);
1495 EmitUint8(0xAF); 1495 EmitUint8(0xAF);
(...skipping 23 matching lines...) Expand all
1519 void AssemblerX86::imull(const Address &address) { 1519 void AssemblerX86::imull(const Address &address) {
1520 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1520 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1521 EmitUint8(0xF7); 1521 EmitUint8(0xF7);
1522 EmitOperand(5, address); 1522 EmitOperand(5, address);
1523 } 1523 }
1524 1524
1525 void AssemblerX86::mul(Type Ty, GPRRegister reg) { 1525 void AssemblerX86::mul(Type Ty, GPRRegister reg) {
1526 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1526 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1527 if (Ty == IceType_i16) 1527 if (Ty == IceType_i16)
1528 EmitOperandSizeOverride(); 1528 EmitOperandSizeOverride();
1529 if (Ty == IceType_i8 || Ty == IceType_i1) 1529 if (isByteSizedArithType(Ty))
1530 EmitUint8(0xF6); 1530 EmitUint8(0xF6);
1531 else 1531 else
1532 EmitUint8(0xF7); 1532 EmitUint8(0xF7);
1533 EmitRegisterOperand(4, reg); 1533 EmitRegisterOperand(4, reg);
1534 } 1534 }
1535 1535
1536 void AssemblerX86::mul(Type Ty, const Address &address) { 1536 void AssemblerX86::mul(Type Ty, const Address &address) {
1537 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1537 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1538 if (Ty == IceType_i16) 1538 if (Ty == IceType_i16)
1539 EmitOperandSizeOverride(); 1539 EmitOperandSizeOverride();
1540 if (Ty == IceType_i8 || Ty == IceType_i1) 1540 if (isByteSizedArithType(Ty))
1541 EmitUint8(0xF6); 1541 EmitUint8(0xF6);
1542 else 1542 else
1543 EmitUint8(0xF7); 1543 EmitUint8(0xF7);
1544 EmitOperand(4, address); 1544 EmitOperand(4, address);
1545 } 1545 }
1546 1546
1547 void AssemblerX86::incl(GPRRegister reg) { 1547 void AssemblerX86::incl(GPRRegister reg) {
1548 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1548 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1549 EmitUint8(0x40 + reg); 1549 EmitUint8(0x40 + reg);
1550 } 1550 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1643 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1643 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1644 EmitUint8(0x0F); 1644 EmitUint8(0x0F);
1645 EmitUint8(0xAD); 1645 EmitUint8(0xAD);
1646 EmitOperand(src, Operand(dst)); 1646 EmitOperand(src, Operand(dst));
1647 } 1647 }
1648 1648
1649 void AssemblerX86::neg(Type Ty, GPRRegister reg) { 1649 void AssemblerX86::neg(Type Ty, GPRRegister reg) {
1650 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1650 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1651 if (Ty == IceType_i16) 1651 if (Ty == IceType_i16)
1652 EmitOperandSizeOverride(); 1652 EmitOperandSizeOverride();
1653 if (Ty == IceType_i8 || Ty == IceType_i1) 1653 if (isByteSizedArithType(Ty))
1654 EmitUint8(0xF6); 1654 EmitUint8(0xF6);
1655 else 1655 else
1656 EmitUint8(0xF7); 1656 EmitUint8(0xF7);
1657 EmitRegisterOperand(3, reg); 1657 EmitRegisterOperand(3, reg);
1658 } 1658 }
1659 1659
1660 void AssemblerX86::neg(Type Ty, const Address &addr) { 1660 void AssemblerX86::neg(Type Ty, const Address &addr) {
1661 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1661 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1662 if (Ty == IceType_i16) 1662 if (Ty == IceType_i16)
1663 EmitOperandSizeOverride(); 1663 EmitOperandSizeOverride();
1664 if (Ty == IceType_i8 || Ty == IceType_i1) 1664 if (isByteSizedArithType(Ty))
1665 EmitUint8(0xF6); 1665 EmitUint8(0xF6);
1666 else 1666 else
1667 EmitUint8(0xF7); 1667 EmitUint8(0xF7);
1668 EmitOperand(3, addr); 1668 EmitOperand(3, addr);
1669 } 1669 }
1670 1670
1671 void AssemblerX86::notl(GPRRegister reg) { 1671 void AssemblerX86::notl(GPRRegister reg) {
1672 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1672 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1673 EmitUint8(0xF7); 1673 EmitUint8(0xF7);
1674 EmitUint8(0xD0 | reg); 1674 EmitUint8(0xD0 | reg);
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1893 void AssemblerX86::lock() { 1893 void AssemblerX86::lock() {
1894 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1894 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1895 EmitUint8(0xF0); 1895 EmitUint8(0xF0);
1896 } 1896 }
1897 1897
1898 void AssemblerX86::cmpxchg(Type Ty, const Address &address, GPRRegister reg) { 1898 void AssemblerX86::cmpxchg(Type Ty, const Address &address, GPRRegister reg) {
1899 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1899 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1900 if (Ty == IceType_i16) 1900 if (Ty == IceType_i16)
1901 EmitOperandSizeOverride(); 1901 EmitOperandSizeOverride();
1902 EmitUint8(0x0F); 1902 EmitUint8(0x0F);
1903 if (Ty == IceType_i8 || Ty == IceType_i1) 1903 if (isByteSizedArithType(Ty))
1904 EmitUint8(0xB0); 1904 EmitUint8(0xB0);
1905 else 1905 else
1906 EmitUint8(0xB1); 1906 EmitUint8(0xB1);
1907 EmitOperand(reg, address); 1907 EmitOperand(reg, address);
1908 } 1908 }
1909 1909
1910 void AssemblerX86::cmpxchg8b(const Address &address) { 1910 void AssemblerX86::cmpxchg8b(const Address &address) {
1911 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1911 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1912 EmitUint8(0x0F); 1912 EmitUint8(0x0F);
1913 EmitUint8(0xC7); 1913 EmitUint8(0xC7);
1914 EmitOperand(1, address); 1914 EmitOperand(1, address);
1915 } 1915 }
1916 1916
1917 void AssemblerX86::xadd(Type Ty, const Address &addr, GPRRegister reg) { 1917 void AssemblerX86::xadd(Type Ty, const Address &addr, GPRRegister reg) {
1918 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1918 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1919 if (Ty == IceType_i16) 1919 if (Ty == IceType_i16)
1920 EmitOperandSizeOverride(); 1920 EmitOperandSizeOverride();
1921 EmitUint8(0x0F); 1921 EmitUint8(0x0F);
1922 if (Ty == IceType_i8 || Ty == IceType_i1) 1922 if (isByteSizedArithType(Ty))
1923 EmitUint8(0xC0); 1923 EmitUint8(0xC0);
1924 else 1924 else
1925 EmitUint8(0xC1); 1925 EmitUint8(0xC1);
1926 EmitOperand(reg, addr); 1926 EmitOperand(reg, addr);
1927 } 1927 }
1928 1928
1929 void AssemblerX86::xchg(Type Ty, const Address &addr, GPRRegister reg) { 1929 void AssemblerX86::xchg(Type Ty, const Address &addr, GPRRegister reg) {
1930 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1930 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1931 if (Ty == IceType_i16) 1931 if (Ty == IceType_i16)
1932 EmitOperandSizeOverride(); 1932 EmitOperandSizeOverride();
1933 if (Ty == IceType_i8 || Ty == IceType_i1) 1933 if (isByteSizedArithType(Ty))
1934 EmitUint8(0x86); 1934 EmitUint8(0x86);
1935 else 1935 else
1936 EmitUint8(0x87); 1936 EmitUint8(0x87);
1937 EmitOperand(reg, addr); 1937 EmitOperand(reg, addr);
1938 } 1938 }
1939 1939
1940 void AssemblerX86::Align(intptr_t alignment, intptr_t offset) { 1940 void AssemblerX86::Align(intptr_t alignment, intptr_t offset) {
1941 assert(llvm::isPowerOf2_32(alignment)); 1941 assert(llvm::isPowerOf2_32(alignment));
1942 intptr_t pos = offset + buffer_.GetPosition(); 1942 intptr_t pos = offset + buffer_.GetPosition();
1943 intptr_t mod = pos & (alignment - 1); 1943 intptr_t mod = pos & (alignment - 1);
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2072 void AssemblerX86::EmitGenericShift(int rm, const Operand &operand, 2072 void AssemblerX86::EmitGenericShift(int rm, const Operand &operand,
2073 GPRRegister shifter) { 2073 GPRRegister shifter) {
2074 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2074 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2075 assert(shifter == RegX8632::Encoded_Reg_ecx); 2075 assert(shifter == RegX8632::Encoded_Reg_ecx);
2076 EmitUint8(0xD3); 2076 EmitUint8(0xD3);
2077 EmitOperand(rm, Operand(operand)); 2077 EmitOperand(rm, Operand(operand));
2078 } 2078 }
2079 2079
2080 } // end of namespace x86 2080 } // end of namespace x86
2081 } // end of namespace Ice 2081 } // end of namespace Ice
OLDNEW
« src/IceTargetLoweringX8632.cpp ('K') | « src/assembler_ia32.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698