Home | History | Annotate | Download | only in dex

Lines Matching full:instruction

66   void CompileReturnVoid(Instruction* inst, uint32_t dex_pc);
69 // this case, returns the second NOP instruction pointer. Otherwise, returns
71 Instruction* CompileCheckCast(Instruction* inst, uint32_t dex_pc);
79 void CompileInstanceFieldAccess(Instruction* inst, uint32_t dex_pc,
80 Instruction::Code new_opcode, bool is_put);
88 void CompileInvokeVirtual(Instruction* inst, uint32_t dex_pc,
89 Instruction::Code new_opcode, bool is_range);
103 Instruction* inst = const_cast<Instruction*>(Instruction::At(insns));
106 inst = const_cast<Instruction*>(inst->Next()), dex_pc = inst->GetDexPc(insns)) {
108 case Instruction::RETURN_VOID:
112 case Instruction::CHECK_CAST:
116 case Instruction::IGET:
117 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_QUICK, false);
120 case Instruction::IGET_WIDE:
121 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_WIDE_QUICK, false);
124 case Instruction::IGET_OBJECT:
125 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_OBJECT_QUICK, false);
128 case Instruction::IPUT:
129 case Instruction::IPUT_BOOLEAN:
130 case Instruction::IPUT_BYTE:
131 case Instruction::IPUT_CHAR:
132 case Instruction::IPUT_SHORT:
135 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_QUICK, true);
138 case Instruction::IPUT_WIDE:
139 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_WIDE_QUICK, true);
142 case Instruction::IPUT_OBJECT:
143 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_OBJECT_QUICK, true);
146 case Instruction::INVOKE_VIRTUAL:
147 CompileInvokeVirtual(inst, dex_pc, Instruction::INVOKE_VIRTUAL_QUICK, false);
150 case Instruction::INVOKE_VIRTUAL_RANGE:
151 CompileInvokeVirtual(inst, dex_pc, Instruction::INVOKE_VIRTUAL_RANGE_QUICK, true);
161 void DexCompiler::CompileReturnVoid(Instruction* inst, uint32_t dex_pc) {
162 DCHECK(inst->Opcode() == Instruction::RETURN_VOID);
173 VLOG(compiler) << "Replacing " << Instruction::Name(inst->Opcode())
174 << " by " << Instruction::Name(Instruction::RETURN_VOID_BARRIER)
177 inst->SetOpcode(Instruction::RETURN_VOID_BARRIER);
180 Instruction* DexCompiler::CompileCheckCast(Instruction* inst, uint32_t dex_pc) {
188 // Ok, this is a safe cast. Since the "check-cast" instruction size is 2 code
189 // units and a "nop" instruction size is 1 code unit, we need to replace it by
191 // Because the caller loops over instructions by calling Instruction::Next onto
192 // the current instruction, we need to return the 2nd NOP instruction. Indeed,
193 // its next instruction is the former check-cast's next instruction.
194 VLOG(compiler) << "Removing " << Instruction::Name(inst->Opcode())
199 inst->SetOpcode(Instruction::NOP);
201 // Get to next instruction which is the second half of check-cast and replace
203 inst = const_cast<Instruction*>(inst->Next());
204 inst->SetOpcode(Instruction::NOP);
209 void DexCompiler::CompileInstanceFieldAccess(Instruction* inst,
211 Instruction::Code new_opcode,
222 VLOG(compiler) << "Quickening " << Instruction::Name(inst->Opcode())
223 << " to " << Instruction::Name(new_opcode)
235 void DexCompiler::CompileInvokeVirtual(Instruction* inst,
237 Instruction::Code new_opcode,
256 VLOG(compiler) << "Quickening " << Instruction::Name(inst->Opcode())
258 << " to " << Instruction::Name(new_opcode)