arch-arm: correctly set floats from GDB on aarch64
aarch64 floating point registers are now stored as vector type, but this was not updated in the stub. Change-Id: I4a2bc1cea0eec9beeb5bbd49e2a868b9d5ed0a42 Reviewed-on: https://gem5-review.googlesource.com/c/14498 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>
This commit is contained in:
@@ -203,11 +203,13 @@ RemoteGDB::AArch64GdbRegCache::getRegs(ThreadContext *context)
|
||||
r.pc = context->pcState().pc();
|
||||
r.cpsr = context->readMiscRegNoEffect(MISCREG_CPSR);
|
||||
|
||||
for (int i = 0; i < 32*4; i += 4) {
|
||||
r.v[i + 0] = context->readFloatRegBits(i + 2);
|
||||
r.v[i + 1] = context->readFloatRegBits(i + 3);
|
||||
r.v[i + 2] = context->readFloatRegBits(i + 0);
|
||||
r.v[i + 3] = context->readFloatRegBits(i + 1);
|
||||
size_t base = 0;
|
||||
for (int i = 0; i < NumVecV8ArchRegs; i++) {
|
||||
auto v = (context->readVecReg(RegId(VecRegClass, i))).as<VecElem>();
|
||||
for (size_t j = 0; j < NumVecElemPerVecReg; j++) {
|
||||
r.v[base] = v[j];
|
||||
base++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,11 +229,14 @@ RemoteGDB::AArch64GdbRegCache::setRegs(ThreadContext *context) const
|
||||
// mapped.
|
||||
context->setIntReg(INTREG_SPX, r.spx);
|
||||
|
||||
for (int i = 0; i < 32*4; i += 4) {
|
||||
context->setFloatRegBits(i + 2, r.v[i + 0]);
|
||||
context->setFloatRegBits(i + 3, r.v[i + 1]);
|
||||
context->setFloatRegBits(i + 0, r.v[i + 2]);
|
||||
context->setFloatRegBits(i + 1, r.v[i + 3]);
|
||||
size_t base = 0;
|
||||
for (int i = 0; i < NumVecV8ArchRegs; i++) {
|
||||
auto v = (context->getWritableVecReg(
|
||||
RegId(VecRegClass, i))).as<VecElem>();
|
||||
for (size_t j = 0; j < NumVecElemPerVecReg; j++) {
|
||||
v[j] = r.v[base];
|
||||
base++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ class RemoteGDB : public BaseRemoteGDB
|
||||
uint64_t spx;
|
||||
uint64_t pc;
|
||||
uint32_t cpsr;
|
||||
uint32_t v[32*4];
|
||||
VecElem v[NumVecV8ArchRegs * NumVecElemPerVecReg];
|
||||
} M5_ATTR_PACKED r;
|
||||
public:
|
||||
char *data() const { return (char *)&r; }
|
||||
|
||||
Reference in New Issue
Block a user