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

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

Powered by Google App Engine
This is Rietveld 408576698