| ... | ... | @@ -204,6 +204,48 @@ pub fn addCases(ctx: *TestContext) !void { |
| 204 | 204 | , |
| 205 | 205 | "123456", |
| 206 | 206 | ); |
| 207 | |
| 208 | // Bit Shift Left |
| 209 | case.addCompareOutput( |
| 210 | \\pub fn main() void { |
| 211 | \\ var x: u32 = 1; |
| 212 | \\ assert(x << 1 == 2); |
| 213 | \\ |
| 214 | \\ x <<= 1; |
| 215 | \\ assert(x << 2 == 8); |
| 216 | \\ assert(x << 3 == 16); |
| 217 | \\} |
| 218 | \\ |
| 219 | \\pub fn assert(ok: bool) void { |
| 220 | \\ if (!ok) unreachable; // assertion failure |
| 221 | \\} |
| 222 | , |
| 223 | "", |
| 224 | ); |
| 225 | |
| 226 | // Bit Shift Right |
| 227 | case.addCompareOutput( |
| 228 | \\pub fn main() void { |
| 229 | \\ var a: u32 = 1024; |
| 230 | \\ assert(a >> 1 == 512); |
| 231 | \\ |
| 232 | \\ a >>= 1; |
| 233 | \\ assert(a >> 2 == 128); |
| 234 | \\ assert(a >> 3 == 64); |
| 235 | \\ assert(a >> 4 == 32); |
| 236 | \\ assert(a >> 5 == 16); |
| 237 | \\ assert(a >> 6 == 8); |
| 238 | \\ assert(a >> 7 == 4); |
| 239 | \\ assert(a >> 8 == 2); |
| 240 | \\ assert(a >> 9 == 1); |
| 241 | \\} |
| 242 | \\ |
| 243 | \\pub fn assert(ok: bool) void { |
| 244 | \\ if (!ok) unreachable; // assertion failure |
| 245 | \\} |
| 246 | , |
| 247 | "", |
| 248 | ); |
| 207 | 249 | } |
| 208 | 250 | |
| 209 | 251 | { |
| ... | ... | @@ -429,4 +471,48 @@ pub fn addCases(ctx: *TestContext) !void { |
| 429 | 471 | "", |
| 430 | 472 | ); |
| 431 | 473 | } |
| 474 | |
| 475 | { |
| 476 | var case = ctx.exe("print u32s", linux_arm); |
| 477 | case.addCompareOutput( |
| 478 | \\pub fn main() void { |
| 479 | \\ printNumberHex(0x00000000); |
| 480 | \\ printNumberHex(0xaaaaaaaa); |
| 481 | \\ printNumberHex(0xdeadbeef); |
| 482 | \\ printNumberHex(0x31415926); |
| 483 | \\} |
| 484 | \\ |
| 485 | \\fn printNumberHex(x: u32) void { |
| 486 | \\ var i: u5 = 28; |
| 487 | \\ while (true) : (i -= 4) { |
| 488 | \\ const digit = (x >> i) & 0xf; |
| 489 | \\ asm volatile ("svc #0" |
| 490 | \\ : |
| 491 | \\ : [number] "{r7}" (4), |
| 492 | \\ [arg1] "{r0}" (1), |
| 493 | \\ [arg2] "{r1}" (@ptrToInt("0123456789abcdef") + digit), |
| 494 | \\ [arg3] "{r2}" (1) |
| 495 | \\ : "memory" |
| 496 | \\ ); |
| 497 | \\ |
| 498 | \\ if (i == 0) break; |
| 499 | \\ } |
| 500 | \\ asm volatile ("svc #0" |
| 501 | \\ : |
| 502 | \\ : [number] "{r7}" (4), |
| 503 | \\ [arg1] "{r0}" (1), |
| 504 | \\ [arg2] "{r1}" (@ptrToInt("\n")), |
| 505 | \\ [arg3] "{r2}" (1) |
| 506 | \\ : "memory" |
| 507 | \\ ); |
| 508 | \\} |
| 509 | , |
| 510 | \\00000000 |
| 511 | \\aaaaaaaa |
| 512 | \\deadbeef |
| 513 | \\31415926 |
| 514 | \\ |
| 515 | , |
| 516 | ); |
| 517 | } |
| 432 | 518 | } |