LONG>)> > > >> ; "Win if given all constants" >> ) (T )> LONG>) ( <0? > ; "On byte boundary" ; "Byte or halfword" <==? .WIDTH 16>> >>> ; "Make getting a halfword or byte not use EXTZV" ,INST-MOVZBL) (T ,INST-MOVZWL)> ; "Depends on width" ; "This works even if in AC" ) (T ; "Generate bizarre stack offset" >>)> ) ()>>) (T ) ()> ) ()> ) ()> ) ()>>)> > ) ( FIX> LONG>)>)> NORMAL> ) (ZERO? <>)) > > > >> ; "Win with all constants" LONG>)> .FROM>> ) ()> LONG>) (T LONG> ) ()> LONG>)> <==? .WIDTH 16>> <0? > <==? .DEST STACK> > ; "This only works if shift is 0 anyway" >>> <0? .SHIFT>> ; "If putbits into 0, rightmost part, just do MOVZxL" ) (<==? .FROM .DEST> ; ", so can't clear word before doing move" > ) (T )> LONG>) ( > ) (T )> LONG>)> ,INST-MOVZBL) (T ,INST-MOVZWL)>) (<==? .WIDTH 8> ,INST-MOVB) (,INST-MOVW)> ) (T )> >>) (.TAC ) ( ) (T >>)>> ) ( FIX> LONG>)>) (T >) (>)> >) (>)> > > )>) (T >)> >) (<==? .DEST .TO> >) ( >> >) (> ) ()> >>)> )>)> NORMAL> ) (VAC <>)) #DECL ((OP-2-ARG OP-3-ARG) FIX (OP1 OP2) (DEST) (COMMUTE) (VAC) ) > > >) (ELSE FIX FLOAT> .COMMUTE> )> LONG>) ( ) ( > 1>> <==? > 1>>>>) ( > > ) (ELSE )>) (ELSE > )>)> <==? .OP-2-ARG ,INST-ADDL2>>> > ) (ELSE )>)> <==? .OP1 0.0000000> <==? .OP1 -1>> > >> >>> ) (ELSE )> > ) (.VAC ) (ELSE >>)>>) ( <==? .DEST .OP1>> > >>> >> )> ) (ELSE )>>) (.USE-3 ) ( >) (.VAC ) (ELSE )> ) ( >) (ELSE )> > ) (.VAC ) (ELSE >>)>>) (ELSE >> )> ) ( >) (ELSE )> ) (ELSE )>>)>)> )> NORMAL> )) #DECL ((OP1 OP2) (DEST) ) > ) "AUX" (TYP <>)) #DECL ((VAL1 VAL2) > (DIR LABEL) ATOM) >)> > <0? .VAL1>>> > <0? .VAL2>>>> )> > ) "AUX" (TYP <>)) #DECL ((VAL1 VAL2) > (DIR LABEL) ATOM) >)> > <0? .VAL1>>> > <0? .VAL2>>>> )> > ) "AUX" (TYP <>)) #DECL ((VAL1 VAL2) ANY (DIR LABEL) ATOM) >)> )> > > > > <==? >> ; "no type comparison needed" ) (ELSE )>) (> > >> ; "No type comparison" ) ()>) (> LONG> > >) (>)> WORD> WORD> >) (>)> ) (ELSE ; "Compare with structured constant" > > WORD> WORD> > >) (>)> LONG> >) (>)> )> NORMAL> ) TVAR (DCL1 ) TAC CAC VAC OK1? OK2?) #DECL ((VAR1 VAR2) VARTBL (DIR LABEL) ATOM (ELABEL) ATOM) > > )> > > > > > >) (>)>)> > > LONG> <> <> T>) (ELSE <> <> T>)> >> ) (ELSE )> ) (ELSE )> >>> >) ( > ) (ELSE )> ) (ELSE )> WORD>)> >) (>)> T> ) >) (>> AC) ( > T) ( > T)>> ) > > .TYP>) (> ) ()> NORMAL> ) > ) (> >) (ELSE )> LONG .TYP> >) (ELSE >) (ELSE )> LONG .TYP> >)>) (ELSE LONG .TYP> >)>> > > >>)> > >>)> > ) ) 1> <2 .L>>> ((,COND-CODE-EQ ,INST-BEQL) (,COND-CODE-NE ,INST-BNEQ) (,COND-CODE-LE ,INST-BLEQ) (,COND-CODE-LT ,INST-BLSS) (,COND-CODE-GT ,INST-BGTR) (,COND-CODE-GE ,INST-BGEQ) (,COND-CODE-ALWAYS ,INST-BRB))>> ) (<==? .DIR -> ) ()>> > ) VAC B1 B2 TAC) #DECL ((VAR) VARTBL (DIRCODE) FIX (LABEL) ATOM (TYP) ) >)> >> > ,INST-TSTL) (ELSE ,INST-TSTF)> .VADDR> ) (ELSE > > ,GC-MODE> TYPE>>)> WORD>) (ELSE > )> > <> <> <> T> > <> <> <> T> )>) (ELSE )>> > .LABEL .STATUS?>> ,INST-CMPL) (ELSE ,INST-CMPF)>) (<==? .SZ WORD> ,INST-CMPW) (<==? .SZ BYTE> ,INST-CMPB) (ELSE )> .VAR .ADDR>> > ) (> .TYP>) (ELSE ,INST-CMPL)(ELSE ,INST-CMPF)> > >)>> )) #DECL ((VAR) VARTBL (AC) AC (LABEL) ATOM (DIR) FIX) .VADDR LONG .TYP> >> > ) (<==? > FIX> > FIX>> ,32MIN) (<==? .CONST FIX>> ,32MAX) (.CONST)>) (> LIST> > 0)>> ) 0) (ELSE ) ("TOPS20" ; "Biggest possible VAX float" *37777677777*) ( ; "Smallest possible VAX float" *37777777777*) (T 1>) (ELSE 0)>> FIX>> FIX>>> >)> >>> >>> >> FIX>)>)>)>> FIX>> FIX>>>> > FIX>>) (ELSE )>> )) #DECL ((OP1 OP2) (DEST) ) ,- FIX>> (TNAME) ) > UNBOUND>> > >> > <==? .DIR +>> >) ( <==? .DIR ->> >)>) (ELSE > > > ,GC-MODE> TYPE>>)> WORD>) ( WORD>)>) ( <==? UNBOUND>> > ) (ELSE > )> >) (>)>)> NORMAL> )) #DECL ((OP1 OP2) (DEST) ) > >)> ) ( >) (> 31> >)> >>> )) #DECL ((OP1 OP2) (DEST) ) ,/ FIX>> ) (LAB1 ) (LAB2 )) #DECL ((ITM1 ITM2) (RES) ) > > >) ( >> > >> ) (ELSE >> > >> )> ) (> ) (ELSE )> ; "Divisor" ; "Dividend" ; "Quotient" > ; "Remainder"> >> > ) (.AC ) (T )> >> .RES FIX> NORMAL> )) #DECL ((OP1 OP2) (DEST) ) > )) #DECL ((OP1 OP2) (DEST) ) ,- FLOAT>> )) #DECL ((OP1 OP2) (DEST) ) > )) #DECL ((OP1 OP2) (DEST) ) ,/ FLOAT>> ) > > >) (ELSE ) (ELSE )> >>>)> > ) > > >) (ELSE ) (ELSE )> >>>)> > ) >