--- /dev/null
+<DEFINE AND-GEN (OP1 OP2 DEST "OPTIONAL" HINT)
+ #DECL ((OP1 OP2) <OR FIX VARTBL> (DEST) <OR VARTBL ATOM>)
+ <ANDOR-GEN .OP1 .OP2 .DEST AND>>
+
+<DEFINE OR-GEN (OP1 OP2 DEST "OPTIONAL" HINT)
+ #DECL ((OP1 OP2) <OR FIX VARTBL> (DEST) <OR VARTBL ATOM>)
+ <ANDOR-GEN .OP1 .OP2 .DEST OR>>
+
+<DEFINE EOR-GEN (OP1 OP2 DEST "OPTIONAL" HINT)
+ #DECL ((OP1 OP2) <OR FIX VARTBL> (DEST) <OR VARTBL ATOM>)
+ <ANDOR-GEN .OP1 .OP2 .DEST EOR>>
+
+<DEFINE EQV-GEN (OP1 OP2 DEST "OPTIONAL" HINT)
+ #DECL ((OP1 OP2) <OR FIX VARTBL> (DEST) <OR VARTBL ATOM>)
+ <ANDOR-GEN .OP1 .OP2 .DEST EQV>>
+
+<DEFINE ANDOR-GEN (OP1 OP2 DEST OPC "AUX" (VAC <>) TMP LVAR)
+ #DECL ((OP1 OP2) <OR FIX VARTBL> (DEST) <OR VARTBL ATOM> (OPC) ATOM)
+ <COND (<TYPE? <SET TMP .OP1> FIX> <SET OP1 .OP2> <SET OP2 .TMP>)>
+ <COND (<AND <SET LVAR <FIND-CACHE-VAR .OP1>>
+ <SET VAC <LINKVAR-VALUE-AC .LVAR>>
+ <AVAILABLE? .VAC>>)
+ (<AND <TYPE? .OP2 VARTBL>
+ <SET LVAR <FIND-CACHE-VAR <SET TMP .OP2>>>
+ <SET VAC <LINKVAR-VALUE-AC .LVAR>>
+ <AVAILABLE? .VAC>>
+ <SET OP2 .OP1>
+ <SET OP1 .TMP>)
+ (ELSE <SET VAC <>>)>
+ <COND (.VAC <MUNG-AC .VAC>)>
+ <COND (<TYPE? .OP2 FIX>
+ <COND (<==? .OPC EQV>
+ <SET OP2 <CHTYPE <XORB .OP2 -1> FIX>>
+ <SET OPC EOR>)
+ (<==? .OPC AND> <SET OP2 <CHTYPE <XORB .OP2 -1> FIX>>)>)
+ (<OR <==? .OPC EQV> <==? .OPC AND>>
+ <COND (.VAC <EMIT ,INST-MCOML <MA-REG .VAC> <MA-REG .VAC>>)
+ (ELSE
+ <EMIT ,INST-MCOML
+ <VAR-VALUE-ADDRESS .OP1>
+ <MA-REG <SET VAC <GET-AC PREF-VAL T>>>>)>
+ <COND (<==? .OPC EQV> <SET OPC EOR>)>)>
+ <COND (<AND .VAC
+ <OR <N==? .OPC AND>
+ <TYPE? .OP2 FIX>>>
+ <EMIT <COND (<==? .OPC AND> ,INST-BICL2)
+ (<==? .OPC EOR> ,INST-XORL2)
+ (ELSE ,INST-BISL2)>
+ <COND (<TYPE? .OP2 FIX> <MA-IMM .OP2>)
+ (ELSE <VAR-VALUE-ADDRESS .OP2>)>
+ <MA-REG .VAC>>)
+ (<TYPE? .OP2 FIX>
+ <EMIT <COND (<==? .OPC AND> ,INST-BICL3)
+ (<==? .OPC EOR> ,INST-XORL3)
+ (ELSE ,INST-BISL3)>
+ <MA-IMM .OP2>
+ <VAR-VALUE-ADDRESS .OP1>
+ <MA-REG <SET VAC <GET-AC PREF-VAL T>>>>)
+ (ELSE
+ <EMIT <COND (<==? .OPC AND> ,INST-BICL3)
+ (<==? .OPC EOR> ,INST-XORL3)
+ (ELSE ,INST-BISL3)>
+ <COND (<TYPE? .OP1 FIX> <MA-IMM .OP1>)
+ (.VAC <MA-REG .VAC>)
+ (ELSE <VAR-VALUE-ADDRESS .OP1>)>
+ <VAR-VALUE-ADDRESS .OP2>
+ <MA-REG <COND (.VAC)
+ (ELSE <SET VAC <GET-AC PREF-VAL T>>)>>>)>
+ <DEST-DECL .VAC .DEST FIX>
+ NORMAL>
+
+<DEFINE ASH-GEN (VAL1 VAL2 DEST "OPTIONAL" HINT)
+ #DECL ((VAL1 VAL2) <OR FIX VARTBL> (DEST) <OR ATOM VARTBL>)
+ <SHIFT-GEN .VAL1 .VAL2 .DEST ASH>>
+
+<DEFINE LSH-GEN (VAL1 VAL2 DEST "OPTIONAL" HINT)
+ #DECL ((VAL1 VAL2) <OR FIX VARTBL> (DEST) <OR ATOM VARTBL>)
+ <SHIFT-GEN .VAL1 .VAL2 .DEST LSH>>
+
+<DEFINE ROT-GEN (VAL1 VAL2 DEST "OPTIONAL" HINT)
+ #DECL ((VAL1 VAL2) <OR FIX VARTBL> (DEST) <OR ATOM VARTBL>)
+ <SHIFT-GEN .VAL1 .VAL2 .DEST ROT>>
+
+<DEFINE SHIFT-GEN (VAL1 VAL2 DEST OPC "AUX" (VAC <>) (USE-LONG <>) LVAR)
+ #DECL ((VAL1 VAL2) <OR VARTBL FIX> (DEST) <OR VARTBL ATOM> (OPC) ATOM)
+ <COND (<AND <==? .OPC LSH>
+ <OR <TYPE? .VAL1 VARTBL> <L? .VAL1 0>>
+ <OR <TYPE? .VAL2 VARTBL> <L? .VAL2 0>>>
+ <SET VAC <GET-AC PREF-VAL T>>
+ <GET-AC <NEXT-AC .VAC> T>
+ <SET USE-LONG T>
+ <COND (<TYPE? .VAL1 VARTBL>
+ <LOAD-VAR .VAL1 VALUE T .VAC>)
+ (ELSE <LOAD-CONSTANT .VAC .VAL1>)>
+ <EMIT ,INST-CLRL <MA-REG <NEXT-AC .VAC>>>)
+ (<OR <TYPE? .VAL1 FIX>
+ <NOT <AND <SET LVAR <FIND-CACHE-VAR .VAL1>>
+ <SET VAC <LINKVAR-VALUE-AC .LVAR>>
+ <AVAILABLE? .VAC>>>>
+ <SET VAC <>>)>
+ <COND (<AND .VAC <N==? .VAL1 .DEST>>
+ <MUNG-AC .VAC>)>
+ <EMIT <COND (<==? .OPC ROT> ,INST-ROTL)
+ (.USE-LONG ,INST-ASHQ)
+ (ELSE ,INST-ASHL)>
+ <COND (<TYPE? .VAL2 FIX> <MA-IMM .VAL2>)
+ (ELSE <VAR-VALUE-ADDRESS .VAL2>)>
+ <COND (.VAC <MA-REG .VAC>)
+ (<TYPE? .VAL1 FIX> <MA-IMM .VAL1>)
+ (ELSE <VAR-VALUE-ADDRESS .VAL1>)>
+ <COND (.USE-LONG <MA-REG .VAC>)
+ (.VAC <MA-REG .VAC>)
+ (ELSE <MA-REG <SET VAC <GET-AC PREF-VAL>>>)>>
+ <DEST-DECL .VAC .DEST FIX>
+ NORMAL>
\ No newline at end of file