Lines Matching +full:lower +full:- +full:case
1 //===- MipsMCInstLower.cpp - Convert Mips MachineInstr to MCInst ----------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file contains code to lower Mips MachineInstrs to their corresponding
12 //===----------------------------------------------------------------------===//
45 case MipsII::MO_NO_FLAG:
47 case MipsII::MO_GPREL:
50 case MipsII::MO_GOT_CALL:
53 case MipsII::MO_GOT:
56 case MipsII::MO_ABS_HI:
59 case MipsII::MO_ABS_LO:
62 case MipsII::MO_TLSGD:
65 case MipsII::MO_TLSLDM:
68 case MipsII::MO_DTPREL_HI:
71 case MipsII::MO_DTPREL_LO:
74 case MipsII::MO_GOTTPREL:
77 case MipsII::MO_TPREL_HI:
80 case MipsII::MO_TPREL_LO:
83 case MipsII::MO_GPOFF_HI:
87 case MipsII::MO_GPOFF_LO:
91 case MipsII::MO_GOT_DISP:
94 case MipsII::MO_GOT_HI16:
97 case MipsII::MO_GOT_LO16:
100 case MipsII::MO_GOT_PAGE:
103 case MipsII::MO_GOT_OFST:
106 case MipsII::MO_HIGHER:
109 case MipsII::MO_HIGHEST:
112 case MipsII::MO_CALL_HI16:
115 case MipsII::MO_CALL_LO16:
118 case MipsII::MO_JALR:
123 case MachineOperand::MO_MachineBasicBlock:
124 Symbol = MO.getMBB()->getSymbol();
127 case MachineOperand::MO_GlobalAddress:
132 case MachineOperand::MO_BlockAddress:
137 case MachineOperand::MO_ExternalSymbol:
142 case MachineOperand::MO_MCSymbol:
147 case MachineOperand::MO_JumpTableIndex:
151 case MachineOperand::MO_ConstantPoolIndex:
182 case MachineOperand::MO_Register:
186 case MachineOperand::MO_Immediate:
188 case MachineOperand::MO_MachineBasicBlock:
189 case MachineOperand::MO_GlobalAddress:
190 case MachineOperand::MO_ExternalSymbol:
191 case MachineOperand::MO_MCSymbol:
192 case MachineOperand::MO_JumpTableIndex:
193 case MachineOperand::MO_ConstantPoolIndex:
194 case MachineOperand::MO_BlockAddress:
196 case MachineOperand::MO_RegisterMask:
206 const MCSymbolRefExpr *Sym1 = MCSymbolRefExpr::create(BB1->getSymbol(), *Ctx);
207 const MCSymbolRefExpr *Sym2 = MCSymbolRefExpr::create(BB2->getSymbol(), *Ctx);
217 // Lower register operand.
218 OutMI.addOperand(LowerOperand(MI->getOperand(0)));
221 unsigned TargetFlags = MI->getOperand(1).getTargetFlags();
223 case MipsII::MO_HIGHEST:
226 case MipsII::MO_HIGHER:
229 case MipsII::MO_ABS_HI:
232 case MipsII::MO_ABS_LO:
239 if (MI->getNumOperands() == 2) {
241 MCSymbolRefExpr::create(MI->getOperand(1).getMBB()->getSymbol(), *Ctx);
244 } else if (MI->getNumOperands() == 3) {
245 // Create %hi($tgt-$baltgt).
246 OutMI.addOperand(createSub(MI->getOperand(1).getMBB(),
247 MI->getOperand(2).getMBB(), Kind));
256 unsigned TargetFlags = MI->getOperand(2).getTargetFlags();
258 case MipsII::MO_HIGHEST:
261 case MipsII::MO_HIGHER:
264 case MipsII::MO_ABS_HI:
267 case MipsII::MO_ABS_LO:
274 // Lower two register operands.
276 const MachineOperand &MO = MI->getOperand(I);
280 if (MI->getNumOperands() == 3) {
281 // Lower register operand.
283 MCSymbolRefExpr::create(MI->getOperand(2).getMBB()->getSymbol(), *Ctx);
286 } else if (MI->getNumOperands() == 4) {
287 // Create %lo($tgt-$baltgt) or %hi($tgt-$baltgt).
288 OutMI.addOperand(createSub(MI->getOperand(2).getMBB(),
289 MI->getOperand(3).getMBB(), Kind));
295 switch (MI->getOpcode()) {
298 case Mips::LONG_BRANCH_LUi:
299 case Mips::LONG_BRANCH_LUi2Op:
300 case Mips::LONG_BRANCH_LUi2Op_64:
303 case Mips::LONG_BRANCH_ADDiu:
304 case Mips::LONG_BRANCH_ADDiu2Op:
307 case Mips::LONG_BRANCH_DADDiu:
308 case Mips::LONG_BRANCH_DADDiu2Op:
314 void MipsMCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
318 OutMI.setOpcode(MI->getOpcode());
320 for (const MachineOperand &MO : MI->operands()) {