From 40ee69f3ca4433dc14072b2b29f7b47fc75a5dca Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Wed, 20 Dec 2006 21:33:34 +0000 Subject: [PATCH] Original patch was overly complicated. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32723 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/PowerPC/PPCAsmPrinter.cpp | 45 +++++++--------------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp index 0107784e28c..1509c2bec74 100644 --- a/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -89,38 +89,15 @@ namespace { /// stripRegisterPrefix - This method strips the character prefix from a /// register name so that only the number is left. Used by for linux asm. - void stripRegisterPrefix(std::string &Name) { - // Potential prefixes. - static const char *Prefixes[] = { "r", "f", "v", "cr" }; - unsigned NPrefixes = sizeof(Prefixes) / sizeof(const char *); - // Fetch string length. - unsigned Size = Name.size(); - // Start position of numeric portion. - unsigned Pos = 0; - - // Try each prefix. - for (unsigned i = 0; i < NPrefixes; ++i) { - const char *Prefix = Prefixes[i]; - unsigned Length = strlen(Prefix); - // Does it match the beginning? - if (Name.compare(0, Length, Prefix, Length) == 0) { - // If so, start looking beyond the prefix. - Pos = strlen(Prefix); - break; - } - } - - // If we have a match. - if (Pos) { - // Remaining characters better be digits. - for (unsigned j = Pos; j < Size; ++j) { - unsigned Ch = Name[j]; - if (Ch < '0' || '9' < Ch) return; - } - - // Pass back just the numeric portion. - Name = Name.substr(Pos, Size - Pos); + const char *stripRegisterPrefix(const char *RegName) { + switch (RegName[0]) { + case 'r': + case 'f': + case 'v': return RegName + 1; + case 'c': if (RegName[0] == 'r') return RegName + 2; } + + return RegName; } /// printRegister - Print register according to target requirements. @@ -135,11 +112,11 @@ namespace { return; } - std::string Name = TM.getRegisterInfo()->get(RegNo).Name; + const char *RegName = TM.getRegisterInfo()->get(RegNo).Name; // Linux assembler (Others?) does not take register mnemonics. // FIXME - What about special registers used in mfspr/mtspr? - if (!Subtarget.isDarwin()) stripRegisterPrefix(Name); - O << Name; + if (!Subtarget.isDarwin()) RegName = stripRegisterPrefix(RegName); + O << RegName; } void printOperand(const MachineInstr *MI, unsigned OpNo) { -- 2.34.1