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.
295 lines
9.0 KiB
Forth
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
|
|
|