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 3159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3170 } | 3170 } |
3171 | 3171 |
3172 template <typename TraitsType> | 3172 template <typename TraitsType> |
3173 void AssemblerX86Base<TraitsType>::jmp(const ConstantRelocatable *label) { | 3173 void AssemblerX86Base<TraitsType>::jmp(const ConstantRelocatable *label) { |
3174 AssemblerBuffer::EnsureCapacity ensured(&Buffer); | 3174 AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
3175 emitUint8(0xE9); | 3175 emitUint8(0xE9); |
3176 emitFixup(this->createFixup(Traits::FK_PcRel, label)); | 3176 emitFixup(this->createFixup(Traits::FK_PcRel, label)); |
3177 emitInt32(-4); | 3177 emitInt32(-4); |
3178 } | 3178 } |
3179 | 3179 |
| 3180 template <typename TraitsType> |
| 3181 void AssemblerX86Base<TraitsType>::jmp(const Immediate &abs_address) { |
| 3182 AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
| 3183 emitUint8(0xE9); |
| 3184 AssemblerFixup *Fixup = |
| 3185 this->createFixup(Traits::FK_PcRel, AssemblerFixup::NullSymbol); |
| 3186 Fixup->set_addend(abs_address.value()); |
| 3187 emitFixup(Fixup); |
| 3188 emitInt32(abs_address.value() - 4); |
| 3189 } |
| 3190 |
3180 template <typename TraitsType> void AssemblerX86Base<TraitsType>::mfence() { | 3191 template <typename TraitsType> void AssemblerX86Base<TraitsType>::mfence() { |
3181 AssemblerBuffer::EnsureCapacity ensured(&Buffer); | 3192 AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
3182 emitUint8(0x0F); | 3193 emitUint8(0x0F); |
3183 emitUint8(0xAE); | 3194 emitUint8(0xAE); |
3184 emitUint8(0xF0); | 3195 emitUint8(0xF0); |
3185 } | 3196 } |
3186 | 3197 |
3187 template <typename TraitsType> void AssemblerX86Base<TraitsType>::lock() { | 3198 template <typename TraitsType> void AssemblerX86Base<TraitsType>::lock() { |
3188 AssemblerBuffer::EnsureCapacity ensured(&Buffer); | 3199 AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
3189 emitUint8(0xF0); | 3200 emitUint8(0xF0); |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3509 (void)shifter; | 3520 (void)shifter; |
3510 if (Ty == IceType_i16) | 3521 if (Ty == IceType_i16) |
3511 emitOperandSizeOverride(); | 3522 emitOperandSizeOverride(); |
3512 emitRexB(Ty, operand.rm()); | 3523 emitRexB(Ty, operand.rm()); |
3513 emitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3); | 3524 emitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3); |
3514 emitOperand(rm, operand); | 3525 emitOperand(rm, operand); |
3515 } | 3526 } |
3516 | 3527 |
3517 } // end of namespace X86NAMESPACE | 3528 } // end of namespace X86NAMESPACE |
3518 } // end of namespace Ice | 3529 } // end of namespace Ice |
OLD | NEW |