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

Side by Side Diff: src/a64/full-codegen-a64.cc

Issue 181873002: A64: Move veneer emission checking in the Assembler. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Remove the force_emit parameter in CheckVeneerPool Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « src/a64/code-stubs-a64.cc ('k') | src/a64/lithium-codegen-a64.cc » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 } 86 }
87 87
88 void EmitJumpIfEitherNotSmi(Register reg1, Register reg2, Label* target) { 88 void EmitJumpIfEitherNotSmi(Register reg1, Register reg2, Label* target) {
89 // We need to use ip0, so don't allow access to the MacroAssembler. 89 // We need to use ip0, so don't allow access to the MacroAssembler.
90 InstructionAccurateScope scope(masm_); 90 InstructionAccurateScope scope(masm_);
91 __ orr(ip0, reg1, reg2); 91 __ orr(ip0, reg1, reg2);
92 EmitJumpIfNotSmi(ip0, target); 92 EmitJumpIfNotSmi(ip0, target);
93 } 93 }
94 94
95 void EmitPatchInfo() { 95 void EmitPatchInfo() {
96 Assembler::BlockConstPoolScope scope(masm_); 96 Assembler::BlockPoolsScope scope(masm_);
97 InlineSmiCheckInfo::Emit(masm_, reg_, &patch_site_); 97 InlineSmiCheckInfo::Emit(masm_, reg_, &patch_site_);
98 #ifdef DEBUG 98 #ifdef DEBUG
99 info_emitted_ = true; 99 info_emitted_ = true;
100 #endif 100 #endif
101 } 101 }
102 102
103 private: 103 private:
104 MacroAssembler* masm_; 104 MacroAssembler* masm_;
105 Label patch_site_; 105 Label patch_site_;
106 Register reg_; 106 Register reg_;
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 __ Mov(x3, Operand(Smi::FromInt(reset_value))); 343 __ Mov(x3, Operand(Smi::FromInt(reset_value)));
344 __ Str(x3, FieldMemOperand(x2, Cell::kValueOffset)); 344 __ Str(x3, FieldMemOperand(x2, Cell::kValueOffset));
345 } 345 }
346 346
347 347
348 void FullCodeGenerator::EmitBackEdgeBookkeeping(IterationStatement* stmt, 348 void FullCodeGenerator::EmitBackEdgeBookkeeping(IterationStatement* stmt,
349 Label* back_edge_target) { 349 Label* back_edge_target) {
350 ASSERT(jssp.Is(__ StackPointer())); 350 ASSERT(jssp.Is(__ StackPointer()));
351 Comment cmnt(masm_, "[ Back edge bookkeeping"); 351 Comment cmnt(masm_, "[ Back edge bookkeeping");
352 // Block literal pools whilst emitting back edge code. 352 // Block literal pools whilst emitting back edge code.
353 Assembler::BlockConstPoolScope block_const_pool(masm_); 353 Assembler::BlockPoolsScope block_const_pool(masm_);
354 Label ok; 354 Label ok;
355 355
356 ASSERT(back_edge_target->is_bound()); 356 ASSERT(back_edge_target->is_bound());
357 int distance = masm_->SizeOfCodeGeneratedSince(back_edge_target); 357 int distance = masm_->SizeOfCodeGeneratedSince(back_edge_target);
358 int weight = Min(kMaxBackEdgeWeight, 358 int weight = Min(kMaxBackEdgeWeight,
359 Max(1, distance / kCodeSizeMultiplier)); 359 Max(1, distance / kCodeSizeMultiplier));
360 EmitProfilingCounterDecrement(weight); 360 EmitProfilingCounterDecrement(weight);
361 __ B(pl, &ok); 361 __ B(pl, &ok);
362 __ Call(isolate()->builtins()->InterruptCheck(), RelocInfo::CODE_TARGET); 362 __ Call(isolate()->builtins()->InterruptCheck(), RelocInfo::CODE_TARGET);
363 363
(...skipping 1636 matching lines...) Expand 10 before | Expand all | Expand 10 after
2000 __ Pop(left); 2000 __ Pop(left);
2001 2001
2002 // Perform combined smi check on both operands. 2002 // Perform combined smi check on both operands.
2003 __ Orr(x10, left, right); 2003 __ Orr(x10, left, right);
2004 JumpPatchSite patch_site(masm_); 2004 JumpPatchSite patch_site(masm_);
2005 patch_site.EmitJumpIfSmi(x10, &both_smis); 2005 patch_site.EmitJumpIfSmi(x10, &both_smis);
2006 2006
2007 __ Bind(&stub_call); 2007 __ Bind(&stub_call);
2008 BinaryOpICStub stub(op, mode); 2008 BinaryOpICStub stub(op, mode);
2009 { 2009 {
2010 Assembler::BlockConstPoolScope scope(masm_); 2010 Assembler::BlockPoolsScope scope(masm_);
2011 CallIC(stub.GetCode(isolate()), expr->BinaryOperationFeedbackId()); 2011 CallIC(stub.GetCode(isolate()), expr->BinaryOperationFeedbackId());
2012 patch_site.EmitPatchInfo(); 2012 patch_site.EmitPatchInfo();
2013 } 2013 }
2014 __ B(&done); 2014 __ B(&done);
2015 2015
2016 __ Bind(&both_smis); 2016 __ Bind(&both_smis);
2017 // Smi case. This code works in the same way as the smi-smi case in the type 2017 // Smi case. This code works in the same way as the smi-smi case in the type
2018 // recording binary operation stub, see 2018 // recording binary operation stub, see
2019 // BinaryOpStub::GenerateSmiSmiOperation for comments. 2019 // BinaryOpStub::GenerateSmiSmiOperation for comments.
2020 // TODO(all): That doesn't exist any more. Where are the comments? 2020 // TODO(all): That doesn't exist any more. Where are the comments?
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2086 } 2086 }
2087 2087
2088 2088
2089 void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr, 2089 void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr,
2090 Token::Value op, 2090 Token::Value op,
2091 OverwriteMode mode) { 2091 OverwriteMode mode) {
2092 __ Pop(x1); 2092 __ Pop(x1);
2093 BinaryOpICStub stub(op, mode); 2093 BinaryOpICStub stub(op, mode);
2094 JumpPatchSite patch_site(masm_); // Unbound, signals no inlined smi code. 2094 JumpPatchSite patch_site(masm_); // Unbound, signals no inlined smi code.
2095 { 2095 {
2096 Assembler::BlockConstPoolScope scope(masm_); 2096 Assembler::BlockPoolsScope scope(masm_);
2097 CallIC(stub.GetCode(isolate()), expr->BinaryOperationFeedbackId()); 2097 CallIC(stub.GetCode(isolate()), expr->BinaryOperationFeedbackId());
2098 patch_site.EmitPatchInfo(); 2098 patch_site.EmitPatchInfo();
2099 } 2099 }
2100 context()->Plug(x0); 2100 context()->Plug(x0);
2101 } 2101 }
2102 2102
2103 2103
2104 void FullCodeGenerator::EmitAssignment(Expression* expr) { 2104 void FullCodeGenerator::EmitAssignment(Expression* expr) {
2105 // Invalid left-hand sides are rewritten to have a 'throw 2105 // Invalid left-hand sides are rewritten to have a 'throw
2106 // ReferenceError' on the left-hand side. 2106 // ReferenceError' on the left-hand side.
(...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after
4110 } 4110 }
4111 4111
4112 __ Bind(&stub_call); 4112 __ Bind(&stub_call);
4113 __ Mov(x1, x0); 4113 __ Mov(x1, x0);
4114 __ Mov(x0, Operand(Smi::FromInt(count_value))); 4114 __ Mov(x0, Operand(Smi::FromInt(count_value)));
4115 4115
4116 // Record position before stub call. 4116 // Record position before stub call.
4117 SetSourcePosition(expr->position()); 4117 SetSourcePosition(expr->position());
4118 4118
4119 { 4119 {
4120 Assembler::BlockConstPoolScope scope(masm_); 4120 Assembler::BlockPoolsScope scope(masm_);
4121 BinaryOpICStub stub(Token::ADD, NO_OVERWRITE); 4121 BinaryOpICStub stub(Token::ADD, NO_OVERWRITE);
4122 CallIC(stub.GetCode(isolate()), expr->CountBinOpFeedbackId()); 4122 CallIC(stub.GetCode(isolate()), expr->CountBinOpFeedbackId());
4123 patch_site.EmitPatchInfo(); 4123 patch_site.EmitPatchInfo();
4124 } 4124 }
4125 __ Bind(&done); 4125 __ Bind(&done);
4126 4126
4127 // Store the value returned in x0. 4127 // Store the value returned in x0.
4128 switch (assign_type) { 4128 switch (assign_type) {
4129 case VARIABLE: 4129 case VARIABLE:
4130 if (expr->is_postfix()) { 4130 if (expr->is_postfix()) {
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after
4984 return previous_; 4984 return previous_;
4985 } 4985 }
4986 4986
4987 4987
4988 #undef __ 4988 #undef __
4989 4989
4990 4990
4991 } } // namespace v8::internal 4991 } } // namespace v8::internal
4992 4992
4993 #endif // V8_TARGET_ARCH_A64 4993 #endif // V8_TARGET_ARCH_A64
OLDNEW
« no previous file with comments | « src/a64/code-stubs-a64.cc ('k') | src/a64/lithium-codegen-a64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698