| ... | @@ -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 | } |
| ... | @@ -2535,6 +2504,8 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2535,6 +2504,8 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { |
| 2535 | break :blk condition.negate(); | 2504 | break :blk condition.negate(); |
| 2536 | }, | 2505 | }, |
| 2537 | .register => |reg| blk: { | 2506 | .register => |reg| blk: { |
| | 2507 | try self.spillCompareFlagsIfOccupied(); |
| | 2508 | |
| 2538 | // cmp reg, 1 | 2509 | // cmp reg, 1 |
| 2539 | // bne ... | 2510 | // bne ... |
| 2540 | _ = try self.addInst(.{ | 2511 | _ = try self.addInst(.{ |
| ... | @@ -2549,6 +2520,26 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2549,6 +2520,26 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { |
| 2549 | | 2520 | |
| 2550 | break :blk .ne; | 2521 | break :blk .ne; |
| 2551 | }, | 2522 | }, |
| | 2523 | .stack_offset, |
| | 2524 | .memory, |
| | 2525 | => blk: { |
| | 2526 | try self.spillCompareFlagsIfOccupied(); |
| | 2527 | |
| | 2528 | const reg = try self.copyToTmpRegister(Type.initTag(.bool), cond); |
| | 2529 | |
| | 2530 | // cmp reg, 1 |
| | 2531 | // bne ... |
| | 2532 | _ = try self.addInst(.{ |
| | 2533 | .tag = .cmp, |
| | 2534 | .data = .{ .rr_op = .{ |
| | 2535 | .rd = .r0, |
| | 2536 | .rn = reg, |
| | 2537 | .op = Instruction.Operand.imm(1, 0), |
| | 2538 | } }, |
| | 2539 | }); |
| | 2540 | |
| | 2541 | break :blk .ne; |
| | 2542 | }, |
| 2552 | else => return self.fail("TODO implement condbr {} when condition is {s}", .{ self.target.cpu.arch, @tagName(cond) }), | 2543 | else => return self.fail("TODO implement condbr {} when condition is {s}", .{ self.target.cpu.arch, @tagName(cond) }), |
| 2553 | }; | 2544 | }; |
| 2554 | | 2545 | |
| ... | @@ -2889,7 +2880,6 @@ fn airLoop(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2889,7 +2880,6 @@ fn airLoop(self: *Self, inst: Air.Inst.Index) !void { |
| 2889 | fn jump(self: *Self, inst: Mir.Inst.Index) !void { | 2880 | fn jump(self: *Self, inst: Mir.Inst.Index) !void { |
| 2890 | _ = try self.addInst(.{ | 2881 | _ = try self.addInst(.{ |
| 2891 | .tag = .b, | 2882 | .tag = .b, |
| 2892 | .cond = .al, | | |
| 2893 | .data = .{ .inst = inst }, | 2883 | .data = .{ .inst = inst }, |
| 2894 | }); | 2884 | }); |
| 2895 | } | 2885 | } |
| ... | @@ -2905,17 +2895,16 @@ fn airBlock(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -2905,17 +2895,16 @@ fn airBlock(self: *Self, inst: Air.Inst.Index) !void { |
| 2905 | // block results. | 2895 | // block results. |
| 2906 | .mcv = MCValue{ .none = {} }, | 2896 | .mcv = MCValue{ .none = {} }, |
| 2907 | }); | 2897 | }); |
| 2908 | const block_data = self.blocks.getPtr(inst).?; | 2898 | defer self.blocks.getPtr(inst).?.relocs.deinit(self.gpa); |
| 2909 | defer block_data.relocs.deinit(self.gpa); | | |
| 2910 | | 2899 | |
| 2911 | const ty_pl = self.air.instructions.items(.data)[inst].ty_pl; | 2900 | const ty_pl = self.air.instructions.items(.data)[inst].ty_pl; |
| 2912 | const extra = self.air.extraData(Air.Block, ty_pl.payload); | 2901 | const extra = self.air.extraData(Air.Block, ty_pl.payload); |
| 2913 | const body = self.air.extra[extra.end..][0..extra.data.body_len]; | 2902 | const body = self.air.extra[extra.end..][0..extra.data.body_len]; |
| 2914 | try self.genBody(body); | 2903 | try self.genBody(body); |
| 2915 | | 2904 | |
| 2916 | for (block_data.relocs.items) |reloc| try self.performReloc(reloc); | 2905 | for (self.blocks.getPtr(inst).?.relocs.items) |reloc| try self.performReloc(reloc); |
| 2917 | | 2906 | |
| 2918 | const result = @bitCast(MCValue, block_data.mcv); | 2907 | const result = self.blocks.getPtr(inst).?.mcv; |
| 2919 | return self.finishAir(inst, result, .{ .none, .none, .none }); | 2908 | return self.finishAir(inst, result, .{ .none, .none, .none }); |
| 2920 | } | 2909 | } |
| 2921 | | 2910 | |
| ... | @@ -2959,7 +2948,16 @@ fn br(self: *Self, block: Air.Inst.Index, operand: Air.Inst.Ref) !void { | ... | @@ -2959,7 +2948,16 @@ fn br(self: *Self, block: Air.Inst.Index, operand: Air.Inst.Ref) !void { |
| 2959 | const operand_mcv = try self.resolveInst(operand); | 2948 | const operand_mcv = try self.resolveInst(operand); |
| 2960 | const block_mcv = block_data.mcv; | 2949 | const block_mcv = block_data.mcv; |
| 2961 | if (block_mcv == .none) { | 2950 | if (block_mcv == .none) { |
| 2962 | block_data.mcv = operand_mcv; | 2951 | block_data.mcv = switch (operand_mcv) { |
| | 2952 | .none, .dead, .unreach => unreachable, |
| | 2953 | .register, .stack_offset, .memory => operand_mcv, |
| | 2954 | .immediate => blk: { |
| | 2955 | const new_mcv = try self.allocRegOrMem(block, true); |
| | 2956 | try self.setRegOrMem(self.air.typeOfIndex(block), new_mcv, operand_mcv); |
| | 2957 | break :blk new_mcv; |
| | 2958 | }, |
| | 2959 | else => return self.fail("TODO implement block_data.mcv = operand_mcv for {}", .{operand_mcv}), |
| | 2960 | }; |
| 2963 | } else { | 2961 | } else { |
| 2964 | try self.setRegOrMem(self.air.typeOfIndex(block), block_mcv, operand_mcv); | 2962 | try self.setRegOrMem(self.air.typeOfIndex(block), block_mcv, operand_mcv); |
| 2965 | } | 2963 | } |
| ... | @@ -2973,7 +2971,6 @@ fn brVoid(self: *Self, block: Air.Inst.Index) !void { | ... | @@ -2973,7 +2971,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. | 2971 | // 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(.{ | 2972 | try block_data.relocs.append(self.gpa, try self.addInst(.{ |
| 2975 | .tag = .b, | 2973 | .tag = .b, |
| 2976 | .cond = .al, | | |
| 2977 | .data = .{ .inst = undefined }, // populated later through performReloc | 2974 | .data = .{ .inst = undefined }, // populated later through performReloc |
| 2978 | })); | 2975 | })); |
| 2979 | } | 2976 | } |
| ... | @@ -3029,7 +3026,6 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { | ... | @@ -3029,7 +3026,6 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { |
| 3029 | if (mem.eql(u8, asm_source, "svc #0")) { | 3026 | if (mem.eql(u8, asm_source, "svc #0")) { |
| 3030 | _ = try self.addInst(.{ | 3027 | _ = try self.addInst(.{ |
| 3031 | .tag = .svc, | 3028 | .tag = .svc, |
| 3032 | .cond = .al, | | |
| 3033 | .data = .{ .imm24 = 0 }, | 3029 | .data = .{ .imm24 = 0 }, |
| 3034 | }); | 3030 | }); |
| 3035 | } else { | 3031 | } else { |
| ... | @@ -3135,7 +3131,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3135,7 +3131,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3135 | | 3131 | |
| 3136 | _ = try self.addInst(.{ | 3132 | _ = try self.addInst(.{ |
| 3137 | .tag = tag, | 3133 | .tag = tag, |
| 3138 | .cond = .al, | | |
| 3139 | .data = .{ .rr_offset = .{ | 3134 | .data = .{ .rr_offset = .{ |
| 3140 | .rt = reg, | 3135 | .rt = reg, |
| 3141 | .rn = .fp, | 3136 | .rn = .fp, |
| ... | @@ -3153,7 +3148,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3153,7 +3148,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3153 | | 3148 | |
| 3154 | _ = try self.addInst(.{ | 3149 | _ = try self.addInst(.{ |
| 3155 | .tag = .strh, | 3150 | .tag = .strh, |
| 3156 | .cond = .al, | | |
| 3157 | .data = .{ .rr_extra_offset = .{ | 3151 | .data = .{ .rr_extra_offset = .{ |
| 3158 | .rt = reg, | 3152 | .rt = reg, |
| 3159 | .rn = .fp, | 3153 | .rn = .fp, |
| ... | @@ -3200,7 +3194,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3200,7 +3194,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3200 | }; | 3194 | }; |
| 3201 | _ = try self.addInst(.{ | 3195 | _ = try self.addInst(.{ |
| 3202 | .tag = .sub, | 3196 | .tag = .sub, |
| 3203 | .cond = .al, | | |
| 3204 | .data = .{ .rr_op = .{ | 3197 | .data = .{ .rr_op = .{ |
| 3205 | .rd = src_reg, | 3198 | .rd = src_reg, |
| 3206 | .rn = .fp, | 3199 | .rn = .fp, |
| ... | @@ -3215,7 +3208,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3215,7 +3208,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3215 | }; | 3208 | }; |
| 3216 | _ = try self.addInst(.{ | 3209 | _ = try self.addInst(.{ |
| 3217 | .tag = .sub, | 3210 | .tag = .sub, |
| 3218 | .cond = .al, | | |
| 3219 | .data = .{ .rr_op = .{ | 3211 | .data = .{ .rr_op = .{ |
| 3220 | .rd = dst_reg, | 3212 | .rd = dst_reg, |
| 3221 | .rn = .fp, | 3213 | .rn = .fp, |
| ... | @@ -3230,7 +3222,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro | ... | @@ -3230,7 +3222,6 @@ fn genSetStack(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) InnerErro |
| 3230 | }; | 3222 | }; |
| 3231 | _ = try self.addInst(.{ | 3223 | _ = try self.addInst(.{ |
| 3232 | .tag = .mov, | 3224 | .tag = .mov, |
| 3233 | .cond = .al, | | |
| 3234 | .data = .{ .rr_op = .{ | 3225 | .data = .{ .rr_op = .{ |
| 3235 | .rd = len_reg, | 3226 | .rd = len_reg, |
| 3236 | .rn = .r0, | 3227 | .rn = .r0, |
| ... | @@ -3272,7 +3263,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3272,7 +3263,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3272 | // mov reg, 0 | 3263 | // mov reg, 0 |
| 3273 | _ = try self.addInst(.{ | 3264 | _ = try self.addInst(.{ |
| 3274 | .tag = .mov, | 3265 | .tag = .mov, |
| 3275 | .cond = .al, | | |
| 3276 | .data = .{ .rr_op = .{ | 3266 | .data = .{ .rr_op = .{ |
| 3277 | .rd = reg, | 3267 | .rd = reg, |
| 3278 | .rn = .r0, | 3268 | .rn = .r0, |
| ... | @@ -3297,7 +3287,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3297,7 +3287,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3297 | if (Instruction.Operand.fromU32(@intCast(u32, x))) |op| { | 3287 | if (Instruction.Operand.fromU32(@intCast(u32, x))) |op| { |
| 3298 | _ = try self.addInst(.{ | 3288 | _ = try self.addInst(.{ |
| 3299 | .tag = .mov, | 3289 | .tag = .mov, |
| 3300 | .cond = .al, | | |
| 3301 | .data = .{ .rr_op = .{ | 3290 | .data = .{ .rr_op = .{ |
| 3302 | .rd = reg, | 3291 | .rd = reg, |
| 3303 | .rn = .r0, | 3292 | .rn = .r0, |
| ... | @@ -3307,7 +3296,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3307,7 +3296,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3307 | } else if (Instruction.Operand.fromU32(~@intCast(u32, x))) |op| { | 3296 | } else if (Instruction.Operand.fromU32(~@intCast(u32, x))) |op| { |
| 3308 | _ = try self.addInst(.{ | 3297 | _ = try self.addInst(.{ |
| 3309 | .tag = .mvn, | 3298 | .tag = .mvn, |
| 3310 | .cond = .al, | | |
| 3311 | .data = .{ .rr_op = .{ | 3299 | .data = .{ .rr_op = .{ |
| 3312 | .rd = reg, | 3300 | .rd = reg, |
| 3313 | .rn = .r0, | 3301 | .rn = .r0, |
| ... | @@ -3318,7 +3306,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3318,7 +3306,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3318 | if (Target.arm.featureSetHas(self.target.cpu.features, .has_v7)) { | 3306 | if (Target.arm.featureSetHas(self.target.cpu.features, .has_v7)) { |
| 3319 | _ = try self.addInst(.{ | 3307 | _ = try self.addInst(.{ |
| 3320 | .tag = .movw, | 3308 | .tag = .movw, |
| 3321 | .cond = .al, | | |
| 3322 | .data = .{ .r_imm16 = .{ | 3309 | .data = .{ .r_imm16 = .{ |
| 3323 | .rd = reg, | 3310 | .rd = reg, |
| 3324 | .imm16 = @intCast(u16, x), | 3311 | .imm16 = @intCast(u16, x), |
| ... | @@ -3327,7 +3314,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3327,7 +3314,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3327 | } else { | 3314 | } else { |
| 3328 | _ = try self.addInst(.{ | 3315 | _ = try self.addInst(.{ |
| 3329 | .tag = .mov, | 3316 | .tag = .mov, |
| 3330 | .cond = .al, | | |
| 3331 | .data = .{ .rr_op = .{ | 3317 | .data = .{ .rr_op = .{ |
| 3332 | .rd = reg, | 3318 | .rd = reg, |
| 3333 | .rn = .r0, | 3319 | .rn = .r0, |
| ... | @@ -3336,7 +3322,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3336,7 +3322,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3336 | }); | 3322 | }); |
| 3337 | _ = try self.addInst(.{ | 3323 | _ = try self.addInst(.{ |
| 3338 | .tag = .orr, | 3324 | .tag = .orr, |
| 3339 | .cond = .al, | | |
| 3340 | .data = .{ .rr_op = .{ | 3325 | .data = .{ .rr_op = .{ |
| 3341 | .rd = reg, | 3326 | .rd = reg, |
| 3342 | .rn = reg, | 3327 | .rn = reg, |
| ... | @@ -3353,7 +3338,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3353,7 +3338,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3353 | // movt reg, #0xaaaa | 3338 | // movt reg, #0xaaaa |
| 3354 | _ = try self.addInst(.{ | 3339 | _ = try self.addInst(.{ |
| 3355 | .tag = .movw, | 3340 | .tag = .movw, |
| 3356 | .cond = .al, | | |
| 3357 | .data = .{ .r_imm16 = .{ | 3341 | .data = .{ .r_imm16 = .{ |
| 3358 | .rd = reg, | 3342 | .rd = reg, |
| 3359 | .imm16 = @truncate(u16, x), | 3343 | .imm16 = @truncate(u16, x), |
| ... | @@ -3361,7 +3345,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3361,7 +3345,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3361 | }); | 3345 | }); |
| 3362 | _ = try self.addInst(.{ | 3346 | _ = try self.addInst(.{ |
| 3363 | .tag = .movt, | 3347 | .tag = .movt, |
| 3364 | .cond = .al, | | |
| 3365 | .data = .{ .r_imm16 = .{ | 3348 | .data = .{ .r_imm16 = .{ |
| 3366 | .rd = reg, | 3349 | .rd = reg, |
| 3367 | .imm16 = @truncate(u16, x >> 16), | 3350 | .imm16 = @truncate(u16, x >> 16), |
| ... | @@ -3375,7 +3358,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3375,7 +3358,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3375 | // orr reg, reg, #0xdd, 8 | 3358 | // orr reg, reg, #0xdd, 8 |
| 3376 | _ = try self.addInst(.{ | 3359 | _ = try self.addInst(.{ |
| 3377 | .tag = .mov, | 3360 | .tag = .mov, |
| 3378 | .cond = .al, | | |
| 3379 | .data = .{ .rr_op = .{ | 3361 | .data = .{ .rr_op = .{ |
| 3380 | .rd = reg, | 3362 | .rd = reg, |
| 3381 | .rn = .r0, | 3363 | .rn = .r0, |
| ... | @@ -3384,7 +3366,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3384,7 +3366,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3384 | }); | 3366 | }); |
| 3385 | _ = try self.addInst(.{ | 3367 | _ = try self.addInst(.{ |
| 3386 | .tag = .orr, | 3368 | .tag = .orr, |
| 3387 | .cond = .al, | | |
| 3388 | .data = .{ .rr_op = .{ | 3369 | .data = .{ .rr_op = .{ |
| 3389 | .rd = reg, | 3370 | .rd = reg, |
| 3390 | .rn = reg, | 3371 | .rn = reg, |
| ... | @@ -3393,7 +3374,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3393,7 +3374,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3393 | }); | 3374 | }); |
| 3394 | _ = try self.addInst(.{ | 3375 | _ = try self.addInst(.{ |
| 3395 | .tag = .orr, | 3376 | .tag = .orr, |
| 3396 | .cond = .al, | | |
| 3397 | .data = .{ .rr_op = .{ | 3377 | .data = .{ .rr_op = .{ |
| 3398 | .rd = reg, | 3378 | .rd = reg, |
| 3399 | .rn = reg, | 3379 | .rn = reg, |
| ... | @@ -3402,7 +3382,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3402,7 +3382,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3402 | }); | 3382 | }); |
| 3403 | _ = try self.addInst(.{ | 3383 | _ = try self.addInst(.{ |
| 3404 | .tag = .orr, | 3384 | .tag = .orr, |
| 3405 | .cond = .al, | | |
| 3406 | .data = .{ .rr_op = .{ | 3385 | .data = .{ .rr_op = .{ |
| 3407 | .rd = reg, | 3386 | .rd = reg, |
| 3408 | .rn = reg, | 3387 | .rn = reg, |
| ... | @@ -3420,7 +3399,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3420,7 +3399,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3420 | // mov reg, src_reg | 3399 | // mov reg, src_reg |
| 3421 | _ = try self.addInst(.{ | 3400 | _ = try self.addInst(.{ |
| 3422 | .tag = .mov, | 3401 | .tag = .mov, |
| 3423 | .cond = .al, | | |
| 3424 | .data = .{ .rr_op = .{ | 3402 | .data = .{ .rr_op = .{ |
| 3425 | .rd = reg, | 3403 | .rd = reg, |
| 3426 | .rn = .r0, | 3404 | .rn = .r0, |
| ... | @@ -3434,7 +3412,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3434,7 +3412,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3434 | try self.genSetReg(ty, reg, .{ .immediate = @intCast(u32, addr) }); | 3412 | try self.genSetReg(ty, reg, .{ .immediate = @intCast(u32, addr) }); |
| 3435 | _ = try self.addInst(.{ | 3413 | _ = try self.addInst(.{ |
| 3436 | .tag = .ldr, | 3414 | .tag = .ldr, |
| 3437 | .cond = .al, | | |
| 3438 | .data = .{ .rr_offset = .{ | 3415 | .data = .{ .rr_offset = .{ |
| 3439 | .rt = reg, | 3416 | .rt = reg, |
| 3440 | .rn = reg, | 3417 | .rn = reg, |
| ... | @@ -3461,7 +3438,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3461,7 +3438,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3461 | | 3438 | |
| 3462 | _ = try self.addInst(.{ | 3439 | _ = try self.addInst(.{ |
| 3463 | .tag = tag, | 3440 | .tag = tag, |
| 3464 | .cond = .al, | | |
| 3465 | .data = .{ .rr_offset = .{ | 3441 | .data = .{ .rr_offset = .{ |
| 3466 | .rt = reg, | 3442 | .rt = reg, |
| 3467 | .rn = .fp, | 3443 | .rn = .fp, |
| ... | @@ -3479,7 +3455,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3479,7 +3455,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3479 | | 3455 | |
| 3480 | _ = try self.addInst(.{ | 3456 | _ = try self.addInst(.{ |
| 3481 | .tag = .ldrh, | 3457 | .tag = .ldrh, |
| 3482 | .cond = .al, | | |
| 3483 | .data = .{ .rr_extra_offset = .{ | 3458 | .data = .{ .rr_extra_offset = .{ |
| 3484 | .rt = reg, | 3459 | .rt = reg, |
| 3485 | .rn = .fp, | 3460 | .rn = .fp, |
| ... | @@ -3507,7 +3482,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void | ... | @@ -3507,7 +3482,6 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void |
| 3507 | | 3482 | |
| 3508 | _ = try self.addInst(.{ | 3483 | _ = try self.addInst(.{ |
| 3509 | .tag = tag, | 3484 | .tag = tag, |
| 3510 | .cond = .al, | | |
| 3511 | .data = .{ .r_stack_offset = .{ | 3485 | .data = .{ .r_stack_offset = .{ |
| 3512 | .rt = reg, | 3486 | .rt = reg, |
| 3513 | .stack_offset = @intCast(u32, adj_off), | 3487 | .stack_offset = @intCast(u32, adj_off), |
| ... | @@ -3551,7 +3525,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I | ... | @@ -3551,7 +3525,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I |
| 3551 | | 3525 | |
| 3552 | _ = try self.addInst(.{ | 3526 | _ = try self.addInst(.{ |
| 3553 | .tag = tag, | 3527 | .tag = tag, |
| 3554 | .cond = .al, | | |
| 3555 | .data = .{ .rr_offset = .{ | 3528 | .data = .{ .rr_offset = .{ |
| 3556 | .rt = reg, | 3529 | .rt = reg, |
| 3557 | .rn = .sp, | 3530 | .rn = .sp, |
| ... | @@ -3566,7 +3539,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I | ... | @@ -3566,7 +3539,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I |
| 3566 | | 3539 | |
| 3567 | _ = try self.addInst(.{ | 3540 | _ = try self.addInst(.{ |
| 3568 | .tag = .strh, | 3541 | .tag = .strh, |
| 3569 | .cond = .al, | | |
| 3570 | .data = .{ .rr_extra_offset = .{ | 3542 | .data = .{ .rr_extra_offset = .{ |
| 3571 | .rt = reg, | 3543 | .rt = reg, |
| 3572 | .rn = .sp, | 3544 | .rn = .sp, |