Home | History | Annotate | Download | only in dex

Lines Matching full:instruction

61   void CompileReturnVoid(Instruction* inst, uint32_t dex_pc);
64 // this case, returns the second NOP instruction pointer. Otherwise, returns
66 Instruction* CompileCheckCast(Instruction* inst, uint32_t dex_pc);
74 void CompileInstanceFieldAccess(Instruction* inst, uint32_t dex_pc,
75 Instruction::Code new_opcode, bool is_put);
83 void CompileInvokeVirtual(Instruction* inst, uint32_t dex_pc,
84 Instruction::Code new_opcode, bool is_range);
98 Instruction* inst = const_cast<Instruction*>(Instruction::At(insns));
101 inst = const_cast<Instruction*>(inst->Next()), dex_pc = inst->GetDexPc(insns)) {
103 case Instruction::RETURN_VOID:
107 case Instruction::CHECK_CAST:
111 case Instruction::IGET:
112 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_QUICK, false);
115 case Instruction::IGET_WIDE:
116 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_WIDE_QUICK, false);
119 case Instruction::IGET_OBJECT:
120 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_OBJECT_QUICK, false);
123 case Instruction::IGET_BOOLEAN:
124 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_BOOLEAN_QUICK, false);
127 case Instruction::IGET_BYTE:
128 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_BYTE_QUICK, false);
131 case Instruction::IGET_CHAR:
132 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_CHAR_QUICK, false);
135 case Instruction::IGET_SHORT:
136 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IGET_SHORT_QUICK, false);
139 case Instruction::IPUT:
140 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_QUICK, true);
143 case Instruction::IPUT_BOOLEAN:
144 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_BOOLEAN_QUICK, true);
147 case Instruction::IPUT_BYTE:
148 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_BYTE_QUICK, true);
151 case Instruction::IPUT_CHAR:
152 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_CHAR_QUICK, true);
155 case Instruction::IPUT_SHORT:
156 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_SHORT_QUICK, true);
159 case Instruction::IPUT_WIDE:
160 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_WIDE_QUICK, true);
163 case Instruction::IPUT_OBJECT:
164 CompileInstanceFieldAccess(inst, dex_pc, Instruction::IPUT_OBJECT_QUICK, true);
167 case Instruction::INVOKE_VIRTUAL:
168 CompileInvokeVirtual(inst, dex_pc, Instruction::INVOKE_VIRTUAL_QUICK, false);
171 case Instruction::INVOKE_VIRTUAL_RANGE:
172 CompileInvokeVirtual(inst, dex_pc, Instruction::INVOKE_VIRTUAL_RANGE_QUICK, true);
182 void DexCompiler::CompileReturnVoid(Instruction* inst, uint32_t dex_pc) {
183 DCHECK_EQ(inst->Opcode(), Instruction::RETURN_VOID);
193 VLOG(compiler) << "Replacing " << Instruction::Name(inst->Opcode())
194 << " by " << Instruction::Name(Instruction::RETURN_VOID_NO_BARRIER)
197 inst->SetOpcode(Instruction::RETURN_VOID_NO_BARRIER);
200 Instruction* DexCompiler::CompileCheckCast(Instruction* inst, uint32_t dex_pc) {
207 // Ok, this is a safe cast. Since the "check-cast" instruction size is 2 code
208 // units and a "nop" instruction size is 1 code unit, we need to replace it by
210 // Because the caller loops over instructions by calling Instruction::Next onto
211 // the current instruction, we need to return the 2nd NOP instruction. Indeed,
212 // its next instruction is the former check-cast's next instruction.
213 VLOG(compiler) << "Removing " << Instruction::Name(inst->Opcode())
218 inst->SetOpcode(Instruction::NOP);
220 // Get to next instruction which is the second half of check-cast and replace
222 inst = const_cast<Instruction*>(inst->Next());
223 inst->SetOpcode(Instruction::NOP);
228 void DexCompiler::CompileInstanceFieldAccess(Instruction* inst,
230 Instruction::Code new_opcode,
241 VLOG(compiler) << "Quickening " << Instruction::Name(inst->Opcode())
242 << " to " << Instruction::Name(new_opcode)
254 void DexCompiler::CompileInvokeVirtual(Instruction* inst, uint32_t dex_pc,
255 Instruction::Code new_opcode, bool is_range) {
275 VLOG(compiler) << "Quickening " << Instruction::Name(inst->Opcode())
277 << " to " << Instruction::Name(new_opcode)