[llvm-commits] CVS: llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp .cvsignore Makefile

Misha Brukman brukman at cs.uiuc.edu
Tue May 27 15:09:02 PDT 2003


Changes in directory llvm/lib/Target/Sparc:

SparcV9CodeEmitter.cpp added (r1.1)
.cvsignore added (r1.1)
Makefile updated: 1.13 -> 1.14

---
Log message:

SparcV9CodeEmitter.cpp is a part of the Sparc code emitter. The main function
that assembles instructions is generated via TableGen (and hence must be built
before building this directory, but that's already the case in the top-level
Makefile).

Also added is .cvsignore to ignore the generated file `SparcV9CodeEmitter.inc',
which is included by SparcV9CodeEmitter.cpp .


---
Diffs of the changes:

Index: llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp
diff -c /dev/null llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp:1.1
*** /dev/null	Tue May 27 15:08:08 2003
--- llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp	Tue May 27 15:07:58 2003
***************
*** 0 ****
--- 1,90 ----
+ #include "llvm/PassManager.h"
+ #include "llvm/CodeGen/MachineCodeEmitter.h"
+ #include "llvm/CodeGen/MachineFunctionPass.h"
+ #include "llvm/CodeGen/MachineInstr.h"
+ #include "SparcInternals.h"
+ 
+ namespace {
+   class SparcV9CodeEmitter : public MachineFunctionPass {
+     MachineCodeEmitter &MCE;
+ 
+   public:
+     SparcV9CodeEmitter(MachineCodeEmitter &M) : MCE(M) {}
+     
+     bool runOnMachineFunction(MachineFunction &F);
+     
+   private:    
+     int64_t getMachineOpValue(MachineOperand &MO);
+     unsigned getValueBit(int64_t Val, unsigned bit);
+ 
+     void emitConstant(unsigned Val, unsigned Size);
+ 
+     void emitBasicBlock(MachineBasicBlock &MBB);
+     void emitInstruction(MachineInstr &MI);
+     
+     /// Function generated by the CodeEmitterGenerator using TableGen
+     ///
+     unsigned getBinaryCodeForInstr(MachineInstr &MI);
+   };
+ }
+ 
+ bool UltraSparc::addPassesToEmitMachineCode(PassManager &PM,
+                                             MachineCodeEmitter &MCE) {
+   //PM.add(new SparcV9CodeEmitter(MCE));
+   //MachineCodeEmitter *M = MachineCodeEmitter::createDebugMachineCodeEmitter();
+   MachineCodeEmitter *M = 
+     MachineCodeEmitter::createFilePrinterMachineCodeEmitter();
+   PM.add(new SparcV9CodeEmitter(*M));
+   return false;
+ }
+ 
+ void SparcV9CodeEmitter::emitConstant(unsigned Val, unsigned Size) {
+   // Output the constant in big endian byte order...
+   unsigned byteVal;
+   for (int i = Size-1; i >= 0; --i) {
+     byteVal = Val >> 8*i;
+     MCE.emitByte(byteVal & 255);
+   }
+ }
+ 
+ int64_t SparcV9CodeEmitter::getMachineOpValue(MachineOperand &MO) {
+   if (MO.isPhysicalRegister()) {
+     return MO.getReg();
+   } else if (MO.isImmediate()) {
+     return MO.getImmedValue();
+   } else if (MO.isPCRelativeDisp()) {
+     // FIXME!!!
+     //return MO.getPCRelativeDisp();
+     return 0;
+   } else {
+     assert(0 && "Unknown type of MachineOperand");
+     return 0;
+   }
+ }
+ 
+ unsigned SparcV9CodeEmitter::getValueBit(int64_t Val, unsigned bit) {
+   Val >>= bit;
+   return (Val & 1);
+ }
+ 
+ 
+ bool SparcV9CodeEmitter::runOnMachineFunction(MachineFunction &MF) {
+   MCE.startFunction(MF);
+   MCE.emitConstantPool(MF.getConstantPool());
+   for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I)
+     emitBasicBlock(*I);
+   MCE.finishFunction(MF);
+   return false;
+ }
+ 
+ void SparcV9CodeEmitter::emitBasicBlock(MachineBasicBlock &MBB) {
+   MCE.startBasicBlock(MBB);
+   for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); I != E; ++I)
+     emitInstruction(**I);
+ }
+ 
+ void SparcV9CodeEmitter::emitInstruction(MachineInstr &MI) {
+   emitConstant(getBinaryCodeForInstr(MI), 4);
+ }
+ 
+ #include "SparcV9CodeEmitter.inc"


Index: llvm/lib/Target/Sparc/.cvsignore
diff -c /dev/null llvm/lib/Target/Sparc/.cvsignore:1.1
*** /dev/null	Tue May 27 15:08:08 2003
--- llvm/lib/Target/Sparc/.cvsignore	Tue May 27 15:07:58 2003
***************
*** 0 ****
--- 1 ----
+ SparcV9CodeEmitter.inc


Index: llvm/lib/Target/Sparc/Makefile
diff -u llvm/lib/Target/Sparc/Makefile:1.13 llvm/lib/Target/Sparc/Makefile:1.14
--- llvm/lib/Target/Sparc/Makefile:1.13	Mon Sep 23 08:12:28 2002
+++ llvm/lib/Target/Sparc/Makefile	Tue May 27 15:07:58 2003
@@ -32,3 +32,6 @@
 $(BUILD_ROOT)/Depend/Sparc.burm.d: $(BUILD_ROOT)/Depend/.dir
 	touch $@
 
+SparcV9CodeEmitter.inc: SparcV9.td
+	@echo "TableGen-erating $@"
+	cpp -P SparcV9.td | tblgen -gen-emitter > SparcV9CodeEmitter.inc





More information about the llvm-commits mailing list