cpu: Replace fixed sized arrays in the O3 inst with variable arrays.
authorGabe Black <gabe.black@gmail.com>
Mon, 7 Dec 2020 12:41:45 +0000 (04:41 -0800)
committerGabe Black <gabe.black@gmail.com>
Fri, 5 Feb 2021 03:04:56 +0000 (03:04 +0000)
commit344ea0330a9efa0c2d9656ee4dedf4ec2fcda2cb
treec09fd6186824a7f5b01f562840f8cf5d5cf5b5b7
parent57dd228cad84f90cd81f0f55954563c25cdcda49
cpu: Replace fixed sized arrays in the O3 inst with variable arrays.

The only way to allocate fixed sized arrays which will definitely be big
enough for all source/destination registers for a given instruction is
to track the maximum number of each at compile time, and then size the
arrays appropriately. That creates a point of centralization which
prevents breaking up decoder and instruction definitions into more
modular pieces, and if multiple ISAs are ever built at once, would
require coordination between all ISAs, and wasting memory for most of
them.

The dynamic allocation overhead is minimized by allocating the storage
for all variable arrays in one chunk, and then placing the arrays there
using placement new. There is still some overhead, although less than it
might be otherwise.

Change-Id: Id2c42869cba944deb97da01ca9e0e70186e22532
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/38384
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/cpu/base_dyn_inst.hh
src/cpu/base_dyn_inst_impl.hh
src/cpu/o3/commit_impl.hh
src/cpu/o3/dyn_inst.hh
src/cpu/o3/dyn_inst_impl.hh
src/cpu/o3/iew_impl.hh
src/cpu/o3/inst_queue_impl.hh
src/cpu/o3/probe/elastic_trace.cc
src/cpu/o3/rename_impl.hh