/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" { target { ! ilp32 } } } } */

#include "test_sve_acle.h"

/*
** ldff1sb_gather_s64_tied1:
**	ldff1sb	z0\.d, p0/z, \[z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_ZS (ldff1sb_gather_s64_tied1, svint64_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64base_s64 (p0, z0),
		     z0_res = svldff1sb_gather_s64 (p0, z0))

/*
** ldff1sb_gather_s64_untied:
**	ldff1sb	z0\.d, p0/z, \[z1\.d\]
**	ret
*/
TEST_LOAD_GATHER_ZS (ldff1sb_gather_s64_untied, svint64_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64base_s64 (p0, z1),
		     z0_res = svldff1sb_gather_s64 (p0, z1))

/*
** ldff1sb_gather_x0_s64_offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_ZS (ldff1sb_gather_x0_s64_offset, svint64_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64base_offset_s64 (p0, z0, x0),
		     z0_res = svldff1sb_gather_offset_s64 (p0, z0, x0))

/*
** ldff1sb_gather_m1_s64_offset:
**	mov	(x[0-9]+), #?-1
**	ldff1sb	z0\.d, p0/z, \[\1, z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_ZS (ldff1sb_gather_m1_s64_offset, svint64_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64base_offset_s64 (p0, z0, -1),
		     z0_res = svldff1sb_gather_offset_s64 (p0, z0, -1))

/*
** ldff1sb_gather_0_s64_offset:
**	ldff1sb	z0\.d, p0/z, \[z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_ZS (ldff1sb_gather_0_s64_offset, svint64_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64base_offset_s64 (p0, z0, 0),
		     z0_res = svldff1sb_gather_offset_s64 (p0, z0, 0))

/*
** ldff1sb_gather_5_s64_offset:
**	ldff1sb	z0\.d, p0/z, \[z0\.d, #5\]
**	ret
*/
TEST_LOAD_GATHER_ZS (ldff1sb_gather_5_s64_offset, svint64_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64base_offset_s64 (p0, z0, 5),
		     z0_res = svldff1sb_gather_offset_s64 (p0, z0, 5))

/*
** ldff1sb_gather_31_s64_offset:
**	ldff1sb	z0\.d, p0/z, \[z0\.d, #31\]
**	ret
*/
TEST_LOAD_GATHER_ZS (ldff1sb_gather_31_s64_offset, svint64_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64base_offset_s64 (p0, z0, 31),
		     z0_res = svldff1sb_gather_offset_s64 (p0, z0, 31))

/*
** ldff1sb_gather_32_s64_offset:
**	mov	(x[0-9]+), #?32
**	ldff1sb	z0\.d, p0/z, \[\1, z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_ZS (ldff1sb_gather_32_s64_offset, svint64_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64base_offset_s64 (p0, z0, 32),
		     z0_res = svldff1sb_gather_offset_s64 (p0, z0, 32))

/*
** ldff1sb_gather_x0_s64_s64offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_SZ (ldff1sb_gather_x0_s64_s64offset, svint64_t, int8_t, svint64_t,
		     z0_res = svldff1sb_gather_s64offset_s64 (p0, x0, z0),
		     z0_res = svldff1sb_gather_offset_s64 (p0, x0, z0))

/*
** ldff1sb_gather_tied1_s64_s64offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_SZ (ldff1sb_gather_tied1_s64_s64offset, svint64_t, int8_t, svint64_t,
		     z0_res = svldff1sb_gather_s64offset_s64 (p0, x0, z0),
		     z0_res = svldff1sb_gather_offset_s64 (p0, x0, z0))

/*
** ldff1sb_gather_untied_s64_s64offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z1\.d\]
**	ret
*/
TEST_LOAD_GATHER_SZ (ldff1sb_gather_untied_s64_s64offset, svint64_t, int8_t, svint64_t,
		     z0_res = svldff1sb_gather_s64offset_s64 (p0, x0, z1),
		     z0_res = svldff1sb_gather_offset_s64 (p0, x0, z1))

/*
** ldff1sb_gather_ext_s64_s64offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z1\.d, sxtw\]
**	ret
*/
TEST_LOAD_GATHER_SZ (ldff1sb_gather_ext_s64_s64offset, svint64_t, int8_t, svint64_t,
		     z0_res = svldff1sb_gather_s64offset_s64 (p0, x0, svextw_s64_x (p0, z1)),
		     z0_res = svldff1sb_gather_offset_s64 (p0, x0, svextw_x (p0, z1)))

/*
** ldff1sb_gather_x0_s64_u64offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_SZ (ldff1sb_gather_x0_s64_u64offset, svint64_t, int8_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64offset_s64 (p0, x0, z0),
		     z0_res = svldff1sb_gather_offset_s64 (p0, x0, z0))

/*
** ldff1sb_gather_tied1_s64_u64offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z0\.d\]
**	ret
*/
TEST_LOAD_GATHER_SZ (ldff1sb_gather_tied1_s64_u64offset, svint64_t, int8_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64offset_s64 (p0, x0, z0),
		     z0_res = svldff1sb_gather_offset_s64 (p0, x0, z0))

/*
** ldff1sb_gather_untied_s64_u64offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z1\.d\]
**	ret
*/
TEST_LOAD_GATHER_SZ (ldff1sb_gather_untied_s64_u64offset, svint64_t, int8_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64offset_s64 (p0, x0, z1),
		     z0_res = svldff1sb_gather_offset_s64 (p0, x0, z1))

/*
** ldff1sb_gather_ext_s64_u64offset:
**	ldff1sb	z0\.d, p0/z, \[x0, z1\.d, uxtw\]
**	ret
*/
TEST_LOAD_GATHER_SZ (ldff1sb_gather_ext_s64_u64offset, svint64_t, int8_t, svuint64_t,
		     z0_res = svldff1sb_gather_u64offset_s64 (p0, x0, svextw_u64_x (p0, z1)),
		     z0_res = svldff1sb_gather_offset_s64 (p0, x0, svextw_x (p0, z1)))
