You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
455 lines
17 KiB
455 lines
17 KiB
#include "asm.h"
|
|
|
|
.section .text.__ebreak
|
|
.global __ebreak
|
|
__ebreak:
|
|
ebreak
|
|
ret
|
|
|
|
.section .text.__wfi
|
|
.global __wfi
|
|
__wfi:
|
|
wfi
|
|
ret
|
|
|
|
.section .text.__sfence_vma_all
|
|
.global __sfence_vma_all
|
|
__sfence_vma_all:
|
|
sfence.vma
|
|
ret
|
|
|
|
.section .text.__sfence_vma
|
|
.global __sfence_vma
|
|
__sfence_vma:
|
|
sfence.vma a0, a1
|
|
ret
|
|
|
|
// RISC-V hypervisor instructions.
|
|
|
|
// The switch for enabling LLVM support for asm generation.
|
|
// #define LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
|
|
|
|
.section .text.__hfence_gvma
|
|
.global __hfence_gvma
|
|
__hfence_gvma:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hfence.gvma a0, a1
|
|
#else
|
|
.word 1656029299
|
|
#endif
|
|
ret
|
|
.section .text.__hfence_vvma
|
|
.global __hfence_vvma
|
|
__hfence_vvma:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hfence.vvma a0, a1
|
|
#else
|
|
.word 582287475
|
|
#endif
|
|
ret
|
|
.section .text.__hlv_b
|
|
.global __hlv_b
|
|
__hlv_b:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlv.b a0, a0
|
|
#else
|
|
.word 1610958195
|
|
#endif
|
|
ret
|
|
.section .text.__hlv_bu
|
|
.global __hlv_bu
|
|
__hlv_bu:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlv.bu a0, a0
|
|
#else
|
|
.word 1612006771
|
|
#endif
|
|
ret
|
|
.section .text.__hlv_h
|
|
.global __hlv_h
|
|
__hlv_h:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlv.h a0, a0
|
|
#else
|
|
.word 1678067059
|
|
#endif
|
|
ret
|
|
.section .text.__hlv_hu
|
|
.global __hlv_hu
|
|
__hlv_hu:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlv.hu a0, a0
|
|
#else
|
|
.word 1679115635
|
|
#endif
|
|
ret
|
|
.section .text.__hlvx_hu
|
|
.global __hlvx_hu
|
|
__hlvx_hu:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlvx.hu a0, a0
|
|
#else
|
|
.word 1681212787
|
|
#endif
|
|
ret
|
|
.section .text.__hlv_w
|
|
.global __hlv_w
|
|
__hlv_w:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlv.w a0, a0
|
|
#else
|
|
.word 1745175923
|
|
#endif
|
|
ret
|
|
.section .text.__hlvx_wu
|
|
.global __hlvx_wu
|
|
__hlvx_wu:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlvx.wu a0, a0
|
|
#else
|
|
.word 1748321651
|
|
#endif
|
|
ret
|
|
.section .text.__hsv_b
|
|
.global __hsv_b
|
|
__hsv_b:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hsv.b a0, a1
|
|
#else
|
|
.word 1656045683
|
|
#endif
|
|
ret
|
|
.section .text.__hsv_h
|
|
.global __hsv_h
|
|
__hsv_h:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hsv.h a0, a1
|
|
#else
|
|
.word 1723154547
|
|
#endif
|
|
ret
|
|
.section .text.__hsv_w
|
|
.global __hsv_w
|
|
__hsv_w:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hsv.w a0, a1
|
|
#else
|
|
.word 1790263411
|
|
#endif
|
|
ret
|
|
.section .text.__hlv_wu
|
|
.global __hlv_wu
|
|
__hlv_wu:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlv.wu a0, a0
|
|
#else
|
|
.word 1746224499
|
|
#endif
|
|
ret
|
|
.section .text.__hlv_d
|
|
.global __hlv_d
|
|
__hlv_d:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hlv.d a0, a0
|
|
#else
|
|
.word 1812284787
|
|
#endif
|
|
ret
|
|
.section .text.__hsv_d
|
|
.global __hsv_d
|
|
__hsv_d:
|
|
#ifdef LLVM_RISCV_HYPERVISOR_EXTENSION_SUPPORT
|
|
hsv.d a0, a1
|
|
#else
|
|
.word 1857372275
|
|
#endif
|
|
ret
|
|
|
|
|
|
// User Trap Setup
|
|
RW(0x000, ustatus) // User status register
|
|
RW(0x004, uie) // User interrupt-enable register
|
|
RW(0x005, utvec) // User trap handler base address
|
|
|
|
// User Trap Handling
|
|
RW(0x040, uscratch) // Scratch register for user trap handlers
|
|
RW(0x041, uepc) // User exception program counter
|
|
RW(0x042, ucause) // User trap cause
|
|
RW(0x043, utval) // User bad address or instruction
|
|
RW(0x044, uip) // User interrupt pending
|
|
|
|
// User Floating-Point CSRs
|
|
RW(0x001, fflags) // Floating-Point Accrued Exceptions
|
|
RW(0x002, frm) // Floating-Point Dynamic Rounding Mode
|
|
RW(0x003, fcsr) // Floating-Point Control and Status Register (frm + fflags)
|
|
|
|
// User Counter/Timers
|
|
RO( 0xC00, cycle) // Cycle counter for RDCYCLE instruction
|
|
RO( 0xC01, time) // Timer for RDTIME instruction
|
|
RO( 0xC02, instret) // Instructions-retired counter for RDINSTRET instruction
|
|
RO( 0xC03, hpmcounter3) // Performance-monitoring counter
|
|
RO( 0xC04, hpmcounter4) // Performance-monitoring counter
|
|
RO( 0xC05, hpmcounter5) // Performance-monitoring counter
|
|
RO( 0xC06, hpmcounter6) // Performance-monitoring counter
|
|
RO( 0xC07, hpmcounter7) // Performance-monitoring counter
|
|
RO( 0xC08, hpmcounter8) // Performance-monitoring counter
|
|
RO( 0xC09, hpmcounter9) // Performance-monitoring counter
|
|
RO( 0xC0A, hpmcounter10) // Performance-monitoring counter
|
|
RO( 0xC0B, hpmcounter11) // Performance-monitoring counter
|
|
RO( 0xC0C, hpmcounter12) // Performance-monitoring counter
|
|
RO( 0xC0D, hpmcounter13) // Performance-monitoring counter
|
|
RO( 0xC0E, hpmcounter14) // Performance-monitoring counter
|
|
RO( 0xC0F, hpmcounter15) // Performance-monitoring counter
|
|
RO( 0xC10, hpmcounter16) // Performance-monitoring counter
|
|
RO( 0xC11, hpmcounter17) // Performance-monitoring counter
|
|
RO( 0xC12, hpmcounter18) // Performance-monitoring counter
|
|
RO( 0xC13, hpmcounter19) // Performance-monitoring counter
|
|
RO( 0xC14, hpmcounter20) // Performance-monitoring counter
|
|
RO( 0xC15, hpmcounter21) // Performance-monitoring counter
|
|
RO( 0xC16, hpmcounter22) // Performance-monitoring counter
|
|
RO( 0xC17, hpmcounter23) // Performance-monitoring counter
|
|
RO( 0xC18, hpmcounter24) // Performance-monitoring counter
|
|
RO( 0xC19, hpmcounter25) // Performance-monitoring counter
|
|
RO( 0xC1A, hpmcounter26) // Performance-monitoring counter
|
|
RO( 0xC1B, hpmcounter27) // Performance-monitoring counter
|
|
RO( 0xC1C, hpmcounter28) // Performance-monitoring counter
|
|
RO( 0xC1D, hpmcounter29) // Performance-monitoring counter
|
|
RO( 0xC1E, hpmcounter30) // Performance-monitoring counter
|
|
RO( 0xC1F, hpmcounter31) // Performance-monitoring counter
|
|
RO32(0xC80, cycleh) // Upper 32 bits of cycle, RV32I only
|
|
RO32(0xC81, timeh) // Upper 32 bits of time, RV32I only
|
|
RO32(0xC82, instreth) // Upper 32 bits of instret, RV32I only
|
|
RO32(0xC83, hpmcounter3h) // Upper 32 bits of hpmcounter3, RV32I only
|
|
RO32(0xC84, hpmcounter4h)
|
|
RO32(0xC85, hpmcounter5h)
|
|
RO32(0xC86, hpmcounter6h)
|
|
RO32(0xC87, hpmcounter7h)
|
|
RO32(0xC88, hpmcounter8h)
|
|
RO32(0xC89, hpmcounter9h)
|
|
RO32(0xC8A, hpmcounter10h)
|
|
RO32(0xC8B, hpmcounter11h)
|
|
RO32(0xC8C, hpmcounter12h)
|
|
RO32(0xC8D, hpmcounter13h)
|
|
RO32(0xC8E, hpmcounter14h)
|
|
RO32(0xC8F, hpmcounter15h)
|
|
RO32(0xC90, hpmcounter16h)
|
|
RO32(0xC91, hpmcounter17h)
|
|
RO32(0xC92, hpmcounter18h)
|
|
RO32(0xC93, hpmcounter19h)
|
|
RO32(0xC94, hpmcounter20h)
|
|
RO32(0xC95, hpmcounter21h)
|
|
RO32(0xC96, hpmcounter22h)
|
|
RO32(0xC97, hpmcounter23h)
|
|
RO32(0xC98, hpmcounter24h)
|
|
RO32(0xC99, hpmcounter25h)
|
|
RO32(0xC9A, hpmcounter26h)
|
|
RO32(0xC9B, hpmcounter27h)
|
|
RO32(0xC9C, hpmcounter28h)
|
|
RO32(0xC9D, hpmcounter29h)
|
|
RO32(0xC9E, hpmcounter30h)
|
|
RO32(0xC9F, hpmcounter31h)
|
|
|
|
// Supervisor Trap Setup
|
|
RW(0x100, sstatus) // Supervisor status register
|
|
RW(0x102, sedeleg) // Supervisor exception delegation register
|
|
RW(0x103, sideleg) // Supervisor interrupt delegation register
|
|
RW(0x104, sie) // Supervisor interrupt-enable register
|
|
RW(0x105, stvec) // Supervisor trap handler base address
|
|
RW(0x106, scounteren) // Supervisor counter enable
|
|
|
|
// Supervisor Trap Handling
|
|
RW(0x140, sscratch) // Scratch register for supervisor trap handlers
|
|
RW(0x141, sepc) // Supervisor exception program counter
|
|
RW(0x142, scause) // Supervisor trap cause
|
|
RW(0x143, stval) // Supervisor bad address or instruction
|
|
RW(0x144, sip) // Supervisor interrupt pending
|
|
|
|
// Supervisor Protection and Translation
|
|
RW(0x180, satp) // Supervisor address translation and protection
|
|
|
|
// Machine Information Registers
|
|
RO(0xF11, mvendorid) // Vendor ID
|
|
RO(0xF12, marchid) // Architecture ID
|
|
RO(0xF13, mimpid) // Implementation ID
|
|
RO(0xF14, mhartid) // Hardware thread ID
|
|
|
|
// Machine Trap Setup
|
|
RW(0x300, mstatus) // Machine status register
|
|
RW(0x301, misa) // ISA and extensions
|
|
RW(0x302, medeleg) // Machine exception delegation register
|
|
RW(0x303, mideleg) // Machine interrupt delegation register
|
|
RW(0x304, mie) // Machine interrupt-enable register
|
|
RW(0x305, mtvec) // Machine trap handler base address
|
|
RW(0x306, mcounteren) // Machine counter enable
|
|
|
|
// Machine Trap Handling
|
|
RW(0x340, mscratch) // Scratch register for machine trap handlers
|
|
RW(0x341, mepc) // Machine exception program counter
|
|
RW(0x342, mcause) // Machine trap cause
|
|
RW(0x343, mtval) // Machine bad address or instruction
|
|
RW(0x344, mip) // Machine interrupt pending
|
|
|
|
// Machine Protection and Translation
|
|
RW( 0x3A0, pmpcfg0) // Physical memory protection configuration
|
|
RW32(0x3A1, pmpcfg1) // Physical memory protection configuration, RV32 only
|
|
RW( 0x3A2, pmpcfg2) // Physical memory protection configuration
|
|
RW32(0x3A3, pmpcfg3) // Physical memory protection configuration, RV32 only
|
|
RW( 0x3B0, pmpaddr0) // Physical memory protection address register
|
|
RW( 0x3B1, pmpaddr1) // Physical memory protection address register
|
|
RW( 0x3B2, pmpaddr2) // Physical memory protection address register
|
|
RW( 0x3B3, pmpaddr3) // Physical memory protection address register
|
|
RW( 0x3B4, pmpaddr4) // Physical memory protection address register
|
|
RW( 0x3B5, pmpaddr5) // Physical memory protection address register
|
|
RW( 0x3B6, pmpaddr6) // Physical memory protection address register
|
|
RW( 0x3B7, pmpaddr7) // Physical memory protection address register
|
|
RW( 0x3B8, pmpaddr8) // Physical memory protection address register
|
|
RW( 0x3B9, pmpaddr9) // Physical memory protection address register
|
|
RW( 0x3BA, pmpaddr10) // Physical memory protection address register
|
|
RW( 0x3BB, pmpaddr11) // Physical memory protection address register
|
|
RW( 0x3BC, pmpaddr12) // Physical memory protection address register
|
|
RW( 0x3BD, pmpaddr13) // Physical memory protection address register
|
|
RW( 0x3BE, pmpaddr14) // Physical memory protection address register
|
|
RW( 0x3BF, pmpaddr15) // Physical memory protection address register
|
|
|
|
// Machine Counter/Timers
|
|
RO( 0xB00, mcycle) // Machine cycle counter
|
|
RO( 0xB02, minstret) // Machine instructions-retired counter
|
|
RO( 0xB03, mhpmcounter3) // Machine performance-monitoring counter
|
|
RO( 0xB04, mhpmcounter4) // Machine performance-monitoring counter
|
|
RO( 0xB05, mhpmcounter5) // Machine performance-monitoring counter
|
|
RO( 0xB06, mhpmcounter6) // Machine performance-monitoring counter
|
|
RO( 0xB07, mhpmcounter7) // Machine performance-monitoring counter
|
|
RO( 0xB08, mhpmcounter8) // Machine performance-monitoring counter
|
|
RO( 0xB09, mhpmcounter9) // Machine performance-monitoring counter
|
|
RO( 0xB0A, mhpmcounter10) // Machine performance-monitoring counter
|
|
RO( 0xB0B, mhpmcounter11) // Machine performance-monitoring counter
|
|
RO( 0xB0C, mhpmcounter12) // Machine performance-monitoring counter
|
|
RO( 0xB0D, mhpmcounter13) // Machine performance-monitoring counter
|
|
RO( 0xB0E, mhpmcounter14) // Machine performance-monitoring counter
|
|
RO( 0xB0F, mhpmcounter15) // Machine performance-monitoring counter
|
|
RO( 0xB10, mhpmcounter16) // Machine performance-monitoring counter
|
|
RO( 0xB11, mhpmcounter17) // Machine performance-monitoring counter
|
|
RO( 0xB12, mhpmcounter18) // Machine performance-monitoring counter
|
|
RO( 0xB13, mhpmcounter19) // Machine performance-monitoring counter
|
|
RO( 0xB14, mhpmcounter20) // Machine performance-monitoring counter
|
|
RO( 0xB15, mhpmcounter21) // Machine performance-monitoring counter
|
|
RO( 0xB16, mhpmcounter22) // Machine performance-monitoring counter
|
|
RO( 0xB17, mhpmcounter23) // Machine performance-monitoring counter
|
|
RO( 0xB18, mhpmcounter24) // Machine performance-monitoring counter
|
|
RO( 0xB19, mhpmcounter25) // Machine performance-monitoring counter
|
|
RO( 0xB1A, mhpmcounter26) // Machine performance-monitoring counter
|
|
RO( 0xB1B, mhpmcounter27) // Machine performance-monitoring counter
|
|
RO( 0xB1C, mhpmcounter28) // Machine performance-monitoring counter
|
|
RO( 0xB1D, mhpmcounter29) // Machine performance-monitoring counter
|
|
RO( 0xB1E, mhpmcounter30) // Machine performance-monitoring counter
|
|
RO( 0xB1F, mhpmcounter31) // Machine performance-monitoring counter
|
|
RO32(0xB80, mcycleh) // Upper 32 bits of mcycle, RV32I only
|
|
RO32(0xB82, minstreth) // Upper 32 bits of minstret, RV32I only
|
|
RO32(0xB83, mhpmcounter3h) // Upper 32 bits of mhpmcounter3, RV32I only
|
|
RO32(0xB84, mhpmcounter4h)
|
|
RO32(0xB85, mhpmcounter5h)
|
|
RO32(0xB86, mhpmcounter6h)
|
|
RO32(0xB87, mhpmcounter7h)
|
|
RO32(0xB88, mhpmcounter8h)
|
|
RO32(0xB89, mhpmcounter9h)
|
|
RO32(0xB8A, mhpmcounter10h)
|
|
RO32(0xB8B, mhpmcounter11h)
|
|
RO32(0xB8C, mhpmcounter12h)
|
|
RO32(0xB8D, mhpmcounter13h)
|
|
RO32(0xB8E, mhpmcounter14h)
|
|
RO32(0xB8F, mhpmcounter15h)
|
|
RO32(0xB90, mhpmcounter16h)
|
|
RO32(0xB91, mhpmcounter17h)
|
|
RO32(0xB92, mhpmcounter18h)
|
|
RO32(0xB93, mhpmcounter19h)
|
|
RO32(0xB94, mhpmcounter20h)
|
|
RO32(0xB95, mhpmcounter21h)
|
|
RO32(0xB96, mhpmcounter22h)
|
|
RO32(0xB97, mhpmcounter23h)
|
|
RO32(0xB98, mhpmcounter24h)
|
|
RO32(0xB99, mhpmcounter25h)
|
|
RO32(0xB9A, mhpmcounter26h)
|
|
RO32(0xB9B, mhpmcounter27h)
|
|
RO32(0xB9C, mhpmcounter28h)
|
|
RO32(0xB9D, mhpmcounter29h)
|
|
RO32(0xB9E, mhpmcounter30h)
|
|
RO32(0xB9F, mhpmcounter31h)
|
|
|
|
RW(0x323, mhpmevent3) // Machine performance-monitoring event selector
|
|
RW(0x324, mhpmevent4) // Machine performance-monitoring event selector
|
|
RW(0x325, mhpmevent5) // Machine performance-monitoring event selector
|
|
RW(0x326, mhpmevent6) // Machine performance-monitoring event selector
|
|
RW(0x327, mhpmevent7) // Machine performance-monitoring event selector
|
|
RW(0x328, mhpmevent8) // Machine performance-monitoring event selector
|
|
RW(0x329, mhpmevent9) // Machine performance-monitoring event selector
|
|
RW(0x32A, mhpmevent10) // Machine performance-monitoring event selector
|
|
RW(0x32B, mhpmevent11) // Machine performance-monitoring event selector
|
|
RW(0x32C, mhpmevent12) // Machine performance-monitoring event selector
|
|
RW(0x32D, mhpmevent13) // Machine performance-monitoring event selector
|
|
RW(0x32E, mhpmevent14) // Machine performance-monitoring event selector
|
|
RW(0x32F, mhpmevent15) // Machine performance-monitoring event selector
|
|
RW(0x330, mhpmevent16) // Machine performance-monitoring event selector
|
|
RW(0x331, mhpmevent17) // Machine performance-monitoring event selector
|
|
RW(0x332, mhpmevent18) // Machine performance-monitoring event selector
|
|
RW(0x333, mhpmevent19) // Machine performance-monitoring event selector
|
|
RW(0x334, mhpmevent20) // Machine performance-monitoring event selector
|
|
RW(0x335, mhpmevent21) // Machine performance-monitoring event selector
|
|
RW(0x336, mhpmevent22) // Machine performance-monitoring event selector
|
|
RW(0x337, mhpmevent23) // Machine performance-monitoring event selector
|
|
RW(0x338, mhpmevent24) // Machine performance-monitoring event selector
|
|
RW(0x339, mhpmevent25) // Machine performance-monitoring event selector
|
|
RW(0x33A, mhpmevent26) // Machine performance-monitoring event selector
|
|
RW(0x33B, mhpmevent27) // Machine performance-monitoring event selector
|
|
RW(0x33C, mhpmevent28) // Machine performance-monitoring event selector
|
|
RW(0x33D, mhpmevent29) // Machine performance-monitoring event selector
|
|
RW(0x33E, mhpmevent30) // Machine performance-monitoring event selector
|
|
RW(0x33F, mhpmevent31) // Machine performance-monitoring event selector
|
|
|
|
// Debug/Trace Registers (shared with Debug Mode)
|
|
RW(0x7A0, tselect) // Debug/Trace trigger register select
|
|
RW(0x7A1, tdata1) // First Debug/Trace trigger data register
|
|
RW(0x7A2, tdata2) // Second Debug/Trace trigger data register
|
|
RW(0x7A3, tdata3) // Third Debug/Trace trigger data register
|
|
|
|
// Debug Mode Registers
|
|
RW(0x7B0, dcsr) // Debug control and status register
|
|
RW(0x7B1, dpc) // Debug PC
|
|
RW(0x7B2, dscratch) // Debug scratch register
|
|
|
|
// Hypervisor Trap Setup
|
|
RW(0x600, hstatus) // Hypervisor status register
|
|
RW(0x602, hedeleg) // Hypervisor exception delegation register
|
|
RW(0x603, hideleg) // Hypervisor interrupt delegation register
|
|
RW(0x604, hie) // Hypervisor interrupt-enable register
|
|
RW(0x606, hcounteren) // Hypervisor counter enable
|
|
RW(0x607, hgeie) // Hypervisor guest external interrupt-enable register
|
|
|
|
// Hypervisor Trap Handling
|
|
RW(0x643, htval) // Hypervisor bad guest physical address
|
|
RW(0x644, hip) // Hypervisor interrupt pending
|
|
RW(0x645, hvip) // Hypervisor virtual interrupt pending
|
|
RW(0x64a, htinst) // Hypervisor trap instruction (transformed)
|
|
RW(0xe12, hgeip) // Hypervisor guest external interrupt pending
|
|
|
|
// Hypervisor Protection and Translation
|
|
RO(0x680, hgatp) // Hypervisor guest address translation and protection
|
|
|
|
// Debug/Trace Registers
|
|
RW(0x6a8, hcontext) // Hypervisor-mode context register
|
|
|
|
// Hypervisor Counter/Timer Virtualization Registers
|
|
RW(0x605, htimedelta) // Delta for VS/VU-mode timer
|
|
RW32(0x615, htimedeltah) // Upper 32 bits of {\tt htimedelta}, RV32 only
|
|
|
|
// Virtual Supervisor Registers
|
|
RW(0x200, vsstatus) // Virtual supervisor status register
|
|
RW(0x204, vsie) // Virtual supervisor interrupt-enable register
|
|
RW(0x205, vstvec) // Virtual supervisor trap handler base address
|
|
RW(0x240, vsscratch) // Virtual supervisor scratch register
|
|
RW(0x241, vsepc) // Virtual supervisor exception program counter
|
|
RW(0x242, vscause) // Virtual supervisor trap cause
|
|
RW(0x243, vstval) // Virtual supervisor bad address or instruction
|
|
RW(0x244, vsip) // Virtual supervisor interrupt pending
|
|
RW(0x280, vsatp) // Virtual supervisor address translation and protection
|