Files from TOPS-20 <mdl.comp>.
[pdp10-muddle.git] / <mdl.comp> / confor.mud.1
diff --git a/<mdl.comp>/confor.mud.1 b/<mdl.comp>/confor.mud.1
new file mode 100644 (file)
index 0000000..a9dddc2
--- /dev/null
@@ -0,0 +1,88 @@
+
+<DEFINE CONFORM (R1 R2 T1 T2
+                "AUX" (X <3 .T1>) (Y <3 .T2>) (AR1 <TYPE? <DATVAL .R1> AC>) M1
+                      M2 (AR2 <TYPE? <DATVAL .R2> AC>) AC (VAL <>))
+       #DECL ((T1 T2) TRANS (X Y) <UVECTOR [7 FIX]> (R1 R2) DATUM (AC) AC
+              (M1 M2) FIX)
+       <SET AC <COND (.AR1 <DATVAL .R1>) (ELSE <DATVAL .R2>)>>
+       <COND (<N==? <7 .X> <7 .Y>>
+              <COND (<0? <7 .X>> <HWSH .R2 .R1 <6 .X>>)
+                    (ELSE <HWSH .R1 .R2 <6 .Y>>)>)
+             (<N==? <6 .X> <6 .Y>>
+              <COND (<0? <6 .X>> <HWH .R2 .R1>) (ELSE <HWH .R1 .R2>)>)>
+       <COND (<N==? <1 .X> <1 .Y>>
+              <AND <NOT <0? <1 .Y>>> <SET VAL T>>
+              <MUNG-AC .AC <COND (.AR1 .R1)(ELSE .R2)>>
+              <EMIT <INSTRUCTION `MOVNS  <ADDRSYM .AC>>>)
+             (<NOT <0? <1 .X>>> <SET VAL T>)>
+       <COND (<OR <NOT <0? <4 .X>>> <NOT <0? <4 .Y>>>>
+              <SET M1 <M* <4 .X> <4 .Y> <5 .X> <5 .Y>>>
+              <SET M2 <M* <4 .Y> <4 .X> <5 .Y> <5 .X>>>
+              <COND (<AND <G=? .M1 .M2> <0? <MOD .M1 .M2>>>
+                     <SET M1 </ .M1 .M2>>
+                     <SET M2 1>)
+                    (<AND <G? .M2 .M1> <0? <MOD .M2 .M1>>>
+                     <SET M2 </ .M2 .M1>>
+                     <SET M1 1>)>
+              <COND (<NOT <1? .M1>>
+                     <TOACV .R2>
+                     <MUNG-AC <DATVAL .R2> .R2>
+                     <IMCHK '(`IMUL  `IMULI )
+                            <ACSYM <DATVAL .R2>>
+                            <REFERENCE:ADR .M1>>)>
+              <COND (<NOT <1? .M2>>
+                     <TOACV .R1>
+                     <MUNG-AC <DATVAL .R1> .R1>
+                     <IMCHK '(`IMUL  `IMULI )
+                            <ACSYM <DATVAL .R1>>
+                            <REFERENCE:ADR .M2>>)>)>
+       <COND (<AND <OR <NOT <0? <2 .X>>> <NOT <0? <2 .Y>>>>
+                   <NOT <0? <SET M1 <- <3 .X> <3 .Y>>>>>>
+              <COND (<TYPE? <DATVAL .R2> AC>
+                     <MUNG-AC <DATVAL .R2> .R2>
+                     <IMCHK <COND (<L? .M1 0> <SET M1 <- .M1>> '(`SUB 
+                                                                 `SUBI ))
+                                  (ELSE '(`ADD  `ADDI ))>
+                            <ACSYM <DATVAL .R2>>
+                            <REFERENCE:ADR .M1>>)
+                    (ELSE
+                     <TOACV .R1>
+                     <MUNG-AC <DATVAL .R1> .R1>
+                     <IMCHK <COND (<L? .M1 0> <SET M1 <- .M1>> '(`ADD 
+                                                                 `ADDI ))
+                                  (ELSE '(`SUB  `SUBI ))>
+                            <ACSYM <DATVAL .R1>>
+                            <REFERENCE:ADR .M1>>)>)>
+       .VAL>
+
+<DEFINE M* (A B C D) 
+       #DECL ((A B C D) FIX)
+       <* <COND (<OR <==? .A 1> <==? .A 2>> .C) (ELSE 1)>
+          <COND (<OR <==? .B 3> <==? .B 4>> .D) (ELSE 1)>>>
+
+<DEFINE HWSH (R1 R2 HW) 
+       #DECL ((R1 R2) DATUM (HW) FIX)
+       <COND (<NOT <0? .HW>>
+              <COND (<TYPE? <DATVAL .R1> AC>
+                     <MUNG-AC <DATVAL .R1> .R1>
+                     <EMIT <INSTRUCTION `HLRZS  <ADDRSYM <DATVAL .R1>>>>)
+                    (ELSE
+                     <MUNG-AC <DATVAL .R2> .R2>
+                     <EMIT <INSTRUCTION `MOVSS  <ADDRSYM <DATVAL .R2>>>>)>)
+             (ELSE
+              <COND (<TYPE? <DATVAL .R1> AC>
+                     <MUNG-AC <DATVAL .R1> .R1>
+                     <EMIT <INSTRUCTION `HLRES  <ADDRSYM <DATVAL .R1>>>>)
+                    (ELSE
+                     <MUNG-AC <DATVAL .R2> .R2>
+                     <EMIT <INSTRUCTION `MOVSS  <ADDRSYM <DATVAL .R2>>>>)>)>>
+
+<DEFINE HWH (R1 R2) 
+       #DECL ((R1 R2) DATUM)
+       <COND (<TYPE? <DATVAL .R1> AC>
+              <MUNG-AC <DATVAL .R1> .R1>
+              <EMIT <INSTRUCTION `HRRES  <ADDRSYM <DATVAL .R1>>>>)
+             (ELSE
+              <MUNG-AC <DATVAL .R2> .R2>
+              <EMIT <INSTRUCTION `ANDI  <ACSYM <DATVAL .R2>> 262143>>)>>
+\f\ 3\ 3\ 3\ 3
\ No newline at end of file