• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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	.text
3
4	.seh_pushreg 6
5	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
6
7	.seh_stackalloc 32
8	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
9
10	.def	 f;
11	.scl	2;
12	.type	32;
13	.endef
14	.globl	f                       # -- Begin function f
15	.p2align	4, 0x90
16f:                                      # @f
17.seh_proc f
18	pushq	%rsi
19	.seh_pushreg 6
20	pushq	%rdi
21	.seh_pushreg 7
22	pushq	%rbx
23	.seh_pushreg 3
24	subq	$32, %rsp
25	.seh_stackalloc 0
26	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: stack allocation size must be non-zero
27	.seh_stackalloc 7
28	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: stack allocation size is not a multiple of 8
29	.seh_stackalloc 32
30	.seh_endprologue
31	nop
32	addq	$32, %rsp
33	popq	%rbx
34	popq	%rdi
35	popq	%rsi
36	retq
37	.seh_handlerdata
38	.text
39	.seh_endproc
40
41
42	.seh_pushreg 6
43	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
44
45g:
46	.seh_proc g
47	pushq %rbp
48	.seh_pushreg 3
49	pushq %rsi
50	.seh_pushreg 6
51	.seh_endprologue
52	.seh_setframe 3 255
53	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: you must specify a stack pointer offset
54	.seh_setframe 3, 255
55	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16
56	.seh_setframe 3, 256
57	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: frame offset must be less than or equal to 240
58	.seh_setframe 3, 128
59	.seh_setframe 3, 128
60	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: frame register and offset can be set at most once
61	nop
62	popq %rsi
63	popq %rbp
64	retq
65	.seh_endproc
66
67        .globl  h                       # -- Begin function h
68        .p2align        4, 0x90
69h:                                      # @h
70.seh_proc h
71# %bb.0:                                # %entry
72        subq    $72, %rsp
73        .seh_stackalloc 72
74        movaps  %xmm7, 48(%rsp)         # 16-byte Spill
75        .seh_savexmm 7 44
76	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: you must specify an offset on the stack
77        .seh_savexmm 7, 44
78	# CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16
79        .seh_savexmm 7, 48
80        movaps  %xmm6, 32(%rsp)         # 16-byte Spill
81        .seh_savexmm 6, 32
82        .seh_endprologue
83        movapd  %xmm0, %xmm6
84        callq   getdbl
85        movapd  %xmm0, %xmm7
86        addsd   %xmm6, %xmm7
87        callq   getdbl
88        addsd   %xmm7, %xmm0
89        movaps  32(%rsp), %xmm6         # 16-byte Reload
90        movaps  48(%rsp), %xmm7         # 16-byte Reload
91        addq    $72, %rsp
92        retq
93        .seh_handlerdata
94        .text
95        .seh_endproc
96                                        # -- End function
97