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

Side by Side Diff: runtime/vm/assembler_x64.cc

Issue 786933009: Process two 32-bit digits as one 64-bit digit in all bigint intrinsics on x64. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/assembler_x64.h ('k') | runtime/vm/assembler_x64_test.cc » ('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 #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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/assembler_x64.h ('k') | runtime/vm/assembler_x64_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698