Fixed systematic errors in the original MDL documentation scans (starting around...
[pdp10-muddle.git] / <mdl.comp> / confor.mud.1
1
2 <DEFINE CONFORM (R1 R2 T1 T2
3                  "AUX" (X <3 .T1>) (Y <3 .T2>) (AR1 <TYPE? <DATVAL .R1> AC>) M1
4                        M2 (AR2 <TYPE? <DATVAL .R2> AC>) AC (VAL <>))
5         #DECL ((T1 T2) TRANS (X Y) <UVECTOR [7 FIX]> (R1 R2) DATUM (AC) AC
6                (M1 M2) FIX)
7         <SET AC <COND (.AR1 <DATVAL .R1>) (ELSE <DATVAL .R2>)>>
8         <COND (<N==? <7 .X> <7 .Y>>
9                <COND (<0? <7 .X>> <HWSH .R2 .R1 <6 .X>>)
10                      (ELSE <HWSH .R1 .R2 <6 .Y>>)>)
11               (<N==? <6 .X> <6 .Y>>
12                <COND (<0? <6 .X>> <HWH .R2 .R1>) (ELSE <HWH .R1 .R2>)>)>
13         <COND (<N==? <1 .X> <1 .Y>>
14                <AND <NOT <0? <1 .Y>>> <SET VAL T>>
15                <MUNG-AC .AC <COND (.AR1 .R1)(ELSE .R2)>>
16                <EMIT <INSTRUCTION `MOVNS  <ADDRSYM .AC>>>)
17               (<NOT <0? <1 .X>>> <SET VAL T>)>
18         <COND (<OR <NOT <0? <4 .X>>> <NOT <0? <4 .Y>>>>
19                <SET M1 <M* <4 .X> <4 .Y> <5 .X> <5 .Y>>>
20                <SET M2 <M* <4 .Y> <4 .X> <5 .Y> <5 .X>>>
21                <COND (<AND <G=? .M1 .M2> <0? <MOD .M1 .M2>>>
22                       <SET M1 </ .M1 .M2>>
23                       <SET M2 1>)
24                      (<AND <G? .M2 .M1> <0? <MOD .M2 .M1>>>
25                       <SET M2 </ .M2 .M1>>
26                       <SET M1 1>)>
27                <COND (<NOT <1? .M1>>
28                       <TOACV .R2>
29                       <MUNG-AC <DATVAL .R2> .R2>
30                       <IMCHK '(`IMUL  `IMULI )
31                              <ACSYM <DATVAL .R2>>
32                              <REFERENCE:ADR .M1>>)>
33                <COND (<NOT <1? .M2>>
34                       <TOACV .R1>
35                       <MUNG-AC <DATVAL .R1> .R1>
36                       <IMCHK '(`IMUL  `IMULI )
37                              <ACSYM <DATVAL .R1>>
38                              <REFERENCE:ADR .M2>>)>)>
39         <COND (<AND <OR <NOT <0? <2 .X>>> <NOT <0? <2 .Y>>>>
40                     <NOT <0? <SET M1 <- <3 .X> <3 .Y>>>>>>
41                <COND (<TYPE? <DATVAL .R2> AC>
42                       <MUNG-AC <DATVAL .R2> .R2>
43                       <IMCHK <COND (<L? .M1 0> <SET M1 <- .M1>> '(`SUB 
44                                                                   `SUBI ))
45                                    (ELSE '(`ADD  `ADDI ))>
46                              <ACSYM <DATVAL .R2>>
47                              <REFERENCE:ADR .M1>>)
48                      (ELSE
49                       <TOACV .R1>
50                       <MUNG-AC <DATVAL .R1> .R1>
51                       <IMCHK <COND (<L? .M1 0> <SET M1 <- .M1>> '(`ADD 
52                                                                   `ADDI ))
53                                    (ELSE '(`SUB  `SUBI ))>
54                              <ACSYM <DATVAL .R1>>
55                              <REFERENCE:ADR .M1>>)>)>
56         .VAL>
57
58 <DEFINE M* (A B C D) 
59         #DECL ((A B C D) FIX)
60         <* <COND (<OR <==? .A 1> <==? .A 2>> .C) (ELSE 1)>
61            <COND (<OR <==? .B 3> <==? .B 4>> .D) (ELSE 1)>>>
62
63 <DEFINE HWSH (R1 R2 HW) 
64         #DECL ((R1 R2) DATUM (HW) FIX)
65         <COND (<NOT <0? .HW>>
66                <COND (<TYPE? <DATVAL .R1> AC>
67                       <MUNG-AC <DATVAL .R1> .R1>
68                       <EMIT <INSTRUCTION `HLRZS  <ADDRSYM <DATVAL .R1>>>>)
69                      (ELSE
70                       <MUNG-AC <DATVAL .R2> .R2>
71                       <EMIT <INSTRUCTION `MOVSS  <ADDRSYM <DATVAL .R2>>>>)>)
72               (ELSE
73                <COND (<TYPE? <DATVAL .R1> AC>
74                       <MUNG-AC <DATVAL .R1> .R1>
75                       <EMIT <INSTRUCTION `HLRES  <ADDRSYM <DATVAL .R1>>>>)
76                      (ELSE
77                       <MUNG-AC <DATVAL .R2> .R2>
78                       <EMIT <INSTRUCTION `MOVSS  <ADDRSYM <DATVAL .R2>>>>)>)>>
79
80 <DEFINE HWH (R1 R2) 
81         #DECL ((R1 R2) DATUM)
82         <COND (<TYPE? <DATVAL .R1> AC>
83                <MUNG-AC <DATVAL .R1> .R1>
84                <EMIT <INSTRUCTION `HRRES  <ADDRSYM <DATVAL .R1>>>>)
85               (ELSE
86                <MUNG-AC <DATVAL .R2> .R2>
87                <EMIT <INSTRUCTION `ANDI  <ACSYM <DATVAL .R2>> 262143>>)>>
88 \f\ 3\ 3\ 3\ 3