# Lab 6
Name: SHIVADHARSHAN S
Roll No.: CS22B057
---
## Question 11
**Code:**
```shell=
riscv-none-elf-gcc -march=rv32i -mabi=ilp32 -S test.c -o test.s
```
**Observation:**
The compilation created a test.s file
___
## Question 12
**Observation:**
```assembly=
.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 ra,428(sp)
sw s0,424(sp)
addi s0,sp,432
addi a5,s0,-424
li a4,400
mv a2,a4
li a1,0
mv a0,a5
call memset
li a5,1
sw a5,-424(s0)
sw zero,-20(s0)
sw zero,-24(s0)
j .L2
.L3:
lw a5,-24(s0)
slli a5,a5,2
addi a5,a5,-16
add a5,a5,s0
lw a5,-408(a5)
lw a4,-20(s0)
add a5,a4,a5
sw a5,-20(s0)
lw a5,-24(s0)
addi a5,a5,1
sw a5,-24(s0)
.L2:
lw a4,-24(s0)
li a5,99
ble a4,a5,.L3
li a5,0
mv a0,a5
lw ra,428(sp)
lw s0,424(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 the code can be optimized, the fact that we need to notice is that although the code is computing the sum, the sum is never being used.
So taking away the whole loop still has the same behaviour.
**Code:**
```assembly=
.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"
```
___
## Question 14
**Code:**
```=
riscv-none-elf-gcc -march=rv32i -mabi=ilp32 -o test.elf test.s
```
**Output:**

Using elf reader to read the elf file.
```
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: 16076 (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 002224 00 AX 0 0 4
[ 2] .eh_frame PROGBITS 000132b8 0022b8 000004 00 WA 0 0 4
[ 3] .init_array INIT_ARRAY 000132bc 0022bc 000008 04 WA 0 0 4
[ 4] .fini_array FINI_ARRAY 000132c4 0022c4 000004 04 WA 0 0 4
[ 5] .data PROGBITS 000132c8 0022c8 000538 00 WA 0 0 8
[ 6] .sdata PROGBITS 00013800 002800 000014 00 WA 0 0 4
[ 7] .sbss NOBITS 00013814 002814 000040 00 WA 0 0 4
[ 8] .bss NOBITS 00013854 002814 000308 00 WA 0 0 4
[ 9] .comment PROGBITS 00000000 002814 000033 01 MS 0 0 1
[10] .riscv.attributes RISCV_ATTRIBUTE 00000000 002847 00001c 00 0 0 1
[11] .symtab SYMTAB 00000000 002864 000d60 10 12 128 4
[12] .strtab STRTAB 00000000 0035c4 00088f 00 0 0 1
[13] .shstrtab STRTAB 00000000 003e53 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 0x002847 0x00000000 0x00000000 0x0001c 0x00000 R 0x1
LOAD 0x000000 0x00010000 0x00010000 0x022b8 0x022b8 R E 0x1000
LOAD 0x0022b8 0x000132b8 0x000132b8 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: 000132b8 0 SECTION LOCAL DEFAULT 2 .eh_frame
3: 000132bc 0 SECTION LOCAL DEFAULT 3 .init_array
4: 000132c4 0 SECTION LOCAL DEFAULT 4 .fini_array
5: 000132c8 0 SECTION LOCAL DEFAULT 5 .data
6: 00013800 0 SECTION LOCAL DEFAULT 6 .sdata
7: 00013814 0 SECTION LOCAL DEFAULT 7 .sbss
8: 00013854 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: 00010dc8 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: 000132b8 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: 00013814 0 OBJECT LOCAL DEFAULT 7 completed.1
24: 000132c4 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: 00013854 0 OBJECT LOCAL DEFAULT 8 object.0
28: 000132c0 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: 0001020c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
33: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-findfp.o
34: 00010220 28 FUNC LOCAL DEFAULT 1 stdio_exit_handler
35: 00010220 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
36: 0001023c 100 FUNC LOCAL DEFAULT 1 cleanup_stdio
37: 0001023c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
38: 000102a0 64 FUNC LOCAL DEFAULT 1 __fp_lock
39: 000102a0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
40: 000102e0 64 FUNC LOCAL DEFAULT 1 __fp_unlock
41: 000102e0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
42: 00010320 360 FUNC LOCAL DEFAULT 1 global_stdio_ini[...]
43: 00010320 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
44: 00010488 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
45: 000105d0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
46: 00010630 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
47: 00010638 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
48: 00010640 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
49: 00010670 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
50: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-fwalk.o
51: 000106a0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
52: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-stdio.o
53: 00010754 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
54: 000107b0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
55: 000107b8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
56: 00010840 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
57: 000108b8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
58: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-closer.o
59: 000108c0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
60: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-reent.o
61: 00010910 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
62: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-lseekr.o
63: 000109d4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
64: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-readr.o
65: 00010a30 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
66: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-writer.o
67: 00010a8c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
68: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-init.o
69: 00010ae8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
70: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-fini.o
71: 00010b7c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
72: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-lock.o
73: 00010bd8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
74: 00010bdc 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
75: 00010be0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
76: 00010be4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
77: 00010be8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
78: 00010bec 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
79: 00010bf0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
80: 00010bf8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
81: 00010c00 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
82: 00010c04 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
83: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-memset.o
84: 00010c08 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
85: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-__atexit.o
86: 00010ce4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
87: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-freer.o
88: 00010f18 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
89: 00011050 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
90: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-mallocr.o
91: 00011354 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
92: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-mlock.o
93: 00011b1c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
94: 00011b24 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
95: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-fclose.o
96: 00011b2c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
97: 00011c9c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
98: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-fflush.o
99: 00011ca8 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
100: 00011ef4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
101: 00011fd4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
102: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-sbrkr.o
103: 000120a4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
104: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...]
105: 000120f4 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
106: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...]
107: 00012138 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
108: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...]
109: 00012168 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
110: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...]
111: 000121ac 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
112: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...]
113: 000121f0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
114: 00013850 4 OBJECT LOCAL DEFAULT 7 heap_end.0
115: 00000000 0 FILE LOCAL DEFAULT ABS riscv_libgloss_a[...]
116: 0001226c 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
117: 00000000 0 FILE LOCAL DEFAULT ABS libc_a-errno.o
118: 000122b0 0 NOTYPE LOCAL DEFAULT 1 $xrv32i2p1
119: 00000000 0 FILE LOCAL DEFAULT ABS crtend.o
120: 000132b8 0 OBJECT LOCAL DEFAULT 2 __FRAME_END__
121: 00000000 0 FILE LOCAL DEFAULT ABS
122: 000132c8 0 NOTYPE LOCAL DEFAULT 4 __fini_array_end
123: 000132c4 0 NOTYPE LOCAL DEFAULT 4 __fini_array_start
124: 000132c4 0 NOTYPE LOCAL DEFAULT 3 __init_array_end
125: 000132bc 0 NOTYPE LOCAL DEFAULT 3 __preinit_array_end
126: 000132bc 0 NOTYPE LOCAL DEFAULT 3 __init_array_start
127: 000132bc 0 NOTYPE LOCAL DEFAULT 3 __preinit_array_start
128: 000109d4 92 FUNC GLOBAL DEFAULT 1 _lseek_r
129: 00013ac8 0 NOTYPE GLOBAL DEFAULT ABS __global_pointer$
130: 00013838 1 OBJECT GLOBAL DEFAULT 7 __lock___atexit_[...]
131: 00010840 120 FUNC GLOBAL DEFAULT 1 __sseek
132: 000105d0 96 FUNC GLOBAL DEFAULT 1 __sinit
133: 00011b24 8 FUNC GLOBAL DEFAULT 1 __malloc_unlock
134: 00013820 1 OBJECT GLOBAL DEFAULT 7 __lock___arc4ran[...]
135: 00013808 4 OBJECT GLOBAL DEFAULT 6 __atexit_recursi[...]
136: 000122b0 8 FUNC GLOBAL DEFAULT 1 __errno
137: 00010be0 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_close
138: 00013818 4 OBJECT GLOBAL DEFAULT 7 __stdio_exit_handler
139: 0001381c 4 OBJECT GLOBAL DEFAULT 7 errno
140: 000107b0 8 FUNC GLOBAL DEFAULT 1 __seofread
141: 00013800 0 NOTYPE GLOBAL DEFAULT 6 __SDATA_BEGIN__
142: 0001384c 4 OBJECT GLOBAL DEFAULT 7 __malloc_top_pad
143: 00013800 0 OBJECT GLOBAL HIDDEN 6 __dso_handle
144: 000120a4 80 FUNC GLOBAL DEFAULT 1 _sbrk_r
145: 00010a30 92 FUNC GLOBAL DEFAULT 1 _read_r
146: 00011b2c 368 FUNC GLOBAL DEFAULT 1 _fclose_r
147: 00011fd4 208 FUNC GLOBAL DEFAULT 1 fflush
148: 00013848 4 OBJECT GLOBAL DEFAULT 7 __malloc_max_sbr[...]
149: 0001382c 1 OBJECT GLOBAL DEFAULT 7 __lock___env_rec[...]
150: 00010ae8 148 FUNC GLOBAL DEFAULT 1 __libc_init_array
151: 000121f0 124 FUNC GLOBAL DEFAULT 1 _sbrk
152: 00010640 48 FUNC GLOBAL DEFAULT 1 __fp_lock_all
153: 00010b7c 92 FUNC GLOBAL DEFAULT 1 __libc_fini_array
154: 00010910 196 FUNC GLOBAL DEFAULT 1 _reclaim_reent
155: 00013830 1 OBJECT GLOBAL DEFAULT 7 __lock___malloc_[...]
156: 0001386c 312 OBJECT GLOBAL DEFAULT 8 __sf
157: 00010c04 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...]
158: 00010bf8 8 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...]
159: 00010630 8 FUNC GLOBAL DEFAULT 1 __sfp_lock_acquire
160: 00011050 772 FUNC GLOBAL DEFAULT 1 _free_r
161: 00010dc8 336 FUNC GLOBAL DEFAULT 1 __call_exitprocs
162: 000139a4 400 OBJECT GLOBAL DEFAULT 8 __atexit0
163: 0001380c 4 OBJECT GLOBAL DEFAULT 6 __malloc_sbrk_base
164: 000100d8 64 FUNC GLOBAL DEFAULT 1 _start
165: 00010bf0 8 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...]
166: 00012168 68 FUNC GLOBAL DEFAULT 1 _lseek
167: 00010ce4 228 FUNC GLOBAL DEFAULT 1 __register_exitproc
168: 00013b34 40 OBJECT GLOBAL DEFAULT 8 __malloc_current[...]
169: 000108c0 80 FUNC GLOBAL DEFAULT 1 _close_r
170: 00010be4 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...]
171: 00010488 328 FUNC GLOBAL DEFAULT 1 __sfp
172: 00013b5c 0 NOTYPE GLOBAL DEFAULT 8 __BSS_END__
173: 000133f8 1032 OBJECT GLOBAL DEFAULT 5 __malloc_av_
174: 00013840 4 OBJECT GLOBAL DEFAULT 7 __atexit
175: 00010754 92 FUNC GLOBAL DEFAULT 1 __sread
176: 00011b1c 8 FUNC GLOBAL DEFAULT 1 __malloc_lock
177: 00011ef4 224 FUNC GLOBAL DEFAULT 1 _fflush_r
178: 00010bec 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...]
179: 00013814 0 NOTYPE GLOBAL DEFAULT 7 __bss_start
180: 00010c08 220 FUNC GLOBAL DEFAULT 1 memset
181: 00010180 140 FUNC GLOBAL DEFAULT 1 main
182: 00013844 4 OBJECT GLOBAL DEFAULT 7 __malloc_max_tot[...]
183: 00010bdc 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...]
184: 000108b8 8 FUNC GLOBAL DEFAULT 1 __sclose
185: 00011c9c 12 FUNC GLOBAL DEFAULT 1 fclose
186: 00011354 1992 FUNC GLOBAL DEFAULT 1 _malloc_r
187: 00010f18 312 FUNC GLOBAL DEFAULT 1 _malloc_trim_r
188: 00010bd8 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_init
189: 0001020c 20 FUNC GLOBAL DEFAULT 1 atexit
190: 00010a8c 92 FUNC GLOBAL DEFAULT 1 _write_r
191: 00013804 4 OBJECT GLOBAL DEFAULT 6 _impure_ptr
192: 00011ca8 588 FUNC GLOBAL DEFAULT 1 __sflush_r
193: 000106a0 180 FUNC GLOBAL DEFAULT 1 _fwalk_sglue
194: 00010670 48 FUNC GLOBAL DEFAULT 1 __fp_unlock_all
195: 000132c8 0 NOTYPE GLOBAL DEFAULT 5 __DATA_BEGIN__
196: 000132c8 12 OBJECT GLOBAL DEFAULT 5 __sglue
197: 0001226c 68 FUNC GLOBAL DEFAULT 1 _write
198: 00013814 0 NOTYPE GLOBAL DEFAULT 6 _edata
199: 00013b5c 0 NOTYPE GLOBAL DEFAULT 8 _end
200: 00013834 1 OBJECT GLOBAL DEFAULT 7 __lock___at_quic[...]
201: 000107b8 136 FUNC GLOBAL DEFAULT 1 __swrite
202: 00013810 4 OBJECT GLOBAL DEFAULT 6 __malloc_trim_th[...]
203: 00010094 44 FUNC GLOBAL DEFAULT 1 exit
204: 000132d8 288 OBJECT GLOBAL DEFAULT 5 _impure_data
205: 00010638 8 FUNC GLOBAL DEFAULT 1 __sfp_lock_release
206: 000121ac 68 FUNC GLOBAL DEFAULT 1 _read
207: 00010be8 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...]
208: 00010c00 4 FUNC GLOBAL DEFAULT 1 __retarget_lock_[...]
209: 00012138 48 FUNC GLOBAL DEFAULT 1 _exit
210: 00013824 1 OBJECT GLOBAL DEFAULT 7 __lock___dd_hash[...]
211: 00013828 1 OBJECT GLOBAL DEFAULT 7 __lock___tz_mutex
212: 0001383c 1 OBJECT GLOBAL DEFAULT 7 __lock___sfp_rec[...]
213: 000120f4 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 15
**Observation**
File Size: (Bytes)

