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

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

Issue 880743005: X87: Remove the obsolete OverwriteMode optimization. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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 | « no previous file | src/x87/lithium-codegen-x87.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X87 7 #if V8_TARGET_ARCH_X87
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 1932 matching lines...) Expand 10 before | Expand all | Expand 10 after
1943 EmitKeyedPropertyLoad(property); 1943 EmitKeyedPropertyLoad(property);
1944 PrepareForBailoutForId(property->LoadId(), TOS_REG); 1944 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1945 break; 1945 break;
1946 } 1946 }
1947 } 1947 }
1948 1948
1949 Token::Value op = expr->binary_op(); 1949 Token::Value op = expr->binary_op();
1950 __ push(eax); // Left operand goes on the stack. 1950 __ push(eax); // Left operand goes on the stack.
1951 VisitForAccumulatorValue(expr->value()); 1951 VisitForAccumulatorValue(expr->value());
1952 1952
1953 OverwriteMode mode = expr->value()->ResultOverwriteAllowed()
1954 ? OVERWRITE_RIGHT
1955 : NO_OVERWRITE;
1956 SetSourcePosition(expr->position() + 1); 1953 SetSourcePosition(expr->position() + 1);
1957 if (ShouldInlineSmiCase(op)) { 1954 if (ShouldInlineSmiCase(op)) {
1958 EmitInlineSmiBinaryOp(expr->binary_operation(), 1955 EmitInlineSmiBinaryOp(expr->binary_operation(),
1959 op, 1956 op,
1960 mode,
1961 expr->target(), 1957 expr->target(),
1962 expr->value()); 1958 expr->value());
1963 } else { 1959 } else {
1964 EmitBinaryOp(expr->binary_operation(), op, mode); 1960 EmitBinaryOp(expr->binary_operation(), op);
1965 } 1961 }
1966 1962
1967 // Deoptimization point in case the binary operation may have side effects. 1963 // Deoptimization point in case the binary operation may have side effects.
1968 PrepareForBailout(expr->binary_operation(), TOS_REG); 1964 PrepareForBailout(expr->binary_operation(), TOS_REG);
1969 } else { 1965 } else {
1970 VisitForAccumulatorValue(expr->value()); 1966 VisitForAccumulatorValue(expr->value());
1971 } 1967 }
1972 1968
1973 // Record source position before possible IC call. 1969 // Record source position before possible IC call.
1974 SetSourcePosition(expr->position()); 1970 SetSourcePosition(expr->position());
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
2335 void FullCodeGenerator::EmitKeyedSuperPropertyLoad(Property* prop) { 2331 void FullCodeGenerator::EmitKeyedSuperPropertyLoad(Property* prop) {
2336 // Stack: receiver, home_object, key. 2332 // Stack: receiver, home_object, key.
2337 SetSourcePosition(prop->position()); 2333 SetSourcePosition(prop->position());
2338 2334
2339 __ CallRuntime(Runtime::kLoadKeyedFromSuper, 3); 2335 __ CallRuntime(Runtime::kLoadKeyedFromSuper, 3);
2340 } 2336 }
2341 2337
2342 2338
2343 void FullCodeGenerator::EmitInlineSmiBinaryOp(BinaryOperation* expr, 2339 void FullCodeGenerator::EmitInlineSmiBinaryOp(BinaryOperation* expr,
2344 Token::Value op, 2340 Token::Value op,
2345 OverwriteMode mode,
2346 Expression* left, 2341 Expression* left,
2347 Expression* right) { 2342 Expression* right) {
2348 // Do combined smi check of the operands. Left operand is on the 2343 // Do combined smi check of the operands. Left operand is on the
2349 // stack. Right operand is in eax. 2344 // stack. Right operand is in eax.
2350 Label smi_case, done, stub_call; 2345 Label smi_case, done, stub_call;
2351 __ pop(edx); 2346 __ pop(edx);
2352 __ mov(ecx, eax); 2347 __ mov(ecx, eax);
2353 __ or_(eax, edx); 2348 __ or_(eax, edx);
2354 JumpPatchSite patch_site(masm_); 2349 JumpPatchSite patch_site(masm_);
2355 patch_site.EmitJumpIfSmi(eax, &smi_case, Label::kNear); 2350 patch_site.EmitJumpIfSmi(eax, &smi_case, Label::kNear);
2356 2351
2357 __ bind(&stub_call); 2352 __ bind(&stub_call);
2358 __ mov(eax, ecx); 2353 __ mov(eax, ecx);
2359 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), op, mode).code(); 2354 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), op).code();
2360 CallIC(code, expr->BinaryOperationFeedbackId()); 2355 CallIC(code, expr->BinaryOperationFeedbackId());
2361 patch_site.EmitPatchInfo(); 2356 patch_site.EmitPatchInfo();
2362 __ jmp(&done, Label::kNear); 2357 __ jmp(&done, Label::kNear);
2363 2358
2364 // Smi case. 2359 // Smi case.
2365 __ bind(&smi_case); 2360 __ bind(&smi_case);
2366 __ mov(eax, edx); // Copy left operand in case of a stub call. 2361 __ mov(eax, edx); // Copy left operand in case of a stub call.
2367 2362
2368 switch (op) { 2363 switch (op) {
2369 case Token::SAR: 2364 case Token::SAR:
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
2481 } 2476 }
2482 2477
2483 // prototype 2478 // prototype
2484 __ CallRuntime(Runtime::kToFastProperties, 1); 2479 __ CallRuntime(Runtime::kToFastProperties, 1);
2485 2480
2486 // constructor 2481 // constructor
2487 __ CallRuntime(Runtime::kToFastProperties, 1); 2482 __ CallRuntime(Runtime::kToFastProperties, 1);
2488 } 2483 }
2489 2484
2490 2485
2491 void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr, 2486 void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr, Token::Value op) {
2492 Token::Value op,
2493 OverwriteMode mode) {
2494 __ pop(edx); 2487 __ pop(edx);
2495 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), op, mode).code(); 2488 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), op).code();
2496 JumpPatchSite patch_site(masm_); // unbound, signals no inlined smi code. 2489 JumpPatchSite patch_site(masm_); // unbound, signals no inlined smi code.
2497 CallIC(code, expr->BinaryOperationFeedbackId()); 2490 CallIC(code, expr->BinaryOperationFeedbackId());
2498 patch_site.EmitPatchInfo(); 2491 patch_site.EmitPatchInfo();
2499 context()->Plug(eax); 2492 context()->Plug(eax);
2500 } 2493 }
2501 2494
2502 2495
2503 void FullCodeGenerator::EmitAssignment(Expression* expr) { 2496 void FullCodeGenerator::EmitAssignment(Expression* expr) {
2504 DCHECK(expr->IsValidReferenceExpression()); 2497 DCHECK(expr->IsValidReferenceExpression());
2505 2498
(...skipping 2250 matching lines...) Expand 10 before | Expand all | Expand 10 after
4756 } 4749 }
4757 } 4750 }
4758 4751
4759 // Record position before stub call. 4752 // Record position before stub call.
4760 SetSourcePosition(expr->position()); 4753 SetSourcePosition(expr->position());
4761 4754
4762 // Call stub for +1/-1. 4755 // Call stub for +1/-1.
4763 __ bind(&stub_call); 4756 __ bind(&stub_call);
4764 __ mov(edx, eax); 4757 __ mov(edx, eax);
4765 __ mov(eax, Immediate(Smi::FromInt(1))); 4758 __ mov(eax, Immediate(Smi::FromInt(1)));
4766 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), expr->binary_op(), 4759 Handle<Code> code =
4767 NO_OVERWRITE).code(); 4760 CodeFactory::BinaryOpIC(isolate(), expr->binary_op()).code();
4768 CallIC(code, expr->CountBinOpFeedbackId()); 4761 CallIC(code, expr->CountBinOpFeedbackId());
4769 patch_site.EmitPatchInfo(); 4762 patch_site.EmitPatchInfo();
4770 __ bind(&done); 4763 __ bind(&done);
4771 4764
4772 // Store the value returned in eax. 4765 // Store the value returned in eax.
4773 switch (assign_type) { 4766 switch (assign_type) {
4774 case VARIABLE: 4767 case VARIABLE:
4775 if (expr->is_postfix()) { 4768 if (expr->is_postfix()) {
4776 // Perform the assignment as if via '='. 4769 // Perform the assignment as if via '='.
4777 { EffectContext context(this); 4770 { EffectContext context(this);
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
5284 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), 5277 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(),
5285 Assembler::target_address_at(call_target_address, 5278 Assembler::target_address_at(call_target_address,
5286 unoptimized_code)); 5279 unoptimized_code));
5287 return OSR_AFTER_STACK_CHECK; 5280 return OSR_AFTER_STACK_CHECK;
5288 } 5281 }
5289 5282
5290 5283
5291 } } // namespace v8::internal 5284 } } // namespace v8::internal
5292 5285
5293 #endif // V8_TARGET_ARCH_X87 5286 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « no previous file | src/x87/lithium-codegen-x87.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698