xref: /aosp_15_r20/external/llvm/test/MC/AsmParser/directive_seh.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc -triple x86_64-pc-win32 %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker    .text
4*9880d681SAndroid Build Coastguard Worker    .globl func
5*9880d681SAndroid Build Coastguard Worker    .def func; .scl 2; .type 32; .endef
6*9880d681SAndroid Build Coastguard Worker    .seh_proc func
7*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_proc func
8*9880d681SAndroid Build Coastguard Workerfunc:
9*9880d681SAndroid Build Coastguard Worker    .seh_pushframe @code
10*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_pushframe @code
11*9880d681SAndroid Build Coastguard Worker    subq $24, %rsp
12*9880d681SAndroid Build Coastguard Worker    .seh_stackalloc 24
13*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_stackalloc 24
14*9880d681SAndroid Build Coastguard Worker    movq %rsi, 16(%rsp)
15*9880d681SAndroid Build Coastguard Worker    .seh_savereg %rsi, 16
16*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_savereg 6, 16
17*9880d681SAndroid Build Coastguard Worker    movups %xmm8, (%rsp)
18*9880d681SAndroid Build Coastguard Worker    .seh_savexmm %xmm8, 0
19*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_savexmm 8, 0
20*9880d681SAndroid Build Coastguard Worker    pushq %rbx
21*9880d681SAndroid Build Coastguard Worker    .seh_pushreg 3
22*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_pushreg 3
23*9880d681SAndroid Build Coastguard Worker    mov %rsp, %rbx
24*9880d681SAndroid Build Coastguard Worker    .seh_setframe 3, 0
25*9880d681SAndroid Build Coastguard Worker    .seh_endprologue
26*9880d681SAndroid Build Coastguard Worker    .seh_handler __C_specific_handler, @except
27*9880d681SAndroid Build Coastguard Worker    .seh_handlerdata
28*9880d681SAndroid Build Coastguard Worker    .long 0
29*9880d681SAndroid Build Coastguard Worker    .text
30*9880d681SAndroid Build Coastguard Worker    .seh_startchained
31*9880d681SAndroid Build Coastguard Worker    .seh_endprologue
32*9880d681SAndroid Build Coastguard Worker    .seh_endchained
33*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_setframe 3, 0
34*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_endprologue
35*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_handler __C_specific_handler, @except
36*9880d681SAndroid Build Coastguard Worker# CHECK-NOT: .section{{.*}}.xdata
37*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_handlerdata
38*9880d681SAndroid Build Coastguard Worker# CHECK: .text
39*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_startchained
40*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_endprologue
41*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_endchained
42*9880d681SAndroid Build Coastguard Worker    lea (%rbx), %rsp
43*9880d681SAndroid Build Coastguard Worker    pop %rbx
44*9880d681SAndroid Build Coastguard Worker    addq $24, %rsp
45*9880d681SAndroid Build Coastguard Worker    ret
46*9880d681SAndroid Build Coastguard Worker    .seh_endproc
47*9880d681SAndroid Build Coastguard Worker# CHECK: .seh_endproc
48