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 / quicksort.out.bak < prev    next >
Text File  |  2006-03-05  |  27KB  |  1,507 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. str3:    .asciz    "The sorted array is:"
  105. str2:    .asciz    "Input values must be between -9998 and +9998; try again..."
  106. str1:    .asciz    "Enter 9 integers (between -9998 and +9998):"
  107.     .align    8
  108. ! MAIN...
  109. !   mainEntry
  110.     .global    main
  111. main:    save    %sp,-128,%sp
  112.     set    display0,%o0
  113.     st    %fp,[%o0]
  114. ! VAR INITIALIZATION...
  115. !   a := 0
  116.     set    0,%o0
  117.     st    %o0,[%fp+-4]
  118. ! ASSIGNMENT STMT...
  119. !   t1 := 0
  120.     set    0,%o0
  121.     st    %o0,[%fp+-8]
  122. !   if 11 <= 0 goto runtimeError5        (integer)
  123.     set    11,%o0
  124.     set    0,%o1
  125.     cmp    %o0,%o1
  126.     ble    runtimeError5
  127.     nop
  128. !   t1 := t1 + 11        (integer)
  129.     ld    [%fp+-8],%o0
  130.     set    11,%o1
  131.     add    %o0,%o1,%o1
  132.     st    %o1,[%fp+-8]
  133. !   t2 := t1 * 4        (integer)
  134.     ld    [%fp+-8],%o0
  135.     set    4,%o1
  136.     smul    %o0,%o1,%o1
  137.     st    %o1,[%fp+-12]
  138. !   t2 := t2 + 4        (integer)
  139.     ld    [%fp+-12],%o0
  140.     set    4,%o1
  141.     add    %o0,%o1,%o1
  142.     st    %o1,[%fp+-12]
  143. !   t2 := alloc (t2)
  144.     set    1,%o0
  145.     ld    [%fp+-12],%o1
  146.     call    calloc
  147.     nop
  148.     st    %o0,[%fp+-12]
  149. !   if t2 = 0 goto runtimeError1        (integer)
  150.     ld    [%fp+-12],%o0
  151.     set    0,%o1
  152.     cmp    %o0,%o1
  153.     be    runtimeError1
  154.     nop
  155. !   t3 := t2
  156.     ld    [%fp+-12],%o0
  157.     st    %o0,[%fp+-16]
  158. !   *t2 := t1
  159.     ld    [%fp+-8],%o0
  160.     ld    [%fp+-12],%o1
  161.     st    %o0,[%o1]
  162. !   t4 := 11
  163.     set    11,%o0
  164.     st    %o0,[%fp+-20]
  165. !   Label_1:
  166. Label_1:
  167. !   t2 := t2 + 4        (integer)
  168.     ld    [%fp+-12],%o0
  169.     set    4,%o1
  170.     add    %o0,%o1,%o1
  171.     st    %o1,[%fp+-12]
  172. !   *t2 := 0
  173.     set    0,%o0
  174.     ld    [%fp+-12],%o1
  175.     st    %o0,[%o1]
  176. !   t4 := t4 - 1        (integer)
  177.     ld    [%fp+-20],%o0
  178.     set    1,%o1
  179.     sub    %o0,%o1,%o1
  180.     st    %o1,[%fp+-20]
  181. !   if t4 > 0 goto Label_1        (integer)
  182.     ld    [%fp+-20],%o0
  183.     set    0,%o1
  184.     cmp    %o0,%o1
  185.     bg    Label_1
  186.     nop
  187. !   a := t3
  188.     ld    [%fp+-16],%o0
  189.     st    %o0,[%fp+-4]
  190. ! ASSIGNMENT STMT...
  191. !   if a = 0 goto runtimeError2        (integer)
  192.     ld    [%fp+-4],%o0
  193.     set    0,%o1
  194.     cmp    %o0,%o1
  195.     be    runtimeError2
  196.     nop
  197. !   if 0 < 0 goto runtimeError4        (integer)
  198.     set    0,%o0
  199.     set    0,%o1
  200.     cmp    %o0,%o1
  201.     bl    runtimeError4
  202.     nop
  203. !   t5 := *a
  204.     ld    [%fp+-4],%o0
  205.     ld    [%o0],%o0
  206.     st    %o0,[%fp+-24]
  207. !   if 0 >= t5 goto runtimeError4        (integer)
  208.     set    0,%o0
  209.     ld    [%fp+-24],%o1
  210.     cmp    %o0,%o1
  211.     bge    runtimeError4
  212.     nop
  213. !   t5 := 0 * 4        (integer)
  214.     set    0,%o0
  215.     set    4,%o1
  216.     smul    %o0,%o1,%o1
  217.     st    %o1,[%fp+-24]
  218. !   t5 := t5 + 4        (integer)
  219.     ld    [%fp+-24],%o0
  220.     set    4,%o1
  221.     add    %o0,%o1,%o1
  222.     st    %o1,[%fp+-24]
  223. !   t5 := a + t5        (integer)
  224.     ld    [%fp+-4],%o0
  225.     ld    [%fp+-24],%o1
  226.     add    %o0,%o1,%o1
  227.     st    %o1,[%fp+-24]
  228. !   t6 := - 9999           (integer)
  229.     set    9999,%o0
  230.     neg    %o0,%o1
  231.     st    %o1,[%fp+-28]
  232. !   *t5 := t6
  233.     ld    [%fp+-28],%o0
  234.     ld    [%fp+-24],%o1
  235.     st    %o0,[%o1]
  236. ! ASSIGNMENT STMT...
  237. !   if a = 0 goto runtimeError2        (integer)
  238.     ld    [%fp+-4],%o0
  239.     set    0,%o1
  240.     cmp    %o0,%o1
  241.     be    runtimeError2
  242.     nop
  243. !   if 10 < 0 goto runtimeError4        (integer)
  244.     set    10,%o0
  245.     set    0,%o1
  246.     cmp    %o0,%o1
  247.     bl    runtimeError4
  248.     nop
  249. !   t7 := *a
  250.     ld    [%fp+-4],%o0
  251.     ld    [%o0],%o0
  252.     st    %o0,[%fp+-32]
  253. !   if 10 >= t7 goto runtimeError4        (integer)
  254.     set    10,%o0
  255.     ld    [%fp+-32],%o1
  256.     cmp    %o0,%o1
  257.     bge    runtimeError4
  258.     nop
  259. !   t7 := 10 * 4        (integer)
  260.     set    10,%o0
  261.     set    4,%o1
  262.     smul    %o0,%o1,%o1
  263.     st    %o1,[%fp+-32]
  264. !   t7 := t7 + 4        (integer)
  265.     ld    [%fp+-32],%o0
  266.     set    4,%o1
  267.     add    %o0,%o1,%o1
  268.     st    %o1,[%fp+-32]
  269. !   t7 := a + t7        (integer)
  270.     ld    [%fp+-4],%o0
  271.     ld    [%fp+-32],%o1
  272.     add    %o0,%o1,%o1
  273.     st    %o1,[%fp+-32]
  274. !   *t7 := 9999
  275.     set    9999,%o0
  276.     ld    [%fp+-32],%o1
  277.     st    %o0,[%o1]
  278. ! CALL STMT...
  279. !   call p1_readArray
  280.     call    p1_readArray
  281.     nop
  282. ! CALL STMT...
  283. !   param 1,1
  284.     set    1,%o0
  285.     st    %o0,[%sp+68]
  286. !   param 2,9
  287.     set    9,%o0
  288.     st    %o0,[%sp+72]
  289. !   call p4_quicksort
  290.     call    p4_quicksort
  291.     nop
  292. ! CALL STMT...
  293. !   call p2_printArray
  294.     call    p2_printArray
  295.     nop
  296. ! MAIN EXIT...
  297. !   mainExit
  298.     ret
  299.     restore
  300. ! PROCEDURE...
  301. !   procEntry p1_readArray,lexLev=1,frameSize=136
  302. p1_readArray:    save    %sp,-136,%sp
  303.     set    display1,%o0
  304.     ld    [%o0],%o1
  305.     st    %o1,[%fp+64]
  306.     st    %fp,[%o0]
  307. ! VAR INITIALIZATION...
  308. !   i := 0
  309.     set    0,%o0
  310.     st    %o0,[%fp+-4]
  311. ! WRITE STMT...
  312. !   writeString str1
  313.     sethi    %hi(str1),%o0
  314.     call    printf
  315.     or    %o0,%lo(str1),%o0
  316. !   writeNewline
  317.     sethi    %hi(strNL),%o0
  318.     call    printf
  319.     or    %o0,%lo(strNL),%o0
  320. ! FOR...
  321. !   t11 := &i
  322.     add    %fp,-4,%o0
  323.     st    %o0,[%fp+-20]
  324. !   t8 := 1
  325.     set    1,%o0
  326.     st    %o0,[%fp+-8]
  327. !   t9 := 9
  328.     set    9,%o0
  329.     st    %o0,[%fp+-12]
  330. !   t10 := 1
  331.     set    1,%o0
  332.     st    %o0,[%fp+-16]
  333. !   *t11 := t8
  334.     ld    [%fp+-8],%o0
  335.     ld    [%fp+-20],%o1
  336.     st    %o0,[%o1]
  337. !   Label_2:
  338. Label_2:
  339. !   if t8 > t9 goto Label_3        (integer)
  340.     ld    [%fp+-8],%o0
  341.     ld    [%fp+-12],%o1
  342.     cmp    %o0,%o1
  343.     bg    Label_3
  344.     nop
  345. ! LOOP...
  346. !   Label_4:
  347. Label_4:
  348. ! READ STMT...
  349. !   if a = 0 goto runtimeError2        (integer)
  350.     set    display0,%o0
  351.     ld    [%o0],%o0
  352.     ld    [%o0+-4],%o0
  353.     set    0,%o1
  354.     cmp    %o0,%o1
  355.     be    runtimeError2
  356.     nop
  357. !   if i < 0 goto runtimeError4        (integer)
  358.     ld    [%fp+-4],%o0
  359.     set    0,%o1
  360.     cmp    %o0,%o1
  361.     bl    runtimeError4
  362.     nop
  363. !   t12 := *a
  364.     set    display0,%o0
  365.     ld    [%o0],%o0
  366.     ld    [%o0+-4],%o0
  367.     ld    [%o0],%o0
  368.     st    %o0,[%fp+-24]
  369. !   if i >= t12 goto runtimeError4        (integer)
  370.     ld    [%fp+-4],%o0
  371.     ld    [%fp+-24],%o1
  372.     cmp    %o0,%o1
  373.     bge    runtimeError4
  374.     nop
  375. !   t12 := i * 4        (integer)
  376.     ld    [%fp+-4],%o0
  377.     set    4,%o1
  378.     smul    %o0,%o1,%o1
  379.     st    %o1,[%fp+-24]
  380. !   t12 := t12 + 4        (integer)
  381.     ld    [%fp+-24],%o0
  382.     set    4,%o1
  383.     add    %o0,%o1,%o1
  384.     st    %o1,[%fp+-24]
  385. !   t12 := a + t12        (integer)
  386.     set    display0,%o0
  387.     ld    [%o0],%o0
  388.     ld    [%o0+-4],%o0
  389.     ld    [%fp+-24],%o1
  390.     add    %o0,%o1,%o1
  391.     st    %o1,[%fp+-24]
  392. !   readInt t12
  393.     ld    [%fp+-24],%o1
  394.     sethi    %hi(strInt),%o0
  395.     call    scanf
  396.     or    %o0,%lo(strInt),%o0
  397.     cmp    %o0,0
  398.     be    runtimeError3
  399.     nop
  400. ! IF...
  401. !   if a = 0 goto runtimeError2        (integer)
  402.     set    display0,%o0
  403.     ld    [%o0],%o0
  404.     ld    [%o0+-4],%o0
  405.     set    0,%o1
  406.     cmp    %o0,%o1
  407.     be    runtimeError2
  408.     nop
  409. !   if i < 0 goto runtimeError4        (integer)
  410.     ld    [%fp+-4],%o0
  411.     set    0,%o1
  412.     cmp    %o0,%o1
  413.     bl    runtimeError4
  414.     nop
  415. !   t13 := *a
  416.     set    display0,%o0
  417.     ld    [%o0],%o0
  418.     ld    [%o0+-4],%o0
  419.     ld    [%o0],%o0
  420.     st    %o0,[%fp+-28]
  421. !   if i >= t13 goto runtimeError4        (integer)
  422.     ld    [%fp+-4],%o0
  423.     ld    [%fp+-28],%o1
  424.     cmp    %o0,%o1
  425.     bge    runtimeError4
  426.     nop
  427. !   t13 := i * 4        (integer)
  428.     ld    [%fp+-4],%o0
  429.     set    4,%o1
  430.     smul    %o0,%o1,%o1
  431.     st    %o1,[%fp+-28]
  432. !   t13 := t13 + 4        (integer)
  433.     ld    [%fp+-28],%o0
  434.     set    4,%o1
  435.     add    %o0,%o1,%o1
  436.     st    %o1,[%fp+-28]
  437. !   t13 := a + t13        (integer)
  438.     set    display0,%o0
  439.     ld    [%o0],%o0
  440.     ld    [%o0+-4],%o0
  441.     ld    [%fp+-28],%o1
  442.     add    %o0,%o1,%o1
  443.     st    %o1,[%fp+-28]
  444. !   t14 := *t13
  445.     ld    [%fp+-28],%o0
  446.     ld    [%o0],%o0
  447.     st    %o0,[%fp+-32]
  448. !   t15 := - 9998           (integer)
  449.     set    9998,%o0
  450.     neg    %o0,%o1
  451.     st    %o1,[%fp+-36]
  452. !   if t14 >= t15 goto Label_8        (integer)
  453.     ld    [%fp+-32],%o0
  454.     ld    [%fp+-36],%o1
  455.     cmp    %o0,%o1
  456.     bge    Label_8
  457.     nop
  458. !   goto Label_7
  459.     ba    Label_7
  460.     nop
  461. !   Label_8:
  462. Label_8:
  463. !   if a = 0 goto runtimeError2        (integer)
  464.     set    display0,%o0
  465.     ld    [%o0],%o0
  466.     ld    [%o0+-4],%o0
  467.     set    0,%o1
  468.     cmp    %o0,%o1
  469.     be    runtimeError2
  470.     nop
  471. !   if i < 0 goto runtimeError4        (integer)
  472.     ld    [%fp+-4],%o0
  473.     set    0,%o1
  474.     cmp    %o0,%o1
  475.     bl    runtimeError4
  476.     nop
  477. !   t16 := *a
  478.     set    display0,%o0
  479.     ld    [%o0],%o0
  480.     ld    [%o0+-4],%o0
  481.     ld    [%o0],%o0
  482.     st    %o0,[%fp+-40]
  483. !   if i >= t16 goto runtimeError4        (integer)
  484.     ld    [%fp+-4],%o0
  485.     ld    [%fp+-40],%o1
  486.     cmp    %o0,%o1
  487.     bge    runtimeError4
  488.     nop
  489. !   t16 := i * 4        (integer)
  490.     ld    [%fp+-4],%o0
  491.     set    4,%o1
  492.     smul    %o0,%o1,%o1
  493.     st    %o1,[%fp+-40]
  494. !   t16 := t16 + 4        (integer)
  495.     ld    [%fp+-40],%o0
  496.     set    4,%o1
  497.     add    %o0,%o1,%o1
  498.     st    %o1,[%fp+-40]
  499. !   t16 := a + t16        (integer)
  500.     set    display0,%o0
  501.     ld    [%o0],%o0
  502.     ld    [%o0+-4],%o0
  503.     ld    [%fp+-40],%o1
  504.     add    %o0,%o1,%o1
  505.     st    %o1,[%fp+-40]
  506. !   t17 := *t16
  507.     ld    [%fp+-40],%o0
  508.     ld    [%o0],%o0
  509.     st    %o0,[%fp+-44]
  510. !   if t17 <= 9998 goto Label_6        (integer)
  511.     ld    [%fp+-44],%o0
  512.     set    9998,%o1
  513.     cmp    %o0,%o1
  514.     ble    Label_6
  515.     nop
  516. !   goto Label_7
  517.     ba    Label_7
  518.     nop
  519. !   Label_6:
  520. Label_6:
  521. ! THEN...
  522. ! EXIT...
  523. !   goto Label_5
  524.     ba    Label_5
  525.     nop
  526. ! END IF...
  527. !   Label_7:
  528. Label_7:
  529. ! WRITE STMT...
  530. !   writeString str2
  531.     sethi    %hi(str2),%o0
  532.     call    printf
  533.     or    %o0,%lo(str2),%o0
  534. !   writeNewline
  535.     sethi    %hi(strNL),%o0
  536.     call    printf
  537.     or    %o0,%lo(strNL),%o0
  538. ! END LOOP...
  539. !   goto Label_4
  540.     ba    Label_4
  541.     nop
  542. !   Label_5:
  543. Label_5:
  544. ! END FOR...
  545. !   t8 := *t11
  546.     ld    [%fp+-20],%o0
  547.     ld    [%o0],%o0
  548.     st    %o0,[%fp+-8]
  549. !   t8 := t8 + t10        (integer)
  550.     ld    [%fp+-8],%o0
  551.     ld    [%fp+-16],%o1
  552.     add    %o0,%o1,%o1
  553.     st    %o1,[%fp+-8]
  554. !   *t11 := t8
  555.     ld    [%fp+-8],%o0
  556.     ld    [%fp+-20],%o1
  557.     st    %o0,[%o1]
  558. !   goto Label_2
  559.     ba    Label_2
  560.     nop
  561. !   Label_3:
  562. Label_3:
  563. ! RETURN...
  564. !   returnVoid
  565.     set    display1,%o0
  566.     ld    [%fp+64],%o1
  567.     st    %o1,[%o0]
  568.     ret
  569.     restore
  570. ! PROCEDURE...
  571. !   procEntry p2_printArray,lexLev=1,frameSize=120
  572. p2_printArray:    save    %sp,-120,%sp
  573.     set    display1,%o0
  574.     ld    [%o0],%o1
  575.     st    %o1,[%fp+64]
  576.     st    %fp,[%o0]
  577. ! VAR INITIALIZATION...
  578. !   i := 0
  579.     set    0,%o0
  580.     st    %o0,[%fp+-4]
  581. ! WRITE STMT...
  582. !   writeString str3
  583.     sethi    %hi(str3),%o0
  584.     call    printf
  585.     or    %o0,%lo(str3),%o0
  586. !   writeNewline
  587.     sethi    %hi(strNL),%o0
  588.     call    printf
  589.     or    %o0,%lo(strNL),%o0
  590. ! FOR...
  591. !   t21 := &i
  592.     add    %fp,-4,%o0
  593.     st    %o0,[%fp+-20]
  594. !   t18 := 1
  595.     set    1,%o0
  596.     st    %o0,[%fp+-8]
  597. !   t19 := 9
  598.     set    9,%o0
  599.     st    %o0,[%fp+-12]
  600. !   t20 := 1
  601.     set    1,%o0
  602.     st    %o0,[%fp+-16]
  603. !   *t21 := t18
  604.     ld    [%fp+-8],%o0
  605.     ld    [%fp+-20],%o1
  606.     st    %o0,[%o1]
  607. !   Label_9:
  608. Label_9:
  609. !   if t18 > t19 goto Label_10        (integer)
  610.     ld    [%fp+-8],%o0
  611.     ld    [%fp+-12],%o1
  612.     cmp    %o0,%o1
  613.     bg    Label_10
  614.     nop
  615. ! WRITE STMT...
  616. !   if a = 0 goto runtimeError2        (integer)
  617.     set    display0,%o0
  618.     ld    [%o0],%o0
  619.     ld    [%o0+-4],%o0
  620.     set    0,%o1
  621.     cmp    %o0,%o1
  622.     be    runtimeError2
  623.     nop
  624. !   if i < 0 goto runtimeError4        (integer)
  625.     ld    [%fp+-4],%o0
  626.     set    0,%o1
  627.     cmp    %o0,%o1
  628.     bl    runtimeError4
  629.     nop
  630. !   t22 := *a
  631.     set    display0,%o0
  632.     ld    [%o0],%o0
  633.     ld    [%o0+-4],%o0
  634.     ld    [%o0],%o0
  635.     st    %o0,[%fp+-24]
  636. !   if i >= t22 goto runtimeError4        (integer)
  637.     ld    [%fp+-4],%o0
  638.     ld    [%fp+-24],%o1
  639.     cmp    %o0,%o1
  640.     bge    runtimeError4
  641.     nop
  642. !   t22 := i * 4        (integer)
  643.     ld    [%fp+-4],%o0
  644.     set    4,%o1
  645.     smul    %o0,%o1,%o1
  646.     st    %o1,[%fp+-24]
  647. !   t22 := t22 + 4        (integer)
  648.     ld    [%fp+-24],%o0
  649.     set    4,%o1
  650.     add    %o0,%o1,%o1
  651.     st    %o1,[%fp+-24]
  652. !   t22 := a + t22        (integer)
  653.     set    display0,%o0
  654.     ld    [%o0],%o0
  655.     ld    [%o0+-4],%o0
  656.     ld    [%fp+-24],%o1
  657.     add    %o0,%o1,%o1
  658.     st    %o1,[%fp+-24]
  659. !   t23 := *t22
  660.     ld    [%fp+-24],%o0
  661.     ld    [%o0],%o0
  662.     st    %o0,[%fp+-28]
  663. !   writeInt t23
  664.     ld    [%fp+-28],%o1
  665.     sethi    %hi(strInt),%o0
  666.     call    printf
  667.     or    %o0,%lo(strInt),%o0
  668. !   writeNewline
  669.     sethi    %hi(strNL),%o0
  670.     call    printf
  671.     or    %o0,%lo(strNL),%o0
  672. ! END FOR...
  673. !   t18 := *t21
  674.     ld    [%fp+-20],%o0
  675.     ld    [%o0],%o0
  676.     st    %o0,[%fp+-8]
  677. !   t18 := t18 + t20        (integer)
  678.     ld    [%fp+-8],%o0
  679.     ld    [%fp+-16],%o1
  680.     add    %o0,%o1,%o1
  681.     st    %o1,[%fp+-8]
  682. !   *t21 := t18
  683.     ld    [%fp+-8],%o0
  684.     ld    [%fp+-20],%o1
  685.     st    %o0,[%o1]
  686. !   goto Label_9
  687.     ba    Label_9
  688.     nop
  689. !   Label_10:
  690. Label_10:
  691. ! RETURN...
  692. !   returnVoid
  693.     set    display1,%o0
  694.     ld    [%fp+64],%o1
  695.     st    %o1,[%o0]
  696.     ret
  697.     restore
  698. ! PROCEDURE...
  699. !   procEntry p3_partition,lexLev=1,frameSize=208
  700. p3_partition:    save    %sp,-208,%sp
  701.     set    display1,%o0
  702.     ld    [%o0],%o1
  703.     st    %o1,[%fp+64]
  704.     st    %fp,[%o0]
  705. !   formal 1,l
  706. !   formal 2,r
  707. ! VAR INITIALIZATION...
  708. !   i := 0
  709.     set    0,%o0
  710.     st    %o0,[%fp+-4]
  711. ! VAR INITIALIZATION...
  712. !   j := i
  713.     ld    [%fp+-4],%o0
  714.     st    %o0,[%fp+-8]
  715. ! VAR INITIALIZATION...
  716. !   v := i
  717.     ld    [%fp+-4],%o0
  718.     st    %o0,[%fp+-12]
  719. ! VAR INITIALIZATION...
  720. !   t := i
  721.     ld    [%fp+-4],%o0
  722.     st    %o0,[%fp+-16]
  723. ! ASSIGNMENT STMT...
  724. !   if a = 0 goto runtimeError2        (integer)
  725.     set    display0,%o0
  726.     ld    [%o0],%o0
  727.     ld    [%o0+-4],%o0
  728.     set    0,%o1
  729.     cmp    %o0,%o1
  730.     be    runtimeError2
  731.     nop
  732. !   if r < 0 goto runtimeError4        (integer)
  733.     ld    [%fp+72],%o0
  734.     set    0,%o1
  735.     cmp    %o0,%o1
  736.     bl    runtimeError4
  737.     nop
  738. !   t24 := *a
  739.     set    display0,%o0
  740.     ld    [%o0],%o0
  741.     ld    [%o0+-4],%o0
  742.     ld    [%o0],%o0
  743.     st    %o0,[%fp+-20]
  744. !   if r >= t24 goto runtimeError4        (integer)
  745.     ld    [%fp+72],%o0
  746.     ld    [%fp+-20],%o1
  747.     cmp    %o0,%o1
  748.     bge    runtimeError4
  749.     nop
  750. !   t24 := r * 4        (integer)
  751.     ld    [%fp+72],%o0
  752.     set    4,%o1
  753.     smul    %o0,%o1,%o1
  754.     st    %o1,[%fp+-20]
  755. !   t24 := t24 + 4        (integer)
  756.     ld    [%fp+-20],%o0
  757.     set    4,%o1
  758.     add    %o0,%o1,%o1
  759.     st    %o1,[%fp+-20]
  760. !   t24 := a + t24        (integer)
  761.     set    display0,%o0
  762.     ld    [%o0],%o0
  763.     ld    [%o0+-4],%o0
  764.     ld    [%fp+-20],%o1
  765.     add    %o0,%o1,%o1
  766.     st    %o1,[%fp+-20]
  767. !   t25 := *t24
  768.     ld    [%fp+-20],%o0
  769.     ld    [%o0],%o0
  770.     st    %o0,[%fp+-24]
  771. !   v := t25
  772.     ld    [%fp+-24],%o0
  773.     st    %o0,[%fp+-12]
  774. ! ASSIGNMENT STMT...
  775. !   t26 := l - 1        (integer)
  776.     ld    [%fp+68],%o0
  777.     set    1,%o1
  778.     sub    %o0,%o1,%o1
  779.     st    %o1,[%fp+-28]
  780. !   i := t26
  781.     ld    [%fp+-28],%o0
  782.     st    %o0,[%fp+-4]
  783. ! ASSIGNMENT STMT...
  784. !   j := r
  785.     ld    [%fp+72],%o0
  786.     st    %o0,[%fp+-8]
  787. ! LOOP...
  788. !   Label_11:
  789. Label_11:
  790. ! ASSIGNMENT STMT...
  791. !   t27 := i + 1        (integer)
  792.     ld    [%fp+-4],%o0
  793.     set    1,%o1
  794.     add    %o0,%o1,%o1
  795.     st    %o1,[%fp+-32]
  796. !   i := t27
  797.     ld    [%fp+-32],%o0
  798.     st    %o0,[%fp+-4]
  799. ! WHILE...
  800. !   Label_13:
  801. Label_13:
  802. !   if a = 0 goto runtimeError2        (integer)
  803.     set    display0,%o0
  804.     ld    [%o0],%o0
  805.     ld    [%o0+-4],%o0
  806.     set    0,%o1
  807.     cmp    %o0,%o1
  808.     be    runtimeError2
  809.     nop
  810. !   if i < 0 goto runtimeError4        (integer)
  811.     ld    [%fp+-4],%o0
  812.     set    0,%o1
  813.     cmp    %o0,%o1
  814.     bl    runtimeError4
  815.     nop
  816. !   t28 := *a
  817.     set    display0,%o0
  818.     ld    [%o0],%o0
  819.     ld    [%o0+-4],%o0
  820.     ld    [%o0],%o0
  821.     st    %o0,[%fp+-36]
  822. !   if i >= t28 goto runtimeError4        (integer)
  823.     ld    [%fp+-4],%o0
  824.     ld    [%fp+-36],%o1
  825.     cmp    %o0,%o1
  826.     bge    runtimeError4
  827.     nop
  828. !   t28 := i * 4        (integer)
  829.     ld    [%fp+-4],%o0
  830.     set    4,%o1
  831.     smul    %o0,%o1,%o1
  832.     st    %o1,[%fp+-36]
  833. !   t28 := t28 + 4        (integer)
  834.     ld    [%fp+-36],%o0
  835.     set    4,%o1
  836.     add    %o0,%o1,%o1
  837.     st    %o1,[%fp+-36]
  838. !   t28 := a + t28        (integer)
  839.     set    display0,%o0
  840.     ld    [%o0],%o0
  841.     ld    [%o0+-4],%o0
  842.     ld    [%fp+-36],%o1
  843.     add    %o0,%o1,%o1
  844.     st    %o1,[%fp+-36]
  845. !   t29 := *t28
  846.     ld    [%fp+-36],%o0
  847.     ld    [%o0],%o0
  848.     st    %o0,[%fp+-40]
  849. !   if t29 < v goto Label_14        (integer)
  850.     ld    [%fp+-40],%o0
  851.     ld    [%fp+-12],%o1
  852.     cmp    %o0,%o1
  853.     bl    Label_14
  854.     nop
  855. !   goto Label_15
  856.     ba    Label_15
  857.     nop
  858. !   Label_14:
  859. Label_14:
  860. ! ASSIGNMENT STMT...
  861. !   t30 := i + 1        (integer)
  862.     ld    [%fp+-4],%o0
  863.     set    1,%o1
  864.     add    %o0,%o1,%o1
  865.     st    %o1,[%fp+-44]
  866. !   i := t30
  867.     ld    [%fp+-44],%o0
  868.     st    %o0,[%fp+-4]
  869. ! END WHILE...
  870. !   goto Label_13
  871.     ba    Label_13
  872.     nop
  873. !   Label_15:
  874. Label_15:
  875. ! ASSIGNMENT STMT...
  876. !   t31 := j - 1        (integer)
  877.     ld    [%fp+-8],%o0
  878.     set    1,%o1
  879.     sub    %o0,%o1,%o1
  880.     st    %o1,[%fp+-48]
  881. !   j := t31
  882.     ld    [%fp+-48],%o0
  883.     st    %o0,[%fp+-8]
  884. ! WHILE...
  885. !   Label_16:
  886. Label_16:
  887. !   if a = 0 goto runtimeError2        (integer)
  888.     set    display0,%o0
  889.     ld    [%o0],%o0
  890.     ld    [%o0+-4],%o0
  891.     set    0,%o1
  892.     cmp    %o0,%o1
  893.     be    runtimeError2
  894.     nop
  895. !   if j < 0 goto runtimeError4        (integer)
  896.     ld    [%fp+-8],%o0
  897.     set    0,%o1
  898.     cmp    %o0,%o1
  899.     bl    runtimeError4
  900.     nop
  901. !   t32 := *a
  902.     set    display0,%o0
  903.     ld    [%o0],%o0
  904.     ld    [%o0+-4],%o0
  905.     ld    [%o0],%o0
  906.     st    %o0,[%fp+-52]
  907. !   if j >= t32 goto runtimeError4        (integer)
  908.     ld    [%fp+-8],%o0
  909.     ld    [%fp+-52],%o1
  910.     cmp    %o0,%o1
  911.     bge    runtimeError4
  912.     nop
  913. !   t32 := j * 4        (integer)
  914.     ld    [%fp+-8],%o0
  915.     set    4,%o1
  916.     smul    %o0,%o1,%o1
  917.     st    %o1,[%fp+-52]
  918. !   t32 := t32 + 4        (integer)
  919.     ld    [%fp+-52],%o0
  920.     set    4,%o1
  921.     add    %o0,%o1,%o1
  922.     st    %o1,[%fp+-52]
  923. !   t32 := a + t32        (integer)
  924.     set    display0,%o0
  925.     ld    [%o0],%o0
  926.     ld    [%o0+-4],%o0
  927.     ld    [%fp+-52],%o1
  928.     add    %o0,%o1,%o1
  929.     st    %o1,[%fp+-52]
  930. !   t33 := *t32
  931.     ld    [%fp+-52],%o0
  932.     ld    [%o0],%o0
  933.     st    %o0,[%fp+-56]
  934. !   if t33 > v goto Label_17        (integer)
  935.     ld    [%fp+-56],%o0
  936.     ld    [%fp+-12],%o1
  937.     cmp    %o0,%o1
  938.     bg    Label_17
  939.     nop
  940. !   goto Label_18
  941.     ba    Label_18
  942.     nop
  943. !   Label_17:
  944. Label_17:
  945. ! ASSIGNMENT STMT...
  946. !   t34 := j - 1        (integer)
  947.     ld    [%fp+-8],%o0
  948.     set    1,%o1
  949.     sub    %o0,%o1,%o1
  950.     st    %o1,[%fp+-60]
  951. !   j := t34
  952.     ld    [%fp+-60],%o0
  953.     st    %o0,[%fp+-8]
  954. ! END WHILE...
  955. !   goto Label_16
  956.     ba    Label_16
  957.     nop
  958. !   Label_18:
  959. Label_18:
  960. ! ASSIGNMENT STMT...
  961. !   if a = 0 goto runtimeError2        (integer)
  962.     set    display0,%o0
  963.     ld    [%o0],%o0
  964.     ld    [%o0+-4],%o0
  965.     set    0,%o1
  966.     cmp    %o0,%o1
  967.     be    runtimeError2
  968.     nop
  969. !   if i < 0 goto runtimeError4        (integer)
  970.     ld    [%fp+-4],%o0
  971.     set    0,%o1
  972.     cmp    %o0,%o1
  973.     bl    runtimeError4
  974.     nop
  975. !   t35 := *a
  976.     set    display0,%o0
  977.     ld    [%o0],%o0
  978.     ld    [%o0+-4],%o0
  979.     ld    [%o0],%o0
  980.     st    %o0,[%fp+-64]
  981. !   if i >= t35 goto runtimeError4        (integer)
  982.     ld    [%fp+-4],%o0
  983.     ld    [%fp+-64],%o1
  984.     cmp    %o0,%o1
  985.     bge    runtimeError4
  986.     nop
  987. !   t35 := i * 4        (integer)
  988.     ld    [%fp+-4],%o0
  989.     set    4,%o1
  990.     smul    %o0,%o1,%o1
  991.     st    %o1,[%fp+-64]
  992. !   t35 := t35 + 4        (integer)
  993.     ld    [%fp+-64],%o0
  994.     set    4,%o1
  995.     add    %o0,%o1,%o1
  996.     st    %o1,[%fp+-64]
  997. !   t35 := a + t35        (integer)
  998.     set    display0,%o0
  999.     ld    [%o0],%o0
  1000.     ld    [%o0+-4],%o0
  1001.     ld    [%fp+-64],%o1
  1002.     add    %o0,%o1,%o1
  1003.     st    %o1,[%fp+-64]
  1004. !   t36 := *t35
  1005.     ld    [%fp+-64],%o0
  1006.     ld    [%o0],%o0
  1007.     st    %o0,[%fp+-68]
  1008. !   t := t36
  1009.     ld    [%fp+-68],%o0
  1010.     st    %o0,[%fp+-16]
  1011. ! ASSIGNMENT STMT...
  1012. !   if a = 0 goto runtimeError2        (integer)
  1013.     set    display0,%o0
  1014.     ld    [%o0],%o0
  1015.     ld    [%o0+-4],%o0
  1016.     set    0,%o1
  1017.     cmp    %o0,%o1
  1018.     be    runtimeError2
  1019.     nop
  1020. !   if i < 0 goto runtimeError4        (integer)
  1021.     ld    [%fp+-4],%o0
  1022.     set    0,%o1
  1023.     cmp    %o0,%o1
  1024.     bl    runtimeError4
  1025.     nop
  1026. !   t37 := *a
  1027.     set    display0,%o0
  1028.     ld    [%o0],%o0
  1029.     ld    [%o0+-4],%o0
  1030.     ld    [%o0],%o0
  1031.     st    %o0,[%fp+-72]
  1032. !   if i >= t37 goto runtimeError4        (integer)
  1033.     ld    [%fp+-4],%o0
  1034.     ld    [%fp+-72],%o1
  1035.     cmp    %o0,%o1
  1036.     bge    runtimeError4
  1037.     nop
  1038. !   t37 := i * 4        (integer)
  1039.     ld    [%fp+-4],%o0
  1040.     set    4,%o1
  1041.     smul    %o0,%o1,%o1
  1042.     st    %o1,[%fp+-72]
  1043. !   t37 := t37 + 4        (integer)
  1044.     ld    [%fp+-72],%o0
  1045.     set    4,%o1
  1046.     add    %o0,%o1,%o1
  1047.     st    %o1,[%fp+-72]
  1048. !   t37 := a + t37        (integer)
  1049.     set    display0,%o0
  1050.     ld    [%o0],%o0
  1051.     ld    [%o0+-4],%o0
  1052.     ld    [%fp+-72],%o1
  1053.     add    %o0,%o1,%o1
  1054.     st    %o1,[%fp+-72]
  1055. !   if a = 0 goto runtimeError2        (integer)
  1056.     set    display0,%o0
  1057.     ld    [%o0],%o0
  1058.     ld    [%o0+-4],%o0
  1059.     set    0,%o1
  1060.     cmp    %o0,%o1
  1061.     be    runtimeError2
  1062.     nop
  1063. !   if j < 0 goto runtimeError4        (integer)
  1064.     ld    [%fp+-8],%o0
  1065.     set    0,%o1
  1066.     cmp    %o0,%o1
  1067.     bl    runtimeError4
  1068.     nop
  1069. !   t38 := *a
  1070.     set    display0,%o0
  1071.     ld    [%o0],%o0
  1072.     ld    [%o0+-4],%o0
  1073.     ld    [%o0],%o0
  1074.     st    %o0,[%fp+-76]
  1075. !   if j >= t38 goto runtimeError4        (integer)
  1076.     ld    [%fp+-8],%o0
  1077.     ld    [%fp+-76],%o1
  1078.     cmp    %o0,%o1
  1079.     bge    runtimeError4
  1080.     nop
  1081. !   t38 := j * 4        (integer)
  1082.     ld    [%fp+-8],%o0
  1083.     set    4,%o1
  1084.     smul    %o0,%o1,%o1
  1085.     st    %o1,[%fp+-76]
  1086. !   t38 := t38 + 4        (integer)
  1087.     ld    [%fp+-76],%o0
  1088.     set    4,%o1
  1089.     add    %o0,%o1,%o1
  1090.     st    %o1,[%fp+-76]
  1091. !   t38 := a + t38        (integer)
  1092.     set    display0,%o0
  1093.     ld    [%o0],%o0
  1094.     ld    [%o0+-4],%o0
  1095.     ld    [%fp+-76],%o1
  1096.     add    %o0,%o1,%o1
  1097.     st    %o1,[%fp+-76]
  1098. !   t39 := *t38
  1099.     ld    [%fp+-76],%o0
  1100.     ld    [%o0],%o0
  1101.     st    %o0,[%fp+-80]
  1102. !   *t37 := t39
  1103.     ld    [%fp+-80],%o0
  1104.     ld    [%fp+-72],%o1
  1105.     st    %o0,[%o1]
  1106. ! ASSIGNMENT STMT...
  1107. !   if a = 0 goto runtimeError2        (integer)
  1108.     set    display0,%o0
  1109.     ld    [%o0],%o0
  1110.     ld    [%o0+-4],%o0
  1111.     set    0,%o1
  1112.     cmp    %o0,%o1
  1113.     be    runtimeError2
  1114.     nop
  1115. !   if j < 0 goto runtimeError4        (integer)
  1116.     ld    [%fp+-8],%o0
  1117.     set    0,%o1
  1118.     cmp    %o0,%o1
  1119.     bl    runtimeError4
  1120.     nop
  1121. !   t40 := *a
  1122.     set    display0,%o0
  1123.     ld    [%o0],%o0
  1124.     ld    [%o0+-4],%o0
  1125.     ld    [%o0],%o0
  1126.     st    %o0,[%fp+-84]
  1127. !   if j >= t40 goto runtimeError4        (integer)
  1128.     ld    [%fp+-8],%o0
  1129.     ld    [%fp+-84],%o1
  1130.     cmp    %o0,%o1
  1131.     bge    runtimeError4
  1132.     nop
  1133. !   t40 := j * 4        (integer)
  1134.     ld    [%fp+-8],%o0
  1135.     set    4,%o1
  1136.     smul    %o0,%o1,%o1
  1137.     st    %o1,[%fp+-84]
  1138. !   t40 := t40 + 4        (integer)
  1139.     ld    [%fp+-84],%o0
  1140.     set    4,%o1
  1141.     add    %o0,%o1,%o1
  1142.     st    %o1,[%fp+-84]
  1143. !   t40 := a + t40        (integer)
  1144.     set    display0,%o0
  1145.     ld    [%o0],%o0
  1146.     ld    [%o0+-4],%o0
  1147.     ld    [%fp+-84],%o1
  1148.     add    %o0,%o1,%o1
  1149.     st    %o1,[%fp+-84]
  1150. !   *t40 := t
  1151.     ld    [%fp+-16],%o0
  1152.     ld    [%fp+-84],%o1
  1153.     st    %o0,[%o1]
  1154. ! IF...
  1155. !   if j <= i goto Label_19        (integer)
  1156.     ld    [%fp+-8],%o0
  1157.     ld    [%fp+-4],%o1
  1158.     cmp    %o0,%o1
  1159.     ble    Label_19
  1160.     nop
  1161. !   goto Label_20
  1162.     ba    Label_20
  1163.     nop
  1164. !   Label_19:
  1165. Label_19:
  1166. ! THEN...
  1167. ! EXIT...
  1168. !   goto Label_12
  1169.     ba    Label_12
  1170.     nop
  1171. ! END IF...
  1172. !   Label_20:
  1173. Label_20:
  1174. ! END LOOP...
  1175. !   goto Label_11
  1176.     ba    Label_11
  1177.     nop
  1178. !   Label_12:
  1179. Label_12:
  1180. ! ASSIGNMENT STMT...
  1181. !   if a = 0 goto runtimeError2        (integer)
  1182.     set    display0,%o0
  1183.     ld    [%o0],%o0
  1184.     ld    [%o0+-4],%o0
  1185.     set    0,%o1
  1186.     cmp    %o0,%o1
  1187.     be    runtimeError2
  1188.     nop
  1189. !   if j < 0 goto runtimeError4        (integer)
  1190.     ld    [%fp+-8],%o0
  1191.     set    0,%o1
  1192.     cmp    %o0,%o1
  1193.     bl    runtimeError4
  1194.     nop
  1195. !   t41 := *a
  1196.     set    display0,%o0
  1197.     ld    [%o0],%o0
  1198.     ld    [%o0+-4],%o0
  1199.     ld    [%o0],%o0
  1200.     st    %o0,[%fp+-88]
  1201. !   if j >= t41 goto runtimeError4        (integer)
  1202.     ld    [%fp+-8],%o0
  1203.     ld    [%fp+-88],%o1
  1204.     cmp    %o0,%o1
  1205.     bge    runtimeError4
  1206.     nop
  1207. !   t41 := j * 4        (integer)
  1208.     ld    [%fp+-8],%o0
  1209.     set    4,%o1
  1210.     smul    %o0,%o1,%o1
  1211.     st    %o1,[%fp+-88]
  1212. !   t41 := t41 + 4        (integer)
  1213.     ld    [%fp+-88],%o0
  1214.     set    4,%o1
  1215.     add    %o0,%o1,%o1
  1216.     st    %o1,[%fp+-88]
  1217. !   t41 := a + t41        (integer)
  1218.     set    display0,%o0
  1219.     ld    [%o0],%o0
  1220.     ld    [%o0+-4],%o0
  1221.     ld    [%fp+-88],%o1
  1222.     add    %o0,%o1,%o1
  1223.     st    %o1,[%fp+-88]
  1224. !   if a = 0 goto runtimeError2        (integer)
  1225.     set    display0,%o0
  1226.     ld    [%o0],%o0
  1227.     ld    [%o0+-4],%o0
  1228.     set    0,%o1
  1229.     cmp    %o0,%o1
  1230.     be    runtimeError2
  1231.     nop
  1232. !   if i < 0 goto runtimeError4        (integer)
  1233.     ld    [%fp+-4],%o0
  1234.     set    0,%o1
  1235.     cmp    %o0,%o1
  1236.     bl    runtimeError4
  1237.     nop
  1238. !   t42 := *a
  1239.     set    display0,%o0
  1240.     ld    [%o0],%o0
  1241.     ld    [%o0+-4],%o0
  1242.     ld    [%o0],%o0
  1243.     st    %o0,[%fp+-92]
  1244. !   if i >= t42 goto runtimeError4        (integer)
  1245.     ld    [%fp+-4],%o0
  1246.     ld    [%fp+-92],%o1
  1247.     cmp    %o0,%o1
  1248.     bge    runtimeError4
  1249.     nop
  1250. !   t42 := i * 4        (integer)
  1251.     ld    [%fp+-4],%o0
  1252.     set    4,%o1
  1253.     smul    %o0,%o1,%o1
  1254.     st    %o1,[%fp+-92]
  1255. !   t42 := t42 + 4        (integer)
  1256.     ld    [%fp+-92],%o0
  1257.     set    4,%o1
  1258.     add    %o0,%o1,%o1
  1259.     st    %o1,[%fp+-92]
  1260. !   t42 := a + t42        (integer)
  1261.     set    display0,%o0
  1262.     ld    [%o0],%o0
  1263.     ld    [%o0+-4],%o0
  1264.     ld    [%fp+-92],%o1
  1265.     add    %o0,%o1,%o1
  1266.     st    %o1,[%fp+-92]
  1267. !   t43 := *t42
  1268.     ld    [%fp+-92],%o0
  1269.     ld    [%o0],%o0
  1270.     st    %o0,[%fp+-96]
  1271. !   *t41 := t43
  1272.     ld    [%fp+-96],%o0
  1273.     ld    [%fp+-88],%o1
  1274.     st    %o0,[%o1]
  1275. ! ASSIGNMENT STMT...
  1276. !   if a = 0 goto runtimeError2        (integer)
  1277.     set    display0,%o0
  1278.     ld    [%o0],%o0
  1279.     ld    [%o0+-4],%o0
  1280.     set    0,%o1
  1281.     cmp    %o0,%o1
  1282.     be    runtimeError2
  1283.     nop
  1284. !   if i < 0 goto runtimeError4        (integer)
  1285.     ld    [%fp+-4],%o0
  1286.     set    0,%o1
  1287.     cmp    %o0,%o1
  1288.     bl    runtimeError4
  1289.     nop
  1290. !   t44 := *a
  1291.     set    display0,%o0
  1292.     ld    [%o0],%o0
  1293.     ld    [%o0+-4],%o0
  1294.     ld    [%o0],%o0
  1295.     st    %o0,[%fp+-100]
  1296. !   if i >= t44 goto runtimeError4        (integer)
  1297.     ld    [%fp+-4],%o0
  1298.     ld    [%fp+-100],%o1
  1299.     cmp    %o0,%o1
  1300.     bge    runtimeError4
  1301.     nop
  1302. !   t44 := i * 4        (integer)
  1303.     ld    [%fp+-4],%o0
  1304.     set    4,%o1
  1305.     smul    %o0,%o1,%o1
  1306.     st    %o1,[%fp+-100]
  1307. !   t44 := t44 + 4        (integer)
  1308.     ld    [%fp+-100],%o0
  1309.     set    4,%o1
  1310.     add    %o0,%o1,%o1
  1311.     st    %o1,[%fp+-100]
  1312. !   t44 := a + t44        (integer)
  1313.     set    display0,%o0
  1314.     ld    [%o0],%o0
  1315.     ld    [%o0+-4],%o0
  1316.     ld    [%fp+-100],%o1
  1317.     add    %o0,%o1,%o1
  1318.     st    %o1,[%fp+-100]
  1319. !   if a = 0 goto runtimeError2        (integer)
  1320.     set    display0,%o0
  1321.     ld    [%o0],%o0
  1322.     ld    [%o0+-4],%o0
  1323.     set    0,%o1
  1324.     cmp    %o0,%o1
  1325.     be    runtimeError2
  1326.     nop
  1327. !   if r < 0 goto runtimeError4        (integer)
  1328.     ld    [%fp+72],%o0
  1329.     set    0,%o1
  1330.     cmp    %o0,%o1
  1331.     bl    runtimeError4
  1332.     nop
  1333. !   t45 := *a
  1334.     set    display0,%o0
  1335.     ld    [%o0],%o0
  1336.     ld    [%o0+-4],%o0
  1337.     ld    [%o0],%o0
  1338.     st    %o0,[%fp+-104]
  1339. !   if r >= t45 goto runtimeError4        (integer)
  1340.     ld    [%fp+72],%o0
  1341.     ld    [%fp+-104],%o1
  1342.     cmp    %o0,%o1
  1343.     bge    runtimeError4
  1344.     nop
  1345. !   t45 := r * 4        (integer)
  1346.     ld    [%fp+72],%o0
  1347.     set    4,%o1
  1348.     smul    %o0,%o1,%o1
  1349.     st    %o1,[%fp+-104]
  1350. !   t45 := t45 + 4        (integer)
  1351.     ld    [%fp+-104],%o0
  1352.     set    4,%o1
  1353.     add    %o0,%o1,%o1
  1354.     st    %o1,[%fp+-104]
  1355. !   t45 := a + t45        (integer)
  1356.     set    display0,%o0
  1357.     ld    [%o0],%o0
  1358.     ld    [%o0+-4],%o0
  1359.     ld    [%fp+-104],%o1
  1360.     add    %o0,%o1,%o1
  1361.     st    %o1,[%fp+-104]
  1362. !   t46 := *t45
  1363.     ld    [%fp+-104],%o0
  1364.     ld    [%o0],%o0
  1365.     st    %o0,[%fp+-108]
  1366. !   *t44 := t46
  1367.     ld    [%fp+-108],%o0
  1368.     ld    [%fp+-100],%o1
  1369.     st    %o0,[%o1]
  1370. ! ASSIGNMENT STMT...
  1371. !   if a = 0 goto runtimeError2        (integer)
  1372.     set    display0,%o0
  1373.     ld    [%o0],%o0
  1374.     ld    [%o0+-4],%o0
  1375.     set    0,%o1
  1376.     cmp    %o0,%o1
  1377.     be    runtimeError2
  1378.     nop
  1379. !   if r < 0 goto runtimeError4        (integer)
  1380.     ld    [%fp+72],%o0
  1381.     set    0,%o1
  1382.     cmp    %o0,%o1
  1383.     bl    runtimeError4
  1384.     nop
  1385. !   t47 := *a
  1386.     set    display0,%o0
  1387.     ld    [%o0],%o0
  1388.     ld    [%o0+-4],%o0
  1389.     ld    [%o0],%o0
  1390.     st    %o0,[%fp+-112]
  1391. !   if r >= t47 goto runtimeError4        (integer)
  1392.     ld    [%fp+72],%o0
  1393.     ld    [%fp+-112],%o1
  1394.     cmp    %o0,%o1
  1395.     bge    runtimeError4
  1396.     nop
  1397. !   t47 := r * 4        (integer)
  1398.     ld    [%fp+72],%o0
  1399.     set    4,%o1
  1400.     smul    %o0,%o1,%o1
  1401.     st    %o1,[%fp+-112]
  1402. !   t47 := t47 + 4        (integer)
  1403.     ld    [%fp+-112],%o0
  1404.     set    4,%o1
  1405.     add    %o0,%o1,%o1
  1406.     st    %o1,[%fp+-112]
  1407. !   t47 := a + t47        (integer)
  1408.     set    display0,%o0
  1409.     ld    [%o0],%o0
  1410.     ld    [%o0+-4],%o0
  1411.     ld    [%fp+-112],%o1
  1412.     add    %o0,%o1,%o1
  1413.     st    %o1,[%fp+-112]
  1414. !   *t47 := t
  1415.     ld    [%fp+-16],%o0
  1416.     ld    [%fp+-112],%o1
  1417.     st    %o0,[%o1]
  1418. ! RETURN...
  1419. !   returnExpr i
  1420.     ld    [%fp+-4],%i0
  1421.     set    display1,%o0
  1422.     ld    [%fp+64],%o1
  1423.     st    %o1,[%o0]
  1424.     ret
  1425.     restore
  1426. ! PROCEDURE...
  1427. !   procEntry p4_quicksort,lexLev=1,frameSize=112
  1428. p4_quicksort:    save    %sp,-112,%sp
  1429.     set    display1,%o0
  1430.     ld    [%o0],%o1
  1431.     st    %o1,[%fp+64]
  1432.     st    %fp,[%o0]
  1433. !   formal 1,m
  1434. !   formal 2,n
  1435. ! VAR INITIALIZATION...
  1436. !   i := 0
  1437.     set    0,%o0
  1438.     st    %o0,[%fp+-4]
  1439. ! IF...
  1440. !   if n > m goto Label_21        (integer)
  1441.     ld    [%fp+72],%o0
  1442.     ld    [%fp+68],%o1
  1443.     cmp    %o0,%o1
  1444.     bg    Label_21
  1445.     nop
  1446. !   goto Label_22
  1447.     ba    Label_22
  1448.     nop
  1449. !   Label_21:
  1450. Label_21:
  1451. ! THEN...
  1452. ! ASSIGNMENT STMT...
  1453. !   param 1,m
  1454.     ld    [%fp+68],%o0
  1455.     st    %o0,[%sp+68]
  1456. !   param 2,n
  1457.     ld    [%fp+72],%o0
  1458.     st    %o0,[%sp+72]
  1459. !   call p3_partition
  1460.     call    p3_partition
  1461.     nop
  1462. !   resultTo t48
  1463.     st    %o0,[%fp+-8]
  1464. !   i := t48
  1465.     ld    [%fp+-8],%o0
  1466.     st    %o0,[%fp+-4]
  1467. ! CALL STMT...
  1468. !   t49 := i - 1        (integer)
  1469.     ld    [%fp+-4],%o0
  1470.     set    1,%o1
  1471.     sub    %o0,%o1,%o1
  1472.     st    %o1,[%fp+-12]
  1473. !   param 1,m
  1474.     ld    [%fp+68],%o0
  1475.     st    %o0,[%sp+68]
  1476. !   param 2,t49
  1477.     ld    [%fp+-12],%o0
  1478.     st    %o0,[%sp+72]
  1479. !   call p4_quicksort
  1480.     call    p4_quicksort
  1481.     nop
  1482. ! CALL STMT...
  1483. !   t50 := i + 1        (integer)
  1484.     ld    [%fp+-4],%o0
  1485.     set    1,%o1
  1486.     add    %o0,%o1,%o1
  1487.     st    %o1,[%fp+-16]
  1488. !   param 1,t50
  1489.     ld    [%fp+-16],%o0
  1490.     st    %o0,[%sp+68]
  1491. !   param 2,n
  1492.     ld    [%fp+72],%o0
  1493.     st    %o0,[%sp+72]
  1494. !   call p4_quicksort
  1495.     call    p4_quicksort
  1496.     nop
  1497. ! END IF...
  1498. !   Label_22:
  1499. Label_22:
  1500. ! RETURN...
  1501. !   returnVoid
  1502.     set    display1,%o0
  1503.     ld    [%fp+64],%o1
  1504.     st    %o1,[%o0]
  1505.     ret
  1506.     restore
  1507.