|
@@ -0,0 +1,68 @@
|
|
|
+//===- llvm/unittest/MC/MCInstPrinter.cpp ---------------------------------===//
|
|
|
+//
|
|
|
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
+// See https://llvm.org/LICENSE.txt for license information.
|
|
|
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
+//
|
|
|
+//===----------------------------------------------------------------------===//
|
|
|
+
|
|
|
+#include "llvm/MC/MCInstPrinter.h"
|
|
|
+#include "llvm/MC/MCAsmInfo.h"
|
|
|
+#include "llvm/MC/MCInstrInfo.h"
|
|
|
+#include "llvm/Support/TargetRegistry.h"
|
|
|
+#include "llvm/Support/TargetSelect.h"
|
|
|
+#include "llvm/Target/TargetMachine.h"
|
|
|
+#include "llvm/Target/TargetOptions.h"
|
|
|
+#include "gtest/gtest.h"
|
|
|
+
|
|
|
+using namespace llvm;
|
|
|
+
|
|
|
+namespace {
|
|
|
+class MCInstPrinterTest : public ::testing::Test {
|
|
|
+public:
|
|
|
+ std::unique_ptr<MCRegisterInfo> MRI;
|
|
|
+ std::unique_ptr<MCAsmInfo> MAI;
|
|
|
+ std::unique_ptr<const MCInstrInfo> MII;
|
|
|
+ std::unique_ptr<MCInstPrinter> Printer;
|
|
|
+
|
|
|
+ MCInstPrinterTest() {
|
|
|
+ llvm::InitializeAllTargetInfos();
|
|
|
+ llvm::InitializeAllTargetMCs();
|
|
|
+
|
|
|
+ std::string TripleName = "x86_64-pc-linux";
|
|
|
+ std::string ErrorStr;
|
|
|
+
|
|
|
+ const Target *TheTarget =
|
|
|
+ TargetRegistry::lookupTarget(TripleName, ErrorStr);
|
|
|
+
|
|
|
+ // If we didn't build x86, do not run the test.
|
|
|
+ if (!TheTarget)
|
|
|
+ return;
|
|
|
+
|
|
|
+ MRI.reset(TheTarget->createMCRegInfo(TripleName));
|
|
|
+ MAI.reset(TheTarget->createMCAsmInfo(*MRI, TripleName));
|
|
|
+ MII.reset(TheTarget->createMCInstrInfo());
|
|
|
+ Printer.reset(TheTarget->createMCInstPrinter(
|
|
|
+ Triple(TripleName), MAI->getAssemblerDialect(), *MAI, *MII, *MRI));
|
|
|
+ }
|
|
|
+
|
|
|
+ template <typename T> std::string formatHex(T i) {
|
|
|
+ std::string Buffer;
|
|
|
+ raw_string_ostream OS(Buffer);
|
|
|
+ OS << Printer->formatHex(i);
|
|
|
+ OS.flush();
|
|
|
+ return Buffer;
|
|
|
+ }
|
|
|
+};
|
|
|
+} // namespace
|
|
|
+
|
|
|
+TEST_F(MCInstPrinterTest, formatHex) {
|
|
|
+ if (!Printer)
|
|
|
+ return;
|
|
|
+
|
|
|
+ EXPECT_EQ("0x1", formatHex<int64_t>(1));
|
|
|
+ EXPECT_EQ("0x7fffffffffffffff",
|
|
|
+ formatHex(std::numeric_limits<int64_t>::max()));
|
|
|
+ EXPECT_EQ("-0x8000000000000000",
|
|
|
+ formatHex(std::numeric_limits<int64_t>::min()));
|
|
|
+}
|