mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	The ARM backend has been using most of the MachO related subtarget checks almost interchangeably, and since the only target it's had to run on has been IOS (which is all three of MachO, Darwin and IOS) it's worked out OK so far. But we'd like to support embedded targets under the "*-*-none-macho" triple, which means everything starts falling apart and inconsistent behaviours emerge. This patch should pick a reasonably sensible set of behaviours for the new triple (and any others that come along, with luck). Some choices were debatable (notably FP == r7 or r11), but we can revisit those later when deficiencies become apparent. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198617 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=DARWIN-ARM
 | |
| ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-ARM
 | |
| ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=DARWIN-THUMB2
 | |
| ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=thumbv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-THUMB2
 | |
| 
 | |
| define i8* @frameaddr_index0() nounwind {
 | |
| entry:
 | |
| ; DARWIN-ARM-LABEL: frameaddr_index0:
 | |
| ; DARWIN-ARM: push {r7}
 | |
| ; DARWIN-ARM: mov r7, sp
 | |
| ; DARWIN-ARM: mov r0, r7
 | |
| 
 | |
| ; DARWIN-THUMB2-LABEL: frameaddr_index0:
 | |
| ; DARWIN-THUMB2: str r7, [sp, #-4]!
 | |
| ; DARWIN-THUMB2: mov r7, sp
 | |
| ; DARWIN-THUMB2: mov r0, r7
 | |
| 
 | |
| ; LINUX-ARM-LABEL: frameaddr_index0:
 | |
| ; LINUX-ARM: push {r11}
 | |
| ; LINUX-ARM: mov r11, sp
 | |
| ; LINUX-ARM: mov r0, r11
 | |
| 
 | |
| ; LINUX-THUMB2-LABEL: frameaddr_index0:
 | |
| ; LINUX-THUMB2: str r7, [sp, #-4]!
 | |
| ; LINUX-THUMB2: mov r7, sp
 | |
| ; LINUX-THUMB2: mov r0, r7
 | |
| 
 | |
|   %0 = call i8* @llvm.frameaddress(i32 0)
 | |
|   ret i8* %0
 | |
| }
 | |
| 
 | |
| define i8* @frameaddr_index1() nounwind {
 | |
| entry:
 | |
| ; DARWIN-ARM-LABEL: frameaddr_index1:
 | |
| ; DARWIN-ARM: push {r7}
 | |
| ; DARWIN-ARM: mov r7, sp
 | |
| ; DARWIN-ARM: ldr r0, [r7]
 | |
| 
 | |
| ; DARWIN-THUMB2-LABEL: frameaddr_index1:
 | |
| ; DARWIN-THUMB2: str r7, [sp, #-4]!
 | |
| ; DARWIN-THUMB2: mov r7, sp
 | |
| ; DARWIN-THUMB2: ldr r0, [r7]
 | |
| 
 | |
| ; LINUX-ARM-LABEL: frameaddr_index1:
 | |
| ; LINUX-ARM: push {r11}
 | |
| ; LINUX-ARM: mov r11, sp
 | |
| ; LINUX-ARM: ldr r0, [r11]
 | |
| 
 | |
| ; LINUX-THUMB2-LABEL: frameaddr_index1:
 | |
| ; LINUX-THUMB2: str r7, [sp, #-4]!
 | |
| ; LINUX-THUMB2: mov r7, sp
 | |
| ; LINUX-THUMB2: mov r0, r7
 | |
| ; LINUX-THUMB2: ldr r0, [r0]
 | |
| 
 | |
|   %0 = call i8* @llvm.frameaddress(i32 1)
 | |
|   ret i8* %0
 | |
| }
 | |
| 
 | |
| define i8* @frameaddr_index3() nounwind {
 | |
| entry:
 | |
| ; DARWIN-ARM-LABEL: frameaddr_index3:
 | |
| ; DARWIN-ARM: push {r7}
 | |
| ; DARWIN-ARM: mov r7, sp
 | |
| ; DARWIN-ARM: ldr r0, [r7]
 | |
| ; DARWIN-ARM: ldr r0, [r0]
 | |
| ; DARWIN-ARM: ldr r0, [r0]
 | |
| 
 | |
| ; DARWIN-THUMB2-LABEL: frameaddr_index3:
 | |
| ; DARWIN-THUMB2: str r7, [sp, #-4]!
 | |
| ; DARWIN-THUMB2: mov r7, sp
 | |
| ; DARWIN-THUMB2: ldr r0, [r7]
 | |
| ; DARWIN-THUMB2: ldr r0, [r0]
 | |
| ; DARWIN-THUMB2: ldr r0, [r0]
 | |
| 
 | |
| ; LINUX-ARM-LABEL: frameaddr_index3:
 | |
| ; LINUX-ARM: push {r11}
 | |
| ; LINUX-ARM: mov r11, sp
 | |
| ; LINUX-ARM: ldr r0, [r11]
 | |
| ; LINUX-ARM: ldr r0, [r0]
 | |
| ; LINUX-ARM: ldr r0, [r0]
 | |
| 
 | |
| ; LINUX-THUMB2-LABEL: frameaddr_index3:
 | |
| ; LINUX-THUMB2: str r7, [sp, #-4]!
 | |
| ; LINUX-THUMB2: mov r7, sp
 | |
| ; LINUX-THUMB2: mov r0, r7
 | |
| ; LINUX-THUMB2: ldr r0, [r0]
 | |
| ; LINUX-THUMB2: ldr r0, [r0]
 | |
| ; LINUX-THUMB2: ldr r0, [r0]
 | |
| 
 | |
|   %0 = call i8* @llvm.frameaddress(i32 3)
 | |
|   ret i8* %0
 | |
| }
 | |
| 
 | |
| declare i8* @llvm.frameaddress(i32) nounwind readnone
 |