File: sve-reg-diagnostic.s

package info (click to toggle)
binutils 2.31.1-16
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 309,412 kB
  • sloc: ansic: 1,161,194; asm: 638,508; cpp: 128,829; exp: 68,580; makefile: 55,828; sh: 22,360; yacc: 14,238; lisp: 13,272; perl: 2,111; ada: 1,681; lex: 1,652; pascal: 1,446; cs: 879; sed: 195; python: 154; xml: 95; awk: 25
file content (143 lines) | stat: -rw-r--r-- 4,958 bytes parent folder | download | duplicates (25)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
	.equ	x0, 0
	.equ	s0, 0
	.equ	z0, 0
	.equ	z0.s, 0
	.equ	p0, 0
	.equ	p0.b, 1

	cmeq	v0.4s, v1.4s, x0	// Error (wrong register type)
	cmeq	v0.4s, v1.4s, #x0	// OK
	cmeq	v0.4s, v1.4s, s0	// Error (wrong register type)
	cmeq	v0.4s, v1.4s, #s0	// OK
	cmeq	v0.4s, v1.4s, z0	// OK (for compatibility)
	cmeq	v0.4s, v1.4s, #z0	// OK
	cmeq	v0.4s, v1.4s, z0.s	// OK (for compatibility)
	cmeq	v0.4s, v1.4s, #z0.s	// OK
	cmeq	v0.4s, v1.4s, p0	// OK (for compatibility)
	cmeq	v0.4s, v1.4s, #p0	// OK
	cmeq	v0.4s, v1.4s, p0.b	// Error (not 0)
	cmeq	v0.4s, v1.4s, #p0.b	// Error (not 0)

	ldr	x1, [x0, x0]		// OK
	ldr	x1, [x0, #x0]		// OK
	ldr	x1, [x2, s0]		// OK (not considered a register here)
	ldr	x1, [x2, #s0]		// OK
	ldr	x1, [x2, z0]		// OK (for compatibility)
	ldr	x1, [x2, #z0]		// OK
	ldr	x2, [x2, z0.s]		// OK (for compatibility)
	ldr	x1, [x2, #z0.s]		// OK
	ldr	x2, [x2, p0]		// OK (not considered a register here)
	ldr	x1, [x2, #p0]		// OK
	ldr	x2, [x2, p0.b]		// OK (not considered a register here)
	ldr	x1, [x2, #p0.b]		// OK

	ldr	x1, [x0]		// OK
	ldr	x1, [s0]		// Error (not a base register)
	ldr	x1, [z0]		// Error
	ldr	x1, [z0.s]		// Error
	ldr	x1, [p0]		// Error (not a base register)
	ldr	x1, [p0.b]		// Error (not a base register)

	ldr	x0, [x1, x2, lsl x0]	// OK (not considered a register here)
	ldr	x0, [x1, x2, lsl #x0]	// OK
	ldr	x0, [x1, x2, lsl s0]	// OK (not considered a register here)
	ldr	x0, [x1, x2, lsl #s0]	// OK
	ldr	x0, [x1, x2, lsl z0]	// OK (not considered a register here)
	ldr	x0, [x1, x2, lsl #z0]	// OK
	ldr	x0, [x1, x2, lsl z0.s]	// OK (not considered a register here)
	ldr	x0, [x1, x2, lsl #z0.s]	// OK
	ldr	x0, [x1, x2, lsl p0]	// OK (not considered a register here)
	ldr	x0, [x1, x2, lsl #p0]	// OK
	ldr	x0, [x1, x2, lsl p0.b]	// Error (invalid shift amount)
	ldr	x0, [x1, x2, lsl #p0.b]	// Error (invalid shift amount)

	mov	x0, x0			// OK
	mov	x0, #x0			// OK
	mov	x0, s0			// OK (not considered a register here)
	mov	x0, #s0			// OK
	mov	x0, z0			// OK (not considered a register here)
	mov	x0, #z0			// OK
	mov	x0, z0.s		// OK (not considered a register here)
	mov	x0, #z0.s		// OK
	mov	x0, p0			// OK (not considered a register here)
	mov	x0, #p0			// OK
	mov	x0, p0.b		// OK (not considered a register here)
	mov	x0, #p0.b		// OK

	movk	x0, x0			// OK (not considered a register here)
	movk	x0, #x0			// OK
	movk	x0, s0			// OK (not considered a register here)
	movk	x0, #s0			// OK
	movk	x0, z0			// OK (not considered a register here)
	movk	x0, #z0			// OK
	movk	x0, z0.s		// OK (not considered a register here)
	movk	x0, #z0.s		// OK
	movk	x0, p0			// OK (not considered a register here)
	movk	x0, #p0			// OK
	movk	x0, p0.b		// OK (not considered a register here)
	movk	x0, #p0.b		// OK

	add	x0, x0, x0		// OK
	add	x0, x0, #x0		// OK
	add	x0, x0, s0		// OK (not considered a register here)
	add	x0, x0, #s0		// OK
	add	x0, x0, z0		// OK (not considered a register here)
	add	x0, x0, #z0		// OK
	add	x0, x0, z0.s		// OK (not considered a register here)
	add	x0, x0, #z0.s		// OK
	add	x0, x0, p0		// OK (not considered a register here)
	add	x0, x0, #p0		// OK
	add	x0, x0, p0.b		// OK (not considered a register here)
	add	x0, x0, #p0.b		// OK

	and	x0, x0, x0		// OK
	and	x0, x0, #x0		// Error (immediate out of range)
	and	x0, x0, s0		// Error (immediate out of range)
	and	x0, x0, #s0		// Error (immediate out of range)
	and	x0, x0, z0		// Error (immediate out of range)
	and	x0, x0, #z0		// Error (immediate out of range)
	and	x0, x0, z0.s		// Error (immediate out of range)
	and	x0, x0, #z0.s		// Error (immediate out of range)
	and	x0, x0, p0		// Error (immediate out of range)
	and	x0, x0, #p0		// Error (immediate out of range)
	and	x0, x0, p0.b		// OK (not considered a register here)
	and	x0, x0, #p0.b		// OK

	lsl	x0, x0, x0		// OK
	lsl	x0, x0, #x0		// OK
	lsl	x0, x0, s0		// Error (wrong register type)
	lsl	x0, x0, #s0		// OK
	lsl	x0, x0, z0		// OK (for compatibility)
	lsl	x0, x0, #z0		// OK
	lsl	x0, x0, z0.s		// OK (for compatibility)
	lsl	x0, x0, #z0.s		// OK
	lsl	x0, x0, p0		// OK (for compatibility)
	lsl	x0, x0, #p0		// OK
	lsl	x0, x0, p0.b		// OK (for compatibility)
	lsl	x0, x0, #p0.b		// OK

	adr	x0, x0			// OK (not considered a register here)
	adr	x0, #x0			// OK
	adr	x0, s0			// OK (not considered a register here)
	adr	x0, #s0			// OK
	adr	x0, z0			// OK (not considered a register here)
	adr	x0, #z0			// OK
	adr	x0, z0.s		// OK (not considered a register here)
	adr	x0, #z0.s		// OK
	adr	x0, p0			// OK (not considered a register here)
	adr	x0, #p0			// OK
	adr	x0, p0.b		// OK (not considered a register here)
	adr	x0, #p0.b		// OK

	svc	x0			// Error (immediate operand required)
	svc	#x0			// OK
	svc	s0			// Error (immediate operand required)
	svc	#s0			// OK
	svc	z0			// OK (for compatibility)
	svc	#z0			// OK
	svc	z0.s			// OK (for compatibility)
	svc	#z0.s			// OK
	svc	p0			// OK (for compatibility)
	svc	#p0			// OK
	svc	p0.b			// OK (for compatibility)
	svc	#p0.b			// OK