@@ -8854,10 +8854,10 @@ fn asmExpr(
8854
8854
return astgen.failNode(node, "assembly expression with no output must be marked volatile", .{});
8855
8855
}
8856
8856
}
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", .{});
8859
8859
}
8860
- var outputs_buffer: [32 ]Zir.Inst.Asm.Output = undefined;
8860
+ var outputs_buffer: [15 ]Zir.Inst.Asm.Output = undefined;
8861
8861
const outputs = outputs_buffer[0..full.outputs.len];
8862
8862
8863
8863
var output_type_bits: u32 = 0;
@@ -8893,10 +8893,10 @@ fn asmExpr(
8893
8893
}
8894
8894
}
8895
8895
8896
- if (full.inputs.len > 32) {
8896
+ if (full.inputs.len >= 32) {
8897
8897
return astgen.failNode(full.inputs[32], "too many asm inputs", .{});
8898
8898
}
8899
- var inputs_buffer: [32 ]Zir.Inst.Asm.Input = undefined;
8899
+ var inputs_buffer: [31 ]Zir.Inst.Asm.Input = undefined;
8900
8900
const inputs = inputs_buffer[0..full.inputs.len];
8901
8901
8902
8902
for (full.inputs, 0..) |input_node, i| {
@@ -8912,7 +8912,7 @@ fn asmExpr(
8912
8912
};
8913
8913
}
8914
8914
8915
- var clobbers_buffer: [32 ]u32 = undefined;
8915
+ var clobbers_buffer: [63 ]u32 = undefined;
8916
8916
var clobber_i: usize = 0;
8917
8917
if (full.first_clobber) |first_clobber| clobbers: {
8918
8918
// asm ("foo" ::: "a", "b")
@@ -12932,14 +12932,14 @@ const GenZir = struct {
12932
12932
}
12933
12933
gz.astgen.extra.appendSliceAssumeCapacity(args.clobbers);
12934
12934
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`.
12938
12938
// * 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, @intFromBool(args.is_volatile)) << 15;
12943
12943
12944
12944
const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
12945
12945
astgen.instructions.appendAssumeCapacity(.{
0 commit comments