Skip to content

Commit d99833e

Browse files
authored
Merge pull request #1357 from davidharrishmc/dev
2 parents a3de429 + 81951d5 commit d99833e

File tree

15 files changed

+1642
-243
lines changed

15 files changed

+1642
-243
lines changed

bin/regression-wally

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ testfloatsim = "questa" # change to Verilator when Issue #707 about testfloat
4242
standard_tests = [
4343
["rv32e", ["arch32e"]],
4444
["rv32i", ["arch32i"]],
45-
["rv32imc", ["arch32i", "arch32c", "arch32m"]], # add when issue #1321 is fixed: "wally32periph"
45+
["rv32imc", ["arch32i", "arch32c", "arch32m", "wally32periph"]],
4646
["rv32gc", ["arch32f", "arch32d", "arch32f_fma", "arch32d_fma", "arch32f_divsqrt", "arch32d_divsqrt",
4747
"arch32i", "arch32priv", "arch32c", "arch32m", "arch32a_amo", "arch32zifencei", "arch32zicond",
4848
"arch32zba", "arch32zbb", "arch32zbc", "arch32zbs", "arch32zfh", "arch32zfh_fma",
@@ -436,18 +436,18 @@ def selectTests(args, sims, coverStr):
436436
addTests(tests_buildrootbootlockstep, lockstepsim, coverStr, configs) # lockstep with Questa and ImperasDV runs overnight
437437

438438
if args.ccov: # only run RV64GC tests on Questa in code coverage mode
439-
addTestsByDir(f"{archVerifDir}/tests/lockstep/rv64/", "rv64gc", coveragesim, coverStr, configs)
440-
addTestsByDir(f"{archVerifDir}/tests/lockstep/priv/rv64/", "rv64gc", coveragesim, coverStr, configs)
439+
addTestsByDir(f"{archVerifDir}/tests/rv64/", "rv64gc", coveragesim, coverStr, configs)
440+
addTestsByDir(f"{archVerifDir}/tests/priv/rv64/", "rv64gc", coveragesim, coverStr, configs) # doesn't help coverage much dh 4/12/25
441441
addTestsByDir(WALLY+"/tests/coverage/", "rv64gc", coveragesim, coverStr, configs)
442442
# Extra tests from riscv-arch-test that should be run as part of the functional coverage suite
443443
addTestsByDir(f"{WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/pmp", "rv64gc", coveragesim, coverStr, configs)
444444
addTestsByDir(f"{WALLY}/tests/riscof/work/wally-riscv-arch-test/rv64i_m/privilege", "rv64gc", coveragesim, coverStr, configs)
445445
# addTestsByDir(f"{WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/F", "rv64gc", coveragesim, coverStr, configs) # doesn't help fdivsqrt coverage 4/3/2025
446446
elif args.fcov: # run tests in lockstep in functional coverage mode
447-
addTestsByDir(f"{archVerifDir}/tests/lockstep/rv32/", "rv32gc", coveragesim, coverStr, configs, lockstepMode=1)
448-
addTestsByDir(f"{archVerifDir}/tests/lockstep/rv64/", "rv64gc", coveragesim, coverStr, configs, lockstepMode=1)
449-
addTestsByDir(f"{archVerifDir}/tests/lockstep/priv/rv32/", "rv32gc", coveragesim, coverStr, configs, lockstepMode=1)
450-
addTestsByDir(f"{archVerifDir}/tests/lockstep/priv/rv64/", "rv64gc", coveragesim, coverStr, configs, lockstepMode=1)
447+
addTestsByDir(f"{archVerifDir}/tests/rv32/", "rv32gc", coveragesim, coverStr, configs, lockstepMode=1)
448+
addTestsByDir(f"{archVerifDir}/tests/rv64/", "rv64gc", coveragesim, coverStr, configs, lockstepMode=1)
449+
addTestsByDir(f"{archVerifDir}/tests/priv/rv32/", "rv32gc", coveragesim, coverStr, configs, lockstepMode=1)
450+
addTestsByDir(f"{archVerifDir}/tests/priv/rv64/", "rv64gc", coveragesim, coverStr, configs, lockstepMode=1)
451451
# Extra tests from riscv-arch-test that should be run as part of the functional coverage suite
452452
addTestsByDir(f"{WALLY}/tests/riscof/work/riscv-arch-test/rv32i_m/vm_sv32", "rv32gc", coveragesim, coverStr, configs, lockstepMode=1)
453453
# addTestsByDir(f"{WALLY}/tests/riscof/work/riscv-arch-test/rv32i_m/pmp32", "rv32gc", coveragesim, coverStr, configs, lockstepMode=1) TODO: Add when working in lockstep

examples/exercises/fma16/fma16_testgen.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,22 @@ void genCase(FILE *fptr, float16_t x, float16_t y, float16_t z, int mul, int add
4242
char calc[80], flags[80];
4343
float32_t x32, y32, z32, r32;
4444
float xf, yf, zf, rf;
45+
float16_t x2, z2;
4546
float16_t smallest;
4647

4748
if (!mul) y.v = 0x3C00; // force y to 1 to avoid multiply
4849
if (!add) z.v = 0x0000; // force z to 0 to avoid add
49-
if (negp) x.v ^= 0x8000; // flip sign of x to negate p
50-
if (negz) z.v ^= 0x8000; // flip sign of z to negate z
50+
51+
// Negated versions of x and z are used in the mulAdd call where necessary
52+
x2 = x;
53+
z2 = z;
54+
if (negp) x2.v ^= 0x8000; // flip sign of x to negate p
55+
if (negz) z2.v ^= 0x8000; // flip sign of z to negate z
56+
5157
op = roundingMode << 4 | mul<<3 | add<<2 | negp<<1 | negz;
5258
// printf("op = %02x rm %d mul %d add %d negp %d negz %d\n", op, roundingMode, mul, add, negp, negz);
5359
softfloat_exceptionFlags = 0; // clear exceptions
54-
result = f16_mulAdd(x, y, z); // call SoftFloat to compute expected result
60+
result = f16_mulAdd(x2, y, z2); // call SoftFloat to compute expected result
5561

5662
// Extract expected flags from SoftFloat
5763
sprintf(flags, "NV: %d OF: %d UF: %d NX: %d",

sim/questa/coverage-exclusions-rv64gc.do

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,11 @@ coverage exclude -scope /dut/core/ifu/immu/immu/pmp/pmpchecker -linerange [GetLi
346346
coverage exclude -scope /dut/core/ifu/immu/immu/pmp/pmpchecker -linerange [GetLineNum ${SRC}/mmu/pmpchecker.sv "exclusion-tag: immu-pmpcboz"]
347347
coverage exclude -scope /dut/core/ifu/immu/immu/pmp/pmpchecker -linerange [GetLineNum ${SRC}/mmu/pmpchecker.sv "exclusion-tag: immu-pmpcboaccess"]
348348

349+
# IMMU PMP only makes 4-byte accesses
350+
coverage exclude -scope /dut/core/ifu/immu/immu/pmp/pmpchecker -linerange [GetLineNum ${SRC}/mmu/pmpchecker.sv "SizeBytesMinus1 = 3'd0"] -item bs 1
351+
coverage exclude -scope /dut/core/ifu/immu/immu/pmp/pmpchecker -linerange [GetLineNum ${SRC}/mmu/pmpchecker.sv "SizeBytesMinus1 = 3'd1"] -item bs 1
352+
coverage exclude -scope /dut/core/ifu/immu/immu/pmp/pmpchecker -linerange [GetLineNum ${SRC}/mmu/pmpchecker.sv "SizeBytesMinus1 = 3'd7"] -item bs 1
353+
349354
# No irom
350355
set line [GetLineNum ${SRC}/ifu/ifu.sv "~ITLBMissF & ~CacheableF & ~SelIROM"]
351356
coverage exclude -scope /dut/core/ifu -linerange $line-$line -item c 1 -feccondrow 6

src/mmu/mmu.sv

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,13 @@ module mmu import cvw::*; #(parameter cvw_t P,
7575
logic ReadNoAmoAccessM; // Read that is not part of atomic operation causes Load faults. Otherwise StoreAmo faults
7676
logic [1:0] PBMemoryType; // PBMT field of PTE during TLB hit, or 00 otherwise
7777
logic AtomicMisalignedCausesAccessFaultM; // Misaligned atomics are not handled by hardware even with ZICCLSM, so it throws an access fault instead of misaligned with ZICCLSM
78+
logic [1:0] EffectivePrivilegeModeW; // Effective privilege mode accounting for MPRV
7879

80+
81+
// Get Effective Privilege Mode
82+
// for DLB, when mstatus.MPRV=1, use mstatus.MPP rather than the current privilege mode
83+
assign EffectivePrivilegeModeW = IMMU ? PrivilegeModeW : (STATUS_MPRV ? STATUS_MPP : PrivilegeModeW);
84+
7985
// only instantiate TLB if Virtual Memory is supported
8086
if (P.VIRTMEM_SUPPORTED) begin:tlb
8187
logic ReadAccess, WriteAccess;
@@ -86,7 +92,7 @@ module mmu import cvw::*; #(parameter cvw_t P,
8692
.SATP_MODE(SATP_REGW[P.XLEN-1:P.XLEN-P.SVMODE_BITS]),
8793
.SATP_ASID(SATP_REGW[P.ASID_BASE+P.ASID_BITS-1:P.ASID_BASE]),
8894
.VAdr(VAdr[P.XLEN-1:0]), .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, .ENVCFG_ADUE,
89-
.PrivilegeModeW, .ReadAccess, .WriteAccess, .CMOpM,
95+
.EffectivePrivilegeModeW, .ReadAccess, .WriteAccess, .CMOpM,
9096
.DisableTranslation, .PTE, .PageTypeWriteVal,
9197
.TLBWrite, .TLBFlush, .TLBPAdr, .TLBMiss,
9298
.Translate, .TLBPageFault, .UpdateDA, .PBMemoryType);
@@ -115,7 +121,7 @@ module mmu import cvw::*; #(parameter cvw_t P,
115121
.PMAInstrAccessFaultF, .PMALoadAccessFaultM, .PMAStoreAmoAccessFaultM);
116122

117123
if (P.PMP_ENTRIES > 0) begin : pmp
118-
pmpchecker #(P) pmpchecker(.PhysicalAddress, .PrivilegeModeW,
124+
pmpchecker #(P) pmpchecker(.PhysicalAddress, .EffectivePrivilegeModeW,
119125
.PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW,
120126
.ExecuteAccessF, .WriteAccessM, .ReadAccessM, .Size, .CMOpM,
121127
.PMPInstrAccessFaultF, .PMPLoadAccessFaultM, .PMPStoreAmoAccessFaultM);

src/mmu/pmpadrdec.sv

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
module pmpadrdec import cvw::*; #(parameter cvw_t P) (
3535
input logic [P.PA_BITS-1:0] PhysicalAddress,
36+
input logic [1:0] Size,
3637
input logic [7:0] PMPCfg,
3738
input logic [P.PA_BITS-3:0] PMPAdr,
3839
input logic FirstMatch,
@@ -52,7 +53,7 @@ module pmpadrdec import cvw::*; #(parameter cvw_t P) (
5253
logic PAltPMPAdr;
5354
logic [P.PA_BITS-1:0] CurrentAdrFull;
5455
logic [1:0] AdrMode;
55-
logic [P.PA_BITS-1:0] PMPTop1;
56+
logic [P.PA_BITS-1:0] PMPTop1, PMPTopTOR, PMPTopNaturallyAligned;
5657

5758
assign AdrMode = PMPCfg[4:3];
5859

@@ -83,10 +84,12 @@ module pmpadrdec import cvw::*; #(parameter cvw_t P) (
8384
1'b0;
8485

8586
// Report top of region for first matching region
86-
assign PMPTop1 = {PMPAdr,2'b00} | NAMask; // top of the pmp region. All 1s in the lower bits. Used to check the address doesn't pass the top
87+
// PMP should match but fail if the size is too big (8-byte accesses spanning to TOR or NA4 region)
88+
assign PMPTopTOR = {PMPAdr-1, 2'b11}; // TOR goes to (pmpaddr << 2) - 1
89+
assign PMPTopNaturallyAligned = {PMPAdr,2'b00} | NAMask; // top of the pmp region for NA4 and NAPOT. All 1s in the lower bits. Used to check the address doesn't pass the top
90+
assign PMPTop1 = (AdrMode == TOR) ? PMPTopTOR : PMPTopNaturallyAligned;
8791
assign PMPTop = FirstMatch ? PMPTop1 : '0; // AND portion of distributed AND-OR mux (OR portion in pmpchhecker)
8892

89-
// PMP should match but fail if the size is too big (8-byte accesses spanning to TOR or NA4 region)
9093
assign L = PMPCfg[7];
9194
assign X = PMPCfg[2];
9295
assign W = PMPCfg[1];

src/mmu/pmpchecker.sv

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
module pmpchecker import cvw::*; #(parameter cvw_t P) (
3434
input logic [P.PA_BITS-1:0] PhysicalAddress,
35-
input logic [1:0] PrivilegeModeW,
35+
input logic [1:0] EffectivePrivilegeModeW,
3636
// ModelSim has a switch -svinputport which controls whether input ports
3737
// are nets (wires) or vars by default. The default setting of this switch is
3838
// `relaxed`, which means that signals are nets if and only if they are
@@ -66,6 +66,7 @@ module pmpchecker import cvw::*; #(parameter cvw_t P) (
6666
if (P.PMP_ENTRIES > 0) begin: pmp // prevent complaints about array of no elements when PMP_ENTRIES = 0
6767
pmpadrdec #(P) pmpadrdecs[P.PMP_ENTRIES-1:0](
6868
.PhysicalAddress,
69+
.Size,
6970
.PMPCfg(PMPCFG_ARRAY_REGW),
7071
.PMPAdr(PMPADDR_ARRAY_REGW),
7172
.FirstMatch,
@@ -97,8 +98,8 @@ module pmpchecker import cvw::*; #(parameter cvw_t P) (
9798
assign PhysicalAddressTop = PhysicalAddress + {{P.PA_BITS-3{1'b0}}, SizeBytesMinus1}; // top of the access range
9899
assign TooBig = PhysicalAddressTop > MatchingPMPTop; // check if the access goes beyond the top of the PMP region
99100

100-
// Only enforce PMP checking for S and U modes or in Machine mode when L bit is set in selected region
101-
assign EnforcePMP = (PrivilegeModeW != P.M_MODE) | MatchingL;
101+
// Only enforce PMP checking for effective S and U modes (accounting for mstatus.MPRV) or in Machine mode when L bit is set in selected region
102+
assign EnforcePMP = (EffectivePrivilegeModeW != P.M_MODE) | MatchingL;
102103

103104
assign PMPCBOMAccessFault = EnforcePMP & (|CMOpM[2:0]) & ~MatchingR ; // checking R is sufficient because W implies R in PMP // exclusion-tag: immu-pmpcbom
104105
assign PMPCBOZAccessFault = EnforcePMP & CMOpM[3] & ~MatchingW ; // exclusion-tag: immu-pmpcboz

src/mmu/tlb/tlb.sv

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ module tlb import cvw::*; #(parameter cvw_t P,
6060
input logic [1:0] STATUS_MPP,
6161
input logic ENVCFG_PBMTE, // Page-based memory types enabled
6262
input logic ENVCFG_ADUE, // HPTW A/D Update enable
63-
input logic [1:0] PrivilegeModeW, // Current privilege level of the processeor
63+
input logic [1:0] EffectivePrivilegeModeW, // Current privilege level of the processeor, accounting for mstatus.MPRV
6464
input logic ReadAccess,
6565
input logic WriteAccess,
6666
input logic [3:0] CMOpM,
@@ -110,7 +110,7 @@ module tlb import cvw::*; #(parameter cvw_t P,
110110
assign NAPOT4 = (PPN[3:0] == 4'b1000); // 64 KiB contiguous region with pte.napot_bits = 4
111111

112112
tlbcontrol #(P, ITLB) tlbcontrol(.SATP_MODE, .VAdr, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, .ENVCFG_ADUE,
113-
.PrivilegeModeW, .ReadAccess, .WriteAccess, .CMOpM, .DisableTranslation,
113+
.EffectivePrivilegeModeW, .ReadAccess, .WriteAccess, .CMOpM, .DisableTranslation,
114114
.PTEAccessBits, .CAMHit, .Misaligned, .NAPOT4,
115115
.TLBMiss, .TLBHit, .TLBPageFault,
116116
.UpdateDA, .SV39Mode, .Translate, .PTE_N, .PBMemoryType);

src/mmu/tlb/tlbcontrol.sv

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
3434
input logic [1:0] STATUS_MPP,
3535
input logic ENVCFG_PBMTE, // Page-based memory types enabled
3636
input logic ENVCFG_ADUE, // HPTW A/D Update enable
37-
input logic [1:0] PrivilegeModeW, // Current privilege level of the processeor
37+
input logic [1:0] EffectivePrivilegeModeW, // Current privilege level of the processeor, accounting for mstatus.MPRV
3838
input logic ReadAccess, WriteAccess,
3939
input logic [3:0] CMOpM,
4040
input logic DisableTranslation,
@@ -53,8 +53,6 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
5353
);
5454

5555
// Sections of the page table entry
56-
logic [1:0] EffectivePrivilegeMode;
57-
5856
logic [1:0] PTE_PBMT;
5957
logic PTE_RESERVED, PTE_D, PTE_A, PTE_U, PTE_X, PTE_W, PTE_R, PTE_V; // Useful PTE Control Bits
6058
logic UpperBitsUnequal;
@@ -66,8 +64,7 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
6664
logic PreUpdateDA, PrePageFault;
6765

6866
// Grab the sv mode from SATP and determine whether translation should occur
69-
assign EffectivePrivilegeMode = (ITLB == 1) ? PrivilegeModeW : (STATUS_MPRV ? STATUS_MPP : PrivilegeModeW); // DTLB uses MPP mode when MPRV is 1
70-
assign Translate = (SATP_MODE != P.NO_TRANSLATE[P.SVMODE_BITS-1:0]) & (EffectivePrivilegeMode != P.M_MODE) & ~DisableTranslation;
67+
assign Translate = (SATP_MODE != P.NO_TRANSLATE[P.SVMODE_BITS-1:0]) & (EffectivePrivilegeModeW != P.M_MODE) & ~DisableTranslation;
7168

7269
// Determine whether TLB is being used
7370
assign TLBAccess = ReadAccess | WriteAccess | (|CMOpM);
@@ -95,7 +92,7 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
9592
if (ITLB == 1) begin:itlb // Instruction TLB fault checking
9693
// User mode may only execute user mode pages, and supervisor mode may
9794
// only execute non-user mode pages.
98-
assign ImproperPrivilege = ((PrivilegeModeW == P.U_MODE) & ~PTE_U) | ((PrivilegeModeW == P.S_MODE) & PTE_U);
95+
assign ImproperPrivilege = ((EffectivePrivilegeModeW == P.U_MODE) & ~PTE_U) | ((EffectivePrivilegeModeW == P.S_MODE) & PTE_U);
9996
assign PreUpdateDA = ~PTE_A;
10097
assign InvalidAccess = ~PTE_X | ReservedRW;
10198
end else begin:dtlb // Data TLB fault checking
@@ -104,8 +101,8 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
104101

105102
// User mode may only load/store from user mode pages, and supervisor mode
106103
// may only access user mode pages when STATUS_SUM is low.
107-
assign ImproperPrivilege = ((EffectivePrivilegeMode == P.U_MODE) & ~PTE_U) |
108-
((EffectivePrivilegeMode == P.S_MODE) & PTE_U & ~STATUS_SUM);
104+
assign ImproperPrivilege = ((EffectivePrivilegeModeW == P.U_MODE) & ~PTE_U) |
105+
((EffectivePrivilegeModeW == P.S_MODE) & PTE_U & ~STATUS_SUM);
109106
// Check for read error. Reads are invalid when the page is not readable
110107
// (and executable pages are not readable) or when the page is neither
111108
// readable nor executable (and executable pages are readable).

testbench/tests.vh

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ string arch32pmp[] = '{
194194
"rv32i_m/pmp32/src/pmp-TOR-X.S"
195195
};
196196

197-
// Tests commented out pending riscv-arch-test issue #588
198197
string arch64pmp[] = '{
199198
`RISCVARCHTEST,
200199
"rv64i_m/pmp/src/pmp64-CSR-ALL-MODES.S",
@@ -203,10 +202,10 @@ string arch64pmp[] = '{
203202
"rv64i_m/pmp/src/pmp64-NA4-U.S",
204203
"rv64i_m/pmp/src/pmp64-NAPOT-M.S",
205204
"rv64i_m/pmp/src/pmp64-NAPOT-S.S",
206-
"rv64i_m/pmp/src/pmp64-NAPOT-U.S"
207-
// "rv64i_m/pmp/src/pmp64-TOR-M.S", TODO: Reenable when Wally top of PMP region bug is fixed
208-
// "rv64i_m/pmp/src/pmp64-TOR-S.S",
209-
// "rv64i_m/pmp/src/pmp64-TOR-U.S"
205+
"rv64i_m/pmp/src/pmp64-NAPOT-U.S",
206+
"rv64i_m/pmp/src/pmp64-TOR-M.S",
207+
"rv64i_m/pmp/src/pmp64-TOR-S.S",
208+
"rv64i_m/pmp/src/pmp64-TOR-U.S"
210209
};
211210

212211
string arch32vm_sv32[] = '{
@@ -253,7 +252,6 @@ string arch64priv[] = '{
253252
`RISCVARCHTEST,
254253
"rv64i_m/privilege/src/ebreak.S",
255254
"rv64i_m/privilege/src/ecall.S",
256-
// "rv64i_m/privilege/src/misalign1-jalr-01.S",
257255
"rv64i_m/privilege/src/misalign2-jalr-01.S",
258256
"rv64i_m/privilege/src/misalign-beq-01.S",
259257
"rv64i_m/privilege/src/misalign-bge-01.S",
@@ -262,7 +260,7 @@ string arch64priv[] = '{
262260
"rv64i_m/privilege/src/misalign-bltu-01.S",
263261
"rv64i_m/privilege/src/misalign-bne-01.S",
264262
"rv64i_m/privilege/src/misalign-jal-01.S"
265-
// removed because rv64gc supports Zicclsm
263+
// commented out for now because rv64gc supports Zicclsm, but Sail does not yet. Restore when Sail supports Zicclsm.
266264
/* -----\/----- EXCLUDED -----\/-----
267265
"rv64i_m/privilege/src/misalign-ld-01.S",
268266
"rv64i_m/privilege/src/misalign-lh-01.S",
@@ -2014,7 +2012,6 @@ string arch32priv[] = '{
20142012
`RISCVARCHTEST,
20152013
"rv32i_m/privilege/src/ebreak.S",
20162014
"rv32i_m/privilege/src/ecall.S",
2017-
// "rv32i_m/privilege/src/misalign1-jalr-01.S",
20182015
"rv32i_m/privilege/src/misalign2-jalr-01.S",
20192016
"rv32i_m/privilege/src/misalign-beq-01.S",
20202017
"rv32i_m/privilege/src/misalign-bge-01.S",
@@ -3587,6 +3584,7 @@ string wally32priv[] = '{
35873584
"rv32i_m/privilege/src/WALLY-endianness-01.S",
35883585
"rv32i_m/privilege/src/WALLY-satp-invalid-01.S",
35893586
// These peripherals are here instead of wally32periph because they don't work on rv32imc, which lacks a PMP register to configure
3587+
"rv32i_m/privilege/src/WALLY-periph-s-01.S",
35903588
"rv32i_m/privilege/src/WALLY-gpio-01.S",
35913589
"rv32i_m/privilege/src/WALLY-clint-01.S",
35923590
"rv32i_m/privilege/src/WALLY-uart-01.S",

0 commit comments

Comments
 (0)