diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/Sparc/EmitBytecodeToAssembly.cpp | 34 | 
1 files changed, 16 insertions, 18 deletions
diff --git a/llvm/lib/Target/Sparc/EmitBytecodeToAssembly.cpp b/llvm/lib/Target/Sparc/EmitBytecodeToAssembly.cpp index 3ca8b165823..4a99cb3c4ca 100644 --- a/llvm/lib/Target/Sparc/EmitBytecodeToAssembly.cpp +++ b/llvm/lib/Target/Sparc/EmitBytecodeToAssembly.cpp @@ -10,8 +10,7 @@  #include "llvm/Pass.h"  #include "llvm/Bytecode/Writer.h"  #include <iostream> -#include <sstream> -#include <string> +  using std::ostream;  namespace { @@ -41,7 +40,7 @@ namespace {    // as the underlying streambuf to write the data to.  This streambuf formats    // the output as .byte directives for sparc output.    // -  class osparcasmstream : public ostream { +  class osparcasmstream : public std::ostream {      sparcasmbuf sb;    public:      typedef char           char_type; @@ -49,7 +48,7 @@ namespace {      typedef std::streampos pos_type;      typedef std::streamoff off_type; -    explicit osparcasmstream(ostream &On) : ostream(&sb), sb(On) { } +    explicit osparcasmstream(std::ostream &On) : std::ostream(&sb), sb(On) { }      sparcasmbuf *rdbuf() const {        return const_cast<sparcasmbuf*>(&sb); @@ -63,32 +62,31 @@ namespace {      SparcBytecodeWriter(std::ostream &out) : Out(out) {}      const char *getPassName() const { return "Emit Bytecode to Sparc Assembly";} - +          virtual bool run(Module &M) {        // Write bytecode out to the sparc assembly stream +              Out << "\n\n!LLVM BYTECODE OUTPUT\n\t.section \".rodata\"\n\t.align 8\n";        Out << "\t.global LLVMBytecode\n\t.type LLVMBytecode,#object\n";        Out << "LLVMBytecode:\n";        //changed --anand, to get the size of bytecode -      std::ostringstream Ostr; -      osparcasmstream OS(Ostr); +      osparcasmstream OS(Out);        WriteBytecodeToFile(&M, OS); -      //compute length: count number of "." -      std::string myString=Ostr.str(); -      int llvm_len=0; -      for(std::string::iterator si=myString.begin(), se=myString.end(); si!=se; si++) -	if(*si == '.') -	  llvm_len++; -       -      //now put Ostr into Out -      //count no of  -      Out<<Ostr.str(); +               Out << ".end_LLVMBytecode:\n";        Out << "\t.size LLVMBytecode, .end_LLVMBytecode-LLVMBytecode\n\n"; -      Out <<"\n\n!LLVM BYTECODE Length\n\t.section \".data\",#alloc,#write\n\t.global llvm_length\n\t.align 4\n\t.type llvm_length,#object\n\t.size llvm_length,4\nllvm_length:\n\t.word "<<llvm_len<<"\n";  +       +      Out <<"\n\n!LLVM BYTECODE Length\n"; +      Out <<"\t.section \".data\",#alloc,#write\n"; +      Out <<"\t.global llvm_length\n"; +      Out <<"\t.align 4\n"; +      Out <<"\t.type llvm_length,#object\n"; +      Out <<"\t.size llvm_length,4\n"; +      Out <<"llvm_length:\n"; +      Out <<"\t.word\t.end_LLVMBytecode-LLVMBytecode\n";         return false;      }    };  | 

