mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Summary: Since pointers are 32-bit on x32 we can use ebp and esp as frame and stack pointer. Some operations like PUSH/POP and CFI_INSTRUCTION still require 64-bit register, so using 64-bit MachineFramePtr where required. X86_64 NaCl uses 64-bit frame/stack pointers, however it's been found that both isTarget64BitLP64 and isTarget64BitILP32 are true for NaCl. Addressing this issue here as well by making isTarget64BitLP64 false. Also mark hasReservedSpillSlot unreachable on X86. See inlined comments. Test Plan: Add one new simple test and upgrade 2 existing with x32 target case. Reviewers: nadav, dschuff Subscribers: llvm-commits, zinovy.nis Differential Revision: http://reviews.llvm.org/D4617 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215091 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			35 lines
		
	
	
		
			859 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			859 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc -mtriple=x86_64-pc-linux < %s | FileCheck %s
 | |
| ; RUN: llc -mtriple=x86_64-pc-linux-gnux32 < %s | FileCheck -check-prefix=X32ABI %s
 | |
| ; RUN: llc -mtriple=x86_64-pc-nacl < %s | FileCheck -check-prefix=NACL %s
 | |
| 
 | |
| ; x32 uses %esp, %ebp as stack and frame pointers
 | |
| 
 | |
| ; CHECK-LABEL: foo
 | |
| ; CHECK: pushq %rbp
 | |
| ; CHECK: movq %rsp, %rbp
 | |
| ; CHECK: movq %rdi, -8(%rbp)
 | |
| ; CHECK: popq %rbp
 | |
| ; X32ABI-LABEL: foo
 | |
| ; X32ABI: pushq %rbp
 | |
| ; X32ABI: movl %esp, %ebp
 | |
| ; X32ABI: movl %edi, -4(%ebp)
 | |
| ; X32ABI: popq %rbp
 | |
| ; NACL-LABEL: foo
 | |
| ; NACL: pushq %rbp
 | |
| ; NACL: movq %rsp, %rbp
 | |
| ; NACL: movl %edi, -4(%rbp)
 | |
| ; NACL: popq %rbp
 | |
| 
 | |
| 
 | |
| define void @foo(i32* %a) #0 {
 | |
| entry:
 | |
|   %a.addr = alloca i32*, align 4
 | |
|   %b = alloca i32*, align 4
 | |
|   store i32* %a, i32** %a.addr, align 4
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| attributes #0 = { nounwind uwtable "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"}
 | |
| 
 | |
| 
 |