Skip to content

Commit 68e99b3

Browse files
committed
SMODE: remove redundand paths
1 parent 20837cf commit 68e99b3

File tree

1 file changed

+15
-29
lines changed

1 file changed

+15
-29
lines changed

riscv-rt/src/lib.rs

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,12 @@
359359
#![no_std]
360360
#![deny(missing_docs)]
361361

362-
use riscv::register::{mcause, mhartid, scause};
362+
#[cfg(feature = "s-mode")]
363+
use riscv::register::{scause as xcause, stvec as xtvec, stvec::TrapMode as xTrapMode};
364+
365+
#[cfg(not(feature = "s-mode"))]
366+
use riscv::register::{mcause as xcause, mhartid, mtvec as xtvec, mtvec::TrapMode as xTrapMode};
367+
363368
pub use riscv_rt_macros::{entry, pre_init};
364369

365370
#[export_name = "error: riscv-rt appears more than once in the dependency graph"]
@@ -400,12 +405,10 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! {
400405
}
401406

402407
// sbi passes hartid as first parameter (a0)
403-
let hartid: usize;
404-
if cfg!(feature = "s-mode") {
405-
hartid = a0;
406-
} else {
407-
hartid = mhartid::read();
408-
}
408+
#[cfg(feature = "s-mode")]
409+
let hartid = a0;
410+
#[cfg(not(feature = "s-mode"))]
411+
let hartid = mhartid::read();
409412

410413
if _mp_hook(hartid) {
411414
__pre_init();
@@ -458,24 +461,13 @@ pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) {
458461
}
459462

460463
unsafe {
461-
let code: usize;
462-
let is_exception: bool;
464+
let cause = xcause::read();
463465

464-
if cfg!(feature = "s-mode") {
465-
let cause = scause::read();
466-
is_exception = cause.is_exception();
467-
code = cause.code();
468-
} else {
469-
let cause = mcause::read();
470-
is_exception = cause.is_exception();
471-
code = cause.code();
472-
}
473-
474-
if is_exception {
466+
if cause.is_exception() {
475467
ExceptionHandler(&*trap_frame)
476468
} else {
477-
if code < __INTERRUPTS.len() {
478-
let h = &__INTERRUPTS[code];
469+
if cause.code() < __INTERRUPTS.len() {
470+
let h = &__INTERRUPTS[cause.code()];
479471
if h.reserved == 0 {
480472
DefaultHandler();
481473
} else {
@@ -601,11 +593,5 @@ pub unsafe extern "Rust" fn default_setup_interrupts() {
601593
fn _start_trap();
602594
}
603595

604-
if cfg!(feature = "s-mode") {
605-
use riscv::register::stvec::{self, TrapMode};
606-
stvec::write(_start_trap as usize, TrapMode::Direct);
607-
} else {
608-
use riscv::register::mtvec::{self, TrapMode};
609-
mtvec::write(_start_trap as usize, TrapMode::Direct);
610-
}
596+
xtvec::write(_start_trap as usize, xTrapMode::Direct);
611597
}

0 commit comments

Comments
 (0)