[Libre-soc-bugs] [Bug 980] Implement C-based Power ISA pseudocode compiler

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Thu Jan 4 08:30:56 GMT 2024


https://bugs.libre-soc.org/show_bug.cgi?id=980

--- Comment #47 from Dmitry Selyutin <ghostmansd at gmail.com> ---
The code we got from the tree via visiting the nodes:

    tree[0:63] <- (RB)
    mode <- tree[62:63]
    tree[62:63] <- 0
    ra_used <- 0b0
    in_bits[0:63] <- (RC|0)
    if (in_bits = 0) then
        in_bits[0:63] <- 1
    orig_in_bits <- in_bits
    tree_index <- 1
    found <- 0b0
    hit_end <- 0b0
    for bit_length = 1 to 6
        in_bit <- in_bits[63]
        if (in_bits = 1) then
            if (ra_used | (_RA = 0)) then
                hit_end <- 0b1
                leave
            ra_used <- 0b1
            in_bit <- (RA)[63]
            in_bits <- (0b1 || (RA)[0:62])
        else
            in_bits <- (0b0 || in_bits[0:62])
        tree_index <- (tree_index × 2)
        if (in_bit = 1) then
            tree_index <- (tree_index + 1)
        if (tree_index < 64) then
            if tree[(63 - tree_index)] then
                found <- 0b1
                leave
    compressed_index <- 0
    for i = 0 to 127
        possible <- 1
        j <- i
        do while (j >= 4)
            j <- (j / 2)
            if tree[(63 - j)] then
                possible <- 0
                leave
        if (i = tree_index) then
            leave
        else
            if (i >= 64) then
                compressed_index <- (compressed_index + possible)
            else
                if (tree[(63 - i)] = 1) then
                    compressed_index <- (compressed_index + possible)
    switch(mode)
        case (0):
            (RT)[0:63] <- tree_index
            if ¬(found) then
                in_bits <- orig_in_bits
                ra_used <- 0b0
        case (1):
            (RT)[0:63] <- tree_index
            if hit_end then
                in_bits <- orig_in_bits
                ra_used <- 0b0
        case (2):
            (RT)[0:63] <- compressed_index
            if ¬(found) then
                in_bits <- orig_in_bits
                ra_used <- 0b0
                (RT)[0:63] <- tree_index
        default:
            (RT)[0:63] <- compressed_index
            if hit_end then
                in_bits <- orig_in_bits
                ra_used <- 0b0
    RS <- in_bits
    CR0 <- (ra_used || ((tree_index >= 64) || (found || hit_end)))

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-soc-bugs mailing list