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 / write.out.bak < prev    next >
Text File  |  2006-03-05  |  7KB  |  362 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    0r0.0
  104. float2:    .single    0r123.456
  105. float1:    .single    0r654.321
  106. str14:    .asciz    "Test complete!"
  107. str13:    .asciz    ", b2 = "
  108. str12:    .asciz    "b1 = "
  109. str11:    .asciz    "Should print b1 = FALSE, b2 = TRUE..."
  110. str10:    .asciz    "Should print 4321..."
  111. str9:    .asciz    "Should print 654.321..."
  112. str8:    .asciz    "Test printing variables..."
  113. str7:    .asciz    "Should print FALSE..."
  114. str6:    .asciz    "Should print TRUE..."
  115. str5:    .asciz    "Should print 0..."
  116. str4:    .asciz    "Should print 123.456..."
  117. str3:    .asciz    "Should print 1234..."
  118. str2:    .asciz    "Should print 1234..."
  119. str1:    .asciz    "Test printing constants..."
  120.     .align    8
  121. ! MAIN...
  122. !   mainEntry
  123.     .global    main
  124. main:    save    %sp,-120,%sp
  125.     set    display0,%o0
  126.     st    %fp,[%o0]
  127. ! VAR INITIALIZATION...
  128. !   i := 4321
  129.     set    4321,%o0
  130.     st    %o0,[%fp+-4]
  131. ! VAR INITIALIZATION...
  132. !   j := i
  133.     ld    [%fp+-4],%o0
  134.     st    %o0,[%fp+-8]
  135. ! VAR INITIALIZATION...
  136. !   k := i
  137.     ld    [%fp+-4],%o0
  138.     st    %o0,[%fp+-12]
  139. ! VAR INITIALIZATION...
  140. !   x := 654.321
  141.     set    float1,%o0
  142.     ld    [%o0],%o0
  143.     st    %o0,[%fp+-16]
  144. ! VAR INITIALIZATION...
  145. !   b1 := 0
  146.     set    0,%o0
  147.     st    %o0,[%fp+-20]
  148. ! VAR INITIALIZATION...
  149. !   b2 := 1
  150.     set    1,%o0
  151.     st    %o0,[%fp+-24]
  152. ! WRITE STMT...
  153. !   writeString str1
  154.     sethi    %hi(str1),%o0
  155.     call    printf
  156.     or    %o0,%lo(str1),%o0
  157. !   writeNewline
  158.     sethi    %hi(strNL),%o0
  159.     call    printf
  160.     or    %o0,%lo(strNL),%o0
  161. ! WRITE STMT...
  162. !   writeString str2
  163.     sethi    %hi(str2),%o0
  164.     call    printf
  165.     or    %o0,%lo(str2),%o0
  166. !   writeNewline
  167.     sethi    %hi(strNL),%o0
  168.     call    printf
  169.     or    %o0,%lo(strNL),%o0
  170. ! WRITE STMT...
  171. !   writeInt 1234
  172.     set    1234,%o1
  173.     sethi    %hi(strInt),%o0
  174.     call    printf
  175.     or    %o0,%lo(strInt),%o0
  176. !   writeNewline
  177.     sethi    %hi(strNL),%o0
  178.     call    printf
  179.     or    %o0,%lo(strNL),%o0
  180. ! WRITE STMT...
  181. !   writeString str3
  182.     sethi    %hi(str3),%o0
  183.     call    printf
  184.     or    %o0,%lo(str3),%o0
  185. !   writeNewline
  186.     sethi    %hi(strNL),%o0
  187.     call    printf
  188.     or    %o0,%lo(strNL),%o0
  189. ! WRITE STMT...
  190. !   writeInt 1234
  191.     set    1234,%o1
  192.     sethi    %hi(strInt),%o0
  193.     call    printf
  194.     or    %o0,%lo(strInt),%o0
  195. !   writeNewline
  196.     sethi    %hi(strNL),%o0
  197.     call    printf
  198.     or    %o0,%lo(strNL),%o0
  199. ! WRITE STMT...
  200. !   writeString str4
  201.     sethi    %hi(str4),%o0
  202.     call    printf
  203.     or    %o0,%lo(str4),%o0
  204. !   writeNewline
  205.     sethi    %hi(strNL),%o0
  206.     call    printf
  207.     or    %o0,%lo(strNL),%o0
  208. ! WRITE STMT...
  209. !   writeFloat 123.456
  210.     set    float2,%o1
  211.     ld    [%o1],%f0
  212.     call    writeFlt
  213.     nop
  214. !   writeNewline
  215.     sethi    %hi(strNL),%o0
  216.     call    printf
  217.     or    %o0,%lo(strNL),%o0
  218. ! WRITE STMT...
  219. !   writeString str5
  220.     sethi    %hi(str5),%o0
  221.     call    printf
  222.     or    %o0,%lo(str5),%o0
  223. !   writeNewline
  224.     sethi    %hi(strNL),%o0
  225.     call    printf
  226.     or    %o0,%lo(strNL),%o0
  227. ! WRITE STMT...
  228. !   writeFloat 0.0
  229.     set    float3,%o1
  230.     ld    [%o1],%f0
  231.     call    writeFlt
  232.     nop
  233. !   writeNewline
  234.     sethi    %hi(strNL),%o0
  235.     call    printf
  236.     or    %o0,%lo(strNL),%o0
  237. ! WRITE STMT...
  238. !   writeString str6
  239.     sethi    %hi(str6),%o0
  240.     call    printf
  241.     or    %o0,%lo(str6),%o0
  242. !   writeNewline
  243.     sethi    %hi(strNL),%o0
  244.     call    printf
  245.     or    %o0,%lo(strNL),%o0
  246. ! WRITE STMT...
  247. !   writeBoolean 1
  248.     set    1,%o0
  249.     call    writeBool
  250.     nop
  251. !   writeNewline
  252.     sethi    %hi(strNL),%o0
  253.     call    printf
  254.     or    %o0,%lo(strNL),%o0
  255. ! WRITE STMT...
  256. !   writeString str7
  257.     sethi    %hi(str7),%o0
  258.     call    printf
  259.     or    %o0,%lo(str7),%o0
  260. !   writeNewline
  261.     sethi    %hi(strNL),%o0
  262.     call    printf
  263.     or    %o0,%lo(strNL),%o0
  264. ! WRITE STMT...
  265. !   writeBoolean 0
  266.     set    0,%o0
  267.     call    writeBool
  268.     nop
  269. !   writeNewline
  270.     sethi    %hi(strNL),%o0
  271.     call    printf
  272.     or    %o0,%lo(strNL),%o0
  273. ! WRITE STMT...
  274. !   writeString str8
  275.     sethi    %hi(str8),%o0
  276.     call    printf
  277.     or    %o0,%lo(str8),%o0
  278. !   writeNewline
  279.     sethi    %hi(strNL),%o0
  280.     call    printf
  281.     or    %o0,%lo(strNL),%o0
  282. ! WRITE STMT...
  283. !   writeString str9
  284.     sethi    %hi(str9),%o0
  285.     call    printf
  286.     or    %o0,%lo(str9),%o0
  287. !   writeNewline
  288.     sethi    %hi(strNL),%o0
  289.     call    printf
  290.     or    %o0,%lo(strNL),%o0
  291. ! WRITE STMT...
  292. !   writeFloat x
  293.     ld    [%fp+-16],%f0
  294.     call    writeFlt
  295.     nop
  296. !   writeNewline
  297.     sethi    %hi(strNL),%o0
  298.     call    printf
  299.     or    %o0,%lo(strNL),%o0
  300. ! WRITE STMT...
  301. !   writeString str10
  302.     sethi    %hi(str10),%o0
  303.     call    printf
  304.     or    %o0,%lo(str10),%o0
  305. !   writeNewline
  306.     sethi    %hi(strNL),%o0
  307.     call    printf
  308.     or    %o0,%lo(strNL),%o0
  309. ! WRITE STMT...
  310. !   writeInt i
  311.     ld    [%fp+-4],%o1
  312.     sethi    %hi(strInt),%o0
  313.     call    printf
  314.     or    %o0,%lo(strInt),%o0
  315. !   writeNewline
  316.     sethi    %hi(strNL),%o0
  317.     call    printf
  318.     or    %o0,%lo(strNL),%o0
  319. ! WRITE STMT...
  320. !   writeString str11
  321.     sethi    %hi(str11),%o0
  322.     call    printf
  323.     or    %o0,%lo(str11),%o0
  324. !   writeNewline
  325.     sethi    %hi(strNL),%o0
  326.     call    printf
  327.     or    %o0,%lo(strNL),%o0
  328. ! WRITE STMT...
  329. !   writeString str12
  330.     sethi    %hi(str12),%o0
  331.     call    printf
  332.     or    %o0,%lo(str12),%o0
  333. !   writeBoolean b1
  334.     ld    [%fp+-20],%o0
  335.     call    writeBool
  336.     nop
  337. !   writeString str13
  338.     sethi    %hi(str13),%o0
  339.     call    printf
  340.     or    %o0,%lo(str13),%o0
  341. !   writeBoolean b2
  342.     ld    [%fp+-24],%o0
  343.     call    writeBool
  344.     nop
  345. !   writeNewline
  346.     sethi    %hi(strNL),%o0
  347.     call    printf
  348.     or    %o0,%lo(strNL),%o0
  349. ! WRITE STMT...
  350. !   writeString str14
  351.     sethi    %hi(str14),%o0
  352.     call    printf
  353.     or    %o0,%lo(str14),%o0
  354. !   writeNewline
  355.     sethi    %hi(strNL),%o0
  356.     call    printf
  357.     or    %o0,%lo(strNL),%o0
  358. ! MAIN EXIT...
  359. !   mainExit
  360.     ret
  361.     restore
  362.