# [DRAFT] Prefix-code decode VA-Form * pcdec. RT,RA,RB,RC Pseudo-code: 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 do 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] # walk the binary tree in `tree` from parent to the selected child 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 do 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 Special Registers Altered: CR0