Annotation of researchv10no/cmd/ccom/vax/stin, revision 1.1.1.1

1.1       root        1: SHAPES
                      2: #      basic shapes
                      3: F:     'FREE';
                      4: N:     'NAME'  :2;
                      5: T:     'TEMP'  :1;
                      6: A:     'AUTO'  :1;
                      7: P:     'PARAM' :1;
                      8: CC:    'CC';
                      9: R:     'REG':0;
                     10: 
                     11: #      constants
                     12: C:     :4;
                     13: Cna:   NONAME :4;
                     14: C0:    CONVAL 0 :0;
                     15: C1:    CONVAL 1 :0;
                     16: C2:    CONVAL 2 :0;
                     17: C3:    CONVAL 3 :0;
                     18: C4:    CONVAL 4 :0;
                     19: C8:    CONVAL 8 :0;
                     20: 
                     21: CR: C, R;
                     22: 
                     23: #      more complicated address modes
                     24: 
                     25: SOREG: *(R+C):1,  *R:1 , *(R-Cna) :1;
                     26: AWD: SOREG,R,T,N,C,P,A;
                     27: # indirect addresses
                     28: INDIR: *N:3, *T:3, *SOREG:3, *P:3, *A:3;
                     29: IAWD: AWD, INDIR;
                     30: # char addresses, short addresses, long addresses, double addresses
                     31: #      (auto decrement, auto increment, indexed, double index, and IAWD)
                     32: CADRS: R + AWD;
                     33: SADRS: ((R<<C1) + AWD), ('UAND'(AWD))+(R<<C1);
                     34: LADRS: ((R<<C2) + AWD), ('UAND'(AWD))+(R<<C2);
                     35: DADRS: ((R<<C3) + AWD), ('UAND'(AWD))+(R<<C3);
                     36: CAWD: *(R -= C1), *(R ++ C1), *( R + AWD ), IAWD ;
                     37: SAWD: *(R -= C2), *(R ++ C2), *((R<<C1)+AWD), *(('UAND'(AWD))+(R<<C1)), IAWD ;
                     38: LAWD: *(R -= C4), *(R ++ C4), *((R<<C2)+AWD), *(('UAND'(AWD))+(R<<C2)), IAWD ;
                     39: DAWD: *(R -= C8), *(R ++ C8), *((R<<C3)+AWD), *(('UAND'(AWD))+(R<<C3)), IAWD ;
                     40: SFLD: 'FLD' IAWD;
                     41: SCC: 'CONV' CAWD[c];
                     42: SCUC: 'CONV' CAWD[uc];
                     43: SCCUC: SCC, SCUC;
                     44: SCS: 'CONV' SAWD[s];
                     45: SCUS: 'CONV' SAWD[us];
                     46: SCSUS: SCS, SCUS;
                     47: SFLT: 'CONV' LAWD[f], LAWD[f];
                     48: CDAWD: 'CONV' DAWD[d], DAWD[d];
                     49: 
                     50: OPCODES
                     51: # default cost - can we make costing more accurate?
                     52: #      current method: add 1 for each opcode and 1 for each operand
                     53: DCOST  :3;
                     54: 
                     55: C0     {$N}    "":0;
                     56: 
                     57: 'COMOP' F,F {$N} "" ;
                     58: 'COMOP' F,R {$R $A $>} "Y" ;
                     59: 'COMOP' F,CC {$C $A} "" ;
                     60: 
                     61: 'GENLAB' F  {$N} "\\LL:\n" ;
                     62: 'GENLAB' R  {$L} "\\LL:\n" ;
                     63: 'GENLAB' CC  {$C} "\\LL:\n" ;
                     64: 
                     65: 'GENUBR' F  {$N} "ZI" ;
                     66: 'GENUBR' C  {$N} "ZI" ;
                     67: 'GENUBR' R  {$N} "ZI" ;
                     68: 'GENBR' CC  {$N} "ZI" ;
                     69: 
                     70: 'CM' F,F {$N} "";
                     71: 
                     72: 'CALL' C,F {$A $< $1} "        calls   Zc,CL\n" ;
                     73: 'CALL' R,F {$A $< $1} "        calls   Zc,(AL)\n" ;
                     74: 
                     75: 'UCALL' C {$A $1} "    calls   $0,CL\n" ;
                     76: 'UCALL' R {$A $< $1} " calls   $0,(AL)\n" ;
                     77: 
                     78: = LAWD[p], CADRS {$L} "        movab   ZM,AL\n" ;
                     79: = LAWD[p], SADRS {$L} "        movaw   ZM,AL\n" ;
                     80: = LAWD[p], LADRS {$L} "        moval   ZM,AL\n" ;
                     81: = LAWD[p], DADRS {$L} "        movad   ZM,AL\n" ;
                     82: 
                     83: = CAWD[cuc],  C0 {$R} "        clrb    AL\n" :2;
                     84: = CAWD[cuc],  C0 {$L} "        clrb    AL\n" :2;
                     85: = CAWD[cuc], CR {$L}   "RL!R   movb    AR,AL\n" ;
                     86: = CAWD[cuc], CR {$R $C}        "       movb    AR,AL\n" ;
                     87: = CAWD[cuc], CAWD[cuc] {$L}    "       movb    AR,AL\n" ;
                     88: = CAWD[cuc], CAWD[cuc] {$R $C} "       movb    AR,AL\n" ;
                     89: 
                     90: = SAWD[sus],  C0 {$R} "        clrw    AL\n" :2;
                     91: = SAWD[sus],  C0 {$L} "        clrw    AL\n" :2;
                     92: = SAWD[sus], SCC {$L $C}       "       cvtbw   AR,AL\n" ;
                     93: = SAWD[sus], SCUC {$L $C}      "       movzbw  AR,AL\n" ;
                     94: = SAWD[sus], CR {$L}   "RL!R   movw    AR,AL\n" ;
                     95: = SAWD[sus], CR {$R $C}        "       movw    AR,AL\n" ;
                     96: = SAWD[sus], SAWD[sus] {$L}    "       movw    AR,AL\n" ;
                     97: = SAWD[sus], SAWD[sus] {$R $C} "       movw    AR,AL\n" ;
                     98: 
                     99: = LAWD[iuip], SCC {$L $C}      "       cvtbl   AR,AL\n" ;
                    100: = LAWD[iuip], SCUC {$L $C}     "       movzbl  AR,AL\n" ;
                    101: = LAWD[iuip], SCS {$L $C}      "       cvtwl   AR,AL\n" ;
                    102: = LAWD[iuip], SCUS {$L $C}     "       movzwl  AR,AL\n" ;
                    103: = LAWD[iuip],  C0 {$R} "       clrl    AL\n" ;
                    104: = LAWD[iuip],  C0 {$L} "       clrl    AL\n" ;
                    105: = LAWD[iuip], CR {$L} "RL!R    movl    AR,AL\n" ;
                    106: = LAWD[iuip], CR {$R $C} "     movl    AR,AL\n" ;
                    107: = LAWD[iuip], LAWD[iuip] {$L} "RL!R    movl    AR,AL\n" ;
                    108: = LAWD[iuip], LAWD[iuip] {$R $C} "     movl    AR,AL\n" ;
                    109: 
                    110: = SFLD[], LAWD[] { $R } "      insv    AR,$HL,$SL,AL\n" :5;
                    111: = LAWD[isc], SFLD[] {$L} "     extv    $HR,$SR,AR,AL\n" :5;
                    112: = LAWD[uiusuc], SFLD[] {$L} "  extzv   $HR,$SR,AR,AL\n" :5;
                    113: 
                    114: C0[iuisuspcuc] {$1} "  clrl    A1\n" :2;
                    115: 
                    116: # why not AL ??
                    117: CAWD[cuc] {$C} "       tstb    AR\n" :2;
                    118: SAWD[sus] {$C} "       tstw    AR\n" :2;
                    119: LAWD[iuip] {$C} "      tstl    AR\n" :2;
                    120: LAWD[f] {$C}   "       tstf    AR\n" :2;
                    121: DAWD[d] {$C}           "       tstd    AR\n" :2;
                    122: CAWD[cuc] {$> $1} "RR!1        movb    AR,A1\n" :3;
                    123: CAWD[cuc] {$> $1 $C} " movb    AR,A1\n" :3;
                    124: SAWD[sus] {$> $1} "RR!1        movw    AR,A1\n" :3;
                    125: SAWD[sus] {$> $1 $C} " movw    AR,A1\n" :3;
                    126: LAWD[iuip] {$> $1} "RR!1       movl    AR,A1\n" :3;
                    127: LAWD[iuip] {$> $1 $C} "        movl    AR,A1\n" :3;
                    128: LAWD[f]  {$> $1} "     movf    AR,A1\n" :3;
                    129: LAWD[f]  {$> $1 $C} "RR!1      movf    AR,A1\n" :3;
                    130: DAWD[d]  {$> $P $1} "  movd    AR,A1\n" :3;
                    131: DAWD[d]  {$> $P $1 $C} "RR!1   movd    AR,A1\n" :3;
                    132: 
                    133: 'FLD' IAWD[isc] {$< $1} "      extv    $H.,$S.,AL,A1\n" :5;
                    134: 'FLD' IAWD[uiusuc] {$< $1} "   extzv   $H.,$S.,AL,A1\n" :5;
                    135: 
                    136: 'ARG' LAWD[iuip]  {$N} "       pushl   AL\n" :2;
                    137: 'ARG' C         {$N} " pushl   AL\n" :2;
                    138: 'ARG' SCS  {$N} "      cvtwl   AL,-(sp)\n" ;
                    139: 'ARG' SCC  {$N} "      cvtbl   AL,-(sp)\n" ;
                    140: 'ARG' SCUS  {$N} "     movzwl  AL,-(sp)\n" ;
                    141: 'ARG' SCUC  {$N} "     movzbl  AL,-(sp)\n" ;
                    142: 'ARG' LAWD[f] "        cvtfd   AL,-(sp)\n" ;
                    143: 'ARG' DAWD[d] "        movd    AL,-(sp)\n" ;
                    144: 
                    145: # comparison opcodes
                    146: #      "complex" comparisons - circumvent CONV nodes
                    147: # these phantom conversions should be removed in optim(), where allowed
                    148: #'CMP' SCCUC, Cuc[iui] {$C} "  cmpb    AL,AR\n" ;
                    149: #'CMP' SCCUC, R {$C} " cmpb    AL,AR\n" ;
                    150: 
                    151: 'CMP' CAWD[cuc], CAWD[cuc] {$C} "      cmpb    AL,AR\n" ;
                    152: #risky--used to be Cus on rhs
                    153: 'CMP' SAWD[sus], C {$C} "      cmpw    AL,AR\n" ;
                    154: 'CMP' SAWD[sus], R {$C} "      cmpw    AL,AR\n" ;
                    155: 'CMP' SAWD[sus], SAWD[sus] {$C} "      cmpw    AL,AR\n" ;
                    156: 'CMP' SFLT, SFLT {$C} "        cmpf    AL,AR\n" ;
                    157: 
                    158: #      "simple" comparisons - actually appear in tree
                    159: 'CMP' LAWD[iuip], LAWD[iuip] {$C} "    cmpl    AL,AR\n" ;
                    160: 'CMP' DAWD[d], DAWD[d] {$C} "  cmpd    AL,AR\n" ;
                    161: 
                    162: # unary minus
                    163: 'UMINUS' LAWD[iuip] {$< $1} "  mnegl   AL,A1\n" ;
                    164: 'UMINUS' DAWD[d] {$P $< $1} "  mnegd   AL,A1\n" ;
                    165: 
                    166: # compute addresses of automatics and parameters
                    167: 'UAND' A {$1} "        moval   AL,A1\n" ;
                    168: 'UAND' P {$1} "        moval   AL,A1\n" ;
                    169: 'UAND' T {$1} "        moval   AL,A1\n" ;
                    170: 
                    171: # second operand of ++ and -- is the constant to be added or subtracted
                    172: # could play some games here with condition codes, since I think that
                    173: # inc doesn't change them...
                    174: ++ CAWD[c], C1 {$1} "F cvtbl   A-L,A1\n        incb    AL\n" :2;
                    175: ++ CAWD[uc], C1 {$1} "F        movzbl  A-L,A1\n        incb    AL\n" :2;
                    176: ++ CAWD[c], C {$1} "F  cvtbl   A-L,A1\n        addb2   AR,AL\n" ;
                    177: ++ CAWD[uc], C {$1} "F movzbl  A-L,A1\n        addb2   AR,AL\n" ;
                    178: ++ SAWD[s], C1 {$1} "F cvtwl   A-L,A1\n        incw    AL\n" :2;
                    179: ++ SAWD[us], C1 {$1} "F        movzwl  A-L,A1\n        incw    AL\n" :2;
                    180: ++ SAWD[s], C {$1} "F  cvtwl   A-L,A1\n        addw2   AR,AL\n" ;
                    181: ++ SAWD[us], C {$1} "F movzwl  A-L,A1\n        addw2   AR,AL\n" ;
                    182: ++ LAWD[iuip], C1 {$1} "F      movl    A-L,A1\n        incl    AL\n" ;
                    183: ++ LAWD[iuip], C {$1} "F       movl    A-L,A1\n        addl2   AR,AL\n" ;
                    184: 
                    185: -- CAWD[c], C1 {$1} "F cvtbl   A-L,A1\n        decb    AL\n" :2;
                    186: -- CAWD[uc], C1 {$1} "F        movzbl  A-L,A1\n        decb    AL\n" :2;
                    187: -- CAWD[c], C {$1} "F  cvtbl   A-L,A1\n        subb2   AR,AL\n" ;
                    188: -- CAWD[uc], C {$1} "F movzbl  A-L,A1\n        subb2   AR,AL\n" ;
                    189: -- SAWD[s], C1 {$1} "F cvtwl   A-L,A1\n        decw    AL\n" :2;
                    190: -- SAWD[us], C1 {$1} "F        movzwl  A-L,A1\n        decw    AL\n" :2;
                    191: -- SAWD[s], C {$1} "F  cvtwl   A-L,A1\n        subw2   AR,AL\n" ;
                    192: -- SAWD[us], C {$1} "F movzwl  A-L,A1\n        subw2   AR,AL\n" ;
                    193: -- LAWD[iuip], C1 {$1} "F      movl    A-L,A1\n        decl    AL\n" :2;
                    194: -- LAWD[iuip], C {$1} "F       movl    A-L,A1\n        subl2   AR,AL\n" ;
                    195: 
                    196: # & SAWD[susp], C {$C} "       bit     AL,AR\n" ;
                    197: # * R[susp], SAWD[susp] {$< $>  $2} "RL!1RL!2\tmov\tAL,A2\nRL!1\tmul\tAR,A2\nRL=1\tmul\tAR,AL\n" ;
                    198: # % SAWD[susp], SAWD[susp] {$<  $2} "RL!2      mov\tAL,r1\nZV\tdiv\tAR,r0\n" ;
                    199: # / SAWD[susp], SAWD[susp] {$< 2 $1} "RL!2\tmov\tAL,r1\nZV\tdiv\tAR,r0\n" ;
                    200: 
                    201: += CAWD[cuc], C1 {$L $C} "     incb    AL\n" :2;
                    202: += SAWD[sus], C1 {$L $C} "     incw    AL\n" :2;
                    203: += LAWD[iuip], C1 {$L $C} "    incl    AL\n" :2;
                    204: += LAWD[iuip], LAWD[iuip] {$L $C} "    addl2   AR,AL\n" ;
                    205: 
                    206: -= CAWD[cuc], C1 {$L $C} "     decb    AL\n" :2;
                    207: -= SAWD[sus], C1 {$L $C} "     decw    AL\n" :2;
                    208: -= LAWD[iuip], C1 {$L $C} "    decl    AL\n" :2;
                    209: -= LAWD[iuip], LAWD[iuip] {$L $C} "    subl2   AR,AL\n" ;
                    210: 
                    211: |= LAWD[iuip], LAWD[iuip] {$L $C} "    bisl2   AR,AL\n" ;
                    212: 
                    213: &= LAWD[iuip], Cna {$L $C} "   bicl2   Zk,AL\n" ;
                    214: &= LAWD[iuip], LAWD[iuip] {$L 1 $C} "  mcoml   AR,A1\n bicl2   A1,AL\n" :6;
                    215: 
                    216: ^= LAWD[iuip], LAWD[iuip] {$L $C} "    xorl2   AR,AL\n" ;
                    217: 
                    218: # right operand must be CAWD due to VAX operand typing
                    219: <<= LAWD[iuip], CAWD[iuip]  "  ashl    AR,A-L,AL\n" ;
                    220: << LAWD[iuip], CAWD[iuip] {$1 $> $<}  "        ashl    AR,AL,A1\n" ;
                    221: 
                    222: >>= LAWD[i], LAWD[iuip]  {$L 1 $>} "   mnegl   AR,A1\n ashl    A1,A-L,AL\n" :7;
                    223: >> LAWD[i], LAWD[iuip]  {$1 $>} "      mnegl   AR,A1\n ashl    A1,AL,A1\n" :7;
                    224: # left operand must be IAWD due to VAX operand typing
                    225: >>= IAWD[i], C  {$L} " extv    AR,ZU,A-L,AL\n" :5;
                    226: >> IAWD[i], C  {$1 $>} "       extv    AR,ZU,AL,A1\n" :5;
                    227: 
                    228: >>= IAWD[uip],CAWD[iuip] {$L 1 $C}"\tsubl3\tA-R,$32,A1\n\textzv\tAR,A1,A-L,AL\n":9;
                    229: >> IAWD[uip], CAWD[iuip] {$1 $C} "\tsubl3\tA-R,$32,A1\n\textzv\tAR,A1,AL,A1\n":9;
                    230: >>= IAWD[uip], C  {$L} "       extzv   AR,ZU,A-L,AL\n" :5;
                    231: >> IAWD[uip], C  {$1 $>} "     extzv   AR,ZU,AL,A1\n" :5;
                    232: 
                    233: # convert characters to other types
                    234: 'CONV' [sus] CAWD[uc] {$< $1 $C} "     movzbw  AL,A1\n" ;
                    235: 'CONV' [iuip] CAWD[uc] {$< $1 $C} "    movzbl  AL,A1\n" ;
                    236: 'CONV' [sus] CAWD[c]  {$< $1 $C} "     cvtbw   AL,A1\n" ;
                    237: 'CONV' [iuip] CAWD[c]  {$< $1 $C} "    cvtbl   AL,A1\n" ;
                    238: 'CONV' [f] CAWD[uc]  {$< $1 $C} "\tmovzbl\tAL,A1\n\tcvtlf\tA1,A1\n" :6;
                    239: 'CONV' [d] CAWD[uc]  {$< $P $1 $C} "\tmovzbl\tAL,A1\n\tcvtld\tA1,A1\n" :6;
                    240: 'CONV' [f] CAWD[c]  {$< $1 $C}   "     cvtbf   AL,A1\n" ;
                    241: 'CONV' [d] CAWD[c]  {$< $P $1 $C}   "  cvtbd   AL,A1\n" ;
                    242: 
                    243: # convert short to other types
                    244: 'CONV' [cuc] SAWD[sus]  {$< $1} "RL!1  movw    AL,A1\n" ;
                    245: 'CONV' [cuc] SAWD[sus]  {$< $1 $C} "   movw    AL,A1\n" ;
                    246: 'CONV' [iuip] SAWD[s]  {$< $1 $C} "    cvtwl   AL,A1\n" ;
                    247: 'CONV' [iuip] SAWD[us]  {$< $1 $C} "   movzwl  AL,A1\n" ;
                    248: 'CONV' [f] SAWD[us]  {$< $1 $C} "\tmovzwl\tAL,A1\n\tcvtlf\tA1,A1\n" :6;
                    249: 'CONV' [d] SAWD[us]  {$< $P $1 $C} "\tmovzwl\tAL,A1\n\tcvtld\tA1,A1\n" :6;
                    250: 'CONV' [f] SAWD[s]  {$< $1 $C}  "      cvtwf   AL,A1\n" ;
                    251: 'CONV' [d] SAWD[s]  {$< $P $1 $C}  "   cvtwd   AL,A1\n" ;
                    252: 
                    253: # convert integer (long values) to other types
                    254: 'CONV' [cucsusiuip] LAWD[iuip]  {$< $1} "RL!1  movl    AL,A1\n" ;
                    255: 'CONV' [cucsusiuip] LAWD[iuip]  {$< $1 $C} "   movl    AL,A1\n" ;
                    256: #?? need conversion for unsigned to [fd].  cvtl_ won't work correctly
                    257: #use cvtl_ for unsigned for now
                    258: 'CONV' [f] LAWD[iuip]  {$< $1 $C} "    cvtlf   AL,A1\n" ;
                    259: 'CONV' [d] LAWD[iuip]  {$< $1 $P $C} " cvtld   AL,A1\n" ;
                    260: 
                    261: # convert floating to other types
                    262: 'CONV' [cuc] LAWD[f]  {$< $1 $C} "     cvtfb   AL,A1\n" ;
                    263: 'CONV' [sus] LAWD[f]  {$< $1 $C} "     cvtfw   AL,A1\n" ;
                    264: 'CONV' [iuip] LAWD[f]  {$< $1 $C} "    cvtfl   AL,A1\n" ;
                    265: 'CONV' [d] LAWD[f]  {$< $1 $P $C} "    cvtfd   AL,A1\n" ;
                    266: 
                    267: # convert double to other types
                    268: 'CONV' [cuc] DAWD[d]  {$< $1 $C} "     cvtdb   AL,A1\n" ;
                    269: 'CONV' [sus] DAWD[d]  {$< $1 $C} "     cvtdw   AL,A1\n" ;
                    270: 'CONV' [iuip] DAWD[d]  {$< $1 $C} "    cvtdl   AL,A1\n" ;
                    271: 'CONV' [f] DAWD[d]  {$< $1 $C} "       cvtdf   AL,A1\n" ;
                    272: 
                    273: 
                    274: # structure manipulation
                    275: #      movc3 blows regs r0 - r5, so ask for all temps
                    276: 'STARG' AWD {$A $< $> $N} "    subl2   ZT,sp\nZS" ;
                    277: 'STASG' AWD, AWD {$A $> $L} "ZS" ;
                    278: 
                    279: 'INIT' [cuc] C  {$N} " .byte   CL\n" ;
                    280: 'INIT' [sus] C  {$N} " .word   CL\n" ;
                    281: 'INIT' [iuip] C  {$N} "        .long   CL\n" ;
                    282: 
                    283: = DAWD[d], DAWD[d] {$L} "RL!R  movd    AR,AL\n" ;
                    284: = DAWD[d], DAWD[d] {$R $C} "   movd    AR,AL\n" ;
                    285: = LAWD[f], LAWD[f] {$R} "      movl    AR,AL\n" ;
                    286: = LAWD[f], LAWD[f] {$C}        "       movf    AR,AL\n" ;
                    287: = LAWD[f], CDAWD {$R $C} "     cvtdf   AR,AL\n" ;
                    288: 
                    289: # integer opcodes
                    290: #      how about two-address opcodes, such as
                    291: #      + LAWD[ip], R[ip] {$R} "        addl2   AL,AR\n" ;
                    292: # is someone smart enough to commute this if necessary??
                    293: + LAWD[iuip], LAWD[iuip] {$1 $< $>} "  addl3   AL,AR,A1\n" :4;
                    294: - LAWD[iuip], LAWD[iuip] {$1 $< $>} "  subl3   AR,AL,A1\n" :4;
                    295: * LAWD[iuip], LAWD[iuip] {$< $> $1} "  mull3   AR,AL,A1\n" :4;
                    296: / LAWD[ip], LAWD[ip] {$< $> $1} "      divl3   AR,AL,A1\n" :4;
                    297: / LAWD[iui], LAWD[iui] {$A $1 $<} "\tpushl\tAR\n\tpushl\tAL\n\tcalls\t$2,udiv\n" :11;
                    298: ~ LAWD[iuip] {$1 $< $C} "      mcoml   AL,A1\n" ;
                    299: | LAWD[iuip], LAWD[iuip] {$1 $< $> $C} "       bisl3   AR,AL,A1\n" :4;
                    300: & LAWD[iuip], LAWD[iuip] {$C} "        bitl    AR,AL\n" ;
                    301: # & LAWD[iuip], Cna {$C} "     bitl    AR,AL\n" ;
                    302: & LAWD[iuip], Cna {$1 $< $C} " bicl3   Zk,AL,A1\n" :4;
                    303: & LAWD[iuip], LAWD[iuip] {$1 $> $C} "\tmcoml   AR,A1\n bicl3   A1,AL,A1\n" :7;
                    304: % LAWD[ip], LAWD[ip] {$C $1 1} "\tdivl3\tA-R,A-L,A1\n\tmull2\tAR,A1\n\tsubl3\tA1,AL,A1\n" :11;
                    305: % LAWD[iui], LAWD[iui] {$A $1 $< $>} "\tpushl\tAR\n\tpushl\tAL\n\tcalls\t$2,urem\n" :11;
                    306: # following 3 address ops not included to reduce number of templates
                    307: # = LAWD[iuip], ( LAWD[iuip] + LAWD[iuip] ) "  addl3   A(RL),A(RR),AL\n" :4;
                    308: # = LAWD[iuip], ( LAWD[iuip] - LAWD[iuip] ) "  subl3   A(RR),A(RL),AL\n" :4;
                    309: # = LAWD[iuip], ( LAWD[iuip] | LAWD[iuip] ) "  bicl3   A(RL),A(RR),AL\n" :4;
                    310: 
                    311: 
                    312: # double opcodes
                    313: + DAWD[d], DAWD[d] {$< $> $P $1 $C} "  addd3   AR,AL,A1\n" :4;
                    314: - DAWD[d], DAWD[d] {$< $> $P $1 $C} "  subd3   AR,AL,A1\n" :4;
                    315: * DAWD[d], DAWD[d] {$< $> $P $1 $C} "  muld3   AR,AL,A1\n" :4;
                    316: / DAWD[d], DAWD[d] {$< $> $P $1 $C} "  divd3   AR,AL,A1\n" :4;
                    317: 
                    318: # double assignment opcodes
                    319: += DAWD[d], DAWD[d] {$L $C} "  addd2   AR,AL\n" ;
                    320: -= DAWD[d], DAWD[d] {$L $C} "  subd2   AR,AL\n" ;
                    321: *= DAWD[d], DAWD[d] {$L $C} "  muld2   AR,AL\n" ;
                    322: /= DAWD[d], DAWD[d] {$L $C} "  divd2   AR,AL\n" ;
                    323: 
                    324: # float opcodes
                    325: + LAWD[f], LAWD[f] {$< $> $1 $C} "     addf3   AR,AL,A1\n":3;
                    326: - LAWD[f], LAWD[f] {$< $> $1 $C} "     subf3   AR,AL,A1\n":3;
                    327: * LAWD[f], LAWD[f] {$< $> $1 $C} "     mulf3   AR,AL,A1\n":3;
                    328: / LAWD[f], LAWD[f] {$< $> $1 $C} "     divf3   AR,AL,A1\n":3;
                    329: 
                    330: # float assignment opcodes
                    331: += LAWD[f], LAWD[f] {$L $C} "  addf2   AR,AL\n";
                    332: -= LAWD[f], LAWD[f] {$L $C} "  subf2   AR,AL\n";
                    333: *= LAWD[f], LAWD[f] {$L $C} "  mulf2   AR,AL\n";
                    334: /= LAWD[f], LAWD[f] {$L $C} "  divf2   AR,AL\n";
                    335: 
                    336: # for the use of fortran only 
                    337: 
                    338: # 'GOTO' C  {$N} "     jbr     CL\n" ;
                    339: # 'GOTO' N[iui]  {$N} "        jmp     *UL\n" ;
                    340: # 'GOTO' N[suscucp]  {$N} "    jmp     *AL\n" ;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.