/* { dg-do run { target { { i?86-*-* x86_64-*-* } && { ! ia32 } } } } */
/* { dg-skip-if "PR81210 sp not aligned to 16 bytes" { *-*-darwin* } } */
/* { dg-options "-muintr -mgeneral-regs-only" } */

#include <x86gprintrin.h>

extern void exit (int);
typedef unsigned int uword_t __attribute__ ((mode (__word__)));
typedef int aligned __attribute__((aligned(64)));

#define UIRRV		0x12345670
#define RIP		0x12345671
#define RFLAGS		0x12345672
#define RSP		0x12345673

#define STRING(x)	XSTRING(x)
#define XSTRING(x)	#x
#define ASMNAME(cname)  ASMNAME2 (__USER_LABEL_PREFIX__, cname)
#define ASMNAME2(prefix, cname) XSTRING (prefix) cname

int
check_int (int *i, int align)
{
  *i = 20;
  if ((((ptrdiff_t) i) & (align - 1)) != 0)
    __builtin_abort ();
  return *i;
}

void
__attribute__((interrupt, used))
fn (struct __uintr_frame *frame, uword_t uirrv)
{
  aligned i;
  if (check_int (&i, __alignof__(i)) != i)
    __builtin_abort ();

  if (UIRRV != uirrv)
    __builtin_abort ();
  if (RIP != frame->rip)
    __builtin_abort ();
  if (RFLAGS != frame->rflags)
    __builtin_abort ();
  if (RSP != frame->rsp)
    __builtin_abort ();

  exit (0);
}

int
main ()
{
  asm ("push	$" STRING (RSP) ";		\
	push	$" STRING (RFLAGS) ";		\
	push	$" STRING (RIP) ";		\
	push	$" STRING (UIRRV) ";		\
	jmp	" ASMNAME ("fn"));
  return 0;
}
