| ... | @@ -338,7 +338,6 @@ fn addInst(self: *Self, inst: Mir.Inst) error{OutOfMemory}!Mir.Inst.Index { | ... | @@ -338,7 +338,6 @@ fn addInst(self: *Self, inst: Mir.Inst) error{OutOfMemory}!Mir.Inst.Index { |
| 338 | fn addNop(self: *Self) error{OutOfMemory}!Mir.Inst.Index { | 338 | fn addNop(self: *Self) error{OutOfMemory}!Mir.Inst.Index { |
| 339 | return try self.addInst(.{ | 339 | return try self.addInst(.{ |
| 340 | .tag = .nop, | 340 | .tag = .nop, |
| 341 | .cond = .al, | | |
| 342 | .data = .{ .nop = {} }, | 341 | .data = .{ .nop = {} }, |
| 343 | }); | 342 | }); |
| 344 | } | 343 | } |
| ... | @@ -371,7 +370,6 @@ fn gen(self: *Self) !void { | ... | @@ -371,7 +370,6 @@ fn gen(self: *Self) !void { |
| 371 | // mov fp, sp | 370 | // mov fp, sp |
| 372 | _ = try self.addInst(.{ | 371 | _ = try self.addInst(.{ |
| 373 | .tag = .mov, | 372 | .tag = .mov, |
| 374 | .cond = .al, | | |
| 375 | .data = .{ .rr_op = .{ | 373 | .data = .{ .rr_op = .{ |
| 376 | .rd = .fp, | 374 | .rd = .fp, |
| 377 | .rn = .r0, | 375 | .rn = .r0, |
| ... | @@ -405,7 +403,6 @@ fn gen(self: *Self) !void { | ... | @@ -405,7 +403,6 @@ fn gen(self: *Self) !void { |
| 405 | | 403 | |
| 406 | self.mir_instructions.set(push_reloc, .{ | 404 | self.mir_instructions.set(push_reloc, .{ |
| 407 | .tag = .push, | 405 | .tag = .push, |
| 408 | .cond = .al, | | |
| 409 | .data = .{ .register_list = saved_regs }, | 406 | .data = .{ .register_list = saved_regs }, |
| 410 | }); | 407 | }); |
| 411 | | 408 | |
| ... | @@ -416,7 +413,6 @@ fn gen(self: *Self) !void { | ... | @@ -416,7 +413,6 @@ fn gen(self: *Self) !void { |
| 416 | if (Instruction.Operand.fromU32(stack_size)) |op| { | 413 | if (Instruction.Operand.fromU32(stack_size)) |op| { |
| 417 | self.mir_instructions.set(sub_reloc, .{ | 414 | self.mir_instructions.set(sub_reloc, .{ |
| 418 | .tag = .sub, | 415 | .tag = .sub, |
| 419 | .cond = .al, | | |
| 420 | .data = .{ .rr_op = .{ .rd = .sp, .rn = .sp, .op = op } }, | 416 | .data = .{ .rr_op = .{ .rd = .sp, .rn = .sp, .op = op } }, |
| 421 | }); | 417 | }); |
| 422 | } else { | 418 | } else { |
| ... | @@ -440,7 +436,6 @@ fn gen(self: *Self) !void { | ... | @@ -440,7 +436,6 @@ fn gen(self: *Self) !void { |
| 440 | } else for (self.exitlude_jump_relocs.items) |jmp_reloc| { | 436 | } else for (self.exitlude_jump_relocs.items) |jmp_reloc| { |
| 441 | self.mir_instructions.set(jmp_reloc, .{ | 437 | self.mir_instructions.set(jmp_reloc, .{ |
| 442 | .tag = .b, | 438 | .tag = .b, |
| 443 | .cond = .al, | | |
| 444 | .data = .{ .inst = @intCast(u32, self.mir_instructions.len) }, | 439 | .data = .{ .inst = @intCast(u32, self.mir_instructions.len) }, |
| 445 | }); | 440 | }); |
| 446 | } | 441 | } |
| ... | @@ -452,7 +447,6 @@ fn gen(self: *Self) !void { | ... | @@ -452,7 +447,6 @@ fn gen(self: *Self) !void { |
| 452 | // mov sp, fp | 447 | // mov sp, fp |
| 453 | _ = try self.addInst(.{ | 448 | _ = try self.addInst(.{ |
| 454 | .tag = .mov, | 449 | .tag = .mov, |
| 455 | .cond = .al, | | |
| 456 | .data = .{ .rr_op = .{ | 450 | .data = .{ .rr_op = .{ |
| 457 | .rd = .sp, | 451 | .rd = .sp, |
| 458 | .rn = .r0, | 452 | .rn = .r0, |
| ... | @@ -463,7 +457,6 @@ fn gen(self: *Self) !void { | ... | @@ -463,7 +457,6 @@ fn gen(self: *Self) !void { |
| 463 | // pop {fp, pc} | 457 | // pop {fp, pc} |
| 464 | _ = try self.addInst(.{ | 458 | _ = try self.addInst(.{ |
| 465 | .tag = .pop, | 459 | .tag = .pop, |
| 466 | .cond = .al, | | |
| 467 | .data = .{ .register_list = saved_regs }, | 460 | .data = .{ .register_list = saved_regs }, |
| 468 | }); | 461 | }); |
| 469 | } else { | 462 | } else { |
| ... | @@ -1251,7 +1244,6 @@ fn airSliceElemVal(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -1251,7 +1244,6 @@ fn airSliceElemVal(self: *Self, inst: Air.Inst.Index) !void { |
| 1251 | | 1244 | |
| 1252 | _ = try self.addInst(.{ | 1245 | _ = try self.addInst(.{ |
| 1253 | .tag = tag, | 1246 | .tag = tag, |
| 1254 | .cond = .al, | | |
| 1255 | .data = .{ .rr_offset = .{ | 1247 | .data = .{ .rr_offset = .{ |
| 1256 | .rt = dst_reg, | 1248 | .rt = dst_reg, |
| 1257 | .rn = base_mcv.register, | 1249 | .rn = base_mcv.register, |
| ... | @@ -1262,7 +1254,6 @@ fn airSliceElemVal(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -1262,7 +1254,6 @@ fn airSliceElemVal(self: *Self, inst: Air.Inst.Index) !void { |
| 1262 | 2 => { | 1254 | 2 => { |
| 1263 | _ = try self.addInst(.{ | 1255 | _ = try self.addInst(.{ |
| 1264 | .tag = .ldrh, | 1256 | .tag = .ldrh, |
| 1265 | .cond = .al, | | |
| 1266 | .data = .{ .rr_extra_offset = .{ | 1257 | .data = .{ .rr_extra_offset = .{ |
| 1267 | .rt = dst_reg, | 1258 | .rt = dst_reg, |
| 1268 | .rn = base_mcv.register, | 1259 | .rn = base_mcv.register, |
| ... | @@ -1406,7 +1397,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo | ... | @@ -1406,7 +1397,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo |
| 1406 | .register => |dst_reg| { | 1397 | .register => |dst_reg| { |
| 1407 | _ = try self.addInst(.{ | 1398 | _ = try self.addInst(.{ |
| 1408 | .tag = .ldr, | 1399 | .tag = .ldr, |
| 1409 | .cond = .al, | | |
| 1410 | .data = .{ .rr_offset = .{ | 1400 | .data = .{ .rr_offset = .{ |
| 1411 | .rt = dst_reg, | 1401 | .rt = dst_reg, |
| 1412 | .rn = reg, | 1402 | .rn = reg, |
| ... | @@ -1430,7 +1420,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo | ... | @@ -1430,7 +1420,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo |
| 1430 | const tmp_regs = try self.register_manager.allocRegs(2, .{ null, null }, &.{reg}); | 1420 | const tmp_regs = try self.register_manager.allocRegs(2, .{ null, null }, &.{reg}); |
| 1431 | _ = try self.addInst(.{ | 1421 | _ = try self.addInst(.{ |
| 1432 | .tag = .ldr, | 1422 | .tag = .ldr, |
| 1433 | .cond = .al, | | |
| 1434 | .data = .{ .rr_offset = .{ | 1423 | .data = .{ .rr_offset = .{ |
| 1435 | .rt = tmp_regs[0], | 1424 | .rt = tmp_regs[0], |
| 1436 | .rn = reg, | 1425 | .rn = reg, |
| ... | @@ -1439,7 +1428,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo | ... | @@ -1439,7 +1428,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo |
| 1439 | }); | 1428 | }); |
| 1440 | _ = try self.addInst(.{ | 1429 | _ = try self.addInst(.{ |
| 1441 | .tag = .ldr, | 1430 | .tag = .ldr, |
| 1442 | .cond = .al, | | |
| 1443 | .data = .{ .rr_offset = .{ | 1431 | .data = .{ .rr_offset = .{ |
| 1444 | .rt = tmp_regs[1], | 1432 | .rt = tmp_regs[1], |
| 1445 | .rn = reg, | 1433 | .rn = reg, |
| ... | @@ -1465,7 +1453,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo | ... | @@ -1465,7 +1453,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo |
| 1465 | }; | 1453 | }; |
| 1466 | _ = try self.addInst(.{ | 1454 | _ = try self.addInst(.{ |
| 1467 | .tag = .sub, | 1455 | .tag = .sub, |
| 1468 | .cond = .al, | | |
| 1469 | .data = .{ .rr_op = .{ | 1456 | .data = .{ .rr_op = .{ |
| 1470 | .rd = dst_reg, | 1457 | .rd = dst_reg, |
| 1471 | .rn = .fp, | 1458 | .rn = .fp, |
| ... | @@ -1479,7 +1466,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo | ... | @@ -1479,7 +1466,6 @@ fn load(self: *Self, dst_mcv: MCValue, ptr: MCValue, ptr_ty: Type) InnerError!vo |
| 1479 | }; | 1466 | }; |
| 1480 | _ = try self.addInst(.{ | 1467 | _ = try self.addInst(.{ |
| 1481 | .tag = .mov, | 1468 | .tag = .mov, |
| 1482 | .cond = .al, | | |
| 1483 | .data = .{ .rr_op = .{ | 1469 | .data = .{ .rr_op = .{ |
| 1484 | .rd = len_reg, | 1470 | .rd = len_reg, |
| 1485 | .rn = .r0, | 1471 | .rn = .r0, |
| ... | @@ -1560,7 +1546,6 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type | ... | @@ -1560,7 +1546,6 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type |
| 1560 | .register => |value_reg| { | 1546 | .register => |value_reg| { |
| 1561 | _ = try self.addInst(.{ | 1547 | _ = try self.addInst(.{ |
| 1562 | .tag = .str, | 1548 | .tag = .str, |
| 1563 | .cond = .al, | | |
| 1564 | .data = .{ .rr_offset = .{ | 1549 | .data = .{ .rr_offset = .{ |
| 1565 | .rt = value_reg, | 1550 | .rt = value_reg, |
| 1566 | .rn = addr_reg, | 1551 | .rn = addr_reg, |
| ... | @@ -1866,7 +1851,6 @@ fn genArmBinOpCode( | ... | @@ -1866,7 +1851,6 @@ fn genArmBinOpCode( |
| 1866 | | 1851 | |
| 1867 | _ = try self.addInst(.{ | 1852 | _ = try self.addInst(.{ |
| 1868 | .tag = tag, | 1853 | .tag = tag, |
| 1869 | .cond = .al, | | |
| 1870 | .data = .{ .rr_op = .{ | 1854 | .data = .{ .rr_op = .{ |
| 1871 | .rd = dst_reg, | 1855 | .rd = dst_reg, |
| 1872 | .rn = op1, | 1856 | .rn = op1, |
| ... | @@ -1879,7 +1863,6 @@ fn genArmBinOpCode( | ... | @@ -1879,7 +1863,6 @@ fn genArmBinOpCode( |
| 1879 | | 1863 | |
| 1880 | _ = try self.addInst(.{ | 1864 | _ = try self.addInst(.{ |
| 1881 | .tag = tag, | 1865 | .tag = tag, |
| 1882 | .cond = .al, | | |
| 1883 | .data = .{ .rr_op = .{ | 1866 | .data = .{ .rr_op = .{ |
| 1884 | .rd = dst_reg, | 1867 | .rd = dst_reg, |
| 1885 | .rn = op1, | 1868 | .rn = op1, |
| ... | @@ -1890,7 +1873,6 @@ fn genArmBinOpCode( | ... | @@ -1890,7 +1873,6 @@ fn genArmBinOpCode( |
| 1890 | .cmp_eq => { | 1873 | .cmp_eq => { |
| 1891 | _ = try self.addInst(.{ | 1874 | _ = try self.addInst(.{ |
| 1892 | .tag = .cmp, | 1875 | .tag = .cmp, |
| 1893 | .cond = .al, | | |
| 1894 | .data = .{ .rr_op = .{ | 1876 | .data = .{ .rr_op = .{ |
| 1895 | .rd = .r0, | 1877 | .rd = .r0, |
| 1896 | .rn = op1, | 1878 | .rn = op1, |
| ... | @@ -1916,7 +1898,6 @@ fn genArmBinOpCode( | ... | @@ -1916,7 +1898,6 @@ fn genArmBinOpCode( |
| 1916 | | 1898 | |
| 1917 | _ = try self.addInst(.{ | 1899 | _ = try self.addInst(.{ |
| 1918 | .tag = tag, | 1900 | .tag = tag, |
| 1919 | .cond = .al, | | |
| 1920 | .data = .{ .rr_shift = .{ | 1901 | .data = .{ .rr_shift = .{ |
| 1921 | .rd = dst_reg, | 1902 | .rd = dst_reg, |
| 1922 | .rm = op1, | 1903 | .rm = op1, |
| ... | @@ -1993,7 +1974,6 @@ fn genArmMul(self: *Self, inst: Air.Inst.Index, op_lhs: Air.Inst.Ref, op_rhs: Ai | ... | @@ -1993,7 +1974,6 @@ fn genArmMul(self: *Self, inst: Air.Inst.Index, op_lhs: Air.Inst.Ref, op_rhs: Ai |
| 1993 | | 1974 | |
| 1994 | _ = try self.addInst(.{ | 1975 | _ = try self.addInst(.{ |
| 1995 | .tag = .mul, | 1976 | .tag = .mul, |
| 1996 | .cond = .al, | | |
| 1997 | .data = .{ .rrr = .{ | 1977 | .data = .{ .rrr = .{ |
| 1998 | .rd = dst_mcv.register, | 1978 | .rd = dst_mcv.register, |
| 1999 | .rn = lhs_mcv.register, | 1979 | .rn = lhs_mcv.register, |
| ... | @@ -2045,7 +2025,6 @@ fn genArmMulConstant(self: *Self, inst: Air.Inst.Index, op: Air.Inst.Ref, op_ind | ... | @@ -2045,7 +2025,6 @@ fn genArmMulConstant(self: *Self, inst: Air.Inst.Index, op: Air.Inst.Ref, op_ind |
| 2045 | | 2025 | |
| 2046 | _ = try self.addInst(.{ | 2026 | _ = try self.addInst(.{ |
| 2047 | .tag = .mul, | 2027 | .tag = .mul, |
| 2048 | .cond = .al, | | |
| 2049 | .data = .{ .rrr = .{ | 2028 | .data = .{ .rrr = .{ |
| 2050 | .rd = dst_mcv.register, | 2029 | .rd = dst_mcv.register, |
| 2051 | .rn = lhs_mcv.register, | 2030 | .rn = lhs_mcv.register, |
| ... | @@ -2066,7 +2045,6 @@ fn genArmInlineMemcpy( | ... | @@ -2066,7 +2045,6 @@ fn genArmInlineMemcpy( |
| 2066 | // mov count, #0 | 2045 | // mov count, #0 |
| 2067 | _ = try self.addInst(.{ | 2046 | _ = try self.addInst(.{ |
| 2068 | .tag = .mov, | 2047 | .tag = .mov, |
| 2069 | .cond = .al, | | |
| 2070 | .data = .{ .rr_op = .{ | 2048 | .data = .{ .rr_op = .{ |
| 2071 | .rd = count, | 2049 | .rd = count, |
| 2072 | .rn = .r0, | 2050 | .rn = .r0, |
| ... | @@ -2078,7 +2056,6 @@ fn genArmInlineMemcpy( | ... | @@ -2078,7 +2056,6 @@ fn genArmInlineMemcpy( |
| 2078 | // cmp count, len | 2056 | // cmp count, len |
| 2079 | _ = try self.addInst(.{ | 2057 | _ = try self.addInst(.{ |
| 2080 | .tag = .cmp, | 2058 | .tag = .cmp, |
| 2081 | .cond = .al, | | |
| 2082 | .data = .{ .rr_op = .{ | 2059 | .data = .{ .rr_op = .{ |
| 2083 | .rd = .r0, | 2060 | .rd = .r0, |
| 2084 | .rn = count, | 2061 | .rn = count, |
| ... | @@ -2096,7 +2073,6 @@ fn genArmInlineMemcpy( | ... | @@ -2096,7 +2073,6 @@ fn genArmInlineMemcpy( |
| 2096 | // ldrb tmp, [src, count] | 2073 | // ldrb tmp, [src, count] |
| 2097 | _ = try self.addInst(.{ | 2074 | _ = try self.addInst(.{ |
| 2098 | .tag = .ldrb, | 2075 | .tag = .ldrb, |
| 2099 | .cond = .al, | | |
| 2100 | .data = .{ .rr_offset = .{ | 2076 | .data = .{ .rr_offset = .{ |
| 2101 | .rt = tmp, | 2077 | .rt = tmp, |
| 2102 | .rn = src, | 2078 | .rn = src, |
| ... | @@ -2107,7 +2083,6 @@ fn genArmInlineMemcpy( | ... | @@ -2107,7 +2083,6 @@ fn genArmInlineMemcpy( |
| 2107 | // strb tmp, [src, count] | 2083 | // strb tmp, [src, count] |
| 2108 | _ = try self.addInst(.{ | 2084 | _ = try self.addInst(.{ |
| 2109 | .tag = .strb, | 2085 | .tag = .strb, |
| 2110 | .cond = .al, | | |
| 2111 | .data = .{ .rr_offset = .{ | 2086 | .data = .{ .rr_offset = .{ |
| 2112 | .rt = tmp, | 2087 | .rt = tmp, |
| 2113 | .rn = dst, | 2088 | .rn = dst, |
| ... | @@ -2118,7 +2093,6 @@ fn genArmInlineMemcpy( | ... | @@ -2118,7 +2093,6 @@ fn genArmInlineMemcpy( |
| 2118 | // add count, count, #1 | 2093 | // add count, count, #1 |
| 2119 | _ = try self.addInst(.{ | 2094 | _ = try self.addInst(.{ |
| 2120 | .tag = .add, | 2095 | .tag = .add, |
| 2121 | .cond = .al, | | |
| 2122 | .data = .{ .rr_op = .{ | 2096 | .data = .{ .rr_op = .{ |
| 2123 | .rd = count, | 2097 | .rd = count, |
| 2124 | .rn = count, | 2098 | .rn = count, |
| ... | @@ -2129,7 +2103,6 @@ fn genArmInlineMemcpy( | ... | @@ -2129,7 +2103,6 @@ fn genArmInlineMemcpy( |
| 2129 | // b loop | 2103 | // b loop |
| 2130 | _ = try self.addInst(.{ | 2104 | _ = try self.addInst(.{ |
| 2131 | .tag = .b, | 2105 | .tag = .b, |
| 2132 | .cond = .al, | | |
| 2133 | .data = .{ .inst = @intCast(u32, self.mir_instructions.len - 5) }, | 2106 | .data = .{ .inst = @intCast(u32, self.mir_instructions.len - 5) }, |
| 2134 | }); | 2107 | }); |
| 2135 | | 2108 | |
| ... | @@ -2236,7 +2209,6 @@ fn airArg(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2236,7 +2209,6 @@ fn airArg(self: *Self, inst: Air.Inst.Index) !void { |
| 2236 | fn airBreakpoint(self: *Self) !void { | 2209 | fn airBreakpoint(self: *Self) !void { |
| 2237 | _ = try self.addInst(.{ | 2210 | _ = try self.addInst(.{ |
| 2238 | .tag = .bkpt, | 2211 | .tag = .bkpt, |
| 2239 | .cond = .al, | | |
| 2240 | .data = .{ .imm16 = 0 }, | 2212 | .data = .{ .imm16 = 0 }, |
| 2241 | }); | 2213 | }); |
| 2242 | return self.finishAirBookkeeping(); | 2214 | return self.finishAirBookkeeping(); |
| ... | @@ -2348,14 +2320,12 @@ fn airCall(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2348,14 +2320,12 @@ fn airCall(self: *Self, inst: Air.Inst.Index) !void { |
| 2348 | if (Target.arm.featureSetHas(self.target.cpu.features, .has_v5t)) { | 2320 | if (Target.arm.featureSetHas(self.target.cpu.features, .has_v5t)) { |
| 2349 | _ = try self.addInst(.{ | 2321 | _ = try self.addInst(.{ |
| 2350 | .tag = .blx, | 2322 | .tag = .blx, |
| 2351 | .cond = .al, | | |
| 2352 | .data = .{ .reg = .lr }, | 2323 | .data = .{ .reg = .lr }, |
| 2353 | }); | 2324 | }); |
| 2354 | } else { | 2325 | } else { |
| 2355 | return self.fail("TODO fix blx emulation for ARM <v5", .{}); | 2326 | return self.fail("TODO fix blx emulation for ARM <v5", .{}); |
| 2356 | // _ = try self.addInst(.{ | 2327 | // _ = try self.addInst(.{ |
| 2357 | // .tag = .mov, | 2328 | // .tag = .mov, |
| 2358 | // .cond = .al, | | |
| 2359 | // .data = .{ .rr_op = .{ | 2329 | // .data = .{ .rr_op = .{ |
| 2360 | // .rd = .lr, | 2330 | // .rd = .lr, |
| 2361 | // .rn = .r0, | 2331 | // .rn = .r0, |
| ... | @@ -2364,7 +2334,6 @@ fn airCall(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2364,7 +2334,6 @@ fn airCall(self: *Self, inst: Air.Inst.Index) !void { |
| 2364 | // }); | 2334 | // }); |
| 2365 | // _ = try self.addInst(.{ | 2335 | // _ = try self.addInst(.{ |
| 2366 | // .tag = .bx, | 2336 | // .tag = .bx, |
| 2367 | // .cond = .al, | | |
| 2368 | // .data = .{ .reg = .lr }, | 2337 | // .data = .{ .reg = .lr }, |
| 2369 | // }); | 2338 | // }); |
| 2370 | } | 2339 | } |
| ... | @@ -2539,7 +2508,6 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2539,7 +2508,6 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { |
| 2539 | // bne ... | 2508 | // bne ... |
| 2540 | _ = try self.addInst(.{ | 2509 | _ = try self.addInst(.{ |
| 2541 | .tag = .cmp, | 2510 | .tag = .cmp, |
| 2542 | .cond = .al, | | |
| 2543 | .data = .{ .rr_op = .{ | 2511 | .data = .{ .rr_op = .{ |
| 2544 | .rd = .r0, | 2512 | .rd = .r0, |
| 2545 | .rn = reg, | 2513 | .rn = reg, |
| ... | @@ -2889,7 +2857,6 @@ fn airLoop(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2889,7 +2857,6 @@ fn airLoop(self: *Self, inst: Air.Inst.Index) !void { |
| 2889 | fn jump(self: *Self, inst: Mir.Inst.Index) !void { | 2857 | fn jump(self: *Self, inst: Mir.Inst.Index) !void { |
| 2890 | _ = try self.addInst(.{ | 2858 | _ = try self.addInst(.{ |
| 2891 | .tag = .b, | 2859 | .tag = .b, |
| 2892 | .cond = .al, | | |
| 2893 | .data = .{ .inst = inst }, | 2860 | .data = .{ .inst = inst }, |
| 2894 | }); | 2861 | }); |
| 2895 | } | 2862 | } |
| ... | @@ -2973,7 +2940,6 @@ fn brVoid(self: *Self, block: Air.Inst.Index) !void { | ... | @@ -2973,7 +2940,6 @@ fn brVoid(self: *Self, block: Air.Inst.Index) !void { |
| 2973 | // Emit a jump with a relocation. It will be patched up after the block ends. | 2940 | // Emit a jump with a relocation. It will be patched up after the block ends. |
| 2974 | try block_data.relocs.append(self.gpa, try self.addInst(.{ | 2941 | try block_data.relocs.append(self.gpa, try self.addInst(.{ |
| 2975 | .tag = .b, | 2942 | .tag = .b, |
| 2976 | .cond = .al, | | |
| 2977 | .data = .{ .inst = undefined }, // populated later through performReloc | 2943 | .data = .{ .inst = undefined }, // populated later through performReloc |
| 2978 | })); | 2944 | })); |
| 2979 | } | 2945 | } |
| ... | @@ -3029,7 +2995,6 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -3029,7 +2995,6 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { |
| 3029 | if (mem.eql(u8, asm_source, "svc #0")) { | 2995 | if (mem.eql(u8, asm_source, "svc #0")) { |
| 3030 | _ = try self.addInst(.{ | 2996 | _ = try self.addInst(.{ |
| 3031 | .tag = .svc, | 2997 | .tag = .svc, |
| 3032 | .cond = .al, | | |
| 3033 | .data = .{ .imm24 = 0 }, | 2998 | .data = .{ .imm24 = 0 }, |
| 3034 | }); | 2999 | }); |
| 3035 | } else { | 3000 | } else { |
| ... | @@ -3135,7 +3100,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3135,7 +3100,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3135 | | 3100 | |
| 3136 | _ = try self.addInst(.{ | 3101 | _ = try self.addInst(.{ |
| 3137 | .tag = tag, | 3102 | .tag = tag, |
| 3138 | .cond = .al, | | |
| 3139 | .data = .{ .rr_offset = .{ | 3103 | .data = .{ .rr_offset = .{ |
| 3140 | .rt = reg, | 3104 | .rt = reg, |
| 3141 | .rn = .fp, | 3105 | .rn = .fp, |
| ... | @@ -3153,7 +3117,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3153,7 +3117,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3153 | | 3117 | |
| 3154 | _ = try self.addInst(.{ | 3118 | _ = try self.addInst(.{ |
| 3155 | .tag = .strh, | 3119 | .tag = .strh, |
| 3156 | .cond = .al, | | |
| 3157 | .data = .{ .rr_extra_offset = .{ | 3120 | .data = .{ .rr_extra_offset = .{ |
| 3158 | .rt = reg, | 3121 | .rt = reg, |
| 3159 | .rn = .fp, | 3122 | .rn = .fp, |
| ... | @@ -3200,7 +3163,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3200,7 +3163,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3200 | }; | 3163 | }; |
| 3201 | _ = try self.addInst(.{ | 3164 | _ = try self.addInst(.{ |
| 3202 | .tag = .sub, | 3165 | .tag = .sub, |
| 3203 | .cond = .al, | | |
| 3204 | .data = .{ .rr_op = .{ | 3166 | .data = .{ .rr_op = .{ |
| 3205 | .rd = src_reg, | 3167 | .rd = src_reg, |
| 3206 | .rn = .fp, | 3168 | .rn = .fp, |
| ... | @@ -3215,7 +3177,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3215,7 +3177,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3215 | }; | 3177 | }; |
| 3216 | _ = try self.addInst(.{ | 3178 | _ = try self.addInst(.{ |
| 3217 | .tag = .sub, | 3179 | .tag = .sub, |
| 3218 | .cond = .al, | | |
| 3219 | .data = .{ .rr_op = .{ | 3180 | .data = .{ .rr_op = .{ |
| 3220 | .rd = dst_reg, | 3181 | .rd = dst_reg, |
| 3221 | .rn = .fp, | 3182 | .rn = .fp, |
| ... | @@ -3230,7 +3191,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3230,7 +3191,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3230 | }; | 3191 | }; |
| 3231 | _ = try self.addInst(.{ | 3192 | _ = try self.addInst(.{ |
| 3232 | .tag = .mov, | 3193 | .tag = .mov, |
| 3233 | .cond = .al, | | |
| 3234 | .data = .{ .rr_op = .{ | 3194 | .data = .{ .rr_op = .{ |
| 3235 | .rd = len_reg, | 3195 | .rd = len_reg, |
| 3236 | .rn = .r0, | 3196 | .rn = .r0, |
| ... | @@ -3272,7 +3232,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3272,7 +3232,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3272 | // mov reg, 0 | 3232 | // mov reg, 0 |
| 3273 | _ = try self.addInst(.{ | 3233 | _ = try self.addInst(.{ |
| 3274 | .tag = .mov, | 3234 | .tag = .mov, |
| 3275 | .cond = .al, | | |
| 3276 | .data = .{ .rr_op = .{ | 3235 | .data = .{ .rr_op = .{ |
| 3277 | .rd = reg, | 3236 | .rd = reg, |
| 3278 | .rn = .r0, | 3237 | .rn = .r0, |
| ... | @@ -3297,7 +3256,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3297,7 +3256,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3297 | if (Instruction.Operand.fromU32(@intCast(u32, x))) |op| { | 3256 | if (Instruction.Operand.fromU32(@intCast(u32, x))) |op| { |
| 3298 | _ = try self.addInst(.{ | 3257 | _ = try self.addInst(.{ |
| 3299 | .tag = .mov, | 3258 | .tag = .mov, |
| 3300 | .cond = .al, | | |
| 3301 | .data = .{ .rr_op = .{ | 3259 | .data = .{ .rr_op = .{ |
| 3302 | .rd = reg, | 3260 | .rd = reg, |
| 3303 | .rn = .r0, | 3261 | .rn = .r0, |
| ... | @@ -3307,7 +3265,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3307,7 +3265,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3307 | } else if (Instruction.Operand.fromU32(~@intCast(u32, x))) |op| { | 3265 | } else if (Instruction.Operand.fromU32(~@intCast(u32, x))) |op| { |
| 3308 | _ = try self.addInst(.{ | 3266 | _ = try self.addInst(.{ |
| 3309 | .tag = .mvn, | 3267 | .tag = .mvn, |
| 3310 | .cond = .al, | | |
| 3311 | .data = .{ .rr_op = .{ | 3268 | .data = .{ .rr_op = .{ |
| 3312 | .rd = reg, | 3269 | .rd = reg, |
| 3313 | .rn = .r0, | 3270 | .rn = .r0, |
| ... | @@ -3318,7 +3275,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3318,7 +3275,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3318 | if (Target.arm.featureSetHas(self.target.cpu.features, .has_v7)) { | 3275 | if (Target.arm.featureSetHas(self.target.cpu.features, .has_v7)) { |
| 3319 | _ = try self.addInst(.{ | 3276 | _ = try self.addInst(.{ |
| 3320 | .tag = .movw, | 3277 | .tag = .movw, |
| 3321 | .cond = .al, | | |
| 3322 | .data = .{ .r_imm16 = .{ | 3278 | .data = .{ .r_imm16 = .{ |
| 3323 | .rd = reg, | 3279 | .rd = reg, |
| 3324 | .imm16 = @intCast(u16, x), | 3280 | .imm16 = @intCast(u16, x), |
| ... | @@ -3327,7 +3283,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3327,7 +3283,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3327 | } else { | 3283 | } else { |
| 3328 | _ = try self.addInst(.{ | 3284 | _ = try self.addInst(.{ |
| 3329 | .tag = .mov, | 3285 | .tag = .mov, |
| 3330 | .cond = .al, | | |
| 3331 | .data = .{ .rr_op = .{ | 3286 | .data = .{ .rr_op = .{ |
| 3332 | .rd = reg, | 3287 | .rd = reg, |
| 3333 | .rn = .r0, | 3288 | .rn = .r0, |
| ... | @@ -3336,7 +3291,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3336,7 +3291,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3336 | }); | 3291 | }); |
| 3337 | _ = try self.addInst(.{ | 3292 | _ = try self.addInst(.{ |
| 3338 | .tag = .orr, | 3293 | .tag = .orr, |
| 3339 | .cond = .al, | | |
| 3340 | .data = .{ .rr_op = .{ | 3294 | .data = .{ .rr_op = .{ |
| 3341 | .rd = reg, | 3295 | .rd = reg, |
| 3342 | .rn = reg, | 3296 | .rn = reg, |
| ... | @@ -3353,7 +3307,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3353,7 +3307,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3353 | // movt reg, #0xaaaa | 3307 | // movt reg, #0xaaaa |
| 3354 | _ = try self.addInst(.{ | 3308 | _ = try self.addInst(.{ |
| 3355 | .tag = .movw, | 3309 | .tag = .movw, |
| 3356 | .cond = .al, | | |
| 3357 | .data = .{ .r_imm16 = .{ | 3310 | .data = .{ .r_imm16 = .{ |
| 3358 | .rd = reg, | 3311 | .rd = reg, |
| 3359 | .imm16 = @truncate(u16, x), | 3312 | .imm16 = @truncate(u16, x), |
| ... | @@ -3361,7 +3314,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3361,7 +3314,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3361 | }); | 3314 | }); |
| 3362 | _ = try self.addInst(.{ | 3315 | _ = try self.addInst(.{ |
| 3363 | .tag = .movt, | 3316 | .tag = .movt, |
| 3364 | .cond = .al, | | |
| 3365 | .data = .{ .r_imm16 = .{ | 3317 | .data = .{ .r_imm16 = .{ |
| 3366 | .rd = reg, | 3318 | .rd = reg, |
| 3367 | .imm16 = @truncate(u16, x >> 16), | 3319 | .imm16 = @truncate(u16, x >> 16), |
| ... | @@ -3375,7 +3327,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3375,7 +3327,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3375 | // orr reg, reg, #0xdd, 8 | 3327 | // orr reg, reg, #0xdd, 8 |
| 3376 | _ = try self.addInst(.{ | 3328 | _ = try self.addInst(.{ |
| 3377 | .tag = .mov, | 3329 | .tag = .mov, |
| 3378 | .cond = .al, | | |
| 3379 | .data = .{ .rr_op = .{ | 3330 | .data = .{ .rr_op = .{ |
| 3380 | .rd = reg, | 3331 | .rd = reg, |
| 3381 | .rn = .r0, | 3332 | .rn = .r0, |
| ... | @@ -3384,7 +3335,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3384,7 +3335,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3384 | }); | 3335 | }); |
| 3385 | _ = try self.addInst(.{ | 3336 | _ = try self.addInst(.{ |
| 3386 | .tag = .orr, | 3337 | .tag = .orr, |
| 3387 | .cond = .al, | | |
| 3388 | .data = .{ .rr_op = .{ | 3338 | .data = .{ .rr_op = .{ |
| 3389 | .rd = reg, | 3339 | .rd = reg, |
| 3390 | .rn = reg, | 3340 | .rn = reg, |
| ... | @@ -3393,7 +3343,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3393,7 +3343,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3393 | }); | 3343 | }); |
| 3394 | _ = try self.addInst(.{ | 3344 | _ = try self.addInst(.{ |
| 3395 | .tag = .orr, | 3345 | .tag = .orr, |
| 3396 | .cond = .al, | | |
| 3397 | .data = .{ .rr_op = .{ | 3346 | .data = .{ .rr_op = .{ |
| 3398 | .rd = reg, | 3347 | .rd = reg, |
| 3399 | .rn = reg, | 3348 | .rn = reg, |
| ... | @@ -3402,7 +3351,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3402,7 +3351,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3402 | }); | 3351 | }); |
| 3403 | _ = try self.addInst(.{ | 3352 | _ = try self.addInst(.{ |
| 3404 | .tag = .orr, | 3353 | .tag = .orr, |
| 3405 | .cond = .al, | | |
| 3406 | .data = .{ .rr_op = .{ | 3354 | .data = .{ .rr_op = .{ |
| 3407 | .rd = reg, | 3355 | .rd = reg, |
| 3408 | .rn = reg, | 3356 | .rn = reg, |
| ... | @@ -3420,7 +3368,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3420,7 +3368,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3420 | // mov reg, src_reg | 3368 | // mov reg, src_reg |
| 3421 | _ = try self.addInst(.{ | 3369 | _ = try self.addInst(.{ |
| 3422 | .tag = .mov, | 3370 | .tag = .mov, |
| 3423 | .cond = .al, | | |
| 3424 | .data = .{ .rr_op = .{ | 3371 | .data = .{ .rr_op = .{ |
| 3425 | .rd = reg, | 3372 | .rd = reg, |
| 3426 | .rn = .r0, | 3373 | .rn = .r0, |
| ... | @@ -3434,7 +3381,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3434,7 +3381,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3434 | try self.genSetReg(ty, reg, .{ .immediate = @intCast(u32, addr) }); | 3381 | try self.genSetReg(ty, reg, .{ .immediate = @intCast(u32, addr) }); |
| 3435 | _ = try self.addInst(.{ | 3382 | _ = try self.addInst(.{ |
| 3436 | .tag = .ldr, | 3383 | .tag = .ldr, |
| 3437 | .cond = .al, | | |
| 3438 | .data = .{ .rr_offset = .{ | 3384 | .data = .{ .rr_offset = .{ |
| 3439 | .rt = reg, | 3385 | .rt = reg, |
| 3440 | .rn = reg, | 3386 | .rn = reg, |
| ... | @@ -3461,7 +3407,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3461,7 +3407,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3461 | | 3407 | |
| 3462 | _ = try self.addInst(.{ | 3408 | _ = try self.addInst(.{ |
| 3463 | .tag = tag, | 3409 | .tag = tag, |
| 3464 | .cond = .al, | | |
| 3465 | .data = .{ .rr_offset = .{ | 3410 | .data = .{ .rr_offset = .{ |
| 3466 | .rt = reg, | 3411 | .rt = reg, |
| 3467 | .rn = .fp, | 3412 | .rn = .fp, |
| ... | @@ -3479,7 +3424,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3479,7 +3424,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3479 | | 3424 | |
| 3480 | _ = try self.addInst(.{ | 3425 | _ = try self.addInst(.{ |
| 3481 | .tag = .ldrh, | 3426 | .tag = .ldrh, |
| 3482 | .cond = .al, | | |
| 3483 | .data = .{ .rr_extra_offset = .{ | 3427 | .data = .{ .rr_extra_offset = .{ |
| 3484 | .rt = reg, | 3428 | .rt = reg, |
| 3485 | .rn = .fp, | 3429 | .rn = .fp, |
| ... | @@ -3507,7 +3451,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3507,7 +3451,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3507 | | 3451 | |
| 3508 | _ = try self.addInst(.{ | 3452 | _ = try self.addInst(.{ |
| 3509 | .tag = tag, | 3453 | .tag = tag, |
| 3510 | .cond = .al, | | |
| 3511 | .data = .{ .r_stack_offset = .{ | 3454 | .data = .{ .r_stack_offset = .{ |
| 3512 | .rt = reg, | 3455 | .rt = reg, |
| 3513 | .stack_offset = @intCast(u32, adj_off), | 3456 | .stack_offset = @intCast(u32, adj_off), |
| ... | @@ -3551,7 +3494,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I | ... | @@ -3551,7 +3494,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I |
| 3551 | | 3494 | |
| 3552 | _ = try self.addInst(.{ | 3495 | _ = try self.addInst(.{ |
| 3553 | .tag = tag, | 3496 | .tag = tag, |
| 3554 | .cond = .al, | | |
| 3555 | .data = .{ .rr_offset = .{ | 3497 | .data = .{ .rr_offset = .{ |
| 3556 | .rt = reg, | 3498 | .rt = reg, |
| 3557 | .rn = .sp, | 3499 | .rn = .sp, |
| ... | @@ -3566,7 +3508,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I | ... | @@ -3566,7 +3508,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I |
| 3566 | | 3508 | |
| 3567 | _ = try self.addInst(.{ | 3509 | _ = try self.addInst(.{ |
| 3568 | .tag = .strh, | 3510 | .tag = .strh, |
| 3569 | .cond = .al, | | |
| 3570 | .data = .{ .rr_extra_offset = .{ | 3511 | .data = .{ .rr_extra_offset = .{ |
| 3571 | .rt = reg, | 3512 | .rt = reg, |
| 3572 | .rn = .sp, | 3513 | .rn = .sp, |