gem5.git
14 years agoARM: Introduce new VFP base classes that are optionally microops.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Introduce new VFP base classes that are optionally microops.

14 years agoARM: Implement VCVT between double and single width FP.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement VCVT between double and single width FP.

14 years agoARM: Implement vcvt between int and fp. Ignore rounding.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement vcvt between int and fp. Ignore rounding.

14 years agoARM: Consolidate the VFP register index computation code.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Consolidate the VFP register index computation code.

14 years agoARM: Implement the VFP negated multiplies.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement the VFP negated multiplies.

14 years agoARM: Implement the VFP versions of VMLA and VMLS.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement the VFP versions of VMLA and VMLS.

14 years agoARM: Implement the VFP version of vdiv and vsqrt.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement the VFP version of vdiv and vsqrt.

14 years agoARM: Implement the VFP version of vsub.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement the VFP version of vsub.

14 years agoARM: Implement the VFP version of vadd.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement the VFP version of vadd.

14 years agoARM: Implement the VFP version of vabs.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement the VFP version of vabs.

14 years agoARM: Implement the VFP version of vneg.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement the VFP version of vneg.

14 years agoARM: Implement the VFP version of vmul.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement the VFP version of vmul.

14 years agoARM: Move the VFP data operation decode into a function.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Move the VFP data operation decode into a function.

14 years agoARM: Implement and update the DFSR and IFSR registers on faults.
Gabe Black [Wed, 2 Jun 2010 17:58:14 +0000 (12:58 -0500)]
ARM: Implement and update the DFSR and IFSR registers on faults.

14 years agoARM: Make integer division by zero return a fault.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Make integer division by zero return a fault.

14 years agoARM: Add in some missing SCTLR fields.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Add in some missing SCTLR fields.

14 years agoARM: Decode ARM unconditional MRC and MCR instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Decode ARM unconditional MRC and MCR instructions.

14 years agoARM: Move the CP15 decode block into a function.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Move the CP15 decode block into a function.

14 years agoARM: Decode the unconditional version of ARM fp instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Decode the unconditional version of ARM fp instructions.

14 years agoARM: Move the FP decode blocks into functions.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Move the FP decode blocks into functions.

14 years agoARM: Warn/ignore when TLB maintenance operations are performed.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Warn/ignore when TLB maintenance operations are performed.

14 years agoARM: Handle accesses to TLBTR.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Handle accesses to TLBTR.

14 years agoARM: Handle accesses to the DACR.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Handle accesses to the DACR.

14 years agoARM: Handle accesses to TTBR0 and TTBR1.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Handle accesses to TTBR0 and TTBR1.

