Index: src/compiler/code-stub-assembler.h |
diff --git a/src/compiler/code-stub-assembler.h b/src/compiler/code-stub-assembler.h |
index 115bc43dbc99a8e2f88204c6f3d8a873f27f846a..a12414b3d9f42e82f7100962e87b940b3dc6ed34 100644 |
--- a/src/compiler/code-stub-assembler.h |
+++ b/src/compiler/code-stub-assembler.h |
@@ -43,6 +43,7 @@ class Schedule; |
V(Int32Sub) \ |
V(Int32Mul) \ |
V(Int32GreaterThanOrEqual) \ |
+ V(Int32LessThan) \ |
V(WordEqual) \ |
V(WordNotEqual) \ |
V(WordOr) \ |
@@ -71,14 +72,26 @@ class Schedule; |
V(Word64Ror) \ |
V(UintPtrGreaterThanOrEqual) |
+#define CODE_STUB_ASSEMBLER_UNARY_OP_LIST(V) \ |
+ V(ChangeFloat64ToUint32) \ |
+ V(ChangeInt32ToInt64) \ |
+ V(ChangeUint32ToFloat64) \ |
+ V(ChangeUint32ToUint64) |
+ |
class CodeStubAssembler { |
public: |
+ // Create with CallStub linkage. |
// |result_size| specifies the number of results returned by the stub. |
// TODO(rmcilroy): move result_size to the CallInterfaceDescriptor. |
CodeStubAssembler(Isolate* isolate, Zone* zone, |
const CallInterfaceDescriptor& descriptor, |
Code::Flags flags, const char* name, |
size_t result_size = 1); |
+ |
+ // Create with JSCall linkage. |
+ CodeStubAssembler(Isolate* isolate, Zone* zone, int parameter_count, |
+ Code::Flags flags, const char* name); |
+ |
virtual ~CodeStubAssembler(); |
Handle<Code> GenerateCode(); |
@@ -147,9 +160,10 @@ class CodeStubAssembler { |
Node* WordShl(Node* value, int shift); |
- // Conversions |
- Node* ChangeInt32ToInt64(Node* value); |
- Node* ChangeUint32ToUint64(Node* value); |
+// Unary |
+#define DECLARE_CODE_STUB_ASSEMBER_UNARY_OP(name) Node* name(Node* a); |
+ CODE_STUB_ASSEMBLER_UNARY_OP_LIST(DECLARE_CODE_STUB_ASSEMBER_UNARY_OP) |
+#undef DECLARE_CODE_STUB_ASSEMBER_UNARY_OP |
// Projections |
Node* Projection(int index, Node* value); |
@@ -166,6 +180,7 @@ class CodeStubAssembler { |
Node* CallRuntime(Runtime::FunctionId function_id, Node* context, Node* arg1, |
Node* arg2, Node* arg3, Node* arg4, Node* arg5); |
+ Node* TailCallRuntime(Runtime::FunctionId function_id, Node* context); |
Node* TailCallRuntime(Runtime::FunctionId function_id, Node* context, |
Node* arg1); |
Node* TailCallRuntime(Runtime::FunctionId function_id, Node* context, |
@@ -197,9 +212,12 @@ class CodeStubAssembler { |
// Macros |
// =========================================================================== |
- // Tag and untag Smi values. |
+ // Tag a Word as a Smi value. |
Node* SmiTag(Node* value); |
+ // Untag a Smi value as a Word. |
Node* SmiUntag(Node* value); |
+ // Untag an Smi value as a 32-bit value. |
+ Node* SmiToInt32(Node* value); |
// Smi operations. |
Node* SmiAdd(Node* a, Node* b); |
@@ -215,6 +233,8 @@ 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. |
+ Node* LoadHeapNumberValue(Node* object); |
// Load an array element from a FixedArray. |
Node* LoadFixedArrayElementSmiIndex(Node* object, Node* smi_index, |
@@ -224,6 +244,15 @@ class CodeStubAssembler { |
// Store an array element to a FixedArray. |
Node* StoreFixedArrayElementNoWriteBarrier(Node* object, Node* index, |
Node* value); |
+ Node* LoadInstanceType(Node* object); |
+ |
+ // Returns a node that is true if the given bit is set in |word32|. |
+ template <typename T> |
+ Node* BitFieldDecode(Node* word32) { |
+ return BitFieldDecode(word32, T::kShift, T::kMask); |
+ } |
+ |
+ Node* BitFieldDecode(Node* word32, uint32_t shift, uint32_t mask); |
protected: |
// Protected helpers which delegate to RawMachineAssembler. |