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 / read2.out.bak < prev    next >
Text File  |  2006-03-05  |  10KB  |  531 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. display1:    .word    0
  103.     .text
  104. str18:    .asciz    "i3 = "
  105. str17:    .asciz    "i2 = "
  106. str16:    .asciz    "i1 = "
  107. str15:    .asciz    "PLEASE ENTER 3 REALS:"
  108. str14:    .asciz    "About to call readFloat (i1, i2, i3)..."
  109. str13:    .asciz    "j3 = "
  110. str12:    .asciz    "j2 = "
  111. str11:    .asciz    "j1 = "
  112. str10:    .asciz    "PLEASE ENTER 3 REALS:"
  113. str9:    .asciz    "About to call readFloat (j1, j2, j3)..."
  114. str8:    .asciz    "i3 = "
  115. str7:    .asciz    "i2 = "
  116. str6:    .asciz    "i1 = "
  117. str5:    .asciz    "PLEASE ENTER 3 REALS:"
  118. str4:    .asciz    "About to call readFloat (i1, i2, i3)..."
  119. str3:    .asciz    "i1 = "
  120. str2:    .asciz    "PLEASE ENTER AN REAL:"
  121. str1:    .asciz    "About to call readFloat (i1)..."
  122.     .align    8
  123. ! MAIN...
  124. !   mainEntry
  125.     .global    main
  126. main:    save    %sp,-136,%sp
  127.     set    display0,%o0
  128.     st    %fp,[%o0]
  129. ! VAR INITIALIZATION...
  130. !   t1 := intToFloat (0)
  131.     set    0,%o0
  132.     set    temp,%o1
  133.     st    %o0,[%o1]
  134.     ld    [%o1],%f0
  135.     fitos    %f0,%f0
  136.     st    %f0,[%fp+-16]
  137. !   i1 := t1
  138.     ld    [%fp+-16],%o0
  139.     st    %o0,[%fp+-4]
  140. ! VAR INITIALIZATION...
  141. !   i2 := i1
  142.     ld    [%fp+-4],%o0
  143.     st    %o0,[%fp+-8]
  144. ! VAR INITIALIZATION...
  145. !   i3 := i1
  146.     ld    [%fp+-4],%o0
  147.     st    %o0,[%fp+-12]
  148. ! WRITE STMT...
  149. !   writeString str1
  150.     sethi    %hi(str1),%o0
  151.     call    printf
  152.     or    %o0,%lo(str1),%o0
  153. !   writeNewline
  154.     sethi    %hi(strNL),%o0
  155.     call    printf
  156.     or    %o0,%lo(strNL),%o0
  157. ! WRITE STMT...
  158. !   writeString str2
  159.     sethi    %hi(str2),%o0
  160.     call    printf
  161.     or    %o0,%lo(str2),%o0
  162. !   writeNewline
  163.     sethi    %hi(strNL),%o0
  164.     call    printf
  165.     or    %o0,%lo(strNL),%o0
  166. ! READ STMT...
  167. !   t2 := &i1
  168.     add    %fp,-4,%o0
  169.     st    %o0,[%fp+-20]
  170. !   readFloat t2
  171.     ld    [%fp+-20],%o1
  172.     sethi    %hi(strFlt),%o0
  173.     call    scanf
  174.     or    %o0,%lo(strFlt),%o0
  175.     cmp    %o0,0
  176.     be    runtimeError3
  177.     nop
  178. ! WRITE STMT...
  179. !   writeString str3
  180.     sethi    %hi(str3),%o0
  181.     call    printf
  182.     or    %o0,%lo(str3),%o0
  183. !   writeFloat i1
  184.     ld    [%fp+-4],%f0
  185.     call    writeFlt
  186.     nop
  187. !   writeNewline
  188.     sethi    %hi(strNL),%o0
  189.     call    printf
  190.     or    %o0,%lo(strNL),%o0
  191. ! WRITE STMT...
  192. !   writeString str4
  193.     sethi    %hi(str4),%o0
  194.     call    printf
  195.     or    %o0,%lo(str4),%o0
  196. !   writeNewline
  197.     sethi    %hi(strNL),%o0
  198.     call    printf
  199.     or    %o0,%lo(strNL),%o0
  200. ! WRITE STMT...
  201. !   writeString str5
  202.     sethi    %hi(str5),%o0
  203.     call    printf
  204.     or    %o0,%lo(str5),%o0
  205. !   writeNewline
  206.     sethi    %hi(strNL),%o0
  207.     call    printf
  208.     or    %o0,%lo(strNL),%o0
  209. ! READ STMT...
  210. !   t3 := &i1
  211.     add    %fp,-4,%o0
  212.     st    %o0,[%fp+-24]
  213. !   readFloat t3
  214.     ld    [%fp+-24],%o1
  215.     sethi    %hi(strFlt),%o0
  216.     call    scanf
  217.     or    %o0,%lo(strFlt),%o0
  218.     cmp    %o0,0
  219.     be    runtimeError3
  220.     nop
  221. !   t4 := &i2
  222.     add    %fp,-8,%o0
  223.     st    %o0,[%fp+-28]
  224. !   readFloat t4
  225.     ld    [%fp+-28],%o1
  226.     sethi    %hi(strFlt),%o0
  227.     call    scanf
  228.     or    %o0,%lo(strFlt),%o0
  229.     cmp    %o0,0
  230.     be    runtimeError3
  231.     nop
  232. !   t5 := &i3
  233.     add    %fp,-12,%o0
  234.     st    %o0,[%fp+-32]
  235. !   readFloat t5
  236.     ld    [%fp+-32],%o1
  237.     sethi    %hi(strFlt),%o0
  238.     call    scanf
  239.     or    %o0,%lo(strFlt),%o0
  240.     cmp    %o0,0
  241.     be    runtimeError3
  242.     nop
  243. ! WRITE STMT...
  244. !   writeString str6
  245.     sethi    %hi(str6),%o0
  246.     call    printf
  247.     or    %o0,%lo(str6),%o0
  248. !   writeFloat i1
  249.     ld    [%fp+-4],%f0
  250.     call    writeFlt
  251.     nop
  252. !   writeNewline
  253.     sethi    %hi(strNL),%o0
  254.     call    printf
  255.     or    %o0,%lo(strNL),%o0
  256. ! WRITE STMT...
  257. !   writeString str7
  258.     sethi    %hi(str7),%o0
  259.     call    printf
  260.     or    %o0,%lo(str7),%o0
  261. !   writeFloat i2
  262.     ld    [%fp+-8],%f0
  263.     call    writeFlt
  264.     nop
  265. !   writeNewline
  266.     sethi    %hi(strNL),%o0
  267.     call    printf
  268.     or    %o0,%lo(strNL),%o0
  269. ! WRITE STMT...
  270. !   writeString str8
  271.     sethi    %hi(str8),%o0
  272.     call    printf
  273.     or    %o0,%lo(str8),%o0
  274. !   writeFloat i3
  275.     ld    [%fp+-12],%f0
  276.     call    writeFlt
  277.     nop
  278. !   writeNewline
  279.     sethi    %hi(strNL),%o0
  280.     call    printf
  281.     or    %o0,%lo(strNL),%o0
  282. ! CALL STMT...
  283. !   t6 := intToFloat (1)
  284.     set    1,%o0
  285.     set    temp,%o1
  286.     st    %o0,[%o1]
  287.     ld    [%o1],%f0
  288.     fitos    %f0,%f0
  289.     st    %f0,[%fp+-36]
  290. !   t7 := intToFloat (2)
  291.     set    2,%o0
  292.     set    temp,%o1
  293.     st    %o0,[%o1]
  294.     ld    [%o1],%f0
  295.     fitos    %f0,%f0
  296.     st    %f0,[%fp+-40]
  297. !   t8 := intToFloat (3)
  298.     set    3,%o0
  299.     set    temp,%o1
  300.     st    %o0,[%o1]
  301.     ld    [%o1],%f0
  302.     fitos    %f0,%f0
  303.     st    %f0,[%fp+-44]
  304. !   param 1,t6
  305.     ld    [%fp+-36],%o0
  306.     st    %o0,[%sp+68]
  307. !   param 2,t7
  308.     ld    [%fp+-40],%o0
  309.     st    %o0,[%sp+72]
  310. !   param 3,t8
  311.     ld    [%fp+-44],%o0
  312.     st    %o0,[%sp+76]
  313. !   call p1_foo
  314.     call    p1_foo
  315.     nop
  316. ! MAIN EXIT...
  317. !   mainExit
  318.     ret
  319.     restore
  320. ! PROCEDURE...
  321. !   procEntry p1_foo,lexLev=1,frameSize=120
  322. p1_foo:    save    %sp,-120,%sp
  323.     set    display1,%o0
  324.     ld    [%o0],%o1
  325.     st    %o1,[%fp+64]
  326.     st    %fp,[%o0]
  327. !   formal 1,j1
  328. !   formal 2,j2
  329. !   formal 3,j3
  330. ! WRITE STMT...
  331. !   writeString str9
  332.     sethi    %hi(str9),%o0
  333.     call    printf
  334.     or    %o0,%lo(str9),%o0
  335. !   writeNewline
  336.     sethi    %hi(strNL),%o0
  337.     call    printf
  338.     or    %o0,%lo(strNL),%o0
  339. ! WRITE STMT...
  340. !   writeString str10
  341.     sethi    %hi(str10),%o0
  342.     call    printf
  343.     or    %o0,%lo(str10),%o0
  344. !   writeNewline
  345.     sethi    %hi(strNL),%o0
  346.     call    printf
  347.     or    %o0,%lo(strNL),%o0
  348. ! READ STMT...
  349. !   t9 := &j1
  350.     add    %fp,68,%o0
  351.     st    %o0,[%fp+-4]
  352. !   readFloat t9
  353.     ld    [%fp+-4],%o1
  354.     sethi    %hi(strFlt),%o0
  355.     call    scanf
  356.     or    %o0,%lo(strFlt),%o0
  357.     cmp    %o0,0
  358.     be    runtimeError3
  359.     nop
  360. !   t10 := &j2
  361.     add    %fp,72,%o0
  362.     st    %o0,[%fp+-8]
  363. !   readFloat t10
  364.     ld    [%fp+-8],%o1
  365.     sethi    %hi(strFlt),%o0
  366.     call    scanf
  367.     or    %o0,%lo(strFlt),%o0
  368.     cmp    %o0,0
  369.     be    runtimeError3
  370.     nop
  371. !   t11 := &j3
  372.     add    %fp,76,%o0
  373.     st    %o0,[%fp+-12]
  374. !   readFloat t11
  375.     ld    [%fp+-12],%o1
  376.     sethi    %hi(strFlt),%o0
  377.     call    scanf
  378.     or    %o0,%lo(strFlt),%o0
  379.     cmp    %o0,0
  380.     be    runtimeError3
  381.     nop
  382. ! WRITE STMT...
  383. !   writeString str11
  384.     sethi    %hi(str11),%o0
  385.     call    printf
  386.     or    %o0,%lo(str11),%o0
  387. !   writeFloat j1
  388.     ld    [%fp+68],%f0
  389.     call    writeFlt
  390.     nop
  391. !   writeNewline
  392.     sethi    %hi(strNL),%o0
  393.     call    printf
  394.     or    %o0,%lo(strNL),%o0
  395. ! WRITE STMT...
  396. !   writeString str12
  397.     sethi    %hi(str12),%o0
  398.     call    printf
  399.     or    %o0,%lo(str12),%o0
  400. !   writeFloat j2
  401.     ld    [%fp+72],%f0
  402.     call    writeFlt
  403.     nop
  404. !   writeNewline
  405.     sethi    %hi(strNL),%o0
  406.     call    printf
  407.     or    %o0,%lo(strNL),%o0
  408. ! WRITE STMT...
  409. !   writeString str13
  410.     sethi    %hi(str13),%o0
  411.     call    printf
  412.     or    %o0,%lo(str13),%o0
  413. !   writeFloat j3
  414.     ld    [%fp+76],%f0
  415.     call    writeFlt
  416.     nop
  417. !   writeNewline
  418.     sethi    %hi(strNL),%o0
  419.     call    printf
  420.     or    %o0,%lo(strNL),%o0
  421. ! WRITE STMT...
  422. !   writeString str14
  423.     sethi    %hi(str14),%o0
  424.     call    printf
  425.     or    %o0,%lo(str14),%o0
  426. !   writeNewline
  427.     sethi    %hi(strNL),%o0
  428.     call    printf
  429.     or    %o0,%lo(strNL),%o0
  430. ! WRITE STMT...
  431. !   writeString str15
  432.     sethi    %hi(str15),%o0
  433.     call    printf
  434.     or    %o0,%lo(str15),%o0
  435. !   writeNewline
  436.     sethi    %hi(strNL),%o0
  437.     call    printf
  438.     or    %o0,%lo(strNL),%o0
  439. ! READ STMT...
  440. !   t12 := &i1
  441.     set    display0,%o0
  442.     ld    [%o0],%o0
  443.     add    %o0,-4,%o0
  444.     st    %o0,[%fp+-16]
  445. !   readFloat t12
  446.     ld    [%fp+-16],%o1
  447.     sethi    %hi(strFlt),%o0
  448.     call    scanf
  449.     or    %o0,%lo(strFlt),%o0
  450.     cmp    %o0,0
  451.     be    runtimeError3
  452.     nop
  453. !   t13 := &i2
  454.     set    display0,%o0
  455.     ld    [%o0],%o0
  456.     add    %o0,-8,%o0
  457.     st    %o0,[%fp+-20]
  458. !   readFloat t13
  459.     ld    [%fp+-20],%o1
  460.     sethi    %hi(strFlt),%o0
  461.     call    scanf
  462.     or    %o0,%lo(strFlt),%o0
  463.     cmp    %o0,0
  464.     be    runtimeError3
  465.     nop
  466. !   t14 := &i3
  467.     set    display0,%o0
  468.     ld    [%o0],%o0
  469.     add    %o0,-12,%o0
  470.     st    %o0,[%fp+-24]
  471. !   readFloat t14
  472.     ld    [%fp+-24],%o1
  473.     sethi    %hi(strFlt),%o0
  474.     call    scanf
  475.     or    %o0,%lo(strFlt),%o0
  476.     cmp    %o0,0
  477.     be    runtimeError3
  478.     nop
  479. ! WRITE STMT...
  480. !   writeString str16
  481.     sethi    %hi(str16),%o0
  482.     call    printf
  483.     or    %o0,%lo(str16),%o0
  484. !   writeFloat i1
  485.     set    display0,%o1
  486.     ld    [%o1],%o1
  487.     ld    [%o1+-4],%f0
  488.     call    writeFlt
  489.     nop
  490. !   writeNewline
  491.     sethi    %hi(strNL),%o0
  492.     call    printf
  493.     or    %o0,%lo(strNL),%o0
  494. ! WRITE STMT...
  495. !   writeString str17
  496.     sethi    %hi(str17),%o0
  497.     call    printf
  498.     or    %o0,%lo(str17),%o0
  499. !   writeFloat i2
  500.     set    display0,%o1
  501.     ld    [%o1],%o1
  502.     ld    [%o1+-8],%f0
  503.     call    writeFlt
  504.     nop
  505. !   writeNewline
  506.     sethi    %hi(strNL),%o0
  507.     call    printf
  508.     or    %o0,%lo(strNL),%o0
  509. ! WRITE STMT...
  510. !   writeString str18
  511.     sethi    %hi(str18),%o0
  512.     call    printf
  513.     or    %o0,%lo(str18),%o0
  514. !   writeFloat i3
  515.     set    display0,%o1
  516.     ld    [%o1],%o1
  517.     ld    [%o1+-12],%f0
  518.     call    writeFlt
  519.     nop
  520. !   writeNewline
  521.     sethi    %hi(strNL),%o0
  522.     call    printf
  523.     or    %o0,%lo(strNL),%o0
  524. ! RETURN...
  525. !   returnVoid
  526.     set    display1,%o0
  527.     ld    [%fp+64],%o1
  528.     st    %o1,[%o0]
  529.     ret
  530.     restore
  531.