Add support for parsing a Real value. It stores the Real value as its binary
authorBill Wendling <isanbard@gmail.com>
Tue, 25 Jan 2011 21:26:41 +0000 (21:26 +0000)
committerBill Wendling <isanbard@gmail.com>
Tue, 25 Jan 2011 21:26:41 +0000 (21:26 +0000)
encoding. It's up to the individual back-ends to convert it to their preferred
representation when printing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124229 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCParser/AsmParser.cpp

index 0b0df0285d97de00510b10c6fee92f67ad322383..b72894db78b3c6f9abd86d9683e44bd4908e6803 100644 (file)
@@ -563,6 +563,13 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) {
     }
     return false;
   }
+  case AsmToken::Real: {
+    APFloat RealVal(APFloat::IEEEdouble, getTok().getString());
+    int64_t IntVal = RealVal.bitcastToAPInt().getSExtValue();
+    Res = MCConstantExpr::Create(IntVal, getContext());
+    Lex(); // Eat token.
+    return false;
+  }
   case AsmToken::Dot: {
     // This is a '.' reference, which references the current PC.  Emit a
     // temporary label to the streamer and refer to it.
@@ -573,7 +580,6 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) {
     Lex(); // Eat identifier.
     return false;
   }
-
   case AsmToken::LParen:
     Lex(); // Eat the '('.
     return ParseParenExpr(Res, EndLoc);