mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-02 07:32:52 +00:00
fbe7448e5d
target cannot be determined accurately. This is the case for NaCl where the sandboxing instructions are added in MC layer, after the MipsLongBranch pass. It is also the case when the code has inline assembly. Instead of calculating offset in the MipsLongBranch pass, use %hi(sym1 - sym2) and %lo(sym1 - sym2) expressions that are resolved during the fixup. This patch also deletes microMIPS test file test/CodeGen/Mips/micromips-long-branch.ll and implements microMIPS CHECKs in a much simpler way in a file test/CodeGen/Mips/longbranch.ll, together with MIPS32 and MIPS64. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207656 91177308-0d34-0410-b5e6-96231b3b80d8
52 lines
1.8 KiB
C++
52 lines
1.8 KiB
C++
//===-- MipsMCInstLower.h - Lower MachineInstr to MCInst -------*- C++ -*--===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef MIPSMCINSTLOWER_H
|
|
#define MIPSMCINSTLOWER_H
|
|
#include "MCTargetDesc/MipsMCExpr.h"
|
|
#include "llvm/ADT/SmallVector.h"
|
|
#include "llvm/CodeGen/MachineOperand.h"
|
|
#include "llvm/Support/Compiler.h"
|
|
|
|
namespace llvm {
|
|
class MCContext;
|
|
class MCInst;
|
|
class MCOperand;
|
|
class MachineInstr;
|
|
class MachineFunction;
|
|
class MipsAsmPrinter;
|
|
|
|
/// MipsMCInstLower - This class is used to lower an MachineInstr into an
|
|
// MCInst.
|
|
class LLVM_LIBRARY_VISIBILITY MipsMCInstLower {
|
|
typedef MachineOperand::MachineOperandType MachineOperandType;
|
|
MCContext *Ctx;
|
|
MipsAsmPrinter &AsmPrinter;
|
|
public:
|
|
MipsMCInstLower(MipsAsmPrinter &asmprinter);
|
|
void Initialize(MCContext *C);
|
|
void Lower(const MachineInstr *MI, MCInst &OutMI) const;
|
|
MCOperand LowerOperand(const MachineOperand& MO, unsigned offset = 0) const;
|
|
|
|
private:
|
|
MCOperand LowerSymbolOperand(const MachineOperand &MO,
|
|
MachineOperandType MOTy, unsigned Offset) const;
|
|
MCOperand createSub(MachineBasicBlock *BB1, MachineBasicBlock *BB2,
|
|
MCSymbolRefExpr::VariantKind Kind) const;
|
|
void lowerLongBranchLUi(const MachineInstr *MI, MCInst &OutMI,
|
|
int Opcode, MCSymbolRefExpr::VariantKind Kind) const;
|
|
void lowerLongBranchADDiu(const MachineInstr *MI, MCInst &OutMI,
|
|
int Opcode,
|
|
MCSymbolRefExpr::VariantKind Kind) const;
|
|
bool lowerLongBranch(const MachineInstr *MI, MCInst &OutMI) const;
|
|
};
|
|
}
|
|
|
|
#endif
|