diff --git a/crt.c b/crt.c new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 4468fa600fb3c68acb36ec5d328e5b9116f556ce..d47c7657e655655335212cc6e1817482b34dba4e 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -5770,6 +5770,20 @@ fn airAsm(f: *Function, inst: Air.Inst.Index) !CValue { .bool_true => { const name = struct_type.structFieldName(i, zcu).toSlice(ip).?; assert(name.len != 0); + + const target = &f.object.dg.mod.resolved_target.result; + if (target.cpu.arch.isMIPS() and name[0] == 'r') { + // GCC uses "$N" for register names instead of "rN" used by Zig. + var c_name_buf: [4]u8 = undefined; + const c_name = (&c_name_buf)[0..name.len]; + @memcpy(c_name, name); + c_name_buf[0] = '$'; + + try w.print(" {f}", .{fmtStringLiteral(c_name, null)}); + (try w.writableArray(1))[0] = ','; + continue; + } + try w.print(" {f}", .{fmtStringLiteral(name, null)}); (try w.writableArray(1))[0] = ','; },