14 years agoARM: Convert the CP15 registers from MPU to MMU.
Gabe Black [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Convert the CP15 registers from MPU to MMU.

14 years agoARM: Add some support for wfi/wfe/yield/etc
Ali Saidi [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Add some support for wfi/wfe/yield/etc

14 years agoARM: Move PC mode bits around so they can be used for exectrace
Ali Saidi [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Move PC mode bits around so they can be used for exectrace

14 years agoARM: Add a traceflag to print cpsr
Ali Saidi [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Add a traceflag to print cpsr

14 years agoARM: Undef instruction on invalid user CP15 access
Ali Saidi [Wed, 2 Jun 2010 17:58:13 +0000 (12:58 -0500)]
ARM: Undef instruction on invalid user CP15 access

14 years agoARM: Decode the VSTR instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Decode the VSTR instruction.

14 years agoARM: Implement the vstr instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Implement the vstr instruction.

14 years agoARM: BXJ should be BX when there is no J support
Ali Saidi [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: BXJ should be BX when there is no J support

14 years agoARM: Make sure macroops aren't interrupted midinstruction.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Make sure macroops aren't interrupted midinstruction.

Do this by setting the delayed commit flag for all but the last microop.

14 years agoARM: Fix the implementation of the VFP ldm and stm macroops.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
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.

14 years agoSimple CPU: Make the FloatRegs trace flag do something.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
Simple CPU: Make the FloatRegs trace flag do something.

14 years agoARM: Fix up thumb decoding of coproc instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Fix up thumb decoding of coproc instructions.

14 years agoARM: Clean up some redundancy and fault behavior for unimplemented thumb MCR, MRC.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Clean up some redundancy and fault behavior for unimplemented thumb MCR, MRC.

14 years agoCPU: Reset fetch offset after a exception
Ali Saidi [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
CPU: Reset fetch offset after a exception

14 years agoARM: Decode the VLDR instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Decode the VLDR instruction.

14 years agoARM: Implement the VLDR instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Implement the VLDR instruction.

14 years agoARM: Decode all the various forms of vmov.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Decode all the various forms of vmov.

14 years agoARM: Make VFP load/store and 64 bit move decode correspond with CP10 and CP11.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Make VFP load/store and 64 bit move decode correspond with CP10 and CP11.

14 years agoARM: Implement the various versions of VMOV.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Implement the various versions of VMOV.

14 years agoARM: Add a new RegImmOp base class.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Add a new RegImmOp base class.

14 years agoARM: Add a RegRegImmOp base class.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Add a RegRegImmOp base class.

14 years agoARM: Widen the immediate fields in the misc instruction classes.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Widen the immediate fields in the misc instruction classes.

14 years agoARM: Add a function to decode VFP modified immediate constants.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Add a function to decode VFP modified immediate constants.

14 years agoARM: Add a function to decode SIMD modified immediate constants.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Add a function to decode SIMD modified immediate constants.

14 years agoARM: Add fp operands to operands.isa.
Gabe Black [Wed, 2 Jun 2010 17:58:12 +0000 (12:58 -0500)]
ARM: Add fp operands to operands.isa.

14 years agoARM: Decode the VMRS instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Decode the VMRS instruction.

14 years agoARM: Update the set of FP related miscregs.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Update the set of FP related miscregs.

14 years agoARM: Implement the VMRS instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Implement the VMRS instruction.

14 years agoARM: Decode the VMSR instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Decode the VMSR instruction.

14 years agoARM: Implement the VMSR instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Implement the VMSR instruction.

14 years agoARM: Decode 8, 16, and 32 bit transfers between core and extension (fp) registers.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Decode 8, 16, and 32 bit transfers between core and extension (fp) registers.

14 years agoARM: Ignore attempts to disable coprocessors that aren't implemented anyway.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Ignore attempts to disable coprocessors that aren't implemented anyway.

14 years agoARM: Implement the udiv instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Implement the udiv instruction.

14 years agoARM: Implement the sdiv instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Implement the sdiv instruction.

14 years agoARM: Ignore writing a bad mode to CPSR with MSR.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Ignore writing a bad mode to CPSR with MSR.

14 years agoARM: Decode the CPS instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Decode the CPS instruction.

14 years agoARM: Implement the CPS instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Implement the CPS instruction.

14 years agoARM: Decode the SRS instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Decode the SRS instruction.

14 years agoARM: Implement the SRS instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Implement the SRS instruction.

14 years agoARM: Add a base class for SRS.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Add a base class for SRS.

14 years agoARM: Implement a badMode function that says whether a mode is legal.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Implement a badMode function that says whether a mode is legal.

14 years agoARM: Allow flattening into any mode.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Allow flattening into any mode.

14 years agoARM: Decode TBB and TBH.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Decode TBB and TBH.

14 years agoARM: Decode the setend instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:11 +0000 (12:58 -0500)]
ARM: Decode the setend instruction.

14 years agoARM: Define the setend instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Define the setend instruction.

14 years agoARM: Make a base class for instructions that use only an immediate.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Make a base class for instructions that use only an immediate.

14 years agoARM: Decode the arm version of ldrexd.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Decode the arm version of ldrexd.

14 years agoARM: Decode the strex instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Decode the strex instructions.

14 years agoARM: Implement the strex instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Implement the strex instructions.

14 years agoARM: Set CPSR.E to SCTLR.EE on faults.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Set CPSR.E to SCTLR.EE on faults.

14 years agoARM: Warn about not implementing MPU translation, not panic about MMU.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Warn about not implementing MPU translation, not panic about MMU.

We'll start out with a stbu version of PMSA and switch over to VMSA for the
full implementation.

14 years agoARM: Ignore/warn on accesses to the DRBAR, DRACR, and DRSR registers.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Ignore/warn on accesses to the DRBAR, DRACR, and DRSR registers.

14 years agoARM: Allow access to the RGNR register.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Allow access to the RGNR register.

14 years agoARM: Make the MPUIR register report that 1 unified data region is supported.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Make the MPUIR register report that 1 unified data region is supported.

14 years agoARM: Ignore/warn on accesses to the BPIALLIS and BPIALL registers.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Ignore/warn on accesses to the BPIALLIS and BPIALL registers.

14 years agoARM: Respect the E bit of the CPSR when doing loads and stores.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Respect the E bit of the CPSR when doing loads and stores.

14 years agoARM: Zero the micropc when vectoring to a fault.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Zero the micropc when vectoring to a fault.

14 years agoARM: Implement the V7 version of alignment checking.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Implement the V7 version of alignment checking.

14 years agoARM: Decode the RFE instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Decode the RFE instruction.

14 years agoARM: Implement the RFE instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Implement the RFE instruction.

14 years agoARM: Add a base class for the RFE instruction.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Add a base class for the RFE instruction.

14 years agoARM: Make sure some undefined thumb32 instructions fault.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Make sure some undefined thumb32 instructions fault.

14 years agoARM: Squash the low order bits of the PC when performing a regular branch.
Gabe Black [Wed, 2 Jun 2010 17:58:10 +0000 (12:58 -0500)]
ARM: Squash the low order bits of the PC when performing a regular branch.

14 years agoARM: When changing the CPSR and branching, make sure the branch is second.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: When changing the CPSR and branching, make sure the branch is second.

14 years agoARM: Ignore/warn when CSSELR or CCSIDR are accessed.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Ignore/warn when CSSELR or CCSIDR are accessed.

These registers provide information about the caches. Since we can't provide
that information, these will be harmlessly inert.

14 years agoARM: Ignore/warn access to the bpimva registers.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Ignore/warn access to the bpimva registers.

14 years agoARM: Ignore/warn on accesses to the dccmvac register.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Ignore/warn on accesses to the dccmvac register.

14 years agoARM: Decode the enterx and leavex instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Decode the enterx and leavex instructions.

14 years agoARM: Implement the enterx and leavex instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
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.

14 years agoARM: Fix the implementation of BX to work in thumbEE mode.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Fix the implementation of BX to work in thumbEE mode.

14 years agoARM: When an instruction is intentionally undefined, fault on it.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: When an instruction is intentionally undefined, fault on it.

14 years agoARM: Decode the thumb version of the ldrd and strd instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Decode the thumb version of the ldrd and strd instructions.

14 years agoARM: Explicitly keep track of the second destination for double loads/stores.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Explicitly keep track of the second destination for double loads/stores.

14 years agoARM: Decode the thumb32 load byte/memory hint instructions.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Decode the thumb32 load byte/memory hint instructions.

14 years agoARM: Decode the load halfword, memory hints instructions for 32 bit Thumb.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Decode the load halfword, memory hints instructions for 32 bit Thumb.

14 years agoARM: Ignore/warn on accesses to icimvau.
Gabe Black [Wed, 2 Jun 2010 17:58:09 +0000 (12:58 -0500)]
ARM: Ignore/warn on accesses to icimvau.