ITS Muddle 54 documentation, from TOPS-20 directory.
[pdp10-muddle.git] / <mdl.comp> / bittst.mud.9
1 <PACKAGE "BITTST">
2
3 <ENTRY BIT-TEST-GEN>
4
5 <USE "CACS" "CODGEN" "COMCOD" "CHKDCL" "COMPDEC">
6
7 <DEFINE BIT-TEST-GEN (N W
8                       "OPTIONAL" (NOTF <>) (BRANCH <>) (DIR <>)
9                       "AUX" (NN <1 <KIDS .N>>) (SDIR .DIR) (B2 <MAKE:TAG>)
10                             (FLS <==? .W FLUSHED>) N2 (IMMEDIATE T)
11                             (TY <ISTYPE-GOOD? <RESULT-TYPE .NN>>) REG REG2
12                             (CONST <NODE-SUBR .N>))
13    #DECL ((N NN N2) NODE (REG) DATUM)
14    <COND (<==? <LENGTH <KIDS .N>> 2> <SET N2 <2 <KIDS .N>>>)>
15    <SET REG
16         <GEN .NN
17              <DATUM <COND (.TY .TY)
18                           (<MEMQ <NODE-TYPE .NN> ,SNODES> DONT-CARE)
19                           (ELSE ANY-AC)>
20                     ANY-AC>>>
21    <COND (<ASSIGNED? N2>
22           <SET REG2 <GEN .N2 DONT-CARE>>
23           <COND (<TYPE? <DATTYP .REG2> AC>
24                  <RET-TMP-AC <DATTYP .REG2> .REG2>
25                  <PUT .REG2 ,DATTYP WORD>)>)>
26    <RET-TMP-AC <DATTYP .REG> .REG>
27    <PUT .REG ,DATTYP WORD>
28    <AND .NOTF <SET DIR <NOT .DIR>>>
29    <SET DIR <COND (<AND .BRANCH <NOT .FLS>> <NOT .DIR>) (ELSE .DIR)>>
30    <EMIT
31     <INSTRUCTION
32      <COND (<OR <ASSIGNED? N2>
33                 <AND <NOT <0? <CHTYPE <ANDB .CONST 262143> FIX>>>
34                      <NOT <0? <CHTYPE <GETBITS .CONST <BITS 18 18>> FIX>>>>>
35             <SET IMMEDIATE <>>
36             <COND (.DIR `TDNN ) (ELSE `TDNE )>)
37            (<0? <CHTYPE <ANDB .CONST 262143> FIX>>
38             <COND (.DIR `TLNN ) (ELSE `TLNE )>)
39            (.DIR `TRNN )
40            (ELSE `TRNE )>
41      <ACSYM <DATVAL .REG>>
42      !<COND (<ASSIGNED? N2> <ADDR:VALUE .REG2>)
43             (<NOT .IMMEDIATE> ([.CONST]))
44             (<0? <CHTYPE <ANDB .CONST 262143> FIX>>
45              (<CHTYPE <GETBITS .CONST <BITS 18 18>> FIX>))
46             (ELSE (.CONST))>>>
47    <RET-TMP-AC .REG>
48    <COND (<AND .BRANCH .FLS> <BRANCH:TAG .BRANCH> FLUSHED)
49          (.BRANCH
50           <BRANCH:TAG .B2>
51           <SET W <MOVE:ARG <REFERENCE .SDIR> .W>>
52           <BRANCH:TAG .BRANCH>
53           <LABEL:TAG .B2>
54           .W)
55          (ELSE
56           <BRANCH:TAG <SET BRANCH <MAKE:TAG>>>
57           <TRUE-FALSE .N .BRANCH .W>)>>
58
59 <ENDPACKAGE>