authorgravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2020-12-20 21:31:46+01:00
committergravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2020-12-21 19:24:23+01:00
log45a88be573dee8e61490f7d864cc53720981eaff
tree882c7922105b3ca81f9da80f3829d70a104efa9a
parent82236a502959d39b97c783dc409a9a5b720e6e8b
signaturelock-open Commit is signed but in an unrecognized format.

stage2 ARM: add test cases for binary bitwise operations


1 files changed, 134 insertions(+), 1 deletions(-)

test/stage2/arm.zig+134-1
......@@ -115,7 +115,8 @@ pub fn addCases(ctx: *TestContext) !void {
115115 }
116116
117117 {
118 var case = ctx.exe("addition", linux_arm);
118 var case = ctx.exe("arithmetic operations", linux_arm);
119
119120 // Add two numbers
120121 case.addCompareOutput(
121122 \\export fn _start() noreturn {
......@@ -148,5 +149,137 @@ pub fn addCases(ctx: *TestContext) !void {
148149 ,
149150 "12345612345678",
150151 );
152
153 // Subtract two numbers
154 case.addCompareOutput(
155 \\export fn _start() noreturn {
156 \\ print(10, 5);
157 \\ print(4, 3);
158 \\ exit();
159 \\}
160 \\
161 \\fn print(a: u32, b: u32) void {
162 \\ asm volatile ("svc #0"
163 \\ :
164 \\ : [number] "{r7}" (4),
165 \\ [arg3] "{r2}" (a - b),
166 \\ [arg1] "{r0}" (1),
167 \\ [arg2] "{r1}" (@ptrToInt("123456789"))
168 \\ : "memory"
169 \\ );
170 \\ return;
171 \\}
172 \\
173 \\fn exit() noreturn {
174 \\ asm volatile ("svc #0"
175 \\ :
176 \\ : [number] "{r7}" (1),
177 \\ [arg1] "{r0}" (0)
178 \\ : "memory"
179 \\ );
180 \\ unreachable;
181 \\}
182 ,
183 "123451",
184 );
185
186 // Bitwise And
187 case.addCompareOutput(
188 \\export fn _start() noreturn {
189 \\ print(8, 9);
190 \\ print(3, 7);
191 \\ exit();
192 \\}
193 \\
194 \\fn print(a: u32, b: u32) void {
195 \\ asm volatile ("svc #0"
196 \\ :
197 \\ : [number] "{r7}" (4),
198 \\ [arg3] "{r2}" (a & b),
199 \\ [arg1] "{r0}" (1),
200 \\ [arg2] "{r1}" (@ptrToInt("123456789"))
201 \\ : "memory"
202 \\ );
203 \\ return;
204 \\}
205 \\
206 \\fn exit() noreturn {
207 \\ asm volatile ("svc #0"
208 \\ :
209 \\ : [number] "{r7}" (1),
210 \\ [arg1] "{r0}" (0)
211 \\ : "memory"
212 \\ );
213 \\ unreachable;
214 \\}
215 ,
216 "12345678123",
217 );
218
219 // Bitwise Or
220 case.addCompareOutput(
221 \\export fn _start() noreturn {
222 \\ print(4, 2);
223 \\ print(3, 7);
224 \\ exit();
225 \\}
226 \\
227 \\fn print(a: u32, b: u32) void {
228 \\ asm volatile ("svc #0"
229 \\ :
230 \\ : [number] "{r7}" (4),
231 \\ [arg3] "{r2}" (a | b),
232 \\ [arg1] "{r0}" (1),
233 \\ [arg2] "{r1}" (@ptrToInt("123456789"))
234 \\ : "memory"
235 \\ );
236 \\ return;
237 \\}
238 \\
239 \\fn exit() noreturn {
240 \\ asm volatile ("svc #0"
241 \\ :
242 \\ : [number] "{r7}" (1),
243 \\ [arg1] "{r0}" (0)
244 \\ : "memory"
245 \\ );
246 \\ unreachable;
247 \\}
248 ,
249 "1234561234567",
250 );
251
252 // Bitwise Xor
253 case.addCompareOutput(
254 \\export fn _start() noreturn {
255 \\ print(42, 42);
256 \\ print(3, 5);
257 \\ exit();
258 \\}
259 \\
260 \\fn print(a: u32, b: u32) void {
261 \\ asm volatile ("svc #0"
262 \\ :
263 \\ : [number] "{r7}" (4),
264 \\ [arg3] "{r2}" (a ^ b),
265 \\ [arg1] "{r0}" (1),
266 \\ [arg2] "{r1}" (@ptrToInt("123456789"))
267 \\ : "memory"
268 \\ );
269 \\ return;
270 \\}
271 \\
272 \\fn exit() noreturn {
273 \\ asm volatile ("svc #0"
274 \\ :
275 \\ : [number] "{r7}" (1),
276 \\ [arg1] "{r0}" (0)
277 \\ : "memory"
278 \\ );
279 \\ unreachable;
280 \\}
281 ,
282 "123456",
283 );
151284 }
152285}