- preadder = [ (A+D) , (D+A) , (D-A), D, -A , A, (ACIN+D) , (D+ACIN) , (D-ACIN), -ACIN , ACIN ]
- mult_ip1 = [ ACIN , A , preadder ]
- mult_ip2 = [ BCIN , B , 1 , preadder]
- mult = [ mult_ip1 * mult_ip2 , mult_ip2 * mult_ip1 ]
The 1 is not explicitly required when defining an instruction; the 1 and corresponding * operator are ignored.
Note: The preadder option in mult_ip2 enables a squaring operation. The operator selected from the
preadder for mult_ip1 must match the preadder instruction in mult_ip2.
- wmux = [ C , P , 0 ]
- xmux = [ CONCAT , P , 0 ]
- ymux = [ C , 0 ]
- zmux = [ C , PCIN , P , P>>23 , PCIN>>23, 0 ]
- cinmux = [ CARRYIN , CARRYCASCIN , 0 ]
Similarly, 0 is not explicitly required when defining an instruction. The 0 and corresponding operator are ignored.
- xycomb = [ wmux + xmux + ymux , wmux + ymux + xmux , mult ]
valid instructions = [
- xycomb + zmux + cinmux ,
- zmux + xycomb + cinmux ,
- zmux - ( xycomb + cinmux ) ,
- zmux - wmux - xmux - ymux - cinmux ,
- zmux - wmux - ymux - xmux - cinmux ,
- -zmux +wmux + xmux + ymux,
- -zmux +wmux + ymux + xmux,
- -zmux - wmux - xmux,
- -zmux - xmux - wmux,
- -zmux - mult,
- rndsimple( zmux + xmux + ymux + cinmux )
- rndsimple( mult + zmux + cinmux )
- rndsym( [ P , PCIN ] ) ]
- rndsym( mult )
- rndmacc( mult +wmux + P )