home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / pcc / table.c < prev   
Encoding:
C/C++ Source or Header  |  1979-01-10  |  15.6 KB  |  855 lines

  1. # include "mfile2"
  2.  
  3. # define AWD SNAME|SOREG|SCON|STARNM|STARREG|SAREG
  4. # define LWD SNAME|SOREG|SCON|SAREG
  5.  
  6. struct optab  table[] = {
  7.  
  8. ASSIGN,    INAREG|FOREFF|FORCC,
  9.     AWD,    TPOINT|TINT|TUNSIGNED|TCHAR|TUCHAR,
  10.     SZERO,    TANY,
  11.         0,    RLEFT|RRIGHT|RESCC,
  12.         "    clrZB    AL\n",
  13.  
  14. ASSIGN,    INAREG|FOREFF|FORCC,
  15.     AWD,    TINT|TUNSIGNED,
  16.     AWD,    TCHAR,
  17.         NAREG|NASR,    RLEFT|RESC1|RESCC,
  18.         "    movb    AR,A1\n    mov    A1,AL\n",
  19.  
  20. ASSIGN,    INAREG|FOREFF|FORCC,
  21.     AWD,    TINT|TUNSIGNED,
  22.     AWD,    TUCHAR,
  23.         0,    RLEFT|RESCC,
  24.         "    movb    AR,AL\n    bic    $!377,AL\n",
  25.  
  26. ASSIGN,    INAREG|FOREFF|FORCC,
  27.     AWD,    TPOINT|TINT|TUNSIGNED|TCHAR|TUCHAR,
  28.     AWD,    TPOINT|TINT|TUNSIGNED|TCHAR|TUCHAR,
  29.         0,    RLEFT|RRIGHT|RESCC,
  30.         "    movZB    AR,AL\n",
  31.  
  32. ASSIGN,    INAREG|FOREFF,
  33.     LWD,    TLONG|TULONG,
  34.     SZERO,    TANY,
  35.         0,    RLEFT|RRIGHT,
  36.         "    clr    AL\n    clr    UL\n",
  37.  
  38. ASSIGN,    INAREG|FOREFF,
  39.     LWD,    TLONG|TULONG,
  40.     LWD,    TLONG|TULONG,
  41.         0,    RLEFT|RRIGHT,
  42.         "    mov    AR,AL\n    mov    UR,UL\n",
  43.  
  44. ASSIGN,    FOREFF|INAREG,
  45.     STARNM,        TLONG|TULONG,
  46.     LWD,    TLONG|TULONG,
  47.         NAREG|NASL,    RRIGHT,
  48.         "    mov    ZU,A1\n    mov    AR,(A1)+\n    mov    UR,(A1)\n",
  49.  
  50. ASSIGN,    FOREFF,
  51.     STARNM,    TLONG|TULONG,
  52.     AWD,    TUNSIGNED|TPOINT,
  53.         NAREG|NASL,    RRIGHT,
  54.         "    mov    ZU,A1\n    clr    (A1)+\n    mov    AR,(A1)\n",
  55.  
  56. ASSIGN,    FOREFF,
  57.     STARNM,    TLONG|TULONG,
  58.     AWD,    TINT,
  59.         NAREG|NASL,    RRIGHT,
  60.         "    mov    ZU,A1\n    mov    AR,2(A1)\n    sxt    (A1)\n",
  61.  
  62.     /* PANIC! */
  63. ASSIGN,    FOREFF|INAREG,
  64.     STARNM,    TLONG|TULONG,
  65.     AWD,    TUNSIGNED|TPOINT,
  66.         NAREG|NASL|NASR,    RESC1,
  67.         "\tmov\tAR,-(sp)\n\tmov\tZU,A1\n\tclr\t(A1)+\n\tmov\t(sp)+,(A1)\
  68.         \nF\tmov\t(A1),U1\nF\tclr\tA1\n",
  69.  
  70. ASSIGN,    FOREFF|INAREG,
  71.     STARNM,    TLONG|TULONG,
  72.     AWD,    TINT,
  73.         NAREG|NASL|NASR,    RESC1,
  74.         "\tmov\tAR,-(sp)\n\tmov\tZU,A1\n\tmov\t(sp)+,2(A1)\nF\tmov\t2(A1),U1\
  75.         \n\tsxt\t(A1)\nF\tsxt\tA1\n",
  76.  
  77. ASSIGN,    FOREFF|INAREG,
  78.     STARNM,    TLONG|TULONG,
  79.     SAREG,    TLONG|TULONG,
  80.         0,    RRIGHT,
  81.         "    mov    AR,AL\n    mov    ZU,AR\n    mov    UR,2(AR)\nF    mov    (AR),AR\n",
  82.  
  83. ASSIGN,    INAREG|FOREFF,
  84.     LWD,    TLONG|TULONG,
  85.     AWD,    TCHAR,
  86.         NAREG,    RESC1,
  87.         "    movb    AR,U1\n    mov    U1,UL\n    sxt    AL\nF    sxt    A1\n",
  88.  
  89. ASSIGN,    INAREG|FOREFF,
  90.     LWD,    TLONG|TULONG,
  91.     AWD,    TUCHAR,
  92.         0,    RLEFT,
  93.         "    movb    AR,UL\n    bic    $!377,UL\n    clr    AL\n",
  94.  
  95. ASSIGN,    INAREG|FOREFF,
  96.     LWD,    TLONG|TULONG,
  97.     AWD,    TINT,
  98.         0,    RLEFT,
  99.         "    mov    AR,UL\n    sxt    AL\n",
  100.  
  101. ASSIGN,    INAREG|FOREFF,
  102.     LWD,    TLONG|TULONG,
  103.     AWD,    TUNSIGNED|TPOINT,
  104.         0,    RLEFT,
  105.         "    mov    AR,UL\n    clr    AL\n",
  106.  
  107. ASSIGN,    INBREG|INTBREG|FOREFF,
  108.     AWD,    TDOUBLE,
  109.     SBREG,    TDOUBLE,
  110.         0,    RRIGHT,
  111.         "    movf    AR,AL\n",
  112.  
  113. ASSIGN,    INBREG|INTBREG|FOREFF,
  114.     AWD,    TFLOAT,
  115.     SBREG,    TDOUBLE,
  116.         0,    RRIGHT,
  117.         "    movfo    AR,AL\n",
  118.  
  119. ASSIGN, INAREG|FOREFF,
  120.     SFLD,    TANY,
  121.     SZERO,    TANY,
  122.         0,    RRIGHT,
  123.         "    bic    $M.,AL\n",
  124.  
  125. ASSIGN, INTAREG|INAREG|FOREFF,
  126.     SFLD,    TANY,
  127.     STAREG,    TANY,
  128.         0,    RRIGHT,
  129.         "F\tmov\tAR,-(sp)\n\tash\t$H.,AR\n\tbic\t$!M.,AR\n\tbic\t$M.,AL\n\tbis\tAR,AL\nF\tmov\t(sp)+,AR\n",
  130.  
  131. ASSIGN, INAREG|FOREFF,
  132.     SFLD,    TANY,
  133.     AWD,    TANY,
  134.         NAREG,    RRIGHT,
  135.         "\tmov\tAR,A1\n\tash\t$H.,A1\n\tbic\t$!M.,A1\n\tbic\t$M.,AL\n\tbis\tA1,AL\n",
  136.  
  137. ASSIGN,    FOREFF,
  138.     AWD,    TFLOAT,
  139.     AWD,    TFLOAT,
  140.         NBREG,    RESC1,
  141.         "    movof    AR,A1\n    movfo    A1,AL\n",
  142.  
  143. /* put this here so UNARY MUL nodes match OPLTYPE when appropriate */
  144. UNARY MUL,    INTAREG|INAREG,
  145.     SANY,    TANY,
  146.     STARNM,    TLONG|TULONG,
  147.         NAREG|NASR,    RESC1,
  148.         "    mov    AL,U1\n    mov    (U1)+,A1\n    mov    (U1),U1\n",
  149.  
  150. OPLTYPE,    FOREFF,
  151.     SANY,    TANY,
  152.     LWD,    TANY,
  153.         0,    RRIGHT,
  154.         "",   /* this entry throws away computations which don't do anything */
  155. OPLTYPE,    INTAREG|INAREG,
  156.     SANY,    TANY,
  157.     SZERO,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  158.         NAREG|NASR,    RESC1,
  159.         "    clr    A1\n",
  160.  
  161. OPLTYPE,    INTAREG|INAREG,
  162.     SANY,    TANY,
  163.     SZERO,    TLONG|TULONG,
  164.         NAREG|NASR,    RESC1,
  165.         "    clr    A1\n    clr    U1\n",
  166.  
  167. OPLTYPE,    INTAREG|INAREG,
  168.     SANY,    TANY,
  169.     SANY,    TINT|TUNSIGNED|TPOINT|TCHAR,
  170.         NAREG|NASR,    RESC1,
  171.         "    movZB    AR,A1\n",
  172.  
  173. OPLTYPE,    INTEMP,
  174.     SANY,    TANY,
  175.     SANY,    TINT|TUNSIGNED|TPOINT,
  176.         NTEMP,    RESC1,
  177.         "    mov    AR,A1\n",
  178.  
  179. OPLTYPE,    FORCC,
  180.     SANY,    TANY,
  181.     SANY,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  182.         0,    RESCC,
  183.         "    tstZB    AR\n",
  184.  
  185.  
  186. OPLTYPE,    FORARG,
  187.     SANY,    TANY,
  188.     SANY,    TINT|TUNSIGNED|TPOINT,
  189.         0,    RNULL,
  190.         "    mov    AR,Z-\n",
  191.  
  192. OPLTYPE,    INTAREG|INAREG,
  193.     SANY,    TANY,
  194.     AWD,    TUCHAR,
  195.         NAREG|NASR,    RESC1,
  196.         "    movb    AR,A1\n    bic    $!377,A1\n",
  197.  
  198. OPLTYPE,    INTAREG|INAREG,
  199.     SANY,    TANY,
  200.     LWD,    TLONG|TULONG,
  201.         NAREG,    RESC1,
  202.         "    mov    UR,U1\n    mov    AR,A1\n",
  203.  
  204. OPLTYPE,    INTAREG|INAREG,  /* for use when there are no free regs */
  205.     SANY,    TANY,
  206.     LWD,    TLONG|TULONG,
  207.         NAREG|NASR,    RESC1,
  208.         "    mov    AR,-(sp)\n    mov    UR,U1\n    mov    (sp)+,A1\n",
  209.  
  210. OPLTYPE,    INTEMP,
  211.     SANY,    TANY,
  212.     LWD,    TLONG|TULONG,
  213.         2*NTEMP,    RESC1,
  214.         "    mov    AR,A1\n    mov    UR,U1\n",
  215.  
  216. OPLTYPE,    FORCC,
  217.     SANY,    TANY,
  218.     LWD,    TLONG|TULONG,
  219.         0,    RESCC,
  220.         "ZA",
  221.  
  222. OPLTYPE, FORARG,
  223.     SANY,    TANY,
  224.     LWD,    TLONG|TULONG,
  225.         0,    RNULL,
  226.         "    mov    UR,Z-\n    mov    AR,Z-\n",
  227.  
  228. UNARY MUL,    FORARG,
  229.     STARNM,    TANY,
  230.     SANY,    TLONG|TULONG,
  231.         NAREG|NASR,    RNULL,
  232.         "    mov    AL,A1\n    mov    2(A1),Z-\n    mov    (A1),Z-\n",
  233.  
  234. OPLTYPE, FORARG,
  235.     SANY,    TANY,
  236.     SBREG,    TDOUBLE,
  237.         0,    RNULL,
  238.         "    movf    AR,Z4\n",
  239.  
  240. OPLTYPE,    INTBREG|INBREG,
  241.     SANY,    TANY,
  242.     AWD,    TDOUBLE,
  243.         NBREG,    RESC1,
  244.         "    movf    AR,A1\n",
  245.  
  246. OPLTYPE,    INTEMP,
  247.     SANY,    TANY,
  248.     SBREG,    TDOUBLE,
  249.         4*NTEMP,    RESC1,
  250.         "    movf    AR,A1\n",
  251.  
  252. OPLTYPE,    FORCC,
  253.     SANY,    TANY,
  254.     AWD,    TDOUBLE,
  255.         0,    RESCC,
  256.         "    tstf    AR\n    cfcc\n",
  257.  
  258. OPLTYPE,    INTBREG|INBREG,
  259.     SANY,    TANY,
  260.     AWD,    TFLOAT,
  261.         NBREG,    RESC1,
  262.         "    movof    AR,A1\n",
  263.  
  264. OPLTYPE,    FORCC,
  265.     SANY,    TANY,
  266.     AWD,    TFLOAT,
  267.         NBREG,    RESCC,
  268.         "    movof    AR,A1\n    cfcc\n",
  269.  
  270.  
  271. OPLOG,    FORCC,
  272.     AWD,    TPOINT|TINT|TUNSIGNED,
  273.     AWD,    TPOINT|TINT|TUNSIGNED,
  274.         0,    RESCC,
  275.         "    cmp    AL,AR\nZI",
  276.  
  277. OPLOG,    FORCC,
  278.     AWD,    TCHAR|TUCHAR,
  279.     AWD,    TCHAR|TUCHAR,
  280.         0,    RESCC,
  281.         "    cmpb    AL,AR\nZI",
  282.  
  283. OPLOG,    FORCC,
  284.     AWD,    TCHAR|TUCHAR,
  285.     SCCON,    TINT,                /* look for constants between -128 and 127 */
  286.         0,    RESCC,
  287.         "    cmpb    AL,AR\nZI",
  288.  
  289. OPLOG,    FORCC,
  290.     LWD,    TLONG|TULONG,
  291.     LWD,    TLONG|TULONG,
  292.         0,    RESCC,
  293.         "ZCZI",
  294.  
  295. OPLOG,    FORCC,
  296.     SBREG,    TDOUBLE,
  297.     AWD,    TFLOAT,
  298.         NBREG,    RESCC,
  299.         "    movof    AR,A1\n    cmpf    A1,AL\n    cfcc\nZF",
  300.  
  301. OPLOG,    FORCC,
  302.     SBREG,    TDOUBLE,
  303.     SBREG|AWD,    TDOUBLE,
  304.         0,    RESCC,
  305.         "    cmpf    AR,AL\n    cfcc\nZF",
  306.  
  307. CCODES,    INTAREG|INAREG,
  308.     SANY,    TANY,
  309.     SANY,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  310.         NAREG,    RESC1,
  311.         "    mov    $1,A1\nZN",
  312.  
  313. CCODES,    INTAREG|INAREG,
  314.     SANY,    TANY,
  315.     SANY,    TLONG|TULONG,
  316.         NAREG,    RESC1,
  317.         "    clr    A1\n    mov    $1,U1\nZN",
  318.  
  319. UNARY MINUS,    INTAREG|INAREG,
  320.     STAREG,    TINT|TUNSIGNED,
  321.     SANY,    TANY,
  322.         0,    RLEFT,
  323.         "    neg    AL\n",
  324.  
  325. UNARY MINUS,    INTAREG|INAREG,
  326.     STAREG,    TLONG|TULONG,
  327.     SANY,    TANY,
  328.         0,    RLEFT,
  329.         "    neg    AL\n    neg    UL\n    sbc    AL\n",
  330.  
  331. UNARY MINUS,    INTBREG|INBREG,
  332.     STBREG,    TDOUBLE,
  333.     SANY,    TANY,
  334.         0,    RLEFT,
  335.         "    negf    AL\n",
  336.  
  337. COMPL,    INTAREG|INAREG,
  338.     STAREG,    TINT|TUNSIGNED,
  339.     SANY,    TANY,
  340.         0,    RLEFT,
  341.         "    com    AL\n",
  342.  
  343. INCR,    INTAREG|INAREG|FOREFF,
  344.     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  345.     SONE,    TANY,
  346.         NAREG,    RESC1,
  347.         "F    movZB    AL,A1\n    incZB    AL\n",
  348.  
  349. DECR,    INTAREG|INAREG|FOREFF,
  350.     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  351.     SONE,    TANY,
  352.         NAREG,    RESC1,
  353.         "F    movZB    AL,A1\n    decZB    AL\n",
  354.  
  355. INCR,    INTAREG|INAREG|FOREFF,
  356.     AWD,    TINT|TUNSIGNED|TPOINT,
  357.     SCON,    TANY,
  358.         NAREG,    RESC1,
  359.         "F    mov    AL,A1\n    add    AR,AL\n",
  360.  
  361. DECR,    INTAREG|INAREG|FOREFF,
  362.     AWD,    TINT|TUNSIGNED|TPOINT,
  363.     SCON,    TANY,
  364.         NAREG,    RESC1,
  365.         "F    mov    AL,A1\n    sub    AR,AL\n",
  366.  
  367. INCR,    INTAREG|INAREG|FOREFF,
  368.     LWD,    TLONG|TULONG,
  369.     SCON,    TANY,
  370.         NAREG,    RESC1,
  371.         "F    mov    AL,A1\nF    mov    UL,U1\n    add    AR,AL\n    add    UR,UL\n    adc    AL\n",
  372.  
  373. DECR,    INTAREG|INAREG|FOREFF,
  374.     LWD,    TLONG|TULONG,
  375.     SCON,    TANY,
  376.         NAREG,    RESC1,
  377.         "F    mov    AL,A1\nF    mov    UL,U1\n    sub    AR,AL\n    sub    UR,UL\n    sbc    AL\n",
  378.  
  379. COMPL,    INTAREG|INAREG,
  380.     STAREG,    TLONG|TULONG,
  381.     SANY,    TANY,
  382.         0,    RLEFT,
  383.         "    com    AL\n    com    UL\n",
  384.  
  385. AND,    FORCC,
  386.     AWD,    TINT|TUNSIGNED|TPOINT,
  387.     SCON,    TANY,
  388.         0,    RESCC,
  389.         "    bit    AL,$Z~\n",
  390.  
  391. ASG MUL,    INAREG,
  392.     STAREG,    TINT|TUNSIGNED|TPOINT,
  393.     AWD,    TINT|TUNSIGNED|TPOINT,
  394.         NAREG,    RLEFT,
  395.         "    mul    AR,AL\n",
  396.  
  397. ASG DIV,    INAREG,
  398.     STAREG,    TINT|TUNSIGNED|TPOINT,
  399.     AWD,    TINT|TUNSIGNED|TPOINT,
  400.         NAREG,    RESC1,
  401.         "ZV    div    AR,r0\n",  /* since lhs must be in r1 */
  402.  
  403. ASG MOD,    INAREG,
  404.     STAREG,    TINT|TUNSIGNED|TPOINT,
  405.     AWD,    TINT|TUNSIGNED|TPOINT,
  406.         NAREG,    RLEFT,
  407.         "ZV    div    AR,r0\n",  /* since lhs must be in r1 */
  408.  
  409. ASG PLUS,    INAREG|FORCC,
  410.     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  411.     SONE,    TINT,
  412.         0,    RLEFT|RESCC,
  413.         "    incZB    AL\n",
  414.  
  415. ASG PLUS,    INAREG|FORCC,
  416.     AWD,    TINT|TUNSIGNED|TPOINT,
  417.     AWD,    TINT|TUNSIGNED|TPOINT,
  418.         0,    RLEFT|RESCC,
  419.         "    add    AR,AL\n",
  420.  
  421. ASG MINUS,    INAREG|FORCC,
  422.     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  423.     SONE,    TINT,
  424.         0,    RLEFT|RESCC,
  425.         "    decZB    AL\n",
  426.  
  427. ASG MINUS,    INAREG|FORCC,
  428.     AWD,    TINT|TUNSIGNED|TPOINT,
  429.     AWD,    TINT|TUNSIGNED|TPOINT,
  430.         0,    RLEFT|RESCC,
  431.         "    sub    AR,AL\n",
  432.  
  433. ASG OR,     INAREG|FORCC,
  434.     AWD,    TINT|TUNSIGNED|TPOINT,
  435.     AWD,    TINT|TUNSIGNED|TPOINT,
  436.         0,    RLEFT|RESCC,
  437.         "    bis    AR,AL\n",
  438.  
  439. /* AND transformed to "pdp11 bic" in first pass. */
  440. ASG AND,    INAREG|FORCC,
  441.     AWD,    TINT|TUNSIGNED|TPOINT,
  442.     AWD,    TINT|TUNSIGNED|TPOINT,
  443.         0,    RLEFT|RESCC,
  444.         "    bic    AR,AL\n",
  445.  
  446. ASG ER,     INAREG|FORCC,
  447.     AWD,    TINT|TUNSIGNED|TPOINT,
  448.     SAREG,    TINT|TUNSIGNED|TPOINT,
  449.         0,    RLEFT|RESCC,
  450.         "    xor    AR,AL\n",
  451.  
  452. ASG OPSHFT,     INAREG,
  453.     SAREG,    TINT|TUNSIGNED|TPOINT,
  454.     SONE,    TINT,
  455.         0,    RLEFT,
  456.         "    OI    AL\nZH",
  457.  
  458. ASG LS,     INAREG,
  459.     SAREG,    TINT|TUNSIGNED|TPOINT,
  460.     AWD,    TINT|TUNSIGNED|TPOINT,
  461.         0,    RLEFT,
  462.         "    ash    AR,AL\n",
  463.  
  464. ASG RS,     INAREG,
  465.     SAREG,    TINT|TUNSIGNED|TPOINT,
  466.     SCON,    TANY,
  467.         0,    RLEFT,
  468.         "    ash    $ZM,AL\nZH",
  469.  
  470. ASG RS,     INAREG,
  471.     SAREG,    TINT|TUNSIGNED|TPOINT,
  472.     STAREG,    TINT|TUNSIGNED|TPOINT,
  473.         0,    RLEFT,
  474.         "    neg    AR\n    ash    AR,AL\nZH",
  475.  
  476. ASG RS,     INAREG,
  477.     SAREG,    TINT|TUNSIGNED|TPOINT,
  478.     AWD,    TINT|TUNSIGNED|TPOINT,
  479.         NAREG|NASR,    RLEFT,
  480.         "    mov    AR,A1\n    neg    A1\n    ash    A1,AL\nZH",
  481.  
  482. ASG RS,     INAREG,
  483.     SAREG,    TINT,
  484.     AWD,    TINT,
  485.         0,    RLEFT,
  486.         "    mov    AR,-(sp)\n    neg    (sp)\n    ash    (sp)+,AL\nZH",
  487.  
  488. ASG RS,     INAREG,
  489.     SAREG,    TINT|TUNSIGNED|TPOINT,
  490.     AWD,    TINT|TUNSIGNED|TPOINT,
  491.         NTEMP,    RLEFT,
  492.         "    mov    AR,A1\n    neg    A1\n    ash    A1,AL\nZH",
  493.  
  494. ASG OR,     INAREG|FORCC,
  495.     AWD,    TCHAR|TUCHAR,
  496.     AWD,    TCHAR|TUCHAR,
  497.         0,    RLEFT|RESCC,
  498.         "    bisb    AR,AL\n",
  499.  
  500. /* AND transformed to "pdp11 bic" in first pass. */
  501. ASG AND,    INAREG|FORCC,
  502.     AWD,    TCHAR|TUCHAR,
  503.     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  504.         0,    RLEFT|RESCC,
  505.         "    bicb    AR,AL\n",
  506.  
  507. ASG PLUS,    INAREG,
  508.     LWD,    TLONG|TULONG,
  509.     SICON,    TINT|TLONG|TULONG,
  510.         0,    RLEFT,
  511.         "    add    UR,UL\n    adc    AL\n",
  512.  
  513. ASG PLUS,    INAREG,
  514.     STARNM,    TLONG|TULONG,
  515.     LWD,    TLONG|TULONG,
  516.         NAREG,    RLEFT,
  517.         "    mov    ZU,A1\n    add    AR,(A1)+\n    add    UR,(A1)\n    adc    -(A1)\n",
  518.  
  519. ASG PLUS,    INAREG,
  520.     LWD,    TLONG|TULONG,
  521.     LWD,    TLONG|TULONG,
  522.         0,    RLEFT,
  523.         "    add    AR,AL\n    add    UR,UL\n    adc    AL\n",
  524.  
  525. ASG PLUS,    INAREG,
  526.     AWD,    TPOINT,
  527.     LWD,    TLONG|TULONG,
  528.         0,    RLEFT,
  529.         "    add    UR,AL\n",
  530.  
  531. ASG MINUS,    INAREG,
  532.     LWD,    TLONG|TULONG,
  533.     SICON,    TINT|TLONG|TULONG,
  534.         0,    RLEFT,
  535.         "    sub    UR,UL\n    sbc    AL\n",
  536.  
  537. ASG MINUS,    INAREG,
  538.     STARNM,    TLONG|TULONG,
  539.     LWD,    TLONG|TULONG,
  540.         NAREG,    RLEFT,
  541.         "    mov    ZU,A1\n    sub    AR,(A1)+\n    sub    UR,(A1)\n    sbc    -(A1)\n",
  542.  
  543. ASG MINUS,    INAREG,
  544.     LWD,    TLONG|TULONG,
  545.     LWD,    TLONG|TULONG,
  546.         0,    RLEFT,
  547.         "    sub    AR,AL\n    sub    UR,UL\n    sbc    AL\n",
  548.  
  549. ASG MINUS,    INAREG,
  550.     AWD,    TPOINT,
  551.     LWD,    TLONG|TULONG,
  552.         0,    RLEFT,
  553.         "    sub    UR,AL\n",
  554.  
  555. ASG OR,     INAREG,
  556.     LWD,    TLONG|TULONG,
  557.     LWD,    TLONG|TULONG,
  558.         0,    RLEFT,
  559.         "    bis    AR,AL\n    bis    UR,UL\n",
  560.  
  561. /* AND transformed to "pdp11 bic" in first pass. */
  562. ASG AND,    INAREG,
  563.     LWD,    TLONG|TULONG,
  564.     LWD,    TLONG|TULONG,
  565.         0,    RLEFT,
  566.         "    bic    AR,AL\n    bic    UR,UL\n",
  567.  
  568. ASG ER,     INAREG,
  569.     LWD,    TLONG|TULONG,
  570.     SAREG,    TLONG|TULONG,
  571.         0,    RLEFT,
  572.         "    xor    AR,AL\n    xor    UR,UL\n",
  573.  
  574.     /* table entries for ^ which correspond to the usual way of doing busingess
  575.         (rhs in a temp register */
  576.  
  577. ASG ER,    INAREG|INTAREG,
  578.     STAREG,    TLONG|TULONG,
  579.     LWD,    TLONG|TULONG,
  580.         0,    RLEFT,
  581.         "\tmov\tAL,-(sp)\n\tmov\tUR,AL\n\txor\tAL,UL\n\tmov\tAR,AL\n\txor\tAL,(sp)\n\tmov\t(sp)+,AL\n",
  582.  
  583. ASG ER,    INAREG|INTAREG,
  584.     STAREG,    TINT|TUNSIGNED|TPOINT,
  585.     AWD,    TINT|TUNSIGNED|TPOINT,
  586.         0,    RLEFT,
  587.         "\tmov\tAL,-(sp)\n\tmov\tAR,AL\n\txor\tAL,(sp)\n\tmov\t(sp)+,AL\n",
  588.  
  589. ASG LS,     INAREG,
  590.     SAREG,    TLONG|TULONG,
  591.     AWD,    TINT|TUNSIGNED|TPOINT,
  592.         0,    RLEFT,
  593.         "    ashc    AR,AL\n",
  594.  
  595. ASG RS,     INAREG,
  596.     SAREG,    TLONG|TULONG,
  597.     SCON,    TANY,
  598.         0,    RLEFT,
  599.         "    ashc    $ZM,AL\nZH",
  600.  
  601. ASG RS,     INAREG,
  602.     SAREG,    TLONG|TULONG,
  603.     STAREG,    TINT|TUNSIGNED|TPOINT,
  604.         0,    RLEFT,
  605.         "    neg    AR\n    ashc    AR,AL\nZH",
  606.  
  607. ASG RS,     INAREG,
  608.     SAREG,    TLONG|TULONG,
  609.     AWD,    TINT|TUNSIGNED|TPOINT,
  610.         NAREG|NASR,    RLEFT,
  611.         "    mov    AR,A1\n    neg    A1\n    ashc    A1,AL\nZH",
  612.  
  613. ASG RS,     INAREG,
  614.     SAREG,    TLONG|TULONG,
  615.     AWD,    TINT|TUNSIGNED|TPOINT,
  616.         NTEMP,    RLEFT,
  617.         "    mov    AR,A1\n    neg    A1\n    ashc    A1,AL\nZH",
  618.  
  619. ASG OPFLOAT,    INBREG|INTBREG,
  620.     STBREG,    TDOUBLE,
  621.     SBREG|AWD,    TDOUBLE,
  622.         0,    RLEFT|RESCC,
  623.         "    OF    AR,AL\n",
  624.  
  625. ASG OPFLOAT,    INBREG|INTBREG,
  626.     STBREG,    TDOUBLE,
  627.     AWD,    TFLOAT,
  628.         NBREG|NBSR,    RLEFT|RESCC,
  629.         "    movof    AR,A1\n    OF    A1,AL\n",
  630.  
  631. ASG OPFLOAT,    FORCC,
  632.     STBREG,    TDOUBLE,
  633.     SBREG|AWD,    TDOUBLE,
  634.         0,    RESCC,
  635.         "    OF    AR,AL\n    cfcc\n",
  636.  
  637. ASG OPFLOAT,    FORCC,
  638.     STBREG,    TDOUBLE,
  639.     AWD,    TFLOAT,
  640.         NBREG|NBSR,    RESCC,
  641.         "    movof    AR,A1\n    OF    A1,AL\n    cfcc\n",
  642.  
  643. UNARY CALL,    INTAREG,
  644.     SAREG|SNAME|SOREG|SCON,    TANY,
  645.     SANY,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR|TLONG|TULONG,
  646.         NAREG|NASL,    RESC1, /* should be register 0 */
  647.         "    jsr    pc,*AL\n",
  648.  
  649. UNARY CALL,    INTBREG,
  650.     SAREG|SNAME|SOREG|SCON,    TANY,
  651.     SANY,    TDOUBLE|TFLOAT,
  652.         NBREG,    RESC1, /* should be register FR0 */
  653.         "    jsr    pc,*AL\n",
  654.  
  655. SCONV,    INTAREG,
  656.     STAREG,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  657.     SANY,    TUCHAR,
  658.         0,    RLEFT,
  659.         "    bic    $!377,AL\n",
  660.  
  661. SCONV,    INTAREG,
  662.     AWD,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  663.     SANY,    TCHAR|TINT,
  664.         NAREG|NASL,    RESC1,
  665.         "    movZB    AL,A1\n",
  666.  
  667. SCONV,    INAREG|INTAREG,
  668.     LWD,    TLONG|TULONG,
  669.     SANY,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  670.         0,    RLEFT,
  671.         "ZT",
  672.  
  673. SCONV,    INTAREG,
  674.     AWD,    TUCHAR,
  675.     SANY,    TLONG|TULONG,
  676.         NAREG|NASL,    RESC1,
  677.         "    movb    AL,U1\n    bic    $!377,U1\n    clr    A1\n",
  678.  
  679. SCONV,    INTAREG,
  680.     AWD,    TINT,
  681.     SANY,    TLONG|TULONG,
  682.         NAREG|NASL,    RESC1,
  683.         "    mov    AL,U1\n    sxt    A1\n",
  684.  
  685. SCONV,    INTAREG,
  686.     AWD,    TUNSIGNED|TPOINT,
  687.     SANY,    TLONG|TULONG,
  688.         NAREG|NASL,    RESC1,
  689.         "    mov    AL,U1\n    clr    A1\n",
  690.  
  691. SCONV,    INTAREG,
  692.     SBREG,    TDOUBLE,
  693.     SANY,    TINT|TUNSIGNED|TPOINT|TCHAR|TUCHAR,
  694.         NAREG,    RESC1,
  695.         "    movfi    AL,A1\n",
  696.  
  697. SCONV,    INTAREG,
  698.     STBREG,    TDOUBLE,
  699.     SANY,    TLONG|TULONG,
  700.         NAREG,    RESC1,
  701.         "    setl\n    movfi    AL,-(sp)\n    seti\n    mov    (sp)+,A1\n    mov    (sp)+,U1\n",
  702.  
  703. SCONV,    FORARG,
  704.     STBREG,    TDOUBLE,
  705.     SANY,    TLONG|TULONG,
  706.         0,    RNULL,
  707.         "    setl\n    movfi    AL,Z4\n    seti\n",
  708.  
  709. SCONV,    INTBREG,
  710.     SAREG,    TLONG,
  711.     SANY,    TANY,
  712.         NBREG,    RESC1,
  713.         "\tmov\tUL,-(sp)\n\tmov\tAL,-(sp)\n\tsetl\n\tmovif\t(sp)+,A1\n\tseti\n",
  714.  
  715. SCONV,    INTBREG,
  716.     LWD,    TLONG,
  717.     SANY,    TANY,
  718.         NBREG,    RESC1,
  719.         "\tsetl\n\tmovif\tAL,A1\n\tseti\n",
  720.  
  721. SCONV,    INTBREG,
  722.     AWD,    TINT,
  723.     SANY,    TANY,
  724.         NBREG,    RESC1,
  725.         "    movif    AL,A1\n",
  726.  
  727. SCONV,    INTBREG,
  728.     SAREG,    TULONG,
  729.     SANY,    TANY,
  730.         NBREG,    RESC1,
  731.         "\tmov\tUL,-(sp)\n\tmov\tAL,-(sp)\n\tsetl\n\tmovif\t(sp)+,A1\n\tseti\n\tcfcc\n\tbpl\t1f\n\taddf\t$050200,A1\n1:\n",
  732.  
  733. SCONV,    INTBREG,
  734.     LWD,    TULONG,
  735.     SANY,    TANY,
  736.         NBREG,    RESC1,
  737.         "\tsetl\n\tmovif\tAL,A1\n\tseti\n\tcfcc\n\tbpl\t1f\n\taddf\t$050200,A1\n1:\n",
  738.  
  739. SCONV,    INTBREG,
  740.     STAREG,    TUNSIGNED|TPOINT,
  741.     SANY,    TANY,
  742.         NBREG,    RESC1,
  743.         "\tmovif\tAL,A1\n\tcfcc\n\tbpl\t1f\n\taddf\t$044200,A1\n1:\n",
  744.  
  745. PCONV,    INTAREG,
  746.     AWD,    TCHAR|TUCHAR,
  747.     SANY,    TPOINT,
  748.         NAREG|NASL,    RESC1,
  749.         "    movb    AL,A1\n",
  750.  
  751. PCONV,    INAREG|INTAREG,
  752.     LWD,    TLONG|TULONG,
  753.     SANY,    TPOINT,
  754.         0,    RLEFT,
  755.         "ZT",
  756.  
  757. STARG,    FORARG,
  758.     SNAME|SOREG,    TANY,
  759.     SANY,    TANY,
  760.         0,    RNULL,
  761.         "ZS",
  762.  
  763. STASG,    FOREFF,
  764.     SNAME|SOREG,    TANY,
  765.     SCON|SAREG,    TANY,
  766.         0,    RNOP,
  767.         "ZS",
  768.  
  769. STASG,    INTAREG|INAREG,
  770.     SNAME|SOREG,    TANY,
  771.     STAREG,    TANY,
  772.         0,    RRIGHT,
  773.         "ZS",
  774.  
  775. STASG, INAREG|INTAREG,
  776.     SNAME|SOREG,    TANY,
  777.     SCON|SAREG,    TANY,
  778.         NAREG,    RESC1,
  779.         "ZS    mov    AR,A1\n",
  780.  
  781. INIT,    FOREFF,
  782.     SCON,    TANY,
  783.     SANY,    TINT|TUNSIGNED|TPOINT,
  784.         0,    RNOP,
  785.         "    CL\n",
  786.  
  787. INIT,    FOREFF,
  788.     SCON,    TANY,
  789.     SANY,    TLONG|TULONG,
  790.         0,    RNOP,
  791.         "ZL",
  792.  
  793. INIT,    FOREFF,
  794.     SCON,    TANY,
  795.     SANY,    TCHAR|TUCHAR,
  796.         0,    RNOP,
  797.         "    .byte    CL\n",
  798.  
  799.     /* for the use of fortran only */
  800.  
  801. GOTO,    FOREFF,
  802.     SCON,    TANY,
  803.     SANY,    TANY,
  804.         0,    RNOP,
  805.         "    jbr    CL\n",
  806.  
  807. GOTO,    FOREFF,
  808.     SNAME,    TLONG|TULONG,
  809.     SANY,    TANY,
  810.         0,    RNOP,
  811.         "    jmp    *UL\n",
  812.  
  813. GOTO,    FOREFF,
  814.     SNAME,    TINT|TUNSIGNED|TCHAR|TUCHAR|TPOINT,
  815.     SANY,    TANY,
  816.         0,    RNOP,
  817.         "    jmp    *AL\n",
  818.  
  819.     /* Default actions for hard trees ... */
  820.  
  821. # define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
  822.  
  823. UNARY MUL, DF( UNARY MUL ),
  824.  
  825. INCR, DF(INCR),
  826.  
  827. DECR, DF(INCR),
  828.  
  829. ASSIGN, DF(ASSIGN),
  830.  
  831. STASG, DF(STASG),
  832.  
  833. OPLEAF, DF(NAME),
  834.  
  835. OPLOG,    FORCC,
  836.     SANY,    TANY,
  837.     SANY,    TANY,
  838.         REWRITE,    BITYPE,
  839.         "",
  840.  
  841. OPLOG,    DF(NOT),
  842.  
  843. COMOP, DF(COMOP),
  844.  
  845. INIT, DF(INIT),
  846.  
  847. OPUNARY, DF(UNARY MINUS),
  848.  
  849.  
  850. ASG OPANY, DF(ASG PLUS),
  851.  
  852. OPANY, DF(BITYPE),
  853.  
  854. FREE,    FREE,    FREE,    FREE,    FREE,    FREE,    FREE,    FREE,    "help; I'm in trouble\n" };
  855.