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 / param3.out.bak < prev    next >
Text File  |  2006-03-05  |  12KB  |  612 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. display2:    .word    0
  104.     .text
  105. str32:    .asciz    "   Leaving foo2"
  106. str31:    .asciz    ", z1="
  107. str30:    .asciz    ", y1="
  108. str29:    .asciz    "    Non-locals: x1="
  109. str28:    .asciz    "    Adding 1000 to non-locals..."
  110. str27:    .asciz    ", z1="
  111. str26:    .asciz    ", y1="
  112. str25:    .asciz    "    Non-locals: x1="
  113. str24:    .asciz    ", z2="
  114. str23:    .asciz    ", y2="
  115. str22:    .asciz    "    Locals: x2="
  116. str21:    .asciz    "    Adding 1000 to locals..."
  117. str20:    .asciz    " )"
  118. str19:    .asciz    ", z2="
  119. str18:    .asciz    ", y2="
  120. str17:    .asciz    "   Entering foo2 ( x2="
  121. str16:    .asciz    " Leaving foo1"
  122. str15:    .asciz    ", z1="
  123. str14:    .asciz    ", y1="
  124. str13:    .asciz    "  Locals within foo1: x1="
  125. str12:    .asciz    "  Calling foo2 (301,302,303)"
  126. str11:    .asciz    ", z1="
  127. str10:    .asciz    ", y1="
  128. str9:    .asciz    "  Locals within foo1: x1="
  129. str8:    .asciz    "  Calling foo2 (201,202,203)"
  130. str7:    .asciz    " )"
  131. str6:    .asciz    ", z1="
  132. str5:    .asciz    ", y1="
  133. str4:    .asciz    " Entering foo1 ( x1="
  134. str3:    .asciz    "Leaving main"
  135. str2:    .asciz    "Calling foo1 (101,102,103)"
  136. str1:    .asciz    "Within main..."
  137.     .align    8
  138. ! MAIN...
  139. !   mainEntry
  140.     .global    main
  141. main:    save    %sp,-96,%sp
  142.     set    display0,%o0
  143.     st    %fp,[%o0]
  144. ! WRITE STMT...
  145. !   writeString str1
  146.     sethi    %hi(str1),%o0
  147.     call    printf
  148.     or    %o0,%lo(str1),%o0
  149. !   writeNewline
  150.     sethi    %hi(strNL),%o0
  151.     call    printf
  152.     or    %o0,%lo(strNL),%o0
  153. ! WRITE STMT...
  154. !   writeString str2
  155.     sethi    %hi(str2),%o0
  156.     call    printf
  157.     or    %o0,%lo(str2),%o0
  158. !   writeNewline
  159.     sethi    %hi(strNL),%o0
  160.     call    printf
  161.     or    %o0,%lo(strNL),%o0
  162. ! CALL STMT...
  163. !   param 1,101
  164.     set    101,%o0
  165.     st    %o0,[%sp+68]
  166. !   param 2,102
  167.     set    102,%o0
  168.     st    %o0,[%sp+72]
  169. !   param 3,103
  170.     set    103,%o0
  171.     st    %o0,[%sp+76]
  172. !   call p1_foo1
  173.     call    p1_foo1
  174.     nop
  175. ! WRITE STMT...
  176. !   writeString str3
  177.     sethi    %hi(str3),%o0
  178.     call    printf
  179.     or    %o0,%lo(str3),%o0
  180. !   writeNewline
  181.     sethi    %hi(strNL),%o0
  182.     call    printf
  183.     or    %o0,%lo(strNL),%o0
  184. ! MAIN EXIT...
  185. !   mainExit
  186.     ret
  187.     restore
  188. ! PROCEDURE...
  189. !   procEntry p1_foo1,lexLev=1,frameSize=96
  190. p1_foo1:    save    %sp,-96,%sp
  191.     set    display1,%o0
  192.     ld    [%o0],%o1
  193.     st    %o1,[%fp+64]
  194.     st    %fp,[%o0]
  195. !   formal 1,x1
  196. !   formal 2,y1
  197. !   formal 3,z1
  198. ! WRITE STMT...
  199. !   writeString str4
  200.     sethi    %hi(str4),%o0
  201.     call    printf
  202.     or    %o0,%lo(str4),%o0
  203. !   writeInt x1
  204.     ld    [%fp+68],%o1
  205.     sethi    %hi(strInt),%o0
  206.     call    printf
  207.     or    %o0,%lo(strInt),%o0
  208. !   writeString str5
  209.     sethi    %hi(str5),%o0
  210.     call    printf
  211.     or    %o0,%lo(str5),%o0
  212. !   writeInt y1
  213.     ld    [%fp+72],%o1
  214.     sethi    %hi(strInt),%o0
  215.     call    printf
  216.     or    %o0,%lo(strInt),%o0
  217. !   writeString str6
  218.     sethi    %hi(str6),%o0
  219.     call    printf
  220.     or    %o0,%lo(str6),%o0
  221. !   writeInt z1
  222.     ld    [%fp+76],%o1
  223.     sethi    %hi(strInt),%o0
  224.     call    printf
  225.     or    %o0,%lo(strInt),%o0
  226. !   writeString str7
  227.     sethi    %hi(str7),%o0
  228.     call    printf
  229.     or    %o0,%lo(str7),%o0
  230. !   writeNewline
  231.     sethi    %hi(strNL),%o0
  232.     call    printf
  233.     or    %o0,%lo(strNL),%o0
  234. ! WRITE STMT...
  235. !   writeString str8
  236.     sethi    %hi(str8),%o0
  237.     call    printf
  238.     or    %o0,%lo(str8),%o0
  239. !   writeNewline
  240.     sethi    %hi(strNL),%o0
  241.     call    printf
  242.     or    %o0,%lo(strNL),%o0
  243. ! CALL STMT...
  244. !   param 1,201
  245.     set    201,%o0
  246.     st    %o0,[%sp+68]
  247. !   param 2,202
  248.     set    202,%o0
  249.     st    %o0,[%sp+72]
  250. !   param 3,203
  251.     set    203,%o0
  252.     st    %o0,[%sp+76]
  253. !   call p2_foo2
  254.     call    p2_foo2
  255.     nop
  256. ! WRITE STMT...
  257. !   writeString str9
  258.     sethi    %hi(str9),%o0
  259.     call    printf
  260.     or    %o0,%lo(str9),%o0
  261. !   writeInt x1
  262.     ld    [%fp+68],%o1
  263.     sethi    %hi(strInt),%o0
  264.     call    printf
  265.     or    %o0,%lo(strInt),%o0
  266. !   writeString str10
  267.     sethi    %hi(str10),%o0
  268.     call    printf
  269.     or    %o0,%lo(str10),%o0
  270. !   writeInt y1
  271.     ld    [%fp+72],%o1
  272.     sethi    %hi(strInt),%o0
  273.     call    printf
  274.     or    %o0,%lo(strInt),%o0
  275. !   writeString str11
  276.     sethi    %hi(str11),%o0
  277.     call    printf
  278.     or    %o0,%lo(str11),%o0
  279. !   writeInt z1
  280.     ld    [%fp+76],%o1
  281.     sethi    %hi(strInt),%o0
  282.     call    printf
  283.     or    %o0,%lo(strInt),%o0
  284. !   writeNewline
  285.     sethi    %hi(strNL),%o0
  286.     call    printf
  287.     or    %o0,%lo(strNL),%o0
  288. ! WRITE STMT...
  289. !   writeString str12
  290.     sethi    %hi(str12),%o0
  291.     call    printf
  292.     or    %o0,%lo(str12),%o0
  293. !   writeNewline
  294.     sethi    %hi(strNL),%o0
  295.     call    printf
  296.     or    %o0,%lo(strNL),%o0
  297. ! CALL STMT...
  298. !   param 1,301
  299.     set    301,%o0
  300.     st    %o0,[%sp+68]
  301. !   param 2,302
  302.     set    302,%o0
  303.     st    %o0,[%sp+72]
  304. !   param 3,303
  305.     set    303,%o0
  306.     st    %o0,[%sp+76]
  307. !   call p2_foo2
  308.     call    p2_foo2
  309.     nop
  310. ! WRITE STMT...
  311. !   writeString str13
  312.     sethi    %hi(str13),%o0
  313.     call    printf
  314.     or    %o0,%lo(str13),%o0
  315. !   writeInt x1
  316.     ld    [%fp+68],%o1
  317.     sethi    %hi(strInt),%o0
  318.     call    printf
  319.     or    %o0,%lo(strInt),%o0
  320. !   writeString str14
  321.     sethi    %hi(str14),%o0
  322.     call    printf
  323.     or    %o0,%lo(str14),%o0
  324. !   writeInt y1
  325.     ld    [%fp+72],%o1
  326.     sethi    %hi(strInt),%o0
  327.     call    printf
  328.     or    %o0,%lo(strInt),%o0
  329. !   writeString str15
  330.     sethi    %hi(str15),%o0
  331.     call    printf
  332.     or    %o0,%lo(str15),%o0
  333. !   writeInt z1
  334.     ld    [%fp+76],%o1
  335.     sethi    %hi(strInt),%o0
  336.     call    printf
  337.     or    %o0,%lo(strInt),%o0
  338. !   writeNewline
  339.     sethi    %hi(strNL),%o0
  340.     call    printf
  341.     or    %o0,%lo(strNL),%o0
  342. ! WRITE STMT...
  343. !   writeString str16
  344.     sethi    %hi(str16),%o0
  345.     call    printf
  346.     or    %o0,%lo(str16),%o0
  347. !   writeNewline
  348.     sethi    %hi(strNL),%o0
  349.     call    printf
  350.     or    %o0,%lo(strNL),%o0
  351. ! RETURN...
  352. !   returnVoid
  353.     set    display1,%o0
  354.     ld    [%fp+64],%o1
  355.     st    %o1,[%o0]
  356.     ret
  357.     restore
  358. ! PROCEDURE...
  359. !   procEntry p2_foo2,lexLev=2,frameSize=120
  360. p2_foo2:    save    %sp,-120,%sp
  361.     set    display2,%o0
  362.     ld    [%o0],%o1
  363.     st    %o1,[%fp+64]
  364.     st    %fp,[%o0]
  365. !   formal 1,x2
  366. !   formal 2,y2
  367. !   formal 3,z2
  368. ! WRITE STMT...
  369. !   writeString str17
  370.     sethi    %hi(str17),%o0
  371.     call    printf
  372.     or    %o0,%lo(str17),%o0
  373. !   writeInt x2
  374.     ld    [%fp+68],%o1
  375.     sethi    %hi(strInt),%o0
  376.     call    printf
  377.     or    %o0,%lo(strInt),%o0
  378. !   writeString str18
  379.     sethi    %hi(str18),%o0
  380.     call    printf
  381.     or    %o0,%lo(str18),%o0
  382. !   writeInt y2
  383.     ld    [%fp+72],%o1
  384.     sethi    %hi(strInt),%o0
  385.     call    printf
  386.     or    %o0,%lo(strInt),%o0
  387. !   writeString str19
  388.     sethi    %hi(str19),%o0
  389.     call    printf
  390.     or    %o0,%lo(str19),%o0
  391. !   writeInt z2
  392.     ld    [%fp+76],%o1
  393.     sethi    %hi(strInt),%o0
  394.     call    printf
  395.     or    %o0,%lo(strInt),%o0
  396. !   writeString str20
  397.     sethi    %hi(str20),%o0
  398.     call    printf
  399.     or    %o0,%lo(str20),%o0
  400. !   writeNewline
  401.     sethi    %hi(strNL),%o0
  402.     call    printf
  403.     or    %o0,%lo(strNL),%o0
  404. ! WRITE STMT...
  405. !   writeString str21
  406.     sethi    %hi(str21),%o0
  407.     call    printf
  408.     or    %o0,%lo(str21),%o0
  409. !   writeNewline
  410.     sethi    %hi(strNL),%o0
  411.     call    printf
  412.     or    %o0,%lo(strNL),%o0
  413. ! ASSIGNMENT STMT...
  414. !   t1 := 1000 + x2        (integer)
  415.     set    1000,%o0
  416.     ld    [%fp+68],%o1
  417.     add    %o0,%o1,%o1
  418.     st    %o1,[%fp+-4]
  419. !   x2 := t1
  420.     ld    [%fp+-4],%o0
  421.     st    %o0,[%fp+68]
  422. ! ASSIGNMENT STMT...
  423. !   t2 := 1000 + y2        (integer)
  424.     set    1000,%o0
  425.     ld    [%fp+72],%o1
  426.     add    %o0,%o1,%o1
  427.     st    %o1,[%fp+-8]
  428. !   y2 := t2
  429.     ld    [%fp+-8],%o0
  430.     st    %o0,[%fp+72]
  431. ! ASSIGNMENT STMT...
  432. !   t3 := 1000 + z2        (integer)
  433.     set    1000,%o0
  434.     ld    [%fp+76],%o1
  435.     add    %o0,%o1,%o1
  436.     st    %o1,[%fp+-12]
  437. !   z2 := t3
  438.     ld    [%fp+-12],%o0
  439.     st    %o0,[%fp+76]
  440. ! WRITE STMT...
  441. !   writeString str22
  442.     sethi    %hi(str22),%o0
  443.     call    printf
  444.     or    %o0,%lo(str22),%o0
  445. !   writeInt x2
  446.     ld    [%fp+68],%o1
  447.     sethi    %hi(strInt),%o0
  448.     call    printf
  449.     or    %o0,%lo(strInt),%o0
  450. !   writeString str23
  451.     sethi    %hi(str23),%o0
  452.     call    printf
  453.     or    %o0,%lo(str23),%o0
  454. !   writeInt y2
  455.     ld    [%fp+72],%o1
  456.     sethi    %hi(strInt),%o0
  457.     call    printf
  458.     or    %o0,%lo(strInt),%o0
  459. !   writeString str24
  460.     sethi    %hi(str24),%o0
  461.     call    printf
  462.     or    %o0,%lo(str24),%o0
  463. !   writeInt z2
  464.     ld    [%fp+76],%o1
  465.     sethi    %hi(strInt),%o0
  466.     call    printf
  467.     or    %o0,%lo(strInt),%o0
  468. !   writeNewline
  469.     sethi    %hi(strNL),%o0
  470.     call    printf
  471.     or    %o0,%lo(strNL),%o0
  472. ! WRITE STMT...
  473. !   writeString str25
  474.     sethi    %hi(str25),%o0
  475.     call    printf
  476.     or    %o0,%lo(str25),%o0
  477. !   writeInt x1
  478.     set    display1,%o1
  479.     ld    [%o1],%o1
  480.     ld    [%o1+68],%o1
  481.     sethi    %hi(strInt),%o0
  482.     call    printf
  483.     or    %o0,%lo(strInt),%o0
  484. !   writeString str26
  485.     sethi    %hi(str26),%o0
  486.     call    printf
  487.     or    %o0,%lo(str26),%o0
  488. !   writeInt y1
  489.     set    display1,%o1
  490.     ld    [%o1],%o1
  491.     ld    [%o1+72],%o1
  492.     sethi    %hi(strInt),%o0
  493.     call    printf
  494.     or    %o0,%lo(strInt),%o0
  495. !   writeString str27
  496.     sethi    %hi(str27),%o0
  497.     call    printf
  498.     or    %o0,%lo(str27),%o0
  499. !   writeInt z1
  500.     set    display1,%o1
  501.     ld    [%o1],%o1
  502.     ld    [%o1+76],%o1
  503.     sethi    %hi(strInt),%o0
  504.     call    printf
  505.     or    %o0,%lo(strInt),%o0
  506. !   writeNewline
  507.     sethi    %hi(strNL),%o0
  508.     call    printf
  509.     or    %o0,%lo(strNL),%o0
  510. ! WRITE STMT...
  511. !   writeString str28
  512.     sethi    %hi(str28),%o0
  513.     call    printf
  514.     or    %o0,%lo(str28),%o0
  515. !   writeNewline
  516.     sethi    %hi(strNL),%o0
  517.     call    printf
  518.     or    %o0,%lo(strNL),%o0
  519. ! ASSIGNMENT STMT...
  520. !   t4 := 1000 + x1        (integer)
  521.     set    1000,%o0
  522.     set    display1,%o1
  523.     ld    [%o1],%o1
  524.     ld    [%o1+68],%o1
  525.     add    %o0,%o1,%o1
  526.     st    %o1,[%fp+-16]
  527. !   x1 := t4
  528.     ld    [%fp+-16],%o0
  529.     set    display1,%o1
  530.     ld    [%o1],%o1
  531.     st    %o0,[%o1+68]
  532. ! ASSIGNMENT STMT...
  533. !   t5 := 1000 + y1        (integer)
  534.     set    1000,%o0
  535.     set    display1,%o1
  536.     ld    [%o1],%o1
  537.     ld    [%o1+72],%o1
  538.     add    %o0,%o1,%o1
  539.     st    %o1,[%fp+-20]
  540. !   y1 := t5
  541.     ld    [%fp+-20],%o0
  542.     set    display1,%o1
  543.     ld    [%o1],%o1
  544.     st    %o0,[%o1+72]
  545. ! ASSIGNMENT STMT...
  546. !   t6 := 1000 + z1        (integer)
  547.     set    1000,%o0
  548.     set    display1,%o1
  549.     ld    [%o1],%o1
  550.     ld    [%o1+76],%o1
  551.     add    %o0,%o1,%o1
  552.     st    %o1,[%fp+-24]
  553. !   z1 := t6
  554.     ld    [%fp+-24],%o0
  555.     set    display1,%o1
  556.     ld    [%o1],%o1
  557.     st    %o0,[%o1+76]
  558. ! WRITE STMT...
  559. !   writeString str29
  560.     sethi    %hi(str29),%o0
  561.     call    printf
  562.     or    %o0,%lo(str29),%o0
  563. !   writeInt x1
  564.     set    display1,%o1
  565.     ld    [%o1],%o1
  566.     ld    [%o1+68],%o1
  567.     sethi    %hi(strInt),%o0
  568.     call    printf
  569.     or    %o0,%lo(strInt),%o0
  570. !   writeString str30
  571.     sethi    %hi(str30),%o0
  572.     call    printf
  573.     or    %o0,%lo(str30),%o0
  574. !   writeInt y1
  575.     set    display1,%o1
  576.     ld    [%o1],%o1
  577.     ld    [%o1+72],%o1
  578.     sethi    %hi(strInt),%o0
  579.     call    printf
  580.     or    %o0,%lo(strInt),%o0
  581. !   writeString str31
  582.     sethi    %hi(str31),%o0
  583.     call    printf
  584.     or    %o0,%lo(str31),%o0
  585. !   writeInt z1
  586.     set    display1,%o1
  587.     ld    [%o1],%o1
  588.     ld    [%o1+76],%o1
  589.     sethi    %hi(strInt),%o0
  590.     call    printf
  591.     or    %o0,%lo(strInt),%o0
  592. !   writeNewline
  593.     sethi    %hi(strNL),%o0
  594.     call    printf
  595.     or    %o0,%lo(strNL),%o0
  596. ! WRITE STMT...
  597. !   writeString str32
  598.     sethi    %hi(str32),%o0
  599.     call    printf
  600.     or    %o0,%lo(str32),%o0
  601. !   writeNewline
  602.     sethi    %hi(strNL),%o0
  603.     call    printf
  604.     or    %o0,%lo(strNL),%o0
  605. ! RETURN...
  606. !   returnVoid
  607.     set    display2,%o0
  608.     ld    [%fp+64],%o1
  609.     st    %o1,[%o0]
  610.     ret
  611.     restore
  612.