llhd 0.16.0

A Low Level Hardware Description that acts as a foundation for building hardware design tools.
Documentation
proc @foo (i32$ %consec_pc, i32$ %alu_result, i2$ %rd_select, i32$ %rd_bypass) -> (i32$ %alu_writeback) {
0:
    br %body
body:
    %rd_select1 = prb i2$ %rd_select
    %1 = const i1 0
    %2 = const i2 0
    %3 = const i2 3
    %4 = and i2 %rd_select1, %3
    %5 = and i2 %2, %3
    %6 = eq i2 %4, %5
    %7 = or i1 %1, %6
    br %7, %8, %case_body
check:
    wait %body, %consec_pc, %alu_result, %rd_select, %rd_bypass
case_exit:
    br %check
case_body:
    %alu_result1 = prb i32$ %alu_result
    %9 = const time 0s 1e
    drv i32$ %alu_writeback, %alu_result1, %9
    br %case_exit
8:
    %10 = const i1 0
    %11 = const i2 1
    %12 = const i2 3
    %13 = and i2 %rd_select1, %12
    %14 = and i2 %11, %12
    %15 = eq i2 %13, %14
    %16 = or i1 %10, %15
    br %16, %17, %case_body1
case_body1:
    %consec_pc1 = prb i32$ %consec_pc
    %18 = const time 0s 1e
    drv i32$ %alu_writeback, %consec_pc1, %18
    br %case_exit
17:
    %19 = const i1 0
    %20 = const i2 2
    %21 = const i2 3
    %22 = and i2 %rd_select1, %21
    %23 = and i2 %20, %21
    %24 = eq i2 %22, %23
    %25 = or i1 %19, %24
    br %25, %26, %case_body2
case_body2:
    %rd_bypass1 = prb i32$ %rd_bypass
    %27 = const time 0s 1e
    drv i32$ %alu_writeback, %rd_bypass1, %27
    br %case_exit
26:
    %alu_result2 = prb i32$ %alu_result
    %28 = const time 0s 1e
    drv i32$ %alu_writeback, %alu_result2, %28
    br %case_exit
}