mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
[arm-fast-isel] Add support for vararg function calls.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160500 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -178,3 +178,46 @@ entry:
|
||||
%tmp1 = udiv i32 %a, %b ; <i32> [#uses=1]
|
||||
ret i32 %tmp1
|
||||
}
|
||||
|
||||
define i32 @VarArg() nounwind {
|
||||
entry:
|
||||
%i = alloca i32, align 4
|
||||
%j = alloca i32, align 4
|
||||
%k = alloca i32, align 4
|
||||
%m = alloca i32, align 4
|
||||
%n = alloca i32, align 4
|
||||
%tmp = alloca i32, align 4
|
||||
%0 = load i32* %i, align 4
|
||||
%1 = load i32* %j, align 4
|
||||
%2 = load i32* %k, align 4
|
||||
%3 = load i32* %m, align 4
|
||||
%4 = load i32* %n, align 4
|
||||
; ARM: VarArg
|
||||
; ARM: mov r7, sp
|
||||
; ARM: movw r0, #5
|
||||
; ARM: ldr r1, [r7, #-4]
|
||||
; ARM: ldr r2, [r7, #-8]
|
||||
; ARM: ldr r3, [r7, #-12]
|
||||
; ARM: ldr r9, [sp, #16]
|
||||
; ARM: ldr r12, [sp, #12]
|
||||
; ARM: str r9, [sp]
|
||||
; ARM: str r12, [sp, #4]
|
||||
; ARM: bl _CallVariadic
|
||||
; THUMB: mov r7, sp
|
||||
; THUMB: movs r0, #5
|
||||
; THUMB: movt r0, #0
|
||||
; THUMB: ldr r1, [sp, #28]
|
||||
; THUMB: ldr r2, [sp, #24]
|
||||
; THUMB: ldr r3, [sp, #20]
|
||||
; THUMB: ldr.w r9, [sp, #16]
|
||||
; THUMB: ldr.w r12, [sp, #12]
|
||||
; THUMB: str.w r9, [sp]
|
||||
; THUMB: str.w r12, [sp, #4]
|
||||
; THUMB: bl _CallVariadic
|
||||
%call = call i32 (i32, ...)* @CallVariadic(i32 5, i32 %0, i32 %1, i32 %2, i32 %3, i32 %4)
|
||||
store i32 %call, i32* %tmp, align 4
|
||||
%5 = load i32* %tmp, align 4
|
||||
ret i32 %5
|
||||
}
|
||||
|
||||
declare i32 @CallVariadic(i32, ...)
|
||||
|
Reference in New Issue
Block a user