From 29614f3a7f84955e75dbdacdaa0abb18fc9e5231 Mon Sep 17 00:00:00 2001 From: Peter Varga Date: Fri, 23 Nov 2012 15:47:13 +0100 Subject: Updated V8 from git://github.com/v8/v8.git to 2215c442af2f0a4fce076e35ea061486d62778a1 Update V8 source to version 3.15.2 * Performance and stability improvements on all platforms. * Avoid overdeep recursion in regexp where a guarded expression with a minimum repetition count is inside another quantifier. * Exposed last seen heap object id via v8 public api. * Implemented heap profiler memory usage reporting. * Preserved error message during finally block in try..finally. * Improved heuristics to keep objects in fast mode with inherited constructors. * Fixed lazy sweeping heuristics to prevent old-space expansion. * Fixed sharing of literal boilerplates for optimized code. * Expose more detailed memory statistics. * Cleaned up hardfp ABI detection for ARM (V8 issue 2140). * Report "hidden properties" in heap profiler for properties case. * Added optimizing compiler support for JavaScript getters. * Fixed computation of call targets on prototypes in Crankshaft. * Fixed ICs for slow objects with native accessor. * Fixed transcendental cache on ARM in optimized code (issue 2234). * New heap inspection tools: counters for object sizes and counts, histograms for external fragmentation. * Added more support for heap analysis. * Interpret negative hexadecimal literals as NaN. (issue 2240) * Improved API calls that return empty handles. * Added checks for interceptors to negative lookup code in Crankshaft. * Introduced global contexts to represent lexical global scope(s). * Allocate block-scoped global bindings to global context. * Add empty-handle checks to API functions (#ifdef ENABLE_EXTRA_CHECKS) * Check the return value of API calls on ia32 and x64. * Activated fixed ES5 readonly semantics by default. * Added validity checking to API functions and calls. * Switched on code compaction on incremental GCs. * ARM: allowed VFP3 instructions when hardfloat is enabled. (Chromium issue 152506) * Killed off the SCons based build. (relevant for testing) * Added a faster API for creating v8::Integer objects. * Speeded up function deoptimization by avoiding quadratic pass over optimized function list. (Chromium issue 155270) * ES6: Added support for size to Set and Map (issue 2395) * ES6: Added support for Set and Map clear method (issue 2400) * Made formatting error message side-effect-free. (issue 2398) * Fixed V8 issues: 915, 1374, 1465, 1569, 1591, 1609 1645, 1804, 1914, 1981, 1991, 2016, 2017, 2034, 2077, 2087, 2094, 2119, 2120, 2133, 2134, 2139, 2143, 2151, 2156, 2166, 2170, 2172, 2177, 2179, 2185, 2193, 2194, 2201, 2210, 2212, 2219, 2220, 2225, 2239, 2245, 2252, 2260, 2261, 2294, 2297, 2308, 2312, 2313, 2317, 2318, 2322, 2326, 2364, 2372, 2380 Change-Id: Ifa82ec37b6150fdf1c4364c93987a32bbbf6bfd1 Reviewed-by: Simon Hausmann --- src/3rdparty/v8/src/mips/macro-assembler-mips.h | 64 +++++++++++++++---------- 1 file changed, 40 insertions(+), 24 deletions(-) (limited to 'src/3rdparty/v8/src/mips/macro-assembler-mips.h') diff --git a/src/3rdparty/v8/src/mips/macro-assembler-mips.h b/src/3rdparty/v8/src/mips/macro-assembler-mips.h index b5897e4..b57e514 100644 --- a/src/3rdparty/v8/src/mips/macro-assembler-mips.h +++ b/src/3rdparty/v8/src/mips/macro-assembler-mips.h @@ -108,12 +108,7 @@ inline MemOperand ContextOperand(Register context, int index) { inline MemOperand GlobalObjectOperand() { - return ContextOperand(cp, Context::GLOBAL_INDEX); -} - - -static inline MemOperand QmlGlobalObjectOperand() { - return ContextOperand(cp, Context::QML_GLOBAL_INDEX); + return ContextOperand(cp, Context::GLOBAL_OBJECT_INDEX); } @@ -187,11 +182,11 @@ class MacroAssembler: public Assembler { void Call(Address target, RelocInfo::Mode rmode, COND_ARGS); static int CallSize(Handle code, RelocInfo::Mode rmode = RelocInfo::CODE_TARGET, - unsigned ast_id = kNoASTId, + TypeFeedbackId ast_id = TypeFeedbackId::None(), COND_ARGS); void Call(Handle 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 +806,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 +819,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 +962,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 +973,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 +993,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, + 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 +1336,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 +1399,16 @@ class MacroAssembler: public Assembler { void LoadInstanceDescriptors(Register map, Register descriptors); - + void EnumLength(Register dst, Register map); + void NumberOfOwnDescriptors(Register dst, Register map); + + template + 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); -- cgit v1.2.1 From 194da71eed49e4d5e904e8c28cb510fb85b95912 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Thu, 27 Oct 2011 13:34:16 +0100 Subject: [V8] Introduce a QML compilation mode In QML mode, there is a second global object - known as the QML global object. During property resolution, if a property is not present on the JS global object, it is resolved on the QML global object. This global object behavior is only enabled if a script is being compiled in QML mode. The object to use as the QML global object is passed as a parameter to the Script::Run() method. Any function closures etc. created during the run will retain a reference to this object, so different objects can be passed in different script runs. Change-Id: I75d6f8173260e0d4933fd33ad16a277542048f09 Reviewed-by: Simon Hausmann --- src/3rdparty/v8/src/mips/macro-assembler-mips.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/3rdparty/v8/src/mips/macro-assembler-mips.h') diff --git a/src/3rdparty/v8/src/mips/macro-assembler-mips.h b/src/3rdparty/v8/src/mips/macro-assembler-mips.h index b57e514..8b7d7c1 100644 --- a/src/3rdparty/v8/src/mips/macro-assembler-mips.h +++ b/src/3rdparty/v8/src/mips/macro-assembler-mips.h @@ -112,6 +112,11 @@ inline MemOperand GlobalObjectOperand() { } +static inline MemOperand QmlGlobalObjectOperand() { + return ContextOperand(cp, Context::QML_GLOBAL_OBJECT_INDEX); +} + + // Generate a MemOperand for loading a field from an object. inline MemOperand FieldMemOperand(Register object, int offset) { return MemOperand(object, offset - kHeapObjectTag); -- cgit v1.2.1