OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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_CODE_STUB_ASSEMBLER_H_ | 5 #ifndef V8_COMPILER_CODE_STUB_ASSEMBLER_H_ |
6 #define V8_COMPILER_CODE_STUB_ASSEMBLER_H_ | 6 #define V8_COMPILER_CODE_STUB_ASSEMBLER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 // Clients of this interface shouldn't depend on lots of compiler internals. | 10 // Clients of this interface shouldn't depend on lots of compiler internals. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 | 63 |
64 #define CODE_STUB_ASSEMBLER_BINARY_OP_LIST(V) \ | 64 #define CODE_STUB_ASSEMBLER_BINARY_OP_LIST(V) \ |
65 CODE_STUB_ASSEMBLER_COMPARE_BINARY_OP_LIST(V) \ | 65 CODE_STUB_ASSEMBLER_COMPARE_BINARY_OP_LIST(V) \ |
66 V(Float64Add) \ | 66 V(Float64Add) \ |
67 V(Float64Sub) \ | 67 V(Float64Sub) \ |
68 V(IntPtrAdd) \ | 68 V(IntPtrAdd) \ |
69 V(IntPtrAddWithOverflow) \ | 69 V(IntPtrAddWithOverflow) \ |
70 V(IntPtrSub) \ | 70 V(IntPtrSub) \ |
71 V(IntPtrSubWithOverflow) \ | 71 V(IntPtrSubWithOverflow) \ |
72 V(Int32Add) \ | 72 V(Int32Add) \ |
| 73 V(Int32AddWithOverflow) \ |
73 V(Int32Sub) \ | 74 V(Int32Sub) \ |
74 V(Int32Mul) \ | 75 V(Int32Mul) \ |
75 V(WordOr) \ | 76 V(WordOr) \ |
76 V(WordAnd) \ | 77 V(WordAnd) \ |
77 V(WordXor) \ | 78 V(WordXor) \ |
78 V(WordShl) \ | 79 V(WordShl) \ |
79 V(WordShr) \ | 80 V(WordShr) \ |
80 V(WordSar) \ | 81 V(WordSar) \ |
81 V(WordRor) \ | 82 V(WordRor) \ |
82 V(Word32Or) \ | 83 V(Word32Or) \ |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 // Load an object pointer from a buffer that isn't in the heap. | 288 // Load an object pointer from a buffer that isn't in the heap. |
288 Node* LoadBufferObject(Node* buffer, int offset, | 289 Node* LoadBufferObject(Node* buffer, int offset, |
289 MachineType rep = MachineType::AnyTagged()); | 290 MachineType rep = MachineType::AnyTagged()); |
290 // Load a field from an object on the heap. | 291 // Load a field from an object on the heap. |
291 Node* LoadObjectField(Node* object, int offset, | 292 Node* LoadObjectField(Node* object, int offset, |
292 MachineType rep = MachineType::AnyTagged()); | 293 MachineType rep = MachineType::AnyTagged()); |
293 // Load the floating point value of a HeapNumber. | 294 // Load the floating point value of a HeapNumber. |
294 Node* LoadHeapNumberValue(Node* object); | 295 Node* LoadHeapNumberValue(Node* object); |
295 // Store the floating point value of a HeapNumber. | 296 // Store the floating point value of a HeapNumber. |
296 Node* StoreHeapNumberValue(Node* object, Node* value); | 297 Node* StoreHeapNumberValue(Node* object, Node* value); |
| 298 // Truncate the floating point value of a HeapNumber to an Int32. |
| 299 Node* TruncateHeapNumberValueToInt32(Node* object); |
297 // Load the bit field of a Map. | 300 // Load the bit field of a Map. |
298 Node* LoadMapBitField(Node* map); | 301 Node* LoadMapBitField(Node* map); |
299 // Load the instance type of a Map. | 302 // Load the instance type of a Map. |
300 Node* LoadMapInstanceType(Node* map); | 303 Node* LoadMapInstanceType(Node* map); |
301 | 304 |
302 // Load an array element from a FixedArray. | 305 // Load an array element from a FixedArray. |
303 Node* LoadFixedArrayElementSmiIndex(Node* object, Node* smi_index, | 306 Node* LoadFixedArrayElementSmiIndex(Node* object, Node* smi_index, |
304 int additional_offset = 0); | 307 int additional_offset = 0); |
305 Node* LoadFixedArrayElementConstantIndex(Node* object, int index); | 308 Node* LoadFixedArrayElementConstantIndex(Node* object, int index); |
306 | 309 |
(...skipping 15 matching lines...) Expand all Loading... |
322 Node* LoadInstanceType(Node* object); | 325 Node* LoadInstanceType(Node* object); |
323 | 326 |
324 // Returns a node that is true if the given bit is set in |word32|. | 327 // Returns a node that is true if the given bit is set in |word32|. |
325 template <typename T> | 328 template <typename T> |
326 Node* BitFieldDecode(Node* word32) { | 329 Node* BitFieldDecode(Node* word32) { |
327 return BitFieldDecode(word32, T::kShift, T::kMask); | 330 return BitFieldDecode(word32, T::kShift, T::kMask); |
328 } | 331 } |
329 | 332 |
330 Node* BitFieldDecode(Node* word32, uint32_t shift, uint32_t mask); | 333 Node* BitFieldDecode(Node* word32, uint32_t shift, uint32_t mask); |
331 | 334 |
| 335 // Conversions. |
| 336 Node* ChangeInt32ToTagged(Node* value); |
| 337 |
332 // Branching helpers. | 338 // Branching helpers. |
333 // TODO(danno): Can we be more cleverish wrt. edge-split? | 339 // TODO(danno): Can we be more cleverish wrt. edge-split? |
334 void BranchIf(Node* condition, Label* if_true, Label* if_false); | 340 void BranchIf(Node* condition, Label* if_true, Label* if_false); |
335 | 341 |
336 #define BRANCH_HELPER(name) \ | 342 #define BRANCH_HELPER(name) \ |
337 void BranchIf##name(Node* a, Node* b, Label* if_true, Label* if_false) { \ | 343 void BranchIf##name(Node* a, Node* b, Label* if_true, Label* if_false) { \ |
338 BranchIf(name(a, b), if_true, if_false); \ | 344 BranchIf(name(a, b), if_true, if_false); \ |
339 } | 345 } |
340 CODE_STUB_ASSEMBLER_COMPARE_BINARY_OP_LIST(BRANCH_HELPER) | 346 CODE_STUB_ASSEMBLER_COMPARE_BINARY_OP_LIST(BRANCH_HELPER) |
341 #undef BRANCH_HELPER | 347 #undef BRANCH_HELPER |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 // Map of variables to the list of value nodes that have been added from each | 435 // Map of variables to the list of value nodes that have been added from each |
430 // merge path in their order of merging. | 436 // merge path in their order of merging. |
431 std::map<Variable::Impl*, std::vector<Node*>> variable_merges_; | 437 std::map<Variable::Impl*, std::vector<Node*>> variable_merges_; |
432 }; | 438 }; |
433 | 439 |
434 } // namespace compiler | 440 } // namespace compiler |
435 } // namespace internal | 441 } // namespace internal |
436 } // namespace v8 | 442 } // namespace v8 |
437 | 443 |
438 #endif // V8_COMPILER_CODE_STUB_ASSEMBLER_H_ | 444 #endif // V8_COMPILER_CODE_STUB_ASSEMBLER_H_ |
OLD | NEW |