 ee22517d92
			
		
	
	
		ee22517d92
		
			
		
	
	
	
	
		
			
			* Add Compare instruction * Add BranchIf instruction * Use test when BranchIf & Compare against 0 * Propagate Compare into BranchIfTrue/False use - Propagate Compare operations into their BranchIfTrue/False use and turn these into a BranchIf. - Clean up Comparison enum. * Replace BranchIfTrue/False with BranchIf * Use BranchIf in EmitPtPointerLoad - Using BranchIf early instead of BranchIfTrue/False improves LCQ and reduces the amount of work needed by the Optimizer. EmitPtPointerLoader was a/the big producer of BranchIfTrue/False. - Fix asserts firing when assembling BitwiseAnd because of type mismatch in EmitStoreExclusive. This is harmless and should not cause any diffs. * Increment PPTC interval version * Improve IRDumper for BranchIf & Compare * Use BranchIf in EmitNativeCall * Clean up * Do not emit test when immediately preceded by and
		
			
				
	
	
		
			47 lines
		
	
	
		
			No EOL
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			No EOL
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using ARMeilleure.IntermediateRepresentation;
 | |
| using System;
 | |
| 
 | |
| namespace ARMeilleure.CodeGen.X86
 | |
| {
 | |
|     enum X86Condition
 | |
|     {
 | |
|         Overflow       = 0x0,
 | |
|         NotOverflow    = 0x1,
 | |
|         Below          = 0x2,
 | |
|         AboveOrEqual   = 0x3,
 | |
|         Equal          = 0x4,
 | |
|         NotEqual       = 0x5,
 | |
|         BelowOrEqual   = 0x6,
 | |
|         Above          = 0x7,
 | |
|         Sign           = 0x8,
 | |
|         NotSign        = 0x9,
 | |
|         ParityEven     = 0xa,
 | |
|         ParityOdd      = 0xb,
 | |
|         Less           = 0xc,
 | |
|         GreaterOrEqual = 0xd,
 | |
|         LessOrEqual    = 0xe,
 | |
|         Greater        = 0xf
 | |
|     }
 | |
| 
 | |
|     static class ComparisonX86Extensions
 | |
|     {
 | |
|         public static X86Condition ToX86Condition(this Comparison comp)
 | |
|         {
 | |
|             return comp switch
 | |
|             {
 | |
|                 Comparison.Equal            => X86Condition.Equal,
 | |
|                 Comparison.NotEqual         => X86Condition.NotEqual,
 | |
|                 Comparison.Greater          => X86Condition.Greater,
 | |
|                 Comparison.LessOrEqual      => X86Condition.LessOrEqual,
 | |
|                 Comparison.GreaterUI        => X86Condition.Above,
 | |
|                 Comparison.LessOrEqualUI    => X86Condition.BelowOrEqual,
 | |
|                 Comparison.GreaterOrEqual   => X86Condition.GreaterOrEqual,
 | |
|                 Comparison.Less             => X86Condition.Less,
 | |
|                 Comparison.GreaterOrEqualUI => X86Condition.AboveOrEqual,
 | |
|                 Comparison.LessUI           => X86Condition.Below,
 | |
| 
 | |
|                 _ => throw new ArgumentException(null, nameof(comp))
 | |
|             };
 | |
|         }
 | |
|     }
 | |
| } |