1# source file to test illegal mips64r2 instructions
2
3        .set noreorder
4      .set noat
5
6      .text
7text_label:
8
9      # dext macro position/size checks
10
11	# constraint: 0 <= pos < 64
12	dext	$4, $5, -1, 1		# error (position)
13	dext	$4, $5, 0, 1
14	dext	$4, $5, 63, 1
15	dext	$4, $5, 64, 1		# error (position)
16
17	# constraint: 0 < size <= 64
18	dext	$4, $5, 0, 0		# error (size)
19	dext	$4, $5, 0, 1
20	dext	$4, $5, 0, 64
21	dext	$4, $5, 0, 65		# error (size)
22
23	# constraint: 0 < (pos+size) <= 64
24	dext	$4, $5, 0, 1
25	dext	$4, $5, 0, 2
26	dext	$4, $5, 0, 63
27	dext	$4, $5, 0, 64
28	dext	$4, $5, 1, 1
29	dext	$4, $5, 1, 2
30	dext	$4, $5, 1, 63
31	dext	$4, $5, 1, 64		# error (size)
32	dext	$4, $5, 63, 1
33	dext	$4, $5, 63, 2		# error (size)
34	dext	$4, $5, 63, 63		# error (size)
35	dext	$4, $5, 63, 64		# error (size)
36
37      # dextm instruction position/size checks
38
39	# constraint: 0 <= pos < 32
40	dextm	$4, $5, -1, 33		# error (position)
41	dextm	$4, $5, 0, 33
42	dextm	$4, $5, 31, 33
43	dextm	$4, $5, 32, 33		# error (position)
44
45	# constraint: 32 < size <= 64
46	dextm	$4, $5, 0, 32		# error (size)
47	dextm	$4, $5, 0, 33
48	dextm	$4, $5, 0, 64
49	dextm	$4, $5, 0, 65		# error (size)
50
51	# constraint: 32 < (pos+size) <= 64
52	dextm	$4, $5, 0, 33
53	dextm	$4, $5, 0, 34
54	dextm	$4, $5, 0, 63
55	dextm	$4, $5, 0, 64
56	dextm	$4, $5, 1, 33
57	dextm	$4, $5, 1, 34
58	dextm	$4, $5, 1, 63
59	dextm	$4, $5, 1, 64		# error (size)
60	dextm	$4, $5, 31, 33
61	dextm	$4, $5, 31, 34		# error (size)
62	dextm	$4, $5, 31, 63		# error (size)
63	dextm	$4, $5, 31, 64		# error (size)
64
65      # dextu instruction position/size checks
66
67	# constraint: 32 <= pos < 64
68	dextu	$4, $5, 31, 1		# error (position)
69	dextu	$4, $5, 32, 1
70	dextu	$4, $5, 63, 1
71	dextu	$4, $5, 64, 1		# error (position)
72
73	# constraint: 0 < size <= 32
74	dextu	$4, $5, 32, 0		# error (size)
75	dextu	$4, $5, 32, 1
76	dextu	$4, $5, 32, 32
77	dextu	$4, $5, 32, 33		# error (size)
78
79	# constraint: 32 < (pos+size) <= 64
80	dextu	$4, $5, 32, 1
81	dextu	$4, $5, 32, 2
82	dextu	$4, $5, 32, 31
83	dextu	$4, $5, 32, 32
84	dextu	$4, $5, 33, 1
85	dextu	$4, $5, 33, 2
86	dextu	$4, $5, 33, 31
87	dextu	$4, $5, 33, 32		# error (size)
88	dextu	$4, $5, 63, 1
89	dextu	$4, $5, 63, 2		# error (size)
90	dextu	$4, $5, 63, 31		# error (size)
91	dextu	$4, $5, 63, 32		# error (size)
92
93      # dins macro position/size checks
94
95	# constraint: 0 <= pos < 64
96	dins	$4, $5, -1, 1		# error (position)
97	dins	$4, $5, 0, 1
98	dins	$4, $5, 63, 1
99	dins	$4, $5, 64, 1		# error (position)
100
101	# constraint: 0 < size <= 64
102	dins	$4, $5, 0, 0		# error (size)
103	dins	$4, $5, 0, 1
104	dins	$4, $5, 0, 64
105	dins	$4, $5, 0, 65		# error (size)
106
107	# constraint: 0 < (pos+size) <= 64
108	dins	$4, $5, 0, 1
109	dins	$4, $5, 0, 2
110	dins	$4, $5, 0, 63
111	dins	$4, $5, 0, 64
112	dins	$4, $5, 1, 1
113	dins	$4, $5, 1, 2
114	dins	$4, $5, 1, 63
115	dins	$4, $5, 1, 64		# error (size)
116	dins	$4, $5, 63, 1
117	dins	$4, $5, 63, 2		# error (size)
118	dins	$4, $5, 63, 63		# error (size)
119	dins	$4, $5, 63, 64		# error (size)
120
121      # dinsm instruction position/size checks
122
123	# constraint: 0 <= pos < 32
124	dinsm	$4, $5, -1, 33		# error (position)
125	dinsm	$4, $5, 0, 33
126	dinsm	$4, $5, 31, 33
127	dinsm	$4, $5, 32, 33		# error (position)
128
129	# constraint: 2 <= size <= 64
130	dinsm	$4, $5, 31, 1		# error (size)
131	dinsm	$4, $5, 31, 2
132	dinsm	$4, $5, 0, 64
133	dinsm	$4, $5, 0, 65		# error (size)
134
135	# constraint: 32 < (pos+size) <= 64
136	dinsm	$4, $5, 0, 2		# error (size)
137	dinsm	$4, $5, 0, 3		# error (size)
138	dinsm	$4, $5, 0, 63
139	dinsm	$4, $5, 0, 64
140	dinsm	$4, $5, 1, 2		# error (size)
141	dinsm	$4, $5, 1, 3		# error (size)
142	dinsm	$4, $5, 1, 63
143	dinsm	$4, $5, 1, 64		# error (size)
144	dinsm	$4, $5, 30, 2		# error (size)
145	dinsm	$4, $5, 30, 3
146	dinsm	$4, $5, 30, 63		# error (size)
147	dinsm	$4, $5, 30, 64		# error (size)
148	dinsm	$4, $5, 31, 2
149	dinsm	$4, $5, 31, 3
150	dinsm	$4, $5, 31, 63		# error (size)
151	dinsm	$4, $5, 31, 64		# error (size)
152
153      # dinsu instruction position/size checks
154
155	# constraint: 32 <= pos < 64
156	dinsu	$4, $5, 31, 1		# error (position)
157	dinsu	$4, $5, 32, 1
158	dinsu	$4, $5, 63, 1
159	dinsu	$4, $5, 64, 1		# error (position)
160
161	# constraint: 1 <= size <= 32
162	dinsu	$4, $5, 32, 0		# error (size)
163	dinsu	$4, $5, 32, 1
164	dinsu	$4, $5, 32, 32
165	dinsu	$4, $5, 32, 33		# error (size)
166
167	# constraint: 32 < (pos+size) <= 64
168	dinsu	$4, $5, 32, 1
169	dinsu	$4, $5, 32, 2
170	dinsu	$4, $5, 32, 31
171	dinsu	$4, $5, 32, 32
172	dinsu	$4, $5, 33, 1
173	dinsu	$4, $5, 33, 2
174	dinsu	$4, $5, 33, 31
175	dinsu	$4, $5, 33, 32		# error (size)
176	dinsu	$4, $5, 62, 1
177	dinsu	$4, $5, 62, 2
178	dinsu	$4, $5, 62, 31		# error (size)
179	dinsu	$4, $5, 62, 32		# error (size)
180	dinsu	$4, $5, 63, 1
181	dinsu	$4, $5, 63, 2		# error (size)
182	dinsu	$4, $5, 63, 31		# error (size)
183	dinsu	$4, $5, 63, 32		# error (size)
184
185# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
186	.space  8
187