# Assignment2: RISC-V Toolchain contributed by < `guaneec` > ###### tags: `arch2020` Chosen programs: 1. [Format printer by 魏晉成](https://github.com/ParkerMactavish/NCKU_CA_109/blob/master/HW1/formatPrinter.s) 2. [MergeSort by 林柏維](https://github.com/waynelinbo/Computer_Architecture_Lab1_MergeSort) ## Format printer ### C #### [printf.h](https://github.com/guaneec/arch2020/blob/master/a2/printf.h) #### [printf.c](https://github.com/guaneec/arch2020/blob/master/a2/printf.c) `putchar` has been rewritten with memory writes. ### Disassembly :::spoiler ``` printf: file format elf32-littleriscv Disassembly of section .text: 00010054 <putchar>: 10054: 0ff57713 andi a4,a0,255 10058: 400027b7 lui a5,0x40002 1005c: 00e78023 sb a4,0(a5) # 40002000 <__global_pointer$+0x3fff04d4> 10060: 00070513 mv a0,a4 10064: 00008067 ret 00010068 <self_printf>: 10068: f9010113 addi sp,sp,-112 1006c: 06f12223 sw a5,100(sp) 10070: 05410793 addi a5,sp,84 10074: 04812623 sw s0,76(sp) 10078: 04912423 sw s1,72(sp) 1007c: 05212223 sw s2,68(sp) 10080: 05312023 sw s3,64(sp) 10084: 03412e23 sw s4,60(sp) 10088: 03512c23 sw s5,56(sp) 1008c: 07012423 sw a6,104(sp) 10090: 07112623 sw a7,108(sp) 10094: 04b12a23 sw a1,84(sp) 10098: 04c12c23 sw a2,88(sp) 1009c: 04d12e23 sw a3,92(sp) 100a0: 06e12023 sw a4,96(sp) 100a4: 00f12623 sw a5,12(sp) 100a8: 02500393 li t2,37 100ac: 400028b7 lui a7,0x40002 100b0: 06300413 li s0,99 100b4: 01010813 addi a6,sp,16 100b8: 00900e93 li t4,9 100bc: 02000f13 li t5,32 100c0: 07300a93 li s5,115 100c4: 07800a13 li s4,120 100c8: 06f00993 li s3,111 100cc: 05800913 li s2,88 100d0: 06200493 li s1,98 100d4: 00054783 lbu a5,0(a0) 100d8: 00078c63 beqz a5,100f0 <self_printf+0x88> 100dc: 02778a63 beq a5,t2,10110 <self_printf+0xa8> 100e0: 00150513 addi a0,a0,1 100e4: 00f88023 sb a5,0(a7) # 40002000 <__global_pointer$+0x3fff04d4> 100e8: 00054783 lbu a5,0(a0) 100ec: fe0798e3 bnez a5,100dc <self_printf+0x74> 100f0: 04c12403 lw s0,76(sp) 100f4: 04812483 lw s1,72(sp) 100f8: 04412903 lw s2,68(sp) 100fc: 04012983 lw s3,64(sp) 10100: 03c12a03 lw s4,60(sp) 10104: 03812a83 lw s5,56(sp) 10108: 07010113 addi sp,sp,112 1010c: 00008067 ret 10110: 00154783 lbu a5,1(a0) 10114: 00250513 addi a0,a0,2 10118: 10878063 beq a5,s0,10218 <self_printf+0x1b0> 1011c: 00f46c63 bltu s0,a5,10134 <self_printf+0xcc> 10120: 0b278a63 beq a5,s2,101d4 <self_printf+0x16c> 10124: 0a978263 beq a5,s1,101c8 <self_printf+0x160> 10128: fa779ee3 bne a5,t2,100e4 <self_printf+0x7c> 1012c: 00788023 sb t2,0(a7) 10130: fa5ff06f j 100d4 <self_printf+0x6c> 10134: 0b578c63 beq a5,s5,101ec <self_printf+0x184> 10138: 09478063 beq a5,s4,101b8 <self_printf+0x150> 1013c: fb3794e3 bne a5,s3,100e4 <self_printf+0x7c> 10140: 00700e13 li t3,7 10144: 00300313 li t1,3 10148: 00c12783 lw a5,12(sp) 1014c: 02700293 li t0,39 10150: 00478713 addi a4,a5,4 10154: 00e12623 sw a4,12(sp) 10158: 0007a683 lw a3,0(a5) 1015c: 000f8463 beqz t6,10164 <self_printf+0xfc> 10160: 00700293 li t0,7 10164: 00000713 li a4,0 10168: 0080006f j 10170 <self_printf+0x108> 1016c: 07e70c63 beq a4,t5,101e4 <self_printf+0x17c> 10170: 00de7633 and a2,t3,a3 10174: 00170713 addi a4,a4,1 10178: 00e805b3 add a1,a6,a4 1017c: 0ff67793 andi a5,a2,255 10180: 4066d6b3 sra a3,a3,t1 10184: 00ced463 bge t4,a2,1018c <self_printf+0x124> 10188: 00f287b3 add a5,t0,a5 1018c: 03078793 addi a5,a5,48 10190: 0ff7f793 andi a5,a5,255 10194: fef58fa3 sb a5,-1(a1) 10198: fc069ae3 bnez a3,1016c <self_printf+0x104> 1019c: 00e80733 add a4,a6,a4 101a0: 0080006f j 101a8 <self_printf+0x140> 101a4: fff74783 lbu a5,-1(a4) 101a8: 00f88023 sb a5,0(a7) 101ac: fff70713 addi a4,a4,-1 101b0: fee81ae3 bne a6,a4,101a4 <self_printf+0x13c> 101b4: f21ff06f j 100d4 <self_printf+0x6c> 101b8: 00f00e13 li t3,15 101bc: 00000f93 li t6,0 101c0: 00400313 li t1,4 101c4: f85ff06f j 10148 <self_printf+0xe0> 101c8: 00100e13 li t3,1 101cc: 00100313 li t1,1 101d0: f79ff06f j 10148 <self_printf+0xe0> 101d4: 00f00e13 li t3,15 101d8: 00100f93 li t6,1 101dc: 00400313 li t1,4 101e0: f69ff06f j 10148 <self_printf+0xe0> 101e4: 02f14783 lbu a5,47(sp) 101e8: fb5ff06f j 1019c <self_printf+0x134> 101ec: 00c12783 lw a5,12(sp) 101f0: 0007a703 lw a4,0(a5) 101f4: 00478793 addi a5,a5,4 101f8: 00f12623 sw a5,12(sp) 101fc: 00074783 lbu a5,0(a4) 10200: ec078ae3 beqz a5,100d4 <self_printf+0x6c> 10204: 00f88023 sb a5,0(a7) 10208: 00170713 addi a4,a4,1 1020c: 00074783 lbu a5,0(a4) 10210: fe079ae3 bnez a5,10204 <self_printf+0x19c> 10214: ec1ff06f j 100d4 <self_printf+0x6c> 10218: 00c12783 lw a5,12(sp) 1021c: 0007c703 lbu a4,0(a5) 10220: 00478793 addi a5,a5,4 10224: 00f12623 sw a5,12(sp) 10228: 00e88023 sb a4,0(a7) 1022c: ea9ff06f j 100d4 <self_printf+0x6c> 00010230 <_start>: 10230: 3b14f7b7 lui a5,0x3b14f 10234: fe010113 addi sp,sp,-32 10238: 50f78793 addi a5,a5,1295 # 3b14f50f <__global_pointer$+0x3b13d9e3> 1023c: 00f12423 sw a5,8(sp) 10240: 0000d8b7 lui a7,0xd 10244: 00679837 lui a6,0x679 10248: 00102737 lui a4,0x102 1024c: 0029d7b7 lui a5,0x29d 10250: def88893 addi a7,a7,-529 # cdef <putchar-0x3265> 10254: 9ab80813 addi a6,a6,-1621 # 6789ab <__global_pointer$+0x666e7f> 10258: 34570713 addi a4,a4,837 # 102345 <__global_pointer$+0xf0819> 1025c: bb878793 addi a5,a5,-1096 # 29cbb8 <__global_pointer$+0x28b08c> 10260: 00010537 lui a0,0x10 10264: 000105b7 lui a1,0x10 10268: 00f12223 sw a5,4(sp) 1026c: 2a850513 addi a0,a0,680 # 102a8 <_start+0x78> 10270: 01112023 sw a7,0(sp) 10274: 00080793 mv a5,a6 10278: 00070693 mv a3,a4 1027c: 06300613 li a2,99 10280: 29c58593 addi a1,a1,668 # 1029c <_start+0x6c> 10284: 00112e23 sw ra,28(sp) 10288: de1ff0ef jal ra,10068 <self_printf> 1028c: 01c12083 lw ra,28(sp) 10290: 00000513 li a0,0 10294: 02010113 addi sp,sp,32 10298: 00008067 ret ``` ::: ### Runtime stats Compiled ``` $ ~/rv32emu/emu-rv32i printf StringInArg normalString CharInArg: c PercentSign: % Not supporting: eerd Hex0: 102345 102345 Hex1: 6789ab 6789AB Hex2: cdef CDEF Oct: 12345670 Bin: 111011000101001111010100001111 >>> Execution time: 1780778 ns >>> Instruction count: 1935 (IPS=1086603) >>> Jumps: 375 (19.38%) - 112 forwards, 263 backwards >>> Branching T=338 (57.88%) F=246 (42.12%) ``` The stats T and F the number of true and false branches taken. With this info, a simple branch predictor can be implemented by taking the more frequent option by default. ## MergeSort ### C [mergesort.c](https://github.com/guaneec/arch2020/blob/master/a2/mergesort.c) printf.h is included to output results. I compiled with the O2 flag, since with the O3 flag, the compiler optimizes the array intialization into a `memset` call, which requires the stdlib. ### Disassembly :::spoiler ``` mergesort: file format elf32-littleriscv Disassembly of section .text: 00010054 <putchar>:``` 10054: 0ff57713 andi a4,a0,255 10058: 400027b7 lui a5,0x40002 1005c: 00e78023 sb a4,0(a5) # 40002000 <__global_pointer$+0x3fff02f0> 10060: 00070513 mv a0,a4 10064: 00008067 ret 00010068 <self_printf>: 10068: f9010113 addi sp,sp,-112 1006c: 06f12223 sw a5,100(sp) 10070: 05410793 addi a5,sp,84 10074: 04812623 sw s0,76(sp) 10078: 04912423 sw s1,72(sp) 1007c: 05212223 sw s2,68(sp) 10080: 05312023 sw s3,64(sp) 10084: 03412e23 sw s4,60(sp) 10088: 03512c23 sw s5,56(sp) 1008c: 07012423 sw a6,104(sp) 10090: 07112623 sw a7,108(sp) 10094: 04b12a23 sw a1,84(sp) 10098: 04c12c23 sw a2,88(sp) 1009c: 04d12e23 sw a3,92(sp) 100a0: 06e12023 sw a4,96(sp) 100a4: 00f12623 sw a5,12(sp) 100a8: 02500393 li t2,37 100ac: 400028b7 lui a7,0x40002 100b0: 06300413 li s0,99 100b4: 01010813 addi a6,sp,16 100b8: 00900e93 li t4,9 100bc: 02000f13 li t5,32 100c0: 07300a93 li s5,115 100c4: 07800a13 li s4,120 100c8: 06f00993 li s3,111 100cc: 05800913 li s2,88 100d0: 06200493 li s1,98 100d4: 00054783 lbu a5,0(a0) 100d8: 00078c63 beqz a5,100f0 <self_printf+0x88> 100dc: 02778a63 beq a5,t2,10110 <self_printf+0xa8> 100e0: 00150513 addi a0,a0,1 100e4: 00f88023 sb a5,0(a7) # 40002000 <__global_pointer$+0x3fff02f0> 100e8: 00054783 lbu a5,0(a0) 100ec: fe0798e3 bnez a5,100dc <self_printf+0x74> 100f0: 04c12403 lw s0,76(sp) 100f4: 04812483 lw s1,72(sp) 100f8: 04412903 lw s2,68(sp) 100fc: 04012983 lw s3,64(sp) 10100: 03c12a03 lw s4,60(sp) 10104: 03812a83 lw s5,56(sp) 10108: 07010113 addi sp,sp,112 1010c: 00008067 ret 10110: 00154783 lbu a5,1(a0) 10114: 00250513 addi a0,a0,2 10118: 10878063 beq a5,s0,10218 <self_printf+0x1b0> 1011c: 00f46c63 bltu s0,a5,10134 <self_printf+0xcc> 10120: 0b278a63 beq a5,s2,101d4 <self_printf+0x16c> 10124: 0a978263 beq a5,s1,101c8 <self_printf+0x160> 10128: fa779ee3 bne a5,t2,100e4 <self_printf+0x7c> 1012c: 00788023 sb t2,0(a7) 10130: fa5ff06f j 100d4 <self_printf+0x6c> 10134: 0b578c63 beq a5,s5,101ec <self_printf+0x184> 10138: 09478063 beq a5,s4,101b8 <self_printf+0x150> 1013c: fb3794e3 bne a5,s3,100e4 <self_printf+0x7c> 10140: 00700e13 li t3,7 10144: 00300313 li t1,3 10148: 00c12783 lw a5,12(sp) 1014c: 02700293 li t0,39 10150: 00478713 addi a4,a5,4 10154: 00e12623 sw a4,12(sp) 10158: 0007a683 lw a3,0(a5) 1015c: 000f8463 beqz t6,10164 <self_printf+0xfc> 10160: 00700293 li t0,7 10164: 00000713 li a4,0 10168: 0080006f j 10170 <self_printf+0x108> 1016c: 07e70c63 beq a4,t5,101e4 <self_printf+0x17c> 10170: 00de7633 and a2,t3,a3 10174: 00170713 addi a4,a4,1 10178: 00e805b3 add a1,a6,a4 1017c: 0ff67793 andi a5,a2,255 10180: 4066d6b3 sra a3,a3,t1 10184: 00ced463 bge t4,a2,1018c <self_printf+0x124> 10188: 00f287b3 add a5,t0,a5 1018c: 03078793 addi a5,a5,48 10190: 0ff7f793 andi a5,a5,255 10194: fef58fa3 sb a5,-1(a1) 10198: fc069ae3 bnez a3,1016c <self_printf+0x104> 1019c: 00e80733 add a4,a6,a4 101a0: 0080006f j 101a8 <self_printf+0x140> 101a4: fff74783 lbu a5,-1(a4) 101a8: 00f88023 sb a5,0(a7) 101ac: fff70713 addi a4,a4,-1 101b0: fee81ae3 bne a6,a4,101a4 <self_printf+0x13c> 101b4: f21ff06f j 100d4 <self_printf+0x6c> 101b8: 00f00e13 li t3,15 101bc: 00000f93 li t6,0 101c0: 00400313 li t1,4 101c4: f85ff06f j 10148 <self_printf+0xe0> 101c8: 00100e13 li t3,1 101cc: 00100313 li t1,1 101d0: f79ff06f j 10148 <self_printf+0xe0> 101d4: 00f00e13 li t3,15 101d8: 00100f93 li t6,1 101dc: 00400313 li t1,4 101e0: f69ff06f j 10148 <self_printf+0xe0> 101e4: 02f14783 lbu a5,47(sp) 101e8: fb5ff06f j 1019c <self_printf+0x134> 101ec: 00c12783 lw a5,12(sp) 101f0: 0007a703 lw a4,0(a5) 101f4: 00478793 addi a5,a5,4 101f8: 00f12623 sw a5,12(sp) 101fc: 00074783 lbu a5,0(a4) 10200: ec078ae3 beqz a5,100d4 <self_printf+0x6c> 10204: 00f88023 sb a5,0(a7) 10208: 00170713 addi a4,a4,1 1020c: 00074783 lbu a5,0(a4) 10210: fe079ae3 bnez a5,10204 <self_printf+0x19c> 10214: ec1ff06f j 100d4 <self_printf+0x6c> 10218: 00c12783 lw a5,12(sp) 1021c: 0007c703 lbu a4,0(a5) 10220: 00478793 addi a5,a5,4 10224: 00f12623 sw a5,12(sp) 10228: 00e88023 sb a4,0(a7) 1022c: ea9ff06f j 100d4 <self_printf+0x6c> 00010230 <merge>: 10230: 40b686b3 sub a3,a3,a1 10234: 00168e93 addi t4,a3,1 10238: 002e9793 slli a5,t4,0x2 1023c: ff010113 addi sp,sp,-16 10240: 00f78793 addi a5,a5,15 10244: 00812623 sw s0,12(sp) 10248: ff07f793 andi a5,a5,-16 1024c: 01010413 addi s0,sp,16 10250: 40f10133 sub sp,sp,a5 10254: 00010e13 mv t3,sp 10258: 03d05a63 blez t4,1028c <merge+0x5c> 1025c: 00b688b3 add a7,a3,a1 10260: 00289813 slli a6,a7,0x2 10264: 00259793 slli a5,a1,0x2 10268: 00450893 addi a7,a0,4 1026c: 00f507b3 add a5,a0,a5 10270: 000e0713 mv a4,t3 10274: 011808b3 add a7,a6,a7 10278: 0007a803 lw a6,0(a5) 1027c: 00470713 addi a4,a4,4 10280: 00478793 addi a5,a5,4 10284: ff072e23 sw a6,-4(a4) 10288: ff1798e3 bne a5,a7,10278 <merge+0x48> 1028c: 40b60633 sub a2,a2,a1 10290: 00160813 addi a6,a2,1 10294: 08064663 bltz a2,10320 <merge+0xf0> 10298: 0d06c463 blt a3,a6,10360 <merge+0x130> 1029c: 00259313 slli t1,a1,0x2 102a0: 00650333 add t1,a0,t1 102a4: 00000893 li a7,0 102a8: 00289713 slli a4,a7,0x2 102ac: 00281793 slli a5,a6,0x2 102b0: 00ee0733 add a4,t3,a4 102b4: 00fe07b3 add a5,t3,a5 102b8: 00072703 lw a4,0(a4) 102bc: 0007a783 lw a5,0(a5) 102c0: 00158593 addi a1,a1,1 102c4: 04e7c863 blt a5,a4,10314 <merge+0xe4> 102c8: 00e32023 sw a4,0(t1) 102cc: 00188893 addi a7,a7,1 102d0: 05164863 blt a2,a7,10320 <merge+0xf0> 102d4: 00430313 addi t1,t1,4 102d8: fd06d8e3 bge a3,a6,102a8 <merge+0x78> 102dc: 00289793 slli a5,a7,0x2 102e0: 00259593 slli a1,a1,0x2 102e4: 00fe0e33 add t3,t3,a5 102e8: 00b505b3 add a1,a0,a1 102ec: 000e2783 lw a5,0(t3) 102f0: 00188893 addi a7,a7,1 102f4: 004e0e13 addi t3,t3,4 102f8: 00f5a023 sw a5,0(a1) 102fc: 00458593 addi a1,a1,4 10300: ff1656e3 bge a2,a7,102ec <merge+0xbc> 10304: ff040113 addi sp,s0,-16 10308: 00c12403 lw s0,12(sp) 1030c: 01010113 addi sp,sp,16 10310: 00008067 ret 10314: 00f32023 sw a5,0(t1) 10318: 00180813 addi a6,a6,1 1031c: fb165ce3 bge a2,a7,102d4 <merge+0xa4> 10320: ff06c2e3 blt a3,a6,10304 <merge+0xd4> 10324: 00281813 slli a6,a6,0x2 10328: 00259593 slli a1,a1,0x2 1032c: 002e9e93 slli t4,t4,0x2 10330: 010e0833 add a6,t3,a6 10334: 00b505b3 add a1,a0,a1 10338: 01de0e33 add t3,t3,t4 1033c: 00082783 lw a5,0(a6) 10340: 00458593 addi a1,a1,4 10344: 00480813 addi a6,a6,4 10348: fef5ae23 sw a5,-4(a1) 1034c: ffc818e3 bne a6,t3,1033c <merge+0x10c> 10350: ff040113 addi sp,s0,-16 10354: 00c12403 lw s0,12(sp) 10358: 01010113 addi sp,sp,16 1035c: 00008067 ret 10360: 00000893 li a7,0 10364: f79ff06f j 102dc <merge+0xac> 00010368 <mergesort>: 10368: 00c5c463 blt a1,a2,10370 <mergesort+0x8> 1036c: 00008067 ret 10370: 0040006f j 10374 <mergesort.part.0> 00010374 <mergesort.part.0>: 10374: fe010113 addi sp,sp,-32 10378: 00c587b3 add a5,a1,a2 1037c: 00812c23 sw s0,24(sp) 10380: 01f7d413 srli s0,a5,0x1f 10384: 00f40433 add s0,s0,a5 10388: 40145413 srai s0,s0,0x1 1038c: 00912a23 sw s1,20(sp) 10390: 00060493 mv s1,a2 10394: 00040613 mv a2,s0 10398: 00112e23 sw ra,28(sp) 1039c: 01212823 sw s2,16(sp) 103a0: 01312623 sw s3,12(sp) 103a4: 00050913 mv s2,a0 103a8: 00058993 mv s3,a1 103ac: fbdff0ef jal ra,10368 <mergesort> 103b0: 00048613 mv a2,s1 103b4: 00140593 addi a1,s0,1 103b8: 00090513 mv a0,s2 103bc: fadff0ef jal ra,10368 <mergesort> 103c0: 00040613 mv a2,s0 103c4: 01812403 lw s0,24(sp) 103c8: 01c12083 lw ra,28(sp) 103cc: 00048693 mv a3,s1 103d0: 00098593 mv a1,s3 103d4: 01412483 lw s1,20(sp) 103d8: 00c12983 lw s3,12(sp) 103dc: 00090513 mv a0,s2 103e0: 01012903 lw s2,16(sp) 103e4: 02010113 addi sp,sp,32 103e8: e49ff06f j 10230 <merge> 000103ec <_start>: 103ec: 000107b7 lui a5,0x10 103f0: 4d478793 addi a5,a5,1236 # 104d4 <_start+0xe8> 103f4: 0007a303 lw t1,0(a5) 103f8: 0047a883 lw a7,4(a5) 103fc: 0087a803 lw a6,8(a5) 10400: 00c7a583 lw a1,12(a5) 10404: 0107a603 lw a2,16(a5) 10408: 0147a683 lw a3,20(a5) 1040c: 0187a703 lw a4,24(a5) 10410: 01c7a783 lw a5,28(a5) 10414: 00010537 lui a0,0x10 10418: fc010113 addi sp,sp,-64 1041c: 4f450513 addi a0,a0,1268 # 104f4 <_start+0x108> 10420: 02812c23 sw s0,56(sp) 10424: 02912a23 sw s1,52(sp) 10428: 03212823 sw s2,48(sp) 1042c: 03312623 sw s3,44(sp) 10430: 02112e23 sw ra,60(sp) 10434: 00612023 sw t1,0(sp) 10438: 01112223 sw a7,4(sp) 1043c: 01012423 sw a6,8(sp) 10440: 00b12623 sw a1,12(sp) 10444: 00c12823 sw a2,16(sp) 10448: 00d12a23 sw a3,20(sp) 1044c: 00e12c23 sw a4,24(sp) 10450: 00f12e23 sw a5,28(sp) 10454: 00010413 mv s0,sp 10458: c11ff0ef jal ra,10068 <self_printf> 1045c: 02010913 addi s2,sp,32 10460: 00010493 mv s1,sp 10464: 000109b7 lui s3,0x10 10468: 0004a583 lw a1,0(s1) 1046c: 50498513 addi a0,s3,1284 # 10504 <_start+0x118> 10470: 00448493 addi s1,s1,4 10474: bf5ff0ef jal ra,10068 <self_printf> 10478: ff2498e3 bne s1,s2,10468 <_start+0x7c> 1047c: 000104b7 lui s1,0x10 10480: 50c48513 addi a0,s1,1292 # 1050c <_start+0x120> 10484: be5ff0ef jal ra,10068 <self_printf> 10488: 00700613 li a2,7 1048c: 00000593 li a1,0 10490: 00010513 mv a0,sp 10494: ee1ff0ef jal ra,10374 <mergesort.part.0> 10498: 00042583 lw a1,0(s0) 1049c: 50498513 addi a0,s3,1284 104a0: 00440413 addi s0,s0,4 104a4: bc5ff0ef jal ra,10068 <self_printf> 104a8: ff2418e3 bne s0,s2,10498 <_start+0xac> 104ac: 50c48513 addi a0,s1,1292 104b0: bb9ff0ef jal ra,10068 <self_printf> 104b4: 03c12083 lw ra,60(sp) 104b8: 03812403 lw s0,56(sp) 104bc: 03412483 lw s1,52(sp) 104c0: 03012903 lw s2,48(sp) 104c4: 02c12983 lw s3,44(sp) 104c8: 00000513 li a0,0 104cc: 04010113 addi sp,sp,64 104d0: 00008067 ret ``` ::: ### Runtime stats ``` $ ~/rv32emu/emu-rv32i mergesort Before Sort : 7 , 4 , a , 1 , 3 , 2 , 0 , 9 , 0 , 1 , 2 , 3 , 4 , 7 , 9 , a , >>> Execution time: 826314 ns >>> Instruction count: 2598 (IPS=3144083) >>> Jumps: 337 (12.97%) - 168 forwards, 169 backwards >>> Branching T=191 (43.41%) F=249 (56.59%) ```