Files from TOPS-20 <mdl.comp>.
[pdp10-muddle.git] / <mdl.comp> / bittst.mud.9
diff --git a/<mdl.comp>/bittst.mud.9 b/<mdl.comp>/bittst.mud.9
new file mode 100644 (file)
index 0000000..8518dbe
--- /dev/null
@@ -0,0 +1,59 @@
+<PACKAGE "BITTST">
+
+<ENTRY BIT-TEST-GEN>
+
+<USE "CACS" "CODGEN" "COMCOD" "CHKDCL" "COMPDEC">
+
+<DEFINE BIT-TEST-GEN (N W
+                     "OPTIONAL" (NOTF <>) (BRANCH <>) (DIR <>)
+                     "AUX" (NN <1 <KIDS .N>>) (SDIR .DIR) (B2 <MAKE:TAG>)
+                           (FLS <==? .W FLUSHED>) N2 (IMMEDIATE T)
+                           (TY <ISTYPE-GOOD? <RESULT-TYPE .NN>>) REG REG2
+                           (CONST <NODE-SUBR .N>))
+   #DECL ((N NN N2) NODE (REG) DATUM)
+   <COND (<==? <LENGTH <KIDS .N>> 2> <SET N2 <2 <KIDS .N>>>)>
+   <SET REG
+       <GEN .NN
+            <DATUM <COND (.TY .TY)
+                         (<MEMQ <NODE-TYPE .NN> ,SNODES> DONT-CARE)
+                         (ELSE ANY-AC)>
+                   ANY-AC>>>
+   <COND (<ASSIGNED? N2>
+         <SET REG2 <GEN .N2 DONT-CARE>>
+         <COND (<TYPE? <DATTYP .REG2> AC>
+                <RET-TMP-AC <DATTYP .REG2> .REG2>
+                <PUT .REG2 ,DATTYP WORD>)>)>
+   <RET-TMP-AC <DATTYP .REG> .REG>
+   <PUT .REG ,DATTYP WORD>
+   <AND .NOTF <SET DIR <NOT .DIR>>>
+   <SET DIR <COND (<AND .BRANCH <NOT .FLS>> <NOT .DIR>) (ELSE .DIR)>>
+   <EMIT
+    <INSTRUCTION
+     <COND (<OR <ASSIGNED? N2>
+               <AND <NOT <0? <CHTYPE <ANDB .CONST 262143> FIX>>>
+                    <NOT <0? <CHTYPE <GETBITS .CONST <BITS 18 18>> FIX>>>>>
+           <SET IMMEDIATE <>>
+           <COND (.DIR `TDNN ) (ELSE `TDNE )>)
+          (<0? <CHTYPE <ANDB .CONST 262143> FIX>>
+           <COND (.DIR `TLNN ) (ELSE `TLNE )>)
+          (.DIR `TRNN )
+          (ELSE `TRNE )>
+     <ACSYM <DATVAL .REG>>
+     !<COND (<ASSIGNED? N2> <ADDR:VALUE .REG2>)
+           (<NOT .IMMEDIATE> ([.CONST]))
+           (<0? <CHTYPE <ANDB .CONST 262143> FIX>>
+            (<CHTYPE <GETBITS .CONST <BITS 18 18>> FIX>))
+           (ELSE (.CONST))>>>
+   <RET-TMP-AC .REG>
+   <COND (<AND .BRANCH .FLS> <BRANCH:TAG .BRANCH> FLUSHED)
+        (.BRANCH
+         <BRANCH:TAG .B2>
+         <SET W <MOVE:ARG <REFERENCE .SDIR> .W>>
+         <BRANCH:TAG .BRANCH>
+         <LABEL:TAG .B2>
+         .W)
+        (ELSE
+         <BRANCH:TAG <SET BRANCH <MAKE:TAG>>>
+         <TRUE-FALSE .N .BRANCH .W>)>>
+
+<ENDPACKAGE>
\ No newline at end of file