mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	* CPRCs may be allocated to co-processor registers or the stack – they may never be allocated to core registers * When a CPRC is allocated to the stack, all other VFP registers should be marked as unavailable The difference is only noticeable in rare cases where there are a large number of floating point arguments (e.g. 7 doubles + additional float, double arguments). Although it's probably still better to avoid vmov as it can cause stalls in some older ARM cores. The other, more subtle benefit, is to minimize difference between the various calling conventions. rdar://16039676 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201193 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -mtriple=armv7-apple-ios -mattr=+vfp2 | FileCheck %s
 | |
| 
 | |
| define fastcc double @t1(double %d0, double %d1, double %d2, double %d3, double %d4, double %d5, double %d6, double %d7, float %a, float %b) {
 | |
| entry:
 | |
| ; CHECK-LABEL: t1:
 | |
| ; CHECK-NOT: vmov
 | |
| ; CHECK: vldr
 | |
|   %add = fadd float %a, %b
 | |
|   %conv = fpext float %add to double
 | |
|   ret double %conv
 | |
| }
 | |
| 
 | |
| define fastcc double @t2(double %d0, double %d1, double %d2, double %d3, double %d4, double %d5, double %a, float %b, double %c) {
 | |
| entry:
 | |
| ; CHECK-LABEL: t2:
 | |
| ; CHECK-NOT: vmov
 | |
| ; CHECK: vldr
 | |
|   %add = fadd double %a, %c
 | |
|   ret double %add
 | |
| }
 | |
| 
 | |
| define fastcc float @t3(double %d0, double %d1, double %d2, double %d3, double %d4, double %d5, double %d6, float %a, double %b, float %c) {
 | |
| entry:
 | |
| ; CHECK-LABEL: t3:
 | |
| ; CHECK: vldr
 | |
|   %add = fadd float %a, %c
 | |
|   ret float %add
 | |
| }
 | |
| 
 | |
| define fastcc double @t4(double %a, double %b) #0 {
 | |
| entry:
 | |
| ; CHECK-LABEL: t4:
 | |
| ; CHECK: vstr
 | |
|   %add = fadd double %a, %b
 | |
|   %sub = fsub double %a, %b
 | |
|   %call = tail call fastcc double @x(double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double %add, float 0.000000e+00, double %sub) #2
 | |
|   ret double %call
 | |
| }
 | |
| 
 | |
| declare fastcc double @x(double, double, double, double, double, double, double, float, double)
 |