Feat: lab 3 w/o adv 2
This commit is contained in:
@@ -45,8 +45,16 @@ void exit(int);
|
||||
|
||||
#define W_SYSREG(reg, val) \
|
||||
asm volatile( \
|
||||
"msr " #reg ", %[a]" \
|
||||
"mov x0, %[a]" ENDL \
|
||||
"msr " #reg ", x0" ENDL \
|
||||
:: [a] "r" (val) \
|
||||
: "x0" \
|
||||
)
|
||||
|
||||
#define W_SYSREG_IMM(reg, val) \
|
||||
asm volatile( \
|
||||
"msr " #reg ", %[a]" \
|
||||
:: [a] "i" (val) \
|
||||
)
|
||||
|
||||
#define R_REG(ret, reg) \
|
||||
@@ -54,3 +62,17 @@ void exit(int);
|
||||
"mov %[a], " #reg \
|
||||
: [a] "=r" (ret) \
|
||||
)
|
||||
|
||||
#define W_REG(reg, val) \
|
||||
asm volatile( \
|
||||
"mov " #reg ", %[a]" \
|
||||
:: [a] "r" (val) \
|
||||
)
|
||||
|
||||
#define MMIO_W_HELPER(name, reg, mask, offset) \
|
||||
static inline void name(uint64_t state) \
|
||||
{ *reg = (*reg & ~((mask) << (offset))) | ((state & (mask)) << (offset)); }
|
||||
|
||||
#define MMIO_R_HELPER(name, reg, mask, offset) \
|
||||
static inline uint64_t name(void) \
|
||||
{ return (*reg >> (offset)) & (mask); }
|
||||
|
||||
Reference in New Issue
Block a user