arch, cpu: Factor out the ExecContext into a proper base class
authorAndreas Sandberg <Andreas.Sandberg@ARM.com>
Wed, 3 Sep 2014 11:42:22 +0000 (07:42 -0400)
committerAndreas Sandberg <Andreas.Sandberg@ARM.com>
Wed, 3 Sep 2014 11:42:22 +0000 (07:42 -0400)
commit326662b01b0fbb7fe4e38cec7a96222d2891808b
tree35bbca1174a6262d3f69dcf729682e1183f8dede
parente1ac9629398027186ef4c2a66772aeff2b4c6792
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%.
23 files changed:
SConstruct
src/arch/SConscript
src/arch/arm/isa/includes.isa
src/arch/isa_parser.py
src/cpu/SConscript
src/cpu/base_dyn_inst.hh
src/cpu/checker/SConsopts
src/cpu/checker/cpu.hh
src/cpu/exec_context.cc [new file with mode: 0644]
src/cpu/exec_context.hh
src/cpu/inorder/SConsopts
src/cpu/inorder/inorder_dyn_inst.cc
src/cpu/inorder/inorder_dyn_inst.hh
src/cpu/minor/SConsopts
src/cpu/minor/exec_context.hh
src/cpu/nocpu/SConsopts
src/cpu/o3/SConsopts
src/cpu/o3/dyn_inst.hh
src/cpu/ozone/SConsopts
src/cpu/simple/SConsopts
src/cpu/simple/base.hh
src/cpu/simple_thread.cc
src/cpu/static_inst.hh