function hubClkBusMacroNack:
    useregset hub
    body:
        let cog_ena_reg cog_e
        let bus_ack_idx 0If

function hubClkBusMacroAck:
    useregset hub
    body:
        let cog_ena_reg cog_e
        let bus_ack_idx (and32 (add32 bus_sel_idx 0I7) 0I7)

function hubClkBusMacroAckCustom:
    useregset hub
    local I cog_e_loc
    input I cog_e_loc_input
    local I bus_sel_idx_loc
    input I bus_sel_idx_loc_input
    body:
        let cog_e_loc cog_e_loc_input
        let bus_sel_idx_loc bus_sel_idx_loc_input
        let cog_ena_reg cog_e_loc
        let bus_ack_idx (and32 (add32 bus_sel_idx_loc 0I7) 0I7)

function hubClkBusMacroAckStartCog:
    useregset hub
    local I cog_e_loc
    input I cog_e_loc_input
    local I bus_sel_idx_loc
    input I bus_sel_idx_loc_input
    local I num_loc
    input I num_loc_input
    body:
        let cog_e_loc cog_e_loc_input
        let bus_sel_idx_loc bus_sel_idx_loc_input
        let num_loc num_loc_input
        let cog_ena_reg cog_e_loc
        let bus_ack_idx (and32 (add32 bus_sel_idx_loc 0I7) 0I7)
        call (macroCogStartUp num_loc)

function hubRst:
    useregset hub
    body:
        let cfg_reg 0I0
        let cog_e 0I1
        let lock_e 0I0
        let cog_ena_reg 0I0
        let hub_state (jump 0I0)
        let bus_sel_idx 0I7
        let bus_ack_idx 0If

function hubClkBusNena:
    useregset hub
    body:
        let bus_q_reg bus_q_reg_pre

function hubClkPostEvalEna:
    useregset hub
    input I bus_d
    input I bus_ashr2
    input I bus_state
    body:
        let dc bus_d
        let acshr2 bus_ashr2
        let hub_state bus_state
