@@ -8854,10 +8854,10 @@ fn asmExpr(
88548854 return astgen.failNode(node, "assembly expression with no output must be marked volatile", .{});
88558855 }
88568856 }
8857- if (full.outputs.len > 32 ) {
8858- return astgen.failNode(full.outputs[32 ], "too many asm outputs", .{});
8857+ if (full.outputs.len >= 16 ) {
8858+ return astgen.failNode(full.outputs[16 ], "too many asm outputs", .{});
88598859 }
8860- var outputs_buffer: [32 ]Zir.Inst.Asm.Output = undefined;
8860+ var outputs_buffer: [15 ]Zir.Inst.Asm.Output = undefined;
88618861 const outputs = outputs_buffer[0..full.outputs.len];
88628862
88638863 var output_type_bits: u32 = 0;
@@ -8893,10 +8893,10 @@ fn asmExpr(
88938893 }
88948894 }
88958895
8896- if (full.inputs.len > 32) {
8896+ if (full.inputs.len >= 32) {
88978897 return astgen.failNode(full.inputs[32], "too many asm inputs", .{});
88988898 }
8899- var inputs_buffer: [32 ]Zir.Inst.Asm.Input = undefined;
8899+ var inputs_buffer: [31 ]Zir.Inst.Asm.Input = undefined;
89008900 const inputs = inputs_buffer[0..full.inputs.len];
89018901
89028902 for (full.inputs, 0..) |input_node, i| {
@@ -8912,7 +8912,7 @@ fn asmExpr(
89128912 };
89138913 }
89148914
8915- var clobbers_buffer: [32 ]u32 = undefined;
8915+ var clobbers_buffer: [63 ]u32 = undefined;
89168916 var clobber_i: usize = 0;
89178917 if (full.first_clobber) |first_clobber| clobbers: {
89188918 // asm ("foo" ::: "a", "b")
@@ -12932,14 +12932,14 @@ const GenZir = struct {
1293212932 }
1293312933 gz.astgen.extra.appendSliceAssumeCapacity(args.clobbers);
1293412934
12935- // * 0b00000000_000XXXXX - `outputs_len`.
12936- // * 0b000000XX_XXX00000 - `inputs_len`.
12937- // * 0b0XXXXX00_00000000 - `clobbers_len`.
12935+ // * 0b00000000_0000XXXX - `outputs_len`.
12936+ // * 0b0000000X_XXXX0000 - `inputs_len`.
12937+ // * 0b0XXXXXX0_00000000 - `clobbers_len`.
1293812938 // * 0bX0000000_00000000 - is volatile
12939- const small: u16 = @as(u16, @intCast(args.outputs.len)) |
12940- @as(u16, @intCast(args.inputs.len << 5)) |
12941- @as(u16, @intCast(args.clobbers.len << 10)) |
12942- ( @as(u16, @intFromBool(args.is_volatile)) << 15) ;
12939+ const small: u16 = @as(u16, @as(u4, @ intCast(args.outputs.len))) << 0 |
12940+ @as(u16, @as(u5, @ intCast(args.inputs.len))) << 4 |
12941+ @as(u16, @as(u6, @ intCast(args.clobbers.len))) << 9 |
12942+ @as(u16, @as(u1, @ intFromBool(args.is_volatile))) << 15;
1294312943
1294412944 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
1294512945 astgen.instructions.appendAssumeCapacity(.{
0 commit comments