| Index: runtime/vm/instructions_dbc.cc
|
| diff --git a/runtime/vm/instructions_dbc.cc b/runtime/vm/instructions_dbc.cc
|
| index 7667a5f2b6b56f2bc0e92ca08f05303c21be9cc8..88115c59485824ce09f14bd2c084b4379a91f20c 100644
|
| --- a/runtime/vm/instructions_dbc.cc
|
| +++ b/runtime/vm/instructions_dbc.cc
|
| @@ -37,7 +37,6 @@ static bool HasLoadFromPool(Instr instr) {
|
| }
|
| }
|
|
|
| -
|
| static bool GetLoadedObjectAt(uword pc,
|
| const ObjectPool& object_pool,
|
| Object* obj) {
|
| @@ -52,7 +51,6 @@ static bool GetLoadedObjectAt(uword pc,
|
| return false;
|
| }
|
|
|
| -
|
| CallPattern::CallPattern(uword pc, const Code& code)
|
| : object_pool_(ObjectPool::Handle(code.GetObjectPool())),
|
| end_(pc),
|
| @@ -67,7 +65,6 @@ CallPattern::CallPattern(uword pc, const Code& code)
|
| target_code_pool_index_ = Bytecode::DecodeD(call_instr);
|
| }
|
|
|
| -
|
| NativeCallPattern::NativeCallPattern(uword pc, const Code& code)
|
| : object_pool_(ObjectPool::Handle(code.GetObjectPool())),
|
| end_(pc),
|
| @@ -76,31 +73,26 @@ NativeCallPattern::NativeCallPattern(uword pc, const Code& code)
|
| UNIMPLEMENTED();
|
| }
|
|
|
| -
|
| RawCode* NativeCallPattern::target() const {
|
| return reinterpret_cast<RawCode*>(
|
| object_pool_.ObjectAt(target_code_pool_index_));
|
| }
|
|
|
| -
|
| void NativeCallPattern::set_target(const Code& new_target) const {
|
| object_pool_.SetObjectAt(target_code_pool_index_, new_target);
|
| // No need to flush the instruction cache, since the code is not modified.
|
| }
|
|
|
| -
|
| NativeFunction NativeCallPattern::native_function() const {
|
| return reinterpret_cast<NativeFunction>(
|
| object_pool_.RawValueAt(native_function_pool_index_));
|
| }
|
|
|
| -
|
| void NativeCallPattern::set_native_function(NativeFunction func) const {
|
| object_pool_.SetRawValueAt(native_function_pool_index_,
|
| reinterpret_cast<uword>(func));
|
| }
|
|
|
| -
|
| // Decodes a load sequence ending at 'end' (the last instruction of the load
|
| // sequence is the instruction before the one at end). Returns a pointer to
|
| // the first instruction in the sequence. Returns the register being loaded
|
| @@ -114,7 +106,6 @@ uword InstructionPattern::DecodeLoadObject(uword end,
|
| return 0;
|
| }
|
|
|
| -
|
| // Decodes a load sequence ending at 'end' (the last instruction of the load
|
| // sequence is the instruction before the one at end). Returns a pointer to
|
| // the first instruction in the sequence. Returns the register being loaded
|
| @@ -127,7 +118,6 @@ uword InstructionPattern::DecodeLoadWordImmediate(uword end,
|
| return 0;
|
| }
|
|
|
| -
|
| // Decodes a load sequence ending at 'end' (the last instruction of the load
|
| // sequence is the instruction before the one at end). Returns a pointer to
|
| // the first instruction in the sequence. Returns the register being loaded
|
| @@ -140,14 +130,12 @@ uword InstructionPattern::DecodeLoadWordFromPool(uword end,
|
| return 0;
|
| }
|
|
|
| -
|
| bool DecodeLoadObjectFromPoolOrThread(uword pc, const Code& code, Object* obj) {
|
| ASSERT(code.ContainsInstructionAt(pc));
|
| const ObjectPool& pool = ObjectPool::Handle(code.object_pool());
|
| return GetLoadedObjectAt(pc, pool, obj);
|
| }
|
|
|
| -
|
| RawICData* CallPattern::IcData() {
|
| if (ic_data_.IsNull()) {
|
| bool found = GetLoadedObjectAt(ic_data_load_end_, object_pool_, &ic_data_);
|
| @@ -156,18 +144,15 @@ RawICData* CallPattern::IcData() {
|
| return ic_data_.raw();
|
| }
|
|
|
| -
|
| RawCode* CallPattern::TargetCode() const {
|
| return reinterpret_cast<RawCode*>(
|
| object_pool_.ObjectAt(target_code_pool_index_));
|
| }
|
|
|
| -
|
| void CallPattern::SetTargetCode(const Code& target_code) const {
|
| object_pool_.SetObjectAt(target_code_pool_index_, target_code);
|
| }
|
|
|
| -
|
| void CallPattern::InsertDeoptCallAt(uword pc) {
|
| const uint8_t argc = Bytecode::IsCallOpcode(Bytecode::At(pc))
|
| ? Bytecode::DecodeArgc(Bytecode::At(pc))
|
| @@ -175,7 +160,6 @@ void CallPattern::InsertDeoptCallAt(uword pc) {
|
| *reinterpret_cast<Instr*>(pc) = Bytecode::Encode(Bytecode::kDeopt, argc, 0);
|
| }
|
|
|
| -
|
| SwitchableCallPattern::SwitchableCallPattern(uword pc, const Code& code)
|
| : object_pool_(ObjectPool::Handle(code.GetObjectPool())),
|
| data_pool_index_(-1),
|
| @@ -183,34 +167,28 @@ SwitchableCallPattern::SwitchableCallPattern(uword pc, const Code& code)
|
| UNIMPLEMENTED();
|
| }
|
|
|
| -
|
| RawObject* SwitchableCallPattern::data() const {
|
| return object_pool_.ObjectAt(data_pool_index_);
|
| }
|
|
|
| -
|
| RawCode* SwitchableCallPattern::target() const {
|
| return reinterpret_cast<RawCode*>(object_pool_.ObjectAt(target_pool_index_));
|
| }
|
|
|
| -
|
| void SwitchableCallPattern::SetData(const Object& data) const {
|
| ASSERT(!Object::Handle(object_pool_.ObjectAt(data_pool_index_)).IsCode());
|
| object_pool_.SetObjectAt(data_pool_index_, data);
|
| }
|
|
|
| -
|
| void SwitchableCallPattern::SetTarget(const Code& target) const {
|
| ASSERT(Object::Handle(object_pool_.ObjectAt(target_pool_index_)).IsCode());
|
| object_pool_.SetObjectAt(target_pool_index_, target);
|
| }
|
|
|
| -
|
| ReturnPattern::ReturnPattern(uword pc) : pc_(pc) {
|
| USE(pc_);
|
| }
|
|
|
| -
|
| bool ReturnPattern::IsValid() const {
|
| UNIMPLEMENTED();
|
| return false;
|
|
|