14157:0f836da31d9c |
05-Jul-2019 |
Jordi Vaquero <jordi.vaquero@metempsy.com> |
arch-arm: Added LD/ST<op> atomic instruction family and SWP instrs
Adding LD/ST/SWP family of instructions, LD/ST include a set of operations like ADD/CLR/EOR/SET/UMAX/UMIN/SMAX/SMIN This commit includes: + Instruction decode + Instruction functional code + New set of skeletons for Ex/Com/Ini/Constructor and declaration.
Change-Id: Ieea8d4256807e004d2f8aca8f421b3df8d76b116 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19812 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> |
14150:1391e94a7b95 |
05-Jul-2019 |
Jordi Vaquero <jordi.vaquero@metempsy.com> |
arch-arm: Adding CAS/CASP AMO instr including new TypedAtomic func
CAS/CASP atomic instruction implementation This change includes: + Instructions decode + new amo64.isa file where CAS/CASP main functional code is implemented + mem64.isa include Execute/complete/initiatie skeletons, contructor and declarator + Added TypedAtomic function for pair register CASP instruction
Change-Id: I4a4acdec4ab1c8b888f10ef5dc1e896be8c432bf Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19811 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> |
14127:65faf17eea53 |
30-Jul-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Rewrite MSR immediate instruction class
MSR <pstatefield>, #imm is used for setting a PSTATE field using an immediate. Current implementation has the following flaws:
* There is no base MSR immediate definition: all the existing PSTATE fields have a different class definition * Those implementation make use of a generic data64 base class which results in a wrong disassembly (pstate register is printed as an integer register).
This patch is fixing this by defining a new base class (MiscRegImmOp64) and new related templates. In this way, we aim to ease addition of new PSTATE fields (in ARMv8.x)
Change-Id: I71b630ff32abe1b105bbb3ab5781c6589b67d419 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19728 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14109:7d2f3bed8ea3 |
18-Dec-2018 |
Gabor Dozsa <gabor.dozsa@arm.com> |
arch-arm: Fix tracing code for SVE gather
Printing the entire contents of the dest vecreg for each gather microop is suboptimal as it creates false positive differences between Atomic and O3 traces. This fix prints only the memory data which a microop loads from memory.
Change-Id: Idd8e0b26a96f9c9cc0b69360174bedf6a9f6dcb5 Signed-off-by: Gabor Dozsa <gabor.dozsa@arm.com> Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19171 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14106:293e3f4b1321 |
04-Apr-2018 |
Javier Setoain <javier.setoain@arm.com> |
arch-arm: Add support for SVE load/store structures
Change-Id: I4d9cde18dfc3d478eacc156de6a4a9721eb9e2ff Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/13524 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
14091:090449e74135 |
11-Jun-2019 |
Gabor Dozsa <gabor.dozsa@arm.com> |
arch-arm: Add first-/non-faulting load instructions
First-/non-faulting loads are part of Arm SVE.
Change-Id: I93dfd6d1d74791653927e99098ddb651150a8ef7 Signed-off-by: Gabor Dozsa <gabor.dozsa@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19177 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14058:a17b827fbf5e |
11-Jun-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Move the memacc_code before op_wb in fp loads
This is trying to fix the bug that arises when a memory exception is generated during a fp flavoured load (A memory load targeting a SIMD & FP register). With the previous template a fault was not stopping the register value to be modified (wrong)
if (fault == NoFault) { fault = readMemAtomic(xc, traceData, EA, Mem, memAccessFlags); %(memacc_code)s; }
if (fault == NoFault) { %(op_wb)s; }
The patch introduces a Load64FpExecute template which is moving the register write (memacc_code) just before the op_wb
Change-Id: I1c89c525dfa7a4ef489abe0872cd7baacdd6ce3c Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19228 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14028:44edf7dbe672 |
23-Oct-2018 |
Giacomo Gabrielli <giacomo.gabrielli@arm.com> |
arch-arm: Add initial support for SVE gather/scatter loads/stores
Change-Id: I891623015b47a39f61ed616f8896f32a7134c8e2 Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/13521 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13955:e0f46be83fc7 |
08-Nov-2017 |
Giacomo Gabrielli <giacomo.gabrielli@arm.com> |
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 <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/13519 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> |
13759:9941fca869a9 |
16-Oct-2018 |
Giacomo Gabrielli <giacomo.gabrielli@arm.com> |
arch-arm,cpu: Add initial support for Arm SVE
This changeset adds initial support for the Arm Scalable Vector Extension (SVE) by implementing: - support for most data-processing instructions (no loads/stores yet); - basic system-level support.
Additional authors: - Javier Setoain <javier.setoain@arm.com> - Gabor Dozsa <gabor.dozsa@arm.com> - Giacomo Travaglini <giacomo.travaglini@arm.com>
Thanks to Pau Cabre for his contribution of bugfixes.
Change-Id: I1808b5ff55b401777eeb9b99c9a1129e0d527709 Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/13515 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13544:0b4e5446167c |
13-Oct-2018 |
Gabe Black <gabeblack@google.com> |
arm: Stop using the FloatReg and FloatRegBits types.
This will let us make those types 64 bits to be in line with the other architectures.
Change-Id: I5aef5199f4d2d5bb1558afedac5c6c92bf95c021 Reviewed-on: https://gem5-review.googlesource.com/c/13621 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> |
13168:4965381c122d |
11-Apr-2018 |
Matt Horsnell <matt.horsnell@arm.com> |
arch-arm: AArch32 Crypto SHA
This patch implements the AArch32 secure hashing instructions from the Crypto extension.
Change-Id: Iaba8424ab71800228a9aff039d93f5c35ee7d8e5 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/13247 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12616:4b463b4dc098 |
23-Mar-2018 |
Gabe Black <gabeblack@google.com> |
arch: Fix all override related warnings.
Clang has started(?) reporting override related warnings, something gcc apparently did before, but was disabled in the SConstruct. Rather than disable the warnings in for clang as well, this change fixes the warnings. A future change will re-enable the warnings for gcc.
Change-Id: I3cc79e45749b2ae0f9bebb1acadc56a3d3a942da Reviewed-on: https://gem5-review.googlesource.com/9343 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Gabe Black <gabeblack@google.com> |
12540:93f0a9a0ea71 |
15-Feb-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Adding isa templates for semihosting ops
A new class of Semihosting constructor templates has been added. Their main purpose is to check if the Exception Generation Instructions (HLT, SVC) are actually a semihosting command. If that is the case, the IsMemBarrier flag is raised, so that in the O3 model we perform a coherent memory access during the semihosting operation.
Change-Id: Ib87fdeb70ee7a930659563230a80cce0e1372c32 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8370 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12538:001ad6b1e592 |
14-Feb-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Fix Hlt64,Svc64,Hvc64,Smc64,Brk64 disassembly
This patch fixes the disassembly of AArch64 Exception Generating instructions, which were not printing the encoded immediate field. This has been accomplished by changing their underlying type to a newly defined one.
Change-Id: If58ae3e620d2baa260e12ecdc850225adfcf1ee5 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8368 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12503:47b60911f9ba |
19-Dec-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arch-arm: Fix cache line size for cache maintenace inst
Cache maintenance operations operate on whole cache blocks. This changeset uses the system cache line size as the size of the cache maintenance requests and masks the lower bits of the effective address.
Change-Id: I6e7aefff51670c8cac39e4e73db21a0c5a0b7aef Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7824 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12359:8fb4630c444f |
12-Jan-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arm: Add support for the dc {civac, cvac, cvau, ivac} instr
This patch adds support for decoding and executing the following ARMv8 cache maintenance instructions by Virtual Address: * dc civac: Clean and Invalidate by Virtual Address to the Point of Coherency * dc cvac: Clean by Virtual Address to the Point of Coherency * dc cvau: Clean by Virtual Address to the Point of Unification * dc ivac: Invalidate by Virtual Addrsess to the Point of Coherency
Change-Id: I58cabda37f9636105fda1b1e84a0a04965fb5670 Reviewed-by: Sudhanshu Jha <sudhanshu.jha@arm.com> Reviewed-by: Stephan Diestelhorst <stephan.diestelhorst@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5060 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> |
12358:386d26feb00f |
07-Feb-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arm: Add support for the mcr dc{ic,i,c}mvac, dccmvau instructions
This patch adds support for the ARMv7 cache maintenance intructions: * mcr dccmvac cleans a VA to the PoC * mcr dcimvac invalidates a VA to the PoC * mcr dccimvac cleans and invalidates a VA to the PoC * mcr dccmvau cleans a VA to the PoU
Change-Id: I6511f203039ca145cc9128ddf61d09d6d7e40c10 Reviewed-by: Stephan Diestelhorst <stephan.diestelhorst@arm.com> Reviewed-by: Anouk Van Laer <anouk.vanlaer@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5059 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
12280:a44a2326a02b |
10-Nov-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Fix MSR/MRS disassemble
This patch is fixing the Aarch64 MSR/MRS disassemble, which was previously printing unexisting integer registers as source/destination operands rather than the system register name
Change-Id: Iac9d5f2f2fea85abd9a398320ef7aa4844d43c0e Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5861 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12236:126ac9da6050 |
04-Nov-2017 |
Gabe Black <gabeblack@google.com> |
alpha,arm,mips,power,riscv,sparc,x86: Merge exec decl templates.
In the ISA instruction definitions, some classes were declared with execute, etc., functions outside of the main template because they had CPU specific signatures and would need to be duplicated with each CPU plugged into them. Now that the instructions always just use an ExecContext, there's no reason for those templates to be separate. This change folds those templates together.
Change-Id: I13bda247d3d1cc07c0ea06968e48aa5b4aace7fa Reviewed-on: https://gem5-review.googlesource.com/5401 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Alec Roelke <ar4jc@virginia.edu> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12234:78ece221f9f5 |
02-Nov-2017 |
Gabe Black <gabeblack@google.com> |
alpha,arm,mips,power,riscv,sparc,x86,isa: De-specialize ExecContexts.
The ISA parser used to generate different copies of exec functions for each exec context class a particular CPU wanted to use. That's since been changed so that those functions take a pointer to the base ExecContext, so the code which would generate those extra functions can be removed, and some functions which used to be templated on an ExecContext subclass can be untemplated, or minimally less templated.
Now that some functions aren't going to be instantiated multiple times with different signatures, there are also opportunities to collapse templates and make many instruction definitions simpler within the parser. Since those changes will be less mechanical, they're left for later changes and will probably be done in smaller increments.
Change-Id: I0015307bb02dfb9c60380b56d2a820f12169ebea Reviewed-on: https://gem5-review.googlesource.com/5381 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12110:c24ee249b8ba |
05-Apr-2017 |
Rekai Gonzalez-Alberquilla <Rekai.GonzalezAlberquilla@arm.com> |
arch: ISA parser additions of vector registers
Reiley's update :) of the isa parser definitions. My addition of the vector element operand concept for the ISA parser. Nathanael's modification creating a hierarchy between vector registers and its constituencies to the isa parser.
Some fixes/updates on top to consider instructions as vectors instead of floating when they use the VectorRF. Some counters added to all the models to keep faithful counts.
Change-Id: Id8f162a525240dfd7ba884c5a4d9fa69f4050101 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2706 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
11671:520509f3e66c |
13-Oct-2016 |
Mitch Hayenga <mitch.hayenga@arm.com> |
isa,arm: Add missing AArch32 FP instructions
This commit adds missing non-predicated, scalar floating point instructions. Specifically VRINT* floating point integer rounding instructions and VSEL* floating point conditional selects.
Change-Id: I23cbd1389f151389ac8beb28a7d18d5f93d000e7 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Nathanael Premillieu <nathanael.premillieu@arm.com> |
11513:cb3a401c45d7 |
02-Jun-2016 |
Andreas Sandberg <andreas.sandberg@arm.com> |
arm: Correctly check FP/SIMD access permission in aarch32
The current implementation of aarch32 FP/SIMD in gem5 assumes that EL1 and higher are all 32-bit. This breaks interprocessing since an aarch64 EL1 uses different enable/disable bits. This change updates the permission checks to according to what is prescribed by the ARM ARM.
Change-Id: Icdcef31b00644cfeebec00216b3993aa1de12b88 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Mitch Hayenga <mitch.hayenga@arm.com> Reviewed-by: Nathanael Premillieu <nathanael.premillieu@arm.com> |
11488:4dab8202f32d |
26-May-2016 |
Andreas Hansson <andreas.hansson@arm.com> |
arm: Fix heap overflow issue in Neon64Load operation
This patch fixes an issue identified by ASAN where the Neon64Load operation assumes the packet always contains 16 bytes.
Change-Id: If24a7e461d60cb80970dfbe61d923d7d56926698 Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> |
11303:f694764d656d |
17-Jan-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
cpu. arch: add initiateMemRead() to ExecContext interface
For historical reasons, the ExecContext interface had a single function, readMem(), that did two different things depending on whether the ExecContext supported atomic memory mode (i.e., AtomicSimpleCPU) or timing memory mode (all the other models). In the former case, it actually performed a memory read; in the latter case, it merely initiated a read access, and the read completion did not happen until later when a response packet arrived from the memory system.
This led to some confusing things, including timing accesses being required to provide a pointer for the return data even though that pointer was only used in atomic mode.
This patch splits this interface, adding a new initiateMemRead() function to the ExecContext interface to replace the timing-mode use of readMem().
For consistency and clarity, the readMemTiming() helper function in the ISA definitions is renamed to initiateMemRead() as well. For x86, where the access size is passed in explicitly, we can also get rid of the data parameter at this level. For other ISAs, where the access size is determined from the type of the data parameter, we have to keep the parameter for that purpose. |
10716:4408a83f7881 |
02-Mar-2015 |
Giacomo Gabrielli <Giacomo.Gabrielli@arm.com> |
arm: Remove unnecessary dependencies between AArch64 FP instructions |
10666:3c42be107634 |
25-Jan-2015 |
Ali Saidi <Ali.Saidi@ARM.com> |
arm: always set the IsFirstMicroop flag
While the IsFirstMicroop flag exists it was only occasionally used in the ARM instructions that gem5 microOps and therefore couldn't be relied on to be correct. |
10474:799c8ee4ecba |
16-Oct-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arch: Use shared_ptr for all Faults
This patch takes quite a large step in transitioning from the ad-hoc RefCountingPtr to the c++11 shared_ptr by adopting its use for all Faults. There are no changes in behaviour, and the code modifications are mostly just replacing "new" with "make_shared". |
10420:cc13df09fa55 |
01-Oct-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arm: More UBSan cleanups after additional full-system runs
Some incorrect casting to IntRegIndex, and a few uninitialized members in the i8254xGBe device. |
10418:7a76e13f0101 |
27-Sep-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arm: Fixed undefined behaviours identified by gcc
This patch fixes the runtime errors highlighted by the undefined behaviour sanitizer. In the end there were two issues. First, when rotating an immediate, we ended up shifting an uint32_t by 32 in some cases. This case is fixed by checking for a rotation by 0 positions. Second, the Mrc15 and Mcr15 are operating on an IntReg and a MiscReg, but we used the type RegRegImmOp and passed a MiscRegIndex as an IntRegIndex. This issue is resolved by introducing a MiscRegRegImmOp and RegMiscRegImmOp with the appropriate types.
With these fixes there are no runtime errors identified for the full ARM regressions. |
10346:d96b61d843b2 |
03-Sep-2014 |
Mitch Hayenga <mitch.hayenga@arm.com> |
arm: Make memory ops work on 64bit/128-bit quantities
Multiple instructions assume only 32-bit load operations are available, this patch increases load sizes to 64-bit or 128-bit for many load pair and load multiple instructions. |
10334:5e424aa952c5 |
03-Sep-2014 |
Mitch Hayenga <mitch.hayenga@arm.com> |
arm: Mark v7 cbz instructions as direct branches
v7 cbz/cbnz instructions were improperly marked as indirect branches. |
10205:3ca67d0e0e7e |
17-Apr-2014 |
Ali Saidi <Ali.Saidi@ARM.com> |
arm: Make sure UndefinedInstructions are properly initialized |
10199:6cf40d777682 |
09-May-2014 |
Andrew Bardsley <Andrew.Bardsley@arm.com> |
arm: Add branch flags onto macroops
Mark branch flags onto macroops to allow branch prediction before microop decomposition |
10196:be0e1724eb39 |
09-May-2014 |
Curtis Dunham <Curtis.Dunham@arm.com> |
arch: teach ISA parser how to split code across files
This patch encompasses several interrelated and interdependent changes to the ISA generation step. The end goal is to reduce the size of the generated compilation units for instruction execution and decoding so that batch compilation can proceed with all CPUs active without exhausting physical memory.
The ISA parser (src/arch/isa_parser.py) has been improved so that it can accept 'split [output_type];' directives at the top level of the grammar and 'split(output_type)' python calls within 'exec {{ ... }}' blocks. This has the effect of "splitting" the files into smaller compilation units. I use air-quotes around "splitting" because the files themselves are not split, but preprocessing directives are inserted to have the same effect.
Architecturally, the ISA parser has had some changes in how it works. In general, it emits code sooner. It doesn't generate per-CPU files, and instead defers to the C preprocessor to create the duplicate copies for each CPU type. Likewise there are more files emitted and the C preprocessor does more substitution that used to be done by the ISA parser.
Finally, the build system (SCons) needs to be able to cope with a dynamic list of source files coming out of the ISA parser. The changes to the SCons{cript,truct} files support this. In broad strokes, the targets requested on the command line are hidden from SCons until all the build dependencies are determined, otherwise it would try, realize it can't reach the goal, and terminate in failure. Since build steps (i.e. running the ISA parser) must be taken to determine the file list, several new build stages have been inserted at the very start of the build. First, the build dependencies from the ISA parser will be emitted to arch/$ISA/generated/inc.d, which is then read by a new SCons builder to finalize the dependencies. (Once inc.d exists, the ISA parser will not need to be run to complete this step.) Once the dependencies are known, the 'Environments' are made by the makeEnv() function. This function used to be called before the build began but now happens during the build. It is easy to see that this step is quite slow; this is a known issue and it's important to realize that it was already slow, but there was no obvious cause to attribute it to since nothing was displayed to the terminal. Since new steps that used to be performed serially are now in a potentially-parallel build phase, the pathname handling in the SCons scripts has been tightened up to deal with chdir() race conditions. In general, pathnames are computed earlier and more likely to be stored, passed around, and processed as absolute paths rather than relative paths. In the end, some of these issues had to be fixed by inserting serializing dependencies in the build.
Minor note: For the null ISA, we just provide a dummy inc.d so SCons is never compelled to try to generate it. While it seems slightly wrong to have anything in src/arch/*/generated (i.e. a non-generated 'generated' file), it's by far the simplest solution. |
10184:bbfa3152bdea |
09-May-2014 |
Curtis Dunham <Curtis.Dunham@arm.com> |
arch: remove inline specifiers on all inst constrs, all ISAs
With (upcoming) separate compilation, they are useless. Only link-time optimization could re-inline them, but ideally feedback-directed optimization would choose to do so only for profitable (i.e. common) instructions. |
10183:badc31a41a87 |
09-May-2014 |
Curtis Dunham <Curtis.Dunham@arm.com> |
arm: cleanup ARM ISA definition |
10037:5cac77888310 |
24-Jan-2014 |
ARM gem5 Developers |
arm: Add support for ARMv8 (AArch64 & AArch32)
Note: AArch64 and AArch32 interworking is not supported. If you use an AArch64 kernel you are restricted to AArch64 user-mode binaries. This will be addressed in a later patch.
Note: Virtualization is only supported in AArch32 mode. This will also be fixed in a later patch.
Contributors: Giacomo Gabrielli (TrustZone, LPAE, system-level AArch64, AArch64 NEON, validation) Thomas Grocutt (AArch32 Virtualization, AArch64 FP, validation) Mbou Eyole (AArch64 NEON, validation) Ali Saidi (AArch64 Linux support, code integration, validation) Edmund Grimley-Evans (AArch64 FP) William Wang (AArch64 Linux support) Rene De Jong (AArch64 Linux support, performance opt.) Matt Horsnell (AArch64 MP, validation) Matt Evans (device models, code integration, validation) Chris Adeniyi-Jones (AArch64 syscall-emulation) Prakash Ramrakhyani (validation) Dam Sunwoo (validation) Chander Sudanthi (validation) Stephan Diestelhorst (validation) Andreas Hansson (code integration, performance opt.) Eric Van Hensbergen (performance opt.) Gabe Black |
9573:cac6e95e236c |
04-Mar-2013 |
Ali Saidi <saidi@eecs.umich.edu> |
ARM: fix some cases where instructions that write to fp reg 15 are accidently branches. |
9552:460cf901acba |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
scons: Add warning for overloaded virtual functions
A derived function with a different signature than a base class function will result in the base class function of the same name being hidden. The parameter list and return type for the member function in the derived class must match those of the member function in the base class, otherwise the function in the derived class will hide the function in the base class and no polymorphic behaviour will occur.
This patch addresses these warnings by ensuring a unique function name to avoid (unintentionally) hiding any functions. |
9369:bd30fcbf8d28 |
12-Dec-2012 |
Nathanael Premillieu <nathanael.premillieu@irisa.fr> |
arm: set uopSet_uop as conditional or unconditional control uopSet_uop is microop instruction that has the IsControl flags set, but the IsCondControl or IsUncondControl flags seems not to be set, neither in the construction nor where the microop is used. This patch adds the the flags in the constructor of the instruction (MicroUopSetPCCPSR).
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9250:dab0f29394f0 |
25-Sep-2012 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Predict target of more instructions that modify PC. |
9077:e236675714a4 |
29-Jun-2012 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Fix identification of one RAS pop instruction.
The check should be with the op2 field, not with the op1 field. |
8910:2c3ee562ccca |
21-Mar-2012 |
Nathanael Premillieu <npremill@irisa.fr> |
ARM: Fix case where cond/uncond control is mis-specified |
8902:75b524b64c28 |
19-Mar-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
gcc: Clean-up of non-C++0x compliant code, first steps
This patch cleans up a number of minor issues aiming to get closer to compliance with the C++0x standard as interpreted by gcc and clang (compile with std=c++0x and -pedantic-errors). In particular, the patch cleans up enums where the last item was succeded by a comma, namespaces closed by a curcly brace followed by a semi-colon, and the use of the GNU-extension typeof (replaced by templated functions). It does not address variable-length arrays, zero-size arrays, anonymous structs, range expressions in switch statements, and the use of long long. The generated CPU code also has a large number of issues that remain to be fixed, mainly related to overflows in implicit constant conversion (due to shifts). |
8892:02b0b6b4d7c0 |
09-Mar-2012 |
Brian Grayson <b.grayson@samsung.com> |
ARM: Fix branch prediction issue with CB(N)Z instruction |
8737:770ccf3af571 |
31-Jan-2012 |
Koan-Sin Tan <koansin.tan@gmail.com> |
clang: Enable compiling gem5 using clang 2.9 and 3.0
This patch adds the necessary flags to the SConstruct and SConscript files for compiling using clang 2.9 and later (on Ubuntu et al and OSX XCode 4.2), and also cleans up a bunch of compiler warnings found by clang. Most of the warnings are related to hidden virtual functions, comparisons with unsigneds >= 0, and if-statements with empty bodies. A number of mismatches between struct and class are also fixed. clang 2.8 is not working as it has problems with class names that occur in multiple namespaces (e.g. Statistics in kernel_stats.hh).
clang has a bug (http://llvm.org/bugs/show_bug.cgi?id=7247) which causes confusion between the container std::set and the function Packet::set, and this is currently addressed by not including the entire namespace std, but rather selecting e.g. "using std::vector" in the appropriate places. |
8607:5fb918115c07 |
31-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
GCC: Get everything working with gcc 4.6.1.
And by "everything" I mean all the quick regressions. |
8556:2afd82e84d95 |
19-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
PseudoInst: Remove the now unnecessary #if FULL_SYSTEMs around pseudoinsts. |
8518:9c87727099ce |
19-Aug-2011 |
Geoffrey Blake <geoffrey.blake@arm.com> |
Fix bugs due to interaction between SEV instructions and O3 pipeline
SEV instructions were originally implemented to cause asynchronous squashes via the generateTCSquash() function in the O3 pipeline when updating the SEV_MAILBOX miscReg. This caused race conditions between CPUs in an MP system that would lead to a pipeline either going inactive indefinitely or not being able to commit squashed instructions. Fixed SEV instructions to behave like interrupts and cause synchronous sqaushes inside the pipeline, eliminating the race conditions. Also fixed up the semantics of the WFE instruction to behave as documented in the ARMv7 ISA description to not sleep if SEV_MAILBOX=1 or unmasked interrupts are pending. |
8444:56de1f9320df |
03-Jul-2011 |
Gabe Black <gblack@eecs.umich.edu> |
ExecContext: Rename the readBytes/writeBytes functions to readMem and writeMem.
readBytes and writeBytes had the word "bytes" in their names because they accessed blobs of bytes. This distinguished them from the read and write functions which handled higher level data types. Because those functions don't exist any more, this change renames readBytes and writeBytes to more general names, readMem and writeMem, which reflect the fact that they are how you read and write memory. This also makes their names more consistent with the register reading/writing functions, although those are still read and set for some reason. |
8442:b1f3dfae06f1 |
03-Jul-2011 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Use readBytes/writeBytes for all instruction level memory operations. |
8303:5a95f1d2494e |
13-May-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Further break up condition code into NZ, C, V bits.
Break up the condition code bits into NZ, C, V registers. These are individually written and this removes some incorrect dependencies between instructions. |
8301:858384f3af1c |
13-May-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Break up condition codes into normal flags, saturation, and simd.
This change splits out the condcodes from being one monolithic register into three blocks that are updated independently. This allows CPUs to not have to do RMW operations on the flags registers for instructions that don't write all flags. |
8209:9e3f7f00fa90 |
04-Apr-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Use CPU local lock before sending load to mem system.
This change uses the locked_mem.hh header to handle implementing CLREX. It simplifies the current implementation greatly. |
8207:cad97f04eb91 |
04-Apr-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Fix bug in MicroLdrNeon templates for initiateAcc(). |
8205:7ecbffb674aa |
04-Apr-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Cleanup implementation of ITSTATE and put important code in PCState.
Consolidate all code to handle ITSTATE in the PCState object rather than touching a variety of structures/objects. |
8203:78b9f056d58a |
04-Apr-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Tag appropriate instructions as IsReturn |
8146:18368caa8489 |
17-Mar-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Identify branches as conditional or unconditional and direct or indirect. |
8142:e08035e1a1f6 |
17-Mar-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Allow conditional quiesce instructions.
This patch prevents not executed conditional instructions marked as IsQuiesce from stalling the pipeline indefinitely. If the instruction is not executed the quiesceSkip psuedoinst is called which schedules a wakes up call to the fetch stage. |
8140:7449084b1612 |
17-Mar-2011 |
Matt Horsnell <Matt.Horsnell@arm.com> |
ARM: Fix RFE macrop.
This changes the RFE macroop into 3 microops:
URa = [sp]; URb = [sp+4]; // load CPSR,PC values from stack sp = sp + offset; // optionally auto-increment PC = URa; CPSR = URb; // write to the PC and CPSR.
Importantly: - writing to PC is handled in the last micro-op. - loading occurs prior to state changes. |
8072:128afe2b3a35 |
23-Feb-2011 |
Giacomo Gabrielli <Giacomo.Gabrielli@arm.com> |
ARM: NEON instruction templates modified to set the predicate flag to false when needed. |
7848:cc5e64f8423f |
18-Jan-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Add support for moving predicated false dest operands from sources. |
7724:ba11187e2582 |
08-Nov-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Make all ARM uops delayed commit. |
7712:7733c562e5e3 |
22-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Simplify various implementations of completeAcc. |
7711:fe91d5e2c374 |
22-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Don't pretend to writeback registers in initiateAcc. |
7705:fd65f85fcc0c |
13-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
Mem: Change the CLREX flag to CLEAR_LL.
CLREX is the name of an ARM instruction, not a name for this generic flag. |
7646:a444dbee8c07 |
25-Aug-2010 |
Gene WU <gene.wu@arm.com> |
ARM: Use fewer micro-ops for register update loads if possible.
Allow some loads that update the base register to use just two micro-ops. three micro-ops are only used if the destination register matches the offset register or the PC is the destination regsiter. If the PC is updated it needs to be the last micro-op otherwise O3 will mispredict. |
7644:62873d5c2bfc |
25-Aug-2010 |
Ali Saidi <ali.saidi@arm.com> |
ARM: Fix VFP enabled checks for mem instructions |
7641:788c719d0fc8 |
25-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix type comparison warnings in Neon. |
7640:5286a8a469c5 |
25-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement CPACR register and return Undefined Instruction when FP access is disabled. |
7639:8c09b7ff5b57 |
25-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement all ARM SIMD instructions. |
7612:917946898102 |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
MEM: Make CLREX a first class request operation and clear locks in caches when it in received |
7610:ebae85c30d32 |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
ARM: Don't write tracedata on writes, it might have been freed already. |
7609:70e5fb74b4fa |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
ARM: Implement CLREX init/complete acc methods |
7597:063f160e8b50 |
23-Aug-2010 |
Min Kyu Jeong <minkyu.jeong@arm.com> |
ARM/O3: store the result of the predicate evaluation in DynInst or Threadstate. THis allows the CPU to handle predicated-false instructions accordingly. This particular patch makes loads that are predicated-false to be sent straight to the commit stage directly, not waiting for return of the data that was never requested since it was predicated-false. |
7440:00aa12f63896 |
02-Jun-2010 |
Min Kyu Jeong <MinKyu.Jeong@arm.com> |
ARM: Fix IT state not updating when an instruction memory instruction faults. |
7422:feddb9077def |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Decode to specialized conditional/unconditional versions of instructions.
This is to avoid condition code based dependences from effectively serializing instructions when the instruction doesn't actually use them. |
7408:ee6949c5bb5b |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement support for the IT instruction and the ITSTATE bits of CPSR. |
7396:53454ef35b46 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Clean up the implementation of the VFP instructions. |
7375:7095d84ffb36 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Introduce new VFP base classes that are optionally microops. |
7332:2e611548bb5a |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add a new RegImmOp base class. |
7331:0897d3ccea91 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add a RegRegImmOp base class. |
7330:4f882b59745d |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Widen the immediate fields in the misc instruction classes. |
7312:03016344f54e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add a base class for SRS. |
7306:548a5ee3dc5f |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Make a base class for instructions that use only an immediate. |
7303:6b70985664c8 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the strex instructions. |
7291:2d21be52e57f |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add a base class for the RFE instruction. |
7279:157b02cc0ba1 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Explicitly keep track of the second destination for double loads/stores. |
7261:5ed14bce7261 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Rename the RevOp base class to something more generic. |
7253:38b991b82859 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add a register, immediate, immediate to register base for [su]bfx. |
7241:0a9f0db3e5d8 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add a base class to support usada8. |
7238:f68fa944baee |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add a base class for the sel instruction. |
7233:687fa9b9c2b5 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add a base class for extend and add instructions. |
7232:f633e1a3f644 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Generalize the saturation instruction bases for use in other instructions. |
7225:bf41a07cc7c0 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement base classes for the saturation instructions. |
7208:589ddde61a77 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add base classes suitable for the REV* instructions. |
7205:e3dfcdf19561 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the swp and swpb instructions. |
7202:b99579129992 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Define versions of MSR and MRS outside the decoder. |
7176:94f0a9ac9bbc |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add templates for VFP load/store multiple instructions. |
7170:6f97f5107abe |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Move the macro mem constructor out of the isa desc. This code doesn't use the parser at all, and moving it out reduces the conceptual complexity of that code. |
7169:6cc400372260 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Make macroops panic if executed directly. The macroop should never be executed, only it's microops will. |
7168:54105b48a0a7 |
02-Jun-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: GCC < 4.3 has some issues with attribute no return on some functions. Fix so it works for older gccs. |
7167:a28390624772 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Split out the "basic" templates and format. |
7159:2d7f1528f2d0 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add templates for multiply instructions. |
7150:b276b5afd927 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add new templates for branch instructions. |
7138:5dff7c15008f |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement data processing instructions external to the decoder. |
7134:60fe8a00b36e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Reimplement load/store multiple external to the decoder. |
7133:4a1af4580b7d |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Move the templates for predicated instructions into a separate file. This allows the templates to all be available at the same time before any of the formats, etc. This breaks an artificial circular dependence. |
7120:d630089169f3 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Define the store instructions from outside the decoder. |
7119:5ad962dec52f |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Define the load instructions from outside the decoder. |