1# RUN: llvm-mc -triple x86_64-pc-win32 %s | FileCheck %s 2 3# Round trip via intel syntax printing and back. 4# RUN: llvm-mc -triple x86_64-pc-win32 %s -output-asm-variant=1 | \ 5# RUN: llvm-mc -triple x86_64-pc-win32 -x86-asm-syntax=intel | FileCheck %s 6 7 .text 8 .globl func 9 .def func; .scl 2; .type 32; .endef 10 .seh_proc func 11# CHECK: .seh_proc func 12func: 13 .seh_pushframe @code 14# CHECK: .seh_pushframe @code 15 subq $24, %rsp 16 .seh_stackalloc 24 17# CHECK: .seh_stackalloc 24 18 movq %rsi, 16(%rsp) 19 .seh_savereg %rsi, 16 20# CHECK: .seh_savereg %rsi, 16 21 .seh_savereg 6, 16 22# CHECK: .seh_savereg %rsi, 16 23 movups %xmm8, (%rsp) 24 .seh_savexmm %xmm8, 0 25# CHECK: .seh_savexmm %xmm8, 0 26 .seh_savexmm 8, 0 27# CHECK: .seh_savexmm %xmm8, 0 28 pushq %rbx 29 .seh_pushreg %rbx 30# CHECK: .seh_pushreg %rbx 31 .seh_pushreg 3 32# CHECK: .seh_pushreg %rbx 33 mov %rsp, %rbx 34 .seh_setframe 3, 0 35# CHECK: .seh_setframe %rbx, 0 36 .seh_endprologue 37# CHECK: .seh_endprologue 38 .seh_handler __C_specific_handler, @except 39# CHECK: .seh_handler __C_specific_handler, @except 40 .seh_handlerdata 41# CHECK-NOT: .section{{.*}}.xdata 42# CHECK: .seh_handlerdata 43 .long 0 44 .text 45 .seh_startchained 46 .seh_endprologue 47 .seh_endchained 48# CHECK: .text 49# CHECK: .seh_startchained 50# CHECK: .seh_endprologue 51# CHECK: .seh_endchained 52 lea (%rbx), %rsp 53 pop %rbx 54 addq $24, %rsp 55 ret 56 .seh_endproc 57# CHECK: .seh_endproc 58 59# Re-run more or less the same test, but with intel syntax. Previously LLVM 60# required percent prefixing in the .seh_* directives that take registers. 61 62 .intel_syntax noprefix 63 .text 64 .globl func_intel 65 .def func_intel; .scl 2; .type 32; .endef 66 .seh_proc func_intel 67# CHECK: .seh_proc func_intel 68func_intel: 69 sub RSP, 24 70 .seh_stackalloc 24 71# CHECK: .seh_stackalloc 24 72 mov [16+RSP], RSI 73 .seh_savereg rsi, 16 74# CHECK: .seh_savereg %rsi, 16 75 .seh_savereg 6, 16 76# CHECK: .seh_savereg %rsi, 16 77 movups [RSP], XMM8 78 .seh_savexmm XMM8, 0 79# CHECK: .seh_savexmm %xmm8, 0 80 .seh_savexmm 8, 0 81# CHECK: .seh_savexmm %xmm8, 0 82 push rbx 83 .seh_pushreg rbx 84# CHECK: .seh_pushreg %rbx 85 .seh_pushreg 3 86# CHECK: .seh_pushreg %rbx 87 mov rbx, rsp 88 .seh_setframe rbx, 0 89# CHECK: .seh_setframe %rbx, 0 90 .seh_endprologue 91# CHECK: .seh_endprologue 92 .seh_handler __C_specific_handler, @except 93# CHECK: .seh_handler __C_specific_handler, @except 94 .seh_handlerdata 95# CHECK-NOT: .section{{.*}}.xdata 96# CHECK: .seh_handlerdata 97 .long 0 98 .text 99 .seh_endproc 100