Files
unicorn/bindings/dotnet/UnicornEngine/Const/Riscv.fs
Martin Atkins 7d8fe2ab11 riscv: Expose privilege level as pseudo-register PRIV (#1989)
Unlike some other architectures, RISC-V does not expose the current
privilege mode in any architecturally-defined register. That is intentional
to make it easier to implement virtualization in software, but a Unicorn
caller operates outside of the emulated hart and so it can and should be
able to observe and change the current privilege mode in order to properly
emulate certain behaviors of a real CPU.

The current privilege level is therefore now exposed as a new
pseudo-register using the name "priv", which matches the name of the
virtual register used by RISC-V's debug extension to allow the debugger
to read and change the privilege mode while the hart is halted. Unicorn's
use of it is conceptually similar to a debugger.

The bit encoding of this register is the same as specified in RISC-V Debug
Specification v1.0-rc3 Section 4.10.1. It's defined as a "virtual"
register exposing a subset of fields from the dcsr register, although here
it's implemented directly inside the Unicorn code because QEMU doesn't
currently have explicit support for the CSRs from the debug specification.
If it supports "dcsr" in a future release then this implementation could
change to wrap reading and writing that CSR and then projecting the "prv"
and "v" bitfields into the correct locations for the virtual register.
2024-11-11 21:09:45 +08:00

295 lines
9.0 KiB
Forth

// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT
namespace UnicornEngine.Const
open System
[<AutoOpen>]
module Riscv =
// RISCV32 CPU
let UC_CPU_RISCV32_ANY = 0
let UC_CPU_RISCV32_BASE32 = 1
let UC_CPU_RISCV32_SIFIVE_E31 = 2
let UC_CPU_RISCV32_SIFIVE_U34 = 3
let UC_CPU_RISCV32_ENDING = 4
// RISCV64 CPU
let UC_CPU_RISCV64_ANY = 0
let UC_CPU_RISCV64_BASE64 = 1
let UC_CPU_RISCV64_SIFIVE_E51 = 2
let UC_CPU_RISCV64_SIFIVE_U54 = 3
let UC_CPU_RISCV64_ENDING = 4
// RISCV registers
let UC_RISCV_REG_INVALID = 0
// General purpose registers
let UC_RISCV_REG_X0 = 1
let UC_RISCV_REG_X1 = 2
let UC_RISCV_REG_X2 = 3
let UC_RISCV_REG_X3 = 4
let UC_RISCV_REG_X4 = 5
let UC_RISCV_REG_X5 = 6
let UC_RISCV_REG_X6 = 7
let UC_RISCV_REG_X7 = 8
let UC_RISCV_REG_X8 = 9
let UC_RISCV_REG_X9 = 10
let UC_RISCV_REG_X10 = 11
let UC_RISCV_REG_X11 = 12
let UC_RISCV_REG_X12 = 13
let UC_RISCV_REG_X13 = 14
let UC_RISCV_REG_X14 = 15
let UC_RISCV_REG_X15 = 16
let UC_RISCV_REG_X16 = 17
let UC_RISCV_REG_X17 = 18
let UC_RISCV_REG_X18 = 19
let UC_RISCV_REG_X19 = 20
let UC_RISCV_REG_X20 = 21
let UC_RISCV_REG_X21 = 22
let UC_RISCV_REG_X22 = 23
let UC_RISCV_REG_X23 = 24
let UC_RISCV_REG_X24 = 25
let UC_RISCV_REG_X25 = 26
let UC_RISCV_REG_X26 = 27
let UC_RISCV_REG_X27 = 28
let UC_RISCV_REG_X28 = 29
let UC_RISCV_REG_X29 = 30
let UC_RISCV_REG_X30 = 31
let UC_RISCV_REG_X31 = 32
// RISCV CSR
let UC_RISCV_REG_USTATUS = 33
let UC_RISCV_REG_UIE = 34
let UC_RISCV_REG_UTVEC = 35
let UC_RISCV_REG_USCRATCH = 36
let UC_RISCV_REG_UEPC = 37
let UC_RISCV_REG_UCAUSE = 38
let UC_RISCV_REG_UTVAL = 39
let UC_RISCV_REG_UIP = 40
let UC_RISCV_REG_FFLAGS = 41
let UC_RISCV_REG_FRM = 42
let UC_RISCV_REG_FCSR = 43
let UC_RISCV_REG_CYCLE = 44
let UC_RISCV_REG_TIME = 45
let UC_RISCV_REG_INSTRET = 46
let UC_RISCV_REG_HPMCOUNTER3 = 47
let UC_RISCV_REG_HPMCOUNTER4 = 48
let UC_RISCV_REG_HPMCOUNTER5 = 49
let UC_RISCV_REG_HPMCOUNTER6 = 50
let UC_RISCV_REG_HPMCOUNTER7 = 51
let UC_RISCV_REG_HPMCOUNTER8 = 52
let UC_RISCV_REG_HPMCOUNTER9 = 53
let UC_RISCV_REG_HPMCOUNTER10 = 54
let UC_RISCV_REG_HPMCOUNTER11 = 55
let UC_RISCV_REG_HPMCOUNTER12 = 56
let UC_RISCV_REG_HPMCOUNTER13 = 57
let UC_RISCV_REG_HPMCOUNTER14 = 58
let UC_RISCV_REG_HPMCOUNTER15 = 59
let UC_RISCV_REG_HPMCOUNTER16 = 60
let UC_RISCV_REG_HPMCOUNTER17 = 61
let UC_RISCV_REG_HPMCOUNTER18 = 62
let UC_RISCV_REG_HPMCOUNTER19 = 63
let UC_RISCV_REG_HPMCOUNTER20 = 64
let UC_RISCV_REG_HPMCOUNTER21 = 65
let UC_RISCV_REG_HPMCOUNTER22 = 66
let UC_RISCV_REG_HPMCOUNTER23 = 67
let UC_RISCV_REG_HPMCOUNTER24 = 68
let UC_RISCV_REG_HPMCOUNTER25 = 69
let UC_RISCV_REG_HPMCOUNTER26 = 70
let UC_RISCV_REG_HPMCOUNTER27 = 71
let UC_RISCV_REG_HPMCOUNTER28 = 72
let UC_RISCV_REG_HPMCOUNTER29 = 73
let UC_RISCV_REG_HPMCOUNTER30 = 74
let UC_RISCV_REG_HPMCOUNTER31 = 75
let UC_RISCV_REG_CYCLEH = 76
let UC_RISCV_REG_TIMEH = 77
let UC_RISCV_REG_INSTRETH = 78
let UC_RISCV_REG_HPMCOUNTER3H = 79
let UC_RISCV_REG_HPMCOUNTER4H = 80
let UC_RISCV_REG_HPMCOUNTER5H = 81
let UC_RISCV_REG_HPMCOUNTER6H = 82
let UC_RISCV_REG_HPMCOUNTER7H = 83
let UC_RISCV_REG_HPMCOUNTER8H = 84
let UC_RISCV_REG_HPMCOUNTER9H = 85
let UC_RISCV_REG_HPMCOUNTER10H = 86
let UC_RISCV_REG_HPMCOUNTER11H = 87
let UC_RISCV_REG_HPMCOUNTER12H = 88
let UC_RISCV_REG_HPMCOUNTER13H = 89
let UC_RISCV_REG_HPMCOUNTER14H = 90
let UC_RISCV_REG_HPMCOUNTER15H = 91
let UC_RISCV_REG_HPMCOUNTER16H = 92
let UC_RISCV_REG_HPMCOUNTER17H = 93
let UC_RISCV_REG_HPMCOUNTER18H = 94
let UC_RISCV_REG_HPMCOUNTER19H = 95
let UC_RISCV_REG_HPMCOUNTER20H = 96
let UC_RISCV_REG_HPMCOUNTER21H = 97
let UC_RISCV_REG_HPMCOUNTER22H = 98
let UC_RISCV_REG_HPMCOUNTER23H = 99
let UC_RISCV_REG_HPMCOUNTER24H = 100
let UC_RISCV_REG_HPMCOUNTER25H = 101
let UC_RISCV_REG_HPMCOUNTER26H = 102
let UC_RISCV_REG_HPMCOUNTER27H = 103
let UC_RISCV_REG_HPMCOUNTER28H = 104
let UC_RISCV_REG_HPMCOUNTER29H = 105
let UC_RISCV_REG_HPMCOUNTER30H = 106
let UC_RISCV_REG_HPMCOUNTER31H = 107
let UC_RISCV_REG_MCYCLE = 108
let UC_RISCV_REG_MINSTRET = 109
let UC_RISCV_REG_MCYCLEH = 110
let UC_RISCV_REG_MINSTRETH = 111
let UC_RISCV_REG_MVENDORID = 112
let UC_RISCV_REG_MARCHID = 113
let UC_RISCV_REG_MIMPID = 114
let UC_RISCV_REG_MHARTID = 115
let UC_RISCV_REG_MSTATUS = 116
let UC_RISCV_REG_MISA = 117
let UC_RISCV_REG_MEDELEG = 118
let UC_RISCV_REG_MIDELEG = 119
let UC_RISCV_REG_MIE = 120
let UC_RISCV_REG_MTVEC = 121
let UC_RISCV_REG_MCOUNTEREN = 122
let UC_RISCV_REG_MSTATUSH = 123
let UC_RISCV_REG_MUCOUNTEREN = 124
let UC_RISCV_REG_MSCOUNTEREN = 125
let UC_RISCV_REG_MHCOUNTEREN = 126
let UC_RISCV_REG_MSCRATCH = 127
let UC_RISCV_REG_MEPC = 128
let UC_RISCV_REG_MCAUSE = 129
let UC_RISCV_REG_MTVAL = 130
let UC_RISCV_REG_MIP = 131
let UC_RISCV_REG_MBADADDR = 132
let UC_RISCV_REG_SSTATUS = 133
let UC_RISCV_REG_SEDELEG = 134
let UC_RISCV_REG_SIDELEG = 135
let UC_RISCV_REG_SIE = 136
let UC_RISCV_REG_STVEC = 137
let UC_RISCV_REG_SCOUNTEREN = 138
let UC_RISCV_REG_SSCRATCH = 139
let UC_RISCV_REG_SEPC = 140
let UC_RISCV_REG_SCAUSE = 141
let UC_RISCV_REG_STVAL = 142
let UC_RISCV_REG_SIP = 143
let UC_RISCV_REG_SBADADDR = 144
let UC_RISCV_REG_SPTBR = 145
let UC_RISCV_REG_SATP = 146
let UC_RISCV_REG_HSTATUS = 147
let UC_RISCV_REG_HEDELEG = 148
let UC_RISCV_REG_HIDELEG = 149
let UC_RISCV_REG_HIE = 150
let UC_RISCV_REG_HCOUNTEREN = 151
let UC_RISCV_REG_HTVAL = 152
let UC_RISCV_REG_HIP = 153
let UC_RISCV_REG_HTINST = 154
let UC_RISCV_REG_HGATP = 155
let UC_RISCV_REG_HTIMEDELTA = 156
let UC_RISCV_REG_HTIMEDELTAH = 157
// Floating-point registers
let UC_RISCV_REG_F0 = 158
let UC_RISCV_REG_F1 = 159
let UC_RISCV_REG_F2 = 160
let UC_RISCV_REG_F3 = 161
let UC_RISCV_REG_F4 = 162
let UC_RISCV_REG_F5 = 163
let UC_RISCV_REG_F6 = 164
let UC_RISCV_REG_F7 = 165
let UC_RISCV_REG_F8 = 166
let UC_RISCV_REG_F9 = 167
let UC_RISCV_REG_F10 = 168
let UC_RISCV_REG_F11 = 169
let UC_RISCV_REG_F12 = 170
let UC_RISCV_REG_F13 = 171
let UC_RISCV_REG_F14 = 172
let UC_RISCV_REG_F15 = 173
let UC_RISCV_REG_F16 = 174
let UC_RISCV_REG_F17 = 175
let UC_RISCV_REG_F18 = 176
let UC_RISCV_REG_F19 = 177
let UC_RISCV_REG_F20 = 178
let UC_RISCV_REG_F21 = 179
let UC_RISCV_REG_F22 = 180
let UC_RISCV_REG_F23 = 181
let UC_RISCV_REG_F24 = 182
let UC_RISCV_REG_F25 = 183
let UC_RISCV_REG_F26 = 184
let UC_RISCV_REG_F27 = 185
let UC_RISCV_REG_F28 = 186
let UC_RISCV_REG_F29 = 187
let UC_RISCV_REG_F30 = 188
let UC_RISCV_REG_F31 = 189
let UC_RISCV_REG_PC = 190
let UC_RISCV_REG_PRIV = 191
let UC_RISCV_REG_ENDING = 192
// Alias registers
let UC_RISCV_REG_ZERO = 1
let UC_RISCV_REG_RA = 2
let UC_RISCV_REG_SP = 3
let UC_RISCV_REG_GP = 4
let UC_RISCV_REG_TP = 5
let UC_RISCV_REG_T0 = 6
let UC_RISCV_REG_T1 = 7
let UC_RISCV_REG_T2 = 8
let UC_RISCV_REG_S0 = 9
let UC_RISCV_REG_FP = 9
let UC_RISCV_REG_S1 = 10
let UC_RISCV_REG_A0 = 11
let UC_RISCV_REG_A1 = 12
let UC_RISCV_REG_A2 = 13
let UC_RISCV_REG_A3 = 14
let UC_RISCV_REG_A4 = 15
let UC_RISCV_REG_A5 = 16
let UC_RISCV_REG_A6 = 17
let UC_RISCV_REG_A7 = 18
let UC_RISCV_REG_S2 = 19
let UC_RISCV_REG_S3 = 20
let UC_RISCV_REG_S4 = 21
let UC_RISCV_REG_S5 = 22
let UC_RISCV_REG_S6 = 23
let UC_RISCV_REG_S7 = 24
let UC_RISCV_REG_S8 = 25
let UC_RISCV_REG_S9 = 26
let UC_RISCV_REG_S10 = 27
let UC_RISCV_REG_S11 = 28
let UC_RISCV_REG_T3 = 29
let UC_RISCV_REG_T4 = 30
let UC_RISCV_REG_T5 = 31
let UC_RISCV_REG_T6 = 32
let UC_RISCV_REG_FT0 = 158
let UC_RISCV_REG_FT1 = 159
let UC_RISCV_REG_FT2 = 160
let UC_RISCV_REG_FT3 = 161
let UC_RISCV_REG_FT4 = 162
let UC_RISCV_REG_FT5 = 163
let UC_RISCV_REG_FT6 = 164
let UC_RISCV_REG_FT7 = 165
let UC_RISCV_REG_FS0 = 166
let UC_RISCV_REG_FS1 = 167
let UC_RISCV_REG_FA0 = 168
let UC_RISCV_REG_FA1 = 169
let UC_RISCV_REG_FA2 = 170
let UC_RISCV_REG_FA3 = 171
let UC_RISCV_REG_FA4 = 172
let UC_RISCV_REG_FA5 = 173
let UC_RISCV_REG_FA6 = 174
let UC_RISCV_REG_FA7 = 175
let UC_RISCV_REG_FS2 = 176
let UC_RISCV_REG_FS3 = 177
let UC_RISCV_REG_FS4 = 178
let UC_RISCV_REG_FS5 = 179
let UC_RISCV_REG_FS6 = 180
let UC_RISCV_REG_FS7 = 181
let UC_RISCV_REG_FS8 = 182
let UC_RISCV_REG_FS9 = 183
let UC_RISCV_REG_FS10 = 184
let UC_RISCV_REG_FS11 = 185
let UC_RISCV_REG_FT8 = 186
let UC_RISCV_REG_FT9 = 187
let UC_RISCV_REG_FT10 = 188
let UC_RISCV_REG_FT11 = 189