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 / param1.out.bak < prev    next >
Text File  |  2006-03-05  |  9KB  |  461 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. float10:    .single    0r10.1
  105. float9:    .single    0r9.9
  106. float8:    .single    0r8.8
  107. float7:    .single    0r7.7
  108. float6:    .single    0r6.6
  109. float5:    .single    0r5.5
  110. float4:    .single    0r4.4
  111. float3:    .single    0r3.3
  112. float2:    .single    0r2.2
  113. float1:    .single    0r1.1
  114. str2:    .asciz    "Should print 1.1, 2.2, 3.3, ..., 10.1:"
  115. str1:    .asciz    "Should print 1, 2, 3, ..., 10:"
  116.     .align    8
  117. ! MAIN...
  118. !   mainEntry
  119.     .global    main
  120. main:    save    %sp,-112,%sp
  121.     set    display0,%o0
  122.     st    %fp,[%o0]
  123. ! WRITE STMT...
  124. !   writeString str1
  125.     sethi    %hi(str1),%o0
  126.     call    printf
  127.     or    %o0,%lo(str1),%o0
  128. !   writeNewline
  129.     sethi    %hi(strNL),%o0
  130.     call    printf
  131.     or    %o0,%lo(strNL),%o0
  132. ! CALL STMT...
  133. !   param 1,1
  134.     set    1,%o0
  135.     st    %o0,[%sp+68]
  136. !   param 2,2
  137.     set    2,%o0
  138.     st    %o0,[%sp+72]
  139. !   param 3,3
  140.     set    3,%o0
  141.     st    %o0,[%sp+76]
  142. !   param 4,4
  143.     set    4,%o0
  144.     st    %o0,[%sp+80]
  145. !   param 5,5
  146.     set    5,%o0
  147.     st    %o0,[%sp+84]
  148. !   param 6,6
  149.     set    6,%o0
  150.     st    %o0,[%sp+88]
  151. !   param 7,7
  152.     set    7,%o0
  153.     st    %o0,[%sp+92]
  154. !   param 8,8
  155.     set    8,%o0
  156.     st    %o0,[%sp+96]
  157. !   param 9,9
  158.     set    9,%o0
  159.     st    %o0,[%sp+100]
  160. !   param 10,10
  161.     set    10,%o0
  162.     st    %o0,[%sp+104]
  163. !   call p1_foo1
  164.     call    p1_foo1
  165.     nop
  166. ! WRITE STMT...
  167. !   writeString str2
  168.     sethi    %hi(str2),%o0
  169.     call    printf
  170.     or    %o0,%lo(str2),%o0
  171. !   writeNewline
  172.     sethi    %hi(strNL),%o0
  173.     call    printf
  174.     or    %o0,%lo(strNL),%o0
  175. ! CALL STMT...
  176. !   param 1,1.1
  177.     set    float1,%o0
  178.     ld    [%o0],%o0
  179.     st    %o0,[%sp+68]
  180. !   param 2,2.2
  181.     set    float2,%o0
  182.     ld    [%o0],%o0
  183.     st    %o0,[%sp+72]
  184. !   param 3,3.3
  185.     set    float3,%o0
  186.     ld    [%o0],%o0
  187.     st    %o0,[%sp+76]
  188. !   param 4,4.4
  189.     set    float4,%o0
  190.     ld    [%o0],%o0
  191.     st    %o0,[%sp+80]
  192. !   param 5,5.5
  193.     set    float5,%o0
  194.     ld    [%o0],%o0
  195.     st    %o0,[%sp+84]
  196. !   param 6,6.6
  197.     set    float6,%o0
  198.     ld    [%o0],%o0
  199.     st    %o0,[%sp+88]
  200. !   param 7,7.7
  201.     set    float7,%o0
  202.     ld    [%o0],%o0
  203.     st    %o0,[%sp+92]
  204. !   param 8,8.8
  205.     set    float8,%o0
  206.     ld    [%o0],%o0
  207.     st    %o0,[%sp+96]
  208. !   param 9,9.9
  209.     set    float9,%o0
  210.     ld    [%o0],%o0
  211.     st    %o0,[%sp+100]
  212. !   param 10,10.1
  213.     set    float10,%o0
  214.     ld    [%o0],%o0
  215.     st    %o0,[%sp+104]
  216. !   call p2_foo2
  217.     call    p2_foo2
  218.     nop
  219. ! MAIN EXIT...
  220. !   mainExit
  221.     ret
  222.     restore
  223. ! PROCEDURE...
  224. !   procEntry p1_foo1,lexLev=1,frameSize=96
  225. p1_foo1:    save    %sp,-96,%sp
  226.     set    display1,%o0
  227.     ld    [%o0],%o1
  228.     st    %o1,[%fp+64]
  229.     st    %fp,[%o0]
  230. !   formal 1,a1
  231. !   formal 2,a2
  232. !   formal 3,a3
  233. !   formal 4,a4
  234. !   formal 5,a5
  235. !   formal 6,a6
  236. !   formal 7,a7
  237. !   formal 8,a8
  238. !   formal 9,a9
  239. !   formal 10,a10
  240. ! WRITE STMT...
  241. !   writeInt a1
  242.     ld    [%fp+68],%o1
  243.     sethi    %hi(strInt),%o0
  244.     call    printf
  245.     or    %o0,%lo(strInt),%o0
  246. !   writeNewline
  247.     sethi    %hi(strNL),%o0
  248.     call    printf
  249.     or    %o0,%lo(strNL),%o0
  250. ! WRITE STMT...
  251. !   writeInt a2
  252.     ld    [%fp+72],%o1
  253.     sethi    %hi(strInt),%o0
  254.     call    printf
  255.     or    %o0,%lo(strInt),%o0
  256. !   writeNewline
  257.     sethi    %hi(strNL),%o0
  258.     call    printf
  259.     or    %o0,%lo(strNL),%o0
  260. ! WRITE STMT...
  261. !   writeInt a3
  262.     ld    [%fp+76],%o1
  263.     sethi    %hi(strInt),%o0
  264.     call    printf
  265.     or    %o0,%lo(strInt),%o0
  266. !   writeNewline
  267.     sethi    %hi(strNL),%o0
  268.     call    printf
  269.     or    %o0,%lo(strNL),%o0
  270. ! WRITE STMT...
  271. !   writeInt a4
  272.     ld    [%fp+80],%o1
  273.     sethi    %hi(strInt),%o0
  274.     call    printf
  275.     or    %o0,%lo(strInt),%o0
  276. !   writeNewline
  277.     sethi    %hi(strNL),%o0
  278.     call    printf
  279.     or    %o0,%lo(strNL),%o0
  280. ! WRITE STMT...
  281. !   writeInt a5
  282.     ld    [%fp+84],%o1
  283.     sethi    %hi(strInt),%o0
  284.     call    printf
  285.     or    %o0,%lo(strInt),%o0
  286. !   writeNewline
  287.     sethi    %hi(strNL),%o0
  288.     call    printf
  289.     or    %o0,%lo(strNL),%o0
  290. ! WRITE STMT...
  291. !   writeInt a6
  292.     ld    [%fp+88],%o1
  293.     sethi    %hi(strInt),%o0
  294.     call    printf
  295.     or    %o0,%lo(strInt),%o0
  296. !   writeNewline
  297.     sethi    %hi(strNL),%o0
  298.     call    printf
  299.     or    %o0,%lo(strNL),%o0
  300. ! WRITE STMT...
  301. !   writeInt a7
  302.     ld    [%fp+92],%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. ! WRITE STMT...
  311. !   writeInt a8
  312.     ld    [%fp+96],%o1
  313.     sethi    %hi(strInt),%o0
  314.     call    printf
  315.     or    %o0,%lo(strInt),%o0
  316. !   writeNewline
  317.     sethi    %hi(strNL),%o0
  318.     call    printf
  319.     or    %o0,%lo(strNL),%o0
  320. ! WRITE STMT...
  321. !   writeInt a9
  322.     ld    [%fp+100],%o1
  323.     sethi    %hi(strInt),%o0
  324.     call    printf
  325.     or    %o0,%lo(strInt),%o0
  326. !   writeNewline
  327.     sethi    %hi(strNL),%o0
  328.     call    printf
  329.     or    %o0,%lo(strNL),%o0
  330. ! WRITE STMT...
  331. !   writeInt a10
  332.     ld    [%fp+104],%o1
  333.     sethi    %hi(strInt),%o0
  334.     call    printf
  335.     or    %o0,%lo(strInt),%o0
  336. !   writeNewline
  337.     sethi    %hi(strNL),%o0
  338.     call    printf
  339.     or    %o0,%lo(strNL),%o0
  340. ! RETURN...
  341. !   returnVoid
  342.     set    display1,%o0
  343.     ld    [%fp+64],%o1
  344.     st    %o1,[%o0]
  345.     ret
  346.     restore
  347. ! PROCEDURE...
  348. !   procEntry p2_foo2,lexLev=1,frameSize=96
  349. p2_foo2:    save    %sp,-96,%sp
  350.     set    display1,%o0
  351.     ld    [%o0],%o1
  352.     st    %o1,[%fp+64]
  353.     st    %fp,[%o0]
  354. !   formal 1,a1
  355. !   formal 2,a2
  356. !   formal 3,a3
  357. !   formal 4,a4
  358. !   formal 5,a5
  359. !   formal 6,a6
  360. !   formal 7,a7
  361. !   formal 8,a8
  362. !   formal 9,a9
  363. !   formal 10,a10
  364. ! WRITE STMT...
  365. !   writeFloat a1
  366.     ld    [%fp+68],%f0
  367.     call    writeFlt
  368.     nop
  369. !   writeNewline
  370.     sethi    %hi(strNL),%o0
  371.     call    printf
  372.     or    %o0,%lo(strNL),%o0
  373. ! WRITE STMT...
  374. !   writeFloat a2
  375.     ld    [%fp+72],%f0
  376.     call    writeFlt
  377.     nop
  378. !   writeNewline
  379.     sethi    %hi(strNL),%o0
  380.     call    printf
  381.     or    %o0,%lo(strNL),%o0
  382. ! WRITE STMT...
  383. !   writeFloat a3
  384.     ld    [%fp+76],%f0
  385.     call    writeFlt
  386.     nop
  387. !   writeNewline
  388.     sethi    %hi(strNL),%o0
  389.     call    printf
  390.     or    %o0,%lo(strNL),%o0
  391. ! WRITE STMT...
  392. !   writeFloat a4
  393.     ld    [%fp+80],%f0
  394.     call    writeFlt
  395.     nop
  396. !   writeNewline
  397.     sethi    %hi(strNL),%o0
  398.     call    printf
  399.     or    %o0,%lo(strNL),%o0
  400. ! WRITE STMT...
  401. !   writeFloat a5
  402.     ld    [%fp+84],%f0
  403.     call    writeFlt
  404.     nop
  405. !   writeNewline
  406.     sethi    %hi(strNL),%o0
  407.     call    printf
  408.     or    %o0,%lo(strNL),%o0
  409. ! WRITE STMT...
  410. !   writeFloat a6
  411.     ld    [%fp+88],%f0
  412.     call    writeFlt
  413.     nop
  414. !   writeNewline
  415.     sethi    %hi(strNL),%o0
  416.     call    printf
  417.     or    %o0,%lo(strNL),%o0
  418. ! WRITE STMT...
  419. !   writeFloat a7
  420.     ld    [%fp+92],%f0
  421.     call    writeFlt
  422.     nop
  423. !   writeNewline
  424.     sethi    %hi(strNL),%o0
  425.     call    printf
  426.     or    %o0,%lo(strNL),%o0
  427. ! WRITE STMT...
  428. !   writeFloat a8
  429.     ld    [%fp+96],%f0
  430.     call    writeFlt
  431.     nop
  432. !   writeNewline
  433.     sethi    %hi(strNL),%o0
  434.     call    printf
  435.     or    %o0,%lo(strNL),%o0
  436. ! WRITE STMT...
  437. !   writeFloat a9
  438.     ld    [%fp+100],%f0
  439.     call    writeFlt
  440.     nop
  441. !   writeNewline
  442.     sethi    %hi(strNL),%o0
  443.     call    printf
  444.     or    %o0,%lo(strNL),%o0
  445. ! WRITE STMT...
  446. !   writeFloat a10
  447.     ld    [%fp+104],%f0
  448.     call    writeFlt
  449.     nop
  450. !   writeNewline
  451.     sethi    %hi(strNL),%o0
  452.     call    printf
  453.     or    %o0,%lo(strNL),%o0
  454. ! RETURN...
  455. !   returnVoid
  456.     set    display1,%o0
  457.     ld    [%fp+64],%o1
  458.     st    %o1,[%o0]
  459.     ret
  460.     restore
  461.