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

Side by Side Diff: src/compiler/machine-operator.h

Issue 2182493003: ARM: Implement UnaligedLoad and UnaligedStore turbofan operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 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
« no previous file with comments | « src/compiler/arm/instruction-selector-arm.cc ('k') | test/cctest/cctest.status » ('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 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 #ifndef V8_COMPILER_MACHINE_OPERATOR_H_ 5 #ifndef V8_COMPILER_MACHINE_OPERATOR_H_
6 #define V8_COMPILER_MACHINE_OPERATOR_H_ 6 #define V8_COMPILER_MACHINE_OPERATOR_H_
7 7
8 #include "src/base/flags.h" 8 #include "src/base/flags.h"
9 #include "src/machine-type.h" 9 #include "src/machine-type.h"
10 10
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 kWord32ReverseBits | kWord64ReverseBits | kFloat32Neg | kFloat64Neg 139 kWord32ReverseBits | kWord64ReverseBits | kFloat32Neg | kFloat64Neg
140 }; 140 };
141 typedef base::Flags<Flag, unsigned> Flags; 141 typedef base::Flags<Flag, unsigned> Flags;
142 142
143 class AlignmentRequirements { 143 class AlignmentRequirements {
144 public: 144 public:
145 enum UnalignedAccessSupport { kNoSupport, kSomeSupport, kFullSupport }; 145 enum UnalignedAccessSupport { kNoSupport, kSomeSupport, kFullSupport };
146 146
147 bool IsUnalignedLoadSupported(const MachineType& machineType, 147 bool IsUnalignedLoadSupported(const MachineType& machineType,
148 uint8_t alignment) const { 148 uint8_t alignment) const {
149 return IsUnalignedSupported(unalignedLoadSupportedTypes_, machineType, 149 return IsUnalignedSupported(unalignedLoadUnsupportedTypes_, machineType,
150 alignment); 150 alignment);
151 } 151 }
152 152
153 bool IsUnalignedStoreSupported(const MachineType& machineType, 153 bool IsUnalignedStoreSupported(const MachineType& machineType,
154 uint8_t alignment) const { 154 uint8_t alignment) const {
155 return IsUnalignedSupported(unalignedStoreSupportedTypes_, machineType, 155 return IsUnalignedSupported(unalignedStoreUnsupportedTypes_, machineType,
156 alignment); 156 alignment);
157 } 157 }
158 158
159 static AlignmentRequirements FullUnalignedAccessSupport() { 159 static AlignmentRequirements FullUnalignedAccessSupport() {
160 return AlignmentRequirements(kFullSupport); 160 return AlignmentRequirements(kFullSupport);
161 } 161 }
162 static AlignmentRequirements NoUnalignedAccessSupport() { 162 static AlignmentRequirements NoUnalignedAccessSupport() {
163 return AlignmentRequirements(kNoSupport); 163 return AlignmentRequirements(kNoSupport);
164 } 164 }
165 static AlignmentRequirements SomeUnalignedAccessSupport( 165 static AlignmentRequirements SomeUnalignedAccessUnsupported(
166 const Vector<MachineType>& unalignedLoadSupportedTypes, 166 const Vector<MachineType>& unalignedLoadUnsupportedTypes,
167 const Vector<MachineType>& unalignedStoreSupportedTypes) { 167 const Vector<MachineType>& unalignedStoreUnsupportedTypes) {
168 return AlignmentRequirements(kSomeSupport, unalignedLoadSupportedTypes, 168 return AlignmentRequirements(kSomeSupport, unalignedLoadUnsupportedTypes,
169 unalignedStoreSupportedTypes); 169 unalignedStoreUnsupportedTypes);
170 } 170 }
171 171
172 private: 172 private:
173 explicit AlignmentRequirements( 173 explicit AlignmentRequirements(
174 AlignmentRequirements::UnalignedAccessSupport unalignedAccessSupport, 174 AlignmentRequirements::UnalignedAccessSupport unalignedAccessSupport,
175 Vector<MachineType> unalignedLoadSupportedTypes = 175 Vector<MachineType> unalignedLoadUnsupportedTypes =
176 Vector<MachineType>(NULL, 0), 176 Vector<MachineType>(NULL, 0),
177 Vector<MachineType> unalignedStoreSupportedTypes = 177 Vector<MachineType> unalignedStoreUnsupportedTypes =
178 Vector<MachineType>(NULL, 0)) 178 Vector<MachineType>(NULL, 0))
179 : unalignedSupport_(unalignedAccessSupport), 179 : unalignedSupport_(unalignedAccessSupport),
180 unalignedLoadSupportedTypes_(unalignedLoadSupportedTypes), 180 unalignedLoadUnsupportedTypes_(unalignedLoadUnsupportedTypes),
181 unalignedStoreSupportedTypes_(unalignedStoreSupportedTypes) {} 181 unalignedStoreUnsupportedTypes_(unalignedStoreUnsupportedTypes) {}
182 182
183 bool IsUnalignedSupported(const Vector<MachineType>& supported, 183 bool IsUnalignedSupported(const Vector<MachineType>& unsupported,
184 const MachineType& machineType, 184 const MachineType& machineType,
185 uint8_t alignment) const { 185 uint8_t alignment) const {
186 if (unalignedSupport_ == kFullSupport) { 186 if (unalignedSupport_ == kFullSupport) {
187 return true; 187 return true;
188 } else if (unalignedSupport_ == kNoSupport) { 188 } else if (unalignedSupport_ == kNoSupport) {
189 return false; 189 return false;
190 } else { 190 } else {
191 for (MachineType m : supported) { 191 for (MachineType m : unsupported) {
192 if (m == machineType) { 192 if (m == machineType) {
193 return true; 193 return false;
194 } 194 }
195 } 195 }
196 return false; 196 return true;
197 } 197 }
198 } 198 }
199 199
200 const AlignmentRequirements::UnalignedAccessSupport unalignedSupport_; 200 const AlignmentRequirements::UnalignedAccessSupport unalignedSupport_;
201 const Vector<MachineType> unalignedLoadSupportedTypes_; 201 const Vector<MachineType> unalignedLoadUnsupportedTypes_;
202 const Vector<MachineType> unalignedStoreSupportedTypes_; 202 const Vector<MachineType> unalignedStoreUnsupportedTypes_;
203 }; 203 };
204 204
205 explicit MachineOperatorBuilder( 205 explicit MachineOperatorBuilder(
206 Zone* zone, 206 Zone* zone,
207 MachineRepresentation word = MachineType::PointerRepresentation(), 207 MachineRepresentation word = MachineType::PointerRepresentation(),
208 Flags supportedOperators = kNoFlags, 208 Flags supportedOperators = kNoFlags,
209 AlignmentRequirements alignmentRequirements = 209 AlignmentRequirements alignmentRequirements =
210 AlignmentRequirements::FullUnalignedAccessSupport()); 210 AlignmentRequirements::FullUnalignedAccessSupport());
211 211
212 const Operator* Comment(const char* msg); 212 const Operator* Comment(const char* msg);
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 }; 698 };
699 699
700 700
701 DEFINE_OPERATORS_FOR_FLAGS(MachineOperatorBuilder::Flags) 701 DEFINE_OPERATORS_FOR_FLAGS(MachineOperatorBuilder::Flags)
702 702
703 } // namespace compiler 703 } // namespace compiler
704 } // namespace internal 704 } // namespace internal
705 } // namespace v8 705 } // namespace v8
706 706
707 #endif // V8_COMPILER_MACHINE_OPERATOR_H_ 707 #endif // V8_COMPILER_MACHINE_OPERATOR_H_
OLDNEW
« no previous file with comments | « src/compiler/arm/instruction-selector-arm.cc ('k') | test/cctest/cctest.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698