/* { dg-options "-O2 -fno-tree-loop-distribute-patterns" } */
/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */

#include "ldp_stp_14.h"

/*
** const_2_double_0:
**	stp	xzr, xzr, \[x0\]
**	ret
*/
CONST_FN (2, double, 0);

/* No preference between vectorizing or not vectorizing here.  */
CONST_FN (4, double, 0);

/*
** const_8_double_0:
**	movi	v([0-9]+)\.2d, .*
**	stp	q\1, q\1, \[x0\]
**	stp	q\1, q\1, \[x0, #?32\]
**	ret
*/
CONST_FN (8, double, 0);

/*
** dup_2_double:
**	stp	d0, d0, \[x0\]
**	ret
*/
DUP_FN (2, double);

/*
** dup_4_double:
**	stp	d0, d0, \[x0\]
**	stp	d0, d0, \[x0, #?16\]
**	ret
*/
DUP_FN (4, double);

/*
** dup_8_double:
**	dup	v([0-9])\.2d, v0\.d\[0\]
**	stp	q\1, q\1, \[x0\]
**	stp	q\1, q\1, \[x0, #?32\]
**	ret
*/
DUP_FN (8, double);

/*
** dup_16_double:
**	dup	v([0-9])\.2d, v0\.d\[0\]
**	stp	q\1, q\1, \[x0\]
**	stp	q\1, q\1, \[x0, #?32\]
**	stp	q\1, q\1, \[x0, #?64\]
**	stp	q\1, q\1, \[x0, #?96\]
**	ret
*/
DUP_FN (16, double);

/*
** cons2_1_double:
**	stp	d0, d1, \[x0\]
**	ret
*/
CONS2_FN (1, double);

/*
** cons2_2_double:
**	stp	d0, d1, \[x0\]
**	stp	d0, d1, \[x0, #?16\]
**	ret
*/
CONS2_FN (2, double);

/*
** cons2_4_double:
**	...
**	stp	q[0-9]+, .*
**	ret
*/
CONS2_FN (4, double);

/*
** cons2_8_double:
**	...
**	stp	q[0-9]+, .*
**	ret
*/
CONS2_FN (8, double);

/*
** cons4_1_double:
**	stp	d0, d1, \[x0\]
**	stp	d2, d3, \[x0, #?16\]
**	ret
*/
CONS4_FN (1, double);

/*
** cons4_2_double:
**	stp	d0, d1, \[x0\]
**	stp	d2, d3, \[x0, #?16\]
**	stp	d0, d1, \[x0, #?32\]
**	stp	d2, d3, \[x0, #?48\]
**	ret
*/
CONS4_FN (2, double);

/*
** cons2_8_double:
**	...
**	stp	q[0-9]+, .*
**	ret
*/
CONS4_FN (4, double);

/*
** cons2_8_double:
**	...
**	stp	q[0-9]+, .*
**	ret
*/
CONS4_FN (8, double);
