MaPU

An Open Source DSP Ecosystem

Instructions for SCU

SCU stands for Scalar Computing Unit, which supports most general computation related instructions.

Arithmetic

Assembly Operation Completing stage
Rs = Rm + Rn {(U)} {(T)} Integer add EX2
Rs = Rm - Rn {(U)} {(T)} Integer sub EX2
Rs = Rm + Rn {(U)} {(T)} CI Integer add with carry EX2
Rs = Rm - Rn {(U)} {(T)} CI Integer sub with carry EX2
Rs = Rm - Rn {(U)} {(T)} CI Integer sub with carry EX2
Rs = Rm * Rn {(U)} Integer multiply EX4

Logic

Assembly Operation Completing stage
Rs = ABS Rm Absolute value EX2
Rs = Rm & Rn Bitwise and EX2
Rs = Rm | Rn Bitwise or EX2
Rs = Rm ^ Rn Bitwise xor EX2
Rs = ~ Rm Not EX2
Rs = Rm == Rn Equal EX2
Rs = Rm != Rn Not Equal EX2
Rs = Rm > Rn {(U)} Big EX2
Rs = Rm >= Rn {(U)} Big or equal EX2
Rs = Rm < Rn {(U)} Less EX2
Rs = Rm <= Rn {(U)} Less or equal EX2
Rs = Rm << Rn Logic left shift EX2
Rs = Rm << Imm5 Logic left shift with Imm EX2
Rs = Rm >> Rn Logic right shift EX2
Rs = Rm >> Imm5 Logic right shift with Imm EX2

32 bits Float

Assembly Operation Completing stage
Rs = Rm + Rn {(T)} (S) 32 bits float add EX5
Rs = Rm - Rn {(T)} (S) 32 bits float sub EX5
Rs = Rm * Rn {(T)} (S) 32 bits float mul EX5
Rs = ABS Rm (S) 32 bits float absolute value EX5
Rs = RECIP Rm (S) 32 bits float reciprocal EX5
Rs = RSQRT Rm (S) 32 bits float reciprocal square root EX5
Rs = Rm > Rn (S) Big EX5
Rs = Rm >= Rn (S) Big or equal EX5
Rs = Rm < Rn (S) Less EX5
Rs = Rm <= Rn (S) Less or equal EX5
Rs = SINGLE Rm {(U)}{(T)} Convert integer to single float EX5
Rs = INT Rm {(T)}(S) Convert single float to integer EX5

64 bits Float

Assembly Operation Completing stage
DRs = DRm + DRn {(T)} (D) 64 bits float add EX5
DRs = DRm - DRn {(T)} (D) 64 bits float sub EX5
DRs = DRm * DRn {(T)} (D) 64 bits float mul EX5
DRs = ABS DRm (D) 64 bits float absolute value EX5
DRs = RECIP DRm (D) 64 bits float reciprocal EX5
DRs = RSQRT DRm (D) 64 bits float reciprocal square root EX5
DRs = DRm > DRn (D) Big EX5
DRs = DRm >= DRn (D) Big or equal EX5
DRs = DRm < DRn (D) Less EX5
DRs = DDRm <= DRn (D) Less or equal EX5
DRs = DOUBLE Rm {(U)} Convert integer to double float EX5
DRs = DOUBLE Rm (S) Convert single float to double float EX5
Rs = INT DRm {(T)}(D) Convert double float to integer EX5
Rs = SINGLE DRm {(T)}(D) Convert double float to single float EX5

<—— [ISA] [AGU] ——>