- 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 ]
- 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.
- xmux = [ CONCAT , P , 0 ]
- ymux = [ C , 0 ]
- zmux = [ C , PCIN , P , P>>17 , PCIN>>17, 0 ]
- cinmux = [ CARRYIN , CARRYCASCIN , 0 ]
Similarly, 0 is not explicitly required when defining an instruction. The 0 and corresponding operator are ignored.
- xycomb = [ xmux + ymux , ymux + xmux , mult ]
valid instructions = [
- xycomb + zmux + cinmux ,
- xycomb - zmux,
- zmux + xycomb + cinmux ,
- zmux - ( xycomb + cinmux ) ,
- zmux - xmux - ymux - cinmux ,
- zmux - ymux - xmux - cinmux ,
- -zmux + xmux + ymux,
- -zmux + ymux + xmux,
- -zmux - xmux,
- rndsimple( zmux + xmux + cinmux )
- rndsimple( mult + cinmux )
- rndsym( [ P , PCIN ] ) ]
- rndsym( mult )
- rndmacc( mult + P )
Note that for the rndsimple functions, operand C is not supported for zmux.