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

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

Issue 732663003: Process two 32-bit digits as one 64-bit digit in bigint absAdd intrinsic on x64. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 1 month 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" 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/cpu.h" 9 #include "vm/cpu.h"
10 #include "vm/heap.h" 10 #include "vm/heap.h"
(...skipping 1809 matching lines...) Expand 10 before | Expand all | Expand 10 after
1820 1820
1821 void Assembler::addl(Register dst, Register src) { 1821 void Assembler::addl(Register dst, Register src) {
1822 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1822 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1823 Operand operand(src); 1823 Operand operand(src);
1824 EmitOperandREX(dst, operand, REX_NONE); 1824 EmitOperandREX(dst, operand, REX_NONE);
1825 EmitUint8(0x03); 1825 EmitUint8(0x03);
1826 EmitOperand(dst & 7, operand); 1826 EmitOperand(dst & 7, operand);
1827 } 1827 }
1828 1828
1829 1829
1830 void Assembler::addl(Register dst, const Immediate& imm) {
1831 ASSERT(imm.is_int32());
1832 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1833 EmitRegisterREX(dst, REX_NONE);
1834 EmitComplex(0, Operand(dst), imm);
1835 }
1836
1837
1830 void Assembler::addl(Register dst, const Address& address) { 1838 void Assembler::addl(Register dst, const Address& address) {
1831 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1839 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1832 EmitOperandREX(dst, address, REX_NONE); 1840 EmitOperandREX(dst, address, REX_NONE);
1833 EmitUint8(0x03); 1841 EmitUint8(0x03);
1834 EmitOperand(dst & 7, address); 1842 EmitOperand(dst & 7, address);
1835 } 1843 }
1836 1844
1837 1845
1838 void Assembler::addl(const Address& address, Register src) { 1846 void Assembler::addl(const Address& address, Register src) {
1839 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1847 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 1918
1911 1919
1912 void Assembler::addq(const Address& address, Register src) { 1920 void Assembler::addq(const Address& address, Register src) {
1913 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1921 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1914 EmitOperandREX(src, address, REX_W); 1922 EmitOperandREX(src, address, REX_W);
1915 EmitUint8(0x01); 1923 EmitUint8(0x01);
1916 EmitOperand(src & 7, address); 1924 EmitOperand(src & 7, address);
1917 } 1925 }
1918 1926
1919 1927
1928 void Assembler::adcq(Register dst, Register src) {
1929 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1930 Operand operand(src);
1931 EmitOperandREX(dst, operand, REX_W);
1932 EmitUint8(0x13);
1933 EmitOperand(dst & 7, operand);
1934 }
1935
1936
1937 void Assembler::adcq(Register dst, const Immediate& imm) {
1938 if (imm.is_int32()) {
1939 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1940 EmitRegisterREX(dst, REX_W);
1941 EmitComplex(2, Operand(dst), imm);
1942 } else {
1943 movq(TMP, imm);
1944 adcq(dst, TMP);
1945 }
1946 }
1947
1948
1949 void Assembler::adcq(Register dst, const Address& address) {
1950 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1951 EmitOperandREX(dst, address, REX_W);
1952 EmitUint8(0x13);
1953 EmitOperand(dst & 7, address);
1954 }
1955
1956
1920 void Assembler::subl(Register dst, Register src) { 1957 void Assembler::subl(Register dst, Register src) {
1921 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1958 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1922 Operand operand(src); 1959 Operand operand(src);
1923 EmitOperandREX(dst, operand, REX_NONE); 1960 EmitOperandREX(dst, operand, REX_NONE);
1924 EmitUint8(0x2B); 1961 EmitUint8(0x2B);
1925 EmitOperand(dst & 7, operand); 1962 EmitOperand(dst & 7, operand);
1926 } 1963 }
1927 1964
1928 1965
1966 void Assembler::subl(Register dst, const Immediate& imm) {
1967 ASSERT(imm.is_int32());
1968 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1969 EmitRegisterREX(dst, REX_NONE);
1970 EmitComplex(3, Operand(dst), imm);
1971 }
1972
1973
1929 void Assembler::subl(Register dst, const Address& address) { 1974 void Assembler::subl(Register dst, const Address& address) {
1930 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1975 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1931 EmitOperandREX(dst, address, REX_NONE); 1976 EmitOperandREX(dst, address, REX_NONE);
1932 EmitUint8(0x2B); 1977 EmitUint8(0x2B);
1933 EmitOperand(dst & 7, address); 1978 EmitOperand(dst & 7, address);
1934 } 1979 }
1935 1980
1936 1981
1937 void Assembler::sbbl(Register dst, Register src) { 1982 void Assembler::sbbl(Register dst, Register src) {
1938 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1983 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
2111 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2156 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2112 EmitOperandREX(0, address, REX_W); 2157 EmitOperandREX(0, address, REX_W);
2113 EmitComplex(5, Operand(address), imm); 2158 EmitComplex(5, Operand(address), imm);
2114 } else { 2159 } else {
2115 movq(TMP, imm); 2160 movq(TMP, imm);
2116 subq(address, TMP); 2161 subq(address, TMP);
2117 } 2162 }
2118 } 2163 }
2119 2164
2120 2165
2166 void Assembler::sbbq(Register dst, Register src) {
2167 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2168 Operand operand(src);
2169 EmitOperandREX(dst, operand, REX_W);
2170 EmitUint8(0x1B);
2171 EmitOperand(dst & 7, operand);
2172 }
2173
2174
2175 void Assembler::sbbq(Register dst, const Immediate& imm) {
2176 if (imm.is_int32()) {
2177 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2178 EmitRegisterREX(dst, REX_W);
2179 EmitComplex(3, Operand(dst), imm);
2180 } else {
2181 movq(TMP, imm);
2182 sbbq(dst, TMP);
2183 }
2184 }
2185
2186
2187 void Assembler::sbbq(Register dst, const Address& address) {
2188 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2189 EmitOperandREX(dst, address, REX_W);
2190 EmitUint8(0x1B);
2191 EmitOperand(dst & 7, address);
2192 }
2193
2194
2121 void Assembler::shll(Register reg, const Immediate& imm) { 2195 void Assembler::shll(Register reg, const Immediate& imm) {
2122 EmitGenericShift(false, 4, reg, imm); 2196 EmitGenericShift(false, 4, reg, imm);
2123 } 2197 }
2124 2198
2125 2199
2126 void Assembler::shll(Register operand, Register shifter) { 2200 void Assembler::shll(Register operand, Register shifter) {
2127 EmitGenericShift(false, 4, operand, shifter); 2201 EmitGenericShift(false, 4, operand, shifter);
2128 } 2202 }
2129 2203
2130 2204
(...skipping 1643 matching lines...) Expand 10 before | Expand all | Expand 10 after
3774 3848
3775 3849
3776 const char* Assembler::FpuRegisterName(FpuRegister reg) { 3850 const char* Assembler::FpuRegisterName(FpuRegister reg) {
3777 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); 3851 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
3778 return xmm_reg_names[reg]; 3852 return xmm_reg_names[reg];
3779 } 3853 }
3780 3854
3781 } // namespace dart 3855 } // namespace dart
3782 3856
3783 #endif // defined TARGET_ARCH_X64 3857 #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