/* alias.s Test file for AArch64 instructions aliases or disassembly
   preference.  It is also used to test the -Mno-aliases option in
   the disassemler.

   Copyright 2012, 2013 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/>.  */

.text
	extr	w0, w1, w2, #15
	extr	x0, x1, x2, #15
	extr	w0, w3, w3, #7
	extr	x0, x5, x5, #7
	ror	w6, w7, #18
	ror	x6, x7, #40

	madd	w0, w1, w2, w3
	madd	w0, w1, w2, wzr
	mul	w0, w1, w2
	msub	x0, x1, x2, x3
	msub	x0, x1, x2, xzr
	mneg	x0, x1, x2
	smaddl	x0, w1, w2, x3
	smaddl	x0, w1, w2, xzr
	smull	x0, w1, w2
	smsubl	x0, w1, w2, x3
	smsubl	x0, w1, w2, xzr
	smnegl	x0, w1, w2
	umaddl	x0, w1, w2, x3
	umaddl	x0, w1, w2, xzr
	umull	x0, w1, w2
	umsubl	x0, w1, w2, x3
	umsubl	x0, w1, w2, xzr
	umnegl	x0, w1, w2

	csinc	w0, w1, wzr, eq
	csinc	w0, w1, w1, eq
	cinc	w0, w1, ne
	csinc	w0, wzr, wzr, lo
	cset	w0, cs
	csinv	x0, x1, xzr, hs
	csinv	x0, x1, x1, hs
	cinv	x0, x1, cc
	csinv	x0, xzr, xzr, mi
	csetm	x0, pl
	csneg	x0, xzr, x30, lt
	csneg	x0, x30, x30, lt
	cneg	x0, x30, ge

	ands	x0, x1, x2
	ands	xzr, x1, x2
	tst	x1, x2
	ands	wzr, w1, w2, ror #31
	tst	w1, w2, ror #31

	orn	x0, x1, x2
	orn	xzr, x1, x2
	orn	x0, xzr, x2
	mvn	x0, x2
	orn	wzr, w1, w2, asr #15
	orn	w0, wzr, w2, asr #15
	mvn	w0, w2, asr #15

	mov	v0.8b, v1.8b
	orr	v0.8b, v1.8b, v2.8b
	orr	v0.8b, v1.8b, v1.8b

	mov	x3, x17
	orr	x3, x0, x17
	orr	x3, xzr, x17

	bic	x1, x1, #(1<<30)-1
	bic	x0, x0, #2
	bic	w0, w0, #2

	ands	wzr, w24, #0x7f8
	ands	w0, w24, #0x7f8
	tst	w24, #0x7f8

	subs	wzr, w3, #0x20
	subs	w3, wsp, #0x20
	cmp	w3, #0x20

	adds	xzr, x15, #0xfff
	subs	x15, sp, #0xfff
	cmn	x15, #0xfff

	.macro asimdshll	s
	 \s\()xtl v8.8h, v2.8b
	 \s\()shll v8.8h, v2.8b, #0
	 \s\()xtl2 v8.8h, v2.16b
	 \s\()shll2 v8.8h, v2.16b, #0
	 \s\()xtl v8.4s, v2.4h
	 \s\()shll v8.4s, v2.4h, #0
	 \s\()xtl2 v8.4s, v2.8h
	 \s\()shll2 v8.4s, v2.8h, #0
	 \s\()xtl v8.2d, v2.2s
	 \s\()shll v8.2d, v2.2s, #0
	 \s\()xtl2 v8.2d, v2.4s
	 \s\()shll2 v8.2d, v2.4s, #0
	.endm

	asimdshll	s
	asimdshll	u
