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

Side by Side Diff: src/compiler/ppc/instruction-selector-ppc.cc

Issue 2799863002: [Atomics] use TFJ builtins for atomic add, sub, and, or, and xor (Closed)
Patch Set: [Atomics] use TFJ builtins for atomic add, sub, and, or, and xor Created 3 years, 8 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
OLDNEW
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/base/adapters.h" 5 #include "src/base/adapters.h"
6 #include "src/compiler/instruction-selector-impl.h" 6 #include "src/compiler/instruction-selector-impl.h"
7 #include "src/compiler/node-matchers.h" 7 #include "src/compiler/node-matchers.h"
8 #include "src/compiler/node-properties.h" 8 #include "src/compiler/node-properties.h"
9 #include "src/ppc/frames-ppc.h" 9 #include "src/ppc/frames-ppc.h"
10 10
(...skipping 2105 matching lines...) Expand 10 before | Expand all | Expand 10 after
2116 Emit(opcode | AddressingModeField::encode(kMode_MRR), 2116 Emit(opcode | AddressingModeField::encode(kMode_MRR),
2117 0, nullptr, input_count, inputs); 2117 0, nullptr, input_count, inputs);
2118 } 2118 }
2119 2119
2120 void InstructionSelector::VisitAtomicExchange(Node* node) { 2120 void InstructionSelector::VisitAtomicExchange(Node* node) {
2121 PPCOperandGenerator g(this); 2121 PPCOperandGenerator g(this);
2122 Node* base = node->InputAt(0); 2122 Node* base = node->InputAt(0);
2123 Node* index = node->InputAt(1); 2123 Node* index = node->InputAt(1);
2124 Node* value = node->InputAt(2); 2124 Node* value = node->InputAt(2);
2125 ArchOpcode opcode = kArchNop; 2125 ArchOpcode opcode = kArchNop;
2126 MachineType type = AtomicExchangeRepresentationOf(node->op()); 2126 MachineType type = AtomicOpRepresentationOf(node->op());
2127 if (type == MachineType::Int8()) { 2127 if (type == MachineType::Int8()) {
2128 opcode = kAtomicExchangeInt8; 2128 opcode = kAtomicExchangeInt8;
2129 } else if (type == MachineType::Uint8()) { 2129 } else if (type == MachineType::Uint8()) {
2130 opcode = kAtomicExchangeUint8; 2130 opcode = kAtomicExchangeUint8;
2131 } else if (type == MachineType::Int16()) { 2131 } else if (type == MachineType::Int16()) {
2132 opcode = kAtomicExchangeInt16; 2132 opcode = kAtomicExchangeInt16;
2133 } else if (type == MachineType::Uint16()) { 2133 } else if (type == MachineType::Uint16()) {
2134 opcode = kAtomicExchangeUint16; 2134 opcode = kAtomicExchangeUint16;
2135 } else if (type == MachineType::Int32() || type == MachineType::Uint32()) { 2135 } else if (type == MachineType::Int32() || type == MachineType::Uint32()) {
2136 opcode = kAtomicExchangeWord32; 2136 opcode = kAtomicExchangeWord32;
(...skipping 11 matching lines...) Expand all
2148 InstructionOperand outputs[1]; 2148 InstructionOperand outputs[1];
2149 outputs[0] = g.UseUniqueRegister(node); 2149 outputs[0] = g.UseUniqueRegister(node);
2150 InstructionCode code = opcode | AddressingModeField::encode(addressing_mode); 2150 InstructionCode code = opcode | AddressingModeField::encode(addressing_mode);
2151 Emit(code, 1, outputs, input_count, inputs); 2151 Emit(code, 1, outputs, input_count, inputs);
2152 } 2152 }
2153 2153
2154 void InstructionSelector::VisitAtomicCompareExchange(Node* node) { 2154 void InstructionSelector::VisitAtomicCompareExchange(Node* node) {
2155 UNIMPLEMENTED(); 2155 UNIMPLEMENTED();
2156 } 2156 }
2157 2157
2158 void InstructionSelector::VisitAtomicAdd(Node* node) { UNIMPLEMENTED(); }
2159
2160 void InstructionSelector::VisitAtomicSub(Node* node) { UNIMPLEMENTED(); }
2161
2162 void InstructionSelector::VisitAtomicAnd(Node* node) { UNIMPLEMENTED(); }
2163
2164 void InstructionSelector::VisitAtomicOr(Node* node) { UNIMPLEMENTED(); }
2165
2166 void InstructionSelector::VisitAtomicXor(Node* node) { UNIMPLEMENTED(); }
2167
2158 void InstructionSelector::VisitInt32AbsWithOverflow(Node* node) { 2168 void InstructionSelector::VisitInt32AbsWithOverflow(Node* node) {
2159 UNREACHABLE(); 2169 UNREACHABLE();
2160 } 2170 }
2161 2171
2162 void InstructionSelector::VisitInt64AbsWithOverflow(Node* node) { 2172 void InstructionSelector::VisitInt64AbsWithOverflow(Node* node) {
2163 UNREACHABLE(); 2173 UNREACHABLE();
2164 } 2174 }
2165 2175
2166 // static 2176 // static
2167 MachineOperatorBuilder::Flags 2177 MachineOperatorBuilder::Flags
(...skipping 13 matching lines...) Expand all
2181 // static 2191 // static
2182 MachineOperatorBuilder::AlignmentRequirements 2192 MachineOperatorBuilder::AlignmentRequirements
2183 InstructionSelector::AlignmentRequirements() { 2193 InstructionSelector::AlignmentRequirements() {
2184 return MachineOperatorBuilder::AlignmentRequirements:: 2194 return MachineOperatorBuilder::AlignmentRequirements::
2185 FullUnalignedAccessSupport(); 2195 FullUnalignedAccessSupport();
2186 } 2196 }
2187 2197
2188 } // namespace compiler 2198 } // namespace compiler
2189 } // namespace internal 2199 } // namespace internal
2190 } // namespace v8 2200 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698