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

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

Issue 1693833002: Remove strong mode support from binary operations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. Created 4 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
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 #if V8_TARGET_ARCH_ARM64 5 #if V8_TARGET_ARCH_ARM64
6 6
7 #include "src/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 patch_site.EmitJumpIfEitherNotSmi(x0, x1, &slow_case); 966 patch_site.EmitJumpIfEitherNotSmi(x0, x1, &slow_case);
967 __ Cmp(x1, x0); 967 __ Cmp(x1, x0);
968 __ B(ne, &next_test); 968 __ B(ne, &next_test);
969 __ Drop(1); // Switch value is no longer needed. 969 __ Drop(1); // Switch value is no longer needed.
970 __ B(clause->body_target()); 970 __ B(clause->body_target());
971 __ Bind(&slow_case); 971 __ Bind(&slow_case);
972 } 972 }
973 973
974 // Record position before stub call for type feedback. 974 // Record position before stub call for type feedback.
975 SetExpressionPosition(clause); 975 SetExpressionPosition(clause);
976 Handle<Code> ic = CodeFactory::CompareIC(isolate(), Token::EQ_STRICT, 976 Handle<Code> ic =
977 strength(language_mode())).code(); 977 CodeFactory::CompareIC(isolate(), Token::EQ_STRICT).code();
978 CallIC(ic, clause->CompareId()); 978 CallIC(ic, clause->CompareId());
979 patch_site.EmitPatchInfo(); 979 patch_site.EmitPatchInfo();
980 980
981 Label skip; 981 Label skip;
982 __ B(&skip); 982 __ B(&skip);
983 PrepareForBailout(clause, TOS_REG); 983 PrepareForBailout(clause, TOS_REG);
984 __ JumpIfNotRoot(x0, Heap::kTrueValueRootIndex, &next_test); 984 __ JumpIfNotRoot(x0, Heap::kTrueValueRootIndex, &next_test);
985 __ Drop(1); 985 __ Drop(1);
986 __ B(clause->body_target()); 986 __ B(clause->body_target());
987 __ Bind(&skip); 987 __ Bind(&skip);
(...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after
1939 Register result = x0; 1939 Register result = x0;
1940 __ Pop(left); 1940 __ Pop(left);
1941 1941
1942 // Perform combined smi check on both operands. 1942 // Perform combined smi check on both operands.
1943 __ Orr(x10, left, right); 1943 __ Orr(x10, left, right);
1944 JumpPatchSite patch_site(masm_); 1944 JumpPatchSite patch_site(masm_);
1945 patch_site.EmitJumpIfSmi(x10, &both_smis); 1945 patch_site.EmitJumpIfSmi(x10, &both_smis);
1946 1946
1947 __ Bind(&stub_call); 1947 __ Bind(&stub_call);
1948 1948
1949 Handle<Code> code = 1949 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), op).code();
1950 CodeFactory::BinaryOpIC(isolate(), op, strength(language_mode())).code();
1951 { 1950 {
1952 Assembler::BlockPoolsScope scope(masm_); 1951 Assembler::BlockPoolsScope scope(masm_);
1953 CallIC(code, expr->BinaryOperationFeedbackId()); 1952 CallIC(code, expr->BinaryOperationFeedbackId());
1954 patch_site.EmitPatchInfo(); 1953 patch_site.EmitPatchInfo();
1955 } 1954 }
1956 __ B(&done); 1955 __ B(&done);
1957 1956
1958 __ Bind(&both_smis); 1957 __ Bind(&both_smis);
1959 // Smi case. This code works in the same way as the smi-smi case in the type 1958 // Smi case. This code works in the same way as the smi-smi case in the type
1960 // recording binary operation stub, see 1959 // recording binary operation stub, see
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2022 UNREACHABLE(); 2021 UNREACHABLE();
2023 } 2022 }
2024 2023
2025 __ Bind(&done); 2024 __ Bind(&done);
2026 context()->Plug(x0); 2025 context()->Plug(x0);
2027 } 2026 }
2028 2027
2029 2028
2030 void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr, Token::Value op) { 2029 void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr, Token::Value op) {
2031 __ Pop(x1); 2030 __ Pop(x1);
2032 Handle<Code> code = 2031 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), op).code();
2033 CodeFactory::BinaryOpIC(isolate(), op, strength(language_mode())).code();
2034 JumpPatchSite patch_site(masm_); // Unbound, signals no inlined smi code. 2032 JumpPatchSite patch_site(masm_); // Unbound, signals no inlined smi code.
2035 { 2033 {
2036 Assembler::BlockPoolsScope scope(masm_); 2034 Assembler::BlockPoolsScope scope(masm_);
2037 CallIC(code, expr->BinaryOperationFeedbackId()); 2035 CallIC(code, expr->BinaryOperationFeedbackId());
2038 patch_site.EmitPatchInfo(); 2036 patch_site.EmitPatchInfo();
2039 } 2037 }
2040 context()->Plug(x0); 2038 context()->Plug(x0);
2041 } 2039 }
2042 2040
2043 2041
(...skipping 1863 matching lines...) Expand 10 before | Expand all | Expand 10 after
3907 } 3905 }
3908 3906
3909 __ Bind(&stub_call); 3907 __ Bind(&stub_call);
3910 __ Mov(x1, x0); 3908 __ Mov(x1, x0);
3911 __ Mov(x0, Smi::FromInt(count_value)); 3909 __ Mov(x0, Smi::FromInt(count_value));
3912 3910
3913 SetExpressionPosition(expr); 3911 SetExpressionPosition(expr);
3914 3912
3915 { 3913 {
3916 Assembler::BlockPoolsScope scope(masm_); 3914 Assembler::BlockPoolsScope scope(masm_);
3917 Handle<Code> code = 3915 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), Token::ADD).code();
3918 CodeFactory::BinaryOpIC(isolate(), Token::ADD,
3919 strength(language_mode())).code();
3920 CallIC(code, expr->CountBinOpFeedbackId()); 3916 CallIC(code, expr->CountBinOpFeedbackId());
3921 patch_site.EmitPatchInfo(); 3917 patch_site.EmitPatchInfo();
3922 } 3918 }
3923 __ Bind(&done); 3919 __ Bind(&done);
3924 3920
3925 if (is_strong(language_mode())) { 3921 if (is_strong(language_mode())) {
3926 PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); 3922 PrepareForBailoutForId(expr->ToNumberId(), TOS_REG);
3927 } 3923 }
3928 // Store the value returned in x0. 3924 // Store the value returned in x0.
3929 switch (assign_type) { 3925 switch (assign_type) {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
4144 4140
4145 JumpPatchSite patch_site(masm_); 4141 JumpPatchSite patch_site(masm_);
4146 if (ShouldInlineSmiCase(op)) { 4142 if (ShouldInlineSmiCase(op)) {
4147 Label slow_case; 4143 Label slow_case;
4148 patch_site.EmitJumpIfEitherNotSmi(x0, x1, &slow_case); 4144 patch_site.EmitJumpIfEitherNotSmi(x0, x1, &slow_case);
4149 __ Cmp(x1, x0); 4145 __ Cmp(x1, x0);
4150 Split(cond, if_true, if_false, NULL); 4146 Split(cond, if_true, if_false, NULL);
4151 __ Bind(&slow_case); 4147 __ Bind(&slow_case);
4152 } 4148 }
4153 4149
4154 Handle<Code> ic = CodeFactory::CompareIC( 4150 Handle<Code> ic = CodeFactory::CompareIC(isolate(), op).code();
4155 isolate(), op, strength(language_mode())).code();
4156 CallIC(ic, expr->CompareOperationFeedbackId()); 4151 CallIC(ic, expr->CompareOperationFeedbackId());
4157 patch_site.EmitPatchInfo(); 4152 patch_site.EmitPatchInfo();
4158 PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); 4153 PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);
4159 __ CompareAndSplit(x0, 0, cond, if_true, if_false, fall_through); 4154 __ CompareAndSplit(x0, 0, cond, if_true, if_false, fall_through);
4160 } 4155 }
4161 } 4156 }
4162 4157
4163 // Convert the result of the comparison into one expected for this 4158 // Convert the result of the comparison into one expected for this
4164 // expression's context. 4159 // expression's context.
4165 context()->Plug(if_true, if_false); 4160 context()->Plug(if_true, if_false);
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
4623 } 4618 }
4624 4619
4625 return INTERRUPT; 4620 return INTERRUPT;
4626 } 4621 }
4627 4622
4628 4623
4629 } // namespace internal 4624 } // namespace internal
4630 } // namespace v8 4625 } // namespace v8
4631 4626
4632 #endif // V8_TARGET_ARCH_ARM64 4627 #endif // V8_TARGET_ARCH_ARM64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698