/* Shifter - Josh Walker, CS355, Fall 1999 */

Define Shifter1 a[2..0] c[1..0] | s;
Not aa c[1] Nc1;
Not ab c[0] Nc0;
And ac a[0] c[1] Nc0 Right;
And ba a[1] Nc1 Nc0 Center;
And bb a[2] Nc1 c[0] Left;
Or bc Right Center Left s;
Endef;

Define SHIFTER16 a[15..0] c[1..0] | s[15..0];
Shifter1 aa a[1] a[0] ZERO c[1] c[0] | s[0];
Shifter1 ab a[2] a[1] a[0] c[1] c[0] | s[1];
Shifter1 ac a[3] a[2] a[1] c[1] c[0] | s[2];
Shifter1 ad a[4] a[3] a[2] c[1] c[0] | s[3];
Shifter1 ae a[5] a[4] a[3] c[1] c[0] | s[4];
Shifter1 af a[6] a[5] a[4] c[1] c[0] | s[5];
Shifter1 ag a[7] a[6] a[5] c[1] c[0] | s[6];
Shifter1 ah a[8] a[7] a[6] c[1] c[0] | s[7];
Shifter1 ai a[9] a[8] a[7] c[1] c[0] | s[8];
Shifter1 aj a[10] a[9] a[8] c[1] c[0] | s[9];
Shifter1 ak a[11] a[10] a[9] c[1] c[0] | s[10];
Shifter1 al a[12] a[11] a[10] c[1] c[0] | s[11];
Shifter1 am a[13] a[12] a[11] c[1] c[0] | s[12];
Shifter1 an a[14] a[13] a[12] c[1] c[0] | s[13];
Shifter1 ao a[15] a[14] a[13] c[1] c[0] | s[14];
Shifter1 ap ZERO a[15] a[14] c[1] c[0] | s[15];
Endef;
