mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-22 23:31:32 +00:00
78e3c90419
-- C.4 and C.5 statements, when NSAA is not equal to SP. -- C.1.cp statement for VA functions. Note: There are no VFP CPRCs in a variadic procedure. Before this patch "NSAA != 0" means "don't use GPRs anymore ". But there are some exceptions in AAPCS. 1. For non VA function: allocate all VFP regs for CPRC. When all VFPs are allocated CPRCs would be sent to stack, while non CPRCs may be still allocated in GRPs. 2. Check that for VA functions all params uses GPRs and then stack. No exceptions, no CPRCs here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180011 91177308-0d34-0410-b5e6-96231b3b80d8
29 lines
1.2 KiB
LLVM
29 lines
1.2 KiB
LLVM
;Check 5.5 Parameter Passing --> Stage C --> C.1.cp statement for VA functions.
|
|
;Note: There are no VFP CPRCs in a variadic procedure.
|
|
;Check that after %C was sent to stack, we set Next Core Register Number to R4.
|
|
|
|
;This test is simplified IR version of
|
|
;test-suite/SingleSource/UnitTests/2002-05-02-ManyArguments.c
|
|
|
|
;RUN: llc -mtriple=thumbv7-linux-gnueabihf -float-abi=hard < %s | FileCheck %s
|
|
|
|
@.str = private unnamed_addr constant [13 x i8] c"%d %d %f %i\0A\00", align 1
|
|
|
|
;CHECK: printfn:
|
|
define void @printfn(i32 %a, i16 signext %b, double %C, i8 signext %E) {
|
|
entry:
|
|
%conv = sext i16 %b to i32
|
|
%conv1 = sext i8 %E to i32
|
|
%call = tail call i32 (i8*, ...)* @printf(
|
|
i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0), ; --> R0
|
|
i32 %a, ; --> R1
|
|
i32 %conv, ; --> R2
|
|
double %C, ; --> SP, NCRN := R4
|
|
;CHECK: str r2, [sp, #8]
|
|
i32 %conv1) ; --> SP+8
|
|
ret void
|
|
}
|
|
|
|
declare i32 @printf(i8* nocapture, ...)
|
|
|