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