Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(452)

Side by Side Diff: src/compiler/arm/code-generator-arm.cc

Issue 2816703002: [arm] Remove embedded constant pool support. (Closed)
Patch Set: [arm] Remove embedded constant pool support. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/builtins/arm/builtins-arm.cc ('k') | src/flag-definitions.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/code-generator.h" 5 #include "src/compiler/code-generator.h"
6 6
7 #include "src/arm/macro-assembler-arm.h" 7 #include "src/arm/macro-assembler-arm.h"
8 #include "src/assembler-inl.h" 8 #include "src/assembler-inl.h"
9 #include "src/compilation-info.h" 9 #include "src/compilation-info.h"
10 #include "src/compiler/code-generator-impl.h" 10 #include "src/compiler/code-generator-impl.h"
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 DCHECK_EQ(LeaveCC, i.OutputSBit()); \ 496 DCHECK_EQ(LeaveCC, i.OutputSBit()); \
497 } while (0) 497 } while (0)
498 498
499 void CodeGenerator::AssembleDeconstructFrame() { 499 void CodeGenerator::AssembleDeconstructFrame() {
500 __ LeaveFrame(StackFrame::MANUAL); 500 __ LeaveFrame(StackFrame::MANUAL);
501 unwinding_info_writer_.MarkFrameDeconstructed(__ pc_offset()); 501 unwinding_info_writer_.MarkFrameDeconstructed(__ pc_offset());
502 } 502 }
503 503
504 void CodeGenerator::AssemblePrepareTailCall() { 504 void CodeGenerator::AssemblePrepareTailCall() {
505 if (frame_access_state()->has_frame()) { 505 if (frame_access_state()->has_frame()) {
506 if (FLAG_enable_embedded_constant_pool) {
507 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kConstantPoolOffset));
508 }
509 __ ldr(lr, MemOperand(fp, StandardFrameConstants::kCallerPCOffset)); 506 __ ldr(lr, MemOperand(fp, StandardFrameConstants::kCallerPCOffset));
510 __ ldr(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 507 __ ldr(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
511 } 508 }
512 frame_access_state()->SetFrameAccessToSP(); 509 frame_access_state()->SetFrameAccessToSP();
513 } 510 }
514 511
515 void CodeGenerator::AssemblePopArgumentsAdaptorFrame(Register args_reg, 512 void CodeGenerator::AssemblePopArgumentsAdaptorFrame(Register args_reg,
516 Register scratch1, 513 Register scratch1,
517 Register scratch2, 514 Register scratch2,
518 Register scratch3) { 515 Register scratch3) {
(...skipping 1982 matching lines...) Expand 10 before | Expand all | Expand 10 after
2501 2498
2502 if (saves_fp != 0) { 2499 if (saves_fp != 0) {
2503 // Save callee-saved FP registers. 2500 // Save callee-saved FP registers.
2504 STATIC_ASSERT(DwVfpRegister::kMaxNumRegisters == 32); 2501 STATIC_ASSERT(DwVfpRegister::kMaxNumRegisters == 32);
2505 uint32_t last = base::bits::CountLeadingZeros32(saves_fp) - 1; 2502 uint32_t last = base::bits::CountLeadingZeros32(saves_fp) - 1;
2506 uint32_t first = base::bits::CountTrailingZeros32(saves_fp); 2503 uint32_t first = base::bits::CountTrailingZeros32(saves_fp);
2507 DCHECK_EQ((last - first + 1), base::bits::CountPopulation32(saves_fp)); 2504 DCHECK_EQ((last - first + 1), base::bits::CountPopulation32(saves_fp));
2508 frame->AllocateSavedCalleeRegisterSlots((last - first + 1) * 2505 frame->AllocateSavedCalleeRegisterSlots((last - first + 1) *
2509 (kDoubleSize / kPointerSize)); 2506 (kDoubleSize / kPointerSize));
2510 } 2507 }
2511 const RegList saves = FLAG_enable_embedded_constant_pool 2508 const RegList saves = descriptor->CalleeSavedRegisters();
2512 ? (descriptor->CalleeSavedRegisters() & ~pp.bit())
2513 : descriptor->CalleeSavedRegisters();
2514 if (saves != 0) { 2509 if (saves != 0) {
2515 // Save callee-saved registers. 2510 // Save callee-saved registers.
2516 frame->AllocateSavedCalleeRegisterSlots( 2511 frame->AllocateSavedCalleeRegisterSlots(
2517 base::bits::CountPopulation32(saves)); 2512 base::bits::CountPopulation32(saves));
2518 } 2513 }
2519 } 2514 }
2520 2515
2521 void CodeGenerator::AssembleConstructFrame() { 2516 void CodeGenerator::AssembleConstructFrame() {
2522 CallDescriptor* descriptor = linkage()->GetIncomingDescriptor(); 2517 CallDescriptor* descriptor = linkage()->GetIncomingDescriptor();
2523 if (frame_access_state()->has_frame()) { 2518 if (frame_access_state()->has_frame()) {
2524 if (descriptor->IsCFunctionCall()) { 2519 if (descriptor->IsCFunctionCall()) {
2525 if (FLAG_enable_embedded_constant_pool) { 2520 __ Push(lr, fp);
2526 __ Push(lr, fp, pp); 2521 __ mov(fp, sp);
2527 // Adjust FP to point to saved FP.
2528 __ sub(fp, sp, Operand(StandardFrameConstants::kConstantPoolOffset));
2529 } else {
2530 __ Push(lr, fp);
2531 __ mov(fp, sp);
2532 }
2533 } else if (descriptor->IsJSFunctionCall()) { 2522 } else if (descriptor->IsJSFunctionCall()) {
2534 __ Prologue(this->info()->GeneratePreagedPrologue()); 2523 __ Prologue(this->info()->GeneratePreagedPrologue());
2535 if (descriptor->PushArgumentCount()) { 2524 if (descriptor->PushArgumentCount()) {
2536 __ Push(kJavaScriptCallArgCountRegister); 2525 __ Push(kJavaScriptCallArgCountRegister);
2537 } 2526 }
2538 } else { 2527 } else {
2539 __ StubPrologue(info()->GetOutputStackFrameType()); 2528 __ StubPrologue(info()->GetOutputStackFrameType());
2540 } 2529 }
2541 2530
2542 if (!info()->GeneratePreagedPrologue()) { 2531 if (!info()->GeneratePreagedPrologue()) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2608 2597
2609 if (saves_fp != 0) { 2598 if (saves_fp != 0) {
2610 // Save callee-saved FP registers. 2599 // Save callee-saved FP registers.
2611 STATIC_ASSERT(DwVfpRegister::kMaxNumRegisters == 32); 2600 STATIC_ASSERT(DwVfpRegister::kMaxNumRegisters == 32);
2612 uint32_t last = base::bits::CountLeadingZeros32(saves_fp) - 1; 2601 uint32_t last = base::bits::CountLeadingZeros32(saves_fp) - 1;
2613 uint32_t first = base::bits::CountTrailingZeros32(saves_fp); 2602 uint32_t first = base::bits::CountTrailingZeros32(saves_fp);
2614 DCHECK_EQ((last - first + 1), base::bits::CountPopulation32(saves_fp)); 2603 DCHECK_EQ((last - first + 1), base::bits::CountPopulation32(saves_fp));
2615 __ vstm(db_w, sp, DwVfpRegister::from_code(first), 2604 __ vstm(db_w, sp, DwVfpRegister::from_code(first),
2616 DwVfpRegister::from_code(last)); 2605 DwVfpRegister::from_code(last));
2617 } 2606 }
2618 const RegList saves = FLAG_enable_embedded_constant_pool 2607 const RegList saves = descriptor->CalleeSavedRegisters();
2619 ? (descriptor->CalleeSavedRegisters() & ~pp.bit())
2620 : descriptor->CalleeSavedRegisters();
2621 if (saves != 0) { 2608 if (saves != 0) {
2622 // Save callee-saved registers. 2609 // Save callee-saved registers.
2623 __ stm(db_w, sp, saves); 2610 __ stm(db_w, sp, saves);
2624 } 2611 }
2625 } 2612 }
2626 2613
2627 void CodeGenerator::AssembleReturn(InstructionOperand* pop) { 2614 void CodeGenerator::AssembleReturn(InstructionOperand* pop) {
2628 CallDescriptor* descriptor = linkage()->GetIncomingDescriptor(); 2615 CallDescriptor* descriptor = linkage()->GetIncomingDescriptor();
2629 int pop_count = static_cast<int>(descriptor->StackParameterCount()); 2616 int pop_count = static_cast<int>(descriptor->StackParameterCount());
2630 2617
2631 // Restore registers. 2618 // Restore registers.
2632 const RegList saves = FLAG_enable_embedded_constant_pool 2619 const RegList saves = descriptor->CalleeSavedRegisters();
2633 ? (descriptor->CalleeSavedRegisters() & ~pp.bit())
2634 : descriptor->CalleeSavedRegisters();
2635 if (saves != 0) { 2620 if (saves != 0) {
2636 __ ldm(ia_w, sp, saves); 2621 __ ldm(ia_w, sp, saves);
2637 } 2622 }
2638 2623
2639 // Restore FP registers. 2624 // Restore FP registers.
2640 const RegList saves_fp = descriptor->CalleeSavedFPRegisters(); 2625 const RegList saves_fp = descriptor->CalleeSavedFPRegisters();
2641 if (saves_fp != 0) { 2626 if (saves_fp != 0) {
2642 STATIC_ASSERT(DwVfpRegister::kMaxNumRegisters == 32); 2627 STATIC_ASSERT(DwVfpRegister::kMaxNumRegisters == 32);
2643 uint32_t last = base::bits::CountLeadingZeros32(saves_fp) - 1; 2628 uint32_t last = base::bits::CountLeadingZeros32(saves_fp) - 1;
2644 uint32_t first = base::bits::CountTrailingZeros32(saves_fp); 2629 uint32_t first = base::bits::CountTrailingZeros32(saves_fp);
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
2986 padding_size -= v8::internal::Assembler::kInstrSize; 2971 padding_size -= v8::internal::Assembler::kInstrSize;
2987 } 2972 }
2988 } 2973 }
2989 } 2974 }
2990 2975
2991 #undef __ 2976 #undef __
2992 2977
2993 } // namespace compiler 2978 } // namespace compiler
2994 } // namespace internal 2979 } // namespace internal
2995 } // namespace v8 2980 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/arm/builtins-arm.cc ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698