[llvm-readobj] - Simplify stack-sizes.test test case.
[llvm-complete.git] / test / MC / AsmParser / seh-directive-errors.s
blob8f4cc211d1c0296eccfd6ea79772c848c76571fc
1 # RUN: not llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=error:
2 # RUN: not llvm-mc -triple x86_64-windows-msvc %s -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=error:
3 .text
5 # CHECK: error: .seh_ directive must appear within an active frame
6 .seh_handlerdata
8 .seh_pushreg %rsi
9 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
11 .seh_stackalloc 32
12 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
14 .def f;
15 .scl 2;
16 .type 32;
17 .endef
18 .globl f # -- Begin function f
19 .p2align 4, 0x90
20 f: # @f
21 .seh_proc f
22 pushq %rsi
23 .seh_pushreg %rsi
24 pushq %rdi
25 .seh_pushreg %rdi
26 pushq %rbx
27 .seh_pushreg %rbx
28 subq $32, %rsp
29 .seh_stackalloc 0
30 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: stack allocation size must be non-zero
31 .seh_stackalloc 7
32 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: stack allocation size is not a multiple of 8
33 .seh_stackalloc 32
34 .seh_endprologue
35 nop
36 addq $32, %rsp
37 popq %rbx
38 popq %rdi
39 popq %rsi
40 retq
41 .seh_handlerdata
42 .text
43 .seh_endproc
46 .seh_pushreg %rsi
47 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
50 .seh_proc g
51 pushq %rbp
52 .seh_pushreg %rbx
53 pushq %rsi
54 .seh_pushreg %rsi
55 .seh_endprologue
56 .seh_setframe 3 255
57 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: you must specify a stack pointer offset
58 .seh_setframe 3, 255
59 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16
60 .seh_setframe 3, 256
61 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: frame offset must be less than or equal to 240
62 .seh_setframe 3, 128
63 .seh_setframe 3, 128
64 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: frame register and offset can be set at most once
65 nop
66 popq %rsi
67 popq %rbp
68 retq
69 .seh_endproc
71 .globl h # -- Begin function h
72 .p2align 4, 0x90
73 h: # @h
74 .seh_proc h
75 # %bb.0: # %entry
76 subq $72, %rsp
77 .seh_stackalloc 72
78 movaps %xmm7, 48(%rsp) # 16-byte Spill
79 .seh_savexmm 7 44
80 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: you must specify an offset on the stack
81 .seh_savexmm %xmm7, 44
82 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16
83 .seh_savexmm %xmm7, 48
84 movaps %xmm6, 32(%rsp) # 16-byte Spill
85 .seh_savexmm %xmm6, 32
86 .seh_endprologue
87 movapd %xmm0, %xmm6
88 callq getdbl
89 movapd %xmm0, %xmm7
90 addsd %xmm6, %xmm7
91 callq getdbl
92 addsd %xmm7, %xmm0
93 movaps 32(%rsp), %xmm6 # 16-byte Reload
94 movaps 48(%rsp), %xmm7 # 16-byte Reload
95 addq $72, %rsp
96 retq
97 .seh_handlerdata
98 .text
99 .seh_endproc
100 # -- End function
102 .globl i
103 .def i; .scl 2; .type 32; .endef
104 .p2align 4, 0x90
106 .seh_proc i
107 pushq %rbp
108 .seh_pushreg 17
109 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: incorrect register number for use with this directive
110 pushq %rbx
111 .seh_pushreg %xmm0
112 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: register is not supported for use with this directive
113 leaq 16(%rsp), %rbp
114 .seh_setframe %xmm0, 16
115 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: register is not supported for use with this directive
116 .seh_endprologue
118 .seh_endproc