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 #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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 | 83 |
84 bool operator==(StoreRepresentation, StoreRepresentation); | 84 bool operator==(StoreRepresentation, StoreRepresentation); |
85 bool operator!=(StoreRepresentation, StoreRepresentation); | 85 bool operator!=(StoreRepresentation, StoreRepresentation); |
86 | 86 |
87 size_t hash_value(StoreRepresentation); | 87 size_t hash_value(StoreRepresentation); |
88 | 88 |
89 std::ostream& operator<<(std::ostream&, StoreRepresentation); | 89 std::ostream& operator<<(std::ostream&, StoreRepresentation); |
90 | 90 |
91 StoreRepresentation const& StoreRepresentationOf(Operator const*); | 91 StoreRepresentation const& StoreRepresentationOf(Operator const*); |
92 | 92 |
| 93 typedef MachineType UnalignedLoadRepresentation; |
| 94 |
| 95 UnalignedLoadRepresentation UnalignedLoadRepresentationOf(Operator const*); |
| 96 |
| 97 // An UnalignedStore needs a MachineType. |
| 98 typedef MachineRepresentation UnalignedStoreRepresentation; |
| 99 |
| 100 UnalignedStoreRepresentation const& UnalignedStoreRepresentationOf( |
| 101 Operator const*); |
93 | 102 |
94 // A CheckedLoad needs a MachineType. | 103 // A CheckedLoad needs a MachineType. |
95 typedef MachineType CheckedLoadRepresentation; | 104 typedef MachineType CheckedLoadRepresentation; |
96 | 105 |
97 CheckedLoadRepresentation CheckedLoadRepresentationOf(Operator const*); | 106 CheckedLoadRepresentation CheckedLoadRepresentationOf(Operator const*); |
98 | 107 |
99 | 108 |
100 // A CheckedStore needs a MachineType. | 109 // A CheckedStore needs a MachineType. |
101 typedef MachineRepresentation CheckedStoreRepresentation; | 110 typedef MachineRepresentation CheckedStoreRepresentation; |
102 | 111 |
(...skipping 27 matching lines...) Expand all Loading... |
130 kFloat64RoundTiesAway = 1u << 12, | 139 kFloat64RoundTiesAway = 1u << 12, |
131 kInt32DivIsSafe = 1u << 13, | 140 kInt32DivIsSafe = 1u << 13, |
132 kUint32DivIsSafe = 1u << 14, | 141 kUint32DivIsSafe = 1u << 14, |
133 kWord32ShiftIsSafe = 1u << 15, | 142 kWord32ShiftIsSafe = 1u << 15, |
134 kWord32Ctz = 1u << 16, | 143 kWord32Ctz = 1u << 16, |
135 kWord64Ctz = 1u << 17, | 144 kWord64Ctz = 1u << 17, |
136 kWord32Popcnt = 1u << 18, | 145 kWord32Popcnt = 1u << 18, |
137 kWord64Popcnt = 1u << 19, | 146 kWord64Popcnt = 1u << 19, |
138 kWord32ReverseBits = 1u << 20, | 147 kWord32ReverseBits = 1u << 20, |
139 kWord64ReverseBits = 1u << 21, | 148 kWord64ReverseBits = 1u << 21, |
| 149 kUnalignedLoad = 1u << 22, |
| 150 kUnalignedStore = 1u << 23, |
140 kAllOptionalOps = kFloat32Max | kFloat32Min | kFloat64Max | kFloat64Min | | 151 kAllOptionalOps = kFloat32Max | kFloat32Min | kFloat64Max | kFloat64Min | |
141 kFloat32RoundDown | kFloat64RoundDown | kFloat32RoundUp | | 152 kFloat32RoundDown | kFloat64RoundDown | kFloat32RoundUp | |
142 kFloat64RoundUp | kFloat32RoundTruncate | | 153 kFloat64RoundUp | kFloat32RoundTruncate | |
143 kFloat64RoundTruncate | kFloat64RoundTiesAway | | 154 kFloat64RoundTruncate | kFloat64RoundTiesAway | |
144 kFloat32RoundTiesEven | kFloat64RoundTiesEven | | 155 kFloat32RoundTiesEven | kFloat64RoundTiesEven | |
145 kWord32Ctz | kWord64Ctz | kWord32Popcnt | kWord64Popcnt | | 156 kWord32Ctz | kWord64Ctz | kWord32Popcnt | kWord64Popcnt | |
146 kWord32ReverseBits | kWord64ReverseBits | 157 kWord32ReverseBits | kWord64ReverseBits | kUnalignedLoad | |
| 158 kUnalignedStore |
147 }; | 159 }; |
148 typedef base::Flags<Flag, unsigned> Flags; | 160 typedef base::Flags<Flag, unsigned> Flags; |
149 | 161 |
150 explicit MachineOperatorBuilder( | 162 explicit MachineOperatorBuilder( |
151 Zone* zone, | 163 Zone* zone, |
152 MachineRepresentation word = MachineType::PointerRepresentation(), | 164 MachineRepresentation word = MachineType::PointerRepresentation(), |
153 Flags supportedOperators = kNoFlags); | 165 Flags supportedOperators = kNoFlags); |
154 | 166 |
155 const Operator* Word32And(); | 167 const Operator* Word32And(); |
156 const Operator* Word32Or(); | 168 const Operator* Word32Or(); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 const Operator* Float64ExtractHighWord32(); | 328 const Operator* Float64ExtractHighWord32(); |
317 const Operator* Float64InsertLowWord32(); | 329 const Operator* Float64InsertLowWord32(); |
318 const Operator* Float64InsertHighWord32(); | 330 const Operator* Float64InsertHighWord32(); |
319 | 331 |
320 // load [base + index] | 332 // load [base + index] |
321 const Operator* Load(LoadRepresentation rep); | 333 const Operator* Load(LoadRepresentation rep); |
322 | 334 |
323 // store [base + index], value | 335 // store [base + index], value |
324 const Operator* Store(StoreRepresentation rep); | 336 const Operator* Store(StoreRepresentation rep); |
325 | 337 |
| 338 // unaligned load [base + index] |
| 339 const OptionalOperator UnalignedLoad(UnalignedLoadRepresentation rep); |
| 340 |
| 341 // unaligned store [base + index], value |
| 342 const OptionalOperator UnalignedStore(UnalignedStoreRepresentation rep); |
| 343 |
326 const Operator* StackSlot(MachineRepresentation rep); | 344 const Operator* StackSlot(MachineRepresentation rep); |
327 | 345 |
328 // Access to the machine stack. | 346 // Access to the machine stack. |
329 const Operator* LoadStackPointer(); | 347 const Operator* LoadStackPointer(); |
330 const Operator* LoadFramePointer(); | 348 const Operator* LoadFramePointer(); |
331 const Operator* LoadParentFramePointer(); | 349 const Operator* LoadParentFramePointer(); |
332 | 350 |
333 // checked-load heap, index, length | 351 // checked-load heap, index, length |
334 const Operator* CheckedLoad(CheckedLoadRepresentation); | 352 const Operator* CheckedLoad(CheckedLoadRepresentation); |
335 // checked-store heap, index, length, value | 353 // checked-store heap, index, length, value |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 }; | 397 }; |
380 | 398 |
381 | 399 |
382 DEFINE_OPERATORS_FOR_FLAGS(MachineOperatorBuilder::Flags) | 400 DEFINE_OPERATORS_FOR_FLAGS(MachineOperatorBuilder::Flags) |
383 | 401 |
384 } // namespace compiler | 402 } // namespace compiler |
385 } // namespace internal | 403 } // namespace internal |
386 } // namespace v8 | 404 } // namespace v8 |
387 | 405 |
388 #endif // V8_COMPILER_MACHINE_OPERATOR_H_ | 406 #endif // V8_COMPILER_MACHINE_OPERATOR_H_ |
OLD | NEW |