| 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 #ifndef V8_COMPILER_MACHINE_NODE_FACTORY_H_ | 5 #ifndef V8_COMPILER_MACHINE_NODE_FACTORY_H_ |
| 6 #define V8_COMPILER_MACHINE_NODE_FACTORY_H_ | 6 #define V8_COMPILER_MACHINE_NODE_FACTORY_H_ |
| 7 | 7 |
| 8 #ifdef USE_SIMULATOR | 8 #ifdef USE_SIMULATOR |
| 9 #define MACHINE_ASSEMBLER_SUPPORTS_CALL_C 0 | 9 #define MACHINE_ASSEMBLER_SUPPORTS_CALL_C 0 |
| 10 #else | 10 #else |
| 11 #define MACHINE_ASSEMBLER_SUPPORTS_CALL_C 1 | 11 #define MACHINE_ASSEMBLER_SUPPORTS_CALL_C 1 |
| 12 #endif | 12 #endif |
| 13 | 13 |
| 14 #include "src/v8.h" | 14 #include "src/v8.h" |
| 15 | 15 |
| 16 #include "src/compiler/machine-operator.h" | 16 #include "src/compiler/machine-operator.h" |
| 17 #include "src/compiler/node.h" | 17 #include "src/compiler/node.h" |
| 18 | 18 |
| 19 namespace v8 { | 19 namespace v8 { |
| 20 namespace internal { | 20 namespace internal { |
| 21 namespace compiler { | 21 namespace compiler { |
| 22 | 22 |
| 23 class MachineCallDescriptorBuilder : public ZoneObject { | 23 class MachineCallDescriptorBuilder : public ZoneObject { |
| 24 public: | 24 public: |
| 25 MachineCallDescriptorBuilder(MachineRepresentation return_type, | 25 MachineCallDescriptorBuilder(MachineType return_type, int parameter_count, |
| 26 int parameter_count, | 26 const MachineType* parameter_types) |
| 27 const MachineRepresentation* parameter_types) | |
| 28 : return_type_(return_type), | 27 : return_type_(return_type), |
| 29 parameter_count_(parameter_count), | 28 parameter_count_(parameter_count), |
| 30 parameter_types_(parameter_types) {} | 29 parameter_types_(parameter_types) {} |
| 31 | 30 |
| 32 int parameter_count() const { return parameter_count_; } | 31 int parameter_count() const { return parameter_count_; } |
| 33 const MachineRepresentation* parameter_types() const { | 32 const MachineType* parameter_types() const { return parameter_types_; } |
| 34 return parameter_types_; | |
| 35 } | |
| 36 | 33 |
| 37 CallDescriptor* BuildCallDescriptor(Zone* zone) { | 34 CallDescriptor* BuildCallDescriptor(Zone* zone) { |
| 38 return Linkage::GetSimplifiedCDescriptor(zone, parameter_count_, | 35 return Linkage::GetSimplifiedCDescriptor(zone, parameter_count_, |
| 39 return_type_, parameter_types_); | 36 return_type_, parameter_types_); |
| 40 } | 37 } |
| 41 | 38 |
| 42 private: | 39 private: |
| 43 const MachineRepresentation return_type_; | 40 const MachineType return_type_; |
| 44 const int parameter_count_; | 41 const int parameter_count_; |
| 45 const MachineRepresentation* const parameter_types_; | 42 const MachineType* const parameter_types_; |
| 46 }; | 43 }; |
| 47 | 44 |
| 48 | 45 |
| 49 #define ZONE() static_cast<NodeFactory*>(this)->zone() | 46 #define ZONE() static_cast<NodeFactory*>(this)->zone() |
| 50 #define COMMON() static_cast<NodeFactory*>(this)->common() | 47 #define COMMON() static_cast<NodeFactory*>(this)->common() |
| 51 #define MACHINE() static_cast<NodeFactory*>(this)->machine() | 48 #define MACHINE() static_cast<NodeFactory*>(this)->machine() |
| 52 #define NEW_NODE_0(op) static_cast<NodeFactory*>(this)->NewNode(op) | 49 #define NEW_NODE_0(op) static_cast<NodeFactory*>(this)->NewNode(op) |
| 53 #define NEW_NODE_1(op, a) static_cast<NodeFactory*>(this)->NewNode(op, a) | 50 #define NEW_NODE_1(op, a) static_cast<NodeFactory*>(this)->NewNode(op, a) |
| 54 #define NEW_NODE_2(op, a, b) static_cast<NodeFactory*>(this)->NewNode(op, a, b) | 51 #define NEW_NODE_2(op, a, b) static_cast<NodeFactory*>(this)->NewNode(op, a, b) |
| 55 #define NEW_NODE_3(op, a, b, c) \ | 52 #define NEW_NODE_3(op, a, b, c) \ |
| (...skipping 27 matching lines...) Expand all Loading... |
| 83 PrintableUnique<Object> val = | 80 PrintableUnique<Object> val = |
| 84 PrintableUnique<Object>::CreateUninitialized(ZONE(), object); | 81 PrintableUnique<Object>::CreateUninitialized(ZONE(), object); |
| 85 return NEW_NODE_0(COMMON()->HeapConstant(val)); | 82 return NEW_NODE_0(COMMON()->HeapConstant(val)); |
| 86 } | 83 } |
| 87 | 84 |
| 88 Node* Projection(int index, Node* a) { | 85 Node* Projection(int index, Node* a) { |
| 89 return NEW_NODE_1(COMMON()->Projection(index), a); | 86 return NEW_NODE_1(COMMON()->Projection(index), a); |
| 90 } | 87 } |
| 91 | 88 |
| 92 // Memory Operations. | 89 // Memory Operations. |
| 93 Node* Load(MachineRepresentation rep, Node* base) { | 90 Node* Load(MachineType rep, Node* base) { |
| 94 return Load(rep, base, Int32Constant(0)); | 91 return Load(rep, base, Int32Constant(0)); |
| 95 } | 92 } |
| 96 Node* Load(MachineRepresentation rep, Node* base, Node* index) { | 93 Node* Load(MachineType rep, Node* base, Node* index) { |
| 97 return NEW_NODE_2(MACHINE()->Load(rep), base, index); | 94 return NEW_NODE_2(MACHINE()->Load(rep), base, index); |
| 98 } | 95 } |
| 99 void Store(MachineRepresentation rep, Node* base, Node* value) { | 96 void Store(MachineType rep, Node* base, Node* value) { |
| 100 Store(rep, base, Int32Constant(0), value); | 97 Store(rep, base, Int32Constant(0), value); |
| 101 } | 98 } |
| 102 void Store(MachineRepresentation rep, Node* base, Node* index, Node* value) { | 99 void Store(MachineType rep, Node* base, Node* index, Node* value) { |
| 103 NEW_NODE_3(MACHINE()->Store(rep, kNoWriteBarrier), base, index, value); | 100 NEW_NODE_3(MACHINE()->Store(rep, kNoWriteBarrier), base, index, value); |
| 104 } | 101 } |
| 105 // Arithmetic Operations. | 102 // Arithmetic Operations. |
| 106 Node* WordAnd(Node* a, Node* b) { | 103 Node* WordAnd(Node* a, Node* b) { |
| 107 return NEW_NODE_2(MACHINE()->WordAnd(), a, b); | 104 return NEW_NODE_2(MACHINE()->WordAnd(), a, b); |
| 108 } | 105 } |
| 109 Node* WordOr(Node* a, Node* b) { | 106 Node* WordOr(Node* a, Node* b) { |
| 110 return NEW_NODE_2(MACHINE()->WordOr(), a, b); | 107 return NEW_NODE_2(MACHINE()->WordOr(), a, b); |
| 111 } | 108 } |
| 112 Node* WordXor(Node* a, Node* b) { | 109 Node* WordXor(Node* a, Node* b) { |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 } | 344 } |
| 348 Node* ChangeFloat64ToInt32(Node* a) { | 345 Node* ChangeFloat64ToInt32(Node* a) { |
| 349 return NEW_NODE_1(MACHINE()->ChangeFloat64ToInt32(), a); | 346 return NEW_NODE_1(MACHINE()->ChangeFloat64ToInt32(), a); |
| 350 } | 347 } |
| 351 Node* ChangeFloat64ToUint32(Node* a) { | 348 Node* ChangeFloat64ToUint32(Node* a) { |
| 352 return NEW_NODE_1(MACHINE()->ChangeFloat64ToUint32(), a); | 349 return NEW_NODE_1(MACHINE()->ChangeFloat64ToUint32(), a); |
| 353 } | 350 } |
| 354 | 351 |
| 355 #ifdef MACHINE_ASSEMBLER_SUPPORTS_CALL_C | 352 #ifdef MACHINE_ASSEMBLER_SUPPORTS_CALL_C |
| 356 // Call to C. | 353 // Call to C. |
| 357 Node* CallC(Node* function_address, MachineRepresentation return_type, | 354 Node* CallC(Node* function_address, MachineType return_type, |
| 358 MachineRepresentation* arg_types, Node** args, int n_args) { | 355 MachineType* arg_types, Node** args, int n_args) { |
| 359 CallDescriptor* descriptor = Linkage::GetSimplifiedCDescriptor( | 356 CallDescriptor* descriptor = Linkage::GetSimplifiedCDescriptor( |
| 360 ZONE(), n_args, return_type, arg_types); | 357 ZONE(), n_args, return_type, arg_types); |
| 361 Node** passed_args = | 358 Node** passed_args = |
| 362 static_cast<Node**>(alloca((n_args + 1) * sizeof(args[0]))); | 359 static_cast<Node**>(alloca((n_args + 1) * sizeof(args[0]))); |
| 363 passed_args[0] = function_address; | 360 passed_args[0] = function_address; |
| 364 for (int i = 0; i < n_args; ++i) { | 361 for (int i = 0; i < n_args; ++i) { |
| 365 passed_args[i + 1] = args[i]; | 362 passed_args[i + 1] = args[i]; |
| 366 } | 363 } |
| 367 return NEW_NODE_2(COMMON()->Call(descriptor), n_args + 1, passed_args); | 364 return NEW_NODE_2(COMMON()->Call(descriptor), n_args + 1, passed_args); |
| 368 } | 365 } |
| 369 #endif | 366 #endif |
| 370 }; | 367 }; |
| 371 | 368 |
| 372 #undef NEW_NODE_0 | 369 #undef NEW_NODE_0 |
| 373 #undef NEW_NODE_1 | 370 #undef NEW_NODE_1 |
| 374 #undef NEW_NODE_2 | 371 #undef NEW_NODE_2 |
| 375 #undef NEW_NODE_3 | 372 #undef NEW_NODE_3 |
| 376 #undef MACHINE | 373 #undef MACHINE |
| 377 #undef COMMON | 374 #undef COMMON |
| 378 #undef ZONE | 375 #undef ZONE |
| 379 | 376 |
| 380 } // namespace compiler | 377 } // namespace compiler |
| 381 } // namespace internal | 378 } // namespace internal |
| 382 } // namespace v8 | 379 } // namespace v8 |
| 383 | 380 |
| 384 #endif // V8_COMPILER_MACHINE_NODE_FACTORY_H_ | 381 #endif // V8_COMPILER_MACHINE_NODE_FACTORY_H_ |
| OLD | NEW |