diff options
author | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-19 09:25:14 +0100 |
---|---|---|
committer | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-19 09:56:31 +0100 |
commit | 6313e1fe4c27755adde87e62db1c2f9fac534ae4 (patch) | |
tree | c57bb29f65e02fbfcc07895a8cc2903fff9300ba /src/3rdparty/v8/src/mips/macro-assembler-mips.h | |
parent | b5a49a260d03249c386f1b63c249089383dd81fa (diff) | |
parent | cac65e7a222b848a735a974b0aeb43209b0cfa18 (diff) | |
download | qtjsbackend-6313e1fe4c27755adde87e62db1c2f9fac534ae4.tar.gz |
Merge branch 'dev' into stable
This starts Qt 5.1 release cycle
Change-Id: I892bbc73c276842894a720f761ce31ad1b015672
Diffstat (limited to 'src/3rdparty/v8/src/mips/macro-assembler-mips.h')
-rw-r--r-- | src/3rdparty/v8/src/mips/macro-assembler-mips.h | 61 |
1 files changed, 41 insertions, 20 deletions
diff --git a/src/3rdparty/v8/src/mips/macro-assembler-mips.h b/src/3rdparty/v8/src/mips/macro-assembler-mips.h index b5897e4..8b7d7c1 100644 --- a/src/3rdparty/v8/src/mips/macro-assembler-mips.h +++ b/src/3rdparty/v8/src/mips/macro-assembler-mips.h @@ -108,12 +108,12 @@ inline MemOperand ContextOperand(Register context, int index) { inline MemOperand GlobalObjectOperand() { - return ContextOperand(cp, Context::GLOBAL_INDEX); + return ContextOperand(cp, Context::GLOBAL_OBJECT_INDEX); } static inline MemOperand QmlGlobalObjectOperand() { - return ContextOperand(cp, Context::QML_GLOBAL_INDEX); + return ContextOperand(cp, Context::QML_GLOBAL_OBJECT_INDEX); } @@ -187,11 +187,11 @@ class MacroAssembler: public Assembler { void Call(Address target, RelocInfo::Mode rmode, COND_ARGS); static int CallSize(Handle<Code> code, RelocInfo::Mode rmode = RelocInfo::CODE_TARGET, - unsigned ast_id = kNoASTId, + TypeFeedbackId ast_id = TypeFeedbackId::None(), COND_ARGS); void Call(Handle<Code> code, RelocInfo::Mode rmode = RelocInfo::CODE_TARGET, - unsigned ast_id = kNoASTId, + TypeFeedbackId ast_id = TypeFeedbackId::None(), COND_ARGS); void Ret(COND_ARGS); inline void Ret(BranchDelaySlot bd, Condition cond = al, @@ -811,8 +811,8 @@ class MacroAssembler: public Assembler { void LoadContext(Register dst, int context_chain_length); // Conditionally load the cached Array transitioned map of type - // transitioned_kind from the global context if the map in register - // map_in_out is the cached Array map in the global context of + // transitioned_kind from the native context if the map in register + // map_in_out is the cached Array map in the native context of // expected_kind. void LoadTransitionedArrayMapConditional( ElementsKind expected_kind, @@ -824,7 +824,8 @@ class MacroAssembler: public Assembler { // Load the initial map for new Arrays from a JSFunction. void LoadInitialArrayMap(Register function_in, Register scratch, - Register map_out); + Register map_out, + bool can_have_holes); void LoadGlobalFunction(int index, Register function); @@ -966,9 +967,9 @@ class MacroAssembler: public Assembler { // Check if a map for a JSObject indicates that the object has fast smi only // elements. Jump to the specified label if it does not. - void CheckFastSmiOnlyElements(Register map, - Register scratch, - Label* fail); + void CheckFastSmiElements(Register map, + Register scratch, + Label* fail); // Check to see if maybe_number can be stored as a double in // FastDoubleElements. If it can, store it at the index specified by key in @@ -977,6 +978,7 @@ class MacroAssembler: public Assembler { void StoreNumberToDoubleElements(Register value_reg, Register key_reg, Register receiver_reg, + // All regs below here overwritten. Register elements_reg, Register scratch1, Register scratch2, @@ -996,6 +998,15 @@ class MacroAssembler: public Assembler { Label* branch_to, CompareMapMode mode = REQUIRE_EXACT_MAP); + // As above, but the map of the object is already loaded into the register + // which is preserved by the code generated. + void CompareMapAndBranch(Register obj_map, + Handle<Map> map, + Label* early_success, + Condition cond, + Label* branch_to, + CompareMapMode mode = REQUIRE_EXACT_MAP); + // Check if the map of an object is equal to a specified map and branch to // label if not. Skip the smi check if not required (object is known to be a // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match @@ -1330,17 +1341,18 @@ class MacroAssembler: public Assembler { // Jump if either of the registers contain a smi. void JumpIfEitherSmi(Register reg1, Register reg2, Label* on_either_smi); - // Abort execution if argument is a smi. Used in debug code. - void AbortIfSmi(Register object); - void AbortIfNotSmi(Register object); + // Abort execution if argument is a smi, enabled via --debug-code. + void AssertNotSmi(Register object); + void AssertSmi(Register object); - // Abort execution if argument is a string. Used in debug code. - void AbortIfNotString(Register object); + // Abort execution if argument is not a string, enabled via --debug-code. + void AssertString(Register object); - // Abort execution if argument is not the root value with the given index. - void AbortIfNotRootValue(Register src, - Heap::RootListIndex root_value_index, - const char* message); + // Abort execution if argument is not the root value with the given index, + // enabled via --debug-code. + void AssertRootValue(Register src, + Heap::RootListIndex root_value_index, + const char* message); // --------------------------------------------------------------------------- // HeapNumber utilities. @@ -1392,7 +1404,16 @@ class MacroAssembler: public Assembler { void LoadInstanceDescriptors(Register map, Register descriptors); - + void EnumLength(Register dst, Register map); + void NumberOfOwnDescriptors(Register dst, Register map); + + template<typename Field> + void DecodeField(Register reg) { + static const int shift = Field::kShift; + static const int mask = (Field::kMask >> shift) << kSmiTagSize; + srl(reg, reg, shift); + And(reg, reg, Operand(mask)); + } // Activation support. void EnterFrame(StackFrame::Type type); |