119 lines
3.4 KiB
ArmAsm
119 lines
3.4 KiB
ArmAsm
|
# RUN: not llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=error:
|
||
|
# RUN: not llvm-mc -triple x86_64-windows-msvc %s -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=error:
|
||
|
.text
|
||
|
|
||
|
# CHECK: error: .seh_ directive must appear within an active frame
|
||
|
.seh_handlerdata
|
||
|
|
||
|
.seh_pushreg %rsi
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
|
||
|
|
||
|
.seh_stackalloc 32
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
|
||
|
|
||
|
.def f;
|
||
|
.scl 2;
|
||
|
.type 32;
|
||
|
.endef
|
||
|
.globl f # -- Begin function f
|
||
|
.p2align 4, 0x90
|
||
|
f: # @f
|
||
|
.seh_proc f
|
||
|
pushq %rsi
|
||
|
.seh_pushreg %rsi
|
||
|
pushq %rdi
|
||
|
.seh_pushreg %rdi
|
||
|
pushq %rbx
|
||
|
.seh_pushreg %rbx
|
||
|
subq $32, %rsp
|
||
|
.seh_stackalloc 0
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: stack allocation size must be non-zero
|
||
|
.seh_stackalloc 7
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: stack allocation size is not a multiple of 8
|
||
|
.seh_stackalloc 32
|
||
|
.seh_endprologue
|
||
|
nop
|
||
|
addq $32, %rsp
|
||
|
popq %rbx
|
||
|
popq %rdi
|
||
|
popq %rsi
|
||
|
retq
|
||
|
.seh_handlerdata
|
||
|
.text
|
||
|
.seh_endproc
|
||
|
|
||
|
|
||
|
.seh_pushreg %rsi
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
|
||
|
|
||
|
g:
|
||
|
.seh_proc g
|
||
|
pushq %rbp
|
||
|
.seh_pushreg %rbx
|
||
|
pushq %rsi
|
||
|
.seh_pushreg %rsi
|
||
|
.seh_endprologue
|
||
|
.seh_setframe 3 255
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: you must specify a stack pointer offset
|
||
|
.seh_setframe 3, 255
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16
|
||
|
.seh_setframe 3, 256
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: frame offset must be less than or equal to 240
|
||
|
.seh_setframe 3, 128
|
||
|
.seh_setframe 3, 128
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: frame register and offset can be set at most once
|
||
|
nop
|
||
|
popq %rsi
|
||
|
popq %rbp
|
||
|
retq
|
||
|
.seh_endproc
|
||
|
|
||
|
.globl h # -- Begin function h
|
||
|
.p2align 4, 0x90
|
||
|
h: # @h
|
||
|
.seh_proc h
|
||
|
# %bb.0: # %entry
|
||
|
subq $72, %rsp
|
||
|
.seh_stackalloc 72
|
||
|
movaps %xmm7, 48(%rsp) # 16-byte Spill
|
||
|
.seh_savexmm 7 44
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: you must specify an offset on the stack
|
||
|
.seh_savexmm %xmm7, 44
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16
|
||
|
.seh_savexmm %xmm7, 48
|
||
|
movaps %xmm6, 32(%rsp) # 16-byte Spill
|
||
|
.seh_savexmm %xmm6, 32
|
||
|
.seh_endprologue
|
||
|
movapd %xmm0, %xmm6
|
||
|
callq getdbl
|
||
|
movapd %xmm0, %xmm7
|
||
|
addsd %xmm6, %xmm7
|
||
|
callq getdbl
|
||
|
addsd %xmm7, %xmm0
|
||
|
movaps 32(%rsp), %xmm6 # 16-byte Reload
|
||
|
movaps 48(%rsp), %xmm7 # 16-byte Reload
|
||
|
addq $72, %rsp
|
||
|
retq
|
||
|
.seh_handlerdata
|
||
|
.text
|
||
|
.seh_endproc
|
||
|
# -- End function
|
||
|
|
||
|
.globl i
|
||
|
.def i; .scl 2; .type 32; .endef
|
||
|
.p2align 4, 0x90
|
||
|
i:
|
||
|
.seh_proc i
|
||
|
pushq %rbp
|
||
|
.seh_pushreg 17
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: incorrect register number for use with this directive
|
||
|
pushq %rbx
|
||
|
.seh_pushreg %xmm0
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: register is not supported for use with this directive
|
||
|
leaq 16(%rsp), %rbp
|
||
|
.seh_setframe %xmm0, 16
|
||
|
# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: register is not supported for use with this directive
|
||
|
.seh_endprologue
|
||
|
ret
|
||
|
.seh_endproc
|