| Index: src/arm/macro-assembler-arm.h
|
| diff --git a/src/arm/macro-assembler-arm.h b/src/arm/macro-assembler-arm.h
|
| index efc5bfae725db91c1b80db8c3c8c2d35623f6920..ea02bfdd2d346f756ec74c8d43f53d2998e68725 100644
|
| --- a/src/arm/macro-assembler-arm.h
|
| +++ b/src/arm/macro-assembler-arm.h
|
| @@ -33,10 +33,18 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +// ----------------------------------------------------------------------------
|
| +// Static helper functions
|
| +
|
| +// Generate a MemOperand for loading a field from an object.
|
| +static inline MemOperand FieldMemOperand(Register object, int offset) {
|
| + return MemOperand(object, offset - kHeapObjectTag);
|
| +}
|
| +
|
|
|
| // Give alias names to registers
|
| const Register cp = { 8 }; // JavaScript context pointer
|
| -
|
| +const Register roots = { 10 }; // Roots array pointer.
|
|
|
| enum InvokeJSFlags {
|
| CALL_JS,
|
| @@ -209,6 +217,21 @@ class MacroAssembler: public Assembler {
|
| // allocation is undone.
|
| void UndoAllocationInNewSpace(Register object, Register scratch);
|
|
|
| +
|
| + void AllocateTwoByteString(Register result,
|
| + Register length,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + Label* gc_required);
|
| + void AllocateAsciiString(Register result,
|
| + Register length,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + Label* gc_required);
|
| +
|
| +
|
| // ---------------------------------------------------------------------------
|
| // Support functions.
|
|
|
| @@ -243,6 +266,20 @@ class MacroAssembler: public Assembler {
|
| Register type_reg,
|
| InstanceType type);
|
|
|
| +
|
| + // Load and check the instance type of an object for being a string.
|
| + // Loads the type into the second argument register.
|
| + // Returns a condition that will be enabled if the object was a string.
|
| + Condition IsObjectStringType(Register obj,
|
| + Register type) {
|
| + ldr(type, FieldMemOperand(obj, HeapObject::kMapOffset));
|
| + ldrb(type, FieldMemOperand(type, Map::kInstanceTypeOffset));
|
| + tst(type, Operand(kIsNotStringMask));
|
| + ASSERT_EQ(0, kStringTag);
|
| + return eq;
|
| + }
|
| +
|
| +
|
| inline void BranchOnSmi(Register value, Label* smi_label) {
|
| tst(value, Operand(kSmiTagMask));
|
| b(eq, smi_label);
|
| @@ -421,12 +458,6 @@ class CodePatcher {
|
| // -----------------------------------------------------------------------------
|
| // Static helper functions.
|
|
|
| -// Generate a MemOperand for loading a field from an object.
|
| -static inline MemOperand FieldMemOperand(Register object, int offset) {
|
| - return MemOperand(object, offset - kHeapObjectTag);
|
| -}
|
| -
|
| -
|
| #ifdef GENERATED_CODE_COVERAGE
|
| #define CODE_COVERAGE_STRINGIFY(x) #x
|
| #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
|
|
|