Skip to content

Commit 567e687

Browse files
authored
Merge pull request #1583 from rbuchner-aril/rbuchner/designated-initializers
Upgrade Spike to compile with c++2a and use designated initializers
2 parents 8d239ff + a39c238 commit 567e687

File tree

3 files changed

+17
-29
lines changed

3 files changed

+17
-29
lines changed

Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ VPATH := $(addprefix $(src_dir)/, $(sprojs_enabled))
9494
# highest.
9595

9696
default-CFLAGS := -DPREFIX=\"$(prefix)\" -Wall -Wno-unused -Wno-nonportable-include-path -g -O2 -fPIC
97-
default-CXXFLAGS := $(default-CFLAGS) -std=c++17
97+
default-CXXFLAGS := $(default-CFLAGS) -std=c++2a
9898

9999
mcppbs-CPPFLAGS := @CPPFLAGS@
100100
mcppbs-CFLAGS := $(default-CFLAGS) @CFLAGS@

riscv/mmu.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ reg_t mmu_t::translate(mem_access_info_t access_info, reg_t len)
7070

7171
tlb_entry_t mmu_t::fetch_slow_path(reg_t vaddr)
7272
{
73-
auto access_info = generate_access_info(vaddr, FETCH, {false, false, false});
73+
auto access_info = generate_access_info(vaddr, FETCH, {});
7474
check_triggers(triggers::OPERATION_EXECUTE, vaddr, access_info.effective_virt);
7575

7676
tlb_entry_t result;

riscv/mmu.h

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ struct tlb_entry_t {
3939
};
4040

4141
struct xlate_flags_t {
42-
const bool forced_virt : 1;
43-
const bool hlvx : 1;
44-
const bool lr : 1;
42+
const bool forced_virt : 1 {false};
43+
const bool hlvx : 1 {false};
44+
const bool lr : 1 {false};
4545

4646
bool is_special_access() const {
4747
return forced_virt || hlvx || lr;
@@ -72,7 +72,7 @@ class mmu_t
7272

7373
mem_access_info_t generate_access_info(reg_t addr, access_type type, xlate_flags_t xlate_flags) {
7474
if (!proc)
75-
return {addr, 0, false, {false, false, false}, type};
75+
return {addr, 0, false, {}, type};
7676
bool virt = proc->state.v;
7777
reg_t mode = proc->state.prv;
7878
if (type != FETCH) {
@@ -94,7 +94,7 @@ class mmu_t
9494
~mmu_t();
9595

9696
template<typename T>
97-
T ALWAYS_INLINE load(reg_t addr, xlate_flags_t xlate_flags = {false, false, false}) {
97+
T ALWAYS_INLINE load(reg_t addr, xlate_flags_t xlate_flags = {}) {
9898
target_endian<T> res;
9999
reg_t vpn = addr >> PGSHIFT;
100100
bool aligned = (addr & (sizeof(T) - 1)) == 0;
@@ -114,30 +114,21 @@ class mmu_t
114114

115115
template<typename T>
116116
T load_reserved(reg_t addr) {
117-
bool forced_virt = false;
118-
bool hlvx = false;
119-
bool lr = true;
120-
return load<T>(addr, {forced_virt, hlvx, lr});
117+
return load<T>(addr, {.lr = true});
121118
}
122119

123120
template<typename T>
124121
T guest_load(reg_t addr) {
125-
bool forced_virt = true;
126-
bool hlvx = false;
127-
bool lr = false;
128-
return load<T>(addr, {forced_virt, hlvx, lr});
122+
return load<T>(addr, {.forced_virt = true});
129123
}
130124

131125
template<typename T>
132126
T guest_load_x(reg_t addr) {
133-
bool forced_virt = true;
134-
bool hlvx = true;
135-
bool lr = false;
136-
return load<T>(addr, {forced_virt, hlvx, lr});
127+
return load<T>(addr, {.forced_virt=true, .hlvx=true});
137128
}
138129

139130
template<typename T>
140-
void ALWAYS_INLINE store(reg_t addr, T val, xlate_flags_t xlate_flags = {false, false, false}) {
131+
void ALWAYS_INLINE store(reg_t addr, T val, xlate_flags_t xlate_flags = {}) {
141132
reg_t vpn = addr >> PGSHIFT;
142133
bool aligned = (addr & (sizeof(T) - 1)) == 0;
143134
bool tlb_hit = tlb_store_tag[vpn % TLB_ENTRIES] == vpn;
@@ -155,10 +146,7 @@ class mmu_t
155146

156147
template<typename T>
157148
void guest_store(reg_t addr, T val) {
158-
bool forced_virt = true;
159-
bool hlvx = false;
160-
bool lr = false;
161-
store(addr, val, {forced_virt, hlvx, lr});
149+
store(addr, val, {.forced_virt=true});
162150
}
163151

164152
// AMO/Zicbom faults should be reported as store faults
@@ -180,7 +168,7 @@ class mmu_t
180168
template<typename T, typename op>
181169
T amo(reg_t addr, op f) {
182170
convert_load_traps_to_store_traps({
183-
store_slow_path(addr, sizeof(T), nullptr, {false, false, false}, false, true);
171+
store_slow_path(addr, sizeof(T), nullptr, {}, false, true);
184172
auto lhs = load<T>(addr);
185173
store<T>(addr, f(lhs));
186174
return lhs;
@@ -190,7 +178,7 @@ class mmu_t
190178
template<typename T>
191179
T amo_compare_and_swap(reg_t addr, T comp, T swap) {
192180
convert_load_traps_to_store_traps({
193-
store_slow_path(addr, sizeof(T), nullptr, {false, false, false}, false, true);
181+
store_slow_path(addr, sizeof(T), nullptr, {}, false, true);
194182
auto lhs = load<T>(addr);
195183
if (lhs == comp)
196184
store<T>(addr, swap);
@@ -230,7 +218,7 @@ class mmu_t
230218
for (size_t offset = 0; offset < blocksz; offset += 1)
231219
check_triggers(triggers::OPERATION_STORE, base + offset, false, addr, std::nullopt);
232220
convert_load_traps_to_store_traps({
233-
const reg_t paddr = translate(generate_access_info(addr, LOAD, {false, false, false}), 1);
221+
const reg_t paddr = translate(generate_access_info(addr, LOAD, {}), 1);
234222
if (sim->reservable(paddr)) {
235223
if (tracer.interested_in_range(paddr, paddr + PGSIZE, LOAD))
236224
tracer.clean_invalidate(paddr, blocksz, clean, inval);
@@ -249,10 +237,10 @@ class mmu_t
249237
{
250238
if (vaddr & (size-1)) {
251239
// Raise either access fault or misaligned exception
252-
store_slow_path(vaddr, size, nullptr, {false, false, false}, false, true);
240+
store_slow_path(vaddr, size, nullptr, {}, false, true);
253241
}
254242

255-
reg_t paddr = translate(generate_access_info(vaddr, STORE, {false, false, false}), 1);
243+
reg_t paddr = translate(generate_access_info(vaddr, STORE, {}), 1);
256244
if (sim->reservable(paddr))
257245
return load_reservation_address == paddr;
258246
else

0 commit comments

Comments
 (0)