| Index: src/arm/lithium-arm.h
|
| ===================================================================
|
| --- src/arm/lithium-arm.h (revision 6170)
|
| +++ src/arm/lithium-arm.h (working copy)
|
| @@ -101,7 +101,8 @@
|
| // LStoreNamedField
|
| // LStoreNamedGeneric
|
| // LUnaryOperation
|
| -// LArrayLength
|
| +// LJSArrayLength
|
| +// LFixedArrayLength
|
| // LBitNotI
|
| // LBranch
|
| // LCallNew
|
| @@ -127,6 +128,7 @@
|
| // LIsSmiAndBranch
|
| // LLoadNamedField
|
| // LLoadNamedGeneric
|
| +// LLoadFunctionPrototype
|
| // LNumberTagD
|
| // LNumberTagI
|
| // LPushArgument
|
| @@ -161,7 +163,6 @@
|
| V(ArgumentsLength) \
|
| V(ArithmeticD) \
|
| V(ArithmeticT) \
|
| - V(ArrayLength) \
|
| V(ArrayLiteral) \
|
| V(BitI) \
|
| V(BitNotI) \
|
| @@ -195,6 +196,7 @@
|
| V(Deoptimize) \
|
| V(DivI) \
|
| V(DoubleToI) \
|
| + V(FixedArrayLength) \
|
| V(FunctionLiteral) \
|
| V(Gap) \
|
| V(GlobalObject) \
|
| @@ -209,6 +211,7 @@
|
| V(IsObjectAndBranch) \
|
| V(IsSmi) \
|
| V(IsSmiAndBranch) \
|
| + V(JSArrayLength) \
|
| V(HasInstanceType) \
|
| V(HasInstanceTypeAndBranch) \
|
| V(HasCachedArrayIndex) \
|
| @@ -223,6 +226,7 @@
|
| V(LoadKeyedGeneric) \
|
| V(LoadNamedField) \
|
| V(LoadNamedGeneric) \
|
| + V(LoadFunctionPrototype) \
|
| V(ModI) \
|
| V(MulI) \
|
| V(NumberTagD) \
|
| @@ -722,11 +726,9 @@
|
| public:
|
| LIsNullAndBranch(LOperand* value,
|
| bool is_strict,
|
| - LOperand* temp,
|
| int true_block_id,
|
| int false_block_id)
|
| : LIsNull(value, is_strict),
|
| - temp_(temp),
|
| true_block_id_(true_block_id),
|
| false_block_id_(false_block_id) { }
|
|
|
| @@ -737,10 +739,7 @@
|
| int true_block_id() const { return true_block_id_; }
|
| int false_block_id() const { return false_block_id_; }
|
|
|
| - LOperand* temp() const { return temp_; }
|
| -
|
| private:
|
| - LOperand* temp_;
|
| int true_block_id_;
|
| int false_block_id_;
|
| };
|
| @@ -835,11 +834,9 @@
|
| class LHasInstanceTypeAndBranch: public LHasInstanceType {
|
| public:
|
| LHasInstanceTypeAndBranch(LOperand* value,
|
| - LOperand* temporary,
|
| int true_block_id,
|
| int false_block_id)
|
| : LHasInstanceType(value),
|
| - temp_(temporary),
|
| true_block_id_(true_block_id),
|
| false_block_id_(false_block_id) { }
|
|
|
| @@ -851,10 +848,7 @@
|
| int true_block_id() const { return true_block_id_; }
|
| int false_block_id() const { return false_block_id_; }
|
|
|
| - LOperand* temp() { return temp_; }
|
| -
|
| private:
|
| - LOperand* temp_;
|
| int true_block_id_;
|
| int false_block_id_;
|
| };
|
| @@ -1117,42 +1111,43 @@
|
|
|
| class LCmpMapAndBranch: public LUnaryOperation {
|
| public:
|
| - LCmpMapAndBranch(LOperand* value,
|
| - Handle<Map> map,
|
| - int true_block_id,
|
| - int false_block_id)
|
| - : LUnaryOperation(value),
|
| - map_(map),
|
| - true_block_id_(true_block_id),
|
| - false_block_id_(false_block_id) { }
|
| + LCmpMapAndBranch(LOperand* value, LOperand* temp)
|
| + : LUnaryOperation(value), temp_(temp) { }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
|
| + DECLARE_HYDROGEN_ACCESSOR(CompareMapAndBranch)
|
|
|
| virtual bool IsControl() const { return true; }
|
|
|
| - Handle<Map> map() const { return map_; }
|
| - int true_block_id() const { return true_block_id_; }
|
| - int false_block_id() const { return false_block_id_; }
|
| + LOperand* temp() const { return temp_; }
|
| + Handle<Map> map() const { return hydrogen()->map(); }
|
| + int true_block_id() const {
|
| + return hydrogen()->true_destination()->block_id();
|
| + }
|
| + int false_block_id() const {
|
| + return hydrogen()->false_destination()->block_id();
|
| + }
|
|
|
| private:
|
| - Handle<Map> map_;
|
| - int true_block_id_;
|
| - int false_block_id_;
|
| + LOperand* temp_;
|
| };
|
|
|
|
|
| -class LArrayLength: public LUnaryOperation {
|
| +class LJSArrayLength: public LUnaryOperation {
|
| public:
|
| - LArrayLength(LOperand* input, LOperand* temporary)
|
| - : LUnaryOperation(input), temporary_(temporary) { }
|
| + explicit LJSArrayLength(LOperand* input) : LUnaryOperation(input) { }
|
|
|
| - LOperand* temporary() const { return temporary_; }
|
| + DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js-array-length")
|
| + DECLARE_HYDROGEN_ACCESSOR(JSArrayLength)
|
| +};
|
|
|
| - DECLARE_CONCRETE_INSTRUCTION(ArrayLength, "array-length")
|
| - DECLARE_HYDROGEN_ACCESSOR(ArrayLength)
|
|
|
| - private:
|
| - LOperand* temporary_;
|
| +class LFixedArrayLength: public LUnaryOperation {
|
| + public:
|
| + explicit LFixedArrayLength(LOperand* input) : LUnaryOperation(input) { }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed-array-length")
|
| + DECLARE_HYDROGEN_ACCESSOR(FixedArrayLength)
|
| };
|
|
|
|
|
| @@ -1256,6 +1251,18 @@
|
| };
|
|
|
|
|
| +class LLoadFunctionPrototype: public LUnaryOperation {
|
| + public:
|
| + explicit LLoadFunctionPrototype(LOperand* function)
|
| + : LUnaryOperation(function) { }
|
| +
|
| + DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype")
|
| + DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype)
|
| +
|
| + LOperand* function() const { return input(); }
|
| +};
|
| +
|
| +
|
| class LLoadElements: public LUnaryOperation {
|
| public:
|
| explicit LLoadElements(LOperand* obj) : LUnaryOperation(obj) { }
|
| @@ -1655,21 +1662,25 @@
|
|
|
| class LCheckPrototypeMaps: public LInstruction {
|
| public:
|
| - LCheckPrototypeMaps(LOperand* temp,
|
| + LCheckPrototypeMaps(LOperand* temp1,
|
| + LOperand* temp2,
|
| Handle<JSObject> holder,
|
| Handle<Map> receiver_map)
|
| - : temp_(temp),
|
| + : temp1_(temp1),
|
| + temp2_(temp2),
|
| holder_(holder),
|
| receiver_map_(receiver_map) { }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps")
|
|
|
| - LOperand* temp() const { return temp_; }
|
| + LOperand* temp1() const { return temp1_; }
|
| + LOperand* temp2() const { return temp2_; }
|
| Handle<JSObject> holder() const { return holder_; }
|
| Handle<Map> receiver_map() const { return receiver_map_; }
|
|
|
| private:
|
| - LOperand* temp_;
|
| + LOperand* temp1_;
|
| + LOperand* temp2_;
|
| Handle<JSObject> holder_;
|
| Handle<Map> receiver_map_;
|
| };
|
| @@ -2051,7 +2062,6 @@
|
| LInstruction* Define(LInstruction* instr);
|
| LInstruction* DefineAsRegister(LInstruction* instr);
|
| LInstruction* DefineAsSpilled(LInstruction* instr, int index);
|
| - LInstruction* DefineSameAsAny(LInstruction* instr);
|
| LInstruction* DefineSameAsFirst(LInstruction* instr);
|
| LInstruction* DefineFixed(LInstruction* instr, Register reg);
|
| LInstruction* DefineFixedDouble(LInstruction* instr, DoubleRegister reg);
|
|
|