xref: /openbmc/linux/arch/s390/include/asm/vx-insn-asm.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1*706f2adaSHeiko Carstens /* SPDX-License-Identifier: GPL-2.0 */
2*706f2adaSHeiko Carstens /*
3*706f2adaSHeiko Carstens  * Support for Vector Instructions
4*706f2adaSHeiko Carstens  *
5*706f2adaSHeiko Carstens  * Assembler macros to generate .byte/.word code for particular
6*706f2adaSHeiko Carstens  * vector instructions that are supported by recent binutils (>= 2.26) only.
7*706f2adaSHeiko Carstens  *
8*706f2adaSHeiko Carstens  * Copyright IBM Corp. 2015
9*706f2adaSHeiko Carstens  * Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
10*706f2adaSHeiko Carstens  */
11*706f2adaSHeiko Carstens 
12*706f2adaSHeiko Carstens #ifndef __ASM_S390_VX_INSN_INTERNAL_H
13*706f2adaSHeiko Carstens #define __ASM_S390_VX_INSN_INTERNAL_H
14*706f2adaSHeiko Carstens 
15*706f2adaSHeiko Carstens #ifndef __ASM_S390_VX_INSN_H
16*706f2adaSHeiko Carstens #error only <asm/vx-insn.h> can be included directly
17*706f2adaSHeiko Carstens #endif
18*706f2adaSHeiko Carstens 
19*706f2adaSHeiko Carstens #ifdef __ASSEMBLY__
20*706f2adaSHeiko Carstens 
21*706f2adaSHeiko Carstens /* Macros to generate vector instruction byte code */
22*706f2adaSHeiko Carstens 
23*706f2adaSHeiko Carstens /* GR_NUM - Retrieve general-purpose register number
24*706f2adaSHeiko Carstens  *
25*706f2adaSHeiko Carstens  * @opd:	Operand to store register number
26*706f2adaSHeiko Carstens  * @r64:	String designation register in the format "%rN"
27*706f2adaSHeiko Carstens  */
28*706f2adaSHeiko Carstens .macro	GR_NUM	opd gr
29*706f2adaSHeiko Carstens 	\opd = 255
30*706f2adaSHeiko Carstens 	.ifc \gr,%r0
31*706f2adaSHeiko Carstens 		\opd = 0
32*706f2adaSHeiko Carstens 	.endif
33*706f2adaSHeiko Carstens 	.ifc \gr,%r1
34*706f2adaSHeiko Carstens 		\opd = 1
35*706f2adaSHeiko Carstens 	.endif
36*706f2adaSHeiko Carstens 	.ifc \gr,%r2
37*706f2adaSHeiko Carstens 		\opd = 2
38*706f2adaSHeiko Carstens 	.endif
39*706f2adaSHeiko Carstens 	.ifc \gr,%r3
40*706f2adaSHeiko Carstens 		\opd = 3
41*706f2adaSHeiko Carstens 	.endif
42*706f2adaSHeiko Carstens 	.ifc \gr,%r4
43*706f2adaSHeiko Carstens 		\opd = 4
44*706f2adaSHeiko Carstens 	.endif
45*706f2adaSHeiko Carstens 	.ifc \gr,%r5
46*706f2adaSHeiko Carstens 		\opd = 5
47*706f2adaSHeiko Carstens 	.endif
48*706f2adaSHeiko Carstens 	.ifc \gr,%r6
49*706f2adaSHeiko Carstens 		\opd = 6
50*706f2adaSHeiko Carstens 	.endif
51*706f2adaSHeiko Carstens 	.ifc \gr,%r7
52*706f2adaSHeiko Carstens 		\opd = 7
53*706f2adaSHeiko Carstens 	.endif
54*706f2adaSHeiko Carstens 	.ifc \gr,%r8
55*706f2adaSHeiko Carstens 		\opd = 8
56*706f2adaSHeiko Carstens 	.endif
57*706f2adaSHeiko Carstens 	.ifc \gr,%r9
58*706f2adaSHeiko Carstens 		\opd = 9
59*706f2adaSHeiko Carstens 	.endif
60*706f2adaSHeiko Carstens 	.ifc \gr,%r10
61*706f2adaSHeiko Carstens 		\opd = 10
62*706f2adaSHeiko Carstens 	.endif
63*706f2adaSHeiko Carstens 	.ifc \gr,%r11
64*706f2adaSHeiko Carstens 		\opd = 11
65*706f2adaSHeiko Carstens 	.endif
66*706f2adaSHeiko Carstens 	.ifc \gr,%r12
67*706f2adaSHeiko Carstens 		\opd = 12
68*706f2adaSHeiko Carstens 	.endif
69*706f2adaSHeiko Carstens 	.ifc \gr,%r13
70*706f2adaSHeiko Carstens 		\opd = 13
71*706f2adaSHeiko Carstens 	.endif
72*706f2adaSHeiko Carstens 	.ifc \gr,%r14
73*706f2adaSHeiko Carstens 		\opd = 14
74*706f2adaSHeiko Carstens 	.endif
75*706f2adaSHeiko Carstens 	.ifc \gr,%r15
76*706f2adaSHeiko Carstens 		\opd = 15
77*706f2adaSHeiko Carstens 	.endif
78*706f2adaSHeiko Carstens 	.if \opd == 255
79*706f2adaSHeiko Carstens 		\opd = \gr
80*706f2adaSHeiko Carstens 	.endif
81*706f2adaSHeiko Carstens .endm
82*706f2adaSHeiko Carstens 
83*706f2adaSHeiko Carstens /* VX_NUM - Retrieve vector register number
84*706f2adaSHeiko Carstens  *
85*706f2adaSHeiko Carstens  * @opd:	Operand to store register number
86*706f2adaSHeiko Carstens  * @vxr:	String designation register in the format "%vN"
87*706f2adaSHeiko Carstens  *
88*706f2adaSHeiko Carstens  * The vector register number is used for as input number to the
89*706f2adaSHeiko Carstens  * instruction and, as well as, to compute the RXB field of the
90*706f2adaSHeiko Carstens  * instruction.
91*706f2adaSHeiko Carstens  */
92*706f2adaSHeiko Carstens .macro	VX_NUM	opd vxr
93*706f2adaSHeiko Carstens 	\opd = 255
94*706f2adaSHeiko Carstens 	.ifc \vxr,%v0
95*706f2adaSHeiko Carstens 		\opd = 0
96*706f2adaSHeiko Carstens 	.endif
97*706f2adaSHeiko Carstens 	.ifc \vxr,%v1
98*706f2adaSHeiko Carstens 		\opd = 1
99*706f2adaSHeiko Carstens 	.endif
100*706f2adaSHeiko Carstens 	.ifc \vxr,%v2
101*706f2adaSHeiko Carstens 		\opd = 2
102*706f2adaSHeiko Carstens 	.endif
103*706f2adaSHeiko Carstens 	.ifc \vxr,%v3
104*706f2adaSHeiko Carstens 		\opd = 3
105*706f2adaSHeiko Carstens 	.endif
106*706f2adaSHeiko Carstens 	.ifc \vxr,%v4
107*706f2adaSHeiko Carstens 		\opd = 4
108*706f2adaSHeiko Carstens 	.endif
109*706f2adaSHeiko Carstens 	.ifc \vxr,%v5
110*706f2adaSHeiko Carstens 		\opd = 5
111*706f2adaSHeiko Carstens 	.endif
112*706f2adaSHeiko Carstens 	.ifc \vxr,%v6
113*706f2adaSHeiko Carstens 		\opd = 6
114*706f2adaSHeiko Carstens 	.endif
115*706f2adaSHeiko Carstens 	.ifc \vxr,%v7
116*706f2adaSHeiko Carstens 		\opd = 7
117*706f2adaSHeiko Carstens 	.endif
118*706f2adaSHeiko Carstens 	.ifc \vxr,%v8
119*706f2adaSHeiko Carstens 		\opd = 8
120*706f2adaSHeiko Carstens 	.endif
121*706f2adaSHeiko Carstens 	.ifc \vxr,%v9
122*706f2adaSHeiko Carstens 		\opd = 9
123*706f2adaSHeiko Carstens 	.endif
124*706f2adaSHeiko Carstens 	.ifc \vxr,%v10
125*706f2adaSHeiko Carstens 		\opd = 10
126*706f2adaSHeiko Carstens 	.endif
127*706f2adaSHeiko Carstens 	.ifc \vxr,%v11
128*706f2adaSHeiko Carstens 		\opd = 11
129*706f2adaSHeiko Carstens 	.endif
130*706f2adaSHeiko Carstens 	.ifc \vxr,%v12
131*706f2adaSHeiko Carstens 		\opd = 12
132*706f2adaSHeiko Carstens 	.endif
133*706f2adaSHeiko Carstens 	.ifc \vxr,%v13
134*706f2adaSHeiko Carstens 		\opd = 13
135*706f2adaSHeiko Carstens 	.endif
136*706f2adaSHeiko Carstens 	.ifc \vxr,%v14
137*706f2adaSHeiko Carstens 		\opd = 14
138*706f2adaSHeiko Carstens 	.endif
139*706f2adaSHeiko Carstens 	.ifc \vxr,%v15
140*706f2adaSHeiko Carstens 		\opd = 15
141*706f2adaSHeiko Carstens 	.endif
142*706f2adaSHeiko Carstens 	.ifc \vxr,%v16
143*706f2adaSHeiko Carstens 		\opd = 16
144*706f2adaSHeiko Carstens 	.endif
145*706f2adaSHeiko Carstens 	.ifc \vxr,%v17
146*706f2adaSHeiko Carstens 		\opd = 17
147*706f2adaSHeiko Carstens 	.endif
148*706f2adaSHeiko Carstens 	.ifc \vxr,%v18
149*706f2adaSHeiko Carstens 		\opd = 18
150*706f2adaSHeiko Carstens 	.endif
151*706f2adaSHeiko Carstens 	.ifc \vxr,%v19
152*706f2adaSHeiko Carstens 		\opd = 19
153*706f2adaSHeiko Carstens 	.endif
154*706f2adaSHeiko Carstens 	.ifc \vxr,%v20
155*706f2adaSHeiko Carstens 		\opd = 20
156*706f2adaSHeiko Carstens 	.endif
157*706f2adaSHeiko Carstens 	.ifc \vxr,%v21
158*706f2adaSHeiko Carstens 		\opd = 21
159*706f2adaSHeiko Carstens 	.endif
160*706f2adaSHeiko Carstens 	.ifc \vxr,%v22
161*706f2adaSHeiko Carstens 		\opd = 22
162*706f2adaSHeiko Carstens 	.endif
163*706f2adaSHeiko Carstens 	.ifc \vxr,%v23
164*706f2adaSHeiko Carstens 		\opd = 23
165*706f2adaSHeiko Carstens 	.endif
166*706f2adaSHeiko Carstens 	.ifc \vxr,%v24
167*706f2adaSHeiko Carstens 		\opd = 24
168*706f2adaSHeiko Carstens 	.endif
169*706f2adaSHeiko Carstens 	.ifc \vxr,%v25
170*706f2adaSHeiko Carstens 		\opd = 25
171*706f2adaSHeiko Carstens 	.endif
172*706f2adaSHeiko Carstens 	.ifc \vxr,%v26
173*706f2adaSHeiko Carstens 		\opd = 26
174*706f2adaSHeiko Carstens 	.endif
175*706f2adaSHeiko Carstens 	.ifc \vxr,%v27
176*706f2adaSHeiko Carstens 		\opd = 27
177*706f2adaSHeiko Carstens 	.endif
178*706f2adaSHeiko Carstens 	.ifc \vxr,%v28
179*706f2adaSHeiko Carstens 		\opd = 28
180*706f2adaSHeiko Carstens 	.endif
181*706f2adaSHeiko Carstens 	.ifc \vxr,%v29
182*706f2adaSHeiko Carstens 		\opd = 29
183*706f2adaSHeiko Carstens 	.endif
184*706f2adaSHeiko Carstens 	.ifc \vxr,%v30
185*706f2adaSHeiko Carstens 		\opd = 30
186*706f2adaSHeiko Carstens 	.endif
187*706f2adaSHeiko Carstens 	.ifc \vxr,%v31
188*706f2adaSHeiko Carstens 		\opd = 31
189*706f2adaSHeiko Carstens 	.endif
190*706f2adaSHeiko Carstens 	.if \opd == 255
191*706f2adaSHeiko Carstens 		\opd = \vxr
192*706f2adaSHeiko Carstens 	.endif
193*706f2adaSHeiko Carstens .endm
194*706f2adaSHeiko Carstens 
195*706f2adaSHeiko Carstens /* RXB - Compute most significant bit used vector registers
196*706f2adaSHeiko Carstens  *
197*706f2adaSHeiko Carstens  * @rxb:	Operand to store computed RXB value
198*706f2adaSHeiko Carstens  * @v1:		First vector register designated operand
199*706f2adaSHeiko Carstens  * @v2:		Second vector register designated operand
200*706f2adaSHeiko Carstens  * @v3:		Third vector register designated operand
201*706f2adaSHeiko Carstens  * @v4:		Fourth vector register designated operand
202*706f2adaSHeiko Carstens  */
203*706f2adaSHeiko Carstens .macro	RXB	rxb v1 v2=0 v3=0 v4=0
204*706f2adaSHeiko Carstens 	\rxb = 0
205*706f2adaSHeiko Carstens 	.if \v1 & 0x10
206*706f2adaSHeiko Carstens 		\rxb = \rxb | 0x08
207*706f2adaSHeiko Carstens 	.endif
208*706f2adaSHeiko Carstens 	.if \v2 & 0x10
209*706f2adaSHeiko Carstens 		\rxb = \rxb | 0x04
210*706f2adaSHeiko Carstens 	.endif
211*706f2adaSHeiko Carstens 	.if \v3 & 0x10
212*706f2adaSHeiko Carstens 		\rxb = \rxb | 0x02
213*706f2adaSHeiko Carstens 	.endif
214*706f2adaSHeiko Carstens 	.if \v4 & 0x10
215*706f2adaSHeiko Carstens 		\rxb = \rxb | 0x01
216*706f2adaSHeiko Carstens 	.endif
217*706f2adaSHeiko Carstens .endm
218*706f2adaSHeiko Carstens 
219*706f2adaSHeiko Carstens /* MRXB - Generate Element Size Control and RXB value
220*706f2adaSHeiko Carstens  *
221*706f2adaSHeiko Carstens  * @m:		Element size control
222*706f2adaSHeiko Carstens  * @v1:		First vector register designated operand (for RXB)
223*706f2adaSHeiko Carstens  * @v2:		Second vector register designated operand (for RXB)
224*706f2adaSHeiko Carstens  * @v3:		Third vector register designated operand (for RXB)
225*706f2adaSHeiko Carstens  * @v4:		Fourth vector register designated operand (for RXB)
226*706f2adaSHeiko Carstens  */
227*706f2adaSHeiko Carstens .macro	MRXB	m v1 v2=0 v3=0 v4=0
228*706f2adaSHeiko Carstens 	rxb = 0
229*706f2adaSHeiko Carstens 	RXB	rxb, \v1, \v2, \v3, \v4
230*706f2adaSHeiko Carstens 	.byte	(\m << 4) | rxb
231*706f2adaSHeiko Carstens .endm
232*706f2adaSHeiko Carstens 
233*706f2adaSHeiko Carstens /* MRXBOPC - Generate Element Size Control, RXB, and final Opcode fields
234*706f2adaSHeiko Carstens  *
235*706f2adaSHeiko Carstens  * @m:		Element size control
236*706f2adaSHeiko Carstens  * @opc:	Opcode
237*706f2adaSHeiko Carstens  * @v1:		First vector register designated operand (for RXB)
238*706f2adaSHeiko Carstens  * @v2:		Second vector register designated operand (for RXB)
239*706f2adaSHeiko Carstens  * @v3:		Third vector register designated operand (for RXB)
240*706f2adaSHeiko Carstens  * @v4:		Fourth vector register designated operand (for RXB)
241*706f2adaSHeiko Carstens  */
242*706f2adaSHeiko Carstens .macro	MRXBOPC	m opc v1 v2=0 v3=0 v4=0
243*706f2adaSHeiko Carstens 	MRXB	\m, \v1, \v2, \v3, \v4
244*706f2adaSHeiko Carstens 	.byte	\opc
245*706f2adaSHeiko Carstens .endm
246*706f2adaSHeiko Carstens 
247*706f2adaSHeiko Carstens /* Vector support instructions */
248*706f2adaSHeiko Carstens 
249*706f2adaSHeiko Carstens /* VECTOR GENERATE BYTE MASK */
250*706f2adaSHeiko Carstens .macro	VGBM	vr imm2
251*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr
252*706f2adaSHeiko Carstens 	.word	(0xE700 | ((v1&15) << 4))
253*706f2adaSHeiko Carstens 	.word	\imm2
254*706f2adaSHeiko Carstens 	MRXBOPC	0, 0x44, v1
255*706f2adaSHeiko Carstens .endm
256*706f2adaSHeiko Carstens .macro	VZERO	vxr
257*706f2adaSHeiko Carstens 	VGBM	\vxr, 0
258*706f2adaSHeiko Carstens .endm
259*706f2adaSHeiko Carstens .macro	VONE	vxr
260*706f2adaSHeiko Carstens 	VGBM	\vxr, 0xFFFF
261*706f2adaSHeiko Carstens .endm
262*706f2adaSHeiko Carstens 
263*706f2adaSHeiko Carstens /* VECTOR LOAD VR ELEMENT FROM GR */
264*706f2adaSHeiko Carstens .macro	VLVG	v, gr, disp, m
265*706f2adaSHeiko Carstens 	VX_NUM	v1, \v
266*706f2adaSHeiko Carstens 	GR_NUM	b2, "%r0"
267*706f2adaSHeiko Carstens 	GR_NUM	r3, \gr
268*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | r3
269*706f2adaSHeiko Carstens 	.word	(b2 << 12) | (\disp)
270*706f2adaSHeiko Carstens 	MRXBOPC	\m, 0x22, v1
271*706f2adaSHeiko Carstens .endm
272*706f2adaSHeiko Carstens .macro	VLVGB	v, gr, index, base
273*706f2adaSHeiko Carstens 	VLVG	\v, \gr, \index, \base, 0
274*706f2adaSHeiko Carstens .endm
275*706f2adaSHeiko Carstens .macro	VLVGH	v, gr, index
276*706f2adaSHeiko Carstens 	VLVG	\v, \gr, \index, 1
277*706f2adaSHeiko Carstens .endm
278*706f2adaSHeiko Carstens .macro	VLVGF	v, gr, index
279*706f2adaSHeiko Carstens 	VLVG	\v, \gr, \index, 2
280*706f2adaSHeiko Carstens .endm
281*706f2adaSHeiko Carstens .macro	VLVGG	v, gr, index
282*706f2adaSHeiko Carstens 	VLVG	\v, \gr, \index, 3
283*706f2adaSHeiko Carstens .endm
284*706f2adaSHeiko Carstens 
285*706f2adaSHeiko Carstens /* VECTOR LOAD REGISTER */
286*706f2adaSHeiko Carstens .macro	VLR	v1, v2
287*706f2adaSHeiko Carstens 	VX_NUM	v1, \v1
288*706f2adaSHeiko Carstens 	VX_NUM	v2, \v2
289*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
290*706f2adaSHeiko Carstens 	.word	0
291*706f2adaSHeiko Carstens 	MRXBOPC	0, 0x56, v1, v2
292*706f2adaSHeiko Carstens .endm
293*706f2adaSHeiko Carstens 
294*706f2adaSHeiko Carstens /* VECTOR LOAD */
295*706f2adaSHeiko Carstens .macro	VL	v, disp, index="%r0", base
296*706f2adaSHeiko Carstens 	VX_NUM	v1, \v
297*706f2adaSHeiko Carstens 	GR_NUM	x2, \index
298*706f2adaSHeiko Carstens 	GR_NUM	b2, \base
299*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | x2
300*706f2adaSHeiko Carstens 	.word	(b2 << 12) | (\disp)
301*706f2adaSHeiko Carstens 	MRXBOPC 0, 0x06, v1
302*706f2adaSHeiko Carstens .endm
303*706f2adaSHeiko Carstens 
304*706f2adaSHeiko Carstens /* VECTOR LOAD ELEMENT */
305*706f2adaSHeiko Carstens .macro	VLEx	vr1, disp, index="%r0", base, m3, opc
306*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
307*706f2adaSHeiko Carstens 	GR_NUM	x2, \index
308*706f2adaSHeiko Carstens 	GR_NUM	b2, \base
309*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | x2
310*706f2adaSHeiko Carstens 	.word	(b2 << 12) | (\disp)
311*706f2adaSHeiko Carstens 	MRXBOPC	\m3, \opc, v1
312*706f2adaSHeiko Carstens .endm
313*706f2adaSHeiko Carstens .macro	VLEB	vr1, disp, index="%r0", base, m3
314*706f2adaSHeiko Carstens 	VLEx	\vr1, \disp, \index, \base, \m3, 0x00
315*706f2adaSHeiko Carstens .endm
316*706f2adaSHeiko Carstens .macro	VLEH	vr1, disp, index="%r0", base, m3
317*706f2adaSHeiko Carstens 	VLEx	\vr1, \disp, \index, \base, \m3, 0x01
318*706f2adaSHeiko Carstens .endm
319*706f2adaSHeiko Carstens .macro	VLEF	vr1, disp, index="%r0", base, m3
320*706f2adaSHeiko Carstens 	VLEx	\vr1, \disp, \index, \base, \m3, 0x03
321*706f2adaSHeiko Carstens .endm
322*706f2adaSHeiko Carstens .macro	VLEG	vr1, disp, index="%r0", base, m3
323*706f2adaSHeiko Carstens 	VLEx	\vr1, \disp, \index, \base, \m3, 0x02
324*706f2adaSHeiko Carstens .endm
325*706f2adaSHeiko Carstens 
326*706f2adaSHeiko Carstens /* VECTOR LOAD ELEMENT IMMEDIATE */
327*706f2adaSHeiko Carstens .macro	VLEIx	vr1, imm2, m3, opc
328*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
329*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4)
330*706f2adaSHeiko Carstens 	.word	\imm2
331*706f2adaSHeiko Carstens 	MRXBOPC	\m3, \opc, v1
332*706f2adaSHeiko Carstens .endm
333*706f2adaSHeiko Carstens .macro	VLEIB	vr1, imm2, index
334*706f2adaSHeiko Carstens 	VLEIx	\vr1, \imm2, \index, 0x40
335*706f2adaSHeiko Carstens .endm
336*706f2adaSHeiko Carstens .macro	VLEIH	vr1, imm2, index
337*706f2adaSHeiko Carstens 	VLEIx	\vr1, \imm2, \index, 0x41
338*706f2adaSHeiko Carstens .endm
339*706f2adaSHeiko Carstens .macro	VLEIF	vr1, imm2, index
340*706f2adaSHeiko Carstens 	VLEIx	\vr1, \imm2, \index, 0x43
341*706f2adaSHeiko Carstens .endm
342*706f2adaSHeiko Carstens .macro	VLEIG	vr1, imm2, index
343*706f2adaSHeiko Carstens 	VLEIx	\vr1, \imm2, \index, 0x42
344*706f2adaSHeiko Carstens .endm
345*706f2adaSHeiko Carstens 
346*706f2adaSHeiko Carstens /* VECTOR LOAD GR FROM VR ELEMENT */
347*706f2adaSHeiko Carstens .macro	VLGV	gr, vr, disp, base="%r0", m
348*706f2adaSHeiko Carstens 	GR_NUM	r1, \gr
349*706f2adaSHeiko Carstens 	GR_NUM	b2, \base
350*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr
351*706f2adaSHeiko Carstens 	.word	0xE700 | (r1 << 4) | (v3&15)
352*706f2adaSHeiko Carstens 	.word	(b2 << 12) | (\disp)
353*706f2adaSHeiko Carstens 	MRXBOPC	\m, 0x21, v3
354*706f2adaSHeiko Carstens .endm
355*706f2adaSHeiko Carstens .macro	VLGVB	gr, vr, disp, base="%r0"
356*706f2adaSHeiko Carstens 	VLGV	\gr, \vr, \disp, \base, 0
357*706f2adaSHeiko Carstens .endm
358*706f2adaSHeiko Carstens .macro	VLGVH	gr, vr, disp, base="%r0"
359*706f2adaSHeiko Carstens 	VLGV	\gr, \vr, \disp, \base, 1
360*706f2adaSHeiko Carstens .endm
361*706f2adaSHeiko Carstens .macro	VLGVF	gr, vr, disp, base="%r0"
362*706f2adaSHeiko Carstens 	VLGV	\gr, \vr, \disp, \base, 2
363*706f2adaSHeiko Carstens .endm
364*706f2adaSHeiko Carstens .macro	VLGVG	gr, vr, disp, base="%r0"
365*706f2adaSHeiko Carstens 	VLGV	\gr, \vr, \disp, \base, 3
366*706f2adaSHeiko Carstens .endm
367*706f2adaSHeiko Carstens 
368*706f2adaSHeiko Carstens /* VECTOR LOAD MULTIPLE */
369*706f2adaSHeiko Carstens .macro	VLM	vfrom, vto, disp, base, hint=3
370*706f2adaSHeiko Carstens 	VX_NUM	v1, \vfrom
371*706f2adaSHeiko Carstens 	VX_NUM	v3, \vto
372*706f2adaSHeiko Carstens 	GR_NUM	b2, \base
373*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v3&15)
374*706f2adaSHeiko Carstens 	.word	(b2 << 12) | (\disp)
375*706f2adaSHeiko Carstens 	MRXBOPC	\hint, 0x36, v1, v3
376*706f2adaSHeiko Carstens .endm
377*706f2adaSHeiko Carstens 
378*706f2adaSHeiko Carstens /* VECTOR STORE */
379*706f2adaSHeiko Carstens .macro	VST	vr1, disp, index="%r0", base
380*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
381*706f2adaSHeiko Carstens 	GR_NUM	x2, \index
382*706f2adaSHeiko Carstens 	GR_NUM	b2, \base
383*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (x2&15)
384*706f2adaSHeiko Carstens 	.word	(b2 << 12) | (\disp)
385*706f2adaSHeiko Carstens 	MRXBOPC	0, 0x0E, v1
386*706f2adaSHeiko Carstens .endm
387*706f2adaSHeiko Carstens 
388*706f2adaSHeiko Carstens /* VECTOR STORE MULTIPLE */
389*706f2adaSHeiko Carstens .macro	VSTM	vfrom, vto, disp, base, hint=3
390*706f2adaSHeiko Carstens 	VX_NUM	v1, \vfrom
391*706f2adaSHeiko Carstens 	VX_NUM	v3, \vto
392*706f2adaSHeiko Carstens 	GR_NUM	b2, \base
393*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v3&15)
394*706f2adaSHeiko Carstens 	.word	(b2 << 12) | (\disp)
395*706f2adaSHeiko Carstens 	MRXBOPC	\hint, 0x3E, v1, v3
396*706f2adaSHeiko Carstens .endm
397*706f2adaSHeiko Carstens 
398*706f2adaSHeiko Carstens /* VECTOR PERMUTE */
399*706f2adaSHeiko Carstens .macro	VPERM	vr1, vr2, vr3, vr4
400*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
401*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
402*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
403*706f2adaSHeiko Carstens 	VX_NUM	v4, \vr4
404*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
405*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
406*706f2adaSHeiko Carstens 	MRXBOPC	(v4&15), 0x8C, v1, v2, v3, v4
407*706f2adaSHeiko Carstens .endm
408*706f2adaSHeiko Carstens 
409*706f2adaSHeiko Carstens /* VECTOR UNPACK LOGICAL LOW */
410*706f2adaSHeiko Carstens .macro	VUPLL	vr1, vr2, m3
411*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
412*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
413*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
414*706f2adaSHeiko Carstens 	.word	0x0000
415*706f2adaSHeiko Carstens 	MRXBOPC	\m3, 0xD4, v1, v2
416*706f2adaSHeiko Carstens .endm
417*706f2adaSHeiko Carstens .macro	VUPLLB	vr1, vr2
418*706f2adaSHeiko Carstens 	VUPLL	\vr1, \vr2, 0
419*706f2adaSHeiko Carstens .endm
420*706f2adaSHeiko Carstens .macro	VUPLLH	vr1, vr2
421*706f2adaSHeiko Carstens 	VUPLL	\vr1, \vr2, 1
422*706f2adaSHeiko Carstens .endm
423*706f2adaSHeiko Carstens .macro	VUPLLF	vr1, vr2
424*706f2adaSHeiko Carstens 	VUPLL	\vr1, \vr2, 2
425*706f2adaSHeiko Carstens .endm
426*706f2adaSHeiko Carstens 
427*706f2adaSHeiko Carstens /* VECTOR PERMUTE DOUBLEWORD IMMEDIATE */
428*706f2adaSHeiko Carstens .macro	VPDI	vr1, vr2, vr3, m4
429*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
430*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
431*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
432*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
433*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
434*706f2adaSHeiko Carstens 	MRXBOPC	\m4, 0x84, v1, v2, v3
435*706f2adaSHeiko Carstens .endm
436*706f2adaSHeiko Carstens 
437*706f2adaSHeiko Carstens /* VECTOR REPLICATE */
438*706f2adaSHeiko Carstens .macro	VREP	vr1, vr3, imm2, m4
439*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
440*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
441*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v3&15)
442*706f2adaSHeiko Carstens 	.word	\imm2
443*706f2adaSHeiko Carstens 	MRXBOPC	\m4, 0x4D, v1, v3
444*706f2adaSHeiko Carstens .endm
445*706f2adaSHeiko Carstens .macro	VREPB	vr1, vr3, imm2
446*706f2adaSHeiko Carstens 	VREP	\vr1, \vr3, \imm2, 0
447*706f2adaSHeiko Carstens .endm
448*706f2adaSHeiko Carstens .macro	VREPH	vr1, vr3, imm2
449*706f2adaSHeiko Carstens 	VREP	\vr1, \vr3, \imm2, 1
450*706f2adaSHeiko Carstens .endm
451*706f2adaSHeiko Carstens .macro	VREPF	vr1, vr3, imm2
452*706f2adaSHeiko Carstens 	VREP	\vr1, \vr3, \imm2, 2
453*706f2adaSHeiko Carstens .endm
454*706f2adaSHeiko Carstens .macro	VREPG	vr1, vr3, imm2
455*706f2adaSHeiko Carstens 	VREP	\vr1, \vr3, \imm2, 3
456*706f2adaSHeiko Carstens .endm
457*706f2adaSHeiko Carstens 
458*706f2adaSHeiko Carstens /* VECTOR MERGE HIGH */
459*706f2adaSHeiko Carstens .macro	VMRH	vr1, vr2, vr3, m4
460*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
461*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
462*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
463*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
464*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
465*706f2adaSHeiko Carstens 	MRXBOPC	\m4, 0x61, v1, v2, v3
466*706f2adaSHeiko Carstens .endm
467*706f2adaSHeiko Carstens .macro	VMRHB	vr1, vr2, vr3
468*706f2adaSHeiko Carstens 	VMRH	\vr1, \vr2, \vr3, 0
469*706f2adaSHeiko Carstens .endm
470*706f2adaSHeiko Carstens .macro	VMRHH	vr1, vr2, vr3
471*706f2adaSHeiko Carstens 	VMRH	\vr1, \vr2, \vr3, 1
472*706f2adaSHeiko Carstens .endm
473*706f2adaSHeiko Carstens .macro	VMRHF	vr1, vr2, vr3
474*706f2adaSHeiko Carstens 	VMRH	\vr1, \vr2, \vr3, 2
475*706f2adaSHeiko Carstens .endm
476*706f2adaSHeiko Carstens .macro	VMRHG	vr1, vr2, vr3
477*706f2adaSHeiko Carstens 	VMRH	\vr1, \vr2, \vr3, 3
478*706f2adaSHeiko Carstens .endm
479*706f2adaSHeiko Carstens 
480*706f2adaSHeiko Carstens /* VECTOR MERGE LOW */
481*706f2adaSHeiko Carstens .macro	VMRL	vr1, vr2, vr3, m4
482*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
483*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
484*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
485*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
486*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
487*706f2adaSHeiko Carstens 	MRXBOPC	\m4, 0x60, v1, v2, v3
488*706f2adaSHeiko Carstens .endm
489*706f2adaSHeiko Carstens .macro	VMRLB	vr1, vr2, vr3
490*706f2adaSHeiko Carstens 	VMRL	\vr1, \vr2, \vr3, 0
491*706f2adaSHeiko Carstens .endm
492*706f2adaSHeiko Carstens .macro	VMRLH	vr1, vr2, vr3
493*706f2adaSHeiko Carstens 	VMRL	\vr1, \vr2, \vr3, 1
494*706f2adaSHeiko Carstens .endm
495*706f2adaSHeiko Carstens .macro	VMRLF	vr1, vr2, vr3
496*706f2adaSHeiko Carstens 	VMRL	\vr1, \vr2, \vr3, 2
497*706f2adaSHeiko Carstens .endm
498*706f2adaSHeiko Carstens .macro	VMRLG	vr1, vr2, vr3
499*706f2adaSHeiko Carstens 	VMRL	\vr1, \vr2, \vr3, 3
500*706f2adaSHeiko Carstens .endm
501*706f2adaSHeiko Carstens 
502*706f2adaSHeiko Carstens 
503*706f2adaSHeiko Carstens /* Vector integer instructions */
504*706f2adaSHeiko Carstens 
505*706f2adaSHeiko Carstens /* VECTOR AND */
506*706f2adaSHeiko Carstens .macro	VN	vr1, vr2, vr3
507*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
508*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
509*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
510*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
511*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
512*706f2adaSHeiko Carstens 	MRXBOPC	0, 0x68, v1, v2, v3
513*706f2adaSHeiko Carstens .endm
514*706f2adaSHeiko Carstens 
515*706f2adaSHeiko Carstens /* VECTOR EXCLUSIVE OR */
516*706f2adaSHeiko Carstens .macro	VX	vr1, vr2, vr3
517*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
518*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
519*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
520*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
521*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
522*706f2adaSHeiko Carstens 	MRXBOPC	0, 0x6D, v1, v2, v3
523*706f2adaSHeiko Carstens .endm
524*706f2adaSHeiko Carstens 
525*706f2adaSHeiko Carstens /* VECTOR GALOIS FIELD MULTIPLY SUM */
526*706f2adaSHeiko Carstens .macro	VGFM	vr1, vr2, vr3, m4
527*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
528*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
529*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
530*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
531*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
532*706f2adaSHeiko Carstens 	MRXBOPC	\m4, 0xB4, v1, v2, v3
533*706f2adaSHeiko Carstens .endm
534*706f2adaSHeiko Carstens .macro	VGFMB	vr1, vr2, vr3
535*706f2adaSHeiko Carstens 	VGFM	\vr1, \vr2, \vr3, 0
536*706f2adaSHeiko Carstens .endm
537*706f2adaSHeiko Carstens .macro	VGFMH	vr1, vr2, vr3
538*706f2adaSHeiko Carstens 	VGFM	\vr1, \vr2, \vr3, 1
539*706f2adaSHeiko Carstens .endm
540*706f2adaSHeiko Carstens .macro	VGFMF	vr1, vr2, vr3
541*706f2adaSHeiko Carstens 	VGFM	\vr1, \vr2, \vr3, 2
542*706f2adaSHeiko Carstens .endm
543*706f2adaSHeiko Carstens .macro	VGFMG	vr1, vr2, vr3
544*706f2adaSHeiko Carstens 	VGFM	\vr1, \vr2, \vr3, 3
545*706f2adaSHeiko Carstens .endm
546*706f2adaSHeiko Carstens 
547*706f2adaSHeiko Carstens /* VECTOR GALOIS FIELD MULTIPLY SUM AND ACCUMULATE */
548*706f2adaSHeiko Carstens .macro	VGFMA	vr1, vr2, vr3, vr4, m5
549*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
550*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
551*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
552*706f2adaSHeiko Carstens 	VX_NUM	v4, \vr4
553*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
554*706f2adaSHeiko Carstens 	.word	((v3&15) << 12) | (\m5 << 8)
555*706f2adaSHeiko Carstens 	MRXBOPC	(v4&15), 0xBC, v1, v2, v3, v4
556*706f2adaSHeiko Carstens .endm
557*706f2adaSHeiko Carstens .macro	VGFMAB	vr1, vr2, vr3, vr4
558*706f2adaSHeiko Carstens 	VGFMA	\vr1, \vr2, \vr3, \vr4, 0
559*706f2adaSHeiko Carstens .endm
560*706f2adaSHeiko Carstens .macro	VGFMAH	vr1, vr2, vr3, vr4
561*706f2adaSHeiko Carstens 	VGFMA	\vr1, \vr2, \vr3, \vr4, 1
562*706f2adaSHeiko Carstens .endm
563*706f2adaSHeiko Carstens .macro	VGFMAF	vr1, vr2, vr3, vr4
564*706f2adaSHeiko Carstens 	VGFMA	\vr1, \vr2, \vr3, \vr4, 2
565*706f2adaSHeiko Carstens .endm
566*706f2adaSHeiko Carstens .macro	VGFMAG	vr1, vr2, vr3, vr4
567*706f2adaSHeiko Carstens 	VGFMA	\vr1, \vr2, \vr3, \vr4, 3
568*706f2adaSHeiko Carstens .endm
569*706f2adaSHeiko Carstens 
570*706f2adaSHeiko Carstens /* VECTOR SHIFT RIGHT LOGICAL BY BYTE */
571*706f2adaSHeiko Carstens .macro	VSRLB	vr1, vr2, vr3
572*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
573*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
574*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
575*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
576*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
577*706f2adaSHeiko Carstens 	MRXBOPC	0, 0x7D, v1, v2, v3
578*706f2adaSHeiko Carstens .endm
579*706f2adaSHeiko Carstens 
580*706f2adaSHeiko Carstens /* VECTOR REPLICATE IMMEDIATE */
581*706f2adaSHeiko Carstens .macro	VREPI	vr1, imm2, m3
582*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
583*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4)
584*706f2adaSHeiko Carstens 	.word	\imm2
585*706f2adaSHeiko Carstens 	MRXBOPC	\m3, 0x45, v1
586*706f2adaSHeiko Carstens .endm
587*706f2adaSHeiko Carstens .macro	VREPIB	vr1, imm2
588*706f2adaSHeiko Carstens 	VREPI	\vr1, \imm2, 0
589*706f2adaSHeiko Carstens .endm
590*706f2adaSHeiko Carstens .macro	VREPIH	vr1, imm2
591*706f2adaSHeiko Carstens 	VREPI	\vr1, \imm2, 1
592*706f2adaSHeiko Carstens .endm
593*706f2adaSHeiko Carstens .macro	VREPIF	vr1, imm2
594*706f2adaSHeiko Carstens 	VREPI	\vr1, \imm2, 2
595*706f2adaSHeiko Carstens .endm
596*706f2adaSHeiko Carstens .macro	VREPIG	vr1, imm2
597*706f2adaSHeiko Carstens 	VREP	\vr1, \imm2, 3
598*706f2adaSHeiko Carstens .endm
599*706f2adaSHeiko Carstens 
600*706f2adaSHeiko Carstens /* VECTOR ADD */
601*706f2adaSHeiko Carstens .macro	VA	vr1, vr2, vr3, m4
602*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
603*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
604*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
605*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
606*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
607*706f2adaSHeiko Carstens 	MRXBOPC	\m4, 0xF3, v1, v2, v3
608*706f2adaSHeiko Carstens .endm
609*706f2adaSHeiko Carstens .macro	VAB	vr1, vr2, vr3
610*706f2adaSHeiko Carstens 	VA	\vr1, \vr2, \vr3, 0
611*706f2adaSHeiko Carstens .endm
612*706f2adaSHeiko Carstens .macro	VAH	vr1, vr2, vr3
613*706f2adaSHeiko Carstens 	VA	\vr1, \vr2, \vr3, 1
614*706f2adaSHeiko Carstens .endm
615*706f2adaSHeiko Carstens .macro	VAF	vr1, vr2, vr3
616*706f2adaSHeiko Carstens 	VA	\vr1, \vr2, \vr3, 2
617*706f2adaSHeiko Carstens .endm
618*706f2adaSHeiko Carstens .macro	VAG	vr1, vr2, vr3
619*706f2adaSHeiko Carstens 	VA	\vr1, \vr2, \vr3, 3
620*706f2adaSHeiko Carstens .endm
621*706f2adaSHeiko Carstens .macro	VAQ	vr1, vr2, vr3
622*706f2adaSHeiko Carstens 	VA	\vr1, \vr2, \vr3, 4
623*706f2adaSHeiko Carstens .endm
624*706f2adaSHeiko Carstens 
625*706f2adaSHeiko Carstens /* VECTOR ELEMENT SHIFT RIGHT ARITHMETIC */
626*706f2adaSHeiko Carstens .macro	VESRAV	vr1, vr2, vr3, m4
627*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
628*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
629*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
630*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
631*706f2adaSHeiko Carstens 	.word	((v3&15) << 12)
632*706f2adaSHeiko Carstens 	MRXBOPC \m4, 0x7A, v1, v2, v3
633*706f2adaSHeiko Carstens .endm
634*706f2adaSHeiko Carstens 
635*706f2adaSHeiko Carstens .macro	VESRAVB	vr1, vr2, vr3
636*706f2adaSHeiko Carstens 	VESRAV	\vr1, \vr2, \vr3, 0
637*706f2adaSHeiko Carstens .endm
638*706f2adaSHeiko Carstens .macro	VESRAVH	vr1, vr2, vr3
639*706f2adaSHeiko Carstens 	VESRAV	\vr1, \vr2, \vr3, 1
640*706f2adaSHeiko Carstens .endm
641*706f2adaSHeiko Carstens .macro	VESRAVF	vr1, vr2, vr3
642*706f2adaSHeiko Carstens 	VESRAV	\vr1, \vr2, \vr3, 2
643*706f2adaSHeiko Carstens .endm
644*706f2adaSHeiko Carstens .macro	VESRAVG	vr1, vr2, vr3
645*706f2adaSHeiko Carstens 	VESRAV	\vr1, \vr2, \vr3, 3
646*706f2adaSHeiko Carstens .endm
647*706f2adaSHeiko Carstens 
648*706f2adaSHeiko Carstens /* VECTOR ELEMENT ROTATE LEFT LOGICAL */
649*706f2adaSHeiko Carstens .macro	VERLL	vr1, vr3, disp, base="%r0", m4
650*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
651*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
652*706f2adaSHeiko Carstens 	GR_NUM	b2, \base
653*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v3&15)
654*706f2adaSHeiko Carstens 	.word	(b2 << 12) | (\disp)
655*706f2adaSHeiko Carstens 	MRXBOPC	\m4, 0x33, v1, v3
656*706f2adaSHeiko Carstens .endm
657*706f2adaSHeiko Carstens .macro	VERLLB	vr1, vr3, disp, base="%r0"
658*706f2adaSHeiko Carstens 	VERLL	\vr1, \vr3, \disp, \base, 0
659*706f2adaSHeiko Carstens .endm
660*706f2adaSHeiko Carstens .macro	VERLLH	vr1, vr3, disp, base="%r0"
661*706f2adaSHeiko Carstens 	VERLL	\vr1, \vr3, \disp, \base, 1
662*706f2adaSHeiko Carstens .endm
663*706f2adaSHeiko Carstens .macro	VERLLF	vr1, vr3, disp, base="%r0"
664*706f2adaSHeiko Carstens 	VERLL	\vr1, \vr3, \disp, \base, 2
665*706f2adaSHeiko Carstens .endm
666*706f2adaSHeiko Carstens .macro	VERLLG	vr1, vr3, disp, base="%r0"
667*706f2adaSHeiko Carstens 	VERLL	\vr1, \vr3, \disp, \base, 3
668*706f2adaSHeiko Carstens .endm
669*706f2adaSHeiko Carstens 
670*706f2adaSHeiko Carstens /* VECTOR SHIFT LEFT DOUBLE BY BYTE */
671*706f2adaSHeiko Carstens .macro	VSLDB	vr1, vr2, vr3, imm4
672*706f2adaSHeiko Carstens 	VX_NUM	v1, \vr1
673*706f2adaSHeiko Carstens 	VX_NUM	v2, \vr2
674*706f2adaSHeiko Carstens 	VX_NUM	v3, \vr3
675*706f2adaSHeiko Carstens 	.word	0xE700 | ((v1&15) << 4) | (v2&15)
676*706f2adaSHeiko Carstens 	.word	((v3&15) << 12) | (\imm4)
677*706f2adaSHeiko Carstens 	MRXBOPC	0, 0x77, v1, v2, v3
678*706f2adaSHeiko Carstens .endm
679*706f2adaSHeiko Carstens 
680*706f2adaSHeiko Carstens #endif	/* __ASSEMBLY__ */
681*706f2adaSHeiko Carstens #endif	/* __ASM_S390_VX_INSN_INTERNAL_H */
682