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 / binary2.out.bak < prev    next >
Text File  |  2006-03-05  |  6KB  |  308 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. float3:    .single    0r4.4
  104. float2:    .single    0r3.3
  105. float1:    .single    0r0.0
  106. str7:    .asciz    "3.3 / 4.4 = "
  107. str6:    .asciz    "3.3 * 4.4 = "
  108. str5:    .asciz    "3.3 - 4.4 = "
  109. str4:    .asciz    "3.3 + 4.4 = "
  110. str3:    .asciz    "3 * 4 = "
  111. str2:    .asciz    "3 - 4 = "
  112. str1:    .asciz    "3 + 4 = "
  113.     .align    8
  114. ! MAIN...
  115. !   mainEntry
  116.     .global    main
  117. main:    save    %sp,-144,%sp
  118.     set    display0,%o0
  119.     st    %fp,[%o0]
  120. ! VAR INITIALIZATION...
  121. !   x := 0
  122.     set    0,%o0
  123.     st    %o0,[%fp+-4]
  124. ! VAR INITIALIZATION...
  125. !   y := 3
  126.     set    3,%o0
  127.     st    %o0,[%fp+-8]
  128. ! VAR INITIALIZATION...
  129. !   z := 4
  130.     set    4,%o0
  131.     st    %o0,[%fp+-12]
  132. ! VAR INITIALIZATION...
  133. !   a := 0.0
  134.     set    float1,%o0
  135.     ld    [%o0],%o0
  136.     st    %o0,[%fp+-16]
  137. ! VAR INITIALIZATION...
  138. !   b := 3.3
  139.     set    float2,%o0
  140.     ld    [%o0],%o0
  141.     st    %o0,[%fp+-20]
  142. ! VAR INITIALIZATION...
  143. !   c := 4.4
  144.     set    float3,%o0
  145.     ld    [%o0],%o0
  146.     st    %o0,[%fp+-24]
  147. ! ASSIGNMENT STMT...
  148. !   t1 := y + z        (integer)
  149.     ld    [%fp+-8],%o0
  150.     ld    [%fp+-12],%o1
  151.     add    %o0,%o1,%o1
  152.     st    %o1,[%fp+-28]
  153. !   x := t1
  154.     ld    [%fp+-28],%o0
  155.     st    %o0,[%fp+-4]
  156. ! WRITE STMT...
  157. !   writeString str1
  158.     sethi    %hi(str1),%o0
  159.     call    printf
  160.     or    %o0,%lo(str1),%o0
  161. !   writeInt x
  162.     ld    [%fp+-4],%o1
  163.     sethi    %hi(strInt),%o0
  164.     call    printf
  165.     or    %o0,%lo(strInt),%o0
  166. !   writeNewline
  167.     sethi    %hi(strNL),%o0
  168.     call    printf
  169.     or    %o0,%lo(strNL),%o0
  170. ! ASSIGNMENT STMT...
  171. !   t2 := y - z        (integer)
  172.     ld    [%fp+-8],%o0
  173.     ld    [%fp+-12],%o1
  174.     sub    %o0,%o1,%o1
  175.     st    %o1,[%fp+-32]
  176. !   x := t2
  177.     ld    [%fp+-32],%o0
  178.     st    %o0,[%fp+-4]
  179. ! WRITE STMT...
  180. !   writeString str2
  181.     sethi    %hi(str2),%o0
  182.     call    printf
  183.     or    %o0,%lo(str2),%o0
  184. !   writeInt x
  185.     ld    [%fp+-4],%o1
  186.     sethi    %hi(strInt),%o0
  187.     call    printf
  188.     or    %o0,%lo(strInt),%o0
  189. !   writeNewline
  190.     sethi    %hi(strNL),%o0
  191.     call    printf
  192.     or    %o0,%lo(strNL),%o0
  193. ! ASSIGNMENT STMT...
  194. !   t3 := y * z        (integer)
  195.     ld    [%fp+-8],%o0
  196.     ld    [%fp+-12],%o1
  197.     smul    %o0,%o1,%o1
  198.     st    %o1,[%fp+-36]
  199. !   x := t3
  200.     ld    [%fp+-36],%o0
  201.     st    %o0,[%fp+-4]
  202. ! WRITE STMT...
  203. !   writeString str3
  204.     sethi    %hi(str3),%o0
  205.     call    printf
  206.     or    %o0,%lo(str3),%o0
  207. !   writeInt x
  208.     ld    [%fp+-4],%o1
  209.     sethi    %hi(strInt),%o0
  210.     call    printf
  211.     or    %o0,%lo(strInt),%o0
  212. !   writeNewline
  213.     sethi    %hi(strNL),%o0
  214.     call    printf
  215.     or    %o0,%lo(strNL),%o0
  216. ! ASSIGNMENT STMT...
  217. !   t4 := b + c        (float)
  218.     ld    [%fp+-20],%f0
  219.     ld    [%fp+-24],%f1
  220.     fadds    %f0,%f1,%f1
  221.     st    %f1,[%fp+-40]
  222. !   a := t4
  223.     ld    [%fp+-40],%o0
  224.     st    %o0,[%fp+-16]
  225. ! WRITE STMT...
  226. !   writeString str4
  227.     sethi    %hi(str4),%o0
  228.     call    printf
  229.     or    %o0,%lo(str4),%o0
  230. !   writeFloat a
  231.     ld    [%fp+-16],%f0
  232.     call    writeFlt
  233.     nop
  234. !   writeNewline
  235.     sethi    %hi(strNL),%o0
  236.     call    printf
  237.     or    %o0,%lo(strNL),%o0
  238. ! ASSIGNMENT STMT...
  239. !   t5 := b - c        (float)
  240.     ld    [%fp+-20],%f0
  241.     ld    [%fp+-24],%f1
  242.     fsubs    %f0,%f1,%f1
  243.     st    %f1,[%fp+-44]
  244. !   a := t5
  245.     ld    [%fp+-44],%o0
  246.     st    %o0,[%fp+-16]
  247. ! WRITE STMT...
  248. !   writeString str5
  249.     sethi    %hi(str5),%o0
  250.     call    printf
  251.     or    %o0,%lo(str5),%o0
  252. !   writeFloat a
  253.     ld    [%fp+-16],%f0
  254.     call    writeFlt
  255.     nop
  256. !   writeNewline
  257.     sethi    %hi(strNL),%o0
  258.     call    printf
  259.     or    %o0,%lo(strNL),%o0
  260. ! ASSIGNMENT STMT...
  261. !   t6 := b * c        (float)
  262.     ld    [%fp+-20],%f0
  263.     ld    [%fp+-24],%f1
  264.     fmuls    %f0,%f1,%f1
  265.     st    %f1,[%fp+-48]
  266. !   a := t6
  267.     ld    [%fp+-48],%o0
  268.     st    %o0,[%fp+-16]
  269. ! WRITE STMT...
  270. !   writeString str6
  271.     sethi    %hi(str6),%o0
  272.     call    printf
  273.     or    %o0,%lo(str6),%o0
  274. !   writeFloat a
  275.     ld    [%fp+-16],%f0
  276.     call    writeFlt
  277.     nop
  278. !   writeNewline
  279.     sethi    %hi(strNL),%o0
  280.     call    printf
  281.     or    %o0,%lo(strNL),%o0
  282. ! ASSIGNMENT STMT...
  283. !   t7 := b / c        (float)
  284.     ld    [%fp+-20],%f0
  285.     ld    [%fp+-24],%f1
  286.     fdivs    %f0,%f1,%f1
  287.     st    %f1,[%fp+-52]
  288. !   a := t7
  289.     ld    [%fp+-52],%o0
  290.     st    %o0,[%fp+-16]
  291. ! WRITE STMT...
  292. !   writeString str7
  293.     sethi    %hi(str7),%o0
  294.     call    printf
  295.     or    %o0,%lo(str7),%o0
  296. !   writeFloat a
  297.     ld    [%fp+-16],%f0
  298.     call    writeFlt
  299.     nop
  300. !   writeNewline
  301.     sethi    %hi(strNL),%o0
  302.     call    printf
  303.     or    %o0,%lo(strNL),%o0
  304. ! MAIN EXIT...
  305. !   mainExit
  306.     ret
  307.     restore
  308.