C testing
This commit is contained in:
@@ -98,7 +98,7 @@ fn main() {
|
||||
println!("VM Starting Up");
|
||||
|
||||
let mut vm = VMRV32I::new();
|
||||
let size = vm.load_prog("./test/test.bin");
|
||||
let size = vm.load_prog("./test/c_test.bin");
|
||||
vm.dump_prog(size);
|
||||
vm.dispatch();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
pub const DRAM_BASE: u32 = 0x80000000;
|
||||
|
||||
use crate::system::rv32;
|
||||
use crate::system::ram;
|
||||
use crate::system::rv32;
|
||||
|
||||
pub struct Bus {
|
||||
memory: ram::RAM,
|
||||
@@ -9,92 +9,84 @@ pub struct Bus {
|
||||
|
||||
impl Bus {
|
||||
pub fn new() -> Bus {
|
||||
Bus { memory: ram::RAM::new() }
|
||||
Bus {
|
||||
memory: ram::RAM::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn load_8(&mut self, address: rv32::XLen) -> rv32::Byte {
|
||||
match address {
|
||||
DRAM_BASE.. => {
|
||||
self.memory.read_8(address)
|
||||
}
|
||||
DRAM_BASE.. => self.memory.read_8(address),
|
||||
_ => {
|
||||
println!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
panic!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
rv32::Byte::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn load_16(&mut self, address: rv32::XLen) -> rv32::HalfWord {
|
||||
match address {
|
||||
DRAM_BASE.. => {
|
||||
self.memory.read_16(address)
|
||||
}
|
||||
DRAM_BASE.. => self.memory.read_16(address),
|
||||
_ => {
|
||||
println!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
panic!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
rv32::HalfWord::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn load_32(&mut self, address: rv32::XLen) -> rv32::Word {
|
||||
match address {
|
||||
DRAM_BASE.. => {
|
||||
self.memory.read_32(address)
|
||||
}
|
||||
DRAM_BASE.. => self.memory.read_32(address),
|
||||
_ => {
|
||||
println!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
panic!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
rv32::Word::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn load_64(&mut self, address: rv32::XLen) -> rv32::DoubleWord {
|
||||
match address {
|
||||
DRAM_BASE.. => {
|
||||
self.memory.read_64(address)
|
||||
}
|
||||
DRAM_BASE.. => self.memory.read_64(address),
|
||||
_ => {
|
||||
println!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
panic!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
rv32::DoubleWord::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn store_8(&mut self, address: rv32::XLen, data: rv32::Byte) {
|
||||
match address {
|
||||
DRAM_BASE.. => {
|
||||
self.memory.write_8(address, data)
|
||||
},
|
||||
DRAM_BASE.. => self.memory.write_8(address, data),
|
||||
_ => {
|
||||
println!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
},
|
||||
panic!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn store_16(&mut self, address: rv32::XLen, data: rv32::HalfWord) {
|
||||
match address {
|
||||
DRAM_BASE.. => self.memory.write_16(address, data),
|
||||
_ => {
|
||||
println!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
},
|
||||
panic!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn store_32(&mut self, address: rv32::XLen, data: rv32::Word) {
|
||||
match address {
|
||||
DRAM_BASE.. => self.memory.write_32(address, data),
|
||||
_ => {
|
||||
println!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
},
|
||||
panic!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn store_64(&mut self, address: rv32::XLen, data: rv32::DoubleWord) {
|
||||
match address {
|
||||
DRAM_BASE.. => self.memory.write_64(address, data),
|
||||
_ => {
|
||||
println!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
},
|
||||
panic!("VM > BUS > Peripheral at 0x{:08x} does not exist", address);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,4 +59,33 @@ impl RAM {
|
||||
let address = (address - bus::DRAM_BASE) as usize;
|
||||
memory[address] = data;
|
||||
}
|
||||
|
||||
pub fn write_16(&mut self, address: rv32::XLen, data: rv32::HalfWord) {
|
||||
let memory = &mut self.0;
|
||||
let address = (address - bus::DRAM_BASE) as usize;
|
||||
memory[address] = (data & 0xFF) as rv32::Byte;
|
||||
memory[address + 1] = ((data >> 8) & 0xFF) as rv32::Byte;
|
||||
}
|
||||
|
||||
pub fn write_32(&mut self, address: rv32::XLen, data: rv32::Word) {
|
||||
let memory = &mut self.0;
|
||||
let address = (address - bus::DRAM_BASE) as usize;
|
||||
memory[address] = (data & 0xFF) as rv32::Byte;
|
||||
memory[address + 1] = ((data >> 8) & 0xFF) as rv32::Byte;
|
||||
memory[address + 2] = ((data >> 16) & 0xFF) as rv32::Byte;
|
||||
memory[address + 3] = ((data >> 24) & 0xFF) as rv32::Byte;
|
||||
}
|
||||
|
||||
pub fn write_64(&mut self, address: rv32::XLen, data: rv32::DoubleWord) {
|
||||
let memory = &mut self.0;
|
||||
let address = (address - bus::DRAM_BASE) as usize;
|
||||
memory[address] = (data & 0xFF) as rv32::Byte;
|
||||
memory[address + 1] = ((data >> 8) & 0xFF) as rv32::Byte;
|
||||
memory[address + 2] = ((data >> 16) & 0xFF) as rv32::Byte;
|
||||
memory[address + 3] = ((data >> 24) & 0xFF) as rv32::Byte;
|
||||
memory[address + 4] = ((data >> 32) & 0xFF) as rv32::Byte;
|
||||
memory[address + 5] = ((data >> 40) & 0xFF) as rv32::Byte;
|
||||
memory[address + 6] = ((data >> 48) & 0xFF) as rv32::Byte;
|
||||
memory[address + 7] = ((data >> 56) & 0xFF) as rv32::Byte;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
TARGET=test
|
||||
TARGET=c_test
|
||||
GCC_PREFIX=riscv32-unknown-elf
|
||||
|
||||
all: build
|
||||
|
||||
assemble:
|
||||
$(GCC_PREFIX)-gcc -S $(TARGET).c
|
||||
$(GCC_PREFIX)-gcc -Wl,-Ttext=0x0 -nostdlib -march=rv64i -mabi=lp64 -o $(TARGET) $(TARGET).c
|
||||
$(GCC_PREFIX)-objdump -t $(TARGET) > $(TARGET).map
|
||||
$(GCC_PREFIX)-objdump -d -M no-aliases $(TARGET) > $(TARGET).lst
|
||||
$(GCC_PREFIX)-objcopy -O binary $(TARGET) $(TARGET).bin
|
||||
$(GCC_PREFIX)-objcopy -O ihex $(TARGET) $(TARGET).hex
|
||||
|
||||
build:
|
||||
$(GCC_PREFIX)-gcc -Wl,-Ttext=0x0 -nostdlib -march=rv64i -mabi=lp64 -o $(TARGET) $(TARGET).S
|
||||
|
||||
BIN
test/c_test
Normal file
BIN
test/c_test
Normal file
Binary file not shown.
BIN
test/c_test.bin
Normal file
BIN
test/c_test.bin
Normal file
Binary file not shown.
12
test/c_test.c
Normal file
12
test/c_test.c
Normal file
@@ -0,0 +1,12 @@
|
||||
int fib(int n);
|
||||
|
||||
int main() {
|
||||
return fib(10); // Calculate the 10th fibonacci number.
|
||||
}
|
||||
|
||||
int fib(int n) {
|
||||
if (n == 0 || n == 1)
|
||||
return n;
|
||||
else
|
||||
return (fib(n - 1) + fib(n - 2));
|
||||
}
|
||||
14
test/c_test.hex
Normal file
14
test/c_test.hex
Normal file
@@ -0,0 +1,14 @@
|
||||
:10000000130101FF23341100233081001304010187
|
||||
:100010001305A000EF00C00193070500138507003A
|
||||
:100020008330810003340100130101016780000067
|
||||
:10003000130101FD2334110223308102233C91007E
|
||||
:100040001304010393070500232EF4FC8327C4FD4A
|
||||
:100050009B870700638A07008327C4FD1B8707006F
|
||||
:10006000930710006316F7008327C4FD6F00000498
|
||||
:100070008327C4FD9B87F7FF9B8707001385070035
|
||||
:10008000EFF01FFB93070500938407008327C4FD4F
|
||||
:100090009B87E7FF9B87070013850700EFF05FF959
|
||||
:1000A00093070500BB87F4009B87070013850700B3
|
||||
:1000B000833081020334010283348101130101037F
|
||||
:0400C0006780000055
|
||||
:00000001FF
|
||||
58
test/c_test.lst
Normal file
58
test/c_test.lst
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
c_test: file format elf64-littleriscv
|
||||
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
0000000000000000 <main>:
|
||||
0: ff010113 addi sp,sp,-16
|
||||
4: 00113423 sd ra,8(sp)
|
||||
8: 00813023 sd s0,0(sp)
|
||||
c: 01010413 addi s0,sp,16
|
||||
10: 00a00513 addi a0,zero,10
|
||||
14: 01c000ef jal ra,30 <fib>
|
||||
18: 00050793 addi a5,a0,0
|
||||
1c: 00078513 addi a0,a5,0
|
||||
20: 00813083 ld ra,8(sp)
|
||||
24: 00013403 ld s0,0(sp)
|
||||
28: 01010113 addi sp,sp,16
|
||||
2c: 00008067 jalr zero,0(ra)
|
||||
|
||||
0000000000000030 <fib>:
|
||||
30: fd010113 addi sp,sp,-48
|
||||
34: 02113423 sd ra,40(sp)
|
||||
38: 02813023 sd s0,32(sp)
|
||||
3c: 00913c23 sd s1,24(sp)
|
||||
40: 03010413 addi s0,sp,48
|
||||
44: 00050793 addi a5,a0,0
|
||||
48: fcf42e23 sw a5,-36(s0)
|
||||
4c: fdc42783 lw a5,-36(s0)
|
||||
50: 0007879b addiw a5,a5,0
|
||||
54: 00078a63 beq a5,zero,68 <fib+0x38>
|
||||
58: fdc42783 lw a5,-36(s0)
|
||||
5c: 0007871b addiw a4,a5,0
|
||||
60: 00100793 addi a5,zero,1
|
||||
64: 00f71663 bne a4,a5,70 <fib+0x40>
|
||||
68: fdc42783 lw a5,-36(s0)
|
||||
6c: 0400006f jal zero,ac <fib+0x7c>
|
||||
70: fdc42783 lw a5,-36(s0)
|
||||
74: fff7879b addiw a5,a5,-1
|
||||
78: 0007879b addiw a5,a5,0
|
||||
7c: 00078513 addi a0,a5,0
|
||||
80: fb1ff0ef jal ra,30 <fib>
|
||||
84: 00050793 addi a5,a0,0
|
||||
88: 00078493 addi s1,a5,0
|
||||
8c: fdc42783 lw a5,-36(s0)
|
||||
90: ffe7879b addiw a5,a5,-2
|
||||
94: 0007879b addiw a5,a5,0
|
||||
98: 00078513 addi a0,a5,0
|
||||
9c: f95ff0ef jal ra,30 <fib>
|
||||
a0: 00050793 addi a5,a0,0
|
||||
a4: 00f487bb addw a5,s1,a5
|
||||
a8: 0007879b addiw a5,a5,0
|
||||
ac: 00078513 addi a0,a5,0
|
||||
b0: 02813083 ld ra,40(sp)
|
||||
b4: 02013403 ld s0,32(sp)
|
||||
b8: 01813483 ld s1,24(sp)
|
||||
bc: 03010113 addi sp,sp,48
|
||||
c0: 00008067 jalr zero,0(ra)
|
||||
20
test/c_test.map
Normal file
20
test/c_test.map
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
c_test: file format elf64-littleriscv
|
||||
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d .text 0000000000000000 .text
|
||||
0000000000000000 l d .comment 0000000000000000 .comment
|
||||
0000000000000000 l d .riscv.attributes 0000000000000000 .riscv.attributes
|
||||
0000000000000000 l df *ABS* 0000000000000000 c_test.c
|
||||
00000000000018c4 g *ABS* 0000000000000000 __global_pointer$
|
||||
00000000000010c4 g .text 0000000000000000 __SDATA_BEGIN__
|
||||
0000000000000000 *UND* 0000000000000000 _start
|
||||
00000000000010c8 g .text 0000000000000000 __BSS_END__
|
||||
00000000000010c4 g .text 0000000000000000 __bss_start
|
||||
0000000000000000 g F .text 0000000000000030 main
|
||||
00000000000010c4 g .text 0000000000000000 __DATA_BEGIN__
|
||||
00000000000010c4 g .text 0000000000000000 _edata
|
||||
00000000000010c8 g .text 0000000000000000 _end
|
||||
0000000000000030 g F .text 0000000000000094 fib
|
||||
|
||||
|
||||
BIN
test/fib.bin
Normal file
BIN
test/fib.bin
Normal file
Binary file not shown.
BIN
test/fibonacci
Normal file
BIN
test/fibonacci
Normal file
Binary file not shown.
BIN
test/fibonacci.bin
Normal file
BIN
test/fibonacci.bin
Normal file
Binary file not shown.
15
test/fibonacci.hex
Normal file
15
test/fibonacci.hex
Normal file
@@ -0,0 +1,15 @@
|
||||
:10000000130101FE232E1100232C8100232A9100CD
|
||||
:10001000130401022326A4FE0327C4FE9307100045
|
||||
:1000200063C6E7008327C4FE6F0000038327C4FE76
|
||||
:100030009387F7FF13850700EFF09FFC93040500FB
|
||||
:100040008327C4FE9387E7FF13850700EFF05FFB6C
|
||||
:1000500093070500B387F400138507008320C101CF
|
||||
:100060000324810183244101130101026780000000
|
||||
:10007000130101FE232E8100130401022326A4FE96
|
||||
:100080008327C4FE138507000324C1011301010265
|
||||
:1000900067800000130101FE232E1100232C810034
|
||||
:1000A00013040102930720012326F4FE0325C4FE56
|
||||
:1000B000EFF01FF59307050013850700EFF05FFBD6
|
||||
:1000C0002324A4FE832784FE138507008320C10117
|
||||
:0C00D0000324810113010102678000007D
|
||||
:00000001FF
|
||||
66
test/fibonacci.lst
Normal file
66
test/fibonacci.lst
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
fibonacci: file format elf64-littleriscv
|
||||
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
0000000000000000 <fib>:
|
||||
0: fe010113 addi sp,sp,-32
|
||||
4: 00112e23 sw ra,28(sp)
|
||||
8: 00812c23 sw s0,24(sp)
|
||||
c: 00912a23 sw s1,20(sp)
|
||||
10: 02010413 addi s0,sp,32
|
||||
14: fea42623 sw a0,-20(s0)
|
||||
18: fec42703 lw a4,-20(s0)
|
||||
1c: 00100793 addi a5,zero,1
|
||||
20: 00e7c663 blt a5,a4,2c <fib+0x2c>
|
||||
24: fec42783 lw a5,-20(s0)
|
||||
28: 0300006f jal zero,58 <fib+0x58>
|
||||
2c: fec42783 lw a5,-20(s0)
|
||||
30: fff78793 addi a5,a5,-1
|
||||
34: 00078513 addi a0,a5,0
|
||||
38: fc9ff0ef jal ra,0 <fib>
|
||||
3c: 00050493 addi s1,a0,0
|
||||
40: fec42783 lw a5,-20(s0)
|
||||
44: ffe78793 addi a5,a5,-2
|
||||
48: 00078513 addi a0,a5,0
|
||||
4c: fb5ff0ef jal ra,0 <fib>
|
||||
50: 00050793 addi a5,a0,0
|
||||
54: 00f487b3 add a5,s1,a5
|
||||
58: 00078513 addi a0,a5,0
|
||||
5c: 01c12083 lw ra,28(sp)
|
||||
60: 01812403 lw s0,24(sp)
|
||||
64: 01412483 lw s1,20(sp)
|
||||
68: 02010113 addi sp,sp,32
|
||||
6c: 00008067 jalr zero,0(ra)
|
||||
|
||||
0000000000000070 <return_function>:
|
||||
70: fe010113 addi sp,sp,-32
|
||||
74: 00812e23 sw s0,28(sp)
|
||||
78: 02010413 addi s0,sp,32
|
||||
7c: fea42623 sw a0,-20(s0)
|
||||
80: fec42783 lw a5,-20(s0)
|
||||
84: 00078513 addi a0,a5,0
|
||||
88: 01c12403 lw s0,28(sp)
|
||||
8c: 02010113 addi sp,sp,32
|
||||
90: 00008067 jalr zero,0(ra)
|
||||
|
||||
0000000000000094 <main>:
|
||||
94: fe010113 addi sp,sp,-32
|
||||
98: 00112e23 sw ra,28(sp)
|
||||
9c: 00812c23 sw s0,24(sp)
|
||||
a0: 02010413 addi s0,sp,32
|
||||
a4: 01200793 addi a5,zero,18
|
||||
a8: fef42623 sw a5,-20(s0)
|
||||
ac: fec42503 lw a0,-20(s0)
|
||||
b0: f51ff0ef jal ra,0 <fib>
|
||||
b4: 00050793 addi a5,a0,0
|
||||
b8: 00078513 addi a0,a5,0
|
||||
bc: fb5ff0ef jal ra,70 <return_function>
|
||||
c0: fea42423 sw a0,-24(s0)
|
||||
c4: fe842783 lw a5,-24(s0)
|
||||
c8: 00078513 addi a0,a5,0
|
||||
cc: 01c12083 lw ra,28(sp)
|
||||
d0: 01812403 lw s0,24(sp)
|
||||
d4: 02010113 addi sp,sp,32
|
||||
d8: 00008067 jalr zero,0(ra)
|
||||
21
test/fibonacci.map
Normal file
21
test/fibonacci.map
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
fibonacci: file format elf64-littleriscv
|
||||
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d .text 0000000000000000 .text
|
||||
0000000000000000 l d .comment 0000000000000000 .comment
|
||||
0000000000000000 l d .riscv.attributes 0000000000000000 .riscv.attributes
|
||||
0000000000000000 l df *ABS* 0000000000000000 fibonacci.c
|
||||
00000000000018dc g *ABS* 0000000000000000 __global_pointer$
|
||||
00000000000010dc g .text 0000000000000000 __SDATA_BEGIN__
|
||||
0000000000000070 g F .text 0000000000000024 return_function
|
||||
0000000000000000 *UND* 0000000000000000 _start
|
||||
00000000000010e0 g .text 0000000000000000 __BSS_END__
|
||||
00000000000010dc g .text 0000000000000000 __bss_start
|
||||
0000000000000094 g F .text 0000000000000048 main
|
||||
00000000000010dc g .text 0000000000000000 __DATA_BEGIN__
|
||||
00000000000010dc g .text 0000000000000000 _edata
|
||||
00000000000010e0 g .text 0000000000000000 _end
|
||||
0000000000000000 g F .text 0000000000000070 fib
|
||||
|
||||
|
||||
245
test/test.S
245
test/test.S
@@ -1,11 +1,236 @@
|
||||
addi x2, x0, 0x69
|
||||
lui x3, 0xB00B5
|
||||
bne x2, x3, main
|
||||
lui x1, 0x420
|
||||
|
||||
.file "binary_search.c"
|
||||
.option nopic
|
||||
.text
|
||||
.align 2
|
||||
.globl binary_search
|
||||
.type binary_search, @function
|
||||
binary_search:
|
||||
addi sp,sp,-48
|
||||
sw ra,44(sp)
|
||||
sw s0,40(sp)
|
||||
addi s0,sp,48
|
||||
sw a0,-36(s0)
|
||||
sw a1,-40(s0)
|
||||
sw a2,-44(s0)
|
||||
sw a3,-48(s0)
|
||||
lw a4,-48(s0)
|
||||
lw a5,-44(s0)
|
||||
sub a5,a4,a5
|
||||
srli a4,a5,31
|
||||
add a5,a4,a5
|
||||
srai a5,a5,1
|
||||
mv a4,a5
|
||||
lw a5,-44(s0)
|
||||
add a5,a5,a4
|
||||
sw a5,-20(s0)
|
||||
lw a4,-44(s0)
|
||||
lw a5,-48(s0)
|
||||
ble a4,a5,.L2
|
||||
li a5,-1
|
||||
j .L3
|
||||
.L2:
|
||||
lw a5,-20(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-36(s0)
|
||||
add a5,a4,a5
|
||||
lw a5,0(a5)
|
||||
lw a4,-40(s0)
|
||||
bne a4,a5,.L4
|
||||
lw a5,-20(s0)
|
||||
j .L3
|
||||
.L4:
|
||||
lw a5,-20(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-36(s0)
|
||||
add a5,a4,a5
|
||||
lw a5,0(a5)
|
||||
lw a4,-40(s0)
|
||||
bge a4,a5,.L5
|
||||
lw a5,-20(s0)
|
||||
addi a5,a5,-1
|
||||
mv a3,a5
|
||||
lw a2,-44(s0)
|
||||
lw a1,-40(s0)
|
||||
lw a0,-36(s0)
|
||||
call binary_search
|
||||
mv a5,a0
|
||||
j .L3
|
||||
.L5:
|
||||
lw a5,-20(s0)
|
||||
addi a5,a5,1
|
||||
lw a3,-48(s0)
|
||||
mv a2,a5
|
||||
lw a1,-40(s0)
|
||||
lw a0,-36(s0)
|
||||
call binary_search
|
||||
mv a5,a0
|
||||
.L3:
|
||||
mv a0,a5
|
||||
lw ra,44(sp)
|
||||
lw s0,40(sp)
|
||||
addi sp,sp,48
|
||||
jr ra
|
||||
.size binary_search, .-binary_search
|
||||
.align 2
|
||||
.globl search
|
||||
.type search, @function
|
||||
search:
|
||||
addi sp,sp,-32
|
||||
sw ra,28(sp)
|
||||
sw s0,24(sp)
|
||||
addi s0,sp,32
|
||||
sw a0,-20(s0)
|
||||
sw a1,-24(s0)
|
||||
sw a2,-28(s0)
|
||||
lw a5,-28(s0)
|
||||
addi a5,a5,-1
|
||||
mv a3,a5
|
||||
li a2,0
|
||||
lw a1,-24(s0)
|
||||
lw a0,-20(s0)
|
||||
call binary_search
|
||||
mv a5,a0
|
||||
mv a0,a5
|
||||
lw ra,28(sp)
|
||||
lw s0,24(sp)
|
||||
addi sp,sp,32
|
||||
jr ra
|
||||
.size search, .-search
|
||||
.align 2
|
||||
.globl sort
|
||||
.type sort, @function
|
||||
sort:
|
||||
addi sp,sp,-48
|
||||
sw s0,44(sp)
|
||||
addi s0,sp,48
|
||||
sw a0,-36(s0)
|
||||
sw a1,-40(s0)
|
||||
sw zero,-20(s0)
|
||||
j .L9
|
||||
.L13:
|
||||
sw zero,-24(s0)
|
||||
j .L10
|
||||
.L12:
|
||||
lw a5,-24(s0)
|
||||
addi a5,a5,1
|
||||
slli a5,a5,2
|
||||
lw a4,-36(s0)
|
||||
add a5,a4,a5
|
||||
lw a4,0(a5)
|
||||
lw a5,-24(s0)
|
||||
slli a5,a5,2
|
||||
lw a3,-36(s0)
|
||||
add a5,a3,a5
|
||||
lw a5,0(a5)
|
||||
bge a4,a5,.L11
|
||||
lw a5,-24(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-36(s0)
|
||||
add a5,a4,a5
|
||||
lw a5,0(a5)
|
||||
sw a5,-28(s0)
|
||||
lw a5,-24(s0)
|
||||
addi a5,a5,1
|
||||
slli a5,a5,2
|
||||
lw a4,-36(s0)
|
||||
add a4,a4,a5
|
||||
lw a5,-24(s0)
|
||||
slli a5,a5,2
|
||||
lw a3,-36(s0)
|
||||
add a5,a3,a5
|
||||
lw a4,0(a4)
|
||||
sw a4,0(a5)
|
||||
lw a5,-24(s0)
|
||||
addi a5,a5,1
|
||||
slli a5,a5,2
|
||||
lw a4,-36(s0)
|
||||
add a5,a4,a5
|
||||
lw a4,-28(s0)
|
||||
sw a4,0(a5)
|
||||
.L11:
|
||||
lw a5,-24(s0)
|
||||
addi a5,a5,1
|
||||
sw a5,-24(s0)
|
||||
.L10:
|
||||
lw a4,-40(s0)
|
||||
lw a5,-20(s0)
|
||||
sub a5,a4,a5
|
||||
addi a5,a5,-1
|
||||
lw a4,-24(s0)
|
||||
blt a4,a5,.L12
|
||||
lw a5,-20(s0)
|
||||
addi a5,a5,1
|
||||
sw a5,-20(s0)
|
||||
.L9:
|
||||
lw a5,-40(s0)
|
||||
addi a5,a5,-1
|
||||
lw a4,-20(s0)
|
||||
blt a4,a5,.L13
|
||||
nop
|
||||
mv a0,a5
|
||||
lw s0,44(sp)
|
||||
addi sp,sp,48
|
||||
jr ra
|
||||
.size sort, .-sort
|
||||
.section .rodata
|
||||
.align 2
|
||||
.LC0:
|
||||
.word 0
|
||||
.word 6
|
||||
.word 8
|
||||
.word 4
|
||||
.word 3
|
||||
.word 9
|
||||
.word 7
|
||||
.word 5
|
||||
.text
|
||||
.align 2
|
||||
.globl main
|
||||
.type main, @function
|
||||
main:
|
||||
addi x1, x0, 0x69
|
||||
lui x8, 0x80000
|
||||
lw x9, 0x0(x8)
|
||||
# addi x8, x8, 1
|
||||
# sw x8, 0x80000000
|
||||
addi sp,sp,-64
|
||||
sw ra,60(sp)
|
||||
sw s0,56(sp)
|
||||
addi s0,sp,64
|
||||
lui a5,%hi(.LC0)
|
||||
lw a7,%lo(.LC0)(a5)
|
||||
addi a4,a5,%lo(.LC0)
|
||||
lw a6,4(a4)
|
||||
addi a4,a5,%lo(.LC0)
|
||||
lw a0,8(a4)
|
||||
addi a4,a5,%lo(.LC0)
|
||||
lw a1,12(a4)
|
||||
addi a4,a5,%lo(.LC0)
|
||||
lw a2,16(a4)
|
||||
addi a4,a5,%lo(.LC0)
|
||||
lw a3,20(a4)
|
||||
addi a4,a5,%lo(.LC0)
|
||||
lw a4,24(a4)
|
||||
addi a5,a5,%lo(.LC0)
|
||||
lw a5,28(a5)
|
||||
sw a7,-52(s0)
|
||||
sw a6,-48(s0)
|
||||
sw a0,-44(s0)
|
||||
sw a1,-40(s0)
|
||||
sw a2,-36(s0)
|
||||
sw a3,-32(s0)
|
||||
sw a4,-28(s0)
|
||||
sw a5,-24(s0)
|
||||
addi a5,s0,-52
|
||||
li a1,8
|
||||
mv a0,a5
|
||||
call sort
|
||||
addi a5,s0,-52
|
||||
li a2,8
|
||||
li a1,9
|
||||
mv a0,a5
|
||||
call search
|
||||
sw a0,-20(s0)
|
||||
lw a5,-20(s0)
|
||||
mv a0,a5
|
||||
lw ra,60(sp)
|
||||
lw s0,56(sp)
|
||||
addi sp,sp,64
|
||||
jr ra
|
||||
.size main, .-main
|
||||
.ident "GCC: (GNU) 7.2.0"
|
||||
|
||||
BIN
test/test.bin
BIN
test/test.bin
Binary file not shown.
@@ -1,3 +1,51 @@
|
||||
:1000000013019006B7510BB063143100B7004200E2
|
||||
:0C00100093009006370400808324040055
|
||||
:10000000130101FD2326110223248102130401039D
|
||||
:10001000232EA4FC232CB4FC232AC4FC2328D4FCC8
|
||||
:10002000032704FD832744FDB307F74013D7F701E7
|
||||
:10003000B307F70093D7174013870700832744FDC2
|
||||
:10004000B387E7002326F4FE032744FD832704FD3E
|
||||
:1000500063D6E7009307F0FF6F0080088327C4FE94
|
||||
:10006000939727000327C4FDB307F70083A7070072
|
||||
:10007000032784FD6316F7008327C4FE6F00400644
|
||||
:100080008327C4FE939727000327C4FDB307F70017
|
||||
:1000900083A70700032784FD6354F7028327C4FE68
|
||||
:1000A0009387F7FF93860700032644FD832584FD8D
|
||||
:1000B0000325C4FDEFF0DFF4930705006F00400255
|
||||
:1000C0008327C4FE93871700832604FD1386070049
|
||||
:1000D000832584FD0325C4FDEFF09FF293070500FF
|
||||
:1000E000138507008320C102032481021301010349
|
||||
:1000F00067800000130101FE232E1100232C8100D4
|
||||
:10010000130401022326A4FE2324B4FE2322C4FEEA
|
||||
:10011000832744FE9387F7FF9386070013060000AA
|
||||
:10012000832584FE0325C4FEEFF09FED93070500B1
|
||||
:10013000138507008320C1010324810113010102FB
|
||||
:1001400067800000130101FD2326810213040103CF
|
||||
:10015000232EA4FC232CB4FC232604FE6F00C00C29
|
||||
:10016000232404FE6F00000A832784FE9387170070
|
||||
:10017000939727000327C4FDB307F70003A70700E1
|
||||
:10018000832784FE939727008326C4FDB387F60058
|
||||
:1001900083A707006352F706832784FE93972700FF
|
||||
:1001A0000327C4FDB307F70083A707002322F4FE4B
|
||||
:1001B000832784FE93871700939727000327C4FDA6
|
||||
:1001C0003307F700832784FE939727008326C4FD17
|
||||
:1001D000B387F6000327070023A0E700832784FEE8
|
||||
:1001E00093871700939727000327C4FDB307F700F1
|
||||
:1001F000032744FE23A0E700832784FE938717008C
|
||||
:100200002324F4FE032784FD8327C4FEB307F740AD
|
||||
:100210009387F7FF032784FEE348F7F48327C4FEA0
|
||||
:10022000938717002326F4FE832784FD9387F7FF27
|
||||
:100230000327C4FEE346F7F213000000138507000E
|
||||
:100240000324C1021301010367800000130101FCB4
|
||||
:10025000232E1102232C8102130401048328802FF2
|
||||
:100260001307802F032847001307802F03258700DB
|
||||
:100270001307802F8325C7001307802F032607014C
|
||||
:100280001307802F832647011307802F0327870139
|
||||
:100290009307802F83A7C701232614FD232804FD7D
|
||||
:1002A000232AA4FC232CB4FC232EC4FC2320D4FE3C
|
||||
:1002B0002322E4FE2324F4FE9307C4FC930580006C
|
||||
:1002C00013850700EFF01FE89307C4FC13068000B6
|
||||
:1002D0009305900013850700EFF0DFE12326A4FECD
|
||||
:1002E0008327C4FE138507008320C10303248103F1
|
||||
:0802F000130101046780000006
|
||||
:1002F80000000000060000000800000004000000E4
|
||||
:1003080003000000090000000700000005000000CD
|
||||
:00000001FF
|
||||
|
||||
205
test/test.lst
205
test/test.lst
@@ -4,13 +4,200 @@ test: file format elf64-littleriscv
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
0000000000000000 <main-0x10>:
|
||||
0: 06900113 addi sp,zero,105
|
||||
4: b00b51b7 lui gp,0xb00b5
|
||||
8: 00311463 bne sp,gp,10 <main>
|
||||
c: 004200b7 lui ra,0x420
|
||||
0000000000000000 <binary_search>:
|
||||
0: fd010113 addi sp,sp,-48
|
||||
4: 02112623 sw ra,44(sp)
|
||||
8: 02812423 sw s0,40(sp)
|
||||
c: 03010413 addi s0,sp,48
|
||||
10: fca42e23 sw a0,-36(s0)
|
||||
14: fcb42c23 sw a1,-40(s0)
|
||||
18: fcc42a23 sw a2,-44(s0)
|
||||
1c: fcd42823 sw a3,-48(s0)
|
||||
20: fd042703 lw a4,-48(s0)
|
||||
24: fd442783 lw a5,-44(s0)
|
||||
28: 40f707b3 sub a5,a4,a5
|
||||
2c: 01f7d713 srli a4,a5,0x1f
|
||||
30: 00f707b3 add a5,a4,a5
|
||||
34: 4017d793 srai a5,a5,0x1
|
||||
38: 00078713 addi a4,a5,0
|
||||
3c: fd442783 lw a5,-44(s0)
|
||||
40: 00e787b3 add a5,a5,a4
|
||||
44: fef42623 sw a5,-20(s0)
|
||||
48: fd442703 lw a4,-44(s0)
|
||||
4c: fd042783 lw a5,-48(s0)
|
||||
50: 00e7d663 bge a5,a4,5c <binary_search+0x5c>
|
||||
54: fff00793 addi a5,zero,-1
|
||||
58: 0880006f jal zero,e0 <binary_search+0xe0>
|
||||
5c: fec42783 lw a5,-20(s0)
|
||||
60: 00279793 slli a5,a5,0x2
|
||||
64: fdc42703 lw a4,-36(s0)
|
||||
68: 00f707b3 add a5,a4,a5
|
||||
6c: 0007a783 lw a5,0(a5)
|
||||
70: fd842703 lw a4,-40(s0)
|
||||
74: 00f71663 bne a4,a5,80 <binary_search+0x80>
|
||||
78: fec42783 lw a5,-20(s0)
|
||||
7c: 0640006f jal zero,e0 <binary_search+0xe0>
|
||||
80: fec42783 lw a5,-20(s0)
|
||||
84: 00279793 slli a5,a5,0x2
|
||||
88: fdc42703 lw a4,-36(s0)
|
||||
8c: 00f707b3 add a5,a4,a5
|
||||
90: 0007a783 lw a5,0(a5)
|
||||
94: fd842703 lw a4,-40(s0)
|
||||
98: 02f75463 bge a4,a5,c0 <binary_search+0xc0>
|
||||
9c: fec42783 lw a5,-20(s0)
|
||||
a0: fff78793 addi a5,a5,-1
|
||||
a4: 00078693 addi a3,a5,0
|
||||
a8: fd442603 lw a2,-44(s0)
|
||||
ac: fd842583 lw a1,-40(s0)
|
||||
b0: fdc42503 lw a0,-36(s0)
|
||||
b4: f4dff0ef jal ra,0 <binary_search>
|
||||
b8: 00050793 addi a5,a0,0
|
||||
bc: 0240006f jal zero,e0 <binary_search+0xe0>
|
||||
c0: fec42783 lw a5,-20(s0)
|
||||
c4: 00178793 addi a5,a5,1
|
||||
c8: fd042683 lw a3,-48(s0)
|
||||
cc: 00078613 addi a2,a5,0
|
||||
d0: fd842583 lw a1,-40(s0)
|
||||
d4: fdc42503 lw a0,-36(s0)
|
||||
d8: f29ff0ef jal ra,0 <binary_search>
|
||||
dc: 00050793 addi a5,a0,0
|
||||
e0: 00078513 addi a0,a5,0
|
||||
e4: 02c12083 lw ra,44(sp)
|
||||
e8: 02812403 lw s0,40(sp)
|
||||
ec: 03010113 addi sp,sp,48
|
||||
f0: 00008067 jalr zero,0(ra)
|
||||
|
||||
0000000000000010 <main>:
|
||||
10: 06900093 addi ra,zero,105
|
||||
14: 80000437 lui s0,0x80000
|
||||
18: 00042483 lw s1,0(s0) # ffffffff80000000 <__global_pointer$+0xffffffff7fffe7e4>
|
||||
00000000000000f4 <search>:
|
||||
f4: fe010113 addi sp,sp,-32
|
||||
f8: 00112e23 sw ra,28(sp)
|
||||
fc: 00812c23 sw s0,24(sp)
|
||||
100: 02010413 addi s0,sp,32
|
||||
104: fea42623 sw a0,-20(s0)
|
||||
108: feb42423 sw a1,-24(s0)
|
||||
10c: fec42223 sw a2,-28(s0)
|
||||
110: fe442783 lw a5,-28(s0)
|
||||
114: fff78793 addi a5,a5,-1
|
||||
118: 00078693 addi a3,a5,0
|
||||
11c: 00000613 addi a2,zero,0
|
||||
120: fe842583 lw a1,-24(s0)
|
||||
124: fec42503 lw a0,-20(s0)
|
||||
128: ed9ff0ef jal ra,0 <binary_search>
|
||||
12c: 00050793 addi a5,a0,0
|
||||
130: 00078513 addi a0,a5,0
|
||||
134: 01c12083 lw ra,28(sp)
|
||||
138: 01812403 lw s0,24(sp)
|
||||
13c: 02010113 addi sp,sp,32
|
||||
140: 00008067 jalr zero,0(ra)
|
||||
|
||||
0000000000000144 <sort>:
|
||||
144: fd010113 addi sp,sp,-48
|
||||
148: 02812623 sw s0,44(sp)
|
||||
14c: 03010413 addi s0,sp,48
|
||||
150: fca42e23 sw a0,-36(s0)
|
||||
154: fcb42c23 sw a1,-40(s0)
|
||||
158: fe042623 sw zero,-20(s0)
|
||||
15c: 0cc0006f jal zero,228 <sort+0xe4>
|
||||
160: fe042423 sw zero,-24(s0)
|
||||
164: 0a00006f jal zero,204 <sort+0xc0>
|
||||
168: fe842783 lw a5,-24(s0)
|
||||
16c: 00178793 addi a5,a5,1
|
||||
170: 00279793 slli a5,a5,0x2
|
||||
174: fdc42703 lw a4,-36(s0)
|
||||
178: 00f707b3 add a5,a4,a5
|
||||
17c: 0007a703 lw a4,0(a5)
|
||||
180: fe842783 lw a5,-24(s0)
|
||||
184: 00279793 slli a5,a5,0x2
|
||||
188: fdc42683 lw a3,-36(s0)
|
||||
18c: 00f687b3 add a5,a3,a5
|
||||
190: 0007a783 lw a5,0(a5)
|
||||
194: 06f75263 bge a4,a5,1f8 <sort+0xb4>
|
||||
198: fe842783 lw a5,-24(s0)
|
||||
19c: 00279793 slli a5,a5,0x2
|
||||
1a0: fdc42703 lw a4,-36(s0)
|
||||
1a4: 00f707b3 add a5,a4,a5
|
||||
1a8: 0007a783 lw a5,0(a5)
|
||||
1ac: fef42223 sw a5,-28(s0)
|
||||
1b0: fe842783 lw a5,-24(s0)
|
||||
1b4: 00178793 addi a5,a5,1
|
||||
1b8: 00279793 slli a5,a5,0x2
|
||||
1bc: fdc42703 lw a4,-36(s0)
|
||||
1c0: 00f70733 add a4,a4,a5
|
||||
1c4: fe842783 lw a5,-24(s0)
|
||||
1c8: 00279793 slli a5,a5,0x2
|
||||
1cc: fdc42683 lw a3,-36(s0)
|
||||
1d0: 00f687b3 add a5,a3,a5
|
||||
1d4: 00072703 lw a4,0(a4)
|
||||
1d8: 00e7a023 sw a4,0(a5)
|
||||
1dc: fe842783 lw a5,-24(s0)
|
||||
1e0: 00178793 addi a5,a5,1
|
||||
1e4: 00279793 slli a5,a5,0x2
|
||||
1e8: fdc42703 lw a4,-36(s0)
|
||||
1ec: 00f707b3 add a5,a4,a5
|
||||
1f0: fe442703 lw a4,-28(s0)
|
||||
1f4: 00e7a023 sw a4,0(a5)
|
||||
1f8: fe842783 lw a5,-24(s0)
|
||||
1fc: 00178793 addi a5,a5,1
|
||||
200: fef42423 sw a5,-24(s0)
|
||||
204: fd842703 lw a4,-40(s0)
|
||||
208: fec42783 lw a5,-20(s0)
|
||||
20c: 40f707b3 sub a5,a4,a5
|
||||
210: fff78793 addi a5,a5,-1
|
||||
214: fe842703 lw a4,-24(s0)
|
||||
218: f4f748e3 blt a4,a5,168 <sort+0x24>
|
||||
21c: fec42783 lw a5,-20(s0)
|
||||
220: 00178793 addi a5,a5,1
|
||||
224: fef42623 sw a5,-20(s0)
|
||||
228: fd842783 lw a5,-40(s0)
|
||||
22c: fff78793 addi a5,a5,-1
|
||||
230: fec42703 lw a4,-20(s0)
|
||||
234: f2f746e3 blt a4,a5,160 <sort+0x1c>
|
||||
238: 00000013 addi zero,zero,0
|
||||
23c: 00078513 addi a0,a5,0
|
||||
240: 02c12403 lw s0,44(sp)
|
||||
244: 03010113 addi sp,sp,48
|
||||
248: 00008067 jalr zero,0(ra)
|
||||
|
||||
000000000000024c <main>:
|
||||
24c: fc010113 addi sp,sp,-64
|
||||
250: 02112e23 sw ra,60(sp)
|
||||
254: 02812c23 sw s0,56(sp)
|
||||
258: 04010413 addi s0,sp,64
|
||||
25c: 2f802883 lw a7,760(zero) # 2f8 <main+0xac>
|
||||
260: 2f800713 addi a4,zero,760
|
||||
264: 00472803 lw a6,4(a4)
|
||||
268: 2f800713 addi a4,zero,760
|
||||
26c: 00872503 lw a0,8(a4)
|
||||
270: 2f800713 addi a4,zero,760
|
||||
274: 00c72583 lw a1,12(a4)
|
||||
278: 2f800713 addi a4,zero,760
|
||||
27c: 01072603 lw a2,16(a4)
|
||||
280: 2f800713 addi a4,zero,760
|
||||
284: 01472683 lw a3,20(a4)
|
||||
288: 2f800713 addi a4,zero,760
|
||||
28c: 01872703 lw a4,24(a4)
|
||||
290: 2f800793 addi a5,zero,760
|
||||
294: 01c7a783 lw a5,28(a5)
|
||||
298: fd142623 sw a7,-52(s0)
|
||||
29c: fd042823 sw a6,-48(s0)
|
||||
2a0: fca42a23 sw a0,-44(s0)
|
||||
2a4: fcb42c23 sw a1,-40(s0)
|
||||
2a8: fcc42e23 sw a2,-36(s0)
|
||||
2ac: fed42023 sw a3,-32(s0)
|
||||
2b0: fee42223 sw a4,-28(s0)
|
||||
2b4: fef42423 sw a5,-24(s0)
|
||||
2b8: fcc40793 addi a5,s0,-52
|
||||
2bc: 00800593 addi a1,zero,8
|
||||
2c0: 00078513 addi a0,a5,0
|
||||
2c4: e81ff0ef jal ra,144 <sort>
|
||||
2c8: fcc40793 addi a5,s0,-52
|
||||
2cc: 00800613 addi a2,zero,8
|
||||
2d0: 00900593 addi a1,zero,9
|
||||
2d4: 00078513 addi a0,a5,0
|
||||
2d8: e1dff0ef jal ra,f4 <search>
|
||||
2dc: fea42623 sw a0,-20(s0)
|
||||
2e0: fec42783 lw a5,-20(s0)
|
||||
2e4: 00078513 addi a0,a5,0
|
||||
2e8: 03c12083 lw ra,60(sp)
|
||||
2ec: 03812403 lw s0,56(sp)
|
||||
2f0: 04010113 addi sp,sp,64
|
||||
2f4: 00008067 jalr zero,0(ra)
|
||||
|
||||
@@ -3,16 +3,21 @@ test: file format elf64-littleriscv
|
||||
|
||||
SYMBOL TABLE:
|
||||
0000000000000000 l d .text 0000000000000000 .text
|
||||
00000000000002f8 l d .rodata 0000000000000000 .rodata
|
||||
0000000000000000 l d .comment 0000000000000000 .comment
|
||||
0000000000000000 l d .riscv.attributes 0000000000000000 .riscv.attributes
|
||||
0000000000000000 l df *ABS* 0000000000000000 ccA8a8we.o
|
||||
0000000000000010 l .text 0000000000000000 main
|
||||
000000000000181c g *ABS* 0000000000000000 __global_pointer$
|
||||
000000000000101c g .text 0000000000000000 __SDATA_BEGIN__
|
||||
0000000000000000 l df *ABS* 0000000000000000 binary_search.c
|
||||
0000000000001b18 g *ABS* 0000000000000000 __global_pointer$
|
||||
00000000000000f4 g F .text 0000000000000050 search
|
||||
0000000000001318 g .rodata 0000000000000000 __SDATA_BEGIN__
|
||||
0000000000000144 g F .text 0000000000000108 sort
|
||||
0000000000000000 *UND* 0000000000000000 _start
|
||||
0000000000001020 g .text 0000000000000000 __BSS_END__
|
||||
000000000000101c g .text 0000000000000000 __bss_start
|
||||
000000000000101c g .text 0000000000000000 __DATA_BEGIN__
|
||||
000000000000101c g .text 0000000000000000 _edata
|
||||
0000000000001020 g .text 0000000000000000 _end
|
||||
0000000000001318 g .rodata 0000000000000000 __BSS_END__
|
||||
0000000000001318 g .rodata 0000000000000000 __bss_start
|
||||
000000000000024c g F .text 00000000000000ac main
|
||||
0000000000001318 g .rodata 0000000000000000 __DATA_BEGIN__
|
||||
0000000000001318 g .rodata 0000000000000000 _edata
|
||||
0000000000001318 g .rodata 0000000000000000 _end
|
||||
0000000000000000 g F .text 00000000000000f4 binary_search
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user