/* ldst-reg-reg-offset.s Test file for AArch64 load-store reg. (reg.offset)
   instructions.

   Copyright 2011, 2012 Free Software Foundation, Inc.
   Contributed by ARM Ltd.

   This file is part of GAS.

   GAS is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the license, or
   (at your option) any later version.

   GAS is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING3. If not,
   see <http://www.gnu.org/licenses/>.  */

/* Only instructions loading from/storing to FP/SIMD register are
   tested here.  */

	.macro	op3_32 op, reg, ext, imm
	.ifc \imm, -1
	\op	\reg\()7, [sp, w7, \ext]
	.else
	\op	\reg\()7, [sp, w7, \ext #\imm]
	.endif
	.endm

	.macro	op3_64 op, reg, ext, imm
	.ifc \imm, -1
	\op	\reg\()7, [sp, x7, \ext]
	.else
	\op	\reg\()7, [sp, x7, \ext #\imm]
	.endif
	.endm

	.macro	op3 op, reg, ext, imm=-1
	.ifc \ext, uxtw
	op3_32	\op, \reg, \ext, \imm
	.endif
	.ifc \ext, sxtw 
	op3_32	\op, \reg, \ext, \imm
	.endif
	.ifc \ext, lsl 
		.ifnc \imm, -1
		// shift <amount> is mandatory when 'lsl' is used
		op3_64	\op, \reg, \ext, \imm
		.else
		// absent shift; lsl by default
		\op	\reg\()7, [sp, x7]
		.endif
	.endif
	.ifc \ext, sxtx
	op3_64	\op, \reg, \ext, \imm
	.endif
	.endm

	.macro shift op, ext
	op3	\op, b, \ext
	op3	\op, b, \ext, 0
	op3	\op, h, \ext, 0
	op3	\op, h, \ext, 1
	op3	\op, s, \ext, 0
	op3	\op, s, \ext, 2
	op3	\op, d, \ext, 0
	op3	\op, d, \ext, 3
	op3	\op, q, \ext, 0
	op3	\op, q, \ext, 4 
	.endm

	.macro extend op
	.irp ext, uxtw, lsl, sxtw, sxtx
	shift	\op, \ext
	.endr
	.endm

	.macro ld_or_st op
	extend	\op
	.endm

func:
	ld_or_st	str
	ld_or_st	ldr
