History log of /gem5/src/arch/arm/isa/insts/mem.isa
Revision Date Author Comments
# 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>


# 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.


# 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


# 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.


# 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.


# 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.


# 8203:78b9f056d58a 04-Apr-2011 Ali Saidi <Ali.Saidi@ARM.com>

ARM: Tag appropriate instructions as IsReturn


# 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.


# 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.


# 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.


# 7313:b0262368daa0 02-Jun-2010 Gabe Black <gblack@eecs.umich.edu>

ARM: Implement the SRS instruction.


# 7303:6b70985664c8 02-Jun-2010 Gabe Black <gblack@eecs.umich.edu>

ARM: Implement the strex instructions.


# 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.


# 7279:157b02cc0ba1 02-Jun-2010 Gabe Black <gblack@eecs.umich.edu>

ARM: Explicitly keep track of the second destination for double loads/stores.


# 7205:e3dfcdf19561 02-Jun-2010 Gabe Black <gblack@eecs.umich.edu>

ARM: Implement the swp and swpb instructions.


# 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.


# 7119:5ad962dec52f 02-Jun-2010 Gabe Black <gblack@eecs.umich.edu>

ARM: Define the load instructions from outside the decoder.