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