| OLD | NEW |
| 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 #include "vm/globals.h" // NOLINT | 5 #include "vm/globals.h" // NOLINT |
| 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/cpu.h" | 9 #include "vm/cpu.h" |
| 10 #include "vm/heap.h" | 10 #include "vm/heap.h" |
| (...skipping 2031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2042 | 2042 |
| 2043 | 2043 |
| 2044 void Assembler::idivq(Register reg) { | 2044 void Assembler::idivq(Register reg) { |
| 2045 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 2045 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 2046 EmitRegisterREX(reg, REX_W); | 2046 EmitRegisterREX(reg, REX_W); |
| 2047 EmitUint8(0xF7); | 2047 EmitUint8(0xF7); |
| 2048 EmitOperand(7, Operand(reg)); | 2048 EmitOperand(7, Operand(reg)); |
| 2049 } | 2049 } |
| 2050 | 2050 |
| 2051 | 2051 |
| 2052 void Assembler::divq(Register reg) { |
| 2053 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 2054 EmitRegisterREX(reg, REX_W); |
| 2055 EmitUint8(0xF7); |
| 2056 EmitOperand(6, Operand(reg)); |
| 2057 } |
| 2058 |
| 2059 |
| 2052 void Assembler::imull(Register dst, Register src) { | 2060 void Assembler::imull(Register dst, Register src) { |
| 2053 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 2061 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 2054 Operand operand(src); | 2062 Operand operand(src); |
| 2055 EmitOperandREX(dst, operand, REX_NONE); | 2063 EmitOperandREX(dst, operand, REX_NONE); |
| 2056 EmitUint8(0x0F); | 2064 EmitUint8(0x0F); |
| 2057 EmitUint8(0xAF); | 2065 EmitUint8(0xAF); |
| 2058 EmitOperand(dst & 7, Operand(src)); | 2066 EmitOperand(dst & 7, Operand(src)); |
| 2059 } | 2067 } |
| 2060 | 2068 |
| 2061 | 2069 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2115 | 2123 |
| 2116 void Assembler::imulq(Register dst, const Address& address) { | 2124 void Assembler::imulq(Register dst, const Address& address) { |
| 2117 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 2125 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 2118 EmitOperandREX(dst, address, REX_W); | 2126 EmitOperandREX(dst, address, REX_W); |
| 2119 EmitUint8(0x0F); | 2127 EmitUint8(0x0F); |
| 2120 EmitUint8(0xAF); | 2128 EmitUint8(0xAF); |
| 2121 EmitOperand(dst & 7, address); | 2129 EmitOperand(dst & 7, address); |
| 2122 } | 2130 } |
| 2123 | 2131 |
| 2124 | 2132 |
| 2133 void Assembler::mulq(Register reg) { |
| 2134 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 2135 EmitRegisterREX(reg, REX_W); |
| 2136 EmitUint8(0xF7); |
| 2137 EmitOperand(4, Operand(reg)); |
| 2138 } |
| 2139 |
| 2140 |
| 2125 void Assembler::subq(Register dst, Register src) { | 2141 void Assembler::subq(Register dst, Register src) { |
| 2126 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 2142 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 2127 Operand operand(src); | 2143 Operand operand(src); |
| 2128 EmitOperandREX(dst, operand, REX_W); | 2144 EmitOperandREX(dst, operand, REX_W); |
| 2129 EmitUint8(0x2B); | 2145 EmitUint8(0x2B); |
| 2130 EmitOperand(dst & 7, operand); | 2146 EmitOperand(dst & 7, operand); |
| 2131 } | 2147 } |
| 2132 | 2148 |
| 2133 | 2149 |
| 2134 void Assembler::subq(Register reg, const Immediate& imm) { | 2150 void Assembler::subq(Register reg, const Immediate& imm) { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2265 void Assembler::sarq(Register reg, const Immediate& imm) { | 2281 void Assembler::sarq(Register reg, const Immediate& imm) { |
| 2266 EmitGenericShift(true, 7, reg, imm); | 2282 EmitGenericShift(true, 7, reg, imm); |
| 2267 } | 2283 } |
| 2268 | 2284 |
| 2269 | 2285 |
| 2270 void Assembler::sarq(Register operand, Register shifter) { | 2286 void Assembler::sarq(Register operand, Register shifter) { |
| 2271 EmitGenericShift(true, 7, operand, shifter); | 2287 EmitGenericShift(true, 7, operand, shifter); |
| 2272 } | 2288 } |
| 2273 | 2289 |
| 2274 | 2290 |
| 2291 void Assembler::shldq(Register dst, Register src, const Immediate& imm) { |
| 2292 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 2293 ASSERT(imm.is_int8()); |
| 2294 Operand operand(src); |
| 2295 EmitOperandREX(dst, operand, REX_W); |
| 2296 EmitUint8(0x0F); |
| 2297 EmitUint8(0xA4); |
| 2298 EmitOperand(src & 7, Operand(dst)); |
| 2299 EmitUint8(imm.value() & 0xFF); |
| 2300 } |
| 2301 |
| 2302 |
| 2275 void Assembler::incl(const Address& address) { | 2303 void Assembler::incl(const Address& address) { |
| 2276 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 2304 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 2277 Operand operand(address); | 2305 Operand operand(address); |
| 2278 EmitOperandREX(0, operand, REX_NONE); | 2306 EmitOperandREX(0, operand, REX_NONE); |
| 2279 EmitUint8(0xFF); | 2307 EmitUint8(0xFF); |
| 2280 EmitOperand(0, operand); | 2308 EmitOperand(0, operand); |
| 2281 } | 2309 } |
| 2282 | 2310 |
| 2283 | 2311 |
| 2284 void Assembler::decl(const Address& address) { | 2312 void Assembler::decl(const Address& address) { |
| (...skipping 1614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3899 | 3927 |
| 3900 | 3928 |
| 3901 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3929 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
| 3902 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); | 3930 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); |
| 3903 return xmm_reg_names[reg]; | 3931 return xmm_reg_names[reg]; |
| 3904 } | 3932 } |
| 3905 | 3933 |
| 3906 } // namespace dart | 3934 } // namespace dart |
| 3907 | 3935 |
| 3908 #endif // defined TARGET_ARCH_X64 | 3936 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |