| Index: runtime/vm/code_patcher_ia32.cc
|
| diff --git a/runtime/vm/code_patcher_ia32.cc b/runtime/vm/code_patcher_ia32.cc
|
| index 0456d9b3f2b29446ed2eea8539f118f88c57a8af..ad3281f7a0d0bee79db5a9f877383c227a7f8905 100644
|
| --- a/runtime/vm/code_patcher_ia32.cc
|
| +++ b/runtime/vm/code_patcher_ia32.cc
|
| @@ -53,26 +53,10 @@ class DartCallPattern : public ValueObject {
|
| return *reinterpret_cast<RawObject**>(start_ + 1);
|
| }
|
|
|
| - void set_immediate_one(uint32_t value) {
|
| - uint32_t* target_addr = reinterpret_cast<uint32_t*>(start_ + 1);
|
| - *target_addr = value;
|
| - CPU::FlushICache(start_, kInstructionSize);
|
| - }
|
| -
|
| RawObject* immediate_two() const {
|
| return *reinterpret_cast<RawObject**>(start_ + kInstructionSize + 1);
|
| }
|
|
|
| - intptr_t argument_count() const {
|
| - ArgumentsDescriptor args_desc(immediate_two());
|
| - return args_desc.Count();
|
| - }
|
| -
|
| - intptr_t named_argument_count() const {
|
| - ArgumentsDescriptor args_desc(immediate_two());
|
| - return args_desc.NamedCount();
|
| - }
|
| -
|
| static const int kNumInstructions = 3;
|
| static const int kInstructionSize = 5; // All instructions have same length.
|
|
|
| @@ -100,11 +84,8 @@ class InstanceCall : public DartCallPattern {
|
| explicit InstanceCall(uword return_address)
|
| : DartCallPattern(return_address) {}
|
|
|
| - RawICData* ic_data() const {
|
| - ICData& ic_data = ICData::Handle();
|
| - ic_data ^= immediate_one();
|
| - return ic_data.raw();
|
| - }
|
| + RawObject* ic_data() const { return immediate_one(); }
|
| + RawObject* arguments_descriptor() const { return immediate_two(); }
|
|
|
| private:
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(InstanceCall);
|
| @@ -247,28 +228,17 @@ bool CodePatcher::IsDartCall(uword return_address) {
|
| }
|
|
|
|
|
| -void CodePatcher::GetInstanceCallAt(uword return_address,
|
| - String* function_name,
|
| - int* num_arguments,
|
| - int* num_named_arguments,
|
| - uword* target) {
|
| - ASSERT(num_arguments != NULL);
|
| - ASSERT(num_named_arguments != NULL);
|
| - ASSERT(target != NULL);
|
| +uword CodePatcher::GetInstanceCallAt(uword return_address,
|
| + ICData* ic_data,
|
| + Array* arguments_descriptor) {
|
| InstanceCall call(return_address);
|
| - *num_arguments = call.argument_count();
|
| - *num_named_arguments = call.named_argument_count();
|
| - *target = call.target();
|
| - const ICData& ic_data = ICData::Handle(call.ic_data());
|
| - if (function_name != NULL) {
|
| - *function_name = ic_data.target_name();
|
| + if (ic_data != NULL) {
|
| + *ic_data ^= call.ic_data();
|
| }
|
| -}
|
| -
|
| -
|
| -RawICData* CodePatcher::GetInstanceCallIcDataAt(uword return_address) {
|
| - InstanceCall call(return_address);
|
| - return call.ic_data();
|
| + if (arguments_descriptor != NULL) {
|
| + *arguments_descriptor ^= call.arguments_descriptor();
|
| + }
|
| + return call.target();
|
| }
|
|
|
|
|
|
|