Skip to content

Commit a2f509e

Browse files
bors[bot]Disasm
andauthored
Merge #45
45: Add support for the riscv32i target r=almindor a=Disasm Ported from [fomu-rt](https://github.com/im-tomu/fomu-rt) Closes: rust-embedded/riscv-rt#34 Co-authored-by: Vadim Kaushan <[email protected]>
2 parents 4b68b0f + ab9cccc commit a2f509e

12 files changed

+52
-40
lines changed

riscv-rt/.travis.yml

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,16 @@ language: rust
33
rust:
44
- nightly
55
- stable
6-
- 1.31.0 # MSRV
6+
- 1.38.0 # MSRV
77

88
env:
99
- TARGET=x86_64-unknown-linux-gnu
10+
- TARGET=riscv32i-unknown-none-elf
1011
- TARGET=riscv32imac-unknown-none-elf
1112
- TARGET=riscv64imac-unknown-none-elf
1213

1314
if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master)
1415

15-
matrix:
16-
exclude:
17-
- rust: stable
18-
env: TARGET=riscv64imac-unknown-none-elf
19-
- rust: 1.31.0 # MSRV
20-
env: TARGET=riscv64imac-unknown-none-elf
21-
22-
2316
before_install: set -e
2417

2518
install:
@@ -32,9 +25,6 @@ script:
3225
after_script: set +e
3326

3427
cache: cargo
35-
before_cache:
36-
# Travis can't cache files that are not readable by "others"
37-
- chmod -R a+r $HOME/.cargo
3828

3929
branches:
4030
only:

riscv-rt/Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ keywords = ["riscv", "runtime", "startup"]
99
license = "ISC"
1010

1111
[dependencies]
12-
r0 = "0.2.2"
13-
riscv = "0.5.3"
12+
r0 = "1.0.0"
13+
riscv = "0.5.5"
1414
riscv-rt-macros = { path = "macros", version = "0.1.6" }
1515

1616
[features]
1717
inline-asm = ["riscv/inline-asm"]
1818

1919
[dev-dependencies]
20-
riscv = "0.5.3"
2120
panic-halt = "0.2.0"

riscv-rt/asm.S

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1-
#include "asm.h"
1+
#if __riscv_xlen == 64
2+
# define STORE sd
3+
# define LOAD ld
4+
# define LOG_REGBYTES 3
5+
#else
6+
# define STORE sw
7+
# define LOAD lw
8+
# define LOG_REGBYTES 2
9+
#endif
10+
#define REGBYTES (1 << LOG_REGBYTES)
211

312
/*
413
Entry point of all programs (_start).
@@ -84,7 +93,18 @@ _abs_start:
8493
la sp, _stack_start
8594
lui t0, %hi(_hart_stack_size)
8695
add t0, t0, %lo(_hart_stack_size)
96+
#ifdef __riscv_mul
8797
mul t0, a2, t0
98+
#else
99+
beqz a2, 2f // Jump if single-hart
100+
mv t1, a2
101+
mv t2, t0
102+
1:
103+
add t0, t0, t2
104+
addi t1, t1, -1
105+
bnez t1, 1b
106+
2:
107+
#endif
88108
sub sp, sp, t0
89109

90110
// Set frame pointer

riscv-rt/asm.h

Lines changed: 0 additions & 15 deletions
This file was deleted.

riscv-rt/assemble.ps1

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# remove existing blobs because otherwise this will append object files to the old blobs
2+
Remove-Item -Force bin/*.a
3+
4+
$crate = "riscv-rt"
5+
6+
riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o
7+
riscv64-unknown-elf-ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o
8+
riscv64-unknown-elf-ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o
9+
10+
riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o
11+
riscv64-unknown-elf-ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o
12+
13+
riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o
14+
riscv64-unknown-elf-ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o
15+
riscv64-unknown-elf-ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o
16+
17+
Remove-Item bin/$crate.o

riscv-rt/assemble.sh

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@ crate=riscv-rt
77
# remove existing blobs because otherwise this will append object files to the old blobs
88
rm -f bin/*.a
99

10-
riscv64-unknown-elf-gcc -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o
11-
ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o
12-
ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o
10+
riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o
11+
riscv64-unknown-elf-ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o
12+
riscv64-unknown-elf-ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o
1313

14-
riscv64-unknown-elf-gcc -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o
15-
ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o
16-
ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o
14+
riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o
15+
riscv64-unknown-elf-ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o
16+
17+
riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o
18+
riscv64-unknown-elf-ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o
19+
riscv64-unknown-elf-ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o
1720

1821
rm bin/$crate.o
7.81 KB
Binary file not shown.
5.34 KB
Binary file not shown.
5.34 KB
Binary file not shown.
8.95 KB
Binary file not shown.

0 commit comments

Comments
 (0)