summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBradley Smith <bradley.smith@arm.com>2014-04-09 14:42:53 +0000
committerBradley Smith <bradley.smith@arm.com>2014-04-09 14:42:53 +0000
commit3339427e2a9bc45cfda236c1dd9dd48e1e40cff9 (patch)
treeb9bb8da8f8d7079f8b942028b07ca170bd99c634
parent16478c4ccfbc02056eb87f4290657fc5a6b5c4f6 (diff)
downloadbcm5719-llvm-3339427e2a9bc45cfda236c1dd9dd48e1e40cff9.tar.gz
bcm5719-llvm-3339427e2a9bc45cfda236c1dd9dd48e1e40cff9.zip
[ARM64] Remove PrefetchOp and use ARM64PRFM instead.
llvm-svn: 205872
-rw-r--r--llvm/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp31
-rw-r--r--llvm/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp6
-rw-r--r--llvm/lib/Target/ARM64/MCTargetDesc/ARM64AddressingModes.h58
3 files changed, 14 insertions, 81 deletions
diff --git a/llvm/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp b/llvm/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp
index 4aa64d3f50c..7fe336329b7 100644
--- a/llvm/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp
+++ b/llvm/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp
@@ -1757,14 +1757,15 @@ void ARM64Operand::print(raw_ostream &OS) const {
case k_SysCR:
OS << "c" << getSysCR();
break;
- case k_Prefetch:
- OS << "<prfop ";
- if (ARM64_AM::isNamedPrefetchOp(getPrefetch()))
- OS << ARM64_AM::getPrefetchOpName((ARM64_AM::PrefetchOp)getPrefetch());
+ case k_Prefetch: {
+ bool Valid;
+ StringRef Name = ARM64PRFM::PRFMMapper().toString(getPrefetch(), Valid);
+ if (Valid)
+ OS << "<prfop " << Name << ">";
else
- OS << "#" << getPrefetch();
- OS << ">";
+ OS << "<prfop invalid #" << getPrefetch() << ">";
break;
+ }
case k_Shifter: {
unsigned Val = getShifter();
OS << "<" << ARM64_AM::getShiftName(ARM64_AM::getShiftType(Val)) << " #"
@@ -2036,21 +2037,9 @@ ARM64AsmParser::tryParsePrefetch(OperandVector &Operands) {
return MatchOperand_ParseFail;
}
- unsigned prfop = StringSwitch<unsigned>(Tok.getString())
- .Case("pldl1keep", ARM64_AM::PLDL1KEEP)
- .Case("pldl1strm", ARM64_AM::PLDL1STRM)
- .Case("pldl2keep", ARM64_AM::PLDL2KEEP)
- .Case("pldl2strm", ARM64_AM::PLDL2STRM)
- .Case("pldl3keep", ARM64_AM::PLDL3KEEP)
- .Case("pldl3strm", ARM64_AM::PLDL3STRM)
- .Case("pstl1keep", ARM64_AM::PSTL1KEEP)
- .Case("pstl1strm", ARM64_AM::PSTL1STRM)
- .Case("pstl2keep", ARM64_AM::PSTL2KEEP)
- .Case("pstl2strm", ARM64_AM::PSTL2STRM)
- .Case("pstl3keep", ARM64_AM::PSTL3KEEP)
- .Case("pstl3strm", ARM64_AM::PSTL3STRM)
- .Default(0xff);
- if (prfop == 0xff) {
+ bool Valid;
+ unsigned prfop = ARM64PRFM::PRFMMapper().fromString(Tok.getString(), Valid);
+ if (!Valid) {
TokError("pre-fetch hint expected");
return MatchOperand_ParseFail;
}
diff --git a/llvm/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp b/llvm/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp
index 587b321d9a0..757c45ebfb6 100644
--- a/llvm/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp
+++ b/llvm/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp
@@ -1145,8 +1145,10 @@ void ARM64InstPrinter::printAMIndexed(const MCInst *MI, unsigned OpNum,
void ARM64InstPrinter::printPrefetchOp(const MCInst *MI, unsigned OpNum,
raw_ostream &O) {
unsigned prfop = MI->getOperand(OpNum).getImm();
- if (ARM64_AM::isNamedPrefetchOp(prfop))
- O << ARM64_AM::getPrefetchOpName((ARM64_AM::PrefetchOp)prfop);
+ bool Valid;
+ StringRef Name = ARM64PRFM::PRFMMapper().toString(prfop, Valid);
+ if (Valid)
+ O << Name;
else
O << '#' << prfop;
}
diff --git a/llvm/lib/Target/ARM64/MCTargetDesc/ARM64AddressingModes.h b/llvm/lib/Target/ARM64/MCTargetDesc/ARM64AddressingModes.h
index 7717743b954..553ddaed1ac 100644
--- a/llvm/lib/Target/ARM64/MCTargetDesc/ARM64AddressingModes.h
+++ b/llvm/lib/Target/ARM64/MCTargetDesc/ARM64AddressingModes.h
@@ -164,64 +164,6 @@ static inline unsigned getMemExtendImm(ARM64_AM::ExtendType ET, bool DoShift) {
return (unsigned(ET) << 1) | unsigned(DoShift);
}
-//===----------------------------------------------------------------------===//
-// Prefetch
-//
-
-/// Pre-fetch operator names.
-/// The enum values match the encoding values:
-/// prfop<4:3> 00=preload data, 10=prepare for store
-/// prfop<2:1> 00=target L1 cache, 01=target L2 cache, 10=target L3 cache,
-/// prfop<0> 0=non-streaming (temporal), 1=streaming (non-temporal)
-enum PrefetchOp {
- InvalidPrefetchOp = -1,
- PLDL1KEEP = 0x00,
- PLDL1STRM = 0x01,
- PLDL2KEEP = 0x02,
- PLDL2STRM = 0x03,
- PLDL3KEEP = 0x04,
- PLDL3STRM = 0x05,
- PSTL1KEEP = 0x10,
- PSTL1STRM = 0x11,
- PSTL2KEEP = 0x12,
- PSTL2STRM = 0x13,
- PSTL3KEEP = 0x14,
- PSTL3STRM = 0x15
-};
-
-/// isNamedPrefetchOp - Check if the prefetch-op 5-bit value has a name.
-static inline bool isNamedPrefetchOp(unsigned prfop) {
- switch (prfop) {
- default: return false;
- case ARM64_AM::PLDL1KEEP: case ARM64_AM::PLDL1STRM: case ARM64_AM::PLDL2KEEP:
- case ARM64_AM::PLDL2STRM: case ARM64_AM::PLDL3KEEP: case ARM64_AM::PLDL3STRM:
- case ARM64_AM::PSTL1KEEP: case ARM64_AM::PSTL1STRM: case ARM64_AM::PSTL2KEEP:
- case ARM64_AM::PSTL2STRM: case ARM64_AM::PSTL3KEEP: case ARM64_AM::PSTL3STRM:
- return true;
- }
-}
-
-
-/// getPrefetchOpName - Get the string encoding for the prefetch operator.
-static inline const char *getPrefetchOpName(ARM64_AM::PrefetchOp prfop) {
- switch (prfop) {
- default: assert(false && "unhandled prefetch-op type!");
- case ARM64_AM::PLDL1KEEP: return "pldl1keep";
- case ARM64_AM::PLDL1STRM: return "pldl1strm";
- case ARM64_AM::PLDL2KEEP: return "pldl2keep";
- case ARM64_AM::PLDL2STRM: return "pldl2strm";
- case ARM64_AM::PLDL3KEEP: return "pldl3keep";
- case ARM64_AM::PLDL3STRM: return "pldl3strm";
- case ARM64_AM::PSTL1KEEP: return "pstl1keep";
- case ARM64_AM::PSTL1STRM: return "pstl1strm";
- case ARM64_AM::PSTL2KEEP: return "pstl2keep";
- case ARM64_AM::PSTL2STRM: return "pstl2strm";
- case ARM64_AM::PSTL3KEEP: return "pstl3keep";
- case ARM64_AM::PSTL3STRM: return "pstl3strm";
- }
- return 0;
-}
-
static inline uint64_t ror(uint64_t elt, unsigned size) {
return ((elt & 1) << (size-1)) | (elt >> 1);
}
OpenPOWER on IntegriCloud