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