home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / s3 / fp1.s < prev    next >
Encoding:
Text File  |  1975-05-13  |  4.4 KB  |  428 lines

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