mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3519 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include "llvm/Reoptimizer/Mapping/FInfo.h"
 | |
| #include "llvm/Pass.h"
 | |
| #include "llvm/Module.h"
 | |
| 
 | |
| 
 | |
| namespace {
 | |
|   class FunctionInfo : public Pass {
 | |
|     std::ostream &Out;
 | |
|   public:
 | |
|     FunctionInfo(std::ostream &out) : Out(out){}
 | |
|     const char* getPassName() const{return "Sparc FunctionInfo";}
 | |
|     bool run(Module &M);
 | |
|   private:
 | |
|     void FunctionInfo::writePrologue(const char *area,
 | |
| 					const char *label);
 | |
|     void FunctionInfo::writeEpilogue(const char *area,
 | |
| 					const char *label);
 | |
|   };
 | |
| }
 | |
| 
 | |
| Pass *getFunctionInfo(std::ostream &out){
 | |
|   return new FunctionInfo(out);
 | |
| }
 | |
| 
 | |
| bool FunctionInfo::run(Module &M){
 | |
|   unsigned f;
 | |
|   
 | |
|   writePrologue("FUNCTION MAP", "FunctionBB");
 | |
|   f=0;
 | |
|   for(Module::iterator FI=M.begin(), FE=M.end(); FE!=FI; ++FI){
 | |
|     if(FI->isExternal()) continue;
 | |
|     Out << "\t.xword BBMIMap"<<f<<"\n";
 | |
|     ++f;
 | |
|   }
 | |
|   writeEpilogue("FUNCTION MAP", "FunctionBB");
 | |
|   
 | |
|   writePrologue("FUNCTION MAP", "FunctionLI");
 | |
|   f=0;
 | |
|   for(Module::iterator FI=M.begin(), FE=M.end(); FE!=FI; ++FI){
 | |
|     if(FI->isExternal()) continue;
 | |
|     Out << "\t.xword LMIMap"<<f<<"\n";
 | |
|     ++f;
 | |
|   }
 | |
|   writeEpilogue("FUNCTION MAP", "FunctionLI");
 | |
|   
 | |
|   
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| 
 | |
| void FunctionInfo::writePrologue(const char *area,
 | |
| 				    const char *label){
 | |
|   Out << "\n\n\n!"<<area<<"\n";   
 | |
|   Out << "\t.section \".rodata\"\n\t.align 8\n";  
 | |
|   Out << "\t.global "<<label<<"\n";    
 | |
|   Out << "\t.type "<<label<<",#object\n"; 
 | |
|   Out << label<<":\n"; 
 | |
|   //Out << "\t.word .end_"<<label<<"-"<<label<<"\n";
 | |
| }
 | |
| 
 | |
| void FunctionInfo::writeEpilogue(const char *area,
 | |
| 				    const char *label){
 | |
|   Out << ".end_" << label << ":\n";    
 | |
|   Out << "\t.size " << label << ", .end_" 
 | |
|       << label << "-" << label << "\n\n\n\n";
 | |
|   
 | |
|   //Out << "\n\n!" << area << " Length\n";
 | |
|   //Out << "\t.section \".bbdata\",#alloc,#write\n";                                     
 | |
|   //Out << "\t.global " << label << "_length\n";          
 | |
|   //Out << "\t.align 4\n";
 | |
|   //Out << "\t.type " << label << "_length,#object\n";
 | |
|   //Out << "\t.size "<< label <<"_length,4\n";
 | |
|   //Out << label <<" _length:\n";
 | |
|   //Out << "\t.word\t.end_"<<label<<"-"<<label<<"\n\n\n\n";               
 | |
| }
 |