1	.equ	x0, 0
2	.equ	s0, 0
3	.equ	z0, 0
4	.equ	z0.s, 0
5	.equ	p0, 0
6	.equ	p0.b, 1
7
8	cmeq	v0.4s, v1.4s, x0	// Error (wrong register type)
9	cmeq	v0.4s, v1.4s, #x0	// OK
10	cmeq	v0.4s, v1.4s, s0	// Error (wrong register type)
11	cmeq	v0.4s, v1.4s, #s0	// OK
12	cmeq	v0.4s, v1.4s, z0	// OK (for compatibility)
13	cmeq	v0.4s, v1.4s, #z0	// OK
14	cmeq	v0.4s, v1.4s, z0.s	// OK (for compatibility)
15	cmeq	v0.4s, v1.4s, #z0.s	// OK
16	cmeq	v0.4s, v1.4s, p0	// OK (for compatibility)
17	cmeq	v0.4s, v1.4s, #p0	// OK
18	cmeq	v0.4s, v1.4s, p0.b	// Error (not 0)
19	cmeq	v0.4s, v1.4s, #p0.b	// Error (not 0)
20
21	ldr	x1, [x0, x0]		// OK
22	ldr	x1, [x0, #x0]		// OK
23	ldr	x1, [x2, s0]		// OK (not considered a register here)
24	ldr	x1, [x2, #s0]		// OK
25	ldr	x1, [x2, z0]		// OK (for compatibility)
26	ldr	x1, [x2, #z0]		// OK
27	ldr	x2, [x2, z0.s]		// OK (for compatibility)
28	ldr	x1, [x2, #z0.s]		// OK
29	ldr	x2, [x2, p0]		// OK (not considered a register here)
30	ldr	x1, [x2, #p0]		// OK
31	ldr	x2, [x2, p0.b]		// OK (not considered a register here)
32	ldr	x1, [x2, #p0.b]		// OK
33
34	ldr	x1, [x0]		// OK
35	ldr	x1, [s0]		// Error (not a base register)
36	ldr	x1, [z0]		// Error
37	ldr	x1, [z0.s]		// Error
38	ldr	x1, [p0]		// Error (not a base register)
39	ldr	x1, [p0.b]		// Error (not a base register)
40
41	ldr	x0, [x1, x2, lsl x0]	// OK (not considered a register here)
42	ldr	x0, [x1, x2, lsl #x0]	// OK
43	ldr	x0, [x1, x2, lsl s0]	// OK (not considered a register here)
44	ldr	x0, [x1, x2, lsl #s0]	// OK
45	ldr	x0, [x1, x2, lsl z0]	// OK (not considered a register here)
46	ldr	x0, [x1, x2, lsl #z0]	// OK
47	ldr	x0, [x1, x2, lsl z0.s]	// OK (not considered a register here)
48	ldr	x0, [x1, x2, lsl #z0.s]	// OK
49	ldr	x0, [x1, x2, lsl p0]	// OK (not considered a register here)
50	ldr	x0, [x1, x2, lsl #p0]	// OK
51	ldr	x0, [x1, x2, lsl p0.b]	// Error (invalid shift amount)
52	ldr	x0, [x1, x2, lsl #p0.b]	// Error (invalid shift amount)
53
54	mov	x0, x0			// OK
55	mov	x0, #x0			// OK
56	mov	x0, s0			// OK (not considered a register here)
57	mov	x0, #s0			// OK
58	mov	x0, z0			// OK (not considered a register here)
59	mov	x0, #z0			// OK
60	mov	x0, z0.s		// OK (not considered a register here)
61	mov	x0, #z0.s		// OK
62	mov	x0, p0			// OK (not considered a register here)
63	mov	x0, #p0			// OK
64	mov	x0, p0.b		// OK (not considered a register here)
65	mov	x0, #p0.b		// OK
66
67	movk	x0, x0			// OK (not considered a register here)
68	movk	x0, #x0			// OK
69	movk	x0, s0			// OK (not considered a register here)
70	movk	x0, #s0			// OK
71	movk	x0, z0			// OK (not considered a register here)
72	movk	x0, #z0			// OK
73	movk	x0, z0.s		// OK (not considered a register here)
74	movk	x0, #z0.s		// OK
75	movk	x0, p0			// OK (not considered a register here)
76	movk	x0, #p0			// OK
77	movk	x0, p0.b		// OK (not considered a register here)
78	movk	x0, #p0.b		// OK
79
80	add	x0, x0, x0		// OK
81	add	x0, x0, #x0		// OK
82	add	x0, x0, s0		// OK (not considered a register here)
83	add	x0, x0, #s0		// OK
84	add	x0, x0, z0		// OK (not considered a register here)
85	add	x0, x0, #z0		// OK
86	add	x0, x0, z0.s		// OK (not considered a register here)
87	add	x0, x0, #z0.s		// OK
88	add	x0, x0, p0		// OK (not considered a register here)
89	add	x0, x0, #p0		// OK
90	add	x0, x0, p0.b		// OK (not considered a register here)
91	add	x0, x0, #p0.b		// OK
92
93	and	x0, x0, x0		// OK
94	and	x0, x0, #x0		// Error (immediate out of range)
95	and	x0, x0, s0		// Error (immediate out of range)
96	and	x0, x0, #s0		// Error (immediate out of range)
97	and	x0, x0, z0		// Error (immediate out of range)
98	and	x0, x0, #z0		// Error (immediate out of range)
99	and	x0, x0, z0.s		// Error (immediate out of range)
100	and	x0, x0, #z0.s		// Error (immediate out of range)
101	and	x0, x0, p0		// Error (immediate out of range)
102	and	x0, x0, #p0		// Error (immediate out of range)
103	and	x0, x0, p0.b		// OK (not considered a register here)
104	and	x0, x0, #p0.b		// OK
105
106	lsl	x0, x0, x0		// OK
107	lsl	x0, x0, #x0		// OK
108	lsl	x0, x0, s0		// Error (wrong register type)
109	lsl	x0, x0, #s0		// OK
110	lsl	x0, x0, z0		// OK (for compatibility)
111	lsl	x0, x0, #z0		// OK
112	lsl	x0, x0, z0.s		// OK (for compatibility)
113	lsl	x0, x0, #z0.s		// OK
114	lsl	x0, x0, p0		// OK (for compatibility)
115	lsl	x0, x0, #p0		// OK
116	lsl	x0, x0, p0.b		// OK (for compatibility)
117	lsl	x0, x0, #p0.b		// OK
118
119	adr	x0, x0			// OK (not considered a register here)
120	adr	x0, #x0			// OK
121	adr	x0, s0			// OK (not considered a register here)
122	adr	x0, #s0			// OK
123	adr	x0, z0			// OK (not considered a register here)
124	adr	x0, #z0			// OK
125	adr	x0, z0.s		// OK (not considered a register here)
126	adr	x0, #z0.s		// OK
127	adr	x0, p0			// OK (not considered a register here)
128	adr	x0, #p0			// OK
129	adr	x0, p0.b		// OK (not considered a register here)
130	adr	x0, #p0.b		// OK
131
132	svc	x0			// Error (immediate operand required)
133	svc	#x0			// OK
134	svc	s0			// Error (immediate operand required)
135	svc	#s0			// OK
136	svc	z0			// OK (for compatibility)
137	svc	#z0			// OK
138	svc	z0.s			// OK (for compatibility)
139	svc	#z0.s			// OK
140	svc	p0			// OK (for compatibility)
141	svc	#p0			// OK
142	svc	p0.b			// OK (for compatibility)
143	svc	#p0.b			// OK
144