OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/instruction-selector-impl.h" | 5 #include "src/compiler/instruction-selector-impl.h" |
6 #include "src/compiler/node-matchers.h" | 6 #include "src/compiler/node-matchers.h" |
7 #include "src/compiler/node-properties.h" | 7 #include "src/compiler/node-properties.h" |
8 | 8 |
9 namespace v8 { | 9 namespace v8 { |
10 namespace internal { | 10 namespace internal { |
(...skipping 2231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2242 Emit(kArm64Float64InsertHighWord32, g.DefineAsRegister(node), | 2242 Emit(kArm64Float64InsertHighWord32, g.DefineAsRegister(node), |
2243 g.UseRegister(left), g.UseRegister(right)); | 2243 g.UseRegister(left), g.UseRegister(right)); |
2244 } | 2244 } |
2245 | 2245 |
2246 void InstructionSelector::VisitAtomicLoad(Node* node) { | 2246 void InstructionSelector::VisitAtomicLoad(Node* node) { |
2247 LoadRepresentation load_rep = LoadRepresentationOf(node->op()); | 2247 LoadRepresentation load_rep = LoadRepresentationOf(node->op()); |
2248 Arm64OperandGenerator g(this); | 2248 Arm64OperandGenerator g(this); |
2249 Node* base = node->InputAt(0); | 2249 Node* base = node->InputAt(0); |
2250 Node* index = node->InputAt(1); | 2250 Node* index = node->InputAt(1); |
2251 ArchOpcode opcode = kArchNop; | 2251 ArchOpcode opcode = kArchNop; |
2252 ImmediateMode immediate_mode = kNoImmediate; | |
2253 switch (load_rep.representation()) { | 2252 switch (load_rep.representation()) { |
2254 case MachineRepresentation::kWord8: | 2253 case MachineRepresentation::kWord8: |
2255 opcode = load_rep.IsSigned() ? kAtomicLoadInt8 : kAtomicLoadUint8; | 2254 opcode = load_rep.IsSigned() ? kAtomicLoadInt8 : kAtomicLoadUint8; |
2256 immediate_mode = kLoadStoreImm8; | |
2257 break; | 2255 break; |
2258 case MachineRepresentation::kWord16: | 2256 case MachineRepresentation::kWord16: |
2259 opcode = load_rep.IsSigned() ? kAtomicLoadInt16 : kAtomicLoadUint16; | 2257 opcode = load_rep.IsSigned() ? kAtomicLoadInt16 : kAtomicLoadUint16; |
2260 immediate_mode = kLoadStoreImm16; | |
2261 break; | 2258 break; |
2262 case MachineRepresentation::kWord32: | 2259 case MachineRepresentation::kWord32: |
2263 opcode = kAtomicLoadWord32; | 2260 opcode = kAtomicLoadWord32; |
2264 immediate_mode = kLoadStoreImm32; | |
2265 break; | 2261 break; |
2266 default: | 2262 default: |
2267 UNREACHABLE(); | 2263 UNREACHABLE(); |
2268 return; | 2264 return; |
2269 } | 2265 } |
2270 Emit(opcode | AddressingModeField::encode(kMode_MRR), | 2266 Emit(opcode | AddressingModeField::encode(kMode_MRR), |
2271 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(index)); | 2267 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(index)); |
2272 } | 2268 } |
2273 | 2269 |
2274 // static | 2270 // static |
(...skipping 15 matching lines...) Expand all Loading... |
2290 MachineOperatorBuilder::kWord32ShiftIsSafe | | 2286 MachineOperatorBuilder::kWord32ShiftIsSafe | |
2291 MachineOperatorBuilder::kInt32DivIsSafe | | 2287 MachineOperatorBuilder::kInt32DivIsSafe | |
2292 MachineOperatorBuilder::kUint32DivIsSafe | | 2288 MachineOperatorBuilder::kUint32DivIsSafe | |
2293 MachineOperatorBuilder::kWord32ReverseBits | | 2289 MachineOperatorBuilder::kWord32ReverseBits | |
2294 MachineOperatorBuilder::kWord64ReverseBits; | 2290 MachineOperatorBuilder::kWord64ReverseBits; |
2295 } | 2291 } |
2296 | 2292 |
2297 } // namespace compiler | 2293 } // namespace compiler |
2298 } // namespace internal | 2294 } // namespace internal |
2299 } // namespace v8 | 2295 } // namespace v8 |
OLD | NEW |