| Index: src/arm/macro-assembler-arm.h
|
| ===================================================================
|
| --- src/arm/macro-assembler-arm.h (revision 7006)
|
| +++ src/arm/macro-assembler-arm.h (working copy)
|
| @@ -235,8 +235,11 @@
|
| void PushSafepointRegistersAndDoubles();
|
| void PopSafepointRegistersAndDoubles();
|
| void StoreToSafepointRegisterSlot(Register reg);
|
| + void StoreToSafepointRegistersAndDoublesSlot(Register reg);
|
| + void LoadFromSafepointRegisterSlot(Register reg);
|
| static int SafepointRegisterStackIndex(int reg_code);
|
| static MemOperand SafepointRegisterSlot(Register reg);
|
| + static MemOperand SafepointRegistersAndDoublesSlot(Register reg);
|
|
|
| // Load two consecutive registers with two consecutive memory locations.
|
| void Ldrd(Register dst1,
|
| @@ -284,10 +287,8 @@
|
| void LeaveConstructFrame() { LeaveFrame(StackFrame::CONSTRUCT); }
|
|
|
| // Enter exit frame.
|
| - // Expects the number of arguments in register r0 and
|
| - // the builtin function to call in register r1. Exits with argc in
|
| - // r4, argv in r6, and and the builtin function to call in r5.
|
| - void EnterExitFrame(bool save_doubles);
|
| + // stack_space - extra stack space, used for alignment before call to C.
|
| + void EnterExitFrame(bool save_doubles, int stack_space = 0);
|
|
|
| // Leave the current exit frame. Expects the return value in r0.
|
| void LeaveExitFrame(bool save_doubles);
|
| @@ -586,11 +587,13 @@
|
|
|
| // Convert the HeapNumber pointed to by source to a 32bits signed integer
|
| // dest. If the HeapNumber does not fit into a 32bits signed integer branch
|
| - // to not_int32 label.
|
| + // to not_int32 label. If VFP3 is available double_scratch is used but not
|
| + // scratch2.
|
| void ConvertToInt32(Register source,
|
| Register dest,
|
| Register scratch,
|
| Register scratch2,
|
| + DwVfpRegister double_scratch,
|
| Label *not_int32);
|
|
|
| // Count leading zeros in a 32 bit word. On ARM5 and later it uses the clz
|
| @@ -611,6 +614,12 @@
|
| // Call a code stub.
|
| void TailCallStub(CodeStub* stub, Condition cond = al);
|
|
|
| + // Tail call a code stub (jump) and return the code object called. Try to
|
| + // generate the code if necessary. Do not perform a GC but instead return
|
| + // a retry after GC failure.
|
| + MUST_USE_RESULT MaybeObject* TryTailCallStub(CodeStub* stub,
|
| + Condition cond = al);
|
| +
|
| // Call a runtime routine.
|
| void CallRuntime(const Runtime::Function* f, int num_arguments);
|
| void CallRuntimeSaveDoubles(Runtime::FunctionId id);
|
| @@ -629,6 +638,12 @@
|
| int num_arguments,
|
| int result_size);
|
|
|
| + // Tail call of a runtime routine (jump). Try to generate the code if
|
| + // necessary. Do not perform a GC but instead return a retry after GC
|
| + // failure.
|
| + MUST_USE_RESULT MaybeObject* TryTailCallExternalReference(
|
| + const ExternalReference& ext, int num_arguments, int result_size);
|
| +
|
| // Convenience function: tail call a runtime routine (jump).
|
| void TailCallRuntime(Runtime::FunctionId fid,
|
| int num_arguments,
|
| @@ -652,9 +667,18 @@
|
| void CallCFunction(ExternalReference function, int num_arguments);
|
| void CallCFunction(Register function, Register scratch, int num_arguments);
|
|
|
| + // Calls an API function. Allocates HandleScope, extracts returned value
|
| + // from handle and propagates exceptions. Restores context.
|
| + // stack_space - space to be unwound on exit (includes the call js
|
| + // arguments space and the additional space allocated for the fast call).
|
| + MaybeObject* TryCallApiFunctionAndReturn(ApiFunction* function,
|
| + int stack_space);
|
| +
|
| // Jump to a runtime routine.
|
| void JumpToExternalReference(const ExternalReference& builtin);
|
|
|
| + MaybeObject* TryJumpToExternalReference(const ExternalReference& ext);
|
| +
|
| // Invoke specified builtin JavaScript function. Adds an entry to
|
| // the unresolved list if the name does not resolve.
|
| void InvokeBuiltin(Builtins::JavaScript id,
|
| @@ -704,6 +728,17 @@
|
| bool allow_stub_calls() { return allow_stub_calls_; }
|
|
|
| // ---------------------------------------------------------------------------
|
| + // Number utilities
|
| +
|
| + // Check whether the value of reg is a power of two and not zero. If not
|
| + // control continues at the label not_power_of_two. If reg is a power of two
|
| + // the register scratch contains the value of (reg - 1) when control falls
|
| + // through.
|
| + void JumpIfNotPowerOfTwoOrZero(Register reg,
|
| + Register scratch,
|
| + Label* not_power_of_two_or_zero);
|
| +
|
| + // ---------------------------------------------------------------------------
|
| // Smi utilities
|
|
|
| void SmiTag(Register reg, SBit s = LeaveCC) {
|
| @@ -749,6 +784,11 @@
|
| void AbortIfSmi(Register object);
|
| void AbortIfNotSmi(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);
|
| +
|
| // ---------------------------------------------------------------------------
|
| // HeapNumber utilities
|
|
|
|
|