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 / speed.out.bak < prev    next >
Text File  |  2006-03-05  |  10KB  |  523 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. str15:    .asciz    "Should print the numbers between 1 and 300:"
  104. str14:    .asciz    "  F"
  105. str13:    .asciz    " E "
  106. str12:    .asciz    "D  "
  107. str11:    .asciz    "  C"
  108. str10:    .asciz    " B "
  109. str9:    .asciz    "A  "
  110. str8:    .asciz    "  assignment takes."
  111. str7:    .asciz    "  and dividing by 10,000,000 will allow you to determine how long the"
  112. str6:    .asciz    "  Comparing the different times (between B and C, versus between E and F)"
  113. str5:    .asciz    "      x := y + z;"
  114. str4:    .asciz    "  The only difference is that the FOR loop contains the statement"
  115. str3:    .asciz    "  times.  Between E and F is a FOR loop which also executes 10,000,000 times."
  116. str2:    .asciz    "  which executes 10,000,000 times.  The program then prints D-E-F several"
  117. str1:    .asciz    "Should print A-B-C several times.  Between B and C is an empty FOR loop"
  118.     .align    8
  119. ! MAIN...
  120. !   mainEntry
  121.     .global    main
  122. main:    save    %sp,-200,%sp
  123.     set    display0,%o0
  124.     st    %fp,[%o0]
  125. ! VAR INITIALIZATION...
  126. !   i := 0
  127.     set    0,%o0
  128.     st    %o0,[%fp+-4]
  129. ! VAR INITIALIZATION...
  130. !   j := i
  131.     ld    [%fp+-4],%o0
  132.     st    %o0,[%fp+-8]
  133. ! VAR INITIALIZATION...
  134. !   x := i
  135.     ld    [%fp+-4],%o0
  136.     st    %o0,[%fp+-12]
  137. ! VAR INITIALIZATION...
  138. !   y := i
  139.     ld    [%fp+-4],%o0
  140.     st    %o0,[%fp+-16]
  141. ! VAR INITIALIZATION...
  142. !   z := i
  143.     ld    [%fp+-4],%o0
  144.     st    %o0,[%fp+-20]
  145. ! WRITE STMT...
  146. !   writeString str1
  147.     sethi    %hi(str1),%o0
  148.     call    printf
  149.     or    %o0,%lo(str1),%o0
  150. !   writeNewline
  151.     sethi    %hi(strNL),%o0
  152.     call    printf
  153.     or    %o0,%lo(strNL),%o0
  154. ! WRITE STMT...
  155. !   writeString str2
  156.     sethi    %hi(str2),%o0
  157.     call    printf
  158.     or    %o0,%lo(str2),%o0
  159. !   writeNewline
  160.     sethi    %hi(strNL),%o0
  161.     call    printf
  162.     or    %o0,%lo(strNL),%o0
  163. ! WRITE STMT...
  164. !   writeString str3
  165.     sethi    %hi(str3),%o0
  166.     call    printf
  167.     or    %o0,%lo(str3),%o0
  168. !   writeNewline
  169.     sethi    %hi(strNL),%o0
  170.     call    printf
  171.     or    %o0,%lo(strNL),%o0
  172. ! WRITE STMT...
  173. !   writeString str4
  174.     sethi    %hi(str4),%o0
  175.     call    printf
  176.     or    %o0,%lo(str4),%o0
  177. !   writeNewline
  178.     sethi    %hi(strNL),%o0
  179.     call    printf
  180.     or    %o0,%lo(strNL),%o0
  181. ! WRITE STMT...
  182. !   writeString str5
  183.     sethi    %hi(str5),%o0
  184.     call    printf
  185.     or    %o0,%lo(str5),%o0
  186. !   writeNewline
  187.     sethi    %hi(strNL),%o0
  188.     call    printf
  189.     or    %o0,%lo(strNL),%o0
  190. ! WRITE STMT...
  191. !   writeString str6
  192.     sethi    %hi(str6),%o0
  193.     call    printf
  194.     or    %o0,%lo(str6),%o0
  195. !   writeNewline
  196.     sethi    %hi(strNL),%o0
  197.     call    printf
  198.     or    %o0,%lo(strNL),%o0
  199. ! WRITE STMT...
  200. !   writeString str7
  201.     sethi    %hi(str7),%o0
  202.     call    printf
  203.     or    %o0,%lo(str7),%o0
  204. !   writeNewline
  205.     sethi    %hi(strNL),%o0
  206.     call    printf
  207.     or    %o0,%lo(strNL),%o0
  208. ! WRITE STMT...
  209. !   writeString str8
  210.     sethi    %hi(str8),%o0
  211.     call    printf
  212.     or    %o0,%lo(str8),%o0
  213. !   writeNewline
  214.     sethi    %hi(strNL),%o0
  215.     call    printf
  216.     or    %o0,%lo(strNL),%o0
  217. ! FOR...
  218. !   t4 := &i
  219.     add    %fp,-4,%o0
  220.     st    %o0,[%fp+-36]
  221. !   t1 := 1
  222.     set    1,%o0
  223.     st    %o0,[%fp+-24]
  224. !   t2 := 4
  225.     set    4,%o0
  226.     st    %o0,[%fp+-28]
  227. !   t3 := 1
  228.     set    1,%o0
  229.     st    %o0,[%fp+-32]
  230. !   *t4 := t1
  231.     ld    [%fp+-24],%o0
  232.     ld    [%fp+-36],%o1
  233.     st    %o0,[%o1]
  234. !   Label_1:
  235. Label_1:
  236. !   if t1 > t2 goto Label_2        (integer)
  237.     ld    [%fp+-24],%o0
  238.     ld    [%fp+-28],%o1
  239.     cmp    %o0,%o1
  240.     bg    Label_2
  241.     nop
  242. ! WRITE STMT...
  243. !   writeString str9
  244.     sethi    %hi(str9),%o0
  245.     call    printf
  246.     or    %o0,%lo(str9),%o0
  247. !   writeNewline
  248.     sethi    %hi(strNL),%o0
  249.     call    printf
  250.     or    %o0,%lo(strNL),%o0
  251. ! WRITE STMT...
  252. !   writeString str10
  253.     sethi    %hi(str10),%o0
  254.     call    printf
  255.     or    %o0,%lo(str10),%o0
  256. !   writeNewline
  257.     sethi    %hi(strNL),%o0
  258.     call    printf
  259.     or    %o0,%lo(strNL),%o0
  260. ! FOR...
  261. !   t8 := &j
  262.     add    %fp,-8,%o0
  263.     st    %o0,[%fp+-52]
  264. !   t5 := 1
  265.     set    1,%o0
  266.     st    %o0,[%fp+-40]
  267. !   t6 := 10000000
  268.     set    10000000,%o0
  269.     st    %o0,[%fp+-44]
  270. !   t7 := 1
  271.     set    1,%o0
  272.     st    %o0,[%fp+-48]
  273. !   *t8 := t5
  274.     ld    [%fp+-40],%o0
  275.     ld    [%fp+-52],%o1
  276.     st    %o0,[%o1]
  277. !   Label_3:
  278. Label_3:
  279. !   if t5 > t6 goto Label_4        (integer)
  280.     ld    [%fp+-40],%o0
  281.     ld    [%fp+-44],%o1
  282.     cmp    %o0,%o1
  283.     bg    Label_4
  284.     nop
  285. ! END FOR...
  286. !   t5 := *t8
  287.     ld    [%fp+-52],%o0
  288.     ld    [%o0],%o0
  289.     st    %o0,[%fp+-40]
  290. !   t5 := t5 + t7        (integer)
  291.     ld    [%fp+-40],%o0
  292.     ld    [%fp+-48],%o1
  293.     add    %o0,%o1,%o1
  294.     st    %o1,[%fp+-40]
  295. !   *t8 := t5
  296.     ld    [%fp+-40],%o0
  297.     ld    [%fp+-52],%o1
  298.     st    %o0,[%o1]
  299. !   goto Label_3
  300.     ba    Label_3
  301.     nop
  302. !   Label_4:
  303. Label_4:
  304. ! WRITE STMT...
  305. !   writeString str11
  306.     sethi    %hi(str11),%o0
  307.     call    printf
  308.     or    %o0,%lo(str11),%o0
  309. !   writeNewline
  310.     sethi    %hi(strNL),%o0
  311.     call    printf
  312.     or    %o0,%lo(strNL),%o0
  313. ! END FOR...
  314. !   t1 := *t4
  315.     ld    [%fp+-36],%o0
  316.     ld    [%o0],%o0
  317.     st    %o0,[%fp+-24]
  318. !   t1 := t1 + t3        (integer)
  319.     ld    [%fp+-24],%o0
  320.     ld    [%fp+-32],%o1
  321.     add    %o0,%o1,%o1
  322.     st    %o1,[%fp+-24]
  323. !   *t4 := t1
  324.     ld    [%fp+-24],%o0
  325.     ld    [%fp+-36],%o1
  326.     st    %o0,[%o1]
  327. !   goto Label_1
  328.     ba    Label_1
  329.     nop
  330. !   Label_2:
  331. Label_2:
  332. ! FOR...
  333. !   t12 := &i
  334.     add    %fp,-4,%o0
  335.     st    %o0,[%fp+-68]
  336. !   t9 := 1
  337.     set    1,%o0
  338.     st    %o0,[%fp+-56]
  339. !   t10 := 4
  340.     set    4,%o0
  341.     st    %o0,[%fp+-60]
  342. !   t11 := 1
  343.     set    1,%o0
  344.     st    %o0,[%fp+-64]
  345. !   *t12 := t9
  346.     ld    [%fp+-56],%o0
  347.     ld    [%fp+-68],%o1
  348.     st    %o0,[%o1]
  349. !   Label_5:
  350. Label_5:
  351. !   if t9 > t10 goto Label_6        (integer)
  352.     ld    [%fp+-56],%o0
  353.     ld    [%fp+-60],%o1
  354.     cmp    %o0,%o1
  355.     bg    Label_6
  356.     nop
  357. ! WRITE STMT...
  358. !   writeString str12
  359.     sethi    %hi(str12),%o0
  360.     call    printf
  361.     or    %o0,%lo(str12),%o0
  362. !   writeNewline
  363.     sethi    %hi(strNL),%o0
  364.     call    printf
  365.     or    %o0,%lo(strNL),%o0
  366. ! WRITE STMT...
  367. !   writeString str13
  368.     sethi    %hi(str13),%o0
  369.     call    printf
  370.     or    %o0,%lo(str13),%o0
  371. !   writeNewline
  372.     sethi    %hi(strNL),%o0
  373.     call    printf
  374.     or    %o0,%lo(strNL),%o0
  375. ! FOR...
  376. !   t16 := &j
  377.     add    %fp,-8,%o0
  378.     st    %o0,[%fp+-84]
  379. !   t13 := 1
  380.     set    1,%o0
  381.     st    %o0,[%fp+-72]
  382. !   t14 := 10000000
  383.     set    10000000,%o0
  384.     st    %o0,[%fp+-76]
  385. !   t15 := 1
  386.     set    1,%o0
  387.     st    %o0,[%fp+-80]
  388. !   *t16 := t13
  389.     ld    [%fp+-72],%o0
  390.     ld    [%fp+-84],%o1
  391.     st    %o0,[%o1]
  392. !   Label_7:
  393. Label_7:
  394. !   if t13 > t14 goto Label_8        (integer)
  395.     ld    [%fp+-72],%o0
  396.     ld    [%fp+-76],%o1
  397.     cmp    %o0,%o1
  398.     bg    Label_8
  399.     nop
  400. ! ASSIGNMENT STMT...
  401. !   t17 := y + z        (integer)
  402.     ld    [%fp+-16],%o0
  403.     ld    [%fp+-20],%o1
  404.     add    %o0,%o1,%o1
  405.     st    %o1,[%fp+-88]
  406. !   x := t17
  407.     ld    [%fp+-88],%o0
  408.     st    %o0,[%fp+-12]
  409. ! END FOR...
  410. !   t13 := *t16
  411.     ld    [%fp+-84],%o0
  412.     ld    [%o0],%o0
  413.     st    %o0,[%fp+-72]
  414. !   t13 := t13 + t15        (integer)
  415.     ld    [%fp+-72],%o0
  416.     ld    [%fp+-80],%o1
  417.     add    %o0,%o1,%o1
  418.     st    %o1,[%fp+-72]
  419. !   *t16 := t13
  420.     ld    [%fp+-72],%o0
  421.     ld    [%fp+-84],%o1
  422.     st    %o0,[%o1]
  423. !   goto Label_7
  424.     ba    Label_7
  425.     nop
  426. !   Label_8:
  427. Label_8:
  428. ! WRITE STMT...
  429. !   writeString str14
  430.     sethi    %hi(str14),%o0
  431.     call    printf
  432.     or    %o0,%lo(str14),%o0
  433. !   writeNewline
  434.     sethi    %hi(strNL),%o0
  435.     call    printf
  436.     or    %o0,%lo(strNL),%o0
  437. ! END FOR...
  438. !   t9 := *t12
  439.     ld    [%fp+-68],%o0
  440.     ld    [%o0],%o0
  441.     st    %o0,[%fp+-56]
  442. !   t9 := t9 + t11        (integer)
  443.     ld    [%fp+-56],%o0
  444.     ld    [%fp+-64],%o1
  445.     add    %o0,%o1,%o1
  446.     st    %o1,[%fp+-56]
  447. !   *t12 := t9
  448.     ld    [%fp+-56],%o0
  449.     ld    [%fp+-68],%o1
  450.     st    %o0,[%o1]
  451. !   goto Label_5
  452.     ba    Label_5
  453.     nop
  454. !   Label_6:
  455. Label_6:
  456. ! WRITE STMT...
  457. !   writeString str15
  458.     sethi    %hi(str15),%o0
  459.     call    printf
  460.     or    %o0,%lo(str15),%o0
  461. !   writeNewline
  462.     sethi    %hi(strNL),%o0
  463.     call    printf
  464.     or    %o0,%lo(strNL),%o0
  465. ! FOR...
  466. !   t21 := &i
  467.     add    %fp,-4,%o0
  468.     st    %o0,[%fp+-104]
  469. !   t18 := 1
  470.     set    1,%o0
  471.     st    %o0,[%fp+-92]
  472. !   t19 := 300
  473.     set    300,%o0
  474.     st    %o0,[%fp+-96]
  475. !   t20 := 1
  476.     set    1,%o0
  477.     st    %o0,[%fp+-100]
  478. !   *t21 := t18
  479.     ld    [%fp+-92],%o0
  480.     ld    [%fp+-104],%o1
  481.     st    %o0,[%o1]
  482. !   Label_9:
  483. Label_9:
  484. !   if t18 > t19 goto Label_10        (integer)
  485.     ld    [%fp+-92],%o0
  486.     ld    [%fp+-96],%o1
  487.     cmp    %o0,%o1
  488.     bg    Label_10
  489.     nop
  490. ! WRITE STMT...
  491. !   writeInt i
  492.     ld    [%fp+-4],%o1
  493.     sethi    %hi(strInt),%o0
  494.     call    printf
  495.     or    %o0,%lo(strInt),%o0
  496. !   writeNewline
  497.     sethi    %hi(strNL),%o0
  498.     call    printf
  499.     or    %o0,%lo(strNL),%o0
  500. ! END FOR...
  501. !   t18 := *t21
  502.     ld    [%fp+-104],%o0
  503.     ld    [%o0],%o0
  504.     st    %o0,[%fp+-92]
  505. !   t18 := t18 + t20        (integer)
  506.     ld    [%fp+-92],%o0
  507.     ld    [%fp+-100],%o1
  508.     add    %o0,%o1,%o1
  509.     st    %o1,[%fp+-92]
  510. !   *t21 := t18
  511.     ld    [%fp+-92],%o0
  512.     ld    [%fp+-104],%o1
  513.     st    %o0,[%o1]
  514. !   goto Label_9
  515.     ba    Label_9
  516.     nop
  517. !   Label_10:
  518. Label_10:
  519. ! MAIN EXIT...
  520. !   mainExit
  521.     ret
  522.     restore
  523.