mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Enable Darwin vararg parameters support in assembler macros.
Duplicate the vararg tests for linux and add a tests which mixed vararg arguments with darwin positional parameters. Patch by: Janne Grunau <j@jannau.net> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214799 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3da024594f
commit
2a78a0cd47
@ -3302,7 +3302,7 @@ bool AsmParser::parseDirectiveMacro(SMLoc DirectiveLoc) {
|
||||
|
||||
if (Qualifier == "req")
|
||||
Parameter.Required = true;
|
||||
else if (Qualifier == "vararg" && !IsDarwin)
|
||||
else if (Qualifier == "vararg")
|
||||
Parameter.Vararg = true;
|
||||
else
|
||||
return Error(QualLoc, Qualifier + " is not a valid parameter qualifier "
|
||||
|
@ -1,8 +1,90 @@
|
||||
// RUN: not llvm-mc -triple i386-apple-darwin10 %s 2>&1 | FileCheck %s
|
||||
// RUN: llvm-mc -triple i386-apple-darwin10 %s 2>&1 | FileCheck %s
|
||||
|
||||
// CHECK: error: vararg is not a valid parameter qualifier for 'arg' in macro 'abc'
|
||||
// CHECK: .macro abc arg:vararg
|
||||
|
||||
.macro abc arg:vararg
|
||||
\arg
|
||||
.macro abc a b:vararg
|
||||
.globl "\a, \b"
|
||||
.endm
|
||||
|
||||
// CHECK: .globl "zed0, zed1, zed2"
|
||||
abc zed0, zed1, zed2
|
||||
|
||||
.purgem abc
|
||||
|
||||
.macro ifcc arg:vararg
|
||||
.if cc
|
||||
\arg
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro ifcc2 arg0 arg1:vararg
|
||||
.if cc
|
||||
movl \arg0, \arg1
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro ifcc3 arg0, arg1:vararg
|
||||
.if cc
|
||||
movl \arg0, \arg1
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro ifcc4 arg0, arg1:vararg
|
||||
.if cc
|
||||
movl \arg1, \arg0
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.text
|
||||
|
||||
// CHECK: movl %esp, %ebp
|
||||
// CHECK: subl $0, %esp
|
||||
// CHECK: movl %eax, %ebx
|
||||
// CHECK: movl %ecx, %ebx
|
||||
// CHECK: movl %ecx, %eax
|
||||
// CHECK: movl %eax, %ecx
|
||||
// CHECK: movl %ecx, %eax
|
||||
// CHECK: movl %eax, %ecx
|
||||
.set cc,1
|
||||
ifcc movl %esp, %ebp
|
||||
subl $0, %esp
|
||||
|
||||
ifcc2 %eax, %ebx
|
||||
ifcc2 %ecx, %ebx
|
||||
ifcc3 %ecx, %eax
|
||||
ifcc3 %eax, %ecx
|
||||
ifcc4 %eax, %ecx ## test
|
||||
ifcc4 %ecx, %eax ## test
|
||||
|
||||
// CHECK-NOT movl
|
||||
// CHECK: subl $1, %esp
|
||||
.set cc,0
|
||||
ifcc movl, %esp, %ebp
|
||||
subl $1, %esp
|
||||
|
||||
.macro abc arg:vararg=nop
|
||||
\arg
|
||||
.endm
|
||||
|
||||
.macro abcd arg0=%eax, arg1:vararg=%ebx
|
||||
movl \arg0, \arg1
|
||||
.endm
|
||||
|
||||
.text
|
||||
|
||||
// CHECK: nop
|
||||
abc
|
||||
// CHECK: movl %eax, %ebx
|
||||
abcd ,
|
||||
|
||||
.macro .make_macro start, end, name, body:vararg
|
||||
\start \name
|
||||
\body
|
||||
\end
|
||||
.endmacro
|
||||
|
||||
.make_macro .macro,.endmacro,.mybyte,.byte $0, $2, $1
|
||||
|
||||
.data
|
||||
// CHECK: .byte 10
|
||||
// CHECK: .byte 12
|
||||
// CHECK: .byte 11
|
||||
.mybyte 10,11,12
|
||||
|
Loading…
x
Reference in New Issue
Block a user