[gem5-dev] Change in gem5/gem5[master]: we add PRFM PST instruction for arm
kodamayu has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/13675 Change subject: we add PRFM PST instruction for arm .. we add PRFM PST instruction for arm Change-Id: I9144e7233900aa2d555e1c1a6a2c2e41d837aa13 --- M src/arch/arm/insts/mem64.cc M src/arch/arm/insts/static_inst.cc M src/arch/arm/isa/insts/ldr64.isa M src/mem/cache/base.cc M src/mem/packet.cc M src/mem/packet.hh M src/mem/request.hh 7 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/arch/arm/insts/mem64.cc b/src/arch/arm/insts/mem64.cc index fa8fdf0..660e56e 100644 --- a/src/arch/arm/insts/mem64.cc +++ b/src/arch/arm/insts/mem64.cc @@ -64,7 +64,11 @@ Memory64::startDisassembly(std::ostream ) const { printMnemonic(os, "", false); -printIntReg(os, dest); +if (isDataPrefetch()||isInstPrefetch()){ +printPFflags(os, dest); +}else{ +printIntReg(os, dest); +} ccprintf(os, ", ["); printIntReg(os, base); } diff --git a/src/arch/arm/insts/static_inst.cc b/src/arch/arm/insts/static_inst.cc index bd6f115..f245cd4 100644 --- a/src/arch/arm/insts/static_inst.cc +++ b/src/arch/arm/insts/static_inst.cc @@ -324,6 +324,16 @@ } } +void ArmStaticInst::printPFflags(std::ostream , int flag) const +{ +const char *flagtoprfop[]= { "PLD", "PLI", "PST", "Reserved"}; +const char *flagtotarget[] = { "L1", "L2", "L3", "Reserved"}; +const char *flagtopolicy[] = { "KEEP", "STRM"}; + +ccprintf(os, "%s%s%s", flagtoprfop[(flag>>3)&3], + flagtotarget[(flag>>1)&3], flagtopolicy[flag&1]); +} + void ArmStaticInst::printFloatReg(std::ostream , RegIndex reg_idx) const { diff --git a/src/arch/arm/isa/insts/ldr64.isa b/src/arch/arm/isa/insts/ldr64.isa index 7c17726..54e50d7 100644 --- a/src/arch/arm/isa/insts/ldr64.isa +++ b/src/arch/arm/isa/insts/ldr64.isa @@ -74,6 +74,10 @@ elif self.flavor == "iprefetch": self.memFlags.append("Request::PREFETCH") self.instFlags = ['IsInstPrefetch'] +elif self.flavor == "mprefetch": +self.memFlags.append("dest>>3)&3)==2)? \ + (Request::PF_EXCLUSIVE):(Request::PREFETCH))") +self.instFlags = ['IsDataPrefetch'] if self.micro: self.instFlags.append("IsMicroop") @@ -176,7 +180,7 @@ self.buildEACode() # Code that actually handles the access -if self.flavor in ("dprefetch", "iprefetch"): +if self.flavor in ("dprefetch", "iprefetch", "mprefetch"): accCode = 'uint64_t temp M5_VAR_USED = Mem%s;' elif self.flavor == "fp": if self.size in (1, 2, 4): @@ -365,10 +369,11 @@ buildLoads64("ldr", "LDRSFP64", 4, False, flavor="fp") buildLoads64("ldr", "LDRDFP64", 8, False, flavor="fp") -LoadImm64("prfm", "PRFM64_IMM", 8, flavor="dprefetch").emit() -LoadReg64("prfm", "PRFM64_REG", 8, flavor="dprefetch").emit() -LoadLit64("prfm", "PRFM64_LIT", 8, literal=True, flavor="dprefetch").emit() -LoadImm64("prfum", "PRFUM64_IMM", 8, flavor="dprefetch").emit() +LoadImm64("prfm", "PRFM64_IMM", 8, flavor="mprefetch").emit() +LoadReg64("prfm", "PRFM64_REG", 8, flavor="mprefetch").emit() +LoadLit64("prfm", "PRFM64_LIT", 8, literal=True, + flavor="mprefetch").emit() +LoadImm64("prfum", "PRFUM64_IMM", 8, flavor="mprefetch").emit() LoadImm64("ldurb", "LDURB64_IMM", 1, False).emit() LoadImm64("ldursb", "LDURSBW64_IMM", 1, True).emit() diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index 183d93f..b9641d9 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -1654,7 +1654,7 @@ // should writebacks be included here? prior code was inconsistent... #define SUM_NON_DEMAND(s) \ -(s[MemCmd::SoftPFReq] + s[MemCmd::HardPFReq]) +(s[MemCmd::SoftPFReq] + s[MemCmd::HardPFReq] + s[MemCmd::SoftPFExReq]) demandHits .name(name() + ".demand_hits") diff --git a/src/mem/packet.cc b/src/mem/packet.cc index 866bc90..4369e16 100644 --- a/src/mem/packet.cc +++ b/src/mem/packet.cc @@ -105,6 +105,9 @@ /* SoftPFReq */ { SET4(IsRead, IsRequest, IsSWPrefetch, NeedsResponse), SoftPFResp, "SoftPFReq" }, +/* SoftPFExReq */ +{ SET6(IsRead, NeedsWritable, IsInvalidate, IsRequest, + IsSWPrefetch, NeedsResponse), SoftPFResp, "SoftPFExReq" }, /* HardPFReq */ { SET5(IsRead, IsRequest, IsHWPrefetch, NeedsResponse, FromCache), HardPFResp, "HardPFReq" }, diff --git a/src/mem/packet.hh b/src/mem/packet.hh index f0b7c2f..c59db36 100644 --- a/src/mem/packet.hh +++ b/src/mem/packet.hh @@ -94,6 +94,7 @@ WriteClean,// writes dirty data below without evicting CleanEvict, SoftPFReq, +SoftPFExReq, HardPFReq, SoftPFResp,
[gem5-dev] Change in gem5/gem5[master]: python: Add utility function to override config parameters
Ciro Santilli has submitted this change and it was merged. ( https://gem5-review.googlesource.com/c/public/gem5/+/12984 ) Change subject: python: Add utility function to override config parameters .. python: Add utility function to override config parameters Add a utility method, SimObject.apply_config that can be used to implement SimObject param overrides from the command line. This function provides safe and convenient semantics for CLI assignment: * The override expression is evaluated in a restricted environment. The only global variables are the child objects and params from the root object. * Only params can be overridden. For example, calling methods or setting attributes on SimObjects isn't possible. * Vectors use non-standard list semantics which enable something similar to glob expansion on the shell. For example, setting: root.system.cpu[0:2].numThreads = 2 will override numThreads for cpu 0 and 1 and: root.system.cpus[0,2].numThreads = 2 sets it for cpus 0 and 2. The intention is that the helper method is called to override default values before calling m5.instantiate. Change-Id: I73f99da21d6d8ce1ff2ec8db2bb34338456f6799 Reviewed-on: https://gem5-review.googlesource.com/c/12984 Reviewed-by: Jason Lowe-Power Reviewed-by: Andreas Sandberg Maintainer: Jason Lowe-Power --- M src/python/m5/SimObject.py 1 file changed, 82 insertions(+), 1 deletion(-) Approvals: Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved Andreas Sandberg: Looks good to me, approved diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py index 0a5436f..44f26ea 100644 --- a/src/python/m5/SimObject.py +++ b/src/python/m5/SimObject.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 ARM Limited +# Copyright (c) 2017-2018 ARM Limited # All rights reserved. # # The license below extends only to copyright in the software and shall @@ -934,6 +934,63 @@ if not "created" in self.__dict__: self.__dict__[name] = value +class SimObjectCliWrapperException(Exception): +def __init__(self, message): +super(Exception, self).__init__(message) + +class SimObjectCliWrapper(object): +""" +Wrapper class to restrict operations that may be done +from the command line on SimObjects. + +Only parameters may be set, and only children may be accessed. + +Slicing allows for multiple simultaneous assignment of items in +one statement. +""" + +def __init__(self, sim_objects): +self.__dict__['_sim_objects'] = list(sim_objects) + +def __getattr__(self, key): +return SimObjectCliWrapper(sim_object._children[key] +for sim_object in self._sim_objects) + +def __setattr__(self, key, val): +for sim_object in self._sim_objects: +if key in sim_object._params: +if sim_object._params[key].isCmdLineSettable(): +setattr(sim_object, key, val) +else: +raise SimObjectCliWrapperException( +'tried to set or unsettable' \ +'object parameter: ' + key) +else: +raise SimObjectCliWrapperException( +'tried to set or access non-existent' \ +'object parameter: ' + key) + +def __getitem__(self, idx): +""" +Extends the list() semantics to also allow tuples, +for example object[1, 3] selects items 1 and 3. +""" +out = [] +if isinstance(idx, tuple): +for t in idx: +out.extend(self[t]._sim_objects) +else: +if isinstance(idx, int): +_range = range(idx, idx + 1) +elif not isinstance(idx, slice): +raise SimObjectCliWrapperException( \ +'invalid index type: ' + repr(idx)) +for sim_object in self._sim_objects: +if isinstance(idx, slice): +_range = range(*idx.indices(len(sim_object))) +out.extend(sim_object[i] for i in _range) +return SimObjectCliWrapper(out) + # The SimObject class is the root of the special hierarchy. Most of # the code in this class deals with the configuration hierarchy itself # (parent/child node relationships). @@ -1525,6 +1582,30 @@ for dt in item.generateDeviceTree(state): yield dt +# On a separate method otherwise certain buggy Python versions +# would fail with: SyntaxError: unqualified exec is not allowed +# in function 'apply_config' +def _apply_config_get_dict(self): +return { +child_name: SimObjectCliWrapper( +iter(self._children[child_name])) +for child_name in self._children +} + +def apply_config(self, params): +""" +exec a list
[gem5-dev] Change in gem5/gem5[master]: config: add --param to fs.py, se.py and fs_bigLITTLE.py
Ciro Santilli has submitted this change and it was merged. ( https://gem5-review.googlesource.com/c/public/gem5/+/12985 ) Change subject: config: add --param to fs.py, se.py and fs_bigLITTLE.py .. config: add --param to fs.py, se.py and fs_bigLITTLE.py The option allows to set SimObject params from the CLI. The existing config scripts have a large number of options that simply set a single SimObject parameter, and many still are not exposed. This commit allows users to pass arbitrary parameters from the command line to prevent the need for this kind of trivial option. Change-Id: Ic4bd36948aca4998d2eaf6369c85d3668efa3944 Reviewed-on: https://gem5-review.googlesource.com/c/12985 Reviewed-by: Andreas Sandberg Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- M configs/common/Options.py M configs/common/Simulation.py M configs/example/arm/fs_bigLITTLE.py 3 files changed, 18 insertions(+), 0 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved Andreas Sandberg: Looks good to me, approved diff --git a/configs/common/Options.py b/configs/common/Options.py index aed8881..c36dc38 100644 --- a/configs/common/Options.py +++ b/configs/common/Options.py @@ -125,6 +125,14 @@ parser.add_option("--maxtime", type="float", default=None, help="Run to the specified absolute simulated time in " "seconds") +parser.add_option("-P", "--param", action="append", default=[], +help="Set a SimObject parameter relative to the root node. " + "An extended Python multi range slicing syntax can be used " + "for arrays. For example: " + "'system.cpu[0,1,3:8:2].max_insts_all_threads = 42' " + "sets max_insts_all_threads for cpus 0, 1, 3, 5 and 7 " + "Direct parameters of the root object are not accessible, " + "only parameters of its children.") # Add common options that assume a non-NULL ISA. def addCommonOptions(parser): diff --git a/configs/common/Simulation.py b/configs/common/Simulation.py index f306a03..23a7783 100644 --- a/configs/common/Simulation.py +++ b/configs/common/Simulation.py @@ -597,6 +597,7 @@ checkpoint_dir = None if options.checkpoint_restore: cpt_starttick, checkpoint_dir = findCptDir(options, cptdir, testsys) +root.apply_config(options.param) m5.instantiate(checkpoint_dir) # Initialization is complete. If we're not in control of simulation diff --git a/configs/example/arm/fs_bigLITTLE.py b/configs/example/arm/fs_bigLITTLE.py index 7d66c03..8cf89e3 100644 --- a/configs/example/arm/fs_bigLITTLE.py +++ b/configs/example/arm/fs_bigLITTLE.py @@ -182,6 +182,14 @@ parser.add_argument("--sim-quantum", type=str, default="1ms", help="Simulation quantum for parallel simulation. " \ "Default: %(default)s") +parser.add_argument("-P", "--param", action="append", default=[], +help="Set a SimObject parameter relative to the root node. " + "An extended Python multi range slicing syntax can be used " + "for arrays. For example: " + "'system.cpu[0,1,3:8:2].max_insts_all_threads = 42' " + "sets max_insts_all_threads for cpus 0, 1, 3, 5 and 7 " + "Direct parameters of the root object are not accessible, " + "only parameters of its children.") return parser def build(options): @@ -330,6 +338,7 @@ addOptions(parser) options = parser.parse_args() root = build(options) +root.apply_config(options.param) instantiate(options) run() -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12985 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: Ic4bd36948aca4998d2eaf6369c85d3668efa3944 Gerrit-Change-Number: 12985 Gerrit-PatchSet: 8 Gerrit-Owner: Ciro Santilli Gerrit-Reviewer: Andreas Sandberg Gerrit-Reviewer: Anthony Gutierrez Gerrit-Reviewer: Ciro Santilli Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Jason Lowe-Power Gerrit-CC: Daniel Carvalho Gerrit-MessageType: merged ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: mem-cache: Move evictBlock(CacheBlk*, PacketList&) to base
Daniel Carvalho has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/13656 Change subject: mem-cache: Move evictBlock(CacheBlk*, PacketList&) to base .. mem-cache: Move evictBlock(CacheBlk*, PacketList&) to base Move evictBlock(CacheBlk*, PacketList&) to base cache, as it is both sub-classes implementations are equal. Change-Id: I80fbd16813bfcc4938fb01ed76abe29b3f8b3018 Signed-off-by: Daniel R. Carvalho --- M src/mem/cache/base.cc M src/mem/cache/base.hh M src/mem/cache/cache.cc M src/mem/cache/cache.hh M src/mem/cache/noncoherent_cache.cc M src/mem/cache/noncoherent_cache.hh 6 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc index 0eeb192..e730b3e 100644 --- a/src/mem/cache/base.cc +++ b/src/mem/cache/base.cc @@ -1298,6 +1298,15 @@ blk->invalidate(); } +void +BaseCache::evictBlock(CacheBlk *blk, PacketList ) +{ +PacketPtr pkt = evictBlock(blk); +if (pkt) { +writebacks.push_back(pkt); +} +} + PacketPtr BaseCache::writebackBlk(CacheBlk *blk) { diff --git a/src/mem/cache/base.hh b/src/mem/cache/base.hh index 92748a3..47352c6 100644 --- a/src/mem/cache/base.hh +++ b/src/mem/cache/base.hh @@ -685,7 +685,7 @@ * @param blk Block to invalidate * @param writebacks Return a list of packets with writebacks */ -virtual void evictBlock(CacheBlk *blk, PacketList ) = 0; +void evictBlock(CacheBlk *blk, PacketList ); /** * Invalidate a cache block. diff --git a/src/mem/cache/cache.cc b/src/mem/cache/cache.cc index 116b543..cb8bb0a 100644 --- a/src/mem/cache/cache.cc +++ b/src/mem/cache/cache.cc @@ -177,7 +177,7 @@ // flush and invalidate any existing block CacheBlk *old_blk(tags->findBlock(pkt->getAddr(), pkt->isSecure())); if (old_blk && old_blk->isValid()) { -evictBlock(old_blk, writebacks); +BaseCache::evictBlock(old_blk, writebacks); } blk = nullptr; @@ -851,15 +851,6 @@ return pkt; } -void -Cache::evictBlock(CacheBlk *blk, PacketList ) -{ -PacketPtr pkt = evictBlock(blk); -if (pkt) { -writebacks.push_back(pkt); -} -} - PacketPtr Cache::cleanEvictBlk(CacheBlk *blk) { diff --git a/src/mem/cache/cache.hh b/src/mem/cache/cache.hh index f8eccfe..9d5b907 100644 --- a/src/mem/cache/cache.hh +++ b/src/mem/cache/cache.hh @@ -141,8 +141,6 @@ M5_NODISCARD PacketPtr evictBlock(CacheBlk *blk) override; -void evictBlock(CacheBlk *blk, PacketList ) override; - /** * Create a CleanEvict request for the given block. * diff --git a/src/mem/cache/noncoherent_cache.cc b/src/mem/cache/noncoherent_cache.cc index b4ffed7..ae53bb3 100644 --- a/src/mem/cache/noncoherent_cache.cc +++ b/src/mem/cache/noncoherent_cache.cc @@ -355,15 +355,6 @@ return pkt; } -void -NoncoherentCache::evictBlock(CacheBlk *blk, PacketList ) -{ -PacketPtr pkt = evictBlock(blk); -if (pkt) { -writebacks.push_back(pkt); -} -} - NoncoherentCache* NoncoherentCacheParams::create() { diff --git a/src/mem/cache/noncoherent_cache.hh b/src/mem/cache/noncoherent_cache.hh index 2a60f4c..0c28255 100644 --- a/src/mem/cache/noncoherent_cache.hh +++ b/src/mem/cache/noncoherent_cache.hh @@ -124,8 +124,6 @@ M5_NODISCARD PacketPtr evictBlock(CacheBlk *blk) override; -void evictBlock(CacheBlk *blk, PacketList ) override; - public: NoncoherentCache(const NoncoherentCacheParams *p); }; -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13656 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I80fbd16813bfcc4938fb01ed76abe29b3f8b3018 Gerrit-Change-Number: 13656 Gerrit-PatchSet: 1 Gerrit-Owner: Daniel Carvalho Gerrit-MessageType: newchange ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: arch-arm: Add support for first-/non-faulting loads
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13523 ) Change subject: arch-arm: Add support for first-/non-faulting loads .. arch-arm: Add support for first-/non-faulting loads In addition to the ISA-level changes, this changeset includes all the necessary modifications to the various CPU models to properly handle the new faulting behaviours. Change-Id: I3c9e66bfee6a642570cf46980ba7e3a96a17b599 Signed-off-by: Gabor Dozsa --- M src/arch/arm/faults.cc M src/arch/arm/faults.hh M src/arch/arm/insts/sve_macromem.hh M src/arch/arm/isa/formats/sve_2nd_level.isa M src/arch/arm/isa/insts/sve_mem.isa M src/arch/arm/isa/operands.isa M src/arch/arm/isa/templates/sve_mem.isa M src/arch/arm/registers.hh M src/cpu/base_dyn_inst.hh M src/cpu/checker/cpu.cc M src/cpu/checker/cpu.hh M src/cpu/exec_context.hh M src/cpu/minor/dyn_inst.cc M src/cpu/minor/dyn_inst.hh M src/cpu/minor/exec_context.hh M src/cpu/minor/execute.cc M src/cpu/minor/lsq.cc M src/cpu/minor/lsq.hh M src/cpu/o3/lsq.hh M src/cpu/o3/lsq_impl.hh M src/cpu/o3/lsq_unit_impl.hh M src/cpu/simple/atomic.cc M src/cpu/simple/atomic.hh M src/cpu/simple/base.hh M src/cpu/simple/exec_context.hh M src/cpu/simple/timing.cc M src/cpu/simple/timing.hh M src/cpu/utils.hh M src/mem/abstract_mem.cc M src/mem/packet.hh M src/mem/request.hh M src/sim/faults.cc M src/sim/faults.hh 33 files changed, 1,115 insertions(+), 507 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13523 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I3c9e66bfee6a642570cf46980ba7e3a96a17b599 Gerrit-Change-Number: 13523 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Gabor Dozsa Gerrit-Reviewer: Giacomo Travaglini Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: cpu-o3: Increase LSQ buffer sizes to match max vector length
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13525 ) Change subject: cpu-o3: Increase LSQ buffer sizes to match max vector length .. cpu-o3: Increase LSQ buffer sizes to match max vector length Change-Id: I5890c7cfa147125ce3389001f85d56d4b5a9911d Signed-off-by: Gabor Dozsa --- M src/cpu/o3/lsq_unit.hh 1 file changed, 8 insertions(+), 5 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13525 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I5890c7cfa147125ce3389001f85d56d4b5a9911d Gerrit-Change-Number: 13525 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Gabor Dozsa Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Jason Lowe-Power Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: arch-arm: Add support for SVE load/store structures
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13524 ) Change subject: arch-arm: Add support for SVE load/store structures .. arch-arm: Add support for SVE load/store structures Change-Id: I4d9cde18dfc3d478eacc156de6a4a9721eb9e2ff Signed-off-by: Giacomo Gabrielli --- M src/arch/arm/insts/sve_macromem.hh M src/arch/arm/isa/formats/sve_2nd_level.isa M src/arch/arm/isa/insts/sve_mem.isa M src/arch/arm/isa/operands.isa M src/arch/arm/isa/templates/sve_mem.isa M src/arch/arm/registers.hh 6 files changed, 1,304 insertions(+), 1 deletion(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13524 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I4d9cde18dfc3d478eacc156de6a4a9721eb9e2ff Gerrit-Change-Number: 13524 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Javier Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: cpu-o3: Add cache read ports limit to LSQ
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13517 ) Change subject: cpu-o3: Add cache read ports limit to LSQ .. cpu-o3: Add cache read ports limit to LSQ This change introduces cache read ports to limit the number of per-cycle loads. Previously only the number of per-cycle stores could be limited. Change-Id: I39bbd984056c5a696725ee2db462a55b2079e2d4 Signed-off-by: Gabor Dozsa Reviewed-by: Giacomo Gabrielli --- M src/cpu/o3/O3CPU.py M src/cpu/o3/lsq.hh M src/cpu/o3/lsq_impl.hh M src/cpu/o3/lsq_unit_impl.hh 4 files changed, 50 insertions(+), 19 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13517 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I39bbd984056c5a696725ee2db462a55b2079e2d4 Gerrit-Change-Number: 13517 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Gabor Dozsa Gerrit-Reviewer: Giacomo Travaglini Gerrit-CC: Jason Lowe-Power Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: arch-arm: Add initial support for SVE contiguous loads/stores
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13519 ) Change subject: arch-arm: Add initial support for SVE contiguous loads/stores .. arch-arm: Add initial support for SVE contiguous loads/stores Thanks to Pau Cabre and Adria Armejach Sanosa for their contribution of bugfixes. Change-Id: If8983cf85d95cddb187c90967a94ddfe2414bc46 Signed-off-by: Giacomo Gabrielli --- M src/arch/arm/SConscript A src/arch/arm/insts/sve_mem.cc A src/arch/arm/insts/sve_mem.hh M src/arch/arm/isa/formats/sve_2nd_level.isa M src/arch/arm/isa/includes.isa M src/arch/arm/isa/insts/insts.isa A src/arch/arm/isa/insts/sve_mem.isa M src/arch/arm/isa/templates/sve.isa A src/arch/arm/isa/templates/sve_mem.isa M src/arch/arm/isa/templates/templates.isa 10 files changed, 1,429 insertions(+), 1 deletion(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13519 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: If8983cf85d95cddb187c90967a94ddfe2414bc46 Gerrit-Change-Number: 13519 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: cpu-o3: O3 LSQ Generalisation
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13516 ) Change subject: cpu-o3: O3 LSQ Generalisation .. cpu-o3: O3 LSQ Generalisation This patch does a large modification of the LSQ in the O3 model. The main goal of the patch is to remove the 'an operation can be served with one or two memory requests' assumption that is present in the LSQ and the instruction with the req, reqLow, reqHigh triplet, and generalising it to operations that can be addressed with one request, and operations that require many requests, embodied in the SingleDataRequest and the SplitDataRequest. This modification has been done mimicking the minor model to an extent, shifting the responsibilities of dealing with VtoP translation and tracking the status and resources from the DynInst to the LSQ via the LSQRequest. The LSQRequest models the information concerning the operation, handles the creation of fragments for translation and request as well as assembling/splitting the data accordingly. With this modifications, the implementation of vector ISAs, particularly on the memory side, become more rich, as the new model permits a dissociation of the ISA characteristics as vector length, from the microarchitectural characteristics that govern how contiguous loads are executing, allowing exploration of different LSQ to DL1 bus widths to understand the tradeoffs in complexity and performance. Part of the complexities introduced stem from the fact that gem5 keeps a large amount of metadata regarding, in particular, memory operations, thus, when an instruction is squashed while some operation as TLB lookup or cache access is ongoing, when the relevant structure communicates to the LSQ that the operation is over, it tries to access some pieces of data that should have died when the instruction is squashed, leading to asserts, panics, or memory corruption. To ensure the correct behaviour, the LSQRequest rely on assesing who is their owner, and self-destroying if they detect their owner is done with the request, and there will be no subsequent action. For example, in the case of an instruction squashed whal the TLB is doing a walk to serve the translation, when the translation is served by the TLB, the LSQRequest detects that the instruction was squashed, and as the translation is done, no one else expect to access its information, and therefore, it self-destructs. Having destroyed the LSQRequest earlier, would lead to wrong behaviour as the TLB walk may access some fields of it. Additional authors: - Gabor Dozsa Change-Id: I9578a1a3f6b899c390cdd886856a24db68ff7d0c Signed-off-by: Giacomo Gabrielli --- M src/base/refcnt.hh M src/cpu/base_dyn_inst.hh M src/cpu/base_dyn_inst_impl.hh M src/cpu/o3/cpu.hh M src/cpu/o3/iew_impl.hh M src/cpu/o3/inst_queue_impl.hh M src/cpu/o3/lsq.hh M src/cpu/o3/lsq_impl.hh M src/cpu/o3/lsq_unit.hh M src/cpu/o3/lsq_unit_impl.hh M src/cpu/o3/probe/elastic_trace.cc 11 files changed, 1,887 insertions(+), 1,273 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13516 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I9578a1a3f6b899c390cdd886856a24db68ff7d0c Gerrit-Change-Number: 13516 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: base: Iterable CircularQueue implementation
Giacomo Travaglini has uploaded a new patch set (#10) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13127 ) Change subject: base: Iterable CircularQueue implementation .. base: Iterable CircularQueue implementation The former implementation of CircleBuf is functional but a bit too tailored to match a use-case. This patches introduces a new iterable circular queue, which adds some more functionality so it can also be used for the newer LSQ implementation, where iteration and iterators are a very desirable feature. Additional contributors: Gabor Dozsa. Change-Id: I5cfb95c8abc1f5e566a114acdbf23fc52a38ce5e Signed-off-by: Giacomo Gabrielli --- A src/base/circular_queue.hh 1 file changed, 629 insertions(+), 0 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13127 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I5cfb95c8abc1f5e566a114acdbf23fc52a38ce5e Gerrit-Change-Number: 13127 Gerrit-PatchSet: 10 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Jason Lowe-Power Gerrit-CC: Andreas Sandberg Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: arch-arm: Add initial support for SVE gather/scatter loads/stores
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13521 ) Change subject: arch-arm: Add initial support for SVE gather/scatter loads/stores .. arch-arm: Add initial support for SVE gather/scatter loads/stores In addition to the code for implementing decoding and execution of these instructions, a couple of additional features have been implemented: 1. a mechanism to skip the memory access part of a load/store operation - used by gather loads for implementing zeroing predication; 2. the Arm decoder was augmented in a previous changeset to keep track of the active SVE vector length - this feature is now used by gather/scatter operations to determine the right number of microops to be generated. Change-Id: I891623015b47a39f61ed616f8896f32a7134c8e2 Signed-off-by: Giacomo Gabrielli --- M src/arch/arm/decoder.hh A src/arch/arm/insts/sve_macromem.hh M src/arch/arm/isa/formats/sve_2nd_level.isa M src/arch/arm/isa/includes.isa M src/arch/arm/isa/insts/sve_mem.isa M src/arch/arm/isa/operands.isa M src/arch/arm/isa/templates/sve_mem.isa M src/arch/arm/registers.hh M src/arch/isa_parser.py M src/cpu/base_dyn_inst.hh M src/cpu/base_dyn_inst_impl.hh M src/cpu/checker/cpu.hh M src/cpu/exec_context.hh M src/cpu/minor/exec_context.hh M src/cpu/o3/lsq_unit_impl.hh M src/cpu/simple/exec_context.hh M src/cpu/simple_thread.hh M src/cpu/thread_context.hh 18 files changed, 1,491 insertions(+), 107 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13521 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I891623015b47a39f61ed616f8896f32a7134c8e2 Gerrit-Change-Number: 13521 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: arch-arm: Add initial support for the Scalable Vector Extension
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13515 ) Change subject: arch-arm: Add initial support for the Scalable Vector Extension .. arch-arm: Add initial support for the Scalable Vector Extension This changeset adds initial support for the Arm Scalable Vector Extension (SVE) by implementing: - support for most data-processing instructions (no loads/stores yet); - an additional predicate register file; - basic system-level support. Additional authors: - Javier Setoain - Gabor Dozsa - Giacomo Travaglini Thanks to Pau Cabre for his contribution of bugfixes. Change-Id: I1808b5ff55b401777eeb9b99c9a1129e0d527709 Signed-off-by: Giacomo Gabrielli --- M configs/common/FSConfig.py M configs/common/Options.py M configs/example/arm/fs_bigLITTLE.py M configs/example/fs.py M configs/example/se.py M src/arch/SConscript M src/arch/alpha/isa.hh M src/arch/alpha/registers.hh M src/arch/arm/ArmISA.py M src/arch/arm/ArmSystem.py M src/arch/arm/SConscript M src/arch/arm/decoder.cc M src/arch/arm/decoder.hh M src/arch/arm/insts/static_inst.cc M src/arch/arm/insts/static_inst.hh A src/arch/arm/insts/sve.cc A src/arch/arm/insts/sve.hh M src/arch/arm/isa.cc M src/arch/arm/isa.hh M src/arch/arm/isa/formats/aarch64.isa M src/arch/arm/isa/formats/formats.isa A src/arch/arm/isa/formats/sve_2nd_level.isa A src/arch/arm/isa/formats/sve_top_level.isa M src/arch/arm/isa/includes.isa M src/arch/arm/isa/insts/fp64.isa M src/arch/arm/isa/insts/insts.isa M src/arch/arm/isa/insts/ldr64.isa M src/arch/arm/isa/insts/mem.isa M src/arch/arm/isa/insts/neon64.isa M src/arch/arm/isa/insts/neon64_mem.isa A src/arch/arm/isa/insts/sve.isa M src/arch/arm/isa/operands.isa A src/arch/arm/isa/templates/sve.isa M src/arch/arm/isa/templates/templates.isa M src/arch/arm/miscregs.cc M src/arch/arm/miscregs.hh M src/arch/arm/miscregs_types.hh M src/arch/arm/nativetrace.cc M src/arch/arm/process.cc M src/arch/arm/registers.hh M src/arch/arm/system.cc M src/arch/arm/system.hh M src/arch/arm/types.hh M src/arch/arm/utility.cc M src/arch/arm/utility.hh A src/arch/generic/pred_reg.hh M src/arch/generic/vec_reg.hh M src/arch/isa_parser.py M src/arch/mips/isa.hh M src/arch/mips/registers.hh M src/arch/null/registers.hh M src/arch/power/isa.hh M src/arch/power/registers.hh M src/arch/riscv/isa.hh M src/arch/riscv/registers.hh M src/arch/sparc/isa.hh M src/arch/sparc/registers.hh M src/arch/x86/isa.hh M src/arch/x86/registers.hh M src/cpu/FuncUnit.py M src/cpu/base_dyn_inst.hh M src/cpu/checker/cpu.hh M src/cpu/checker/thread_context.hh M src/cpu/exec_context.hh M src/cpu/exetrace.cc M src/cpu/inst_res.hh M src/cpu/minor/MinorCPU.py M src/cpu/minor/exec_context.hh M src/cpu/minor/scoreboard.cc M src/cpu/minor/scoreboard.hh M src/cpu/o3/FUPool.py M src/cpu/o3/FuncUnitConfig.py M src/cpu/o3/O3CPU.py M src/cpu/o3/comm.hh M src/cpu/o3/cpu.cc M src/cpu/o3/cpu.hh M src/cpu/o3/dyn_inst.hh M src/cpu/o3/free_list.hh M src/cpu/o3/inst_queue_impl.hh M src/cpu/o3/regfile.cc M src/cpu/o3/regfile.hh M src/cpu/o3/rename.hh M src/cpu/o3/rename_impl.hh M src/cpu/o3/rename_map.cc M src/cpu/o3/rename_map.hh M src/cpu/o3/thread_context.hh M src/cpu/o3/thread_context_impl.hh M src/cpu/op_class.hh M src/cpu/reg_class.cc M src/cpu/reg_class.hh M src/cpu/simple/exec_context.hh M src/cpu/simple_thread.cc M src/cpu/simple_thread.hh M src/cpu/static_inst.hh M src/cpu/thread_context.cc M src/cpu/thread_context.hh M src/sim/insttracer.hh M src/sim/serialize.cc 98 files changed, 12,528 insertions(+), 129 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13515 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I1808b5ff55b401777eeb9b99c9a1129e0d527709 Gerrit-Change-Number: 13515 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: mem: Add support for partial stores and wide memory accesses
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13518 ) Change subject: mem: Add support for partial stores and wide memory accesses .. mem: Add support for partial stores and wide memory accesses This changeset adds support for partial (or masked) stores, i.e. stores that can disable writes to individual bytes within the target address range. In addition, this changeset extends the code to crack memory accesses across most CPU models (TimingSimpleCPU still TBD), so that arbitrarily wide memory accesses are supported. These changes are required for supporting ISAs with wide vectors. Change-Id: Ibad33541c258ad72925c0b1d5abc3e5e8bf92d92 Signed-off-by: Giacomo Gabrielli --- M src/cpu/base_dyn_inst.hh M src/cpu/checker/cpu.cc M src/cpu/checker/cpu.hh M src/cpu/exec_context.hh M src/cpu/minor/exec_context.hh M src/cpu/minor/lsq.cc M src/cpu/minor/lsq.hh M src/cpu/o3/cpu.hh M src/cpu/o3/lsq.hh M src/cpu/o3/lsq_impl.hh M src/cpu/simple/atomic.cc M src/cpu/simple/atomic.hh M src/cpu/simple/base.hh M src/cpu/simple/exec_context.hh M src/cpu/simple/timing.cc M src/cpu/simple/timing.hh A src/cpu/utils.hh M src/mem/abstract_mem.cc M src/mem/cache/cache.cc M src/mem/packet.hh M src/mem/request.hh 21 files changed, 409 insertions(+), 170 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13518 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: Ibad33541c258ad72925c0b1d5abc3e5e8bf92d92 Gerrit-Change-Number: 13518 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-CC: Daniel Carvalho Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: arch-arm: Treat SVE prefetch instructions as no-ops
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13522 ) Change subject: arch-arm: Treat SVE prefetch instructions as no-ops .. arch-arm: Treat SVE prefetch instructions as no-ops Change-Id: Ife0424e274dd65d6dc4f6e5cc5e37d17b03be0d8 Signed-off-by: Giacomo Gabrielli --- M src/arch/arm/isa/formats/sve_2nd_level.isa 1 file changed, 10 insertions(+), 6 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13522 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: Ife0424e274dd65d6dc4f6e5cc5e37d17b03be0d8 Gerrit-Change-Number: 13522 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: cpu-o3: Add support for pinned writes
Giacomo Travaglini has uploaded a new patch set (#4) to the change originally created by Giacomo Gabrielli. ( https://gem5-review.googlesource.com/c/public/gem5/+/13520 ) Change subject: cpu-o3: Add support for pinned writes .. cpu-o3: Add support for pinned writes This patch adds support for pinning registers for a certain number of consecutive writes. This is only relevant for timing CPU models (functional-only models are unaffected), and it is primarily needed to provide a realistic execution model for micro-coded operations whose microops can write to non-overlapping portions of a destination register, e.g. vector gather loads. In those cases, this mechanism can disable renaming for a sequence of consecutive writes, thus making the resulting execution more efficient: allocating a new physical register for each microop would introduce a read-modify-write chain of dependencies, while with these modifications the microops can write back in parallel. Please note that this new feature is only leveraged by O3CPU for the time being. Change-Id: I07eb5fdbd1fa0b748c9bdc1174d9f330fda34f81 Signed-off-by: Giacomo Gabrielli --- M src/cpu/o3/comm.hh M src/cpu/o3/free_list.hh M src/cpu/o3/iew_impl.hh M src/cpu/o3/inst_queue_impl.hh M src/cpu/o3/regfile.cc M src/cpu/o3/regfile.hh M src/cpu/o3/rename_impl.hh M src/cpu/o3/rename_map.cc M src/cpu/reg_class.hh 9 files changed, 92 insertions(+), 41 deletions(-) -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13520 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I07eb5fdbd1fa0b748c9bdc1174d9f330fda34f81 Gerrit-Change-Number: 13520 Gerrit-PatchSet: 4 Gerrit-Owner: Giacomo Gabrielli Gerrit-Reviewer: Giacomo Travaglini Gerrit-CC: Jason Lowe-Power Gerrit-MessageType: newpatchset ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: Remove circular
Giacomo Travaglini has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/13655 Change subject: Remove circular .. Remove circular Change-Id: I4c2b0cd1c994bb2e57adbe8678d01e00aaa9662e --- M src/base/circular_queue.hh 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/base/circular_queue.hh b/src/base/circular_queue.hh index f745fe4..9c9d224 100644 --- a/src/base/circular_queue.hh +++ b/src/base/circular_queue.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited + * Copyright (c) 2017-2018 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -624,26 +624,6 @@ } return iterator(this, idx, round); } - -/** Return an iterator to an index in the vector. - * Same as the previous except that in the case in which the queue is full - * and idx == head, in which case the past-the-end iterator is returned. - */ -iterator getBoundaryIterator(size_t idx) { -assert(isValidIdx(idx) || add(_tail, 1) == idx); -if (_head == idx && (_empty || (add(_tail, 1) == _head))) -return end(); - -uint32_t round = _round; -if (idx > _tail) { -if (idx >= _head && _head > _tail && !_empty) { -round -= 1; -} -} else if (idx < _head && _tail + 1 == _size) { -round += 1; -} -return iterator(this, idx, round); -} }; #endif /* __BASE_CIRCULARQUEUE_HH__ */ -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13655 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I4c2b0cd1c994bb2e57adbe8678d01e00aaa9662e Gerrit-Change-Number: 13655 Gerrit-PatchSet: 1 Gerrit-Owner: Giacomo Travaglini Gerrit-MessageType: newchange ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: arm: treat aarch64 hints as NOPs instead of panic
Ciro Santilli has submitted this change and it was merged. ( https://gem5-review.googlesource.com/c/public/gem5/+/13476 ) Change subject: arm: treat aarch64 hints as NOPs instead of panic .. arm: treat aarch64 hints as NOPs instead of panic Change-Id: Ida2a746e6188171bd2e4da92a4efb33fcbaa2b69 Reviewed-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/c/13476 Maintainer: Andreas Sandberg --- M src/arch/arm/isa/formats/aarch64.isa 1 file changed, 2 insertions(+), 1 deletion(-) Approvals: Andreas Sandberg: Looks good to me, approved; Looks good to me, approved diff --git a/src/arch/arm/isa/formats/aarch64.isa b/src/arch/arm/isa/formats/aarch64.isa index cd106ab..26c65ec 100644 --- a/src/arch/arm/isa/formats/aarch64.isa +++ b/src/arch/arm/isa/formats/aarch64.isa @@ -369,7 +369,8 @@ } break; } -return new Unknown64(machInst); +return new WarnUnimplemented( +"unallocated_hint", machInst); } else if (crn == 0x3 && op1 == 0x3) { switch (op2) { case 0x2: -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13476 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: Ida2a746e6188171bd2e4da92a4efb33fcbaa2b69 Gerrit-Change-Number: 13476 Gerrit-PatchSet: 2 Gerrit-Owner: Ciro Santilli Gerrit-Reviewer: Andreas Sandberg Gerrit-Reviewer: Ciro Santilli Gerrit-Reviewer: Giacomo Travaglini Gerrit-MessageType: merged ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: arm: update hint instruction decoding to match ARMv8.5
Ciro Santilli has submitted this change and it was merged. ( https://gem5-review.googlesource.com/c/public/gem5/+/13475 ) Change subject: arm: update hint instruction decoding to match ARMv8.5 .. arm: update hint instruction decoding to match ARMv8.5 This fixes: - unallocated hints that have since been allocated - unallocated and unimplemented hint instructions being treated as Unknown instead of the correct NOP - missing encoding for DBG on A32 Unallocated and unimplemented hints give a warning if executed. The most important fix was for the CSDB Spectre mitigation instruction, which was added recently and previously unallocated and treated as Unknown. The Linux kernel v4.18 ARMv7 uses CSDB it and boot would fail with "undefined instruction" since Linux commit 1d4238c56f9816ce0f9c8dbe42d7f2ad81cb6613 Change-Id: I283da3f08a9af4148edc6fb3ca2930cbb97126b8 Reviewed-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/c/13475 Reviewed-by: Andreas Sandberg Maintainer: Andreas Sandberg --- M src/arch/arm/isa/formats/aarch64.isa M src/arch/arm/isa/formats/branch.isa M src/arch/arm/isa/formats/data.isa 3 files changed, 136 insertions(+), 37 deletions(-) Approvals: Andreas Sandberg: Looks good to me, approved; Looks good to me, approved Giacomo Travaglini: Looks good to me, approved diff --git a/src/arch/arm/isa/formats/aarch64.isa b/src/arch/arm/isa/formats/aarch64.isa index aa38fd4..cd106ab 100644 --- a/src/arch/arm/isa/formats/aarch64.isa +++ b/src/arch/arm/isa/formats/aarch64.isa @@ -292,22 +292,84 @@ if (rt != 0x1f || l) return new Unknown64(machInst); if (crn == 0x2 && op1 == 0x3) { -switch (op2) { +switch (crm) { case 0x0: -return new NopInst(machInst); +switch (op2) { + case 0x0: +return new NopInst(machInst); + case 0x1: +return new YieldInst(machInst); + case 0x2: +return new WfeInst(machInst); + case 0x3: +return new WfiInst(machInst); + case 0x4: +return new SevInst(machInst); + case 0x5: +return new SevlInst(machInst); +} +break; case 0x1: -return new YieldInst(machInst); +switch (op2) { + case 0x0: +return new WarnUnimplemented( +"pacia", machInst); + case 0x2: +return new WarnUnimplemented( +"pacib", machInst); + case 0x4: +return new WarnUnimplemented( +"autia", machInst); + case 0x6: +return new WarnUnimplemented( +"autib", machInst); +} +break; case 0x2: -return new WfeInst(machInst); +switch (op2) { + case 0x0: +return new WarnUnimplemented( +"esb", machInst); + case 0x1: +return new WarnUnimplemented( +"psb csync", machInst); + case 0x2: +return new WarnUnimplemented( +"tsb csync", machInst); + case 0x4: +return new WarnUnimplemented( +"csdb", machInst); +} +break; case 0x3: -return new WfiInst(machInst); +switch (op2) { + case 0x0: + case 0x1: +return new WarnUnimplemented( +"pacia", machInst); + case 0x2: + case 0x3: +return new WarnUnimplemented( +"pacib", machInst); +
[gem5-dev] Change in gem5/gem5[master]: sim: Move BitUnion overloading to show/parseParams
Giacomo Travaglini has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/13636 Change subject: sim: Move BitUnion overloading to show/parseParams .. sim: Move BitUnion overloading to show/parseParams This patch is moving template overloading for BitUnions into the showParam, parseParams functions. Henceforth BitUnion types will use the common param wrapper. This patch implicitly implements (UN)SERIALIZE_CONTAINER for BitUnions. Change-Id: I0e1faadb4afd4dc9de5dc5fca40041e349c9ba73 Signed-off-by: Giacomo Travaglini --- M src/sim/serialize.hh 1 file changed, 23 insertions(+), 55 deletions(-) diff --git a/src/sim/serialize.hh b/src/sim/serialize.hh index adaefdd..5434777 100644 --- a/src/sim/serialize.hh +++ b/src/sim/serialize.hh @@ -285,6 +285,29 @@ os << value; } +template +bool +parseParam(const std::string , BitUnionType ) +{ +auto storage = static_cast>(value); +auto res = to_number(s, storage); +value = storage; +return res; +} + +template +void +showParam(CheckpointOut , const BitUnionType ) +{ +auto storage = static_cast>(value); + +// For a BitUnion8, the storage type is an unsigned char. +// Since we want to serialize a number we need to cast to +// unsigned int +os << ((sizeof(storage) == 1) ? +static_cast(storage) : storage); +} + // Treat 8-bit ints (chars) as ints on output, not as chars template <> inline void @@ -354,13 +377,6 @@ os << "\n"; } -template -void -paramOut(CheckpointOut , const std::string , const BitUnionType ) -{ -paramOut(cp, name, static_cast >(p)); -} - template void paramIn(CheckpointIn , const std::string , T ) @@ -372,15 +388,6 @@ } } -template -void -paramIn(CheckpointIn , const std::string , BitUnionType ) -{ -BitUnionBaseType b; -paramIn(cp, name, b); -p = b; -} - template bool optParamIn(CheckpointIn , const std::string , @@ -397,20 +404,6 @@ } } -template -bool -optParamIn(CheckpointIn , const std::string , - BitUnionType , bool warn = true) -{ -BitUnionBaseType b; -if (optParamIn(cp, name, b, warn)) { -p = b; -return true; -} else { -return false; -} -} - template void arrayParamOut(CheckpointOut , const std::string , @@ -628,31 +621,6 @@ } } -template -static void -arrayParamOut(CheckpointOut , const std::string , - const BitUnionType *param, unsigned size) -{ -// We copy the array into a vector. This is needed since we cannot -// directly typecast a pointer to BitUnionType into a pointer -// of BitUnionBaseType but we can typecast BitUnionType -// to BitUnionBaseType since we overloaded the typecast operator -std::vector> bitunion_vec(param, param + size); - -arrayParamOut(cp, name, bitunion_vec); -} - -template -static void -arrayParamIn(CheckpointIn , const std::string , - BitUnionType *param, unsigned size) -{ -std::vector> bitunion_vec(size); - -arrayParamIn(cp, name, bitunion_vec); -std::copy(bitunion_vec.begin(), bitunion_vec.end(), param); -} - void debug_serialize(const std::string _dir); -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13636 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: master Gerrit-Change-Id: I0e1faadb4afd4dc9de5dc5fca40041e349c9ba73 Gerrit-Change-Number: 13636 Gerrit-PatchSet: 1 Gerrit-Owner: Giacomo Travaglini Gerrit-MessageType: newchange ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Change in gem5/gem5[master]: sim: Move paramIn/Out definition to header file
Giacomo Travaglini has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/13635 Change subject: sim: Move paramIn/Out definition to header file .. sim: Move paramIn/Out definition to header file This patch is moving the definitions of paramIn/Out templates to the header file. In this way we gain: 1) We don't have to do explicit instantiation anymore for user defined types. This spares us from including data type header files into serialize.cc 2) We can overload show/parseParam for BitUnions or any other type that requires special handling when serializing. Just by overloading the two templates we get all the containers' (list, vector, array..) serialization for free 2) gtest: With the idea of adding unit tests for Serializable objects, we can avoid importing serialize.cc and just redefine Serializable methods in the test source, implementing a Serializable stub Change-Id: I45a9bb87d5ef886a3668fd477005cd105f612e36 Signed-off-by: Giacomo Travaglini --- M src/sim/serialize.cc M src/sim/serialize.hh 2 files changed, 481 insertions(+), 592 deletions(-) diff --git a/src/sim/serialize.cc b/src/sim/serialize.cc index a03a396..095a44c 100644 --- a/src/sim/serialize.cc +++ b/src/sim/serialize.cc @@ -57,12 +57,8 @@ #include #include -#include "arch/generic/vec_reg.hh" -#include "base/framebuffer.hh" #include "base/inifile.hh" -#include "base/logging.hh" #include "base/output.hh" -#include "base/str.hh" #include "base/trace.hh" #include "debug/Checkpoint.hh" #include "sim/eventq.hh" @@ -75,412 +71,11 @@ using namespace std; -// -// The base implementations use to_number for parsing and '<<' for -// displaying, suitable for integer types. -// -template -bool -parseParam(const string , T ) -{ -return to_number(s, value); -} - -template -void -showParam(CheckpointOut , const T ) -{ -os << value; -} - -// -// Template specializations: -// - char (8-bit integer) -// - floating-point types -// - bool -// - string -// - -// Treat 8-bit ints (chars) as ints on output, not as chars -template <> -void -showParam(CheckpointOut , const char ) -{ -os << (int)value; -} - - -template <> -void -showParam(CheckpointOut , const signed char ) -{ -os << (int)value; -} - - -template <> -void -showParam(CheckpointOut , const unsigned char ) -{ -os << (unsigned int)value; -} - - -template <> -bool -parseParam(const string , float ) -{ -return to_number(s, value); -} - -template <> -bool -parseParam(const string , double ) -{ -return to_number(s, value); -} - -template <> -bool -parseParam(const string , bool ) -{ -return to_bool(s, value); -} - -// Display bools as strings -template <> -void -showParam(CheckpointOut , const bool ) -{ -os << (value ? "true" : "false"); -} - - -// String requires no processing to speak of -template <> -bool -parseParam(const string , string ) -{ -value = s; -return true; -} - int Serializable::ckptMaxCount = 0; int Serializable::ckptCount = 0; int Serializable::ckptPrevCount = -1; std::stack Serializable::path; -template -void -paramOut(CheckpointOut , const string , const T ) -{ -os << name << "="; -showParam(os, param); -os << "\n"; -} - -template -void -arrayParamOut(CheckpointOut , const string , const vector ) -{ -typename vector::size_type size = param.size(); -os << name << "="; -if (size > 0) -showParam(os, param[0]); -for (typename vector::size_type i = 1; i < size; ++i) { -os << " "; -showParam(os, param[i]); -} -os << "\n"; -} - -template -void -arrayParamOut(CheckpointOut , const string , const list ) -{ -typename list::const_iterator it = param.begin(); - -os << name << "="; -if (param.size() > 0) -showParam(os, *it); -it++; -while (it != param.end()) { -os << " "; -showParam(os, *it); -it++; -} -os << "\n"; -} - -template -void -arrayParamOut(CheckpointOut , const string , const set ) -{ -typename set::const_iterator it = param.begin(); - -os << name << "="; -if (param.size() > 0) -showParam(os, *it); -it++; -while (it != param.end()) { -os << " "; -showParam(os, *it); -it++; -} -os << "\n"; -} - -template -void -paramIn(CheckpointIn , const string , T ) -{ -const string (Serializable::currentSection()); -string str; -if (!cp.find(section, name, str) || !parseParam(str, param)) { -fatal("Can't unserialize '%s:%s'\n", section, name); -} -} - -template -bool -optParamIn(CheckpointIn , const string , T , bool warn) -{ -const string (Serializable::currentSection()); -string str; -if (!cp.find(section, name, str) || !parseParam(str, param)) { -if (warn) -warn("optional parameter %s:%s not present\n", section, name); -return false; -} else { -return true; -
[gem5-dev] Cron /z/m5/regression/do-regression quick
* build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/minor-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-timing-ruby: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/o3-timing: FAILED! * build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-atomic: FAILED! * build/ALPHA/tests/opt/quick/se/03.learning-gem5/alpha/linux/learning-gem5-p1-two-level: CHANGED! * build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-timing: CHANGED! * build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-atomic: CHANGED! * build/ALPHA/tests/opt/quick/se/03.learning-gem5/alpha/linux/learning-gem5-p1-simple: CHANGED! * build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/minor-timing: CHANGED! * build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-timing-ruby: CHANGED! * build/ALPHA/tests/opt/quick/se/01.hello-2T-smt/alpha/linux/o3-timing-mt: CHANGED! * build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/o3-timing: CHANGED! * build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-atomic: CHANGED! * build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-atomic-dual: CHANGED! * build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-timing: CHANGED! * build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-timing-dual: CHANGED! * build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-timing: CHANGED! * build/MIPS/tests/opt/quick/se/03.learning-gem5/mips/linux/learning-gem5-p1-two-level: CHANGED! * build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-atomic: CHANGED! * build/MIPS/tests/opt/quick/se/03.learning-gem5/mips/linux/learning-gem5-p1-simple: CHANGED! * build/MIPS/tests/opt/quick/se/00.hello/mips/linux/o3-timing: CHANGED! * build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-timing-ruby: CHANGED! * build/NULL/tests/opt/quick/se/80.dram-openpage/null/none/dram-lowp: CHANGED! * build/NULL/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby: CHANGED! * build/NULL/tests/opt/quick/se/80.dram-closepage/null/none/dram-lowp: CHANGED! * build/NULL/tests/opt/quick/se/70.tgen/null/none/tgen-simple-mem: CHANGED! * build/NULL/tests/opt/quick/se/70.tgen/null/none/tgen-dram-ctrl: CHANGED! * build/ALPHA/tests/opt/quick/fs/80.netperf-stream/alpha/linux/twosys-tsunami-simple-atomic: CHANGED! * build/NULL_MOESI_hammer/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_hammer: CHANGED! * build/NULL_MESI_Two_Level/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MESI_Two_Level: CHANGED! * build/NULL_MOESI_CMP_directory/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_CMP_directory: CHANGED! * build/NULL_MOESI_CMP_token/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_CMP_token: CHANGED! * build/POWER/tests/opt/quick/se/00.hello/power/linux/simple-atomic: CHANGED! * build/POWER/tests/opt/quick/se/00.hello/power/linux/o3-timing: CHANGED! * build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-atomic: CHANGED! * build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/o3-timing: CHANGED! * build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/simple-atomic-mp: CHANGED! * build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-timing-ruby: CHANGED! * build/SPARC/tests/opt/quick/se/03.learning-gem5/sparc/linux/learning-gem5-p1-two-level: CHANGED! * build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-timing: CHANGED! * build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/simple-timing-mp: CHANGED! * build/SPARC/tests/opt/quick/se/03.learning-gem5/sparc/linux/learning-gem5-p1-simple: CHANGED! * build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/o3-timing-mp: CHANGED! * build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/simple-atomic: CHANGED! * build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/simple-timing: CHANGED! * build/SPARC/tests/opt/quick/se/50.vortex/sparc/linux/simple-atomic: CHANGED! * build/SPARC/tests/opt/quick/se/70.twolf/sparc/linux/simple-atomic: CHANGED! * build/SPARC/tests/opt/quick/se/10.mcf/sparc/linux/simple-atomic: CHANGED! * build/SPARC/tests/opt/quick/se/50.vortex/sparc/linux/simple-timing: CHANGED! * build/SPARC/tests/opt/quick/se/70.twolf/sparc/linux/simple-timing: CHANGED! * build/X86/tests/opt/quick/se/03.learning-gem5/x86/linux/learning-gem5-p1-simple: CHANGED!* build/X86/tests/opt/quick/se/00.hello/x86/linux/simple-timing: CHANGED! * build/X86/tests/opt/quick/se/00.hello/x86/linux/o3-timing: