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

Side by Side Diff: src/assembler_ia32.h

Issue 595093002: Handle "inplace" ops and unary ops w/ assembler (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
« no previous file with comments | « src/IceRegistersX8632.h ('k') | src/assembler_ia32.cpp » ('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 (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.h - Assembler for x86-32 ----------------===// 7 //===- subzero/src/assembler_ia32.h - Assembler for x86-32 ----------------===//
8 // 8 //
9 // The Subzero Code Generator 9 // The Subzero Code Generator
10 // 10 //
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 public: 329 public:
330 explicit AssemblerX86(bool use_far_branches = false) : buffer_(*this) { 330 explicit AssemblerX86(bool use_far_branches = false) : buffer_(*this) {
331 // This mode is only needed and implemented for MIPS and ARM. 331 // This mode is only needed and implemented for MIPS and ARM.
332 assert(!use_far_branches); 332 assert(!use_far_branches);
333 } 333 }
334 ~AssemblerX86() {} 334 ~AssemblerX86() {}
335 335
336 static const bool kNearJump = true; 336 static const bool kNearJump = true;
337 static const bool kFarJump = false; 337 static const bool kFarJump = false;
338 338
339 // Operations to emit GPR instructions (and dispatch on operand type).
340 typedef void (AssemblerX86::*TypedEmitGPR)(Type, GPRRegister);
341 typedef void (AssemblerX86::*TypedEmitAddr)(Type, const Address &);
342 struct GPREmitterOneOp {
343 TypedEmitGPR Reg;
344 TypedEmitAddr Addr;
345 };
346
347 typedef void (AssemblerX86::*TypedEmitGPRGPR)(Type, GPRRegister, GPRRegister);
348 typedef void (AssemblerX86::*TypedEmitGPRAddr)(Type, GPRRegister,
349 const Address &);
350 typedef void (AssemblerX86::*TypedEmitGPRImm)(Type, GPRRegister,
351 const Immediate &);
352 struct GPREmitterRegOp {
353 TypedEmitGPRGPR GPRGPR;
354 TypedEmitGPRAddr GPRAddr;
355 TypedEmitGPRImm GPRImm;
356 };
357
339 // Operations to emit XMM instructions (and dispatch on operand type). 358 // Operations to emit XMM instructions (and dispatch on operand type).
340 typedef void (AssemblerX86::*TypedEmitXmmXmm)(Type, XmmRegister, XmmRegister); 359 typedef void (AssemblerX86::*TypedEmitXmmXmm)(Type, XmmRegister, XmmRegister);
341 typedef void (AssemblerX86::*TypedEmitXmmAddr)(Type, XmmRegister, 360 typedef void (AssemblerX86::*TypedEmitXmmAddr)(Type, XmmRegister,
342 const Address &); 361 const Address &);
343 typedef void (AssemblerX86::*TypedEmitAddrXmm)(Type, const Address &, 362 typedef void (AssemblerX86::*TypedEmitAddrXmm)(Type, const Address &,
344 XmmRegister); 363 XmmRegister);
345 struct TypedXmmEmitters { 364 struct XmmEmitterTwoOps {
346 TypedEmitXmmXmm XmmXmm; 365 TypedEmitXmmXmm XmmXmm;
347 TypedEmitXmmAddr XmmAddr; 366 TypedEmitXmmAddr XmmAddr;
348 TypedEmitAddrXmm AddrXmm; 367 TypedEmitAddrXmm AddrXmm;
349 }; 368 };
350 369
351 /* 370 /*
352 * Emit Machine Instructions. 371 * Emit Machine Instructions.
353 */ 372 */
354 void call(GPRRegister reg); 373 void call(GPRRegister reg);
355 void call(const Address &address); 374 void call(const Address &address);
(...skipping 30 matching lines...) Expand all
386 void movb(const Address &dst, ByteRegister src); 405 void movb(const Address &dst, ByteRegister src);
387 void movb(const Address &dst, const Immediate &imm); 406 void movb(const Address &dst, const Immediate &imm);
388 407
389 void movzxw(GPRRegister dst, GPRRegister src); 408 void movzxw(GPRRegister dst, GPRRegister src);
390 void movzxw(GPRRegister dst, const Address &src); 409 void movzxw(GPRRegister dst, const Address &src);
391 void movsxw(GPRRegister dst, GPRRegister src); 410 void movsxw(GPRRegister dst, GPRRegister src);
392 void movsxw(GPRRegister dst, const Address &src); 411 void movsxw(GPRRegister dst, const Address &src);
393 void movw(GPRRegister dst, const Address &src); 412 void movw(GPRRegister dst, const Address &src);
394 void movw(const Address &dst, GPRRegister src); 413 void movw(const Address &dst, GPRRegister src);
395 414
396 void leal(GPRRegister dst, const Address &src); 415 void lea(Type Ty, GPRRegister dst, const Address &src);
397 416
398 void cmov(CondX86::BrCond cond, GPRRegister dst, GPRRegister src); 417 void cmov(CondX86::BrCond cond, GPRRegister dst, GPRRegister src);
399 418
400 void rep_movsb(); 419 void rep_movsb();
401 420
402 void movss(XmmRegister dst, const Address &src); 421 void movss(XmmRegister dst, const Address &src);
403 void movss(const Address &dst, XmmRegister src); 422 void movss(const Address &dst, XmmRegister src);
404 void movss(XmmRegister dst, XmmRegister src); 423 void movss(XmmRegister dst, XmmRegister src);
405 424
406 void movd(XmmRegister dst, GPRRegister src); 425 void movd(XmmRegister dst, GPRRegister src);
426 void movd(XmmRegister dst, const Address &src);
407 void movd(GPRRegister dst, XmmRegister src); 427 void movd(GPRRegister dst, XmmRegister src);
428 void movd(const Address &dst, XmmRegister src);
408 429
409 void movq(const Address &dst, XmmRegister src); 430 void movq(const Address &dst, XmmRegister src);
410 void movq(XmmRegister dst, const Address &src); 431 void movq(XmmRegister dst, const Address &src);
411 432
412 void addss(Type Ty, XmmRegister dst, XmmRegister src); 433 void addss(Type Ty, XmmRegister dst, XmmRegister src);
413 void addss(Type Ty, XmmRegister dst, const Address &src); 434 void addss(Type Ty, XmmRegister dst, const Address &src);
414 void subss(Type Ty, XmmRegister dst, XmmRegister src); 435 void subss(Type Ty, XmmRegister dst, XmmRegister src);
415 void subss(Type Ty, XmmRegister dst, const Address &src); 436 void subss(Type Ty, XmmRegister dst, const Address &src);
416 void mulss(Type Ty, XmmRegister dst, XmmRegister src); 437 void mulss(Type Ty, XmmRegister dst, XmmRegister src);
417 void mulss(Type Ty, XmmRegister dst, const Address &src); 438 void mulss(Type Ty, XmmRegister dst, const Address &src);
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 void sarl(GPRRegister reg, const Immediate &imm); 636 void sarl(GPRRegister reg, const Immediate &imm);
616 void sarl(GPRRegister operand, GPRRegister shifter); 637 void sarl(GPRRegister operand, GPRRegister shifter);
617 void sarl(const Address &address, GPRRegister shifter); 638 void sarl(const Address &address, GPRRegister shifter);
618 void shld(GPRRegister dst, GPRRegister src); 639 void shld(GPRRegister dst, GPRRegister src);
619 void shld(GPRRegister dst, GPRRegister src, const Immediate &imm); 640 void shld(GPRRegister dst, GPRRegister src, const Immediate &imm);
620 void shld(const Address &operand, GPRRegister src); 641 void shld(const Address &operand, GPRRegister src);
621 void shrd(GPRRegister dst, GPRRegister src); 642 void shrd(GPRRegister dst, GPRRegister src);
622 void shrd(GPRRegister dst, GPRRegister src, const Immediate &imm); 643 void shrd(GPRRegister dst, GPRRegister src, const Immediate &imm);
623 void shrd(const Address &dst, GPRRegister src); 644 void shrd(const Address &dst, GPRRegister src);
624 645
625 void negl(GPRRegister reg); 646 void neg(Type Ty, GPRRegister reg);
647 void neg(Type Ty, const Address &addr);
626 void notl(GPRRegister reg); 648 void notl(GPRRegister reg);
627 649
628 void bsrl(GPRRegister dst, GPRRegister src); 650 void bsf(Type Ty, GPRRegister dst, GPRRegister src);
651 void bsf(Type Ty, GPRRegister dst, const Address &src);
652 void bsr(Type Ty, GPRRegister dst, GPRRegister src);
653 void bsr(Type Ty, GPRRegister dst, const Address &src);
654
655 void bswap(Type Ty, GPRRegister reg);
629 656
630 void bt(GPRRegister base, GPRRegister offset); 657 void bt(GPRRegister base, GPRRegister offset);
631 658
632 void ret(); 659 void ret();
633 void ret(const Immediate &imm); 660 void ret(const Immediate &imm);
634 661
635 // 'size' indicates size in bytes and must be in the range 1..8. 662 // 'size' indicates size in bytes and must be in the range 1..8.
636 void nop(int size = 1); 663 void nop(int size = 1);
637 void int3(); 664 void int3();
638 void hlt(); 665 void hlt();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 inline void AssemblerX86::EmitFixup(AssemblerFixup *fixup) { 745 inline void AssemblerX86::EmitFixup(AssemblerFixup *fixup) {
719 buffer_.EmitFixup(fixup); 746 buffer_.EmitFixup(fixup);
720 } 747 }
721 748
722 inline void AssemblerX86::EmitOperandSizeOverride() { EmitUint8(0x66); } 749 inline void AssemblerX86::EmitOperandSizeOverride() { EmitUint8(0x66); }
723 750
724 } // end of namespace x86 751 } // end of namespace x86
725 } // end of namespace Ice 752 } // end of namespace Ice
726 753
727 #endif // SUBZERO_SRC_ASSEMBLER_IA32_H_ 754 #endif // SUBZERO_SRC_ASSEMBLER_IA32_H_
OLDNEW
« no previous file with comments | « src/IceRegistersX8632.h ('k') | src/assembler_ia32.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698