From a104e7c9b4acdfdc7abc9d52b3bd88ff3e87dba1 Mon Sep 17 00:00:00 2001 From: mstarzinger Date: Tue, 7 Jul 2015 01:14:20 -0700 Subject: [PATCH] Cleanup frame description constant. This unifies the existing frame constants that are the same accross all architectures. It also adds a new kOriginalConstructorOffset constant for construct frames and uses is in full-codegen. R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1220223005 Cr-Commit-Position: refs/heads/master@{#29509} --- src/arm/frames-arm.h | 29 ----------------------------- src/arm/full-codegen-arm.cc | 4 ++-- src/arm64/frames-arm64.h | 29 ----------------------------- src/arm64/full-codegen-arm64.cc | 4 ++-- src/frames.cc | 4 ++++ src/frames.h | 34 ++++++++++++++++++++++++++++++++++ src/ia32/frames-ia32.h | 29 ----------------------------- src/ia32/full-codegen-ia32.cc | 4 ++-- src/mips/frames-mips.h | 29 ----------------------------- src/mips/full-codegen-mips.cc | 4 ++-- src/mips64/frames-mips64.h | 29 ----------------------------- src/mips64/full-codegen-mips64.cc | 4 ++-- src/ppc/frames-ppc.h | 29 ----------------------------- src/ppc/full-codegen-ppc.cc | 4 ++-- src/x64/frames-x64.h | 29 ----------------------------- src/x64/full-codegen-x64.cc | 4 ++-- src/x87/frames-x87.h | 29 ----------------------------- src/x87/full-codegen-x87.cc | 4 ++-- 18 files changed, 54 insertions(+), 248 deletions(-) diff --git a/src/arm/frames-arm.h b/src/arm/frames-arm.h index 6d1c718..db6a9e5 100644 --- a/src/arm/frames-arm.h +++ b/src/arm/frames-arm.h @@ -128,35 +128,6 @@ class JavaScriptFrameConstants : public AllStatic { }; -class ArgumentsAdaptorFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + kPointerSize; -}; - - -class ConstructFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kImplicitReceiverOffset = -5 * kPointerSize; - static const int kLengthOffset = -4 * kPointerSize; - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; -}; - - -class InternalFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; -}; - - inline Object* JavaScriptFrame::function_slot_object() const { const int offset = JavaScriptFrameConstants::kFunctionOffset; return Memory::Object_at(fp() + offset); diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc index 65abe07..2f1a23b 100644 --- a/src/arm/full-codegen-arm.cc +++ b/src/arm/full-codegen-arm.cc @@ -263,8 +263,8 @@ void FullCodeGenerator::Generate() { Label non_construct_frame, done; __ b(ne, &non_construct_frame); - __ ldr(r0, MemOperand(r2, StandardFrameConstants::kExpressionsOffset - - 2 * kPointerSize)); + __ ldr(r0, + MemOperand(r2, ConstructFrameConstants::kOriginalConstructorOffset)); __ b(&done); __ bind(&non_construct_frame); diff --git a/src/arm64/frames-arm64.h b/src/arm64/frames-arm64.h index 544383d..963dc3e 100644 --- a/src/arm64/frames-arm64.h +++ b/src/arm64/frames-arm64.h @@ -63,35 +63,6 @@ class JavaScriptFrameConstants : public AllStatic { }; -class ArgumentsAdaptorFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + kPointerSize; -}; - - -class ConstructFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; - static const int kLengthOffset = -4 * kPointerSize; - static const int kImplicitReceiverOffset = -5 * kPointerSize; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; -}; - - -class InternalFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; -}; - - inline Object* JavaScriptFrame::function_slot_object() const { const int offset = JavaScriptFrameConstants::kFunctionOffset; return Memory::Object_at(fp() + offset); diff --git a/src/arm64/full-codegen-arm64.cc b/src/arm64/full-codegen-arm64.cc index ece2017..cb09314 100644 --- a/src/arm64/full-codegen-arm64.cc +++ b/src/arm64/full-codegen-arm64.cc @@ -269,8 +269,8 @@ void FullCodeGenerator::Generate() { Label non_construct_frame, done; __ B(ne, &non_construct_frame); - __ Ldr(x0, MemOperand(x2, StandardFrameConstants::kExpressionsOffset - - 2 * kPointerSize)); + __ Ldr(x0, + MemOperand(x2, ConstructFrameConstants::kOriginalConstructorOffset)); __ B(&done); __ Bind(&non_construct_frame); diff --git a/src/frames.cc b/src/frames.cc index 5aefe06..723db4a 100644 --- a/src/frames.cc +++ b/src/frames.cc @@ -737,6 +737,8 @@ Object* JavaScriptFrame::GetOriginalConstructor() const { fp = Memory::Address_at(fp + StandardFrameConstants::kCallerFPOffset); } DCHECK(IsConstructFrame(fp)); + STATIC_ASSERT(ConstructFrameConstants::kOriginalConstructorOffset == + StandardFrameConstants::kExpressionsOffset - 2 * kPointerSize); return GetExpression(fp, 2); } @@ -744,6 +746,8 @@ Object* JavaScriptFrame::GetOriginalConstructor() const { int JavaScriptFrame::GetArgumentsLength() const { // If there is an arguments adaptor frame get the arguments length from it. if (has_adapted_arguments()) { + STATIC_ASSERT(ArgumentsAdaptorFrameConstants::kLengthOffset == + StandardFrameConstants::kExpressionsOffset); return Smi::cast(GetExpression(caller_fp(), 0))->value(); } else { return GetNumberOfIncomingArguments(); diff --git a/src/frames.h b/src/frames.h index ca3aba4..910dc18 100644 --- a/src/frames.h +++ b/src/frames.h @@ -134,6 +134,40 @@ class StandardFrameConstants : public AllStatic { }; +class ArgumentsAdaptorFrameConstants : public AllStatic { + public: + // FP-relative. + static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; + + static const int kFrameSize = + StandardFrameConstants::kFixedFrameSize + kPointerSize; +}; + + +class InternalFrameConstants : public AllStatic { + public: + // FP-relative. + static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; +}; + + +class ConstructFrameConstants : public AllStatic { + public: + // FP-relative. + static const int kImplicitReceiverOffset = + StandardFrameConstants::kExpressionsOffset - 2 * kPointerSize; + static const int kOriginalConstructorOffset = + StandardFrameConstants::kExpressionsOffset - 2 * kPointerSize; + static const int kLengthOffset = + StandardFrameConstants::kExpressionsOffset - 1 * kPointerSize; + static const int kCodeOffset = + StandardFrameConstants::kExpressionsOffset - 0 * kPointerSize; + + static const int kFrameSize = + StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; +}; + + // Abstract base class for all stack frames. class StackFrame BASE_EMBEDDED { public: diff --git a/src/ia32/frames-ia32.h b/src/ia32/frames-ia32.h index bb814a3..fddace7 100644 --- a/src/ia32/frames-ia32.h +++ b/src/ia32/frames-ia32.h @@ -79,35 +79,6 @@ class JavaScriptFrameConstants : public AllStatic { }; -class ArgumentsAdaptorFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + kPointerSize; -}; - - -class ConstructFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kImplicitReceiverOffset = -5 * kPointerSize; - static const int kLengthOffset = -4 * kPointerSize; - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; -}; - - -class InternalFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; -}; - - inline Object* JavaScriptFrame::function_slot_object() const { const int offset = JavaScriptFrameConstants::kFunctionOffset; return Memory::Object_at(fp() + offset); diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc index 5fd4414..733b72a 100644 --- a/src/ia32/full-codegen-ia32.cc +++ b/src/ia32/full-codegen-ia32.cc @@ -264,8 +264,8 @@ void FullCodeGenerator::Generate() { __ j(not_equal, &non_construct_frame); // Construct frame - __ mov(eax, Operand(eax, StandardFrameConstants::kExpressionsOffset - - 2 * kPointerSize)); + __ mov(eax, + Operand(eax, ConstructFrameConstants::kOriginalConstructorOffset)); __ jmp(&done); // Non-construct frame diff --git a/src/mips/frames-mips.h b/src/mips/frames-mips.h index 7716c95..f0b734d 100644 --- a/src/mips/frames-mips.h +++ b/src/mips/frames-mips.h @@ -169,35 +169,6 @@ class JavaScriptFrameConstants : public AllStatic { }; -class ArgumentsAdaptorFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + kPointerSize; -}; - - -class ConstructFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kImplicitReceiverOffset = -5 * kPointerSize; - static const int kLengthOffset = -4 * kPointerSize; - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; -}; - - -class InternalFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; -}; - - inline Object* JavaScriptFrame::function_slot_object() const { const int offset = JavaScriptFrameConstants::kFunctionOffset; return Memory::Object_at(fp() + offset); diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc index de4f424..8a9201a 100644 --- a/src/mips/full-codegen-mips.cc +++ b/src/mips/full-codegen-mips.cc @@ -281,8 +281,8 @@ void FullCodeGenerator::Generate() { __ Branch(&non_construct_frame, ne, a1, Operand(Smi::FromInt(StackFrame::CONSTRUCT))); - __ lw(v0, MemOperand(a2, StandardFrameConstants::kExpressionsOffset - - 2 * kPointerSize)); + __ lw(v0, + MemOperand(a2, ConstructFrameConstants::kOriginalConstructorOffset)); __ Branch(&done); __ bind(&non_construct_frame); diff --git a/src/mips64/frames-mips64.h b/src/mips64/frames-mips64.h index b92efc9..4434a98 100644 --- a/src/mips64/frames-mips64.h +++ b/src/mips64/frames-mips64.h @@ -169,35 +169,6 @@ class JavaScriptFrameConstants : public AllStatic { }; -class ArgumentsAdaptorFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + kPointerSize; -}; - - -class ConstructFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kImplicitReceiverOffset = -5 * kPointerSize; - static const int kLengthOffset = -4 * kPointerSize; - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; -}; - - -class InternalFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; -}; - - inline Object* JavaScriptFrame::function_slot_object() const { const int offset = JavaScriptFrameConstants::kFunctionOffset; return Memory::Object_at(fp() + offset); diff --git a/src/mips64/full-codegen-mips64.cc b/src/mips64/full-codegen-mips64.cc index ed6bd15..48977f6 100644 --- a/src/mips64/full-codegen-mips64.cc +++ b/src/mips64/full-codegen-mips64.cc @@ -277,8 +277,8 @@ void FullCodeGenerator::Generate() { __ Branch(&non_construct_frame, ne, a1, Operand(Smi::FromInt(StackFrame::CONSTRUCT))); - __ ld(v0, MemOperand(a2, StandardFrameConstants::kExpressionsOffset - - 2 * kPointerSize)); + __ ld(v0, + MemOperand(a2, ConstructFrameConstants::kOriginalConstructorOffset)); __ Branch(&done); __ bind(&non_construct_frame); diff --git a/src/ppc/frames-ppc.h b/src/ppc/frames-ppc.h index 3e66b22..0357731 100644 --- a/src/ppc/frames-ppc.h +++ b/src/ppc/frames-ppc.h @@ -148,35 +148,6 @@ class JavaScriptFrameConstants : public AllStatic { }; -class ArgumentsAdaptorFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + kPointerSize; -}; - - -class ConstructFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kImplicitReceiverOffset = -5 * kPointerSize; - static const int kLengthOffset = -4 * kPointerSize; - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; -}; - - -class InternalFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; -}; - - inline Object* JavaScriptFrame::function_slot_object() const { const int offset = JavaScriptFrameConstants::kFunctionOffset; return Memory::Object_at(fp() + offset); diff --git a/src/ppc/full-codegen-ppc.cc b/src/ppc/full-codegen-ppc.cc index 891d6ac..c80f104 100644 --- a/src/ppc/full-codegen-ppc.cc +++ b/src/ppc/full-codegen-ppc.cc @@ -276,8 +276,8 @@ void FullCodeGenerator::Generate() { Label non_construct_frame, done; __ bne(&non_construct_frame); - __ LoadP(r3, MemOperand(r5, StandardFrameConstants::kExpressionsOffset - - 2 * kPointerSize)); + __ LoadP(r3, MemOperand( + r5, ConstructFrameConstants::kOriginalConstructorOffset)); __ b(&done); __ bind(&non_construct_frame); diff --git a/src/x64/frames-x64.h b/src/x64/frames-x64.h index fadb52a..0719baf 100644 --- a/src/x64/frames-x64.h +++ b/src/x64/frames-x64.h @@ -71,35 +71,6 @@ class JavaScriptFrameConstants : public AllStatic { }; -class ArgumentsAdaptorFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + kPointerSize; -}; - - -class ConstructFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kImplicitReceiverOffset = -5 * kPointerSize; - static const int kLengthOffset = -4 * kPointerSize; - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; -}; - - -class InternalFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; -}; - - inline Object* JavaScriptFrame::function_slot_object() const { const int offset = JavaScriptFrameConstants::kFunctionOffset; return Memory::Object_at(fp() + offset); diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc index 0aa76bd..0011bca 100644 --- a/src/x64/full-codegen-x64.cc +++ b/src/x64/full-codegen-x64.cc @@ -261,8 +261,8 @@ void FullCodeGenerator::Generate() { __ j(not_equal, &non_construct_frame); // Construct frame - __ movp(rax, Operand(rax, StandardFrameConstants::kExpressionsOffset - - 2 * kPointerSize)); + __ movp(rax, + Operand(rax, ConstructFrameConstants::kOriginalConstructorOffset)); __ jmp(&done); // Non-construct frame diff --git a/src/x87/frames-x87.h b/src/x87/frames-x87.h index b186557..7820925 100644 --- a/src/x87/frames-x87.h +++ b/src/x87/frames-x87.h @@ -79,35 +79,6 @@ class JavaScriptFrameConstants : public AllStatic { }; -class ArgumentsAdaptorFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + kPointerSize; -}; - - -class ConstructFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kImplicitReceiverOffset = -5 * kPointerSize; - static const int kLengthOffset = -4 * kPointerSize; - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; - - static const int kFrameSize = - StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; -}; - - -class InternalFrameConstants : public AllStatic { - public: - // FP-relative. - static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; -}; - - inline Object* JavaScriptFrame::function_slot_object() const { const int offset = JavaScriptFrameConstants::kFunctionOffset; return Memory::Object_at(fp() + offset); diff --git a/src/x87/full-codegen-x87.cc b/src/x87/full-codegen-x87.cc index 3029cab..f267fc4 100644 --- a/src/x87/full-codegen-x87.cc +++ b/src/x87/full-codegen-x87.cc @@ -261,8 +261,8 @@ void FullCodeGenerator::Generate() { __ j(not_equal, &non_construct_frame); // Construct frame - __ mov(eax, Operand(eax, StandardFrameConstants::kExpressionsOffset - - 2 * kPointerSize)); + __ mov(eax, + Operand(eax, ConstructFrameConstants::kOriginalConstructorOffset)); __ jmp(&done); // Non-construct frame -- 2.7.4