| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "src/compilation-info.h" | 9 #include "src/compilation-info.h" |
| 10 #include "src/compiler/code-generator-impl.h" | 10 #include "src/compiler/code-generator-impl.h" |
| (...skipping 2118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2129 break; | 2129 break; |
| 2130 case kX64Poke: { | 2130 case kX64Poke: { |
| 2131 int const slot = MiscField::decode(instr->opcode()); | 2131 int const slot = MiscField::decode(instr->opcode()); |
| 2132 if (HasImmediateInput(instr, 0)) { | 2132 if (HasImmediateInput(instr, 0)) { |
| 2133 __ movq(Operand(rsp, slot * kPointerSize), i.InputImmediate(0)); | 2133 __ movq(Operand(rsp, slot * kPointerSize), i.InputImmediate(0)); |
| 2134 } else { | 2134 } else { |
| 2135 __ movq(Operand(rsp, slot * kPointerSize), i.InputRegister(0)); | 2135 __ movq(Operand(rsp, slot * kPointerSize), i.InputRegister(0)); |
| 2136 } | 2136 } |
| 2137 break; | 2137 break; |
| 2138 } | 2138 } |
| 2139 case kX64Xchgb: { | |
| 2140 size_t index = 0; | |
| 2141 Operand operand = i.MemoryOperand(&index); | |
| 2142 __ xchgb(i.InputRegister(index), operand); | |
| 2143 break; | |
| 2144 } | |
| 2145 case kX64Xchgw: { | |
| 2146 size_t index = 0; | |
| 2147 Operand operand = i.MemoryOperand(&index); | |
| 2148 __ xchgw(i.InputRegister(index), operand); | |
| 2149 break; | |
| 2150 } | |
| 2151 case kX64Xchgl: { | |
| 2152 size_t index = 0; | |
| 2153 Operand operand = i.MemoryOperand(&index); | |
| 2154 __ xchgl(i.InputRegister(index), operand); | |
| 2155 break; | |
| 2156 } | |
| 2157 case kX64Int32x4Splat: { | 2139 case kX64Int32x4Splat: { |
| 2158 CpuFeatureScope sse_scope(masm(), SSE4_1); | 2140 CpuFeatureScope sse_scope(masm(), SSE4_1); |
| 2159 XMMRegister dst = i.OutputSimd128Register(); | 2141 XMMRegister dst = i.OutputSimd128Register(); |
| 2160 __ Movd(dst, i.InputRegister(0)); | 2142 __ Movd(dst, i.InputRegister(0)); |
| 2161 __ shufps(dst, dst, 0x0); | 2143 __ shufps(dst, dst, 0x0); |
| 2162 break; | 2144 break; |
| 2163 } | 2145 } |
| 2164 case kX64Int32x4ExtractLane: { | 2146 case kX64Int32x4ExtractLane: { |
| 2165 CpuFeatureScope sse_scope(masm(), SSE4_1); | 2147 CpuFeatureScope sse_scope(masm(), SSE4_1); |
| 2166 __ Pextrd(i.OutputRegister(), i.InputSimd128Register(0), i.InputInt8(1)); | 2148 __ Pextrd(i.OutputRegister(), i.InputSimd128Register(0), i.InputInt8(1)); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2230 break; | 2212 break; |
| 2231 case kCheckedStoreFloat32: | 2213 case kCheckedStoreFloat32: |
| 2232 ASSEMBLE_CHECKED_STORE_FLOAT(Movss); | 2214 ASSEMBLE_CHECKED_STORE_FLOAT(Movss); |
| 2233 break; | 2215 break; |
| 2234 case kCheckedStoreFloat64: | 2216 case kCheckedStoreFloat64: |
| 2235 ASSEMBLE_CHECKED_STORE_FLOAT(Movsd); | 2217 ASSEMBLE_CHECKED_STORE_FLOAT(Movsd); |
| 2236 break; | 2218 break; |
| 2237 case kX64StackCheck: | 2219 case kX64StackCheck: |
| 2238 __ CompareRoot(rsp, Heap::kStackLimitRootIndex); | 2220 __ CompareRoot(rsp, Heap::kStackLimitRootIndex); |
| 2239 break; | 2221 break; |
| 2222 case kAtomicExchangeInt8: { |
| 2223 __ xchgb(i.InputRegister(0), i.MemoryOperand(1)); |
| 2224 __ movsxbl(i.InputRegister(0), i.InputRegister(0)); |
| 2225 break; |
| 2226 } |
| 2227 case kAtomicExchangeUint8: { |
| 2228 __ xchgb(i.InputRegister(0), i.MemoryOperand(1)); |
| 2229 __ movzxbl(i.InputRegister(0), i.InputRegister(0)); |
| 2230 break; |
| 2231 } |
| 2232 case kAtomicExchangeInt16: { |
| 2233 __ xchgw(i.InputRegister(0), i.MemoryOperand(1)); |
| 2234 __ movsxwl(i.InputRegister(0), i.InputRegister(0)); |
| 2235 break; |
| 2236 } |
| 2237 case kAtomicExchangeUint16: { |
| 2238 __ xchgw(i.InputRegister(0), i.MemoryOperand(1)); |
| 2239 __ movzxwl(i.InputRegister(0), i.InputRegister(0)); |
| 2240 break; |
| 2241 } |
| 2242 case kAtomicExchangeWord32: { |
| 2243 __ xchgl(i.InputRegister(0), i.MemoryOperand(1)); |
| 2244 break; |
| 2245 } |
| 2240 case kAtomicLoadInt8: | 2246 case kAtomicLoadInt8: |
| 2241 case kAtomicLoadUint8: | 2247 case kAtomicLoadUint8: |
| 2242 case kAtomicLoadInt16: | 2248 case kAtomicLoadInt16: |
| 2243 case kAtomicLoadUint16: | 2249 case kAtomicLoadUint16: |
| 2244 case kAtomicLoadWord32: | 2250 case kAtomicLoadWord32: |
| 2245 case kAtomicStoreWord8: | 2251 case kAtomicStoreWord8: |
| 2246 case kAtomicStoreWord16: | 2252 case kAtomicStoreWord16: |
| 2247 case kAtomicStoreWord32: | 2253 case kAtomicStoreWord32: |
| 2248 UNREACHABLE(); // Won't be generated by instruction selector. | 2254 UNREACHABLE(); // Won't be generated by instruction selector. |
| 2249 break; | 2255 break; |
| (...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2867 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 2873 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
| 2868 __ Nop(padding_size); | 2874 __ Nop(padding_size); |
| 2869 } | 2875 } |
| 2870 } | 2876 } |
| 2871 | 2877 |
| 2872 #undef __ | 2878 #undef __ |
| 2873 | 2879 |
| 2874 } // namespace compiler | 2880 } // namespace compiler |
| 2875 } // namespace internal | 2881 } // namespace internal |
| 2876 } // namespace v8 | 2882 } // namespace v8 |
| OLD | NEW |