mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	This patch implements the infrastructure to use named register constructs in programs that need access to specific registers (bare metal, kernels, etc). So far, only the stack pointer is supported as a technology preview, but as it is, the intrinsic can already support all non-allocatable registers from any architecture. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208104 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			26 lines
		
	
	
		
			687 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			687 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -mtriple=arm-apple-darwin  | FileCheck %s
 | |
| ; RUN: llc < %s -mtriple=arm-linux-gnueabi | FileCheck %s
 | |
| 
 | |
| define i32 @get_stack() nounwind {
 | |
| entry:
 | |
| ; CHECK-LABEL: get_stack:
 | |
| ; CHECK: mov   r0, sp
 | |
| 	%sp = call i32 @llvm.read_register.i32(metadata !0)
 | |
|   ret i32 %sp
 | |
| }
 | |
| 
 | |
| define void @set_stack(i32 %val) nounwind {
 | |
| entry:
 | |
| ; CHECK-LABEL: set_stack:
 | |
| ; CHECK: mov   sp, r0
 | |
|   call void @llvm.write_register.i32(metadata !0, i32 %val)
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| declare i32 @llvm.read_register.i32(metadata) nounwind
 | |
| declare void @llvm.write_register.i32(metadata, i32) nounwind
 | |
| 
 | |
| ; register unsigned long current_stack_pointer asm("sp");
 | |
| ; CHECK-NOT: .asciz  "sp"
 | |
| !0 = metadata !{metadata !"sp\00"}
 |