diff options
author | Andreas Sandberg <Andreas.Sandberg@ARM.com> | 2014-09-03 07:42:22 -0400 |
---|---|---|
committer | Andreas Sandberg <Andreas.Sandberg@ARM.com> | 2014-09-03 07:42:22 -0400 |
commit | 326662b01b0fbb7fe4e38cec7a96222d2891808b (patch) | |
tree | 35bbca1174a6262d3f69dcf729682e1183f8dede /SConstruct | |
parent | e1ac9629398027186ef4c2a66772aeff2b4c6792 (diff) | |
download | gem5-326662b01b0fbb7fe4e38cec7a96222d2891808b.tar.xz |
arch, cpu: Factor out the ExecContext into a proper base class
We currently generate and compile one version of the ISA code per CPU
model. This is obviously wasting a lot of resources at compile
time. This changeset factors out the interface into a separate
ExecContext class, which also serves as documentation for the
interface between CPUs and the ISA code. While doing so, this
changeset also fixes up interface inconsistencies between the
different CPU models.
The main argument for using one set of ISA code per CPU model has
always been performance as this avoid indirect branches in the
generated code. However, this argument does not hold water. Booting
Linux on a simulated ARM system running in atomic mode
(opt/10.linux-boot/realview-simple-atomic) is actually 2% faster
(compiled using clang 3.4) after applying this patch. Additionally,
compilation time is decreased by 35%.
Diffstat (limited to 'SConstruct')
-rwxr-xr-x | SConstruct | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/SConstruct b/SConstruct index 6250bdd2f..9a64840fc 100755 --- a/SConstruct +++ b/SConstruct @@ -1025,17 +1025,10 @@ class CpuModel(object): # Dict of available CPU model objects. Accessible as CpuModel.dict. dict = {} - list = [] - defaults = [] # Constructor. Automatically adds models to CpuModel.dict. - def __init__(self, name, filename, includes, strings, default=False): + def __init__(self, name, default=False): self.name = name # name of model - self.filename = filename # filename for output exec code - self.includes = includes # include files needed in exec file - # The 'strings' dict holds all the per-CPU symbols we can - # substitute into templates etc. - self.strings = strings # This cpu is enabled by default self.default = default @@ -1044,7 +1037,6 @@ class CpuModel(object): if name in CpuModel.dict: raise AttributeError, "CpuModel '%s' already registered" % name CpuModel.dict[name] = self - CpuModel.list.append(name) Export('CpuModel') @@ -1086,7 +1078,7 @@ sticky_vars.AddVariables( EnumVariable('TARGET_ISA', 'Target ISA', 'alpha', all_isa_list), ListVariable('CPU_MODELS', 'CPU models', sorted(n for n,m in CpuModel.dict.iteritems() if m.default), - sorted(CpuModel.list)), + sorted(CpuModel.dict.keys())), BoolVariable('EFENCE', 'Link with Electric Fence malloc debugger', False), BoolVariable('SS_COMPATIBLE_FP', |