1// programmer-friendly.s Test file for AArch64 instructions variants that are
2// not part of the architectural assembly syntax but are supported for the
3// ease of assembly level programming.
4
5.text
6	// The preferred architectural syntax does not accept the shifter
7	// LSL or any other shift operator, when the destination register
8	// has the shape of 16B or 8B.
9	movi	v0.16b, 97, lsl 0	// N.B.: this is now part of the architecture specification.
10
11	// LDR Wt, label | =value
12	// As a convenience assemblers will typically permit the notation
13	// "=value" in conjunction with the pc-relative literal load
14	// instructions to automatically place an immediate value or
15	// symbolic address in a nearby literal pool and generate a hidden
16	// label which references it.
17	ldrsw	x1, =0xdeadbeef
18	ldrsw	x7, u16_lable + 4
19
20	// CCMN Xn, Xm, #uimm4, cond
21	// As a convenience, GAS accepts a string representation for #uimm4,
22	// e.g. NzCv for #0xa (0b1010).
23	ccmp	x1, x2, NzCv, GE
24
25.data
26u16_lable:
27	.word	0xdeadbeef
28	.word	0xcafebabe
29
30.text
31	// UXT[BHW] Wd, Wn
32	// Unsigned Extend Byte|Halfword|Word: UXT[BH] is architectural alias
33	// for UBFM Wd,Wn,#0,#7|15, while UXTW is pseudo instruction which is
34	// encoded using ORR Wd, WZR, Wn (MOV Wd,Wn).
35	// A programmer-friendly assembler should accept a destination Xd in
36	// place of Wd, however that is not the preferred form for disassembly.
37	uxtb	x15, w21
38	uxth	x7, w27
39	uxtw	x8, wzr
40
41
42	// ADDS <Xd>, <Xn|SP>, <R><m>{, UXTB {#<amount>}}
43	// In the 64-bit form, the final register operand is written as Wm
44	// for all but the (possibly omitted) UXTX/LSL and SXTX
45	// operators.
46	// As a programmer-friendly assembler, we allow e.g.
47	// ADDS <Xd>, <Xn|SP>, <Xm>{, UXTB {#<amount>}} by changing it to
48	// ADDS <Xd>, <Xn|SP>, <Wm>{, UXTB {#<amount>}}.
49	adds	x0, sp, x0, uxtb #4
50	adds	x0, sp, x0, uxth #4
51	adds	x0, sp, x0, uxtw #4
52
53	adds	x0, sp, x0, sxtb #0
54	adds	x0, sp, x0, sxth #1
55	adds	x0, sp, x0, sxtw #2
56
57	// More tests on
58	// LDR Wt, label | =value
59	// Find more comment above.
60	ldr	q0, =0xdeadcafebeefbabe0123456789abcedf
61	ldr	d0, =0xfebeefbabe012345
62	ldr	x0, =0xfebeefbabe012345
63	ldr	s0, =0xdeadbeef
64	ldr	w0, =0xdeadbeef
65	ldr	x0, =u16_lable
66