#
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>
|
#
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>
|
#
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>
|
#
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
|
#
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>
|
#
11671:520509f3e66c |
|
13-Oct-2016 |
Mitch Hayenga <mitch.hayenga@arm.com> |
isa,arm: Add missing AArch32 FP instructions
This commit adds missing non-predicated, scalar floating point instructions. Specifically VRINT* floating point integer rounding instructions and VSEL* floating point conditional selects.
Change-Id: I23cbd1389f151389ac8beb28a7d18d5f93d000e7 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Nathanael Premillieu <nathanael.premillieu@arm.com>
|
#
11513:cb3a401c45d7 |
|
02-Jun-2016 |
Andreas Sandberg <andreas.sandberg@arm.com> |
arm: Correctly check FP/SIMD access permission in aarch32
The current implementation of aarch32 FP/SIMD in gem5 assumes that EL1 and higher are all 32-bit. This breaks interprocessing since an aarch64 EL1 uses different enable/disable bits. This change updates the permission checks to according to what is prescribed by the ARM ARM.
Change-Id: Icdcef31b00644cfeebec00216b3993aa1de12b88 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Mitch Hayenga <mitch.hayenga@arm.com> Reviewed-by: Nathanael Premillieu <nathanael.premillieu@arm.com>
|
#
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".
|
#
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
|
#
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.
|
#
8303:5a95f1d2494e |
|
13-May-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Further break up condition code into NZ, C, V bits.
Break up the condition code bits into NZ, C, V registers. These are individually written and this removes some incorrect dependencies between instructions.
|
#
8301:858384f3af1c |
|
13-May-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Break up condition codes into normal flags, saturation, and simd.
This change splits out the condcodes from being one monolithic register into three blocks that are updated independently. This allows CPUs to not have to do RMW operations on the flags registers for instructions that don't write all flags.
|
#
8070:af0d29feb39d |
|
23-Feb-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Squash state on FPSCR stride or len write.
|
#
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).
|
#
7760:e93e7e0caae1 |
|
15-Nov-2010 |
Giacomo Gabrielli <Giacomo.Gabrielli@arm.com> |
CPU/ARM: Add SIMD op classes to CPU models and ARM ISA.
|
#
7648:3e561a5c0456 |
|
25-Aug-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Make VMSR, RFE PC/LR etc non speculative, and serializing
|
#
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.
|
#
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.
|
#
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.
|
#
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.
|