diff options
Diffstat (limited to 'deps/v8/src/ia32/macro-assembler-ia32.h')
-rw-r--r-- | deps/v8/src/ia32/macro-assembler-ia32.h | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/deps/v8/src/ia32/macro-assembler-ia32.h b/deps/v8/src/ia32/macro-assembler-ia32.h index 9ebae1f463..be11f66202 100644 --- a/deps/v8/src/ia32/macro-assembler-ia32.h +++ b/deps/v8/src/ia32/macro-assembler-ia32.h @@ -44,6 +44,8 @@ enum PointersToHereCheck { enum RegisterValueType { REGISTER_VALUE_IS_SMI, REGISTER_VALUE_IS_INT32 }; +enum class ReturnAddressState { kOnStack, kNotOnStack }; + #ifdef DEBUG bool AreAliased(Register reg1, Register reg2, Register reg3 = no_reg, Register reg4 = no_reg, Register reg5 = no_reg, @@ -234,7 +236,7 @@ class MacroAssembler: public Assembler { void DebugBreak(); // Generates function and stub prologue code. - void StubPrologue(); + void StubPrologue(StackFrame::Type type); void Prologue(bool code_pre_aging); // Enter specific kind of exit frame. Expects the number of @@ -323,6 +325,20 @@ class MacroAssembler: public Assembler { // --------------------------------------------------------------------------- // JavaScript invokes + // Removes current frame and its arguments from the stack preserving + // the arguments and a return address pushed to the stack for the next call. + // |ra_state| defines whether return address is already pushed to stack or + // not. Both |callee_args_count| and |caller_args_count_reg| do not include + // receiver. |callee_args_count| is not modified, |caller_args_count_reg| + // is trashed. |number_of_temp_values_after_return_address| specifies + // the number of words pushed to the stack after the return address. This is + // to allow "allocation" of scratch registers that this function requires + // by saving their values on the stack. + void PrepareForTailCall(const ParameterCount& callee_args_count, + Register caller_args_count_reg, Register scratch0, + Register scratch1, ReturnAddressState ra_state, + int number_of_temp_values_after_return_address); + // Invoke the JavaScript function code by either calling or jumping. void InvokeFunctionCode(Register function, Register new_target, @@ -358,6 +374,13 @@ class MacroAssembler: public Assembler { void Cvtui2ss(XMMRegister dst, Register src, Register tmp); + void ShlPair(Register high, Register low, uint8_t imm8); + void ShlPair_cl(Register high, Register low); + void ShrPair(Register high, Register low, uint8_t imm8); + void ShrPair_cl(Register high, Register src); + void SarPair(Register high, Register low, uint8_t imm8); + void SarPair_cl(Register high, Register low); + // Support for constant splitting. bool IsUnsafeImmediate(const Immediate& x); void SafeMove(Register dst, const Immediate& x); @@ -522,6 +545,7 @@ class MacroAssembler: public Assembler { // Abort execution if argument is not a number, enabled via --debug-code. void AssertNumber(Register object); + void AssertNotNumber(Register object); // Abort execution if argument is not a smi, enabled via --debug-code. void AssertSmi(Register object); @@ -777,12 +801,6 @@ class MacroAssembler: public Assembler { void Popcnt(Register dst, Register src) { Popcnt(dst, Operand(src)); } void Popcnt(Register dst, const Operand& src); - // Emit call to the code we are currently generating. - void CallSelf() { - Handle<Code> self(reinterpret_cast<Code**>(CodeObject().location())); - call(self, RelocInfo::CODE_TARGET); - } - // Move if the registers are not identical. void Move(Register target, Register source); @@ -796,6 +814,7 @@ class MacroAssembler: public Assembler { void Move(XMMRegister dst, float src) { Move(dst, bit_cast<uint32_t>(src)); } void Move(XMMRegister dst, double src) { Move(dst, bit_cast<uint64_t>(src)); } + void Move(Register dst, Handle<Object> handle) { LoadObject(dst, handle); } void Move(Register dst, Smi* source) { Move(dst, Immediate(source)); } // Push a handle value. |