Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / mimc / rot32.mud
1 <SETG 32MASK #WORD *37777777777*>
2
3 <MANIFEST 32MASK>
4
5 <DEFMAC ROT32!- ('A 'B "AUX" PT)
6         <FORM IFSYS ("UNIX" <FORM ROT .A .B>)
7               ("TOPS20"
8                <COND (<AND <OR <==? <SET PT <PRIMTYPE .A>> FIX>
9                                <==? .PT WORD>
10                                <==? <SET PT <TYPE .A>> GVAL>
11                                <==? .PT LVAL>
12                                <AND <TYPE? .A FORM>
13                                     <==? <LENGTH .A> 2>
14                                     <OR <==? <1 .A> LVAL> <==? <1 .A> GVAL>>
15                                     <TYPE? <2 .A> ATOM>>>
16                            <TYPE? .B FIX>>
17                       <COND (<==? .B 0> .A)
18                             (ELSE
19                              <FORM ANDB
20                                    <FORM ORB <FORM LSH .A .B>
21                                          <FORM LSH <FORM ANDB .A ,32MASK>
22                                                <COND (<L? .B 0> <+ .B 32>)
23                                                      (ELSE <- .B 32>)>>>
24                                    ,32MASK>)>)
25                      (<TYPE? .B FIX>
26                       <FORM PROG ((OBJ .A))
27                             <FORM ANDB
28                                   <FORM ORB <FORM LSH '.OBJ .B>
29                                         <FORM LSH <FORM ANDB '.OBJ ,32MASK>
30                                               <COND (<L? .B 0> <+ .B 32>)
31                                                     (ELSE <- .B 32>)>>>
32                                   ,32MASK>>)
33                      (ELSE
34                       <FORM PROG ((OBJ .A) (SHFT .B))
35                             <FORM ANDB
36                                   <FORM ORB <FORM LSH '.OBJ '.SHFT>
37                                         <FORM LSH <FORM ANDB '.OBJ ,32MASK>
38                                               <FORM COND (<FORM L? '.SHFT 0>
39                                                           <FORM + '.SHFT 32>)
40                                                     (ELSE <FORM - '.SHFT 32>)>>>
41                                   ,32MASK>>)>)>>
42                        
43