Skip to content

Commit

Permalink
[mips][mt][1/7] Add the MT ASE as a subtarget feature.
Browse files Browse the repository at this point in the history
Preparatory work for adding the MIPS MT (multi-threading) ASE instructions.

Reviewers: slthakur, atanasyan

Differential Revision: https://reviews.llvm.org/D35247


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307679 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Simon Dardis committed Jul 11, 2017
1 parent 2e2081e commit ad68aab
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 1 deletion.
3 changes: 3 additions & 0 deletions lib/Target/Mips/AsmParser/MipsAsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -628,6 +628,9 @@ class MipsAsmParser : public MCTargetAsmParser {
bool useSoftFloat() const {
return getSTI().getFeatureBits()[Mips::FeatureSoftFloat];
}
bool hasMT() const {
return getSTI().getFeatureBits()[Mips::FeatureMT];
}

/// Warn if RegIndex is the same as the current AT.
void warnIfRegIndexIsAT(unsigned RegIndex, SMLoc Loc);
Expand Down
2 changes: 2 additions & 0 deletions lib/Target/Mips/MCTargetDesc/MipsABIFlagsSection.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ struct MipsABIFlagsSection {
ASESet |= Mips::AFL_ASE_MICROMIPS;
if (P.inMips16Mode())
ASESet |= Mips::AFL_ASE_MIPS16;
if (P.hasMT())
ASESet |= Mips::AFL_ASE_MT;
}

template <class PredicateLibrary>
Expand Down
2 changes: 2 additions & 0 deletions lib/Target/Mips/Mips.td
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ def FeatureUseTCCInDIV : SubtargetFeature<
def FeatureMadd4 : SubtargetFeature<"nomadd4", "DisableMadd4", "true",
"Disable 4-operand madd.fmt and related instructions">;

def FeatureMT : SubtargetFeature<"mt", "HasMT", "true", "Mips MT ASE">;

//===----------------------------------------------------------------------===//
// Mips processors supported.
//===----------------------------------------------------------------------===//
Expand Down
3 changes: 2 additions & 1 deletion lib/Target/Mips/MipsSubtarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ MipsSubtarget::MipsSubtarget(const Triple &TT, StringRef CPU, StringRef FS,
InMips16HardFloat(Mips16HardFloat), InMicroMipsMode(false), HasDSP(false),
HasDSPR2(false), HasDSPR3(false), AllowMixed16_32(Mixed16_32 | Mips_Os16),
Os16(Mips_Os16), HasMSA(false), UseTCCInDIV(false), HasSym32(false),
HasEVA(false), DisableMadd4(false), TM(TM), TargetTriple(TT), TSInfo(),
HasEVA(false), DisableMadd4(false), HasMT(false), TM(TM),
TargetTriple(TT), TSInfo(),
InstrInfo(
MipsInstrInfo::create(initializeSubtargetDependencies(CPU, FS, TM))),
FrameLowering(MipsFrameLowering::create(*this)),
Expand Down
4 changes: 4 additions & 0 deletions lib/Target/Mips/MipsSubtarget.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,9 @@ class MipsSubtarget : public MipsGenSubtargetInfo {
// related instructions.
bool DisableMadd4;

// HasMT -- support MT ASE.
bool HasMT;

InstrItineraryData InstrItins;

// We can override the determination of whether we are in mips16 mode
Expand Down Expand Up @@ -259,6 +262,7 @@ class MipsSubtarget : public MipsGenSubtargetInfo {
bool hasMSA() const { return HasMSA; }
bool disableMadd4() const { return DisableMadd4; }
bool hasEVA() const { return HasEVA; }
bool hasMT() const { return HasMT; }
bool useSmallSection() const { return UseSmallSection; }

bool hasStandardEncoding() const { return !inMips16Mode(); }
Expand Down
10 changes: 10 additions & 0 deletions test/MC/Mips/mt/abiflag.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# RUN: llvm-mc < %s -arch=mips -mcpu=mips32r2 -mattr=+mt -filetype=obj -o - \
# RUN: | llvm-readobj -mips-abi-flags | FileCheck %s

# Test that the usage of the MT ASE is recorded in .MIPS.abiflags

# CHECK: ASEs
# CHECK-NEXT: MT (0x40)

.text
nop

0 comments on commit ad68aab

Please sign in to comment.