1/* ldst-reg-pair.s Test file for AArch64 load-store reg.pair instructions.
2
3   Copyright (C) 2011-2014 Free Software Foundation, Inc.
4   Contributed by ARM Ltd.
5
6   This file is part of GAS.
7
8   GAS is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 3 of the license, or
11   (at your option) any later version.
12
13   GAS is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program; see the file COPYING3. If not,
20   see <http://www.gnu.org/licenses/>.  */
21
22/* Includes:
23 *   Load-store reg.pair (offset)
24 *   Load-store reg.pair (post-ind.)
25 *   Load-store reg.pair (pre-ind.)
26 *   Load-store na.pair (pre-ind.)
27 */
28
29	// offset format
30	.macro	op3_offset op, reg, imm
31	\op	\reg\()7, \reg\()15, [sp, #\imm]
32	.endm
33
34	// post-ind. format
35	.macro	op3_post_ind op, reg, imm
36	\op	\reg\()7, \reg\()15, [sp], #\imm
37	.endm
38
39	// pre-ind. format
40	.macro	op3_pre_ind op, reg, imm
41	\op	\reg\()7, \reg\()15, [sp, #\imm]!
42	.endm
43
44	.macro	op3 op, reg, size, type
45	// a variety of values for the imm7 field
46	.irp	imm7, -64, -31, -1, 0, 15, 63
47		// offset format
48		.ifc \type, 1
49		op3_offset	\op, \reg, "(\imm7*\size)"
50		.endif
51		// post-ind. format
52		.ifc \type, 2
53		op3_post_ind	\op, \reg, "(\imm7*\size)"
54		.endif
55		// pre-ind. format
56		.ifc \type, 3
57		op3_pre_ind	\op, \reg, "(\imm7*\size)"
58		.endif
59	.endr
60	.endm
61
62	.macro ldst_reg_pair type
63	//     	op, reg, size(in byte) of one of the pair, type
64	op3	stp, w, 4, \type
65	op3	ldp, w, 4, \type
66
67	op3	ldpsw, x, 4, \type
68
69	op3	stp, x, 8, \type
70	op3	ldp, x, 8, \type
71
72	op3	stp, s, 4, \type
73	op3	ldp, s, 4, \type
74
75	op3	stp, d, 8, \type
76	op3	ldp, d, 8, \type
77
78	op3	stp, q, 16, \type
79	op3	ldp, q, 16, \type
80	.endm
81
82	.macro ldst_reg_na_pair type
83	//     	op, reg, size(in byte) of one of the pair, type
84	op3	stnp, w, 4, \type
85	op3	ldnp, w, 4, \type
86
87	op3	stnp, x, 8, \type
88	op3	ldnp, x, 8, \type
89
90	op3	stnp, s, 4, \type
91	op3	ldnp, s, 4, \type
92
93	op3	stnp, d, 8, \type
94	op3	ldnp, d, 8, \type
95
96	op3	stnp, q, 16, \type
97	op3	ldnp, q, 16, \type
98	.endm
99
100func:
101	// Load-store reg.pair (offset)
102	ldst_reg_pair	1
103
104	// Load-store reg.pair (post-ind.)
105	ldst_reg_pair	2
106
107	// Load-store reg.pair (pre-ind.)
108	ldst_reg_pair	3
109
110	// Load-store na.pair (offset)
111	ldst_reg_na_pair	1
112