Running all files just returns as there is nothing to be printed only csr count is available
**Content:**
test_o0.s
```assembly=
.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 ra,428(sp)
sw s0,424(sp)
addi s0,sp,432
addi a5,s0,-424
li a4,400
mv a2,a4
li a1,0
mv a0,a5
call memset
li a5,1
sw a5,-424(s0)
sw zero,-20(s0)
sw zero,-24(s0)
j .L2
.L3:
lw a5,-24(s0)
slli a5,a5,2
addi a5,a5,-16
add a5,a5,s0
lw a5,-408(a5)
lw a4,-20(s0)
add a5,a4,a5
sw a5,-20(s0)
lw a5,-24(s0)
addi a5,a5,1
sw a5,-24(s0)
.L2:
lw a4,-24(s0)
li a5,99
ble a4,a5,.L3
li a5,0
mv a0,a5
lw ra,428(sp)
lw s0,424(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
```assembly=
.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 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
```assembly=
.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"
```
**Time:**
| Optimization | time |
| -------- | -------- |
| O0 | .000003 sec|
| O1 | .000002 sec|
| O2 | .000002 sec|
| O3 | .000002 sec|
| Os | .000002 sec|
| Ofast | .000002 sec|
**Output:**
O0

O1

O2,O3,Os,Ofast

___