Home | History | Annotate | Download | only in src

Lines Matching refs:Func

120 void InstARM32::startNextInst(const Cfg *Func) const {
121 if (auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>())
125 void InstARM32::emitUsingTextFixup(const Cfg *Func) const {
128 GlobalContext *Ctx = Func->getContext();
129 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
145 emit(Func);
160 void InstARM32::emitIAS(const Cfg *Func) const { emitUsingTextFixup(Func); }
163 const InstARM32Pred *Instr, const Cfg *Func,
165 Ostream &Str = Func->getContext()->getStrEmit();
172 Instr->getDest()->emit(Func);
174 Instr->getSrc(0)->emit(Func);
178 const InstARM32Pred *Instr, const Cfg *Func) {
179 Ostream &Str = Func->getContext()->getStrEmit();
195 Instr->getDest()->emit(Func);
197 Instr->getSrc(0)->emit(Func);
201 const Cfg *Func) {
204 Ostream &Str = Func->getContext()->getStrEmit();
209 Dest->emit(Func);
211 Instr->getSrc(1)->emit(Func);
215 const InstARM32Pred *Instr, const Cfg *Func,
219 Ostream &Str = Func->getContext()->getStrEmit();
223 Instr->getDest()->emit(Func);
225 Instr->getSrc(0)->emit(Func);
227 Instr->getSrc(1)->emit(Func);
231 const InstARM32 *Instr, const Cfg *Func,
235 Ostream &Str = Func->getContext()->getStrEmit();
238 Instr->getDest()->emit(Func);
240 Instr->getSrc(0)->emit(Func);
242 Instr->getSrc(1)->emit(Func);
246 const InstARM32 *Instr, const Cfg *Func) {
249 Ostream &Str = Func->getContext()->getStrEmit();
254 Instr->getDest()->emit(Func);
256 Instr->getSrc(1)->emit(Func);
258 Instr->getSrc(2)->emit(Func);
262 const Cfg *Func) {
265 Ostream &Str = Func->getContext()->getStrEmit();
268 Instr->getDest()->emit(Func);
270 Instr->getSrc(0)->emit(Func);
272 Instr->getSrc(1)->emit(Func);
274 Instr->getSrc(2)->emit(Func);
278 void InstARM32FourAddrGPR<K>::emitIAS(const Cfg *Func) const {
279 emitUsingTextFixup(Func);
283 void InstARM32FourAddrFP<K>::emitIAS(const Cfg *Func) const {
284 emitUsingTextFixup(Func);
288 void InstARM32ThreeAddrFP<K>::emitIAS(const Cfg *Func) const {
289 emitUsingTextFixup(Func);
293 void InstARM32ThreeAddrSignAwareFP<K>::emitIAS(const Cfg *Func) const {
294 InstARM32::emitUsingTextFixup(Func);
297 template <> void InstARM32Mla::emitIAS(const Cfg *Func) const {
299 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
302 emitUsingTextFixup(Func);
305 template <> void InstARM32Mls::emitIAS(const Cfg *Func) const {
307 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
310 emitUsingTextFixup(Func);
314 const Cfg *Func) {
317 Ostream &Str = Func->getContext()->getStrEmit();
320 Instr->getSrc(0)->emit(Func);
322 Instr->getSrc(1)->emit(Func);
325 OperandARM32Mem::OperandARM32Mem(Cfg * /* Func */, Type Ty, Variable *Base,
335 OperandARM32Mem::OperandARM32Mem(Cfg *Func, Type Ty, Variable *Base,
344 Vars = Func->allocateArrayOf<Variable *>(2);
366 OperandARM32FlexImm::OperandARM32FlexImm(Cfg * /* Func */, Type Ty,
393 OperandARM32FlexFpImm::OperandARM32FlexFpImm(Cfg * /*Func*/, Type Ty,
472 OperandARM32FlexFpZero::OperandARM32FlexFpZero(Cfg * /*Func*/, Type Ty)
475 OperandARM32FlexReg::OperandARM32FlexReg(Cfg *Func, Type Ty, Variable *Reg,
483 Vars = Func->allocateArrayOf<Variable *>(NumVars);
489 InstARM32Br::InstARM32Br(Cfg *Func, const CfgNode *TargetTrue,
492 : InstARM32Pred(Func, InstARM32::Br, 0, nullptr, Pred),
546 void InstARM32ThreeAddrGPR<K>::emitIAS(const Cfg *Func) const {
547 emitUsingTextFixup(Func);
550 template <> void InstARM32Adc::emitIAS(const Cfg *Func) const {
551 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
554 emitUsingTextFixup(Func);
557 template <> void InstARM32Add::emitIAS(const Cfg *Func) const {
558 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
563 template <> void InstARM32And::emitIAS(const Cfg *Func) const {
564 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
567 emitUsingTextFixup(Func);
570 template <> void InstARM32Bic::emitIAS(const Cfg *Func) const {
571 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
574 emitUsingTextFixup(Func);
577 template <> void InstARM32Eor::emitIAS(const Cfg *Func) const {
578 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
581 emitUsingTextFixup(Func);
584 template <> void InstARM32Asr::emitIAS(const Cfg *Func) const {
585 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
588 emitUsingTextFixup(Func);
591 template <> void InstARM32Lsl::emitIAS(const Cfg *Func) const {
592 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
595 emitUsingTextFixup(Func);
598 template <> void InstARM32Lsr::emitIAS(const Cfg *Func) const {
599 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
602 emitUsingTextFixup(Func);
605 template <> void InstARM32Orr::emitIAS(const Cfg *Func) const {
606 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
609 emitUsingTextFixup(Func);
612 template <> void InstARM32Mul::emitIAS(const Cfg *Func) const {
613 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
616 emitUsingTextFixup(Func);
619 template <> void InstARM32Rsb::emitIAS(const Cfg *Func) const {
620 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
623 emitUsingTextFixup(Func);
626 template <> void InstARM32Rsc::emitIAS(const Cfg *Func) const {
627 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
630 emitUsingTextFixup(Func);
633 template <> void InstARM32Sbc::emitIAS(const Cfg *Func) const {
634 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
637 emitUsingTextFixup(Func);
640 template <> void InstARM32Sdiv::emitIAS(const Cfg *Func) const {
642 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
645 emitUsingTextFixup(Func);
648 template <> void InstARM32Sub::emitIAS(const Cfg *Func) const {
649 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
652 emitUsingTextFixup(Func);
655 template <> void InstARM32Udiv::emitIAS(const Cfg *Func) const {
657 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
660 emitUsingTextFixup(Func);
663 template <> void InstARM32Vadd::emitIAS(const Cfg *Func) const {
664 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
689 template <> void InstARM32Vand::emitIAS(const Cfg *Func) const {
690 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
707 template <> void InstARM32Vceq::emitIAS(const Cfg *Func) const {
708 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
730 template <> void InstARM32Vcge::emitIAS(const Cfg *Func) const {
731 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
763 template <> void InstARM32Vcgt::emitIAS(const Cfg *Func) const {
764 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
796 template <> void InstARM32Vbsl::emitIAS(const Cfg *Func) const {
797 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
814 template <> void InstARM32Vdiv::emitIAS(const Cfg *Func) const {
815 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
832 template <> void InstARM32Veor::emitIAS(const Cfg *Func) const {
833 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
845 template <> void InstARM32Vmla::emitIAS(const Cfg *Func) const {
848 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
853 emitUsingTextFixup(Func);
866 template <> void InstARM32Vmls::emitIAS(const Cfg *Func) const {
869 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
874 emitUsingTextFixup(Func);
887 template <> void InstARM32Vmvn::emitIAS(const Cfg *Func) const {
888 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
906 template <> void InstARM32Vneg::emitIAS(const Cfg *Func) const {
907 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
927 template <> void InstARM32Vorr::emitIAS(const Cfg *Func) const {
928 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
945 template <> void InstARM32Vshl::emitIAS(const Cfg *Func) const {
946 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
984 template <> void InstARM32Vshr::emitIAS(const Cfg *Func) const {
985 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1016 template <> void InstARM32Vsub::emitIAS(const Cfg *Func) const {
1017 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1042 template <> void InstARM32Vmul::emitIAS(const Cfg *Func) const {
1043 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1068 InstARM32Call::InstARM32Call(Cfg *Func, Variable *Dest, Operand *CallTarget)
1069 : InstARM32(Func, InstARM32::Call, 1, Dest) {
1074 InstARM32Label::InstARM32Label(Cfg *Func, TargetARM32 *Target)
1075 : InstARM32(Func, InstARM32::Label, 0, nullptr),
1079 Func->getContext(),
1080 ".L" + Func->getFunctionName() + "$local$__" + std::to_string(Number));
1082 Name = GlobalString::createWithoutString(Func->getContext());
1108 void InstARM32RegisterStackOp::emit(const Cfg *Func) const {
1111 emitUsingForm(Func, Emit_Text);
1114 void InstARM32RegisterStackOp::emitIAS(const Cfg *Func) const {
1115 emitUsingForm(Func, Emit_Binary);
1116 assert(!Func->getAssembler<ARM32::AssemblerARM32>()->needsTextFixup());
1119 void InstARM32RegisterStackOp::dump(const Cfg *Func) const {
1122 Ostream &Str = Func->getContext()->getStrDump();
1128 getStackReg(I)->dump(Func);
1132 void InstARM32RegisterStackOp::emitGPRsAsText(const Cfg *Func) const {
1135 Ostream &Str = Func->getContext()->getStrEmit();
1137 getStackReg(0)->emit(Func);
1141 getStackReg(i)->emit(Func);
1146 void InstARM32RegisterStackOp::emitSRegsAsText(const Cfg *Func,
1151 Ostream &Str = Func->getContext()->getStrEmit();
1165 void InstARM32RegisterStackOp::emitSRegsOp(const Cfg *Func, EmitForm Form,
1170 startNextInst(Func);
1171 Func->getContext()->getStrEmit() << "\n";
1173 emitSRegs(Func, Form, BaseReg, RegCount);
1187 void InstARM32RegisterStackOp::emitUsingForm(const Cfg *Func,
1208 emitSingleGPR(Func, Form, LastDest);
1210 emitMultipleGPRs(Func, Form, GPRegisters);
1245 emitSRegsOp(Func, Form, Pair.first, Pair.second, InstCount++);
1250 emitSRegsOp(Func, Form, Pair.first, Pair.second, InstCount++);
1253 InstARM32Pop::InstARM32Pop(Cfg *Func, const VarList &Dests)
1254 : InstARM32RegisterStackOp(Func, InstARM32::Pop, 0, nullptr), Dests(Dests) {
1262 InstARM32Push::InstARM32Push(Cfg *Func, const VarList &Srcs)
1263 : InstARM32RegisterStackOp(Func, InstARM32::Push, Srcs.size(), nullptr) {
1270 InstARM32Ret::InstARM32Ret(Cfg *Func, Variable *LR, Variable *Source)
1271 : InstARM32(Func, InstARM32::Ret, Source ? 2 : 1, nullptr) {
1277 InstARM32Str::InstARM32Str(Cfg *Func, Variable *Value, OperandARM32Mem *Mem,
1279 : InstARM32Pred(Func, InstARM32::Str, 2, nullptr, Predicate) {
1284 InstARM32Strex::InstARM32Strex(Cfg *Func, Variable *Dest, Variable *Value,
1286 : InstARM32Pred(Func, InstARM32::Strex, 2, Dest, Predicate) {
1291 InstARM32Trap::InstARM32Trap(Cfg *Func)
1292 : InstARM32(Func, InstARM32::Trap, 0, nullptr) {}
1294 InstARM32Umull::InstARM32Umull(Cfg *Func, Variable *DestLo, Variable *DestHi,
1297 : InstARM32Pred(Func, InstARM32::Umull, 2, DestLo, Predicate),
1304 InstARM32Vcvt::InstARM32Vcvt(Cfg *Func, Variable *Dest, Variable *Src,
1306 : InstARM32Pred(Func, InstARM32::Vcvt, 1, Dest, Predicate),
1311 InstARM32Mov::InstARM32Mov(Cfg *Func, Variable *Dest, Operand *Src,
1313 : InstARM32Pred(Func, InstARM32::Mov, 2, Dest, Predicate) {
1413 void InstARM32Extract::emit(const Cfg *Func) const {
1414 Ostream &Str = Func->getContext()->getStrEmit();
1429 getDest()->emit(Func);
1445 getDest()->emit(Func);
1452 void InstARM32Extract::emitIAS(const Cfg *Func) const {
1459 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1486 void InstARM32Insert::emit(const Cfg *Func) const {
1487 Ostream &Str = Func->getContext()->getStrEmit();
1505 Src->emit(Func);
1512 Src->emit(Func);
1518 void InstARM32Insert::emitIAS(const Cfg *Func) const {
1525 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1527 Asm->vmovqir(Dest->asType(Func, DestTy, Dest->getRegNum()),
1529 Src->asType(Func, SrcTy, Src->getRegNum()), getPredicate());
1539 void InstARM32CmpLike<K>::emitIAS(const Cfg *Func) const {
1540 emitUsingTextFixup(Func);
1543 template <> void InstARM32Cmn::emitIAS(const Cfg *Func) const {
1545 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1548 emitUsingTextFixup(Func);
1551 template <> void InstARM32Cmp::emitIAS(const Cfg *Func) const {
1553 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1556 emitUsingTextFixup(Func);
1559 template <> void InstARM32Tst::emitIAS(const Cfg *Func) const {
1561 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1564 emitUsingTextFixup(Func);
1567 InstARM32Dmb::InstARM32Dmb(Cfg *Func)
1568 : InstARM32Pred(Func, InstARM32::Dmb, 0, nullptr, CondARM32::AL) {}
1570 InstARM32Nop::InstARM32Nop(Cfg *Func)
1571 : InstARM32Pred(Func, InstARM32::Nop, 0, nullptr, CondARM32::AL) {}
1573 InstARM32Vcmp::InstARM32Vcmp(Cfg *Func, Variable *Src0, Operand *Src1,
1575 : InstARM32Pred(Func, InstARM32::Vcmp, 2, nullptr, Predicate) {
1581 InstARM32Vmrs::InstARM32Vmrs(Cfg *Func, CondARM32::Cond Predicate)
1582 : InstARM32Pred(Func, InstARM32::Vmrs, 0, nullptr, Predicate) {
1586 InstARM32Vabs::InstARM32Vabs(Cfg *Func, Variable *Dest, Variable *Src,
1588 : InstARM32Pred(Func, InstARM32::Vabs, 1, Dest, Predicate) {
1652 void InstARM32::dump(const Cfg *Func) const {
1655 Ostream &Str = Func->getContext()->getStrDump();
1657 Inst::dump(Func);
1660 void InstARM32Mov::emitMultiDestSingleSource(const Cfg *Func) const {
1663 Ostream &Str = Func->getContext()->getStrEmit();
1674 DestLo->emit(Func);
1676 DestHi->emit(Func);
1678 Src->emit(Func);
1681 void InstARM32Mov::emitSingleDestMultiSource(const Cfg *Func) const {
1684 Ostream &Str = Func->getContext()->getStrEmit();
1696 Dest->emit(Func);
1698 SrcLo->emit(Func);
1700 SrcHi->emit(Func);
1724 void InstARM32Mov::emitSingleDestSingleSource(const Cfg *Func) const {
1727 Ostream &Str = Func->getContext()->getStrEmit();
1760 Dest->emit(Func);
1762 Src0->emit(Func);
1765 void InstARM32Mov::emit(const Cfg *Func) const {
1770 emitMultiDestSingleSource(Func);
1775 emitSingleDestMultiSource(Func);
1779 emitSingleDestSingleSource(Func);
1782 void InstARM32Mov::emitIAS(const Cfg *Func) const {
1783 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1904 void InstARM32Mov::dump(const Cfg *Func) const {
1908 Ostream &Str = Func->getContext()->getStrDump();
1911 Dest->dump(Func);
1914 DestHi->dump(Func);
1920 dumpSources(Func);
1923 void InstARM32Br::emit(const Cfg *Func) const {
1926 Ostream &Str = Func->getContext()->getStrEmit();
1937 startNextInst(Func);
1946 void InstARM32Br::emitIAS(const Cfg *Func) const {
1947 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
1960 emitUsingTextFixup(Func);
1963 void InstARM32Br::dump(const Cfg *Func) const {
1966 Ostream &Str = Func->getContext()->getStrDump();
1988 void InstARM32Call::emit(const Cfg *Func) const {
1991 Ostream &Str = Func->getContext()->getStrEmit();
2004 CallTarget->emitWithoutPrefix(Func->getTarget());
2009 getCallTarget()->emit(Func);
2013 void InstARM32Call::emitIAS(const Cfg *Func) const {
2015 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2029 return emitUsingTextFixup(Func);
2032 void InstARM32Call::dump(const Cfg *Func) const {
2035 Ostream &Str = Func->getContext()->getStrDump();
2037 dumpDest(Func);
2041 getCallTarget()->dump(Func);
2044 Func) const {
2049 if (auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>())
2051 Ostream &Str = Func->getContext()->getStrEmit();
2055 void InstARM32Label::emitIAS(const Cfg *Func) const {
2056 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2062 emitUsingTextFixup(Func);
2065 void InstARM32Label::dump(const Cfg *Func) const {
2068 Ostream &Str = Func->getContext()->getStrDump();
2073 void InstARM32LoadBase<K>::emitIAS(const Cfg *Func) const {
2074 emitUsingTextFixup(Func);
2077 template <> void InstARM32Ldr::emit(const Cfg *Func) const {
2080 Ostream &Str = Func->getContext()->getStrEmit();
2100 getDest()->emit(Func);
2102 getSrc(0)->emit(Func);
2105 template <> void InstARM32Ldr::emitIAS(const Cfg *Func) const {
2107 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2118 Asm->ldr(Dest, getSrc(0), getPredicate(), Func->getTarget());
2121 Asm->vldrs(Dest, getSrc(0), getPredicate(), Func->getTarget());
2124 Asm->vldrd(Dest, getSrc(0), getPredicate(), Func->getTarget());
2133 Asm->vld1qr(getVecElmtBitsize(DestTy), Dest, getSrc(0), Func->getTarget());
2138 template <> void InstARM32Ldrex::emit(const Cfg *Func) const {
2141 Ostream &Str = Func->getContext()->getStrEmit();
2149 getDest()->emit(Func);
2151 getSrc(0)->emit(Func);
2154 template <> void InstARM32Ldrex::emitIAS(const Cfg *Func) const {
2159 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2160 Asm->ldrex(Dest, getSrc(0), getPredicate(), Func->getTarget());
2162 emitUsingTextFixup(Func);
2166 void InstARM32TwoAddrGPR<K>::emitIAS(const Cfg *Func) const {
2167 emitUsingTextFixup(Func);
2171 void InstARM32UnaryopGPR<K, Nws>::emitIAS(const Cfg *Func) const {
2172 emitUsingTextFixup(Func);
2175 template <> void InstARM32Rbit::emitIAS(const Cfg *Func) const {
2177 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2180 emitUsingTextFixup(Func);
2183 template <> void InstARM32Rev::emitIAS(const Cfg *Func) const {
2185 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2188 emitUsingTextFixup(Func);
2191 template <> void InstARM32Movw::emit(const Cfg *Func) const {
2194 Ostream &Str = Func->getContext()->getStrEmit();
2197 getDest()->emit(Func);
2202 CR->emitWithoutPrefix(Func->getTarget());
2207 Src0->emit(Func);
2211 template <> void InstARM32Movw::emitIAS(const Cfg *Func) const {
2213 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2216 emitUsingTextFixup(Func);
2219 template <> void InstARM32Movt::emit(const Cfg *Func) const {
2222 Ostream &Str = Func->getContext()->getStrEmit();
2227 Dest->emit(Func);
2231 CR->emitWithoutPrefix(Func->getTarget());
2236 Src1->emit(Func);
2240 template <> void InstARM32Movt::emitIAS(const Cfg *Func) const {
2242 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2245 emitUsingTextFixup(Func);
2248 template <> void InstARM32Clz::emitIAS(const Cfg *Func) const {
2250 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2253 emitUsingTextFixup(Func);
2256 template <> void InstARM32Mvn::emitIAS(const Cfg *Func) const {
2258 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2261 emitUsingTextFixup(Func);
2264 template <> void InstARM32Sxt::emitIAS(const Cfg *Func) const {
2266 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2269 emitUsingTextFixup(Func);
2272 template <> void InstARM32Uxt::emitIAS(const Cfg *Func) const {
2274 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2277 emitUsingTextFixup(Func);
2281 void InstARM32UnaryopFP<K>::emitIAS(const Cfg *Func) const {
2282 emitUsingTextFixup(Func);
2286 void InstARM32UnaryopSignAwareFP<K>::emitIAS(const Cfg *Func) const {
2287 InstARM32::emitUsingTextFixup(Func);
2290 template <> void InstARM32Vsqrt::emitIAS(const Cfg *Func) const {
2292 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2305 emitUsingTextFixup(Func);
2316 void InstARM32Pop::emitSingleGPR(const Cfg *Func, const EmitForm Form,
2320 emitGPRsAsText(Func);
2323 Func->getAssembler<ARM32::AssemblerARM32>()->pop(Reg, CondARM32::AL);
2328 void InstARM32Pop::emitMultipleGPRs(const Cfg *Func, const EmitForm Form,
2332 emitGPRsAsText(Func);
2335 Func->getAssembler<ARM32::AssemblerARM32>()->popList(Registers,
2341 void InstARM32Pop::emitSRegs(const Cfg *Func, const EmitForm Form,
2345 emitSRegsAsText(Func, BaseReg, RegCount);
2348 Func->getAssembler<ARM32::AssemblerARM32>()->vpop(BaseReg, RegCount,
2364 void InstARM32Push::emitSingleGPR(const Cfg *Func, const EmitForm Form,
2368 emitGPRsAsText(Func);
2371 Func->getAssembler<ARM32::AssemblerARM32>()->push(Reg, CondARM32::AL);
2376 void InstARM32Push::emitMultipleGPRs(const Cfg *Func, const EmitForm Form,
2380 emitGPRsAsText(Func);
2383 Func->getAssembler<ARM32::AssemblerARM32>()->pushList(Registers,
2389 void InstARM32Push::emitSRegs(const Cfg *Func, const EmitForm Form,
2393 emitSRegsAsText(Func, BaseReg, RegCount);
2396 Func->getAssembler<ARM32::AssemblerARM32>()->vpush(BaseReg, RegCount,
2402 void InstARM32Ret::emit(const Cfg *Func) const {
2409 Ostream &Str = Func->getContext()->getStrEmit();
2413 LR->emit(Func);
2416 void InstARM32Ret::emitIAS(const Cfg *Func) const {
2417 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2420 emitUsingTextFixup(Func);
2423 void InstARM32Ret::dump(const Cfg *Func) const {
2426 Ostream &Str = Func->getContext()->getStrDump();
2429 dumpSources(Func);
2432 void InstARM32Str::emit(const Cfg *Func) const {
2435 Ostream &Str = Func->getContext()->getStrEmit();
2452 getSrc(0)->emit(Func);
2454 getSrc(1)->emit(Func);
2457 void InstARM32Str::emitIAS(const Cfg *Func) const {
2459 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2471 Asm->str(Src0, Src1, getPredicate(), Func->getTarget());
2474 Asm->vstrs(Src0, Src1, getPredicate(), Func->getTarget());
2477 Asm->vstrd(Src0, Src1, getPredicate(), Func->getTarget());
2486 Asm->vst1qr(getVecElmtBitsize(Ty), Src0, Src1, Func->getTarget());
2491 void InstARM32Str::dump(const Cfg *Func) const {
2494 Ostream &Str = Func->getContext()->getStrDump();
2498 getSrc(1)->dump(Func);
2500 getSrc(0)->dump(Func);
2503 void InstARM32Strex::emit(const Cfg *Func) const {
2510 Ostream &Str = Func->getContext()->getStrEmit();
2514 Dest->emit(Func);
2516 emitSources(Func);
2519 void InstARM32Strex::emitIAS(const Cfg *Func) const {
2523 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2524 Asm->strex(Dest, Src0, getSrc(1), getPredicate(), Func->getTarget());
2526 emitUsingTextFixup(Func);
2529 void InstARM32Strex::dump(const Cfg *Func) const {
2532 Ostream &Str = Func->getContext()->getStrDump();
2534 Dest->dump(Func);
2539 getSrc(1)->dump(Func);
2541 getSrc(0)->dump(Func);
2544 void InstARM32Trap::emit(const Cfg *Func) const {
2547 Ostream &Str = Func->getContext()->getStrEmit();
2552 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2558 void InstARM32Trap::emitIAS(const Cfg *Func) const {
2559 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2564 void InstARM32Trap::dump(const Cfg *Func) const {
2567 Ostream &Str = Func->getContext()->getStrDump();
2571 void InstARM32Umull::emit(const Cfg *Func) const {
2574 Ostream &Str = Func->getContext()->getStrEmit();
2579 getDest()->emit(Func);
2581 DestHi->emit(Func);
2583 getSrc(0)->emit(Func);
2585 getSrc(1)->emit(Func);
2588 void InstARM32Umull::emitIAS(const Cfg *Func) const {
2590 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2593 emitUsingTextFixup(Func);
2596 void InstARM32Umull::dump(const Cfg *Func) const {
2599 Func->getContext()->getStrDump();
2600 dumpDest(Func);
2604 dumpSources(Func);
2643 void InstARM32Vcvt::emit(const Cfg *Func) const {
2646 Ostream &Str = Func->getContext()->getStrEmit();
2651 getDest()->emit(Func);
2653 getSrc(0)->emit(Func);
2656 void InstARM32Vcvt::emitIAS(const Cfg *Func) const {
2657 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2705 void InstARM32Vcvt::dump(const Cfg *Func) const {
2708 Ostream &Str = Func->getContext()->getStrDump();
2709 dumpDest(Func);
2712 dumpSources(Func);
2715 void InstARM32Vcmp::emit(const Cfg *Func) const {
2718 Ostream &Str = Func->getContext()->getStrEmit();
2723 getSrc(0)->emit(Func);
2725 getSrc(1)->emit(Func);
2728 void InstARM32Vcmp::emitIAS(const Cfg *Func) const {
2734 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2761 void InstARM32Vcmp::dump(const Cfg *Func) const {
2764 Ostream &Str = Func->getContext()->getStrDump();
2766 dumpSources(Func);
2769 void InstARM32Vmrs::emit(const Cfg *Func) const {
2772 Ostream &Str = Func->getContext()->getStrEmit();
2781 void InstARM32Vmrs::emitIAS(const Cfg *Func) const {
2782 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2787 void InstARM32Vmrs::dump(const Cfg *Func) const {
2790 Ostream &Str = Func->getContext()->getStrDump();
2795 void InstARM32Vabs::emit(const Cfg *Func) const {
2798 Ostream &Str = Func->getContext()->getStrEmit();
2803 getDest()->emit(Func);
2805 getSrc(0)->emit(Func);
2808 void InstARM32Vabs::emitIAS(const Cfg *Func) const {
2810 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2830 void InstARM32Vabs::dump(const Cfg *Func) const {
2833 Ostream &Str = Func->getContext()->getStrDump();
2834 dumpDest(Func);
2838 void InstARM32Dmb::emit(const Cfg *Func) const {
2841 Ostream &Str = Func->getContext()->getStrEmit();
2849 void InstARM32Dmb::emitIAS(const Cfg *Func) const {
2851 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
2855 emitUsingTextFixup(Func);
2858 void InstARM32Dmb::dump(const Cfg *Func) const {
2861 Func->getContext()->getStrDump() << "dmb\t"
2865 void InstARM32Nop::emit(const Cfg *Func) const {
2869 Func->getContext()->getStrEmit() << "\t"
2873 void InstARM32Nop::emitIAS(const Cfg *Func) const {
2875 Func->getAssembler<ARM32::AssemblerARM32>()->nop();
2878 void InstARM32Nop::dump(const Cfg *Func) const {
2882 Func->getContext()->getStrDump() << "nop";
2885 void OperandARM32Mem::emit(const Cfg *Func) const {
2888 Ostream &Str = Func->getContext()->getStrEmit();
2890 getBase()->emit(Func);
2904 getIndex()->emit(Func);
2913 Offset->emit(Func);
2932 void OperandARM32Mem::dump(const Cfg *Func, Ostream &Str) const {
2936 if (Func)
2937 getBase()->dump(Func);
2945 if (Func)
2946 getIndex()->dump(Func);
2954 getOffset()->dump(Func, Str);
2959 void OperandARM32ShAmtImm::emit(const Cfg *Func) const { ShAmt->emit(Func); }
2965 OperandARM32FlexImm *OperandARM32FlexImm::create(Cfg *Func, Type Ty,
2976 return new (Func->allocate<OperandARM32FlexImm>())
2977 OperandARM32FlexImm(Func, Ty, Imm, RotateAmt);
2980 void OperandARM32FlexImm::emit(const Cfg *Func) const {
2983 Ostream &Str = Func->getContext()->getStrEmit();
2989 void OperandARM32FlexImm::dump(const Cfg * /* Func */, Ostream &Str) const {
3017 void OperandARM32FlexFpImm::emit(const Cfg *Func) const {
3020 Ostream &Str = Func->getContext()->getStrEmit();
3032 void OperandARM32FlexFpImm::dump(const Cfg * /*Func*/, Ostream &Str) const {
3038 void OperandARM32FlexFpZero::emit(const Cfg *Func) const {
3041 Ostream &Str = Func->getContext()->getStrEmit();
3051 void OperandARM32FlexFpZero::dump(const Cfg * /*Func*/, Ostream &Str) const {
3057 void OperandARM32FlexReg::emit(const Cfg *Func) const {
3060 Ostream &Str = Func->getContext()->getStrEmit();
3061 getReg()->emit(Func);
3064 getShiftAmt()->emit(Func);
3068 void OperandARM32FlexReg::dump(const Cfg *Func, Ostream &Str) const {
3072 if (Func)
3073 Reg->dump(Func);
3078 if (Func)
3079 getShiftAmt()->dump(Func);