| Index: runtime/vm/intermediate_language.cc
|
| diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
|
| index fb55f660f397e597849ddd6bd71d4f0e290e08bf..af73e52a6be8c4c38c6815bd5c330fd6b38cdd16 100644
|
| --- a/runtime/vm/intermediate_language.cc
|
| +++ b/runtime/vm/intermediate_language.cc
|
| @@ -2933,16 +2933,16 @@ LocationSummary* InstanceCallInstr::MakeLocationSummary(Zone* zone,
|
| }
|
|
|
|
|
| -static uword TwoArgsSmiOpInlineCacheEntry(Token::Kind kind) {
|
| +static RawCode* TwoArgsSmiOpInlineCacheCode(Token::Kind kind) {
|
| if (!FLAG_two_args_smi_icd) {
|
| return 0;
|
| }
|
| StubCode* stub_code = Isolate::Current()->stub_code();
|
| switch (kind) {
|
| - case Token::kADD: return stub_code->SmiAddInlineCacheEntryPoint();
|
| - case Token::kSUB: return stub_code->SmiSubInlineCacheEntryPoint();
|
| - case Token::kEQ: return stub_code->SmiEqualInlineCacheEntryPoint();
|
| - default: return 0;
|
| + case Token::kADD: return stub_code->SmiAddInlineCacheCode();
|
| + case Token::kSUB: return stub_code->SmiSubInlineCacheCode();
|
| + case Token::kEQ: return stub_code->SmiEqualInlineCacheCode();
|
| + default: return Code::null();
|
| }
|
| }
|
|
|
| @@ -2983,8 +2983,8 @@ void InstanceCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| // Unoptimized code.
|
| ASSERT(!HasICData());
|
| bool is_smi_two_args_op = false;
|
| - const uword label_address = TwoArgsSmiOpInlineCacheEntry(token_kind());
|
| - if (label_address != 0) {
|
| + Code& stub = Code::Handle(TwoArgsSmiOpInlineCacheCode(token_kind()));
|
| + if (stub.raw() != Code::null()) {
|
| // We have a dedicated inline cache stub for this operation, add an
|
| // an initial Smi/Smi check with count 0.
|
| ASSERT(call_ic_data->NumArgsTested() == 2);
|
| @@ -3012,8 +3012,7 @@ void InstanceCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| }
|
| if (is_smi_two_args_op) {
|
| ASSERT(ArgumentCount() == 2);
|
| - ExternalLabel target_label(label_address);
|
| - compiler->EmitInstanceCall(&target_label, *call_ic_data, ArgumentCount(),
|
| + compiler->EmitInstanceCall(stub, *call_ic_data, ArgumentCount(),
|
| deopt_id(), token_pos(), locs());
|
| } else if (FLAG_ic_range_profiling &&
|
| (Token::IsBinaryArithmeticOperator(token_kind()) ||
|
| @@ -3023,10 +3022,10 @@ void InstanceCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| ASSERT(Token::IsBinaryArithmeticOperator(token_kind()) ==
|
| (ArgumentCount() == 2));
|
| StubCode* stub_code = compiler->isolate()->stub_code();
|
| - ExternalLabel target_label((ArgumentCount() == 1) ?
|
| - stub_code->UnaryRangeCollectingInlineCacheEntryPoint() :
|
| - stub_code->BinaryRangeCollectingInlineCacheEntryPoint());
|
| - compiler->EmitInstanceCall(&target_label, *call_ic_data, ArgumentCount(),
|
| + stub = ((ArgumentCount() == 1) ?
|
| + stub_code->UnaryRangeCollectingInlineCacheCode() :
|
| + stub_code->BinaryRangeCollectingInlineCacheCode());
|
| + compiler->EmitInstanceCall(stub, *call_ic_data, ArgumentCount(),
|
| deopt_id(), token_pos(), locs());
|
| } else {
|
| compiler->GenerateInstanceCall(deopt_id(),
|
|
|