mirror of
				https://github.com/Ryujinx/Ryujinx.git
				synced 2025-10-25 20:33:56 -07:00 
			
		
		
		
	* Implement JIT Arm64 backend * PPTC version bump * Address some feedback from Arm64 JIT PR * Address even more PR feedback * Remove unused IsPageAligned function * Sync Qc flag before calls * Fix comment and remove unused enum * Address riperiperi PR feedback * Delete Breakpoint IR instruction that was only implemented for Arm64
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using ARMeilleure.CodeGen;
 | |
| using ARMeilleure.CodeGen.Optimizations;
 | |
| using ARMeilleure.Diagnostics;
 | |
| using ARMeilleure.IntermediateRepresentation;
 | |
| using System;
 | |
| using System.Runtime.InteropServices;
 | |
| 
 | |
| namespace ARMeilleure.Translation
 | |
| {
 | |
|     static class Compiler
 | |
|     {
 | |
|         public static CompiledFunction Compile(
 | |
|             ControlFlowGraph cfg,
 | |
|             OperandType[]    argTypes,
 | |
|             OperandType      retType,
 | |
|             CompilerOptions  options,
 | |
|             Architecture     target)
 | |
|         {
 | |
|             CompilerContext cctx = new(cfg, argTypes, retType, options);
 | |
| 
 | |
|             if (options.HasFlag(CompilerOptions.Optimize))
 | |
|             {
 | |
|                 Logger.StartPass(PassName.TailMerge);
 | |
| 
 | |
|                 TailMerge.RunPass(cctx);
 | |
| 
 | |
|                 Logger.EndPass(PassName.TailMerge, cfg);
 | |
|             }
 | |
| 
 | |
|             if (options.HasFlag(CompilerOptions.SsaForm))
 | |
|             {
 | |
|                 Logger.StartPass(PassName.Dominance);
 | |
| 
 | |
|                 Dominance.FindDominators(cfg);
 | |
|                 Dominance.FindDominanceFrontiers(cfg);
 | |
| 
 | |
|                 Logger.EndPass(PassName.Dominance);
 | |
| 
 | |
|                 Logger.StartPass(PassName.SsaConstruction);
 | |
| 
 | |
|                 Ssa.Construct(cfg);
 | |
| 
 | |
|                 Logger.EndPass(PassName.SsaConstruction, cfg);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 Logger.StartPass(PassName.RegisterToLocal);
 | |
| 
 | |
|                 RegisterToLocal.Rename(cfg);
 | |
| 
 | |
|                 Logger.EndPass(PassName.RegisterToLocal, cfg);
 | |
|             }
 | |
| 
 | |
|             if (target == Architecture.X64)
 | |
|             {
 | |
|                 return CodeGen.X86.CodeGenerator.Generate(cctx);
 | |
|             }
 | |
|             else if (target == Architecture.Arm64)
 | |
|             {
 | |
|                 return CodeGen.Arm64.CodeGenerator.Generate(cctx);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 throw new NotImplementedException(target.ToString());
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } |