Skip to content

Commit

Permalink
Revert "wip: Allow pio assemble to work at runtime"
Browse files Browse the repository at this point in the history
We currently depend on this stuff being comptime, would have to manage
the memory if we wanted to support it running at runtime

This reverts commit dc3b857.
  • Loading branch information
Grazfather committed Jan 16, 2025
1 parent dc3b857 commit eef3e79
Show file tree
Hide file tree
Showing 6 changed files with 395 additions and 416 deletions.
16 changes: 5 additions & 11 deletions port/raspberrypi/rp2xxx/src/hal/pio/assembler.zig
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ pub const EncodeOptions = encoder.Options;

pub const Define = struct {
name: []const u8,
// NO idea why this has to change
value: i128,
// value: i64,
value: i64,
};

pub const Program = struct {
Expand Down Expand Up @@ -74,16 +72,12 @@ pub const Diagnostics = struct {
}
};

pub fn assemble_impl(comptime cpu: CPU, source: []const u8, diags: *?Diagnostics, comptime options: AssembleOptions) !Output {
pub fn assemble_impl(comptime cpu: CPU, comptime source: []const u8, diags: *?Diagnostics, options: AssembleOptions) !Output {
const tokens = try tokenizer.tokenize(cpu, source, diags, options.tokenize);
for (tokens.slice()) |t| // DELETEME
std.debug.print("Got tokens: {any}\n", .{t}); // DELETEME
const encoder_output = try encoder.encode(cpu, tokens.slice(), diags, options.encode);
var programs = std.BoundedArray(Program, options.encode.max_programs).init(0) catch unreachable;
for (encoder_output.programs.slice()) |bounded| {
const prog = try bounded.to_exported_program();
try programs.append(prog);
}
for (encoder_output.programs.slice()) |bounded|
try programs.append(bounded.to_exported_program());

return Output{
.defines = blk: {
Expand All @@ -108,7 +102,7 @@ fn format_compile_error(comptime message: []const u8, comptime source: []const u
line_str = line_str ++ "\n" ++ line;
// If the line iterator is overlapping the provided index, then we are on the correct line
if (line_it.index >= index) {
// Calculate the column
// Calculate the column
column = line.len - (line_it.index - index);
line_str = line;
break;
Expand Down
283 changes: 143 additions & 140 deletions port/raspberrypi/rp2xxx/src/hal/pio/assembler/comparison_tests.zig
Original file line number Diff line number Diff line change
Expand Up @@ -40,20 +40,25 @@ fn pio_comparison(comptime source: []const u8) !void {
}
}

fn pio_comparison_cpu(comptime cpu: CPU, source: []const u8) !void {
var diags: ?assembler.Diagnostics = null;
const output = assembler.assemble_impl(cpu, source, &diags, .{}) catch |e| {
std.log.debug("diags: {any}\n", .{diags});
std.log.debug("could not assemble: {}\n", .{e});
return e;
};
fn pio_comparison_cpu(comptime cpu: CPU, comptime source: []const u8) !void {
// comptime var diags: ?assembler.Diagnostics = null;
// const output = comptime blk: {
// const v = assembler.assemble_impl(cpu, source, &diags, .{}) catch |err| {
// @compileLog("err {}", err);
// if (diags != null) {
// std.log.debug("diag {}", .{diags});
// @compileLog("Diag", diags);
// }
// // I want to return an error here but this is comptime?
// break :blk err;
// };
// break :blk v;
// };
const output = comptime assembler.assemble(cpu, source, .{});
try std.testing.expect(output.programs.len > 0);

for (output.programs) |program| {
std.debug.print("Program: {any}\n", .{program.instructions});
// const expected_insns = @field(c, program.name ++ "_program_instructions");
// Hardcoded for now since program.name is runtime for me
const expected_insns = @field(c, "movrx_program_instructions");
inline for (output.programs) |program| {
const expected_insns = @field(c, program.name ++ "_program_instructions");
for (program.instructions, expected_insns) |actual, expected| {
std.log.debug("expected: 0x{x}", .{expected});
std.log.debug(" actual: 0x{x}", .{actual});
Expand All @@ -65,134 +70,132 @@ fn pio_comparison_cpu(comptime cpu: CPU, source: []const u8) !void {
}
}

// test "pio.comparison.addition" {
// @setEvalBranchQuota(4000);
// try pio_comparison(@embedFile("comparison_tests/addition.pio"));
// }
//
// test "pio.comparison.apa102" {
// @setEvalBranchQuota(11000);
// try pio_comparison(@embedFile("comparison_tests/apa102.pio"));
// }
//
// test "pio.comparison.blink" {
// @setEvalBranchQuota(4000);
// try pio_comparison(@embedFile("comparison_tests/blink.pio"));
// }
//
// test "pio.comparison.clocked_input" {
// @setEvalBranchQuota(5000);
// try pio_comparison(@embedFile("comparison_tests/clocked_input.pio"));
// }
//
// test "pio.comparison.differential_manchester" {
// @setEvalBranchQuota(14000);
// try pio_comparison(@embedFile("comparison_tests/differential_manchester.pio"));
// }
//
// test "pio.comparison.hello" {
// @setEvalBranchQuota(3000);
// try pio_comparison(@embedFile("comparison_tests/hello.pio"));
// }
//
// test "pio.comparison.hub75" {
// @setEvalBranchQuota(17000);
// try pio_comparison(@embedFile("comparison_tests/hub75.pio"));
// }
//
// test "pio.comparison.i2c" {
// @setEvalBranchQuota(17000);
// try pio_comparison(@embedFile("comparison_tests/i2c.pio"));
// }

// test "pio.comparison.irq" {
// @setEvalBranchQuota(22000);
// try pio_comparison_cpu(.RP2350, @embedFile("comparison_tests/irq.pio"));
// }
//
// test "pio.comparison.manchester_encoding" {
// @setEvalBranchQuota(11000);
// try pio_comparison(@embedFile("comparison_tests/manchester_encoding.pio"));
// }
//
test "pio.comparison.addition" {
@setEvalBranchQuota(4000);
try pio_comparison(@embedFile("comparison_tests/addition.pio"));
}

test "pio.comparison.apa102" {
@setEvalBranchQuota(11000);
try pio_comparison(@embedFile("comparison_tests/apa102.pio"));
}

test "pio.comparison.blink" {
@setEvalBranchQuota(4000);
try pio_comparison(@embedFile("comparison_tests/blink.pio"));
}

test "pio.comparison.clocked_input" {
@setEvalBranchQuota(5000);
try pio_comparison(@embedFile("comparison_tests/clocked_input.pio"));
}

test "pio.comparison.differential_manchester" {
@setEvalBranchQuota(14000);
try pio_comparison(@embedFile("comparison_tests/differential_manchester.pio"));
}

test "pio.comparison.hello" {
@setEvalBranchQuota(3000);
try pio_comparison(@embedFile("comparison_tests/hello.pio"));
}

test "pio.comparison.hub75" {
@setEvalBranchQuota(17000);
try pio_comparison(@embedFile("comparison_tests/hub75.pio"));
}

test "pio.comparison.i2c" {
@setEvalBranchQuota(17000);
try pio_comparison(@embedFile("comparison_tests/i2c.pio"));
}

test "pio.comparison.irq" {
@setEvalBranchQuota(22000);
try pio_comparison_cpu(.RP2350, @embedFile("comparison_tests/irq.pio"));
}

test "pio.comparison.manchester_encoding" {
@setEvalBranchQuota(11000);
try pio_comparison(@embedFile("comparison_tests/manchester_encoding.pio"));
}

test "pio.comparison.movrx" {
@setEvalBranchQuota(11000);
// @compileLog("movrx test"); // DELETEME
try pio_comparison_cpu(.RP2350, @embedFile("comparison_tests/movrx.pio"));
// @compileLog("movrx test done"); // DELETEME
}
//
// test "pio.comparison.nec_carrier_burst" {
// @setEvalBranchQuota(6000);
// try pio_comparison(@embedFile("comparison_tests/nec_carrier_burst.pio"));
// }
//
// test "pio.comparison.nec_carrier_control" {
// @setEvalBranchQuota(9000);
// try pio_comparison(@embedFile("comparison_tests/nec_carrier_control.pio"));
// }
//
// test "pio.comparison.nec_receive" {
// @setEvalBranchQuota(11000);
// try pio_comparison(@embedFile("comparison_tests/nec_receive.pio"));
// }
//
// test "pio.comparison.pio_serialiser" {
// @setEvalBranchQuota(3000);
// try pio_comparison(@embedFile("comparison_tests/pio_serialiser.pio"));
// }
//
// test "pio.comparison.pwm" {
// @setEvalBranchQuota(4000);
// try pio_comparison(@embedFile("comparison_tests/pwm.pio"));
// }
//
// test "pio.comparison.quadrature_encoder" {
// @setEvalBranchQuota(17000);
// try pio_comparison(@embedFile("comparison_tests/quadrature_encoder.pio"));
// }
//
// test "pio.comparison.resistor_dac" {
// @setEvalBranchQuota(3000);
// try pio_comparison(@embedFile("comparison_tests/resistor_dac.pio"));
// }
//
// test "pio.comparison.spi" {
// @setEvalBranchQuota(22000);
// try pio_comparison(@embedFile("comparison_tests/spi.pio"));
// }
//
// test "pio.comparison.squarewave" {
// @setEvalBranchQuota(2000);
// try pio_comparison(@embedFile("comparison_tests/squarewave.pio"));
// }
//
// test "pio.comparison.squarewave_fast" {
// @setEvalBranchQuota(2000);
// try pio_comparison(@embedFile("comparison_tests/squarewave_fast.pio"));
// }
//
// test "pio.comparison.squarewave_wrap" {
// @setEvalBranchQuota(3000);
// try pio_comparison(@embedFile("comparison_tests/squarewave_wrap.pio"));
// }
//
// test "pio.comparison.st7789_lcd" {
// @setEvalBranchQuota(5000);
// try pio_comparison(@embedFile("comparison_tests/st7789_lcd.pio"));
// }
//
// test "pio.comparison.uart_rx" {
// @setEvalBranchQuota(11000);
// try pio_comparison(@embedFile("comparison_tests/uart_rx.pio"));
// }
//
// test "pio.comparison.uart_tx" {
// @setEvalBranchQuota(6000);
// try pio_comparison(@embedFile("comparison_tests/uart_tx.pio"));
// }

// test "pio.comparison.ws2812" {
// @setEvalBranchQuota(11000);
// try pio_comparison(@embedFile("comparison_tests/ws2812.pio"));
// }
}

test "pio.comparison.nec_carrier_burst" {
@setEvalBranchQuota(6000);
try pio_comparison(@embedFile("comparison_tests/nec_carrier_burst.pio"));
}

test "pio.comparison.nec_carrier_control" {
@setEvalBranchQuota(9000);
try pio_comparison(@embedFile("comparison_tests/nec_carrier_control.pio"));
}

test "pio.comparison.nec_receive" {
@setEvalBranchQuota(11000);
try pio_comparison(@embedFile("comparison_tests/nec_receive.pio"));
}

test "pio.comparison.pio_serialiser" {
@setEvalBranchQuota(3000);
try pio_comparison(@embedFile("comparison_tests/pio_serialiser.pio"));
}

test "pio.comparison.pwm" {
@setEvalBranchQuota(4000);
try pio_comparison(@embedFile("comparison_tests/pwm.pio"));
}

test "pio.comparison.quadrature_encoder" {
@setEvalBranchQuota(17000);
try pio_comparison(@embedFile("comparison_tests/quadrature_encoder.pio"));
}

test "pio.comparison.resistor_dac" {
@setEvalBranchQuota(3000);
try pio_comparison(@embedFile("comparison_tests/resistor_dac.pio"));
}

test "pio.comparison.spi" {
@setEvalBranchQuota(22000);
try pio_comparison(@embedFile("comparison_tests/spi.pio"));
}

test "pio.comparison.squarewave" {
@setEvalBranchQuota(2000);
try pio_comparison(@embedFile("comparison_tests/squarewave.pio"));
}

test "pio.comparison.squarewave_fast" {
@setEvalBranchQuota(2000);
try pio_comparison(@embedFile("comparison_tests/squarewave_fast.pio"));
}

test "pio.comparison.squarewave_wrap" {
@setEvalBranchQuota(3000);
try pio_comparison(@embedFile("comparison_tests/squarewave_wrap.pio"));
}

test "pio.comparison.st7789_lcd" {
@setEvalBranchQuota(5000);
try pio_comparison(@embedFile("comparison_tests/st7789_lcd.pio"));
}

test "pio.comparison.uart_rx" {
@setEvalBranchQuota(11000);
try pio_comparison(@embedFile("comparison_tests/uart_rx.pio"));
}

test "pio.comparison.uart_tx" {
@setEvalBranchQuota(6000);
try pio_comparison(@embedFile("comparison_tests/uart_tx.pio"));
}

test "pio.comparison.ws2812" {
@setEvalBranchQuota(11000);
try pio_comparison(@embedFile("comparison_tests/ws2812.pio"));
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
.program movrx

.wrap_target
; mov to rx
mov rxfifoy, isr
mov rxfifo0, isr
mov rxfifo1, isr
mov rxfifo2, isr
mov rxfifo3, isr
;mov rxfifo4, isr ; bad index
;mov rxfifo3, xsr ; bad source

; mov from rx
mov osr, rxfifoy
;mov osr, rxfifog ; bad source index (unparseable)
;mov osr, rxfifo4 ; bad source index (>3)
;mov osr, xxfifoy ; bad source
; mov osr, rxfifo0
; mov osr, rxfifo1
; mov osr, rxfifo2
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#pragma once

static const uint16_t movrx_program_instructions[] = {
// mov to rx encoding: 0b1000_ssss_0001_yiii
// 0b1000_ssss_0001_yiii
0x8018, // mov rxfifoy, isr
0x8010, // mov rxfifo0, isr
0x8011, // mov rxfifo1, isr
0x8012, // mov rxfifo2, isr
0x8013, // mov rxfifo3, isr
// from from rx encoding 0b1000_ssss_1001_yiii
// 0b1000_ssss_1001_yiii
0x8098, // mov osr, rxfifoy
// 0x8090, // mov osr, rxfifo0
// 0x8091, // mov osr, rxfifo1
Expand Down
Loading

0 comments on commit eef3e79

Please sign in to comment.