home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / pascal / fpnofetchi / fp1.s next >
Text File  |  1980-02-17  |  5KB  |  519 lines

  1. / fp1 -- floating point simulator
  2.  
  3. rti    = 2
  4. bpt    = 3
  5. fetchi    = 61.
  6.  
  7. m.ext = 200        / long mode bit
  8. m.lngi = 100        / long integer mode
  9.  
  10. .globl    fptrap, fpjsr, _reenter
  11. .globl    ac0, ac1, ac2, ac3
  12.  
  13. 2:
  14.     bpl    1f
  15.     jsr    pc,1f
  16.     bis    $10,sps
  17.     rts    pc
  18. 1:
  19.     bne    1f
  20.     jsr    pc,1f
  21.     bis    $4,sps
  22.     rts    pc
  23. 1:
  24.     bvc    1f
  25.     jsr    pc,1f
  26.     bis    $2,sps
  27.     rts    pc
  28. 1:
  29.     bcc    1f
  30.     jsr    pc,1f
  31.     bis    $1,sps
  32.     rts    pc
  33. 1:
  34.     mov    $140000,sps
  35.     rts    pc
  36. fpjsr:
  37.     jsr    pc,2b
  38.     mov    (sp),-(sp)
  39.     mov    sps,2(sp)
  40.     add    $2,(sp)
  41. fptrap:
  42.     dec    _reenter
  43.     bge    1f
  44.     4        / _reentered!
  45. 1:
  46.     mov    (sp)+,spc
  47.     mov    (sp)+,sps
  48.     mov    r0,sr0
  49.     mov    $sr1,r0
  50.     mov    r1,(r0)+
  51.     mov    r2,(r0)+
  52.     mov    r3,(r0)+
  53.     mov    r4,(r0)+
  54.     mov    r5,(r0)+
  55.     mov    sp,(r0)+
  56.     sub    $8,sp        / room for double push
  57.     mov    r0,-(sp)    / ???
  58.     mov    (r0),r0
  59.     sub    $2,r0
  60.     mov    (r0),r0
  61.     mov    r0,r5        / instruction
  62.     mov    (sp)+,r0    / ???
  63.     clr    trapins
  64.     mov    r5,r4
  65.     bic    $7777,r4
  66.     cmp    r4,$170000
  67.     beq    1f
  68.     jmp    badins
  69. lookahead:
  70.     add    $2,spc
  71.     mov    ssp,sp
  72.     sub    $8,sp
  73. 1:
  74.     bic    $100000,fpsr    / clear fp error
  75.     bic    $170000,r5
  76.     mov    r5,r4
  77.     bit    $7000,r4
  78.     bne    class3
  79.     bit    $700,r4
  80.     bne    class2
  81.     cmp    r4,$12
  82.     blos    1f
  83.     jmp    badins
  84. 1:
  85.     asl    r4
  86.     jmp    *1f(r4)
  87.  
  88.     .data
  89. 1:
  90.     i.cfcc        / 170000
  91.     i.setf        / 170001
  92.     i.seti        / 170002
  93.     badins
  94.     badins
  95.     badins
  96.     badins
  97.     badins
  98.     badins
  99.     i.setd        / 170011
  100.     i.setl        / 170012
  101.     .text
  102.  
  103. class2:
  104.     cmp    r5,$400
  105.     bge    1f
  106.     mov    $0f,r1
  107.     jsr    pc,fsrc
  108.     .data
  109. 0:    mod0rx; mod242
  110.     .text
  111.     br    2f
  112. 1:
  113.     mov    $0f,r1
  114.     jsr    pc,fsrc
  115.     .data
  116. 0:    mod0f; mod24f
  117.     .text
  118. 2:
  119.     mov    r3,r5
  120.     asl    r4
  121.     asl    r4
  122.     clrb    r4
  123.     swab    r4
  124.     asl    r4
  125.     jsr    pc,*1f(r4)
  126.     jmp    sret
  127.  
  128.     .data
  129. 1:
  130.     badins        / 1700xx
  131.     i.ldfps        / 1701xx
  132.     i.stfps        / 1702xx
  133.     badins        / 1703xx - stst
  134.     i.clrx        / 1704xx
  135.     i.tstx        / 1705xx
  136.     i.absx        / 1706xx
  137.     i.negx        / 1707xx
  138.     .text
  139.  
  140. class3:
  141.     cmp    r5,$5000
  142.     blt    1f
  143.     mov    r5,r2
  144.     clrb    r2
  145.     cmp    r2,$6400
  146.     blt    2f
  147.     sub    $1400,r2
  148. 2:
  149.     cmp    r2,$5000
  150.     bne    2f
  151.     mov    $0f,r1
  152.     jsr    pc,fsrc
  153.     .data
  154. 0:    mod0rx; mod242
  155.     .text
  156.     br    3f
  157. 2:
  158.     cmp    r2,$5400
  159.     bne    2f
  160.     mov    $0f,r1
  161.     jsr    pc,fsrc
  162.     .data
  163. 0:    mod0ra; mod24i
  164.     .text
  165.     br    3f
  166. 2:
  167.     mov    $0f,r1
  168.     jsr    pc,fsrc
  169.     .data
  170. 0:    mod0f; mod24d
  171.     .text
  172.     br    3f
  173. 1:
  174.     mov    $0f,r1
  175.     jsr    pc,fsrc
  176.     .data
  177. 0:    mod0f; mod24f
  178.     .text
  179. 3:
  180.     jsr    pc,freg
  181.     mov    r2,r5
  182.     clrb    r4
  183.     swab    r4
  184.     asl    r4
  185.     jsr    pc,*1f(r4)
  186.     br    sret
  187.  
  188.     .data
  189. 1:
  190.     badins        / 1700xx
  191.     badins        / 1704xx
  192.     i.mulx        / 1710xx
  193.     i.modx        / 1714xx
  194.     i.addx        / 1720xx
  195.     i.ldx        / 1724xx
  196.     i.subx        / 1730xx
  197.     i.cmpx        / 1734xx
  198.     i.stx        / 1740xx
  199.     i.divx        / 1744xx
  200.     i.stexp        / 1750xx
  201.     i.stcxj        / 1754xx
  202.     i.stcxy        / 1760xx
  203.     i.ldexp        / 1764xx
  204.     i.ldcjx        / 1770xx
  205.     i.ldcyx        / 1774xx
  206.     .text
  207.  
  208. i.cfcc:
  209.     mov    fpsr,r0
  210.     bic    $!17,r0
  211.     mov    r0,sps
  212.     br    ret
  213.  
  214. i.setf:
  215.     bic    $m.ext,fpsr
  216.     br    ret
  217.  
  218. i.setd:
  219.     bis    $m.ext,fpsr
  220.     br    ret
  221.  
  222. i.seti:
  223.     bic    $m.lngi,fpsr
  224.     br    ret
  225.  
  226. i.setl:
  227.     bis    $m.lngi,fpsr
  228.     br    ret
  229.  
  230. badins:
  231.     inc    trapins
  232.     br    ret
  233.  
  234. sret:
  235.     mov    $fpsr,r0
  236.     bic    $17,(r0)
  237.     tst    (r5)
  238.     bpl    1f
  239.     bis    $10,(r0)
  240.     br    ret
  241. 1:
  242.     bne    ret
  243.     bis    $4,(r0)
  244.  
  245. ret:
  246.     tst    trapins
  247.     bne    1f
  248.     mov    spc,r0
  249.     mov    (r0),r0
  250.     mov    r0,r5
  251.     mov    r5,r4
  252.     bic    $7777,r4
  253.     cmp    $170000,r4
  254.     jeq    lookahead
  255. 1:
  256.     mov    $sr1,r0
  257.     mov    (r0)+,r1
  258.     mov    (r0)+,r2
  259.     mov    (r0)+,r3
  260.     mov    (r0)+,r4
  261.     mov    (r0)+,r5
  262.     mov    (r0)+,sp
  263.     mov    sr0,r0
  264.     mov    sps,-(sp)
  265.     mov    spc,-(sp)
  266.     tst    trapins
  267.     bne    1f
  268.     inc    _reenter
  269.     rti
  270. 1:
  271.     bpt
  272.  
  273. freg:
  274.     mov    r5,r2
  275.     bic    $!300,r2
  276.     asr    r2
  277.     asr    r2
  278.     asr    r2
  279.     add    $ac0,r2
  280.     rts    pc
  281.  
  282. fsrc:
  283.     mov    r5,r3
  284.     bic    $!7,r3            / register
  285.     asl    r3
  286.     add    $sr0,r3
  287.     mov    r5,r0
  288.     bic    $!70,r0            / mode
  289.     asr    r0
  290.     asr    r0
  291.     jmp    *1f(r0)
  292.  
  293.     .data
  294. 1:
  295.     mod0
  296.     mod1
  297.     mod2
  298.     mod3
  299.     mod4
  300.     mod5
  301.     mod6
  302.     mod7
  303.     .text
  304.  
  305. mod24f:
  306.     mov    $4,r0
  307.     bit    $m.ext,fpsr
  308.     beq    1f
  309.     add    $4,r0
  310. 1:
  311.     rts    pc
  312.  
  313. mod24d:
  314.     mov    $8,r0
  315.     bit    $m.ext,fpsr
  316.     beq    1f
  317.     sub    $4,r0
  318. 1:
  319.     rts    pc
  320.  
  321. mod242:
  322.     mov    $2,r0
  323.     rts    pc
  324.  
  325. mod24i:
  326.     mov    $2,r0
  327.     bit    $m.lngi,fpsr
  328.     beq    1f
  329.     add    $2,r0
  330. 1:
  331.     rts    pc
  332.  
  333. mod0:
  334.     jmp    *(r1)+
  335.  
  336. mod0f:
  337.     sub    $sr0,r3            / get fp ac
  338.     cmp    r3,$6*2
  339.     bhis    badi1
  340.     asl    r3
  341.     asl    r3
  342.     add    $ac0,r3
  343.     tst    (r1)+
  344.     rts    pc
  345.  
  346. mod0ra:
  347.     bit    $m.lngi,fpsr
  348.     bne    badi1
  349.  
  350. mod0r:
  351.     cmp    r3,$ssp
  352.     bhis    badi1
  353. mod0rx:
  354.     tst    (r1)+
  355.     rts    pc
  356.  
  357. mod1:
  358.     cmp    r3,$spc
  359.     beq    badi1
  360.     mov    (r3),r3
  361.     br    check
  362.  
  363. mod2:
  364.     cmp    r3,$spc
  365.     bne    1f
  366. /  $n
  367.     mov    (r3),r0
  368.     mov    (r0),r0
  369.     mov    r0,pctmp
  370.     mov    $2,r0
  371.     add    r0,(r3)
  372.     mov    $pctmp,r3
  373.     br    check
  374. /  (rn)+
  375. 1:
  376.     mov    (r3),-(sp)
  377.     jsr    pc,*2(r1)
  378.     add    r0,(r3)
  379.     mov    (sp)+,r3
  380.     br    check
  381.  
  382. mod3:
  383.     cmp    r3,$spc
  384.     bne    1f
  385. /  *$n
  386.     mov    r0,-(sp)
  387.     mov    (r3),r0
  388.     mov    (r0),r0
  389.     add    $2,(r3)
  390.     mov    r0,r3
  391.     mov    (sp)+,r0
  392.     br    check
  393. /  *(rn)+
  394. 1:
  395.     mov    *(r3),-(sp)
  396.     add    $2,(r3)
  397.     mov    (sp)+,r3
  398.     br    check
  399.  
  400. mod4:
  401.     cmp    r3,$spc        / test pc
  402.     beq    badi1
  403.     jsr    pc,*2(r1)
  404.     sub    r0,(r3)
  405.     mov    (r3),r3
  406.     br    check
  407.  
  408. mod5:
  409.     cmp    r3,$spc
  410.     beq    badi1
  411.     sub    $2,(r3)
  412.     mov    *(r3),r3
  413.     br    check
  414.  
  415. mod6:
  416.     mov    r0,-(sp)
  417.     mov    spc,r0
  418.     mov    (r0),r0
  419.     add    $2,spc
  420.     add    (r3),r0        /shouldn't happen separate i and d !!!
  421.     mov    r0,r3
  422.     mov    (sp)+,r0
  423.     br    check
  424.  
  425. mod7:
  426.     jsr    pc,mod6
  427.     mov    (r3),r3
  428.     br    check
  429.  
  430. badi1:
  431.     jmp    badins
  432.  
  433. check:
  434.     bit    $1,r3
  435.     bne    badi1
  436.     rts    pc
  437.  
  438. setab:
  439.     mov    $asign,r0
  440.     jsr    pc,seta
  441.     mov    r3,r2
  442.     mov    $bsign,r0
  443.  
  444. seta:
  445.     clr    (r0)
  446.     mov    (r2)+,r1
  447.     mov    r1,-(sp)
  448.     beq    1f
  449.     blt    2f
  450.     inc    (r0)+
  451.     br    3f
  452. 2:
  453.     dec    (r0)+
  454. 3:
  455.     bic    $!177,r1
  456.     bis    $200,r1
  457.     br    2f
  458. 1:
  459.     clr    (r0)+
  460. 2:
  461.     mov    r1,(r0)+
  462.     mov    (r2)+,(r0)+
  463.     bit    $m.ext,fpsr
  464.     beq    2f
  465.     mov    (r2)+,(r0)+
  466.     mov    (r2)+,(r0)+
  467.     br    3f
  468. 2:
  469.     clr    (r0)+
  470.     clr    (r0)+
  471. 3:
  472.     mov    (sp)+,r1
  473.     asl    r1
  474.     clrb    r1
  475.     swab    r1
  476.     sub    $200,r1
  477.     mov    r1,(r0)+    / exp
  478.     rts    pc
  479.  
  480. norm:
  481.     mov    $areg,r0
  482.     mov    (r0)+,r1
  483.     mov    r1,-(sp)
  484.     mov    (r0)+,r2
  485.     bis    r2,(sp)
  486.     mov    (r0)+,r3
  487.     bis    r3,(sp)
  488.     mov    (r0)+,r4
  489.     bis    r4,(sp)+
  490.     bne    1f
  491.     clr    asign
  492.     rts    pc
  493. 1:
  494.     bit    $!377,r1
  495.     beq    1f
  496.     clc
  497.     ror    r1
  498.     ror    r2
  499.     ror    r3
  500.     ror    r4
  501.     inc    (r0)
  502.     br    1b
  503. 1:
  504.     bit    $200,r1
  505.     bne    1f
  506.     asl    r4
  507.     rol    r3
  508.     rol    r2
  509.     rol    r1
  510.     dec    (r0)
  511.     br    1b
  512. 1:
  513.     mov    r4,-(r0)
  514.     mov    r3,-(r0)
  515.     mov    r2,-(r0)
  516.     mov    r1,-(r0)
  517.     rts    pc
  518.  
  519.