OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 #include "vm/globals.h" | 5 #include "vm/globals.h" |
6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
7 | 7 |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/heap.h" | 9 #include "vm/heap.h" |
10 #include "vm/memory_region.h" | 10 #include "vm/memory_region.h" |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 void Assembler::movsxw(Register dst, const Address& src) { | 288 void Assembler::movsxw(Register dst, const Address& src) { |
289 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 289 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
290 EmitOperandREX(dst, src, REX_W); | 290 EmitOperandREX(dst, src, REX_W); |
291 EmitUint8(0x0F); | 291 EmitUint8(0x0F); |
292 EmitUint8(0xBF); | 292 EmitUint8(0xBF); |
293 EmitOperand(dst & 7, src); | 293 EmitOperand(dst & 7, src); |
294 } | 294 } |
295 | 295 |
296 | 296 |
297 void Assembler::movw(Register dst, const Address& src) { | 297 void Assembler::movw(Register dst, const Address& src) { |
298 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 298 FATAL("Use movzxw or movsxw instead."); |
299 EmitOperandREX(dst, src, REX_NONE); | |
300 EmitOperandSizeOverride(); | |
301 EmitUint8(0x8B); | |
302 EmitOperand(dst & 7, src); | |
303 } | 299 } |
304 | 300 |
305 | 301 |
306 void Assembler::movw(const Address& dst, Register src) { | 302 void Assembler::movw(const Address& dst, Register src) { |
307 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 303 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 304 EmitOperandSizeOverride(); |
308 EmitOperandREX(src, dst, REX_NONE); | 305 EmitOperandREX(src, dst, REX_NONE); |
309 EmitOperandSizeOverride(); | |
310 EmitUint8(0x89); | 306 EmitUint8(0x89); |
311 EmitOperand(src & 7, dst); | 307 EmitOperand(src & 7, dst); |
312 } | 308 } |
313 | 309 |
314 | 310 |
315 void Assembler::movq(Register dst, const Immediate& imm) { | 311 void Assembler::movq(Register dst, const Immediate& imm) { |
316 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 312 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
317 if (imm.is_int32()) { | 313 if (imm.is_int32()) { |
318 Operand operand(dst); | 314 Operand operand(dst); |
319 EmitOperandREX(0, operand, REX_W); | 315 EmitOperandREX(0, operand, REX_W); |
(...skipping 1870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2190 | 2186 |
2191 const char* Assembler::XmmRegisterName(XmmRegister reg) { | 2187 const char* Assembler::XmmRegisterName(XmmRegister reg) { |
2192 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); | 2188 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); |
2193 return xmm_reg_names[reg]; | 2189 return xmm_reg_names[reg]; |
2194 } | 2190 } |
2195 | 2191 |
2196 | 2192 |
2197 } // namespace dart | 2193 } // namespace dart |
2198 | 2194 |
2199 #endif // defined TARGET_ARCH_X64 | 2195 #endif // defined TARGET_ARCH_X64 |
OLD | NEW |