home *** CD-ROM | disk | FTP | other *** search
/ ftp.ee.pdx.edu / 2014.02.ftp.ee.pdx.edu.tar / ftp.ee.pdx.edu / pub / users / Harry / compilers / p11 / tst / primes.out.bak < prev    next >
Text File  |  2006-03-05  |  10KB  |  568 lines

  1. !
  2. ! PCAT Compiler Version 1.0
  3. !
  4.              .global  .div
  5.              .global  .rem
  6. !
  7. ! Standard data fields
  8. !
  9.              .data
  10.              .align   8
  11. temp:        .double  0
  12.              .text
  13. strNL:       .asciz   "\n"
  14. strInt:      .asciz   "%d"
  15. strFlt:      .asciz   "%g"
  16. strTrue:     .asciz   "TRUE"
  17. strFalse:    .asciz   "FALSE"
  18. message1:    .asciz   "Execution Error: Allocation failed!\n"
  19. message2:    .asciz   "Execution Error: Pointer is NIL!\n"
  20. message3:    .asciz   "Execution Error: Read statement failed!\n"
  21. message4:    .asciz   "Execution Error: Array index is out of bounds!\n"
  22. message5:    .asciz   "Execution Error: Count is not positive in array constructor!\n"
  23.              .align   8
  24. !
  25. ! runtimeError1-5
  26. !
  27. ! Branch to one of these labels to print an error message and abort.
  28. !
  29. runtimeError1:
  30.              set      message1,%o0
  31.              call     printf
  32.              nop
  33.              call     exit
  34.              mov      1,%o0
  35. runtimeError2:
  36.              set      message2,%o0
  37.              call     printf
  38.              nop
  39.              call     exit
  40.              mov      1,%o0
  41. runtimeError3:
  42.              set      message3,%o0
  43.              call     printf
  44.              nop
  45.              call     exit
  46.              mov      1,%o0
  47. runtimeError4:
  48.              set      message4,%o0
  49.              call     printf
  50.              nop
  51.              call     exit
  52.              mov      1,%o0
  53. runtimeError5:
  54.              set      message5,%o0
  55.              call     printf
  56.              nop
  57.              call     exit
  58.              mov      1,%o0
  59. ! writeFlt
  60. !
  61. ! This routine is passed a single precision floating number in %f0.
  62. ! It prints it by calling printf.  It uses registers %f0, %f1.
  63. !
  64. writeFlt:
  65.         save    %sp,-128,%sp
  66.         fstod   %f0,%f0
  67.         set     temp,%l0
  68.         std     %f0,[%l0]
  69.         ldd     [%l0],%o0
  70.         mov     %o1,%o2
  71.         mov     %o0,%o1
  72.         set     strFlt,%o0
  73.         call    printf
  74.         nop
  75.         ret
  76.         restore
  77. ! writeBool
  78. !
  79. ! This routine is passed an integer in %i0/o0.  It prints "FALSE" if this
  80. ! integer is 0 and "TRUE" otherwise.
  81. !
  82. writeBool:
  83.         save    %sp,-128,%sp
  84.         cmp     %i0,%g0
  85.         be      printFalse
  86.         nop
  87.         set     strTrue,%o0
  88.         ba      printEnd
  89.         nop
  90. printFalse:
  91.         set     strFalse,%o0
  92. printEnd:
  93.         call    printf
  94.         nop
  95.         ret
  96.         restore
  97. !
  98. ! Additional Fields
  99. !
  100.     .data
  101. display0:    .word    0
  102.     .text
  103. str2:    .asciz    "N must be >= 1.  Try again..."
  104. str1:    .asciz    "Printing the primes from 1 to N;  Please enter N..."
  105.     .align    8
  106. ! MAIN...
  107. !   mainEntry
  108.     .global    main
  109. main:    save    %sp,-208,%sp
  110.     set    display0,%o0
  111.     st    %fp,[%o0]
  112. ! VAR INITIALIZATION...
  113. !   N := 0
  114.     set    0,%o0
  115.     st    %o0,[%fp+-4]
  116. ! VAR INITIALIZATION...
  117. !   a := 0
  118.     set    0,%o0
  119.     st    %o0,[%fp+-8]
  120. ! VAR INITIALIZATION...
  121. !   i := 0
  122.     set    0,%o0
  123.     st    %o0,[%fp+-12]
  124. ! VAR INITIALIZATION...
  125. !   j := i
  126.     ld    [%fp+-12],%o0
  127.     st    %o0,[%fp+-16]
  128. ! WRITE STMT...
  129. !   writeString str1
  130.     sethi    %hi(str1),%o0
  131.     call    printf
  132.     or    %o0,%lo(str1),%o0
  133. !   writeNewline
  134.     sethi    %hi(strNL),%o0
  135.     call    printf
  136.     or    %o0,%lo(strNL),%o0
  137. ! LOOP...
  138. !   Label_1:
  139. Label_1:
  140. ! READ STMT...
  141. !   t1 := &N
  142.     add    %fp,-4,%o0
  143.     st    %o0,[%fp+-20]
  144. !   readInt t1
  145.     ld    [%fp+-20],%o1
  146.     sethi    %hi(strInt),%o0
  147.     call    scanf
  148.     or    %o0,%lo(strInt),%o0
  149.     cmp    %o0,0
  150.     be    runtimeError3
  151.     nop
  152. ! IF...
  153. !   if N >= 1 goto Label_3        (integer)
  154.     ld    [%fp+-4],%o0
  155.     set    1,%o1
  156.     cmp    %o0,%o1
  157.     bge    Label_3
  158.     nop
  159. !   goto Label_4
  160.     ba    Label_4
  161.     nop
  162. !   Label_3:
  163. Label_3:
  164. ! THEN...
  165. ! EXIT...
  166. !   goto Label_2
  167.     ba    Label_2
  168.     nop
  169. ! END IF...
  170. !   Label_4:
  171. Label_4:
  172. ! WRITE STMT...
  173. !   writeString str2
  174.     sethi    %hi(str2),%o0
  175.     call    printf
  176.     or    %o0,%lo(str2),%o0
  177. !   writeNewline
  178.     sethi    %hi(strNL),%o0
  179.     call    printf
  180.     or    %o0,%lo(strNL),%o0
  181. ! END LOOP...
  182. !   goto Label_1
  183.     ba    Label_1
  184.     nop
  185. !   Label_2:
  186. Label_2:
  187. ! ASSIGNMENT STMT...
  188. !   t2 := 0
  189.     set    0,%o0
  190.     st    %o0,[%fp+-24]
  191. !   t3 := N + 1        (integer)
  192.     ld    [%fp+-4],%o0
  193.     set    1,%o1
  194.     add    %o0,%o1,%o1
  195.     st    %o1,[%fp+-28]
  196. !   if t3 <= 0 goto runtimeError5        (integer)
  197.     ld    [%fp+-28],%o0
  198.     set    0,%o1
  199.     cmp    %o0,%o1
  200.     ble    runtimeError5
  201.     nop
  202. !   t2 := t2 + t3        (integer)
  203.     ld    [%fp+-24],%o0
  204.     ld    [%fp+-28],%o1
  205.     add    %o0,%o1,%o1
  206.     st    %o1,[%fp+-24]
  207. !   t4 := t2 * 4        (integer)
  208.     ld    [%fp+-24],%o0
  209.     set    4,%o1
  210.     smul    %o0,%o1,%o1
  211.     st    %o1,[%fp+-32]
  212. !   t4 := t4 + 4        (integer)
  213.     ld    [%fp+-32],%o0
  214.     set    4,%o1
  215.     add    %o0,%o1,%o1
  216.     st    %o1,[%fp+-32]
  217. !   t4 := alloc (t4)
  218.     set    1,%o0
  219.     ld    [%fp+-32],%o1
  220.     call    calloc
  221.     nop
  222.     st    %o0,[%fp+-32]
  223. !   if t4 = 0 goto runtimeError1        (integer)
  224.     ld    [%fp+-32],%o0
  225.     set    0,%o1
  226.     cmp    %o0,%o1
  227.     be    runtimeError1
  228.     nop
  229. !   t5 := t4
  230.     ld    [%fp+-32],%o0
  231.     st    %o0,[%fp+-36]
  232. !   *t4 := t2
  233.     ld    [%fp+-24],%o0
  234.     ld    [%fp+-32],%o1
  235.     st    %o0,[%o1]
  236. !   t6 := t3
  237.     ld    [%fp+-28],%o0
  238.     st    %o0,[%fp+-40]
  239. !   Label_5:
  240. Label_5:
  241. !   t4 := t4 + 4        (integer)
  242.     ld    [%fp+-32],%o0
  243.     set    4,%o1
  244.     add    %o0,%o1,%o1
  245.     st    %o1,[%fp+-32]
  246. !   *t4 := 1
  247.     set    1,%o0
  248.     ld    [%fp+-32],%o1
  249.     st    %o0,[%o1]
  250. !   t6 := t6 - 1        (integer)
  251.     ld    [%fp+-40],%o0
  252.     set    1,%o1
  253.     sub    %o0,%o1,%o1
  254.     st    %o1,[%fp+-40]
  255. !   if t6 > 0 goto Label_5        (integer)
  256.     ld    [%fp+-40],%o0
  257.     set    0,%o1
  258.     cmp    %o0,%o1
  259.     bg    Label_5
  260.     nop
  261. !   a := t5
  262.     ld    [%fp+-36],%o0
  263.     st    %o0,[%fp+-8]
  264. ! ASSIGNMENT STMT...
  265. !   if a = 0 goto runtimeError2        (integer)
  266.     ld    [%fp+-8],%o0
  267.     set    0,%o1
  268.     cmp    %o0,%o1
  269.     be    runtimeError2
  270.     nop
  271. !   if 1 < 0 goto runtimeError4        (integer)
  272.     set    1,%o0
  273.     set    0,%o1
  274.     cmp    %o0,%o1
  275.     bl    runtimeError4
  276.     nop
  277. !   t7 := *a
  278.     ld    [%fp+-8],%o0
  279.     ld    [%o0],%o0
  280.     st    %o0,[%fp+-44]
  281. !   if 1 >= t7 goto runtimeError4        (integer)
  282.     set    1,%o0
  283.     ld    [%fp+-44],%o1
  284.     cmp    %o0,%o1
  285.     bge    runtimeError4
  286.     nop
  287. !   t7 := 1 * 4        (integer)
  288.     set    1,%o0
  289.     set    4,%o1
  290.     smul    %o0,%o1,%o1
  291.     st    %o1,[%fp+-44]
  292. !   t7 := t7 + 4        (integer)
  293.     ld    [%fp+-44],%o0
  294.     set    4,%o1
  295.     add    %o0,%o1,%o1
  296.     st    %o1,[%fp+-44]
  297. !   t7 := a + t7        (integer)
  298.     ld    [%fp+-8],%o0
  299.     ld    [%fp+-44],%o1
  300.     add    %o0,%o1,%o1
  301.     st    %o1,[%fp+-44]
  302. !   *t7 := 0
  303.     set    0,%o0
  304.     ld    [%fp+-44],%o1
  305.     st    %o0,[%o1]
  306. ! FOR...
  307. !   t11 := &i
  308.     add    %fp,-12,%o0
  309.     st    %o0,[%fp+-60]
  310. !   t8 := 2
  311.     set    2,%o0
  312.     st    %o0,[%fp+-48]
  313. !   t12 := N DIV 2           (integer)
  314.     ld    [%fp+-4],%o0
  315.     set    2,%o1
  316.     call    .div
  317.     nop
  318.     st    %o0,[%fp+-64]
  319. !   t9 := t12
  320.     ld    [%fp+-64],%o0
  321.     st    %o0,[%fp+-52]
  322. !   t10 := 1
  323.     set    1,%o0
  324.     st    %o0,[%fp+-56]
  325. !   *t11 := t8
  326.     ld    [%fp+-48],%o0
  327.     ld    [%fp+-60],%o1
  328.     st    %o0,[%o1]
  329. !   Label_6:
  330. Label_6:
  331. !   if t8 > t9 goto Label_7        (integer)
  332.     ld    [%fp+-48],%o0
  333.     ld    [%fp+-52],%o1
  334.     cmp    %o0,%o1
  335.     bg    Label_7
  336.     nop
  337. ! FOR...
  338. !   t16 := &j
  339.     add    %fp,-16,%o0
  340.     st    %o0,[%fp+-80]
  341. !   t13 := 2
  342.     set    2,%o0
  343.     st    %o0,[%fp+-68]
  344. !   t17 := N DIV i           (integer)
  345.     ld    [%fp+-4],%o0
  346.     ld    [%fp+-12],%o1
  347.     call    .div
  348.     nop
  349.     st    %o0,[%fp+-84]
  350. !   t14 := t17
  351.     ld    [%fp+-84],%o0
  352.     st    %o0,[%fp+-72]
  353. !   t15 := 1
  354.     set    1,%o0
  355.     st    %o0,[%fp+-76]
  356. !   *t16 := t13
  357.     ld    [%fp+-68],%o0
  358.     ld    [%fp+-80],%o1
  359.     st    %o0,[%o1]
  360. !   Label_8:
  361. Label_8:
  362. !   if t13 > t14 goto Label_9        (integer)
  363.     ld    [%fp+-68],%o0
  364.     ld    [%fp+-72],%o1
  365.     cmp    %o0,%o1
  366.     bg    Label_9
  367.     nop
  368. ! ASSIGNMENT STMT...
  369. !   if a = 0 goto runtimeError2        (integer)
  370.     ld    [%fp+-8],%o0
  371.     set    0,%o1
  372.     cmp    %o0,%o1
  373.     be    runtimeError2
  374.     nop
  375. !   t18 := i * j        (integer)
  376.     ld    [%fp+-12],%o0
  377.     ld    [%fp+-16],%o1
  378.     smul    %o0,%o1,%o1
  379.     st    %o1,[%fp+-88]
  380. !   if t18 < 0 goto runtimeError4        (integer)
  381.     ld    [%fp+-88],%o0
  382.     set    0,%o1
  383.     cmp    %o0,%o1
  384.     bl    runtimeError4
  385.     nop
  386. !   t19 := *a
  387.     ld    [%fp+-8],%o0
  388.     ld    [%o0],%o0
  389.     st    %o0,[%fp+-92]
  390. !   if t18 >= t19 goto runtimeError4        (integer)
  391.     ld    [%fp+-88],%o0
  392.     ld    [%fp+-92],%o1
  393.     cmp    %o0,%o1
  394.     bge    runtimeError4
  395.     nop
  396. !   t19 := t18 * 4        (integer)
  397.     ld    [%fp+-88],%o0
  398.     set    4,%o1
  399.     smul    %o0,%o1,%o1
  400.     st    %o1,[%fp+-92]
  401. !   t19 := t19 + 4        (integer)
  402.     ld    [%fp+-92],%o0
  403.     set    4,%o1
  404.     add    %o0,%o1,%o1
  405.     st    %o1,[%fp+-92]
  406. !   t19 := a + t19        (integer)
  407.     ld    [%fp+-8],%o0
  408.     ld    [%fp+-92],%o1
  409.     add    %o0,%o1,%o1
  410.     st    %o1,[%fp+-92]
  411. !   *t19 := 0
  412.     set    0,%o0
  413.     ld    [%fp+-92],%o1
  414.     st    %o0,[%o1]
  415. ! END FOR...
  416. !   t13 := *t16
  417.     ld    [%fp+-80],%o0
  418.     ld    [%o0],%o0
  419.     st    %o0,[%fp+-68]
  420. !   t13 := t13 + t15        (integer)
  421.     ld    [%fp+-68],%o0
  422.     ld    [%fp+-76],%o1
  423.     add    %o0,%o1,%o1
  424.     st    %o1,[%fp+-68]
  425. !   *t16 := t13
  426.     ld    [%fp+-68],%o0
  427.     ld    [%fp+-80],%o1
  428.     st    %o0,[%o1]
  429. !   goto Label_8
  430.     ba    Label_8
  431.     nop
  432. !   Label_9:
  433. Label_9:
  434. ! END FOR...
  435. !   t8 := *t11
  436.     ld    [%fp+-60],%o0
  437.     ld    [%o0],%o0
  438.     st    %o0,[%fp+-48]
  439. !   t8 := t8 + t10        (integer)
  440.     ld    [%fp+-48],%o0
  441.     ld    [%fp+-56],%o1
  442.     add    %o0,%o1,%o1
  443.     st    %o1,[%fp+-48]
  444. !   *t11 := t8
  445.     ld    [%fp+-48],%o0
  446.     ld    [%fp+-60],%o1
  447.     st    %o0,[%o1]
  448. !   goto Label_6
  449.     ba    Label_6
  450.     nop
  451. !   Label_7:
  452. Label_7:
  453. ! FOR...
  454. !   t23 := &i
  455.     add    %fp,-12,%o0
  456.     st    %o0,[%fp+-108]
  457. !   t20 := 1
  458.     set    1,%o0
  459.     st    %o0,[%fp+-96]
  460. !   t21 := N
  461.     ld    [%fp+-4],%o0
  462.     st    %o0,[%fp+-100]
  463. !   t22 := 1
  464.     set    1,%o0
  465.     st    %o0,[%fp+-104]
  466. !   *t23 := t20
  467.     ld    [%fp+-96],%o0
  468.     ld    [%fp+-108],%o1
  469.     st    %o0,[%o1]
  470. !   Label_10:
  471. Label_10:
  472. !   if t20 > t21 goto Label_11        (integer)
  473.     ld    [%fp+-96],%o0
  474.     ld    [%fp+-100],%o1
  475.     cmp    %o0,%o1
  476.     bg    Label_11
  477.     nop
  478. ! IF...
  479. !   if a = 0 goto runtimeError2        (integer)
  480.     ld    [%fp+-8],%o0
  481.     set    0,%o1
  482.     cmp    %o0,%o1
  483.     be    runtimeError2
  484.     nop
  485. !   if i < 0 goto runtimeError4        (integer)
  486.     ld    [%fp+-12],%o0
  487.     set    0,%o1
  488.     cmp    %o0,%o1
  489.     bl    runtimeError4
  490.     nop
  491. !   t24 := *a
  492.     ld    [%fp+-8],%o0
  493.     ld    [%o0],%o0
  494.     st    %o0,[%fp+-112]
  495. !   if i >= t24 goto runtimeError4        (integer)
  496.     ld    [%fp+-12],%o0
  497.     ld    [%fp+-112],%o1
  498.     cmp    %o0,%o1
  499.     bge    runtimeError4
  500.     nop
  501. !   t24 := i * 4        (integer)
  502.     ld    [%fp+-12],%o0
  503.     set    4,%o1
  504.     smul    %o0,%o1,%o1
  505.     st    %o1,[%fp+-112]
  506. !   t24 := t24 + 4        (integer)
  507.     ld    [%fp+-112],%o0
  508.     set    4,%o1
  509.     add    %o0,%o1,%o1
  510.     st    %o1,[%fp+-112]
  511. !   t24 := a + t24        (integer)
  512.     ld    [%fp+-8],%o0
  513.     ld    [%fp+-112],%o1
  514.     add    %o0,%o1,%o1
  515.     st    %o1,[%fp+-112]
  516. !   t25 := *t24
  517.     ld    [%fp+-112],%o0
  518.     ld    [%o0],%o0
  519.     st    %o0,[%fp+-116]
  520. !   if t25 = 0 goto Label_13        (integer)
  521.     ld    [%fp+-116],%o0
  522.     set    0,%o1
  523.     cmp    %o0,%o1
  524.     be    Label_13
  525.     nop
  526. !   goto Label_12
  527.     ba    Label_12
  528.     nop
  529. !   Label_12:
  530. Label_12:
  531. ! THEN...
  532. ! WRITE STMT...
  533. !   writeInt i
  534.     ld    [%fp+-12],%o1
  535.     sethi    %hi(strInt),%o0
  536.     call    printf
  537.     or    %o0,%lo(strInt),%o0
  538. !   writeNewline
  539.     sethi    %hi(strNL),%o0
  540.     call    printf
  541.     or    %o0,%lo(strNL),%o0
  542. ! END IF...
  543. !   Label_13:
  544. Label_13:
  545. ! END FOR...
  546. !   t20 := *t23
  547.     ld    [%fp+-108],%o0
  548.     ld    [%o0],%o0
  549.     st    %o0,[%fp+-96]
  550. !   t20 := t20 + t22        (integer)
  551.     ld    [%fp+-96],%o0
  552.     ld    [%fp+-104],%o1
  553.     add    %o0,%o1,%o1
  554.     st    %o1,[%fp+-96]
  555. !   *t23 := t20
  556.     ld    [%fp+-96],%o0
  557.     ld    [%fp+-108],%o1
  558.     st    %o0,[%o1]
  559. !   goto Label_10
  560.     ba    Label_10
  561.     nop
  562. !   Label_11:
  563. Label_11:
  564. ! MAIN EXIT...
  565. !   mainExit
  566.     ret
  567.     restore
  568.