summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2010-10-07 22:12:50 +0000
committerJim Grosbach <grosbach@apple.com>2010-10-07 22:12:50 +0000
commit91029094e0fb0eb186bb727da122356ca40904e5 (patch)
tree0768b2d37113dfe6ec104d6d2483000252f90440 /llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp
parent68f4b4f2a22abde9019c6f1cbfac262678672acf (diff)
downloadbcm5719-llvm-91029094e0fb0eb186bb727da122356ca40904e5.tar.gz
bcm5719-llvm-91029094e0fb0eb186bb727da122356ca40904e5.zip
Trivial MC code emitter shell. No instruction forms actually handled yet.
llvm-svn: 115993
Diffstat (limited to 'llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp')
-rw-r--r--llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp b/llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp
index cfebe97dfe1..35319a473d9 100644
--- a/llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp
+++ b/llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp
@@ -13,13 +13,16 @@
#define DEBUG_TYPE "arm-emitter"
#include "ARM.h"
-#include "ARMBaseInfo.h"
+#include "ARMInstrInfo.h"
#include "llvm/MC/MCCodeEmitter.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCInst.h"
+#include "llvm/ADT/Statistic.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
+STATISTIC(MCNumEmitted, "Number of MC instructions emitted");
+
namespace {
class ARMMCCodeEmitter : public MCCodeEmitter {
ARMMCCodeEmitter(const ARMMCCodeEmitter &); // DO NOT IMPLEMENT
@@ -31,7 +34,6 @@ class ARMMCCodeEmitter : public MCCodeEmitter {
public:
ARMMCCodeEmitter(TargetMachine &tm, MCContext &ctx)
: TM(tm), TII(*TM.getInstrInfo()), Ctx(ctx) {
- assert(0 && "ARMMCCodeEmitter::ARMMCCodeEmitter() not yet implemented.");
}
~ARMMCCodeEmitter() {}
@@ -107,7 +109,21 @@ EmitImmediate(const MCOperand &DispOp, unsigned Size, MCFixupKind FixupKind,
void ARMMCCodeEmitter::
EncodeInstruction(const MCInst &MI, raw_ostream &OS,
SmallVectorImpl<MCFixup> &Fixups) const {
- assert(0 && "ARMMCCodeEmitter::EncodeInstruction() not yet implemented.");
+ unsigned Opcode = MI.getOpcode();
+ const TargetInstrDesc &Desc = TII.get(Opcode);
+ uint64_t TSFlags = Desc.TSFlags;
+
+ // Pseudo instructions don't get encoded.
+ if ((TSFlags & ARMII::FormMask) == ARMII::Pseudo)
+ return;
+
+ ++MCNumEmitted; // Keep track of the # of mi's emitted
+ switch (TSFlags & ARMII::FormMask) {
+ default: {
+ llvm_unreachable("Unhandled instruction encoding format!");
+ break;
+ }
+ }
}
// FIXME: These #defines shouldn't be necessary. Instead, tblgen should
OpenPOWER on IntegriCloud