loongArch64/
iocsr.rs

1use core::arch::asm;
2
3/// 4
4pub fn iocsr_write_w(reg: usize, value: u32) {
5    unsafe {
6        asm!("iocsrwr.w {},{}", in(reg) value, in(reg) reg);
7    }
8}
9// 8
10pub fn iocsr_write_d(reg: usize, value: u64) {
11    unsafe {
12        asm!("iocsrwr.d {},{}", in(reg) value, in(reg) reg);
13    }
14}
15// 2
16pub fn iocsr_write_h(reg: usize, value: u16) {
17    unsafe {
18        asm!("iocsrwr.h {},{}", in(reg) value, in(reg) reg);
19    }
20}
21// 1
22pub fn iocsr_write_b(reg: usize, value: u8) {
23    unsafe {
24        asm!("iocsrwr.b {},{}", in(reg) value, in(reg) reg);
25    }
26}
27
28// 1
29pub fn iocsr_read_b(reg: usize) -> u8 {
30    let val: u8;
31    unsafe {
32        asm!("iocsrrd.b {},{}",out(reg) val, in(reg) reg);
33    }
34    val
35}
36
37// 2
38pub fn iocsr_read_h(reg: usize) -> u16 {
39    let val: u16;
40    unsafe {
41        asm!("iocsrrd.h {},{}",out(reg) val, in(reg) reg);
42    }
43    val
44}
45
46// 4
47pub fn iocsr_read_w(reg: usize) -> u32 {
48    let val: u32;
49    unsafe {
50        asm!("iocsrrd.w {},{}",out(reg) val, in(reg) reg);
51    }
52    val
53}
54
55// 8
56pub fn iocsr_read_d(reg: usize) -> u64 {
57    let val: u64;
58    unsafe {
59        asm!("iocsrrd.d {},{}",out(reg) val, in(reg) reg);
60    }
61    val
62}