diff options
author | Brian Gaeke <gaeke@uiuc.edu> | 2002-11-14 22:32:30 +0000 |
---|---|---|
committer | Brian Gaeke <gaeke@uiuc.edu> | 2002-11-14 22:32:30 +0000 |
commit | 6559bb96a9901af21c6037675f9508373773bd35 (patch) | |
tree | a56a26a6c9180f3504a02ab0f1b14617daf50ddc /lib/Target/X86/X86AsmPrinter.cpp | |
parent | e555460e4e47458e99801c7ab0f85cfdf80583a0 (diff) | |
download | external_llvm-6559bb96a9901af21c6037675f9508373773bd35.zip external_llvm-6559bb96a9901af21c6037675f9508373773bd35.tar.gz external_llvm-6559bb96a9901af21c6037675f9508373773bd35.tar.bz2 |
include/llvm/CodeGen/MachineInstrBuilder.h: Add addClobber() inline
convenience method. Fix typo in comment.
lib/Target/X86/InstSelectSimple.cpp: Explicitly specify some implicit uses.
Use MOVZX/MOVSX instead of MOV instructions with sign extend instructions.
Take out LEAVE instructions.
32-bit IDIV and DIV use CDQ, not CWQ (CWQ is a typo).
Fix typo in comment and remove some FIXME comments.
lib/Target/X86/Printer.cpp: Include X86InstrInfo.h and llvm/Function.h.
Add some simple code to Printer::runOnFunction to iterate over
MachineBasicBlocks and call X86InstrInfo::print().
lib/Target/X86/X86InstrInfo.def: Make some more instructions with
implicit defs "Void". Add more sign/zero extending "move" insns
(movsx, movzx).
lib/Target/X86/X86RegisterInfo.def: Add EFLAGS as a register.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4707 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86AsmPrinter.cpp')
-rw-r--r-- | lib/Target/X86/X86AsmPrinter.cpp | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp index b320e2c..fdb444e 100644 --- a/lib/Target/X86/X86AsmPrinter.cpp +++ b/lib/Target/X86/X86AsmPrinter.cpp @@ -6,7 +6,10 @@ //===----------------------------------------------------------------------===// #include "X86.h" +#include "X86InstrInfo.h" #include "llvm/Pass.h" +#include "llvm/Function.h" +#include "llvm/Target/TargetMachine.h" #include "llvm/CodeGen/MachineFunction.h" #include <iostream> @@ -21,17 +24,40 @@ namespace { }; } -bool Printer::runOnFunction(Function &F) { - MachineFunction &MF = MachineFunction::get(&F); - O << "x86 printing not implemented yet!\n"; - - // This should use the X86InstructionInfo::print method to print assembly - // for each instruction - return false; -} +/// runOnFunction - This uses the X86InstructionInfo::print method +/// to print assembly for each instruction. +bool Printer::runOnFunction (Function & F) +{ + static unsigned bbnumber = 0; + MachineFunction & MF = MachineFunction::get (&F); + const MachineInstrInfo & MII = TM.getInstrInfo (); + const X86InstrInfo & x86ii = dynamic_cast <const X86InstrInfo &> (MII); + + O << "# x86 printing not implemented yet!\n"; + // Print out labels for the function. + O << "\t.globl\t" << F.getName () << "\n"; + O << "\t.type\t" << F.getName () << ", @function\n"; + O << F.getName () << ":\n"; + // Print out code for the function. + for (MachineFunction::const_iterator bb_i = MF.begin (), bb_e = MF.end (); + bb_i != bb_e; ++bb_i) + { + // Print a label for the basic block. + O << ".BB" << bbnumber++ << ":\n"; + for (MachineBasicBlock::const_iterator i_i = bb_i->begin (), i_e = + bb_i->end (); i_i != i_e; ++i_i) + { + // Print the assembly for the instruction. + O << "\t"; + x86ii.print (*i_i, O); + } + } + // We didn't modify anything. + return false; +} /// createX86CodePrinterPass - Print out the specified machine code function to /// the specified stream. This function should work regardless of whether or |