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 / error3.out.bak < prev    next >
Text File  |  2006-03-05  |  6KB  |  267 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. float1:    .single    0r0.0
  104. str11:    .asciz    "Program continuing...and exiting."
  105. str10:    .asciz    "You entered..."
  106. str9:    .asciz    "Please enter a real..."
  107. str8:    .asciz    "You entered..."
  108. str7:    .asciz    "Please enter an integer..."
  109. str6:    .asciz    "  program subsequently aborts."
  110. str5:    .asciz    "  verify that an error message is produced and that the"
  111. str4:    .asciz    "  Please make an error entering one or the other to"
  112. str3:    .asciz    "  Second, it will ask for a real, then print it."
  113. str2:    .asciz    "  First, it will ask for an integer, then print it."
  114. str1:    .asciz    "This program is for testing the read-failed error message."
  115.     .align    8
  116. ! MAIN...
  117. !   mainEntry
  118.     .global    main
  119. main:    save    %sp,-112,%sp
  120.     set    display0,%o0
  121.     st    %fp,[%o0]
  122. ! VAR INITIALIZATION...
  123. !   i := 0
  124.     set    0,%o0
  125.     st    %o0,[%fp+-4]
  126. ! VAR INITIALIZATION...
  127. !   x := 0.0
  128.     set    float1,%o0
  129.     ld    [%o0],%o0
  130.     st    %o0,[%fp+-8]
  131. ! WRITE STMT...
  132. !   writeString str1
  133.     sethi    %hi(str1),%o0
  134.     call    printf
  135.     or    %o0,%lo(str1),%o0
  136. !   writeNewline
  137.     sethi    %hi(strNL),%o0
  138.     call    printf
  139.     or    %o0,%lo(strNL),%o0
  140. ! WRITE STMT...
  141. !   writeString str2
  142.     sethi    %hi(str2),%o0
  143.     call    printf
  144.     or    %o0,%lo(str2),%o0
  145. !   writeNewline
  146.     sethi    %hi(strNL),%o0
  147.     call    printf
  148.     or    %o0,%lo(strNL),%o0
  149. ! WRITE STMT...
  150. !   writeString str3
  151.     sethi    %hi(str3),%o0
  152.     call    printf
  153.     or    %o0,%lo(str3),%o0
  154. !   writeNewline
  155.     sethi    %hi(strNL),%o0
  156.     call    printf
  157.     or    %o0,%lo(strNL),%o0
  158. ! WRITE STMT...
  159. !   writeString str4
  160.     sethi    %hi(str4),%o0
  161.     call    printf
  162.     or    %o0,%lo(str4),%o0
  163. !   writeNewline
  164.     sethi    %hi(strNL),%o0
  165.     call    printf
  166.     or    %o0,%lo(strNL),%o0
  167. ! WRITE STMT...
  168. !   writeString str5
  169.     sethi    %hi(str5),%o0
  170.     call    printf
  171.     or    %o0,%lo(str5),%o0
  172. !   writeNewline
  173.     sethi    %hi(strNL),%o0
  174.     call    printf
  175.     or    %o0,%lo(strNL),%o0
  176. ! WRITE STMT...
  177. !   writeString str6
  178.     sethi    %hi(str6),%o0
  179.     call    printf
  180.     or    %o0,%lo(str6),%o0
  181. !   writeNewline
  182.     sethi    %hi(strNL),%o0
  183.     call    printf
  184.     or    %o0,%lo(strNL),%o0
  185. ! WRITE STMT...
  186. !   writeString str7
  187.     sethi    %hi(str7),%o0
  188.     call    printf
  189.     or    %o0,%lo(str7),%o0
  190. !   writeNewline
  191.     sethi    %hi(strNL),%o0
  192.     call    printf
  193.     or    %o0,%lo(strNL),%o0
  194. ! READ STMT...
  195. !   t1 := &i
  196.     add    %fp,-4,%o0
  197.     st    %o0,[%fp+-12]
  198. !   readInt t1
  199.     ld    [%fp+-12],%o1
  200.     sethi    %hi(strInt),%o0
  201.     call    scanf
  202.     or    %o0,%lo(strInt),%o0
  203.     cmp    %o0,0
  204.     be    runtimeError3
  205.     nop
  206. ! WRITE STMT...
  207. !   writeString str8
  208.     sethi    %hi(str8),%o0
  209.     call    printf
  210.     or    %o0,%lo(str8),%o0
  211. !   writeInt i
  212.     ld    [%fp+-4],%o1
  213.     sethi    %hi(strInt),%o0
  214.     call    printf
  215.     or    %o0,%lo(strInt),%o0
  216. !   writeNewline
  217.     sethi    %hi(strNL),%o0
  218.     call    printf
  219.     or    %o0,%lo(strNL),%o0
  220. ! WRITE STMT...
  221. !   writeString str9
  222.     sethi    %hi(str9),%o0
  223.     call    printf
  224.     or    %o0,%lo(str9),%o0
  225. !   writeNewline
  226.     sethi    %hi(strNL),%o0
  227.     call    printf
  228.     or    %o0,%lo(strNL),%o0
  229. ! READ STMT...
  230. !   t2 := &x
  231.     add    %fp,-8,%o0
  232.     st    %o0,[%fp+-16]
  233. !   readFloat t2
  234.     ld    [%fp+-16],%o1
  235.     sethi    %hi(strFlt),%o0
  236.     call    scanf
  237.     or    %o0,%lo(strFlt),%o0
  238.     cmp    %o0,0
  239.     be    runtimeError3
  240.     nop
  241. ! WRITE STMT...
  242. !   writeString str10
  243.     sethi    %hi(str10),%o0
  244.     call    printf
  245.     or    %o0,%lo(str10),%o0
  246. !   writeFloat x
  247.     ld    [%fp+-8],%f0
  248.     call    writeFlt
  249.     nop
  250. !   writeNewline
  251.     sethi    %hi(strNL),%o0
  252.     call    printf
  253.     or    %o0,%lo(strNL),%o0
  254. ! WRITE STMT...
  255. !   writeString str11
  256.     sethi    %hi(str11),%o0
  257.     call    printf
  258.     or    %o0,%lo(str11),%o0
  259. !   writeNewline
  260.     sethi    %hi(strNL),%o0
  261.     call    printf
  262.     or    %o0,%lo(strNL),%o0
  263. ! MAIN EXIT...
  264. !   mainExit
  265.     ret
  266.     restore
  267.