| Index: src/compiler/code-stub-assembler.h
|
| diff --git a/src/compiler/code-stub-assembler.h b/src/compiler/code-stub-assembler.h
|
| index a12414b3d9f42e82f7100962e87b940b3dc6ed34..3ce6e03ec7060266c7d47ecea8bd07ba359d7bfe 100644
|
| --- a/src/compiler/code-stub-assembler.h
|
| +++ b/src/compiler/code-stub-assembler.h
|
| @@ -21,6 +21,7 @@ namespace internal {
|
|
|
| class CallInterfaceDescriptor;
|
| class Isolate;
|
| +class Factory;
|
| class Zone;
|
|
|
| namespace compiler {
|
| @@ -74,6 +75,7 @@ class Schedule;
|
|
|
| #define CODE_STUB_ASSEMBLER_UNARY_OP_LIST(V) \
|
| V(ChangeFloat64ToUint32) \
|
| + V(ChangeInt32ToFloat64) \
|
| V(ChangeInt32ToInt64) \
|
| V(ChangeUint32ToFloat64) \
|
| V(ChangeUint32ToUint64)
|
| @@ -124,6 +126,7 @@ class CodeStubAssembler {
|
| Node* BooleanConstant(bool value);
|
| Node* ExternalConstant(ExternalReference address);
|
| Node* Float64Constant(double value);
|
| + Node* HeapNumberMapConstant();
|
|
|
| Node* Parameter(int value);
|
| void Return(Node* value);
|
| @@ -204,7 +207,10 @@ class CodeStubAssembler {
|
| Node* context, Node* arg1, Node* arg2, Node* arg3, Node* arg4,
|
| Node* arg5, size_t result_size = 1);
|
|
|
| - Node* TailCallStub(CodeStub& stub, Node** args);
|
| + Node* TailCallStub(const CallInterfaceDescriptor& descriptor, Node* target,
|
| + Node* context, Node* arg1, Node* arg2,
|
| + size_t result_size = 1);
|
| +
|
| Node* TailCall(const CallInterfaceDescriptor& descriptor, Node* target,
|
| Node** args, size_t result_size = 1);
|
|
|
| @@ -216,7 +222,9 @@ class CodeStubAssembler {
|
| Node* SmiTag(Node* value);
|
| // Untag a Smi value as a Word.
|
| Node* SmiUntag(Node* value);
|
| - // Untag an Smi value as a 32-bit value.
|
| +
|
| + // Smi conversions.
|
| + Node* SmiToFloat64(Node* value);
|
| Node* SmiToInt32(Node* value);
|
|
|
| // Smi operations.
|
| @@ -233,8 +241,10 @@ class CodeStubAssembler {
|
| Node* LoadBufferObject(Node* buffer, int offset);
|
| // Load a field from an object on the heap.
|
| Node* LoadObjectField(Node* object, int offset);
|
| - // Load the HeapNumber value from a HeapNumber object.
|
| + // Load the floating point value of a HeapNumber.
|
| Node* LoadHeapNumberValue(Node* object);
|
| + // Load the instance type of a Map.
|
| + Node* LoadMapInstanceType(Node* map);
|
|
|
| // Load an array element from a FixedArray.
|
| Node* LoadFixedArrayElementSmiIndex(Node* object, Node* smi_index,
|
| @@ -254,11 +264,19 @@ class CodeStubAssembler {
|
|
|
| Node* BitFieldDecode(Node* word32, uint32_t shift, uint32_t mask);
|
|
|
| + // Branching helpers.
|
| + // TODO(danno): Can we be more cleverish wrt. edge-split?
|
| + void BranchIfFloat64Equal(Node* a, Node* b, Label* if_true, Label* if_false);
|
| + void BranchIfFloat64IsNaN(Node* value, Label* if_true, Label* if_false) {
|
| + BranchIfFloat64Equal(value, value, if_false, if_true);
|
| + }
|
| +
|
| protected:
|
| // Protected helpers which delegate to RawMachineAssembler.
|
| - Graph* graph();
|
| - Isolate* isolate();
|
| - Zone* zone();
|
| + Graph* graph() const;
|
| + Factory* factory() const;
|
| + Isolate* isolate() const;
|
| + Zone* zone() const;
|
|
|
| // Enables subclasses to perform operations before and after a call.
|
| virtual void CallPrologue();
|
|
|