arch-arm: Define an Affinity type

Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Change-Id: I42461de26886b1ba9e4db5b23a9fb970d3a1efd7
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/55705
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Giacomo Travaglini
2022-01-20 15:58:05 +00:00
parent 342ad01168
commit 03176aa025
3 changed files with 18 additions and 7 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010, 2012-2013, 2017-2018 ARM Limited
* Copyright (c) 2010, 2012-2013, 2017-2018, 2022 Arm Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -202,6 +202,13 @@ namespace ArmISA
Bitfield<11, 8> ltcoproc;
EndBitUnion(ExtMachInst)
BitUnion32(Affinity)
Bitfield<31, 24> aff3;
Bitfield<23, 16> aff2;
Bitfield<15, 8> aff1;
Bitfield<7, 0> aff0;
EndBitUnion(Affinity)
// Shift types for ARM instructions
enum ArmShiftType
{

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009-2014, 2016-2020 ARM Limited
* Copyright (c) 2009-2014, 2016-2020, 2022 Arm Limited
* All rights reserved.
*
* The license below extends only to copyright in the software and shall
@@ -199,13 +199,13 @@ getMPIDR(ArmSystem *arm_sys, ThreadContext *tc)
static RegVal
getAff2(ArmSystem *arm_sys, ThreadContext *tc)
{
return arm_sys->multiThread ? tc->socketId() << 16 : 0;
return arm_sys->multiThread ? tc->socketId() : 0;
}
static RegVal
getAff1(ArmSystem *arm_sys, ThreadContext *tc)
{
return arm_sys->multiThread ? tc->cpuId() << 8 : tc->socketId() << 8;
return arm_sys->multiThread ? tc->cpuId() : tc->socketId();
}
static RegVal
@@ -214,10 +214,14 @@ getAff0(ArmSystem *arm_sys, ThreadContext *tc)
return arm_sys->multiThread ? tc->threadId() : tc->cpuId();
}
RegVal
Affinity
getAffinity(ArmSystem *arm_sys, ThreadContext *tc)
{
return getAff2(arm_sys, tc) | getAff1(arm_sys, tc) | getAff0(arm_sys, tc);
Affinity aff = 0;
aff.aff0 = getAff0(arm_sys, tc);
aff.aff1 = getAff1(arm_sys, tc);
aff.aff2 = getAff2(arm_sys, tc);
return aff;
}
bool

View File

@@ -223,7 +223,7 @@ RegVal readMPIDR(ArmSystem *arm_sys, ThreadContext *tc);
RegVal getMPIDR(ArmSystem *arm_sys, ThreadContext *tc);
/** Retrieves MPIDR_EL1.{Aff2,Aff1,Aff0} affinity numbers */
RegVal getAffinity(ArmSystem *arm_sys, ThreadContext *tc);
Affinity getAffinity(ArmSystem *arm_sys, ThreadContext *tc);
static inline uint32_t
mcrMrcIssBuild(bool isRead, uint32_t crm, IntRegIndex rt, uint32_t crn,