# Homework2: RISC-V Toolchain
###### tags: `2022 computer architecture`
[toc]
## -O0 assembly code
```assembly=
000101d0 <heapify>:
101d0: fd010113 addi sp,sp,-48
101d4: 02812623 sw s0,44(sp)
101d8: 03010413 addi s0,sp,48
101dc: fca42e23 sw a0,-36(s0)
101e0: fcb42c23 sw a1,-40(s0)
101e4: fcc42a23 sw a2,-44(s0)
101e8: fd842783 lw a5,-40(s0)
101ec: 00279793 slli a5,a5,0x2
101f0: fdc42703 lw a4,-36(s0)
101f4: 00f707b3 add a5,a4,a5
101f8: 0007a783 lw a5,0(a5)
101fc: fef42223 sw a5,-28(s0)
10200: fd842783 lw a5,-40(s0)
10204: 00179793 slli a5,a5,0x1
10208: 00178793 addi a5,a5,1
1020c: fef42623 sw a5,-20(s0)
10210: 0e00006f j 102f0 <heapify+0x120>
10214: fd442783 lw a5,-44(s0)
10218: fff78793 addi a5,a5,-1
1021c: fec42703 lw a4,-20(s0)
10220: 04f75063 bge a4,a5,10260 <heapify+0x90>
10224: fec42783 lw a5,-20(s0)
10228: 00279793 slli a5,a5,0x2
1022c: fdc42703 lw a4,-36(s0)
10230: 00f707b3 add a5,a4,a5
10234: 0007a703 lw a4,0(a5)
10238: fec42783 lw a5,-20(s0)
1023c: 00178793 addi a5,a5,1
10240: 00279793 slli a5,a5,0x2
10244: fdc42683 lw a3,-36(s0)
10248: 00f687b3 add a5,a3,a5
1024c: 0007a783 lw a5,0(a5)
10250: 00f75863 bge a4,a5,10260 <heapify+0x90>
10254: fec42783 lw a5,-20(s0)
10258: 00178793 addi a5,a5,1
1025c: fef42623 sw a5,-20(s0)
10260: fec42783 lw a5,-20(s0)
10264: 00279793 slli a5,a5,0x2
10268: fdc42703 lw a4,-36(s0)
1026c: 00f707b3 add a5,a4,a5
10270: 0007a783 lw a5,0(a5)
10274: fe442703 lw a4,-28(s0)
10278: 08f75463 bge a4,a5,10300 <heapify+0x130>
1027c: fec42783 lw a5,-20(s0)
10280: 0017f793 andi a5,a5,1
10284: 02079063 bnez a5,102a4 <heapify+0xd4>
10288: fec42783 lw a5,-20(s0)
1028c: 01f7d713 srli a4,a5,0x1f
10290: 00f707b3 add a5,a4,a5
10294: 4017d793 srai a5,a5,0x1
10298: fff78793 addi a5,a5,-1
1029c: fef42423 sw a5,-24(s0)
102a0: 0180006f j 102b8 <heapify+0xe8>
102a4: fec42783 lw a5,-20(s0)
102a8: 01f7d713 srli a4,a5,0x1f
102ac: 00f707b3 add a5,a4,a5
102b0: 4017d793 srai a5,a5,0x1
102b4: fef42423 sw a5,-24(s0)
102b8: fec42783 lw a5,-20(s0)
102bc: 00279793 slli a5,a5,0x2
102c0: fdc42703 lw a4,-36(s0)
102c4: 00f70733 add a4,a4,a5
102c8: fe842783 lw a5,-24(s0)
102cc: 00279793 slli a5,a5,0x2
102d0: fdc42683 lw a3,-36(s0)
102d4: 00f687b3 add a5,a3,a5
102d8: 00072703 lw a4,0(a4)
102dc: 00e7a023 sw a4,0(a5)
102e0: fec42783 lw a5,-20(s0)
102e4: 00179793 slli a5,a5,0x1
102e8: 00178793 addi a5,a5,1
102ec: fef42623 sw a5,-20(s0)
102f0: fec42703 lw a4,-20(s0)
102f4: fd442783 lw a5,-44(s0)
102f8: f0f74ee3 blt a4,a5,10214 <heapify+0x44>
102fc: 0080006f j 10304 <heapify+0x134>
10300: 00000013 nop
10304: fec42783 lw a5,-20(s0)
10308: 0017f793 andi a5,a5,1
1030c: 02079063 bnez a5,1032c <heapify+0x15c>
10310: fec42783 lw a5,-20(s0)
10314: 01f7d713 srli a4,a5,0x1f
10318: 00f707b3 add a5,a4,a5
1031c: 4017d793 srai a5,a5,0x1
10320: fff78793 addi a5,a5,-1
10324: fef42423 sw a5,-24(s0)
10328: 0180006f j 10340 <heapify+0x170>
1032c: fec42783 lw a5,-20(s0)
10330: 01f7d713 srli a4,a5,0x1f
10334: 00f707b3 add a5,a4,a5
10338: 4017d793 srai a5,a5,0x1
1033c: fef42423 sw a5,-24(s0)
10340: fe842783 lw a5,-24(s0)
10344: 00279793 slli a5,a5,0x2
10348: fdc42703 lw a4,-36(s0)
1034c: 00f707b3 add a5,a4,a5
10350: fe442703 lw a4,-28(s0)
10354: 00e7a023 sw a4,0(a5)
10358: 00000013 nop
1035c: 02c12403 lw s0,44(sp)
10360: 03010113 addi sp,sp,48
10364: 00008067 ret
+++++++++++
00010368 <heapSort>:
10368: fd010113 addi sp,sp,-48
1036c: 02112623 sw ra,44(sp)
10370: 02812423 sw s0,40(sp)
10374: 03010413 addi s0,sp,48
10378: fca42e23 sw a0,-36(s0)
1037c: fcb42c23 sw a1,-40(s0)
10380: fd842783 lw a5,-40(s0)
10384: 01f7d713 srli a4,a5,0x1f
10388: 00f707b3 add a5,a4,a5
1038c: 4017d793 srai a5,a5,0x1
10390: fff78793 addi a5,a5,-1
10394: fef42623 sw a5,-20(s0)
10398: 0200006f j 103b8 <heapSort+0x50>
1039c: fd842603 lw a2,-40(s0)
103a0: fec42583 lw a1,-20(s0)
103a4: fdc42503 lw a0,-36(s0)
103a8: e29ff0ef jal ra,101d0 <heapify>
103ac: fec42783 lw a5,-20(s0)
103b0: fff78793 addi a5,a5,-1
103b4: fef42623 sw a5,-20(s0)
103b8: fec42783 lw a5,-20(s0)
103bc: fe07d0e3 bgez a5,1039c <heapSort+0x34>
103c0: fd842783 lw a5,-40(s0)
103c4: fff78793 addi a5,a5,-1
103c8: fef42423 sw a5,-24(s0)
103cc: 03c0006f j 10408 <heapSort+0xa0>
103d0: fe842783 lw a5,-24(s0)
103d4: 00279793 slli a5,a5,0x2
103d8: fdc42703 lw a4,-36(s0)
103dc: 00f707b3 add a5,a4,a5
103e0: 00078593 mv a1,a5
103e4: fdc42503 lw a0,-36(s0)
103e8: d9dff0ef jal ra,10184 <swap>
103ec: fe842603 lw a2,-24(s0)
103f0: 00000593 li a1,0
103f4: fdc42503 lw a0,-36(s0)
103f8: dd9ff0ef jal ra,101d0 <heapify>
103fc: fe842783 lw a5,-24(s0)
10400: fff78793 addi a5,a5,-1
10404: fef42423 sw a5,-24(s0)
10408: fe842783 lw a5,-24(s0)
1040c: fc07d2e3 bgez a5,103d0 <heapSort+0x68>
10410: 00000013 nop
10414: 00000013 nop
10418: 02c12083 lw ra,44(sp)
1041c: 02812403 lw s0,40(sp)
10420: 03010113 addi sp,sp,48
10424: 00008067 ret
00010428 <containsDuplicate>:
10428: fd010113 addi sp,sp,-48
1042c: 02112623 sw ra,44(sp)
10430: 02812423 sw s0,40(sp)
10434: 03010413 addi s0,sp,48
10438: fca42e23 sw a0,-36(s0)
1043c: fcb42c23 sw a1,-40(s0)
10440: fd842583 lw a1,-40(s0)
10444: fdc42503 lw a0,-36(s0)
10448: f21ff0ef jal ra,10368 <heapSort>
1044c: fe042623 sw zero,-20(s0)
10450: 0480006f j 10498 <containsDuplicate+0x70>
10454: fec42783 lw a5,-20(s0)
10458: 00279793 slli a5,a5,0x2
1045c: fdc42703 lw a4,-36(s0)
10460: 00f707b3 add a5,a4,a5
10464: 0007a703 lw a4,0(a5)
10468: fec42783 lw a5,-20(s0)
1046c: 00178793 addi a5,a5,1
10470: 00279793 slli a5,a5,0x2
10474: fdc42683 lw a3,-36(s0)
10478: 00f687b3 add a5,a3,a5
1047c: 0007a783 lw a5,0(a5)
10480: 00f71663 bne a4,a5,1048c <containsDuplicate+0x64>
10484: 00100793 li a5,1
10488: 0240006f j 104ac <containsDuplicate+0x84>
1048c: fec42783 lw a5,-20(s0)
10490: 00178793 addi a5,a5,1
10494: fef42623 sw a5,-20(s0)
10498: fd842783 lw a5,-40(s0)
1049c: fff78793 addi a5,a5,-1
104a0: fec42703 lw a4,-20(s0)
104a4: faf748e3 blt a4,a5,10454 <containsDuplicate+0x2c>
104a8: 00000793 li a5,0
104ac: 00078513 mv a0,a5
104b0: 02c12083 lw ra,44(sp)
104b4: 02812403 lw s0,40(sp)
104b8: 03010113 addi sp,sp,48
104bc: 00008067 ret
```
## -O1 Assembly Code
```assembly=
00010198 <heapify>:
10198: 00259793 slli a5,a1,0x2
1019c: 00f507b3 add a5,a0,a5
101a0: 0007a803 lw a6,0(a5)
101a4: 00159593 slli a1,a1,0x1
101a8: 00158793 addi a5,a1,1
101ac: 06c7dc63 bge a5,a2,10224 <heapify+0x8c>
101b0: fff60593 addi a1,a2,-1
101b4: 0280006f j 101dc <heapify+0x44>
101b8: 01f7d713 srli a4,a5,0x1f
101bc: 00f70733 add a4,a4,a5
101c0: 40175713 srai a4,a4,0x1
101c4: 00271713 slli a4,a4,0x2
101c8: 00e50733 add a4,a0,a4
101cc: 00d72023 sw a3,0(a4)
101d0: 00179793 slli a5,a5,0x1
101d4: 00178793 addi a5,a5,1
101d8: 04c7d663 bge a5,a2,10224 <heapify+0x8c>
101dc: 00b7de63 bge a5,a1,101f8 <heapify+0x60>
101e0: 00279713 slli a4,a5,0x2
101e4: 00e50733 add a4,a0,a4
101e8: 00072683 lw a3,0(a4)
101ec: 00472703 lw a4,4(a4)
101f0: 00e6a733 slt a4,a3,a4
101f4: 00e787b3 add a5,a5,a4
101f8: 00279713 slli a4,a5,0x2
101fc: 00e50733 add a4,a0,a4
10200: 00072683 lw a3,0(a4)
10204: 02d85063 bge a6,a3,10224 <heapify+0x8c>
10208: 0017f713 andi a4,a5,1
1020c: fa0716e3 bnez a4,101b8 <heapify+0x20>
10210: 01f7d713 srli a4,a5,0x1f
10214: 00f70733 add a4,a4,a5
10218: 40175713 srai a4,a4,0x1
1021c: fff70713 addi a4,a4,-1
10220: fa5ff06f j 101c4 <heapify+0x2c>
10224: 0017f713 andi a4,a5,1
10228: 02071263 bnez a4,1024c <heapify+0xb4>
1022c: 01f7d713 srli a4,a5,0x1f
10230: 00f707b3 add a5,a4,a5
10234: 4017d793 srai a5,a5,0x1
10238: fff78793 addi a5,a5,-1
1023c: 00279793 slli a5,a5,0x2
10240: 00f50533 add a0,a0,a5
10244: 01052023 sw a6,0(a0)
10248: 00008067 ret
1024c: 01f7d713 srli a4,a5,0x1f
10250: 00f707b3 add a5,a4,a5
10254: 4017d793 srai a5,a5,0x1
10258: fe5ff06f j 1023c <heapify+0xa4>
0001025c <heapSort>:
1025c: fe010113 addi sp,sp,-32
10260: 00112e23 sw ra,28(sp)
10264: 00812c23 sw s0,24(sp)
10268: 00912a23 sw s1,20(sp)
1026c: 01212823 sw s2,16(sp)
10270: 01312623 sw s3,12(sp)
10274: 00050913 mv s2,a0
10278: 00058413 mv s0,a1
1027c: 01f5d493 srli s1,a1,0x1f
10280: 00b484b3 add s1,s1,a1
10284: 4014d493 srai s1,s1,0x1
10288: fff48493 addi s1,s1,-1
1028c: 0204c063 bltz s1,102ac <heapSort+0x50>
10290: fff00993 li s3,-1
10294: 00040613 mv a2,s0
10298: 00048593 mv a1,s1
1029c: 00090513 mv a0,s2
102a0: ef9ff0ef jal ra,10198 <heapify>
102a4: fff48493 addi s1,s1,-1
102a8: ff3496e3 bne s1,s3,10294 <heapSort+0x38>
102ac: fff40493 addi s1,s0,-1
102b0: 0204ce63 bltz s1,102ec <heapSort+0x90>
102b4: 00241413 slli s0,s0,0x2
102b8: 00890433 add s0,s2,s0
102bc: fff00993 li s3,-1
102c0: 00092783 lw a5,0(s2)
102c4: ffc42703 lw a4,-4(s0)
102c8: 00e92023 sw a4,0(s2)
102cc: fef42e23 sw a5,-4(s0)
102d0: 00048613 mv a2,s1
102d4: 00000593 li a1,0
102d8: 00090513 mv a0,s2
102dc: ebdff0ef jal ra,10198 <heapify>
102e0: fff48493 addi s1,s1,-1
102e4: ffc40413 addi s0,s0,-4
102e8: fd349ce3 bne s1,s3,102c0 <heapSort+0x64>
102ec: 01c12083 lw ra,28(sp)
102f0: 01812403 lw s0,24(sp)
102f4: 01412483 lw s1,20(sp)
102f8: 01012903 lw s2,16(sp)
102fc: 00c12983 lw s3,12(sp)
10300: 02010113 addi sp,sp,32
10304: 00008067 ret
```
## -O2 Assembly Code
```assembly=
000102f8 <heapify>:
102f8: 00259793 slli a5,a1,0x2
102fc: 00159593 slli a1,a1,0x1
10300: 00f507b3 add a5,a0,a5
10304: 00158713 addi a4,a1,1
10308: 0007ae03 lw t3,0(a5)
1030c: fff60e93 addi t4,a2,-1
10310: 00c74a63 blt a4,a2,10324 <heapify+0x2c>
10314: 0780006f j 1038c <heapify+0x94>
10318: 00130713 addi a4,t1,1 # 102d9 <frame_dummy+0x15>
1031c: 00d7a023 sw a3,0(a5)
10320: 06c75663 bge a4,a2,1038c <heapify+0x94>
10324: 00271793 slli a5,a4,0x2
10328: 00f507b3 add a5,a0,a5
1032c: 0007a683 lw a3,0(a5)
10330: 01d75a63 bge a4,t4,10344 <heapify+0x4c>
10334: 0047a783 lw a5,4(a5)
10338: 00f6d663 bge a3,a5,10344 <heapify+0x4c>
1033c: 00170713 addi a4,a4,1
10340: 00078693 mv a3,a5
10344: 01f75593 srli a1,a4,0x1f
10348: 00e587b3 add a5,a1,a4
1034c: 00177813 andi a6,a4,1
10350: 00183893 seqz a7,a6
10354: 4017d793 srai a5,a5,0x1
10358: 411787b3 sub a5,a5,a7
1035c: 00279793 slli a5,a5,0x2
10360: 00171313 slli t1,a4,0x1
10364: 00f507b3 add a5,a0,a5
10368: fade48e3 blt t3,a3,10318 <heapify+0x20>
1036c: 00e585b3 add a1,a1,a4
10370: 4015d593 srai a1,a1,0x1
10374: 00183813 seqz a6,a6
10378: 410585b3 sub a1,a1,a6
1037c: 00259593 slli a1,a1,0x2
10380: 00b50533 add a0,a0,a1
10384: 01c52023 sw t3,0(a0)
10388: 00008067 ret
1038c: 01f75593 srli a1,a4,0x1f
10390: 00177813 andi a6,a4,1
10394: 00e585b3 add a1,a1,a4
10398: 4015d593 srai a1,a1,0x1
1039c: 00183813 seqz a6,a6
103a0: 410585b3 sub a1,a1,a6
103a4: 00259593 slli a1,a1,0x2
103a8: 00b50533 add a0,a0,a1
103ac: 01c52023 sw t3,0(a0)
103b0: 00008067 ret
000103b4 <heapSort>:
103b4: fe010113 addi sp,sp,-32
103b8: 00912a23 sw s1,20(sp)
103bc: 01f5d493 srli s1,a1,0x1f
103c0: 00b484b3 add s1,s1,a1
103c4: 4014d493 srai s1,s1,0x1
103c8: 00812c23 sw s0,24(sp)
103cc: 01212823 sw s2,16(sp)
103d0: 00112e23 sw ra,28(sp)
103d4: 01312623 sw s3,12(sp)
103d8: fff48493 addi s1,s1,-1
103dc: 00058413 mv s0,a1
103e0: 00050913 mv s2,a0
103e4: 0204c063 bltz s1,10404 <heapSort+0x50>
103e8: fff00993 li s3,-1
103ec: 00048593 mv a1,s1
103f0: 00040613 mv a2,s0
103f4: fff48493 addi s1,s1,-1
103f8: 00090513 mv a0,s2
103fc: efdff0ef jal ra,102f8 <heapify>
10400: ff3496e3 bne s1,s3,103ec <heapSort+0x38>
10404: fff40493 addi s1,s0,-1
10408: 0204ce63 bltz s1,10444 <heapSort+0x90>
1040c: 00241413 slli s0,s0,0x2
10410: 00890433 add s0,s2,s0
10414: fff00993 li s3,-1
10418: ffc42703 lw a4,-4(s0)
1041c: 00092783 lw a5,0(s2)
10420: 00048613 mv a2,s1
10424: 00e92023 sw a4,0(s2)
10428: fef42e23 sw a5,-4(s0)
1042c: 00000593 li a1,0
10430: 00090513 mv a0,s2
10434: fff48493 addi s1,s1,-1
10438: ec1ff0ef jal ra,102f8 <heapify>
1043c: ffc40413 addi s0,s0,-4
10440: fd349ce3 bne s1,s3,10418 <heapSort+0x64>
10444: 01c12083 lw ra,28(sp)
10448: 01812403 lw s0,24(sp)
1044c: 01412483 lw s1,20(sp)
10450: 01012903 lw s2,16(sp)
10454: 00c12983 lw s3,12(sp)
10458: 02010113 addi sp,sp,32
1045c: 00008067 ret
00010460 <containsDuplicate>:
10460: ff010113 addi sp,sp,-16
10464: 00812423 sw s0,8(sp)
10468: 00912223 sw s1,4(sp)
1046c: 00112623 sw ra,12(sp)
10470: 00058493 mv s1,a1
10474: 00050413 mv s0,a0
10478: f3dff0ef jal ra,103b4 <heapSort>
1047c: 00100793 li a5,1
10480: 0497d463 bge a5,s1,104c8 <containsDuplicate+0x68>
10484: 00042783 lw a5,0(s0)
10488: fff48613 addi a2,s1,-1
1048c: 00440513 addi a0,s0,4
10490: 00000713 li a4,0
10494: 0080006f j 1049c <containsDuplicate+0x3c>
10498: 02c70863 beq a4,a2,104c8 <containsDuplicate+0x68>
1049c: 00078693 mv a3,a5
104a0: 00052783 lw a5,0(a0)
104a4: 00170713 addi a4,a4,1
104a8: 00450513 addi a0,a0,4
104ac: fed796e3 bne a5,a3,10498 <containsDuplicate+0x38>
104b0: 00c12083 lw ra,12(sp)
104b4: 00812403 lw s0,8(sp)
104b8: 00412483 lw s1,4(sp)
104bc: 00100513 li a0,1
104c0: 01010113 addi sp,sp,16
104c4: 00008067 ret
104c8: 00c12083 lw ra,12(sp)
104cc: 00812403 lw s0,8(sp)
104d0: 00412483 lw s1,4(sp)
104d4: 00000513 li a0,0
104d8: 01010113 addi sp,sp,16
104dc: 00008067 ret
```
## -O3 Assembly Code
```assembly=
000102f8 <heapify>:
102f8: 00259793 slli a5,a1,0x2
102fc: 00159593 slli a1,a1,0x1
10300: 00f507b3 add a5,a0,a5
10304: 00158713 addi a4,a1,1
10308: 0007ae03 lw t3,0(a5)
1030c: fff60e93 addi t4,a2,-1
10310: 00c74a63 blt a4,a2,10324 <heapify+0x2c>
10314: 0780006f j 1038c <heapify+0x94>
10318: 00130713 addi a4,t1,1 # 102d9 <frame_dummy+0x15>
1031c: 00d7a023 sw a3,0(a5)
10320: 06c75663 bge a4,a2,1038c <heapify+0x94>
10324: 00271793 slli a5,a4,0x2
10328: 00f507b3 add a5,a0,a5
1032c: 0007a683 lw a3,0(a5)
10330: 01d75a63 bge a4,t4,10344 <heapify+0x4c>
10334: 0047a783 lw a5,4(a5)
10338: 00f6d663 bge a3,a5,10344 <heapify+0x4c>
1033c: 00170713 addi a4,a4,1
10340: 00078693 mv a3,a5
10344: 01f75593 srli a1,a4,0x1f
10348: 00e587b3 add a5,a1,a4
1034c: 00177813 andi a6,a4,1
10350: 00183893 seqz a7,a6
10354: 4017d793 srai a5,a5,0x1
10358: 411787b3 sub a5,a5,a7
1035c: 00279793 slli a5,a5,0x2
10360: 00171313 slli t1,a4,0x1
10364: 00f507b3 add a5,a0,a5
10368: fade48e3 blt t3,a3,10318 <heapify+0x20>
1036c: 00e585b3 add a1,a1,a4
10370: 4015d593 srai a1,a1,0x1
10374: 00183813 seqz a6,a6
10378: 410585b3 sub a1,a1,a6
1037c: 00259593 slli a1,a1,0x2
10380: 00b50533 add a0,a0,a1
10384: 01c52023 sw t3,0(a0)
10388: 00008067 ret
1038c: 01f75593 srli a1,a4,0x1f
10390: 00177813 andi a6,a4,1
10394: 00e585b3 add a1,a1,a4
10398: 4015d593 srai a1,a1,0x1
1039c: 00183813 seqz a6,a6
103a0: 410585b3 sub a1,a1,a6
103a4: 00259593 slli a1,a1,0x2
103a8: 00b50533 add a0,a0,a1
103ac: 01c52023 sw t3,0(a0)
103b0: 00008067 ret
000103b4 <heapSort>:
103b4: fe010113 addi sp,sp,-32
103b8: 01212823 sw s2,16(sp)
103bc: 01f5d913 srli s2,a1,0x1f
103c0: 00b90933 add s2,s2,a1
103c4: 40195913 srai s2,s2,0x1
103c8: 00812c23 sw s0,24(sp)
103cc: 00912a23 sw s1,20(sp)
103d0: 01312623 sw s3,12(sp)
103d4: 00112e23 sw ra,28(sp)
103d8: fff90913 addi s2,s2,-1
103dc: 00058493 mv s1,a1
103e0: 00050413 mv s0,a0
103e4: fff00993 li s3,-1
103e8: 00094e63 bltz s2,10404 <heapSort+0x50>
103ec: 00090593 mv a1,s2
103f0: 00048613 mv a2,s1
103f4: fff90913 addi s2,s2,-1
103f8: 00040513 mv a0,s0
103fc: efdff0ef jal ra,102f8 <heapify>
10400: ff3916e3 bne s2,s3,103ec <heapSort+0x38>
10404: fff48813 addi a6,s1,-1
10408: 0c084e63 bltz a6,104e4 <heapSort+0x130>
1040c: 00100793 li a5,1
10410: 0b07d463 bge a5,a6,104b8 <heapSort+0x104>
10414: 00249e13 slli t3,s1,0x2
10418: 00080313 mv t1,a6
1041c: 01c40e33 add t3,s0,t3
10420: 00100e93 li t4,1
10424: ffce2703 lw a4,-4(t3)
10428: 00042783 lw a5,0(s0)
1042c: fff80813 addi a6,a6,-1
10430: 00e42023 sw a4,0(s0)
10434: fefe2e23 sw a5,-4(t3)
10438: 00042883 lw a7,0(s0)
1043c: 00100713 li a4,1
10440: 00c0006f j 1044c <heapSort+0x98>
10444: 00d7a023 sw a3,0(a5)
10448: 0a675c63 bge a4,t1,10500 <heapSort+0x14c>
1044c: 00271793 slli a5,a4,0x2
10450: 00f407b3 add a5,s0,a5
10454: 0007a683 lw a3,0(a5)
10458: 01075a63 bge a4,a6,1046c <heapSort+0xb8>
1045c: 0047a783 lw a5,4(a5)
10460: 00f6d663 bge a3,a5,1046c <heapSort+0xb8>
10464: 00170713 addi a4,a4,1
10468: 00078693 mv a3,a5
1046c: 00177613 andi a2,a4,1
10470: 40175793 srai a5,a4,0x1
10474: 00171513 slli a0,a4,0x1
10478: 00163593 seqz a1,a2
1047c: 00150713 addi a4,a0,1
10480: 00078513 mv a0,a5
10484: 40b787b3 sub a5,a5,a1
10488: 00279793 slli a5,a5,0x2
1048c: 00f407b3 add a5,s0,a5
10490: fad8cae3 blt a7,a3,10444 <heapSort+0x90>
10494: 02061a63 bnez a2,104c8 <heapSort+0x114>
10498: fff50793 addi a5,a0,-1
1049c: 00279793 slli a5,a5,0x2
104a0: 00f407b3 add a5,s0,a5
104a4: 0117a023 sw a7,0(a5)
104a8: fff30313 addi t1,t1,-1
104ac: ffce0e13 addi t3,t3,-4
104b0: f70ecae3 blt t4,a6,10424 <heapSort+0x70>
104b4: 02084863 bltz a6,104e4 <heapSort+0x130>
104b8: 00281793 slli a5,a6,0x2
104bc: 00f407b3 add a5,s0,a5
104c0: 00100613 li a2,1
104c4: 04c0006f j 10510 <heapSort+0x15c>
104c8: 00251513 slli a0,a0,0x2
104cc: 00a40533 add a0,s0,a0
104d0: 01152023 sw a7,0(a0)
104d4: fff30313 addi t1,t1,-1
104d8: ffce0e13 addi t3,t3,-4
104dc: f50ec4e3 blt t4,a6,10424 <heapSort+0x70>
104e0: fc085ce3 bgez a6,104b8 <heapSort+0x104>
104e4: 01c12083 lw ra,28(sp)
104e8: 01812403 lw s0,24(sp)
104ec: 01412483 lw s1,20(sp)
104f0: 01012903 lw s2,16(sp)
104f4: 00c12983 lw s3,12(sp)
104f8: 02010113 addi sp,sp,32
104fc: 00008067 ret
10500: 00177613 andi a2,a4,1
10504: 40175513 srai a0,a4,0x1
10508: f8dff06f j 10494 <heapSort+0xe0>
1050c: 00000813 li a6,0
10510: 0007a683 lw a3,0(a5)
10514: 00042703 lw a4,0(s0)
10518: ffc78793 addi a5,a5,-4
1051c: 00d42023 sw a3,0(s0)
10520: 00e7a223 sw a4,4(a5)
10524: fec804e3 beq a6,a2,1050c <heapSort+0x158>
10528: fbdff06f j 104e4 <heapSort+0x130>
0001052c <containsDuplicate>:
1052c: ff010113 addi sp,sp,-16
10530: 00812423 sw s0,8(sp)
10534: 00912223 sw s1,4(sp)
10538: 00112623 sw ra,12(sp)
1053c: 00058493 mv s1,a1
10540: 00050413 mv s0,a0
10544: e71ff0ef jal ra,103b4 <heapSort>
10548: 00100793 li a5,1
1054c: 0497d463 bge a5,s1,10594 <containsDuplicate+0x68>
10550: 00042783 lw a5,0(s0)
10554: fff48613 addi a2,s1,-1
10558: 00440513 addi a0,s0,4
1055c: 00000713 li a4,0
10560: 0080006f j 10568 <containsDuplicate+0x3c>
10564: 02c70863 beq a4,a2,10594 <containsDuplicate+0x68>
10568: 00078693 mv a3,a5
1056c: 00052783 lw a5,0(a0)
10570: 00170713 addi a4,a4,1
10574: 00450513 addi a0,a0,4
10578: fed796e3 bne a5,a3,10564 <containsDuplicate+0x38>
1057c: 00c12083 lw ra,12(sp)
10580: 00812403 lw s0,8(sp)
10584: 00412483 lw s1,4(sp)
10588: 00100513 li a0,1
1058c: 01010113 addi sp,sp,16
10590: 00008067 ret
10594: 00c12083 lw ra,12(sp)
10598: 00812403 lw s0,8(sp)
1059c: 00412483 lw s1,4(sp)
105a0: 00000513 li a0,0
105a4: 01010113 addi sp,sp,16
105a8: 00008067 ret
```
## -Os Assembly Code
```assembly=
00010294 <heapify>:
10294: 00259793 slli a5,a1,0x2
10298: 00f507b3 add a5,a0,a5
1029c: 0007a703 lw a4,0(a5)
102a0: 00159593 slli a1,a1,0x1
102a4: 00158593 addi a1,a1,1
102a8: fff60813 addi a6,a2,-1
102ac: 02c5c663 blt a1,a2,102d8 <heapify+0x44>
102b0: 01f5d793 srli a5,a1,0x1f
102b4: 00b787b3 add a5,a5,a1
102b8: 0015f593 andi a1,a1,1
102bc: 4017d793 srai a5,a5,0x1
102c0: 00059463 bnez a1,102c8 <heapify+0x34>
102c4: fff78793 addi a5,a5,-1
102c8: 00279793 slli a5,a5,0x2
102cc: 00f50533 add a0,a0,a5
102d0: 00e52023 sw a4,0(a0)
102d4: 00008067 ret
102d8: 00259793 slli a5,a1,0x2
102dc: 00f507b3 add a5,a0,a5
102e0: 0007a683 lw a3,0(a5)
102e4: 0105d863 bge a1,a6,102f4 <heapify+0x60>
102e8: 0047a783 lw a5,4(a5)
102ec: 00f6d463 bge a3,a5,102f4 <heapify+0x60>
102f0: 00158593 addi a1,a1,1
102f4: 00259793 slli a5,a1,0x2
102f8: 00f507b3 add a5,a0,a5
102fc: 0007a683 lw a3,0(a5)
10300: 01f5d793 srli a5,a1,0x1f
10304: 00b787b3 add a5,a5,a1
10308: 4017d793 srai a5,a5,0x1
1030c: 0015f893 andi a7,a1,1
10310: fad750e3 bge a4,a3,102b0 <heapify+0x1c>
10314: 00089463 bnez a7,1031c <heapify+0x88>
10318: fff78793 addi a5,a5,-1
1031c: 00279793 slli a5,a5,0x2
10320: 00f507b3 add a5,a0,a5
10324: 00159593 slli a1,a1,0x1
10328: 00d7a023 sw a3,0(a5)
1032c: 00158593 addi a1,a1,1
10330: f7dff06f j 102ac <heapify+0x18>
00010334 <heapSort>:
10334: ff010113 addi sp,sp,-16
10338: 00912223 sw s1,4(sp)
1033c: 01f5d493 srli s1,a1,0x1f
10340: 00b484b3 add s1,s1,a1
10344: 00812423 sw s0,8(sp)
10348: 01212023 sw s2,0(sp)
1034c: 00112623 sw ra,12(sp)
10350: 00050913 mv s2,a0
10354: 00058413 mv s0,a1
10358: 4014d493 srai s1,s1,0x1
1035c: fff48493 addi s1,s1,-1
10360: 0204d863 bgez s1,10390 <heapSort+0x5c>
10364: fff40493 addi s1,s0,-1
10368: 00241413 slli s0,s0,0x2
1036c: 00890433 add s0,s2,s0
10370: ffc40413 addi s0,s0,-4
10374: 0204d863 bgez s1,103a4 <heapSort+0x70>
10378: 00c12083 lw ra,12(sp)
1037c: 00812403 lw s0,8(sp)
10380: 00412483 lw s1,4(sp)
10384: 00012903 lw s2,0(sp)
10388: 01010113 addi sp,sp,16
1038c: 00008067 ret
10390: 00040613 mv a2,s0
10394: 00048593 mv a1,s1
10398: 00090513 mv a0,s2
1039c: ef9ff0ef jal ra,10294 <heapify>
103a0: fbdff06f j 1035c <heapSort+0x28>
103a4: 00042703 lw a4,0(s0)
103a8: 00092783 lw a5,0(s2)
103ac: 00048613 mv a2,s1
103b0: 00e92023 sw a4,0(s2)
103b4: 00f42023 sw a5,0(s0)
103b8: 00000593 li a1,0
103bc: 00090513 mv a0,s2
103c0: ed5ff0ef jal ra,10294 <heapify>
103c4: fff48493 addi s1,s1,-1
103c8: fa9ff06f j 10370 <heapSort+0x3c>
000103cc <containsDuplicate>:
103cc: ff010113 addi sp,sp,-16
103d0: 00812423 sw s0,8(sp)
103d4: 00912223 sw s1,4(sp)
103d8: 00050413 mv s0,a0
103dc: 00058493 mv s1,a1
103e0: 00112623 sw ra,12(sp)
103e4: f51ff0ef jal ra,10334 <heapSort>
103e8: 00040513 mv a0,s0
103ec: 00000793 li a5,0
103f0: fff48493 addi s1,s1,-1
103f4: 0097ce63 blt a5,s1,10410 <containsDuplicate+0x44>
103f8: 00000513 li a0,0
103fc: 00c12083 lw ra,12(sp)
10400: 00812403 lw s0,8(sp)
10404: 00412483 lw s1,4(sp)
10408: 01010113 addi sp,sp,16
1040c: 00008067 ret
10410: 00052683 lw a3,0(a0)
10414: 00450513 addi a0,a0,4
10418: 00052703 lw a4,0(a0)
1041c: 00e68663 beq a3,a4,10428 <containsDuplicate+0x5c>
10420: 00178793 addi a5,a5,1
10424: fd1ff06f j 103f4 <containsDuplicate+0x28>
10428: 00100513 li a0,1
1042c: fd1ff06f j 103fc <containsDuplicate+0x30>
```
## -Ofast Assembly Code
```assembly=
000102f8 <heapify>:
102f8: 00259793 slli a5,a1,0x2
102fc: 00159593 slli a1,a1,0x1
10300: 00f507b3 add a5,a0,a5
10304: 00158713 addi a4,a1,1
10308: 0007ae03 lw t3,0(a5)
1030c: fff60e93 addi t4,a2,-1
10310: 00c74a63 blt a4,a2,10324 <heapify+0x2c>
10314: 0780006f j 1038c <heapify+0x94>
10318: 00130713 addi a4,t1,1 # 102d9 <frame_dummy+0x15>
1031c: 00d7a023 sw a3,0(a5)
10320: 06c75663 bge a4,a2,1038c <heapify+0x94>
10324: 00271793 slli a5,a4,0x2
10328: 00f507b3 add a5,a0,a5
1032c: 0007a683 lw a3,0(a5)
10330: 01d75a63 bge a4,t4,10344 <heapify+0x4c>
10334: 0047a783 lw a5,4(a5)
10338: 00f6d663 bge a3,a5,10344 <heapify+0x4c>
1033c: 00170713 addi a4,a4,1
10340: 00078693 mv a3,a5
10344: 01f75593 srli a1,a4,0x1f
10348: 00e587b3 add a5,a1,a4
1034c: 00177813 andi a6,a4,1
10350: 00183893 seqz a7,a6
10354: 4017d793 srai a5,a5,0x1
10358: 411787b3 sub a5,a5,a7
1035c: 00279793 slli a5,a5,0x2
10360: 00171313 slli t1,a4,0x1
10364: 00f507b3 add a5,a0,a5
10368: fade48e3 blt t3,a3,10318 <heapify+0x20>
1036c: 00e585b3 add a1,a1,a4
10370: 4015d593 srai a1,a1,0x1
10374: 00183813 seqz a6,a6
10378: 410585b3 sub a1,a1,a6
1037c: 00259593 slli a1,a1,0x2
10380: 00b50533 add a0,a0,a1
10384: 01c52023 sw t3,0(a0)
10388: 00008067 ret
1038c: 01f75593 srli a1,a4,0x1f
10390: 00177813 andi a6,a4,1
10394: 00e585b3 add a1,a1,a4
10398: 4015d593 srai a1,a1,0x1
1039c: 00183813 seqz a6,a6
103a0: 410585b3 sub a1,a1,a6
103a4: 00259593 slli a1,a1,0x2
103a8: 00b50533 add a0,a0,a1
103ac: 01c52023 sw t3,0(a0)
103b0: 00008067 ret
000103b4 <heapSort>:
103b4: fe010113 addi sp,sp,-32
103b8: 01212823 sw s2,16(sp)
103bc: 01f5d913 srli s2,a1,0x1f
103c0: 00b90933 add s2,s2,a1
103c4: 40195913 srai s2,s2,0x1
103c8: 00812c23 sw s0,24(sp)
103cc: 00912a23 sw s1,20(sp)
103d0: 01312623 sw s3,12(sp)
103d4: 00112e23 sw ra,28(sp)
103d8: fff90913 addi s2,s2,-1
103dc: 00058493 mv s1,a1
103e0: 00050413 mv s0,a0
103e4: fff00993 li s3,-1
103e8: 00094e63 bltz s2,10404 <heapSort+0x50>
103ec: 00090593 mv a1,s2
103f0: 00048613 mv a2,s1
103f4: fff90913 addi s2,s2,-1
103f8: 00040513 mv a0,s0
103fc: efdff0ef jal ra,102f8 <heapify>
10400: ff3916e3 bne s2,s3,103ec <heapSort+0x38>
10404: fff48813 addi a6,s1,-1
10408: 0c084e63 bltz a6,104e4 <heapSort+0x130>
1040c: 00100793 li a5,1
10410: 0b07d463 bge a5,a6,104b8 <heapSort+0x104>
10414: 00249e13 slli t3,s1,0x2
10418: 00080313 mv t1,a6
1041c: 01c40e33 add t3,s0,t3
10420: 00100e93 li t4,1
10424: ffce2703 lw a4,-4(t3)
10428: 00042783 lw a5,0(s0)
1042c: fff80813 addi a6,a6,-1
10430: 00e42023 sw a4,0(s0)
10434: fefe2e23 sw a5,-4(t3)
10438: 00042883 lw a7,0(s0)
1043c: 00100713 li a4,1
10440: 00c0006f j 1044c <heapSort+0x98>
10444: 00d7a023 sw a3,0(a5)
10448: 0a675c63 bge a4,t1,10500 <heapSort+0x14c>
1044c: 00271793 slli a5,a4,0x2
10450: 00f407b3 add a5,s0,a5
10454: 0007a683 lw a3,0(a5)
10458: 01075a63 bge a4,a6,1046c <heapSort+0xb8>
1045c: 0047a783 lw a5,4(a5)
10460: 00f6d663 bge a3,a5,1046c <heapSort+0xb8>
10464: 00170713 addi a4,a4,1
10468: 00078693 mv a3,a5
1046c: 00177613 andi a2,a4,1
10470: 40175793 srai a5,a4,0x1
10474: 00171513 slli a0,a4,0x1
10478: 00163593 seqz a1,a2
1047c: 00150713 addi a4,a0,1
10480: 00078513 mv a0,a5
10484: 40b787b3 sub a5,a5,a1
10488: 00279793 slli a5,a5,0x2
1048c: 00f407b3 add a5,s0,a5
10490: fad8cae3 blt a7,a3,10444 <heapSort+0x90>
10494: 02061a63 bnez a2,104c8 <heapSort+0x114>
10498: fff50793 addi a5,a0,-1
1049c: 00279793 slli a5,a5,0x2
104a0: 00f407b3 add a5,s0,a5
104a4: 0117a023 sw a7,0(a5)
104a8: fff30313 addi t1,t1,-1
104ac: ffce0e13 addi t3,t3,-4
104b0: f70ecae3 blt t4,a6,10424 <heapSort+0x70>
104b4: 02084863 bltz a6,104e4 <heapSort+0x130>
104b8: 00281793 slli a5,a6,0x2
104bc: 00f407b3 add a5,s0,a5
104c0: 00100613 li a2,1
104c4: 04c0006f j 10510 <heapSort+0x15c>
104c8: 00251513 slli a0,a0,0x2
104cc: 00a40533 add a0,s0,a0
104d0: 01152023 sw a7,0(a0)
104d4: fff30313 addi t1,t1,-1
104d8: ffce0e13 addi t3,t3,-4
104dc: f50ec4e3 blt t4,a6,10424 <heapSort+0x70>
104e0: fc085ce3 bgez a6,104b8 <heapSort+0x104>
104e4: 01c12083 lw ra,28(sp)
104e8: 01812403 lw s0,24(sp)
104ec: 01412483 lw s1,20(sp)
104f0: 01012903 lw s2,16(sp)
104f4: 00c12983 lw s3,12(sp)
104f8: 02010113 addi sp,sp,32
104fc: 00008067 ret
10500: 00177613 andi a2,a4,1
10504: 40175513 srai a0,a4,0x1
10508: f8dff06f j 10494 <heapSort+0xe0>
1050c: 00000813 li a6,0
10510: 0007a683 lw a3,0(a5)
10514: 00042703 lw a4,0(s0)
10518: ffc78793 addi a5,a5,-4
1051c: 00d42023 sw a3,0(s0)
10520: 00e7a223 sw a4,4(a5)
10524: fec804e3 beq a6,a2,1050c <heapSort+0x158>
10528: fbdff06f j 104e4 <heapSort+0x130>
```