14242:076b215de8d4 |
29-Aug-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Add explicit AArch64 MiscReg banking
Change-Id: I89836d14491a51b1573f45c8012e3ad12b107d24 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/+/20623 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14241:cef003034ff2 |
30-Aug-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Use same template across all MSR inst
Change-Id: Ifb9f1db288e401761b71ccf426e370c475e5663f 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/+/20622 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14172:bba55ff08279 |
16-Aug-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Replace occ of opModeToEL(currOpMode/cpsr) with currEL
Change-Id: I739a9be03ea5caa63540c62fd110eee86a058c4c 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/+/20252 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
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> |
14128:6ed23d07d0d1 |
28-Jul-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Implement ARMv8.1-PAN, Privileged access never
ARMv8.1-PAN adds a new bit to PSTATE. When the value of this PAN state bit is 1, any privileged data access from EL1 or EL2 to a virtual memory address that is accessible at EL0 generates a Permission fault. This feature is mandatory in ARMv8.1 implementations. This feature is supported in AArch64 and AArch32 states. The ID_AA64MMFR1_EL1.PAN, ID_MMFR3_EL1.PAN, and ID_MMFR3.PAN fields identify the support for ARMv8.1-PAN.
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Change-Id: I94a76311711739dd2394c72944d88ba9321fd159 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19729 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.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> |
14110:1bf991299609 |
18-Dec-2018 |
Gabor Dozsa <gabor.dozsa@arm.com> |
arch-arm: Fix reg dependency for SVE gather microops
The first microop of an SVE gather creates a copy of the source vecreg into AA64FpUreg0. The subsequent microops must refer to this copy as a source in order to establish the correct register dependencies.
Change-Id: I84d8c331f9f9ebca609948a15f686a7cde67dc31 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/+/19172 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14108:881e7d85baf7 |
13-Nov-2018 |
Javier Setoain <javier.setoain@arm.com> |
arch-arm: Add SVE LD1RQ[BHWD]
Add both scalar+scalar and scalar+immediate versions.
Change-Id: If5fa1a71ab0dab93f9d35b544ea0899ece858bea Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19170 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.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> |
13999:a26c2e234a80 |
19-Feb-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Change mcrMrc15TrapToHyp signature
This patch is moving MiscRegs reading inside the mcrMrc15TrapToHyp helper function. Rather than passing registers as arguments, we are just passing a ThreadContext pointer
Change-Id: I6636dd3a4f92f757479d8a8d2c47de050a0b9eae 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/+/17988 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13979:1e0c4607ac12 |
30-Apr-2019 |
Ciro Santilli <ciro.santilli@arm.com> |
arch-arm: implement VMINNM and VMAXNM scalar version
ARMv8.2 16-bit versions have not yet been implemented, but a placeholders were created for them.
Refactor the nearby decoding tree to closely match the ARM spec A32 decode table.
That piece of the tree can also be called from thumb which decodes it in the same way, although the thumb decode table has a different terminology
The old code didn't match neither A32 or T32 terminologies, so it is better to at least match one of them to help verify correctness.
Change-Id: Iabbbca2932557cf6c98ce36690c385c3ddf39ed8 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18690 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13978:896f9f7a1d16 |
10-Apr-2019 |
Ciro Santilli <ciro.santilli@arm.com> |
arch-arm: implement VMINNM and VMAXNM SIMD version
This instruction is backported from aarch64.
In order to use the existing fplibMinNum backend, we first move VMIN and VPMIN to use fplib. Adding VMINNM is then trivial.
Change-Id: I404daabeb6079f60e51a648a06d5b3e54f1c24a9 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18689 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> |
13915:24ae4ea846c9 |
29-Apr-2019 |
Gabe Black <gabeblack@google.com> |
arch: Stop using TheISA within the ISAs.
We know for sure what the ISA is, so there's no need for the indirection.
Change-Id: I73ff04c50890d40a4c7f40caeee746b68b846cb3 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18488 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13824:54e92033cf67 |
14-Mar-2019 |
Andrea Mondelli <Andrea.Mondelli@ucf.edu> |
dev-arm: Correct cast of template parameter
Clang with -Wconstant-conversion is _very_ restrictive on casting. The shift operator results in an incorrect promotion.
This patch add a compile-time static cast that remove the error when clang is used.
Change-Id: I3aa1e77da2565799feadc32317d5faa111b2de86 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17308 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13816:5a101ab471c9 |
14-Mar-2019 |
Javier Setoain <javier.setoain@arm.com> |
arch-arm: Fix use of bitwise operators on booleans
Change-Id: I3762b2921f1d00a9104d8dc11a19dc0a219581e5 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17288 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@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> |
13738:84439021dcf6 |
18-Feb-2019 |
Ciro Santilli <ciro.santilli@arm.com> |
arch-arm: implement floating point aarch32 VCVTA family
These instructions round floating point to integer, and were added to aarch32 as an extension to ARMv7.
Change-Id: I62d1705badc95a4e8954a5ad62b2b6bc9e4ffe00 Reviewed-on: https://gem5-review.googlesource.com/c/16788 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13589:13522f2a5126 |
18-Jan-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Implement LoadAcquire/StoreRelease in AArch32
This patch is implementing LoadAcquire/StoreRelease instructions in AArch32, which were added in ARMv8-A only and where not present in ARMv7.
Change-Id: I5e26459971d0b183a955cd7b0c9c7eaffef453be 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/15817 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13588:fb25d9448acc |
21-Jan-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: IsStoreConditional flag set depending on flavor
This patch is aligning A32 with A64 where the IsStoreConditional flag doesn't have to be specified manually in the instruction implementation, but will be automatically added to any exclusive store.
Change-Id: Id02ed6fc2beeca6d125017393714a7c6eb3d8a33 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/15816 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13587:9d4da35335af |
18-Jan-2019 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Remove SWP and SWPB instructions
The SWP and SWPB instructions have been removed from AArch32. It was previously (ARMv7) possible to enable them with the ID_ISAR0.Swap bits, which are now hardcoded to 0b0000 (SWP and SWPB not implemented)
Change-Id: Ic32b534454a7e0f7494a6f0b5e11182c65b3fe24 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/15815 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> |
13367:dc06baae4275 |
19-Oct-2018 |
yuetsu.kodama <yuetsu.kodama@riken.jp> |
arch-arm: We add PRFM PST instruction for arm
Note current PRFM supports only PLD, but PST (prefetch for store) is also important for latency hiding. We also bug fix in disassembler to display prfop correctly.
Change-Id: I9144e7233900aa2d555e1c1a6a2c2e41d837aa13 Signed-off-by: Yuetsu Kodama <yuetsu.kodama@riken.jp> Reviewed-on: https://gem5-review.googlesource.com/c/13675 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13364:055bf0fa0f02 |
24-Oct-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Refactor AArch64 MSR/MRS trapping
This patch refactors AArch64 MSR/MRS trapping, by moving the trapping helpers in arch/arm/utility and in the isa code into a MiscRegOp64 class.
This class is the Base class for a generic AArch64 instruction which is making use of system registers (MiscReg), like MSR,MRS,SYS. The common denominator or those instruction is the chance that the system register access is trapped to an upper Exception level. MiscRegOp64 is providing that feature.
What do we gain? Other "pseudo" instructions, like access to implementation defined registers can inherit from this class to make use of the trapping functionalities even if there is no data movement between GPRs and system register.
Change-Id: I0924354db100de04f1079a1ab43d4fd32039e08d 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/13778 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13363:15eae7ca2bfd |
24-Oct-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Trap to EL2 only if not in Secure State
MRS/MSR Instructions should trap to EL2 only if we are in non-Secure state since at the current implementation (Armv8.0) there is no Secure EL2.
Change-Id: I93af415fbcbd19a470752adf6afc92e520e9645d 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/13777 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13362:ecfc76db437f |
23-Oct-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Fix HVC trapping beahviour
This patch is fixing HVC trapping behaviour, reusing the pseudocode implementation provided in the arm arm.
Change-Id: I0bc81478400b99d84534c1c8871f894722f547c5 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/13776 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13171:8d3d2b1f1ca3 |
09-May-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: AArch64 Crypto AES
This patch implements the AArch64 AES instructions from the Crypto extension.
Change-Id: I9143041ec7e1c6a50dcad3f72d7d1b55d6f2d402 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/13250 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13170:eb0a1f32798d |
01-May-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: AArch64 Crypto SHA
This patch implements the AArch64 secure hashing instructions from the Crypto extension.
Change-Id: I2cdfa81b994637c880f2523fe37cdc6596d05cb1 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/13249 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13169:eb3b2bea4231 |
08-May-2018 |
Matt Horsnell <matt.horsnell@arm.com> |
arch-arm: AArch32 Crypto AES
This patch implements the AArch32 AES instructions from the Crypto extension.
Change-Id: I51e6deda748b0c26135bcfe9d0c7128f3af91f3d Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Matt Horsnell <matt.horsnell@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/13248 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@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> |
13120:690a0db8e58b |
28-Jun-2018 |
Edmund Grimley Evans <Edmund.Grimley-Evans@arm.com> |
arch-arm: Add FP16 support introduced by Armv8.2-A
This changeset adds support for FP/SIMD instructions with half-precision floating-point operands.
Change-Id: I4957f111c9c5e5d6a3747fe9d169d394d642fee8 Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/13084 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12856:cca88f84cb80 |
14-Feb-2017 |
Giacomo Gabrielli <giacomo.gabrielli@arm.com> |
arm: Add support for RCpc load-acquire instructions (ARMv8.3)
Please note that at the moment these instructions behave like the existing load-acquire instructions, which follow the more conservative RCsc consistency model. This means that the new instructions are _functionally_ correct, but the potential performance improvements enabled by the RCpc model will not be experienced in timing simulations.
Change-Id: I04c786ad2941072bf28feba7d2ec6e142c8b74cb Reviewed-by: Andreas Hansson <andreas.hansson@arm.com> Reviewed-on: https://gem5-review.googlesource.com/11989 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> |
12789:b28b286fa57d |
05-Jun-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: AArch32 execution triggering AArch64 SW Break
AArch32 Software Breakpoint (BKPT) can trigger an AArch64 fault when interprocessing if the trapping conditions are met.
Change-Id: I485852ed19429f9cd928a6447a95eb6f471f189c Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/11197 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12788:fe6d6ae79d7c |
07-Jun-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: BadMode checking if corresponding EL is implemented
The old utility function called badMode was only checking if the mode passed as an argument was a recognized mode. It was not checking if the corresponding mode/EL was implemented. That function has been renamed to unknownMode and a new badMode has been introduced. This is used by the cpsrWriteByInstruction function. In this way any try to change the execution mode won't succeed if the mode hasn't been implemented.
Change-Id: Ibfe385c5465b904acc0d2eb9647710891d72c9df Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/11196 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12762:f73d3a4aaf03 |
30-Apr-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Read APSR in User Mode
This patch substitutes reads to the CPSR in user mode (MRS CPSR) to reads to APSR (Application Program Status Register). This is the user level alias for the CPSR. The APSR is a subset of the CPSR.
Change-Id: I18a70693aef6fd305a4c4cb3c6f81f331bc60a2d Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/10602 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12646:3fa08822f79c |
28-Mar-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Fix mrc,mcr to cop14 disassemble
This patch fixes the disassemble for AArch32 mcr/mrc p14 instructions.
Change-Id: If5d7c2d7c726f040ae20053bf1d70f4405b34d0e Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-on: https://gem5-review.googlesource.com/9681 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12583:0c047fc2b3e0 |
13-Mar-2018 |
Chun-Chen Hsu <chunchenhsu@google.com> |
arm: Fix maybe-uninitialized GCC warnings
GCC 7 generates maybe-uninitialized warnings at the code that updates the "dest" variables in the writeVecElem function of neon64_mem.hh file. It is because the generated code does not appropriately initialize the output variable before passing it to the writeVecElem function. This patch initializes the output variable to fix this.
Change-Id: I50a8f4e456ccdcaa3db1392ec097017450c56ecb Signed-off-by: Chun-Chen Hsu <chunchenhsu@google.com> Reviewed-on: https://gem5-review.googlesource.com/9121 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12580:ad7057d38b98 |
09-Feb-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: ERET from AArch64 to AArch32 ignore MSBs
The 32 most significant bits of ELR_ELx must be ignored when returning from AArch64 to AArch32.
Change-Id: I412d72908997916404e16e9eeca2789a9c529e58 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8881 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12560:9df712bd8c2f |
19-Feb-2018 |
Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com> |
arm: Remove ignored const qualifier
gcc8 warns about ignored const qualifiers (-Wignored-qualifiers) and that breaks builds. It was suggested that the warning be moved to Wextra[1] but that's probably not going to happen anytime soon.
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82711
Change-Id: Ib808906deb9a1c2dccb1c34b6563db0c24c66655 Signed-off-by: Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com> Reviewed-on: https://gem5-review.googlesource.com/8562 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12543:cd851ca42177 |
15-Feb-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Make hlt64 a mem barrier with semihosting
The HLT instruction is used to trap into semihosting. The semihosting code can change the contents of memory behind the back of the CPU, which requires instructions triggering semihosting to be non-speculative and memory barriers.
Change-Id: I735166251aa194120ad49c08082d4ac65fe96524 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8373 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12542:03cb745f9982 |
13-Feb-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Add AArch32 HLT Semihosting interface
AArch32 HLT instruction is now able to issue Arm Semihosting commands as the AArch64 counterpart in either Arm and Thumb mode.
Change-Id: I77da73d2e6a9288c704a5f646f4447022517ceb6 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8372 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12541:de165cf2809e |
13-Feb-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Add AArch32 SVC Semihosting interface
AArch32 Svc instruction is now able to issue Arm Semihosting commands as the AArch64 counterpart in either Arm and Thumb mode.
Change-Id: Ibe47ac23d0c26f3f819cc0e2b3ee874b5cdbb3d3 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8371 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12539:14f557f1dab8 |
14-Feb-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: HLT using immediate when checking for semihosting
HLT can use the immediate field when checking for semihosting, rather than re-parsing it from the machInst variable.
Change-Id: I072cb100029da34d129b90c5d17e1728f9016c88 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8369 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> |
12531:3141027bd11a |
08-Feb-2018 |
Andreas Sandberg <andreas.sandberg@arm.com> |
arch-arm: Add aarch64 semihosting support
Add basic support for Arm Semihosting 2.0 simulation calls [1]. These calls let the guest system call a simulator or debugger to request OS-like support when running bare metal code.
With the exception of SYS_SYSTEM, this implementation supports all of the Semihosting 2.0 specification in aarch64.
[1] https://developer.arm.com/docs/100863/latest/preface
Change-Id: I08c153c18a4a4fb9f95d318e2a029724935192a7 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jack Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8147 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> |
12527:264a2d7e5c1d |
26-Jul-2017 |
Chuan Zhu <chuan.zhu@arm.com> |
arch-arm: Fix big endian support in {Load,Store}Double64
{Load, Store}Double64 didn't consider some of the big-endian situations. Added big-endian related data conversions to correct them.
Change-Id: I8840613f94446e6042276779d1f02350ab57987f Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8145 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12508:78b44de943ea |
20-Dec-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arch-arm: Change the type of fault for dc ivac instructions
Change-Id: I00f957a3bc4721a66db62b1257f10e9019a94608 Reviewed-by: Jack Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7829 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> |
12507:c76ecc4a7504 |
20-Dec-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arch-arm: Unify permission checks for dc * instructions
Change-Id: Ib47f4134e3f0a580e5356d384a5d3b293c1af7be Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7828 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12505:1a856c74ec3a |
19-Dec-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arch-arm: Turn dc ivac to dc civac when some conditions are met
The Arm ARM defines that at EL1 a data cache invalidate instruction performs a data cache clean and invalidate operation if all of the following apply: * EL2 is implemented, * HCR_EL2.VM is set to 1, * SCR_EL3.NS is set to 1 or EL3 is not implemented. This changeset implements this behavior.
Change-Id: I6b6aef2f4b1e7eb107c069fdb0a10f4aa8e6b196 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7826 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12504:6a6d80495bd6 |
19-Dec-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arch-arm: Fix printing of the data cache maintenance instructions
Change-Id: I2322c7bf65b38cb07a1ea2b5dc25dfc5a0496cf0 Reviewed-by: Jack Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7825 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> |
12499:b81688796004 |
09-Jan-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Change function name for banked miscregs
This commit changes the function's name used for retrieving the index of a security banked register given the flatten index. This will avoid confusion with flattenRegId, which has a different purpose.
Change-Id: I470ffb55916cb7fc9f78e071a7f2e609c1829f1a Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7982 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12498:309fbaf29a40 |
14-Dec-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Fix AArch32 SETEND Instruction
This patch fixes AArch32 SETEND instruction, which was previously executed unconditionally without checking (H)SCTLR.SED field. This bit enables/disables the trapping of the instruction.
Change-Id: Ib3d2194c8d16c34ec2a9ab3e8090081900c1e42e Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7981 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12488:19af27d8b34d |
06-Nov-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Removing Serializing flag from ISB
ISB Serializing behaviour is guaranteed by IsSquashAfter, which is inherently serializing; when instruction is commited, consecutive instructions are flushed and refetched.
Change-Id: I05e61b4cf9f01113d95b1502c996d04cbd69b759 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5701 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12403:7be05f61abf3 |
01-Dec-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Fixed WFE/WFI trapping behaviour
This patch fixes the WFx trapping behaviour by introducing the arm arm v8 pseudocode functions: checkForWFxTrap32 and checkForWFxTrap64
Change-Id: I3db0d78b5c4ad46860e6d199c2f2fc7b41842840 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/6622 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12386:2bf5fb25a5f1 |
13-Dec-2017 |
Gabe Black <gabeblack@google.com> |
arm,sparc,x86,base,cpu,sim: Replace the Twin(32|64)_t types with.
Replace them with std::array<>s.
Change-Id: I76624c87a1cd9b21c386a96147a18de92b8a8a34 Reviewed-on: https://gem5-review.googlesource.com/6602 Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.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> |
12299:c54efdd48952 |
23-Jun-2017 |
Andreas Sandberg <andreas.sandberg@arm.com> |
arch-arm: Add support for the brk instruction
Add support for software breakpoints as signalled by the aarch64 brk instruction. This introduces a new SoftwareBreakpoint fault.
Change-Id: I93646c3298e09d7f7b0983108ba8937c7331297a Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5721 Reviewed-by: Giacomo Gabrielli <Giacomo.Gabrielli@arm.com> |
12298:9b2520600727 |
20-Nov-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: HVC instruction undefined in secure EL1
Since EL2 is not available in secure mode, any HVC call from secure mode should be treated as undefined. This behaviour was implemented in aarch32 HVC but not in 64 bit version
Change-Id: Ibaa4d8b1e8fe01d2ba3ef07494c09a4d3e7e87b0 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5921 Maintainer: Andreas Sandberg <andreas.sandberg@arm.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> |
12261:88f4f45ec80c |
23-Oct-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Dsb instruction shouldn't flush the pipeline
DSB Instruction shouldn't flush the pipeline, hence the IsSquashAfter attribute will be removed for either the 32 and 64 bit version.
Change-Id: I98b2b8bc78aa28445ed1a9b5f34645f8d71616ad Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5363 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12259:f787f664d57a |
20-Oct-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: Removing FlushPipe fault, using SquashAfter
This Patch is removing the FlushPipe ArmFault, which was used for flushing the pipeline in favour of the general IsSquashAfter StaticInstr flag. Using a fault was preventing tracers from tracing barriers like ISB and from adding them to the instruction count
Change-Id: I176e9254eca904694f2f611eb486c55e50ec61ff Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5361 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12258:08990d24fe41 |
13-Oct-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arm: Add support for armv8 CRC32 instructions
This patch introduces the ARM A32/T32/A64 CRC Instructions, which are mandatory since ARMv8.1. The UNPREDICTABLE behaviours are implemented as follows: 1) CRC32(C)X (64 bit) instructions are decoded as Undefined in Aarch32 2) The instructions support predication in Aarch32 3) Using R15(PC) as source/dest operand is permitted in Aarch32
Change-Id: Iaf29b05874e1370c7615da79a07f111ded17b6cc Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5521 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> |
12227:130ebc0761ed |
17-Oct-2017 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
arch-arm: RBIT instruction using mirroring func
The high speed bit-reversing function is now used for the Aarch64/32 RBIT instruction implementation.
Change-Id: Id5a8a93d928d00fd33ec4061fbb586b8420a1c1b Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/5262 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12219:5c42cf79d862 |
12-Jul-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arch-arm: Signal an event when executing store exclusives
When a store exclusive is executed, whether it is successful or not, the exclusives monitor is cleared and therefore we need to signal an event for the PE.
Change-Id: I383c88c769c0ac5f5d36c4b5d39c9681134d3a20 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/4480 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12134:604f47f63877 |
24-May-2017 |
Gedare Bloom <gedare@rtems.org> |
arch-arm: fix ldm of pc interswitching branch
The LDM instruction that loads to the PC causes a branch to the instruction. In ARMv5T+ the branch can interswitch Thumb and ARM modes. The interswitch is broken prior to this commit, with LDM to the PC ignoring the switch.
Change-Id: I6aad073206743f3435c9923e3e2218bfe32c7e05 Reviewed-on: https://gem5-review.googlesource.com/3520 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: 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> |
12106:7784fac1b159 |
05-Apr-2017 |
Rekai Gonzalez-Alberquilla <Rekai.GonzalezAlberquilla@arm.com> |
cpu: Simplify the rename interface and use RegId
With the hierarchical RegId there are a lot of functions that are redundant now.
The idea behind the simplification is that instead of having the regId, telling which kind of register read/write/rename/lookup/etc. and then the function panic_if'ing if the regId is not of the appropriate type, we provide an interface that decides what kind of register to read depending on the register type of the given regId.
Change-Id: I7d52e9e21fc01205ae365d86921a4ceb67a57178 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> [ Fix RISCV build issues ] Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2702 |
12038:619bc4100aa8 |
25-Apr-2017 |
Rekai Gonzalez-Alberquilla <rekai.gonzalezalberquilla@arm.com> |
arch-arm: Fix some poorly done type max and min in NEON
The ISA code for ARM calculates min and max elements for types using bit manipulation. That triggers some warnings, treated as errors, as the compiler can tell that there is an overflow and the sign flips. Fixed using standard lib definitions instead.
Change-Id: Ie2331b410c7f76d4bd87da5afe9edf20c8ac91b3 Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/3481 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12032:d218c2fe9440 |
18-May-2017 |
Andreas Sandberg <andreas.sandberg@arm.com> |
base, sim, arch: Fix clang 5.0 warnings
Compiling gem5 with recent version of clang (4 and 5) triggers warnings that are treated as errors:
* Global templatized static functions result in a warning if they are not used. These should either be declared as static inline or without the static identifier to avoid the warning.
* Some templatized classes contain static variables. The instantiated versions of these variables / templates need to be explicitly declared to avoid a compiler warning.
Change-Id: Ie8261144836e94ebab7ea04ccccb90927672c257 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-on: https://gem5-review.googlesource.com/3420 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
11939:9d1795bb5931 |
01-Mar-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arm: Don't panic when checking coprocessor read/write permissions
Instructions that use the coprocessor interface check the current program status to determine whether the current context has the priviledges to read from/write to the coprocessor. Some modes allow the execution of coprocessor instructions, some others do not allow it, while some other modes are unexpected (e.g., executing an AArch32 instruction while being in an AArch64 mode).
Previously we would unconditionally trigger a panic if we were in an unexpected mode. This change removes the panic and replaces it with an Undefined Instruction fault that triggers if and when a coprocessor instruction commits in an unexpected mode. This allows speculative coprocessor instructions from unexpected modes to execute but prevents them from gettting committed.
Change-Id: If2776d5bae2471cdbaf76d0e1ae655f501bfbf01 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Rekai Gonzalez Alberquilla <rekai.gonzalezalberquilla@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2281 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Weiping Liao <weipingliao@google.com> |
11862:ce333ae9ee02 |
21-Feb-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arm: Fix DPRINTFs with arguments in the instruction declarations
Change-Id: I0e373536897aa5bb4501b00945c2a0836100ddf4 Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> |
11683:f1e198a028be |
15-Oct-2016 |
Fernando Endo <fernando.endo2@gmail.com> |
cpu, arm: Distinguish Float* and SimdFloat*, create FloatMem* opClass
Modify the opClass assigned to AArch64 FP instructions from SimdFloat* to Float*. Also create the FloatMemRead and FloatMemWrite opClasses, which distinguishes writes to the INT and FP register banks. Change the latency of (Simd)FloatMultAcc to 5, based on the Cortex-A72, where the "latency" of FMADD is 3 if the next instruction is a FMADD and has only the augend to destination dependency, otherwise it's 7 cycles.
Signed-off-by: Jason Lowe-Power <jason@lowepower.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> |
11634:96dee874a9ba |
15-Sep-2016 |
Ricardo Alves <ricardo.alves@arm.com> |
arm: Add m5_fail support for aarch64
Change-Id: Id2acbc09772be310a0eb9e33295afab07e08a4fa Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> |
11582:792c744bec02 |
02-Aug-2016 |
Dylan Johnson <Dylan.Johnson@ARM.com> |
arm: Fix trapping to Hypervisor during MSR/MRS read/write
This patch restricts trapping to hypervisor only if we are in the correct exception level for the trap to happen.
Change-Id: I0a382b6a572ef835ea36d2702b8a81b633bd3df0 |
11576:9ff589e30935 |
02-Aug-2016 |
Dylan Johnson <Dylan.Johnson@ARM.com> |
arm: Add AArch64 hypervisor call instruction 'hvc'
This patch adds the AArch64 instruction hvc which raises an exception from EL1 into EL2. The host OS uses this instruction to world switch into the guest.
Change-Id: I930ee43f4f0abd4b35a68eb2a72e44e3ea6570be |
11514:eb53b59ea625 |
02-Jun-2016 |
Andreas Sandberg <andreas.sandberg@arm.com> |
arm: Rewrite ERET to behave according to the ARMv8 ARM
The ERET instruction doesn't set PSTATE correctly in some cases (particularly when returning to aarch32 code). Among other things, this breaks EL0 thumb code when using a 64-bit kernel. This changeset updates the ERET implementation to match the ARM ARM.
Change-Id: I408e7c69a23cce437859313dfe84e68744b07c98 Signed-off-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> |
11443:df24b9af42c7 |
13-Apr-2016 |
Andreas Hansson <andreas.hansson@arm.com> |
misc: Fix issues flagged by gcc 6
A few warnings (and thus errors) pop up after being added to -Wall:
1. -Wmisleading-indentation
In the auto-generated code there were instances of if/else blocks that were not indented to gcc's liking. This is addressed by adding braces.
2. -Wshift-negative-value
gcc is clever enougn to consider ~0 a negative constant, and rightfully complains. This is addressed by using mask() which explicitly casts to unsigned before shifting.
That is all. Porting done. |
11355:46c7b3e35720 |
29-Feb-2016 |
Mitch Hayenga <mitch.hayenga@arm.com> |
arm: Squash after returning from exceptions in v7
Properly done for the ERET instruction in v8, but not for v7. Many control register changes are only visible after explicit instruction synchronization barriers or exception entry/exit. This means mode changing instructions should squash any younger in-flight speculative instructions. |
11289:ab19693da8c9 |
07-Jan-2016 |
Gabor Dozsa <gabor.dozsa@arm.com> |
pseudo inst,util: Add optional key to initparam pseudo instruction
The key parameter can be used to read out various config parameters from within the simulated software. |
11165:d90aec9435bd |
09-Oct-2015 |
Rekai Gonzalez Alberquilla <Rekai.GonzalezAlberquilla@arm.com> |
isa: Add parameter to pick different decoder inside ISA
The decoder is responsible for splitting instructions in micro operations (uops). Given that different micro architectures may split operations differently, this patch allows to specify which micro architecture each isa implements, so different cores in the system can split instructions differently, also decoupling uop splitting (microArch) from ISA (Arch). This is done making the decodification calls templates that receive a type 'DecoderFlavour' that maps the name of the operation to the class that implements it. This way there is only one selection point (converting the command line enum to the appropriate DecodeFeatures object). In addition, there is no explicit code replication: template instantiation hides that, and the compiler should be able to resolve a number of things at compile-time. |
11150:a8a64cca231b |
30-Sep-2015 |
Mitch Hayenga <mitch.hayenga@arm.com> |
isa,cpu: Add support for FS SMT Interrupts
Adds per-thread interrupt controllers and thread/context logic so that interrupts properly get routed in SMT systems. |
10869:43b5dd939a49 |
09-Jun-2015 |
Rune Holm <rune.holm@arm.com> |
arm: Fix typo in ldrsh instruction name
ldrsh was typoed as hdrsh, which is a bit annoying when printing instructions. This patch fixes it. |
10829:1e38e545823b |
05-May-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
arm: Add missing FPEXC.EN check
Add a missing check to ensure that exceptions are generated properly. |
10537:47fe87b0cf97 |
14-Nov-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arm: Fixes based on UBSan and static analysis
Another churn to clean up undefined behaviour, mostly ARM, but some parts also touching the generic part of the code base.
Most of the fixes are simply ensuring that proper intialisation. One of the more subtle changes is the return type of the sign-extension, which is changed to uint64_t. This is to avoid shifting negative values (undefined behaviour) in the ISA code. |
10501:e278fa3086b5 |
02-Sep-2014 |
Akash Bagdia <akash.bagdia@ARM.com> |
arm: Don't speculatively access most miscregisters.
Speculative exeuction can cause panics in detailed execution mode that shouldn't happen. |
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". |
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. |
10339:53278be85b40 |
03-Sep-2014 |
Mitch Hayenga <mitch.hayenga@arm.com> |
arm: Fix v8 neon latency issue for loads/stores
Neon memory ops that operate on multiple registers currently have very poor performance because of interleave/deinterleave micro-ops.
This patch marks the deinterleave/interleave micro-ops as "No_OpClass" such that they take minumum cycles to execute and are never resource constrained.
Additionaly the micro-ops over-read registers. Although one form may need to read up to 20 sources, not all do. This adds in new forms so false dependencies are not modeled. Instructions read their minimum number of sources. |
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 |
10197:a60405212dea |
09-May-2014 |
Curtis Dunham <Curtis.Dunham@arm.com> |
arm: add preliminary ISA splits for ARM arch |
10188:c09802451018 |
09-May-2014 |
Geoffrey Blake <geoffrey.blake@arm.com> |
arm: Panics in miscreg read functions can be tripped by O3 model
Unimplemented miscregs for the generic timer were guarded by panics in arm/isa.cc which can be tripped by the O3 model if it speculatively executes a wrong path containing a mrs instruction with a bad miscreg index. These registers were flagged as implemented and accessible. This patch changes the miscreg info bit vector to flag them as unimplemented and inaccessible. In this case, and UndefinedInst fault will be generated if the register access is not trapped by a hypervisor. |
10183:badc31a41a87 |
09-May-2014 |
Curtis Dunham <Curtis.Dunham@arm.com> |
arm: cleanup ARM ISA definition |
10126:943808ead35e |
23-Mar-2014 |
Eric Van Hensbergen <eric.vanhensbergen@arm.com> |
arm: m5ops readfile64 args broken, offset coming through garbage
There were several sections of the m5ops code which were essentially copy/pasted versions of the 32-bit code. The problem is that some of these didn't account fo4 64-bit registers leading to arguments being in the wrong registers. This patch addresses the args for readfile64, writefile64, and addsymbol64 -- all of which seemed to suffer from a similar set of problems when moving to 64-bit. |
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 |
9687:22e9258c06bb |
14-May-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
arm: Add support for the m5fail pseudo-op |
9557:8666e81607a6 |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
scons: Fix warnings issued by clang 3.2svn (XCode 4.6)
This patch fixes the warnings that clang3.2svn emit due to the "-Wall" flag. There is one case of an uninitialised value in the ARM neon ISA description, and then a whole range of unused private fields that are pruned. |
9554:406fbcf60223 |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
scons: Add warning for missing declarations
This patch enables warnings for missing declarations. To avoid issues with SWIG-generated code, the warning is only applied to non-SWIG code. |
9517:5ffb5e5c93b4 |
15-Feb-2013 |
Ali Saidi <Ali.Saidi@ARM.com> |
arm: fix some fp comparisons that worked by accident.
The explict tests in the follwing fp comparison operations were incorrect as they checked for only signaling NaNs and not quite-NaNs as well. When compiled with gcc, the comparison generates a fp exception that causes the FE_INVALID flag to be set and we check for it, so even though the check was incorrect, the correct exception was set. With clang this behavior seems to not occur. The checks are updated to test for nans and the behavior is now correct with both clang and gcc. |
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. |
8908:412877977866 |
21-Mar-2012 |
Geoffrey Blake <geoffrey.blake@arm.com> |
ARM: IT doesn't need to be serializing. |
8868:26dbd171754e |
01-Mar-2012 |
Matt Horsnell <Matt.Horsnell@arm.com> |
ARM: Add limited CP14 support.
New kernels attempt to read CP14 what debug architecture is available. These changes add the debug registers and return that none is currently available. |
8809:bb10807da889 |
01-Feb-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Merge with head, hopefully the last time for this batch. |
8798:adaa92be9037 |
16-Jan-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Merge yet again with the main repository. |
8796:a2ae5c378d0a |
07-Jan-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Merge with the main repository again. |
8795:0909f8ed7aa0 |
07-Jan-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Merge with main repository. |
8782:10c9297e14d5 |
02-Nov-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SE/FS: Get rid of FULL_SYSTEM in the ARM ISA. |
8734:79592b2b1d55 |
31-Jan-2012 |
Dam Sunwoo <dam.sunwoo@arm.com> |
util: implements "writefile" gem5 op to export file from guest to host filesystem
Usage: m5 writefile <filename>
File will be created in the gem5 output folder with the identical filename. Implementation is largely based on the existing "readfile" functionality. Currently does not support exporting of folders. |
8733:64a7bf8fa56c |
31-Jan-2012 |
Geoffrey Blake <geoffrey.blake@arm.com> |
CheckerCPU: Re-factor CheckerCPU to be compatible with current gem5
Brings the CheckerCPU back to life to allow FS and SE checking of the O3CPU. These changes have only been tested with the ARM ISA. Other ISAs potentially require modification. |
8659:78f27ef5e919 |
09-Jan-2012 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Add support for initparam m5 op |
8628:764346848617 |
01-Dec-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Add IsSerializeAfter and IsNonSpeculative flag to the syscall instruction .
Squashes the subsequent instructions in O3 pipe after the service call, so that they see the effect of the system call when re-executed. This isn't really an issue with FS mode, but can show up in SE mode. |
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. |
8588:ef28ed90449d |
27-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
ISA parser: Use '_' instead of '.' to delimit type modifiers on operands.
By using an underscore, the "." is still available and can unambiguously be used to refer to members of a structure if an operand is a structure, class, etc. This change mostly just replaces the appropriate "."s with "_"s, but there were also a few places where the ISA descriptions where handling the extensions themselves and had their own regular expressions to update. The regular expressions in the isa parser were updated as well. It also now looks for one of the defined type extensions specifically after connecting "_" where before it would look for any sequence of characters after a "." following an operand name and try to use it as the extension. This helps to disambiguate cases where a "_" may legitimately be part of an operand name but not separate the name from the type suffix.
Because leaving the "_" and suffix on the variable name still leaves a valid C++ identifier and all extensions need to be consistent in a given context, I considered leaving them on as a breadcrumb that would show what the intended type was for that operand. Unfortunately the operands can be referred to in code templates, the Mem operand in particular, and since the exact type of Mem can be different for different uses of the same template, that broke things. |
8555:6fd8d0432d8d |
19-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
Pseudoinst: Add an initParam pseudo inst function. |
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. |
8469:a9eae846c229 |
15-Jul-2011 |
Wade Walker <wade.walker@arm.com> |
ARM: Fix SWP/SWPB undefined instruction behavior
SWP and SWPB now throw an undefined instruction exception if SCTLR.SW == 0. This also required the MIDR to be changed slightly so programs can correctly determine that gem5 supports the ARM v7 behavior of SWP/SWPB (in ARM v6, SWP/SWPB were deprecated, but not disabled at CPU startup). |
8354:26be660e365a |
17-Jun-2011 |
Gedare Bloom <gedare@gwmail.gwu.edu> |
ARM: Add m5ops and related support for workbegin() and workend() to ARM ISA. |
8309:d1ce92fd3245 |
18-May-2011 |
Nathan Binkert <nate@binkert.org> |
gcc: fix an uninitialized variable warning from G++ 4.5 |
8305:a624d67b642c |
13-May-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Generate condition code setting code based on which codes are set.
This change further eliminates cases where condition codes were being read just so they could be written without change because the instruction in question was supposed to preserve them. This is done by creating the condition code code based on the input rather than just doing a simple substitution. |
8304:16911ff780d3 |
13-May-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Construct the predicate test register for more instruction programatically.
If one of the condition codes isn't being used in the execution we should only read it if the instruction might be dependent on it. With the preeceding changes there are several more cases where we should dynamically pick instead of assuming as we did before. |
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. |
8302:9f23d01421de |
13-May-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Remove the saturating (Q) condition code from the renamed register.
Move the saturating bit (which is also saturating) from the renamed register that holds the flags to the CPSR miscreg and adds a allows setting it in a similar way to the FP saturating registers. This removes a dependency in instructions that don't write, but need to preserve the Q bit. |
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. |
8285:c38905a6fa32 |
04-May-2011 |
Prakash Ramrakhyani <Prakash.Ramrakhyani@arm.com> |
ARM: Implement WFE/WFI/SEV semantics. |
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. |
8206:c3090dc00ddf |
04-Apr-2011 |
William Wang <William.Wang@arm.com> |
ARM: Cleanup and small fixes to some NEON ops to match the spec.
Only certain bits of the cpacr can be written, some must be equal. Mult instructions that write the same register should do something sane |
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. |
8204:6c051a8df26a |
04-Apr-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Fix m5op parameters bug.
All the m5op parameters are 64 bits, but we were only sending 32 bits; and the static register indexes were incorrectly specified. |
8203:78b9f056d58a |
04-Apr-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Tag appropriate instructions as IsReturn |
8148:93982cb5044c |
17-Mar-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Fix subtle bug in LDM.
If the instruction faults mid-op the base register shouldn't be written back. |
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. |
8139:2b2efc67f6df |
17-Mar-2011 |
Matt Horsnell <Matt.Horsnell@arm.com> |
ARM: Rename registers used as temporary state by microops. |
8136:afcb66f4b964 |
17-Mar-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Previous change didn't end up setting instFlags, this does. |
8070:af0d29feb39d |
23-Feb-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Squash state on FPSCR stride or len write. |
8069:a3f5f75db279 |
23-Feb-2011 |
Matt Horsnell <Matt.Horsnell@arm.com> |
ARM: Mark store conditionals as such. |
8068:749581c26e71 |
23-Feb-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Do something for ISB, DSB, DMB |
8065:5143254707ed |
23-Feb-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Make Noop actually decode to a noop and set it's instflags. |
7858:ee6641d7c713 |
18-Jan-2011 |
Matt.Horsnell <Matt.Horsnell@arm.com> |
O3: Fix itstate prediction and recovery.
Any change of control flow now resets the itstate to 0 mask and 0 condition, except where the control flow alteration write into the cpsr register. These case, for example return from an iterrupt, require the predecoder to recover the itstate.
As there is a window of opportunity between the return from an interrupt changing the control flow at the head of the pipe and the commit of the update to the CPSR, the predecoder needs to be able to grab the ITstate early. This is now handled by setting the forcedItState inside a PCstate for the control flow altering instruction.
That instruction will have the correct mask/cond, but will not have a valid itstate until advancePC is called (note this happens to advance the execution). When the new PCstate is copy constructed it gets the itstate cond/mask, and upon advancing the PC the itstate becomes valid.
Subsequent advancing invalidates the state and zeroes the cond/mask. This is handled in isolation for the ARM ISA and should have no impact on other ISAs.
Refer arch/arm/types.hh and arch/arm/predecoder.cc for the details. |
7853:69aae4379062 |
18-Jan-2011 |
Matt Horsnell <Matt.Horsnell@ARM.com> |
ARM: The ARM decoder should not panic when decoding undefined holes is arch.
This can abort simulations when the fetch unit runs ahead and speculatively decodes instructions that are off the execution path. |
7848:cc5e64f8423f |
18-Jan-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Add support for moving predicated false dest operands from sources. |
7797:998b217dcae7 |
09-Dec-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Take advantage of new PCState syntax. |
7783:9b880b40ac10 |
07-Dec-2010 |
Giacomo Gabrielli <Giacomo.Gabrielli@arm.com> |
O3: Make all instructions that write a misc. register not perform the write until commit.
ARM instructions updating cumulative flags (ARM FP exceptions and saturation flags) are not serialized.
Added aliases for ARM FP exceptions and saturation flags in FPSCR. Removed write accesses to the FP condition codes for most ARM VFP instructions: only VCMP and VCMPE instructions update the FP condition codes. Removed a potential cause of seg. faults in the O3 model for NEON memory macro-ops (ARM). |
7782:9b87755cb699 |
07-Dec-2010 |
Min Kyu Jeong <minkyu.jeong@arm.com> |
O3: Support SWAP and predicated loads/store in ARM. |
7760:e93e7e0caae1 |
15-Nov-2010 |
Giacomo Gabrielli <Giacomo.Gabrielli@arm.com> |
CPU/ARM: Add SIMD op classes to CPU models and ARM ISA. |
7746:79adfecb2b8a |
15-Nov-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Fix SRS instruction to micro-code memory operation and register update.
Previously the SRS instruction attempted to writeback in initiateAcc() which worked until a recent change, but was incorrect. |
7732:a2c660de7787 |
08-Nov-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Add support for M5 ops in the ARM ISA |
7725:00ea9430643b |
08-Nov-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM/Alpha/Cpu: Change prefetchs to be more like normal loads.
This change modifies the way prefetches work. They are now like normal loads that don't writeback a register. Previously prefetches were supposed to call prefetch() on the exection context, so they executed with execute() methods instead of initiateAcc() completeAcc(). The prefetch() methods for all the CPUs are blank, meaning that they get executed, but don't actually do anything.
On Alpha dead cache copy code was removed and prefetches are now normal ops. They count as executed operations, but still don't do anything and IsMemRef is not longer set on them.
On ARM IsDataPrefetch or IsInstructionPreftech is now set on all prefetch instructions. The timing simple CPU doesn't try to do anything special for prefetches now and they execute with the normal memory code path. |
7720:65d338a8dba4 |
31-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ISA,CPU,etc: Create an ISA defined PC type that abstracts out ISA behaviors.
This change is a low level and pervasive reorganization of how PCs are managed in M5. Back when Alpha was the only ISA, there were only 2 PCs to worry about, the PC and the NPC, and the lsb of the PC signaled whether or not you were in PAL mode. As other ISAs were added, we had to add an NNPC, micro PC and next micropc, x86 and ARM introduced variable length instruction sets, and ARM started to keep track of mode bits in the PC. Each CPU model handled PCs in its own custom way that needed to be updated individually to handle the new dimensions of variability, or, in the case of ARMs mode-bit-in-the-pc hack, the complexity could be hidden in the ISA at the ISA implementation's expense. Areas like the branch predictor hadn't been updated to handle branch delay slots or micropcs, and it turns out that had introduced a significant (10s of percent) performance bug in SPARC and to a lesser extend MIPS. Rather than perpetuate the problem by reworking O3 again to handle the PC features needed by x86, this change was introduced to rework PC handling in a more modular, transparent, and hopefully efficient way.
PC type:
Rather than having the superset of all possible elements of PC state declared in each of the CPU models, each ISA defines its own PCState type which has exactly the elements it needs. A cross product of canned PCState classes are defined in the new "generic" ISA directory for ISAs with/without delay slots and microcode. These are either typedef-ed or subclassed by each ISA. To read or write this structure through a *Context, you use the new pcState() accessor which reads or writes depending on whether it has an argument. If you just want the address of the current or next instruction or the current micro PC, you can get those through read-only accessors on either the PCState type or the *Contexts. These are instAddr(), nextInstAddr(), and microPC(). Note the move away from readPC. That name is ambiguous since it's not clear whether or not it should be the actual address to fetch from, or if it should have extra bits in it like the PAL mode bit. Each class is free to define its own functions to get at whatever values it needs however it needs to to be used in ISA specific code. Eventually Alpha's PAL mode bit could be moved out of the PC and into a separate field like ARM.
These types can be reset to a particular pc (where npc = pc + sizeof(MachInst), nnpc = npc + sizeof(MachInst), upc = 0, nupc = 1 as appropriate), printed, serialized, and compared. There is a branching() function which encapsulates code in the CPU models that checked if an instruction branched or not. Exactly what that means in the context of branch delay slots which can skip an instruction when not taken is ambiguous, and ideally this function and its uses can be eliminated. PCStates also generally know how to advance themselves in various ways depending on if they point at an instruction, a microop, or the last microop of a macroop. More on that later.
Ideally, accessing all the PCs at once when setting them will improve performance of M5 even though more data needs to be moved around. This is because often all the PCs need to be manipulated together, and by getting them all at once you avoid multiple function calls. Also, the PCs of a particular thread will have spatial locality in the cache. Previously they were grouped by element in arrays which spread out accesses.
Advancing the PC:
The PCs were previously managed entirely by the CPU which had to know about PC semantics, try to figure out which dimension to increment the PC in, what to set NPC/NNPC, etc. These decisions are best left to the ISA in conjunction with the PC type itself. Because most of the information about how to increment the PC (mainly what type of instruction it refers to) is contained in the instruction object, a new advancePC virtual function was added to the StaticInst class. Subclasses provide an implementation that moves around the right element of the PC with a minimal amount of decision making. In ISAs like Alpha, the instructions always simply assign NPC to PC without having to worry about micropcs, nnpcs, etc. The added cost of a virtual function call should be outweighed by not having to figure out as much about what to do with the PCs and mucking around with the extra elements.
One drawback of making the StaticInsts advance the PC is that you have to actually have one to advance the PC. This would, superficially, seem to require decoding an instruction before fetch could advance. This is, as far as I can tell, realistic. fetch would advance through memory addresses, not PCs, perhaps predicting new memory addresses using existing ones. More sophisticated decisions about control flow would be made later on, after the instruction was decoded, and handed back to fetch. If branching needs to happen, some amount of decoding needs to happen to see that it's a branch, what the target is, etc. This could get a little more complicated if that gets done by the predecoder, but I'm choosing to ignore that for now.
Variable length instructions:
To handle variable length instructions in x86 and ARM, the predecoder now takes in the current PC by reference to the getExtMachInst function. It can modify the PC however it needs to (by setting NPC to be the PC + instruction length, for instance). This could be improved since the CPU doesn't know if the PC was modified and always has to write it back.
ISA parser:
To support the new API, all PC related operand types were removed from the parser and replaced with a PCState type. There are two warts on this implementation. First, as with all the other operand types, the PCState still has to have a valid operand type even though it doesn't use it. Second, using syntax like PCS.npc(target) doesn't work for two reasons, this looks like the syntax for operand type overriding, and the parser can't figure out if you're reading or writing. Instructions that use the PCS operand (which I've consistently called it) need to first read it into a local variable, manipulate it, and then write it back out.
Return address stack:
The return address stack needed a little extra help because, in the presence of branch delay slots, it has to merge together elements of the return PC and the call PC. To handle that, a buildRetPC utility function was added. There are basically only two versions in all the ISAs, but it didn't seem short enough to put into the generic ISA directory. Also, the branch predictor code in O3 and InOrder were adjusted so that they always store the PC of the actual call instruction in the RAS, not the next PC. If the call instruction is a microop, the next PC refers to the next microop in the same macroop which is probably not desirable. The buildRetPC function advances the PC intelligently to the next macroop (in an ISA specific way) so that that case works.
Change in stats:
There were no change in stats except in MIPS and SPARC in the O3 model. MIPS runs in about 9% fewer ticks. SPARC runs with 30%-50% fewer ticks, which could likely be improved further by setting call/return instruction flags and taking advantage of the RAS.
TODO:
Add != operators to the PCState classes, defined trivially to be !(a==b). Smooth out places where PCs are split apart, passed around, and put back together later. I think this might happen in SPARC's fault code. Add ISA specific constructors that allow setting PC elements without calling a bunch of accessors. Try to eliminate the need for the branching() function. Factor out Alpha's PAL mode pc bit into a separate flag field, and eliminate places where it's blindly masked out or tested in the PC. |
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. |
7692:8173327c9c65 |
01-Oct-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Clean up use of TBit and JBit.
Rather tha constantly using ULL(1) << PcXBitShift define those directly. Additionally, add some helper functions to further clean up the code. |
7648:3e561a5c0456 |
25-Aug-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Make VMSR, RFE PC/LR etc non speculative, and serializing |
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 |
7643:775ccd204013 |
25-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Seperate out the renamable bits in the FPSCR. |
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. |
7613:62159049ca81 |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
ARM: Implement DBG instruction that doesn't do much for now. |
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 |
7609:70e5fb74b4fa |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
ARM: Implement CLREX init/complete acc methods |
7605:94b2f78894ca |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
ARM: Implement DSB, DMB, ISB |
7603:66d853e566d2 |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
ARM: Implement CLREX |
7602:cd1930acae4e |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
ARM: BX instruction can be contitional if last instruction in a IT block
Branches are allowed to be the last instuction in an IT block. Before it was assumed that they could not. So Branches in thumb2 were Uncond. |
7599:f6bbf266f2c8 |
23-Aug-2010 |
Min Kyu Jeong <minkyu.jeong@arm.com> |
ARM: mark msr/mrs instructions as SerializeBefore/After Since miscellaneous registers bypass wakeup logic, force serialization to resolve data dependencies through them * * * ARM: adding non-speculative/serialize flags for instructions change CPSR |
7594:9c9b3648c732 |
23-Aug-2010 |
Gene Wu <Gene.Wu@arm.com> |
ARM: Temporary local variables can't conflict with isa parser operands. PC is an operand, so we can't have a temp called PC |
7593:aa32d1398dfd |
23-Aug-2010 |
Ali Saidi <Ali.Saidi@arm.com> |
ARM: Exclusive accesses must be double word aligned |
7590:27dbb92bbad5 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Clean up the ISA desc portion of the ARM memory instructions. |
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. |
7420:498b27bc326d |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement a version of mcr and mrc that works in user mode. |
7418:e81194228b6e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Move some miscellaneous instructions out of the decoder to share with thumb. |
7410:1589cdca3c6e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the bkpt instruction. |
7409:1ff897327905 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Make undefined instructions obey predication. |
7408:ee6949c5bb5b |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement support for the IT instruction and the ITSTATE bits of CPSR. |
7404:bfc74724914e |
02-Jun-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Implement the ARM TLB/Tablewalker. Needs performance improvements. |
7400:f6c9b27c4dbe |
02-Jun-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Implement ARM CPU interrupts |
7398:063002e7106b |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement conversion to/from half precision. |
7397:cbd950459a29 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Clean up VFP |
7396:53454ef35b46 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Clean up the implementation of the VFP instructions. |
7392:43b0cd94ced6 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the version of VMRS that writes to the APSR. |
7389:714dea5b5298 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VCMPE instruction. |
7388:293878a9d220 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix vcvtr so that it uses the rounding mode in the FPSCR. |
7387:079af601946a |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix saturation of VCVT from fp to integer. |
7386:23065556d48e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Compensate for ARM's underflow coming from -before- rounding, but x86's after. |
7385:493aea5e1006 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement flush to zero for destinations as well. |
7384:f12b4f28e5eb |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix up nans to match ARM's expected behavior. |
7382:b3c768629a54 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement flush to zero mode for VFP, and clean up some corner cases. |
7381:bc68c91e9814 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add barriers that make sure FP operations happen where they're supposed to. |
7380:baee640ca6a4 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the version of VCVT float to int that rounds towards zero. |
7379:92ef7238d230 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the floating/fixed point VCVT instructions. |
7378:de704acd042f |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add code to extract and record VFP exceptions. |
7377:ce388054b481 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP version of VCMP. |
7376:3b781776b2d9 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add support for VFP vector mode. |
7375:7095d84ffb36 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Introduce new VFP base classes that are optionally microops. |
7374:9a80d013b955 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement VCVT between double and single width FP. |
7373:65786254fdd1 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement vcvt between int and fp. Ignore rounding. |
7371:83612101a826 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP negated multiplies. |
7370:6fa1e296585d |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP versions of VMLA and VMLS. |
7369:f71b906540cf |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP version of vdiv and vsqrt. |
7368:3053e3587124 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP version of vsub. |
7367:8c3ec534f022 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP version of vadd. |
7366:4efa4733e66e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP version of vabs. |
7365:a7a6cc5f6a89 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP version of vneg. |
7364:9d34477e6adb |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VFP version of vmul. |
7361:e18233acf0be |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Make integer division by zero return a fault. |
7347:baefb46b29b2 |
02-Jun-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Undef instruction on invalid user CP15 access |
7345:4e7dc0c3f148 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the vstr instruction. |
7342:72166bc39ff8 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix the implementation of the VFP ldm and stm macroops.
There were four bugs in these instructions. First, the loaded value was being stored into a floating point register as floating point, changing the value as it was transfered. Second, the meaning of the "up" bit had been reversed. Third, the statically sized microop array wasn't bit enough for all possible inputs. It's now dynamically sized and should always be big enough. Fourth, the offset was stored as an unsigned 8 bit value. Negative offsets would look like moderately large positive offsets. |
7336:52dc042584d6 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VLDR instruction. |
7333:63e4f48e59d4 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the various versions of VMOV. |
7324:83dbdfec41ec |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VMRS instruction. |
7322:49cfb31a2fb7 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the VMSR instruction. |
7319:d4e9a5e31a38 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the udiv instruction. |
7318:64352bcff9f3 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the sdiv instruction. |
7315:3a635c897874 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the CPS instruction. |
7313:b0262368daa0 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the SRS instruction. |
7307:e22429e8f4a0 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Define the setend instruction. |
7303:6b70985664c8 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the strex instructions. |
7296:27c60324ec4d |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Respect the E bit of the CPSR when doing loads and stores. |
7294:fda2c00880db |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the V7 version of alignment checking. |
7292:f4d99c45743e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the RFE instruction. |
7283:ef8b6a2798cf |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the enterx and leavex instructions.
These enter and leave thumbEE mode. Currently thumbEE mode behaves exactly the same as Thumb mode, but at least this will make it -look- like we're enter and leaving it. The actual behavioral changes will be implemented in future changes. |
7282:547cddd4e837 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix the implementation of BX to work in thumbEE mode. |
7279:157b02cc0ba1 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Explicitly keep track of the second destination for double loads/stores. |
7262:1548c622852f |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the mrc and mcr instructions. |
7261:5ed14bce7261 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Rename the RevOp base class to something more generic. |
7257:272f94a04b54 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the bfc and bfi instructions. |
7254:f92b3246fa96 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the ubfx and sbfx instructions. |
7252:bba68021edca |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Decode the clz instruction. |
7251:5ca3c60f8b59 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the clz instruction. |
7249:ddf0cb9f0450 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the rbit instruction. |
7247:e39b1d7c514f |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement nop. |
7244:d7fa6d111644 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the ldrex instruction. |
7242:2b75b5ea079c |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the usad8 and usada8 instructions. |
7239:a370f76110e9 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the sel instruction. |
7236:7fdb1714f62e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the pkh instruction. |
7234:2a239f843dae |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement zero/sign extend instructions. |
7232:f633e1a3f644 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Generalize the saturation instruction bases for use in other instructions. |
7230:86187fa97285 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the 8/16 bit signed/unsigned add/subtract half instructions. |
7229:ed81380fd089 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix signed most significant multiply instructions. |
7228:09302e193402 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix multiply overflow flag setting. |
7226:dd34f566bbca |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the saturation instructions. |
7223:a2e1b4f22550 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement signed add/subtract and subtract/add. |
7221:99ae09123a46 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the unsigned 8 bit and 16 bit vector adds and subtracts. |
7219:0c995c5f8245 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the unsigned saturating instructions. |
7217:34621fef50c5 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the ssub instructions. |
7215:4fb71bcb1126 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the SADD8 and SADD16 instructions. |
7214:9eba696c4592 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Support instructions that set the GE bits when they write the condition codes. |
7209:1721e83dc2b6 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement the REV* instructions. |
7207:82cfe1198d6f |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Make LDM that loads the PC perform an interworking branch. |
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. |
7199:3e96b80d1b55 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement SVC (was SWI) outside of the decoder. |
7196:80c72fc2063b |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Fix multiply operations.
These fixes were provided by Ali and fix the saturation condition code and various multiply instructions. |
7193:91b7045a2d4b |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement signed saturating add and/or subtract instructions. |
7192:939e4ce4f1db |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implemented prefetch instructions/decoding (pli, pld, pldw). |
7188:1310866e4ed5 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add support for "SUBS PC, LR and related instructions". |
7187:53d0ec9111bc |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Make ldrs into the PC and ldm exception return do interworking branches. |
7185:13467caed8e1 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement ADR as separate from ADD. |
7184:c22d466f650a |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add support for interworking branch ALU instructions. |
7181:10f3db60741a |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Restrict the shift amount from a register to 8 bits. The shift amount when taken from a register is supposed to be truncated to an 8 bit value. |
7179:f9151566ca6e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Define the VFP load/store multiple instructions. |
7174:b8fe16a5e349 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Add floating point load/store microops. |
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. |
7162:97fe2d298f3e |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Remove special naming for the new version of multiply. |
7160:3f4333b1d4af |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement all integer multiply instructions. |
7156:192093645d75 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Define a new "movt" data processing instruction. |
7151:672a20bbd4ff |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Implement branch instructions external to the decoder. |
7146:f68d5f1f748c |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Remove the special naming from the new version of data processing 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. |
7132:83b433d6e600 |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Remove the special naming for the new memory instructions. These are the only memory instructions now. |
7128:01b4fff80dda |
02-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ARM: Pull double memory instructions out of the decoder. |
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. |