| OLD | NEW |
| 1 //===- subzero/src/IceAssemblerX86BaseImpl.h - base x86 assembler -*- C++ -*-=// | 1 //===- subzero/src/IceAssemblerX86BaseImpl.h - base x86 assembler -*- C++ -*-=// |
| 2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 3 // for details. All rights reserved. Use of this source code is governed by a | 3 // for details. All rights reserved. Use of this source code is governed by a |
| 4 // BSD-style license that can be found in the LICENSE file. | 4 // BSD-style license that can be found in the LICENSE file. |
| 5 // | 5 // |
| 6 // Modified by the Subzero authors. | 6 // Modified by the Subzero authors. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // The Subzero Code Generator | 10 // The Subzero Code Generator |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 emitUint8(0x88); | 288 emitUint8(0x88); |
| 289 } else { | 289 } else { |
| 290 emitUint8(0x89); | 290 emitUint8(0x89); |
| 291 } | 291 } |
| 292 emitOperand(gprEncoding(src), dst); | 292 emitOperand(gprEncoding(src), dst); |
| 293 } | 293 } |
| 294 | 294 |
| 295 template <typename TraitsType> | 295 template <typename TraitsType> |
| 296 void AssemblerX86Base<TraitsType>::mov(Type Ty, const Address &dst, | 296 void AssemblerX86Base<TraitsType>::mov(Type Ty, const Address &dst, |
| 297 const Immediate &imm) { | 297 const Immediate &imm) { |
| 298 assert(Ty != IceType_i64 && "i64 not supported yet."); | |
| 299 AssemblerBuffer::EnsureCapacity ensured(&Buffer); | 298 AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
| 300 if (Ty == IceType_i16) | 299 if (Ty == IceType_i16) |
| 301 emitOperandSizeOverride(); | 300 emitOperandSizeOverride(); |
| 302 emitAddrSizeOverridePrefix(); | 301 emitAddrSizeOverridePrefix(); |
| 303 emitRex(Ty, dst, RexRegIrrelevant); | 302 emitRex(Ty, dst, RexRegIrrelevant); |
| 304 if (isByteSizedType(Ty)) { | 303 if (isByteSizedType(Ty)) { |
| 305 emitUint8(0xC6); | 304 emitUint8(0xC6); |
| 306 static constexpr RelocOffsetT OffsetFromNextInstruction = 1; | 305 static constexpr RelocOffsetT OffsetFromNextInstruction = 1; |
| 307 emitOperand(0, dst, OffsetFromNextInstruction); | 306 emitOperand(0, dst, OffsetFromNextInstruction); |
| 308 emitUint8(imm.value() & 0xFF); | 307 emitUint8(imm.value() & 0xFF); |
| (...skipping 2325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2634 emitRex(Ty, address, reg); | 2633 emitRex(Ty, address, reg); |
| 2635 emitUint8(0x0F); | 2634 emitUint8(0x0F); |
| 2636 emitUint8(0xAF); | 2635 emitUint8(0xAF); |
| 2637 emitOperand(gprEncoding(reg), address); | 2636 emitOperand(gprEncoding(reg), address); |
| 2638 } | 2637 } |
| 2639 | 2638 |
| 2640 template <typename TraitsType> | 2639 template <typename TraitsType> |
| 2641 void AssemblerX86Base<TraitsType>::imul(Type Ty, GPRRegister reg, | 2640 void AssemblerX86Base<TraitsType>::imul(Type Ty, GPRRegister reg, |
| 2642 const Immediate &imm) { | 2641 const Immediate &imm) { |
| 2643 AssemblerBuffer::EnsureCapacity ensured(&Buffer); | 2642 AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
| 2644 assert(Ty == IceType_i16 || Ty == IceType_i32); | 2643 assert(Ty == IceType_i16 || Ty == IceType_i32 || Ty == IceType_i64); |
| 2645 if (Ty == IceType_i16) | 2644 if (Ty == IceType_i16) |
| 2646 emitOperandSizeOverride(); | 2645 emitOperandSizeOverride(); |
| 2647 emitRexRB(Ty, reg, reg); | 2646 emitRexRB(Ty, reg, reg); |
| 2648 if (imm.is_int8()) { | 2647 if (imm.is_int8()) { |
| 2649 emitUint8(0x6B); | 2648 emitUint8(0x6B); |
| 2650 emitRegisterOperand(gprEncoding(reg), gprEncoding(reg)); | 2649 emitRegisterOperand(gprEncoding(reg), gprEncoding(reg)); |
| 2651 emitUint8(imm.value() & 0xFF); | 2650 emitUint8(imm.value() & 0xFF); |
| 2652 } else { | 2651 } else { |
| 2653 emitUint8(0x69); | 2652 emitUint8(0x69); |
| 2654 emitRegisterOperand(gprEncoding(reg), gprEncoding(reg)); | 2653 emitRegisterOperand(gprEncoding(reg), gprEncoding(reg)); |
| (...skipping 928 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3583 (void)shifter; | 3582 (void)shifter; |
| 3584 if (Ty == IceType_i16) | 3583 if (Ty == IceType_i16) |
| 3585 emitOperandSizeOverride(); | 3584 emitOperandSizeOverride(); |
| 3586 emitRexB(Ty, operand.rm()); | 3585 emitRexB(Ty, operand.rm()); |
| 3587 emitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3); | 3586 emitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3); |
| 3588 emitOperand(rm, operand); | 3587 emitOperand(rm, operand); |
| 3589 } | 3588 } |
| 3590 | 3589 |
| 3591 } // end of namespace X86NAMESPACE | 3590 } // end of namespace X86NAMESPACE |
| 3592 } // end of namespace Ice | 3591 } // end of namespace Ice |
| OLD | NEW |