On hjl/interrupt/stage1 branch, I got [hjl@gnu-6 interrupt-2]$ cat y.c extern void bar (void); __attribute__((interrupt)) void foo (void *frame) { bar (); } [hjl@gnu-6 interrupt-2]$ make y.s /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -S -O2 y.c [hjl@gnu-6 interrupt-2]$ cat y.s .file "y.c" .text .p2align 4,,15 .globl foo .type foo, @function foo: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 pushq %r11 pushq %r10 pushq %r9 pushq %r8 pushq %rdi pushq %rsi pushq %rcx pushq %rdx pushq %rax andq $-16, %rsp subq $256, %rsp movups %xmm0, -328(%rbp) .cfi_escape 0x10,0x11,0x3,0x76,0xb8,0x7d .cfi_offset 11, -24 .cfi_offset 10, -32 .cfi_offset 9, -40 .cfi_offset 8, -48 .cfi_offset 5, -56 .cfi_offset 4, -64 .cfi_offset 2, -72 .cfi_offset 1, -80 .cfi_offset 0, -88 movups %xmm1, -312(%rbp) .cfi_escape 0x10,0x12,0x3,0x76,0xc8,0x7d movups %xmm2, -296(%rbp) .cfi_escape 0x10,0x13,0x3,0x76,0xd8,0x7d movups %xmm3, -280(%rbp) .cfi_escape 0x10,0x14,0x3,0x76,0xe8,0x7d movups %xmm4, -264(%rbp) .cfi_escape 0x10,0x15,0x3,0x76,0xf8,0x7d movups %xmm5, -248(%rbp) .cfi_escape 0x10,0x16,0x3,0x76,0x88,0x7e movups %xmm6, -232(%rbp) .cfi_escape 0x10,0x17,0x3,0x76,0x98,0x7e movups %xmm7, -216(%rbp) .cfi_escape 0x10,0x18,0x3,0x76,0xa8,0x7e movups %xmm8, -200(%rbp) .cfi_escape 0x10,0x19,0x3,0x76,0xb8,0x7e movups %xmm9, -184(%rbp) .cfi_escape 0x10,0x1a,0x3,0x76,0xc8,0x7e movups %xmm10, -168(%rbp) .cfi_escape 0x10,0x1b,0x3,0x76,0xd8,0x7e movups %xmm11, -152(%rbp) .cfi_escape 0x10,0x1c,0x3,0x76,0xe8,0x7e movups %xmm12, -136(%rbp) .cfi_escape 0x10,0x1d,0x3,0x76,0xf8,0x7e movups %xmm13, -120(%rbp) .cfi_escape 0x10,0x1e,0x3,0x76,0x88,0x7f movups %xmm14, -104(%rbp) .cfi_escape 0x10,0x1f,0x3,0x76,0x98,0x7f movups %xmm15, -88(%rbp) .cfi_escape 0x10,0x20,0x3,0x76,0xa8,0x7f cld call bar movups -328(%rbp), %xmm0 movups -312(%rbp), %xmm1 movups -296(%rbp), %xmm2 movups -280(%rbp), %xmm3 movups -264(%rbp), %xmm4 movups -248(%rbp), %xmm5 movups -232(%rbp), %xmm6 movups -216(%rbp), %xmm7 movups -200(%rbp), %xmm8 movups -184(%rbp), %xmm9 movups -168(%rbp), %xmm10 movups -152(%rbp), %xmm11 movups -136(%rbp), %xmm12 movups -120(%rbp), %xmm13 movups -104(%rbp), %xmm14 movups -88(%rbp), %xmm15 leaq -72(%rbp), %rsp .cfi_restore 29 .cfi_restore 28 .cfi_restore 27 .cfi_restore 26 .cfi_restore 25 .cfi_restore 24 .cfi_restore 23 .cfi_restore 22 .cfi_restore 21 .cfi_restore 20 .cfi_restore 19 .cfi_restore 18 .cfi_restore 17 popq %rax popq %rdx popq %rcx popq %rsi popq %rdi popq %r8 popq %r9 popq %r10 popq %r11 popq %rbp .cfi_def_cfa 7, 8 iretq .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (GNU) 6.0.0 20160209 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-6 interrupt-2]$ We should use aligned spill/fill for vector registers.