Bladeren bron

Modify `get_vaddr_usize` to allow build on docs.rs

luojia65 4 jaren geleden
bovenliggende
commit
85df9a9c29
2 gewijzigde bestanden met toevoegingen van 29 en 18 verwijderingen
  1. 0 2
      rustsbi/.cargo/config.toml
  2. 29 16
      rustsbi/src/hart_mask.rs

+ 0 - 2
rustsbi/.cargo/config.toml

@@ -1,2 +0,0 @@
-[build]
-target = "riscv64imac-unknown-none-elf"

+ 29 - 16
rustsbi/src/hart_mask.rs

@@ -40,20 +40,33 @@ fn split_index_usize(index: usize) -> (usize, usize) {
 
 #[inline]
 unsafe fn get_vaddr_usize(vaddr_ptr: *const usize) -> usize {
-    let mut ans: usize;
-    #[cfg(target_pointer_width = "64")]
-    asm!("
-        li      {tmp}, (1 << 17)
-        csrrs   {tmp}, mstatus, {tmp}
-        ld      {ans}, 0({vmem})
-        csrw    mstatus, {tmp}
-    ", ans = lateout(reg) ans, vmem = in(reg) vaddr_ptr, tmp = out(reg) _);
-    #[cfg(target_pointer_width = "32")]
-    asm!("
-        li      {tmp}, (1 << 17)
-        csrrs   {tmp}, mstatus, {tmp}
-        lw      {ans}, 0({vmem})
-        csrw    mstatus, {tmp}
-    ", ans = lateout(reg) ans, vmem = in(reg) vaddr_ptr, tmp = out(reg) _);
-    ans
+    match () {
+        #[cfg(target_arch = "riscv64")]
+        () => {
+            let mut ans: usize;
+            asm!("
+                li      {tmp}, (1 << 17)
+                csrrs   {tmp}, mstatus, {tmp}
+                ld      {ans}, 0({vmem})
+                csrw    mstatus, {tmp}
+            ", ans = lateout(reg) ans, vmem = in(reg) vaddr_ptr, tmp = out(reg) _);
+            ans
+        },
+        #[cfg(target_arch = "riscv32")]
+        () => {
+            let mut ans: usize;
+            asm!("
+                li      {tmp}, (1 << 17)
+                csrrs   {tmp}, mstatus, {tmp}
+                lw      {ans}, 0({vmem})
+                csrw    mstatus, {tmp}
+            ", ans = lateout(reg) ans, vmem = in(reg) vaddr_ptr, tmp = out(reg) _);
+            ans
+        },
+        #[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
+        () => {
+            drop(vaddr_ptr);
+            unimplemented!("not RISC-V instruction set architecture!");
+        }
+    }
 }