# Lab 6 Name: SUDDULA VINEETH RAGHAVENDRA Roll No.: CS22B045 --- ## Question 11 **Command:** ``` riscv-none-elf-gcc -march=rv32i -mabi=ilp32 -S test.c -o test.s``` By using this command we will be getting the assembly code for the following c program. --- ## Question 12 By using the command cat test.s we will be getting the assembly code for the following c program. **Observation :** Assembly code: ``` .file "test.c" .option nopic .attribute arch, "rv32i2p1" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 2 .globl main .type main, @function main: addi sp,sp,-432 sw s0,428(sp) addi s0,sp,432 sw zero,-20(s0) j .L2 .L3: lw a5,-20(s0) slli a5,a5,2 addi a5,a5,-16 add a5,a5,s0 lw a4,-20(s0) sw a4,-412(a5) lw a5,-20(s0) addi a5,a5,1 sw a5,-20(s0) .L2: lw a4,-20(s0) li a5,99 ble a4,a5,.L3 sw zero,-24(s0) sw zero,-28(s0) j .L4 .L5: lw a5,-28(s0) slli a5,a5,2 addi a5,a5,-16 add a5,a5,s0 lw a5,-412(a5) lw a4,-24(s0) add a5,a4,a5 sw a5,-24(s0) lw a5,-28(s0) addi a5,a5,1 sw a5,-28(s0) .L4: lw a4,-28(s0) li a5,99 ble a4,a5,.L5 li a5,0 mv a0,a5 lw s0,428(sp) addi sp,sp,432 jr ra .size main, .-main .ident "GCC: (xPack GNU RISC-V Embedded GCC x86_64) 13.2.0" ``` --- ## Question 13 Yes, we can do optimization. which is done in Question 15. --- ## Question 14 By using this command we will get the ELF file from the assembly file. ***command*** ```riscv-none-elf-gcc -march=rv32i -mabi=ilp32 -o test.elf test.s``` But the problem is we cant able to read that ELF file.So if we want to read the file use the command ```riscv-none-elf-readelf -a test.elf``` By using this command we will get the following observation. **Observation:** ``` ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: RISC-V Version: 0x1 Entry point address: 0x100d8 Start of program headers: 52 (bytes into file) Start of section headers: 16092 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 3 Size of section headers: 40 (bytes) Number of section headers: 14 Section header string table index: 13 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 00010094 000094 002234 00 AX 0 0 4 [ 2] .eh_frame PROGBITS 000132c8 0022c8 000004 00 WA 0 0 4 [ 3] .init_array INIT_ARRAY 000132cc 0022cc 000008 04 WA 0 0 4 [ 4] .fini_array FINI_ARRAY 000132d4 0022d4 000004 04 WA 0 0 4 [ 5] .data PROGBITS 000132d8 0022d8 000538 00 WA 0 0 8 [ 6] .sdata PROGBITS 00013810 002810 000014 00 WA 0 0 4 [ 7] .sbss NOBITS 00013824 002824 000040 00 WA 0 0 4 [ 8] .bss NOBITS 00013864 002824 000308 00 WA 0 0 4 [ 9] .comment PROGBITS 00000000 002824 000033 01 MS 0 0 1 [10] .riscv.attributes RISCV_ATTRIBUTE 00000000 002857 00001c 00 0 0 1 [11] .symtab SYMTAB 00000000 002874 000d60 10 12 128 4 [12] .strtab STRTAB 00000000 0035d4 00088f 00 0 0 1 [13] .shstrtab STRTAB 00000000 003e63 000076 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings), I (info), L (link order), O (extra OS processing required), G (group), T (TLS), C (compressed), x (unknown), o (OS specific), E (exclude), D (mbind), p (processor specific) There are no section groups in this file. Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align RISCV_ATTRIBUT 0x002857 0x00000000 0x00000000 0x0001c 0x00000 R 0x1 LOAD 0x000000 0x00010000 0x00010000 0x022c8 0x022c8 R E 0x1000 LOAD 0x0022c8 0x000132c8 0x000132c8 0x0055c 0x008a4 RW 0x1000 Section to Segment mapping: Segment Sections... 00 .riscv.attributes 01 .text 02 .eh_frame .init_array .fini_array .data .sdata .sbss .bss There is no dynamic section in this file. There are no relocations in this file. The decoding of unwind sections for machine type RISC-V is not currently supported. Symbol table '.symtab' contains 214 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00010094 0 SECTION LOCAL DEFAULT 1 .text 2: 000132c8 0 SECTION LOCAL DEFAULT 2 .eh_frame 3: 000132cc 0 SECTION LOCAL DEFAULT 3 .init_array 4: 000132d4 0 SECTION LOCAL DEFAULT 4 .fini_array 5: 000132d8 0 SECTION LOCAL DEFAULT 5 .data 6: 00013810 0 SECTION LOCAL DEFAULT 6 .sdata 7: 00013824 0 SECTION LOCAL DEFAULT 7 .sbss 8: 00013864 0 SECTION LOCAL DEFAULT 8 .bss 9: 00000000 0 SECTION LOCAL DEFAULT 9 .comment 10: 00000000 0 SECTION LOCAL DEFAULT 10 .riscv.attributes 11: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-exit.o 12: 00010094 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 13: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-__call_at[...] 14: 000100c0 24 FUNC LOCAL DEFAULT 1 register_fini 15: 000100c0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 16: 00010dd8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 17: 00000000 0 FILE LOCAL DEFAULT ABS crt0.o 18: 000100d8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 19: 00000000 0 FILE LOCAL DEFAULT ABS crtbegin.o 20: 000132c8 0 OBJECT LOCAL DEFAULT 2 __EH_FRAME_BEGIN__ 21: 00010118 0 FUNC LOCAL DEFAULT 1 __do_global_dtors_aux 22: 00010118 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 23: 00013824 0 OBJECT LOCAL DEFAULT 7 completed.1 24: 000132d4 0 OBJECT LOCAL DEFAULT 4 __do_global_dtor[...] 25: 00010160 0 FUNC LOCAL DEFAULT 1 frame_dummy 26: 00010160 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 27: 00013864 0 OBJECT LOCAL DEFAULT 8 object.0 28: 000132d0 0 OBJECT LOCAL DEFAULT 3 __frame_dummy_in[...] 29: 00000000 0 FILE LOCAL DEFAULT ABS test.c 30: 00010180 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 31: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-atexit.o 32: 0001021c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 33: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-findfp.o 34: 00010230 28 FUNC LOCAL DEFAULT 1 stdio_exit_handler 35: 00010230 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 36: 0001024c 100 FUNC LOCAL DEFAULT 1 cleanup_stdio 37: 0001024c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 38: 000102b0 64 FUNC LOCAL DEFAULT 1 __fp_lock 39: 000102b0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 40: 000102f0 64 FUNC LOCAL DEFAULT 1 __fp_unlock 41: 000102f0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 42: 00010330 360 FUNC LOCAL DEFAULT 1 global_stdio_ini[...] 43: 00010330 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 44: 00010498 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 45: 000105e0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 46: 00010640 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 47: 00010648 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 48: 00010650 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 49: 00010680 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 50: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-fwalk.o 51: 000106b0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 52: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-stdio.o 53: 00010764 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 54: 000107c0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 55: 000107c8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 56: 00010850 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 57: 000108c8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 58: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-closer.o 59: 000108d0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 60: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-reent.o 61: 00010920 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 62: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-lseekr.o 63: 000109e4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 64: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-readr.o 65: 00010a40 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 66: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-writer.o 67: 00010a9c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 68: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-init.o 69: 00010af8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 70: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-fini.o 71: 00010b8c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 72: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-lock.o 73: 00010be8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 74: 00010bec 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 75: 00010bf0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 76: 00010bf4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 77: 00010bf8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 78: 00010bfc 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 79: 00010c00 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 80: 00010c08 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 81: 00010c10 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 82: 00010c14 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 83: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-memset.o 84: 00010c18 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 85: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-__atexit.o 86: 00010cf4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 87: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-freer.o 88: 00010f28 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 89: 00011060 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 90: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-mallocr.o 91: 00011364 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 92: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-mlock.o 93: 00011b2c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 94: 00011b34 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 95: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-fclose.o 96: 00011b3c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 97: 00011cac 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 98: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-fflush.o 99: 00011cb8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 100: 00011f04 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 101: 00011fe4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 102: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-sbrkr.o 103: 000120b4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 104: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...] 105: 00012104 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 106: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...] 107: 00012148 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 108: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...] 109: 00012178 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 110: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...] 111: 000121bc 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 112: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...] 113: 00012200 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 114: 00013860 4 OBJECT LOCAL DEFAULT 7 heap_end.0 115: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...] 116: 0001227c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 117: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-errno.o 118: 000122c0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1 119: 00000000 0 FILE LOCAL DEFAULT ABS crtend.o 120: 000132c8 0 OBJECT LOCAL DEFAULT 2 __FRAME_END__ 121: 00000000 0 FILE LOCAL DEFAULT ABS 122: 000132d8 0 NOTYPE LOCAL DEFAULT 4 __fini_array_end 123: 000132d4 0 NOTYPE LOCAL DEFAULT 4 __fini_array_start 124: 000132d4 0 NOTYPE LOCAL DEFAULT 3 __init_array_end 125: 000132cc 0 NOTYPE LOCAL DEFAULT 3 __preinit_array_end 126: 000132cc 0 NOTYPE LOCAL DEFAULT 3 __init_array_start 127: 000132cc 0 NOTYPE LOCAL DEFAULT 3 __preinit_array_start 128: 000109e4 92 FUNC GLOBAL DEFAULT 1 _lseek_r 129: 00013ad8 0 NOTYPE GLOBAL DEFAULT ABS __global_pointer$ 130: 00013848 1 OBJECT GLOBAL DEFAULT 7 __lock___atexit_[...] 131: 00010850 120 FUNC GLOBAL DEFAULT 1 __sseek 132: 000105e0 96 FUNC GLOBAL DEFAULT 1 __sinit 133: 00011b34 8 FUNC GLOBAL DEFAULT 1 __malloc_unlock 134: 00013830 1 OBJECT GLOBAL DEFAULT 7 __lock___arc4ran[...] 135: 00013818 4 OBJECT GLOBAL DEFAULT 6 __atexit_recursi[...] 136: 000122c0 8 FUNC GLOBAL DEFAULT 1 __errno 137: 00010bf0 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_close 138: 00013828 4 OBJECT GLOBAL DEFAULT 7 __stdio_exit_handler 139: 0001382c 4 OBJECT GLOBAL DEFAULT 7 errno 140: 000107c0 8 FUNC GLOBAL DEFAULT 1 __seofread 141: 00013810 0 NOTYPE GLOBAL DEFAULT 6 __SDATA_BEGIN__ 142: 0001385c 4 OBJECT GLOBAL DEFAULT 7 __malloc_top_pad 143: 00013810 0 OBJECT GLOBAL HIDDEN 6 __dso_handle 144: 000120b4 80 FUNC GLOBAL DEFAULT 1 _sbrk_r 145: 00010a40 92 FUNC GLOBAL DEFAULT 1 _read_r 146: 00011b3c 368 FUNC GLOBAL DEFAULT 1 _fclose_r 147: 00011fe4 208 FUNC GLOBAL DEFAULT 1 fflush 148: 00013858 4 OBJECT GLOBAL DEFAULT 7 __malloc_max_sbr[...] 149: 0001383c 1 OBJECT GLOBAL DEFAULT 7 __lock___env_rec[...] 150: 00010af8 148 FUNC GLOBAL DEFAULT 1 __libc_init_array 151: 00012200 124 FUNC GLOBAL DEFAULT 1 _sbrk 152: 00010650 48 FUNC GLOBAL DEFAULT 1 __fp_lock_all 153: 00010b8c 92 FUNC GLOBAL DEFAULT 1 __libc_fini_array 154: 00010920 196 FUNC GLOBAL DEFAULT 1 _reclaim_reent 155: 00013840 1 OBJECT GLOBAL DEFAULT 7 __lock___malloc_[...] 156: 0001387c 312 OBJECT GLOBAL DEFAULT 8 __sf 157: 00010c14 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...] 158: 00010c08 8 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...] 159: 00010640 8 FUNC GLOBAL DEFAULT 1 __sfp_lock_acquire 160: 00011060 772 FUNC GLOBAL DEFAULT 1 _free_r 161: 00010dd8 336 FUNC GLOBAL DEFAULT 1 __call_exitprocs 162: 000139b4 400 OBJECT GLOBAL DEFAULT 8 __atexit0 163: 0001381c 4 OBJECT GLOBAL DEFAULT 6 __malloc_sbrk_base 164: 000100d8 64 FUNC GLOBAL DEFAULT 1 _start 165: 00010c00 8 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...] 166: 00012178 68 FUNC GLOBAL DEFAULT 1 _lseek 167: 00010cf4 228 FUNC GLOBAL DEFAULT 1 __register_exitproc 168: 00013b44 40 OBJECT GLOBAL DEFAULT 8 __malloc_current[...] 169: 000108d0 80 FUNC GLOBAL DEFAULT 1 _close_r 170: 00010bf4 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...] 171: 00010498 328 FUNC GLOBAL DEFAULT 1 __sfp 172: 00013b6c 0 NOTYPE GLOBAL DEFAULT 8 __BSS_END__ 173: 00013408 1032 OBJECT GLOBAL DEFAULT 5 __malloc_av_ 174: 00013850 4 OBJECT GLOBAL DEFAULT 7 __atexit 175: 00010764 92 FUNC GLOBAL DEFAULT 1 __sread 176: 00011b2c 8 FUNC GLOBAL DEFAULT 1 __malloc_lock 177: 00011f04 224 FUNC GLOBAL DEFAULT 1 _fflush_r 178: 00010bfc 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...] 179: 00013824 0 NOTYPE GLOBAL DEFAULT 7 __bss_start 180: 00010c18 220 FUNC GLOBAL DEFAULT 1 memset 181: 00010180 156 FUNC GLOBAL DEFAULT 1 main 182: 00013854 4 OBJECT GLOBAL DEFAULT 7 __malloc_max_tot[...] 183: 00010bec 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...] 184: 000108c8 8 FUNC GLOBAL DEFAULT 1 __sclose 185: 00011cac 12 FUNC GLOBAL DEFAULT 1 fclose 186: 00011364 1992 FUNC GLOBAL DEFAULT 1 _malloc_r 187: 00010f28 312 FUNC GLOBAL DEFAULT 1 _malloc_trim_r 188: 00010be8 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_init 189: 0001021c 20 FUNC GLOBAL DEFAULT 1 atexit 190: 00010a9c 92 FUNC GLOBAL DEFAULT 1 _write_r 191: 00013814 4 OBJECT GLOBAL DEFAULT 6 _impure_ptr 192: 00011cb8 588 FUNC GLOBAL DEFAULT 1 __sflush_r 193: 000106b0 180 FUNC GLOBAL DEFAULT 1 _fwalk_sglue 194: 00010680 48 FUNC GLOBAL DEFAULT 1 __fp_unlock_all 195: 000132d8 0 NOTYPE GLOBAL DEFAULT 5 __DATA_BEGIN__ 196: 000132d8 12 OBJECT GLOBAL DEFAULT 5 __sglue 197: 0001227c 68 FUNC GLOBAL DEFAULT 1 _write 198: 00013824 0 NOTYPE GLOBAL DEFAULT 6 _edata 199: 00013b6c 0 NOTYPE GLOBAL DEFAULT 8 _end 200: 00013844 1 OBJECT GLOBAL DEFAULT 7 __lock___at_quic[...] 201: 000107c8 136 FUNC GLOBAL DEFAULT 1 __swrite 202: 00013820 4 OBJECT GLOBAL DEFAULT 6 __malloc_trim_th[...] 203: 00010094 44 FUNC GLOBAL DEFAULT 1 exit 204: 000132e8 288 OBJECT GLOBAL DEFAULT 5 _impure_data 205: 00010648 8 FUNC GLOBAL DEFAULT 1 __sfp_lock_release 206: 000121bc 68 FUNC GLOBAL DEFAULT 1 _read 207: 00010bf8 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...] 208: 00010c10 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...] 209: 00012148 48 FUNC GLOBAL DEFAULT 1 _exit 210: 00013834 1 OBJECT GLOBAL DEFAULT 7 __lock___dd_hash[...] 211: 00013838 1 OBJECT GLOBAL DEFAULT 7 __lock___tz_mutex 212: 0001384c 1 OBJECT GLOBAL DEFAULT 7 __lock___sfp_rec[...] 213: 00012104 68 FUNC GLOBAL DEFAULT 1 _close No version information found in this file. Attribute Section: riscv File Attributes Tag_RISCV_stack_align: 16-bytes Tag_RISCV_arch: "rv32i2p1" ``` --- ## Question 5 **File Sizes** | File name | Size of the file | | -------- | -------- | test.s | 827 test_o0.s | 827 test_o1.s | 370 test_o2.s | 313 test_o3.s | 313 test_ofast.s | 313 test_os.s | 313 **Contents** **test_o0.s , test.s** ``` .file "test.c" .option nopic .attribute arch, "rv32i2p1" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 2 .globl main .type main, @function main: addi sp,sp,-432 sw s0,428(sp) addi s0,sp,432 sw zero,-20(s0) j .L2 .L3: lw a5,-20(s0) slli a5,a5,2 addi a5,a5,-16 add a5,a5,s0 lw a4,-20(s0) sw a4,-412(a5) lw a5,-20(s0) addi a5,a5,1 sw a5,-20(s0) .L2: lw a4,-20(s0) li a5,99 ble a4,a5,.L3 sw zero,-24(s0) sw zero,-28(s0) j .L4 .L5: lw a5,-28(s0) slli a5,a5,2 addi a5,a5,-16 add a5,a5,s0 lw a5,-412(a5) lw a4,-24(s0) add a5,a4,a5 sw a5,-24(s0) lw a5,-28(s0) addi a5,a5,1 sw a5,-28(s0) .L4: lw a4,-28(s0) li a5,99 ble a4,a5,.L5 li a5,0 mv a0,a5 lw s0,428(sp) addi sp,sp,432 jr ra .size main, .-main .ident "GCC: (xPack GNU RISC-V Embedded GCC x86_64) 13.2.0" ``` **test_o1.s** ``` .file "test.c" .option nopic .attribute arch, "rv32i2p1" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .align 2 .globl main .type main, @function main: li a5,100 .L2: addi a5,a5,-1 bne a5,zero,.L2 li a5,100 .L3: addi a5,a5,-1 bne a5,zero,.L3 li a0,0 ret .size main, .-main .ident "GCC: (xPack GNU RISC-V Embedded GCC x86_64) 13.2.0" ``` **test_o2.s, test_o3.s, test_ofast.s, test_os.s** ``` .file "test.c" .option nopic .attribute arch, "rv32i2p1" .attribute unaligned_access, 0 .attribute stack_align, 16 .text .section .text.startup,"ax",@progbits .align 2 .globl main .type main, @function main: li a0,0 ret .size main, .-main .ident "GCC: (xPack GNU RISC-V Embedded GCC x86_64) 13.2.0" ``` ---