Lines Matching refs:instruction
49 void Add(HInstruction* instruction) { in Add() argument
51 DCHECK(instruction->GetType() != Primitive::kPrimLong in Add()
52 && instruction->GetType() != Primitive::kPrimDouble); in Add()
54 instruction->GetBlock()->AddInstruction(temp); in Add()
55 DCHECK(temp->GetPrevious() == instruction); in Add()
140 void HGraphBuilder::If_22t(const Instruction& instruction, uint32_t dex_offset) { in If_22t() argument
141 HInstruction* first = LoadLocal(instruction.VRegA(), Primitive::kPrimInt); in If_22t()
142 HInstruction* second = LoadLocal(instruction.VRegB(), Primitive::kPrimInt); in If_22t()
147 HBasicBlock* target = FindBlockStartingAt(dex_offset + instruction.GetTargetOffset()); in If_22t()
150 target = FindBlockStartingAt(dex_offset + instruction.SizeInCodeUnits()); in If_22t()
157 void HGraphBuilder::If_21t(const Instruction& instruction, uint32_t dex_offset) { in If_21t() argument
158 HInstruction* value = LoadLocal(instruction.VRegA(), Primitive::kPrimInt); in If_21t()
163 HBasicBlock* target = FindBlockStartingAt(dex_offset + instruction.GetTargetOffset()); in If_21t()
166 target = FindBlockStartingAt(dex_offset + instruction.SizeInCodeUnits()); in If_21t()
203 const Instruction& instruction = *Instruction::At(code_ptr); in BuildGraph() local
204 if (!AnalyzeDexInstruction(instruction, dex_offset)) return nullptr; in BuildGraph()
205 dex_offset += instruction.SizeInCodeUnits(); in BuildGraph()
206 code_ptr += instruction.SizeInCodeUnits(); in BuildGraph()
246 const Instruction& instruction = *Instruction::At(code_ptr); in ComputeBranchTargets() local
247 if (instruction.IsBranch()) { in ComputeBranchTargets()
248 int32_t target = instruction.GetTargetOffset() + dex_offset; in ComputeBranchTargets()
254 dex_offset += instruction.SizeInCodeUnits(); in ComputeBranchTargets()
255 code_ptr += instruction.SizeInCodeUnits(); in ComputeBranchTargets()
261 code_ptr += instruction.SizeInCodeUnits(); in ComputeBranchTargets()
262 dex_offset += instruction.SizeInCodeUnits(); in ComputeBranchTargets()
273 void HGraphBuilder::Binop_23x(const Instruction& instruction, Primitive::Type type) { in Binop_23x() argument
274 HInstruction* first = LoadLocal(instruction.VRegB(), type); in Binop_23x()
275 HInstruction* second = LoadLocal(instruction.VRegC(), type); in Binop_23x()
277 UpdateLocal(instruction.VRegA(), current_block_->GetLastInstruction()); in Binop_23x()
281 void HGraphBuilder::Binop_12x(const Instruction& instruction, Primitive::Type type) { in Binop_12x() argument
282 HInstruction* first = LoadLocal(instruction.VRegA(), type); in Binop_12x()
283 HInstruction* second = LoadLocal(instruction.VRegB(), type); in Binop_12x()
285 UpdateLocal(instruction.VRegA(), current_block_->GetLastInstruction()); in Binop_12x()
289 void HGraphBuilder::Binop_22s(const Instruction& instruction, bool reverse) { in Binop_22s() argument
290 HInstruction* first = LoadLocal(instruction.VRegB(), Primitive::kPrimInt); in Binop_22s()
291 HInstruction* second = GetIntConstant(instruction.VRegC_22s()); in Binop_22s()
296 UpdateLocal(instruction.VRegA(), current_block_->GetLastInstruction()); in Binop_22s()
300 void HGraphBuilder::Binop_22b(const Instruction& instruction, bool reverse) { in Binop_22b() argument
301 HInstruction* first = LoadLocal(instruction.VRegB(), Primitive::kPrimInt); in Binop_22b()
302 HInstruction* second = GetIntConstant(instruction.VRegC_22b()); in Binop_22b()
307 UpdateLocal(instruction.VRegA(), current_block_->GetLastInstruction()); in Binop_22b()
310 void HGraphBuilder::BuildReturn(const Instruction& instruction, Primitive::Type type) { in BuildReturn() argument
314 HInstruction* value = LoadLocal(instruction.VRegA(), type); in BuildReturn()
321 bool HGraphBuilder::BuildInvoke(const Instruction& instruction, in BuildInvoke() argument
333 instruction.Opcode() != Instruction::INVOKE_STATIC in BuildInvoke()
334 && instruction.Opcode() != Instruction::INVOKE_STATIC_RANGE; in BuildInvoke()
381 bool HGraphBuilder::BuildFieldAccess(const Instruction& instruction, in BuildFieldAccess() argument
384 uint32_t source_or_dest_reg = instruction.VRegA_22c(); in BuildFieldAccess()
385 uint32_t obj_reg = instruction.VRegB_22c(); in BuildFieldAccess()
386 uint16_t field_index = instruction.VRegC_22c(); in BuildFieldAccess()
428 void HGraphBuilder::BuildArrayAccess(const Instruction& instruction, in BuildArrayAccess() argument
432 uint8_t source_or_dest_reg = instruction.VRegA_23x(); in BuildArrayAccess()
433 uint8_t array_reg = instruction.VRegB_23x(); in BuildArrayAccess()
434 uint8_t index_reg = instruction.VRegC_23x(); in BuildArrayAccess()
463 bool HGraphBuilder::AnalyzeDexInstruction(const Instruction& instruction, int32_t dex_offset) { in AnalyzeDexInstruction() argument
468 switch (instruction.Opcode()) { in AnalyzeDexInstruction()
470 int32_t register_index = instruction.VRegA(); in AnalyzeDexInstruction()
471 HIntConstant* constant = GetIntConstant(instruction.VRegB_11n()); in AnalyzeDexInstruction()
477 int32_t register_index = instruction.VRegA(); in AnalyzeDexInstruction()
478 HIntConstant* constant = GetIntConstant(instruction.VRegB_21s()); in AnalyzeDexInstruction()
484 int32_t register_index = instruction.VRegA(); in AnalyzeDexInstruction()
485 HIntConstant* constant = GetIntConstant(instruction.VRegB_31i()); in AnalyzeDexInstruction()
491 int32_t register_index = instruction.VRegA(); in AnalyzeDexInstruction()
492 HIntConstant* constant = GetIntConstant(instruction.VRegB_21h() << 16); in AnalyzeDexInstruction()
498 int32_t register_index = instruction.VRegA(); in AnalyzeDexInstruction()
500 int64_t value = instruction.VRegB_21s(); in AnalyzeDexInstruction()
509 int32_t register_index = instruction.VRegA(); in AnalyzeDexInstruction()
511 int64_t value = instruction.VRegB_31i(); in AnalyzeDexInstruction()
520 int32_t register_index = instruction.VRegA(); in AnalyzeDexInstruction()
521 HLongConstant* constant = GetLongConstant(instruction.VRegB_51l()); in AnalyzeDexInstruction()
527 int32_t register_index = instruction.VRegA(); in AnalyzeDexInstruction()
528 int64_t value = static_cast<int64_t>(instruction.VRegB_21h()) << 48; in AnalyzeDexInstruction()
539 HInstruction* value = LoadLocal(instruction.VRegB(), Primitive::kPrimInt); in AnalyzeDexInstruction()
540 UpdateLocal(instruction.VRegA(), value); in AnalyzeDexInstruction()
549 HInstruction* value = LoadLocal(instruction.VRegB(), Primitive::kPrimLong); in AnalyzeDexInstruction()
550 UpdateLocal(instruction.VRegA(), value); in AnalyzeDexInstruction()
557 HInstruction* value = LoadLocal(instruction.VRegB(), Primitive::kPrimNot); in AnalyzeDexInstruction()
558 UpdateLocal(instruction.VRegA(), value); in AnalyzeDexInstruction()
563 BuildReturn(instruction, Primitive::kPrimVoid); in AnalyzeDexInstruction()
568 case Instruction::IF_##cond: If_22t<comparison>(instruction, dex_offset); break; \ in AnalyzeDexInstruction()
569 case Instruction::IF_##cond##Z: If_21t<comparison>(instruction, dex_offset); break in AnalyzeDexInstruction()
581 HBasicBlock* target = FindBlockStartingAt(instruction.GetTargetOffset() + dex_offset); in AnalyzeDexInstruction()
590 BuildReturn(instruction, Primitive::kPrimInt); in AnalyzeDexInstruction()
595 BuildReturn(instruction, Primitive::kPrimNot); in AnalyzeDexInstruction()
600 BuildReturn(instruction, Primitive::kPrimLong); in AnalyzeDexInstruction()
606 uint32_t method_idx = instruction.VRegB_35c(); in AnalyzeDexInstruction()
607 uint32_t number_of_vreg_arguments = instruction.VRegA_35c(); in AnalyzeDexInstruction()
609 instruction.GetVarArgs(args); in AnalyzeDexInstruction()
610 …if (!BuildInvoke(instruction, dex_offset, method_idx, number_of_vreg_arguments, false, args, -1)) { in AnalyzeDexInstruction()
618 uint32_t method_idx = instruction.VRegB_3rc(); in AnalyzeDexInstruction()
619 uint32_t number_of_vreg_arguments = instruction.VRegA_3rc(); in AnalyzeDexInstruction()
620 uint32_t register_index = instruction.VRegC(); in AnalyzeDexInstruction()
621 if (!BuildInvoke(instruction, dex_offset, method_idx, in AnalyzeDexInstruction()
629 Binop_23x<HAdd>(instruction, Primitive::kPrimInt); in AnalyzeDexInstruction()
634 Binop_23x<HAdd>(instruction, Primitive::kPrimLong); in AnalyzeDexInstruction()
639 Binop_23x<HSub>(instruction, Primitive::kPrimInt); in AnalyzeDexInstruction()
644 Binop_23x<HSub>(instruction, Primitive::kPrimLong); in AnalyzeDexInstruction()
649 Binop_12x<HAdd>(instruction, Primitive::kPrimInt); in AnalyzeDexInstruction()
654 Binop_12x<HAdd>(instruction, Primitive::kPrimLong); in AnalyzeDexInstruction()
659 Binop_12x<HSub>(instruction, Primitive::kPrimInt); in AnalyzeDexInstruction()
664 Binop_12x<HSub>(instruction, Primitive::kPrimLong); in AnalyzeDexInstruction()
669 Binop_22s<HAdd>(instruction, false); in AnalyzeDexInstruction()
674 Binop_22s<HSub>(instruction, true); in AnalyzeDexInstruction()
679 Binop_22b<HAdd>(instruction, false); in AnalyzeDexInstruction()
684 Binop_22b<HSub>(instruction, true); in AnalyzeDexInstruction()
690 new (arena_) HNewInstance(dex_offset, instruction.VRegB_21c())); in AnalyzeDexInstruction()
691 UpdateLocal(instruction.VRegA(), current_block_->GetLastInstruction()); in AnalyzeDexInstruction()
698 UpdateLocal(instruction.VRegA(), current_block_->GetLastInstruction()); in AnalyzeDexInstruction()
702 Binop_23x<HCompare>(instruction, Primitive::kPrimLong); in AnalyzeDexInstruction()
716 if (!BuildFieldAccess(instruction, dex_offset, false)) { in AnalyzeDexInstruction()
729 if (!BuildFieldAccess(instruction, dex_offset, true)) { in AnalyzeDexInstruction()
737 BuildArrayAccess(instruction, dex_offset, false, anticipated_type); \ in AnalyzeDexInstruction()
741 BuildArrayAccess(instruction, dex_offset, true, anticipated_type); \ in AnalyzeDexInstruction()
782 HIntConstant* instruction = new (arena_) HIntConstant(constant); in GetIntConstant() local
783 entry_block_->AddInstruction(instruction); in GetIntConstant()
784 return instruction; in GetIntConstant()
790 HLongConstant* instruction = new (arena_) HLongConstant(constant); in GetLongConstant() local
791 entry_block_->AddInstruction(instruction); in GetLongConstant()
792 return instruction; in GetLongConstant()
799 void HGraphBuilder::UpdateLocal(int register_index, HInstruction* instruction) const { in UpdateLocal()
801 current_block_->AddInstruction(new (arena_) HStoreLocal(local, instruction)); in UpdateLocal()