mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2025-03-14 20:00:17 +00:00
Support vectors in write registers
This commit is contained in:
parent
d8cd5db5ac
commit
cdb489d0cb
1 changed files with 49 additions and 18 deletions
|
@ -97,19 +97,47 @@ namespace Ryujinx.HLE.Debugger
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool GdbWriteRegister(ExecutionContext state, int gdbRegId, ulong value)
|
private bool GdbWriteRegister(ExecutionContext state, int gdbRegId, StringStream ss)
|
||||||
{
|
{
|
||||||
switch (gdbRegId)
|
switch (gdbRegId)
|
||||||
{
|
{
|
||||||
case >= 0 and <= 31:
|
case >= 0 and <= 31:
|
||||||
state.SetX(gdbRegId, value);
|
{
|
||||||
return true;
|
ulong value = ss.ReadLengthAsHex(16);
|
||||||
|
state.SetX(gdbRegId, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
case 32:
|
case 32:
|
||||||
state.DebugPc = value;
|
{
|
||||||
return true;
|
ulong value = ss.ReadLengthAsHex(8);
|
||||||
|
state.DebugPc = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
case 33:
|
case 33:
|
||||||
state.SetPstate((uint)value);
|
{
|
||||||
return true;
|
ulong value = ss.ReadLengthAsHex(8);
|
||||||
|
state.SetPstate((uint)value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case >= 34 and <= 65:
|
||||||
|
{
|
||||||
|
ulong value0 = ss.ReadLengthAsHex(16);
|
||||||
|
ulong value1 = ss.ReadLengthAsHex(16);
|
||||||
|
state.SetV(gdbRegId - 34, new V128(value0, value1));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case 66:
|
||||||
|
{
|
||||||
|
ulong value = ss.ReadLengthAsHex(8);
|
||||||
|
state.Fpsr = (FPSR)value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case 67:
|
||||||
|
{
|
||||||
|
ulong value = ss.ReadLengthAsHex(8);
|
||||||
|
state.Fpcr = (FPCR)value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -187,10 +215,10 @@ namespace Ryujinx.HLE.Debugger
|
||||||
goto unknownCommand;
|
goto unknownCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandReadGeneralRegisters();
|
CommandReadRegisters();
|
||||||
break;
|
break;
|
||||||
case 'G':
|
case 'G':
|
||||||
CommandWriteGeneralRegisters(ss);
|
CommandWriteRegisters(ss);
|
||||||
break;
|
break;
|
||||||
case 'H':
|
case 'H':
|
||||||
{
|
{
|
||||||
|
@ -220,14 +248,13 @@ namespace Ryujinx.HLE.Debugger
|
||||||
case 'p':
|
case 'p':
|
||||||
{
|
{
|
||||||
ulong gdbRegId = ss.ReadRemainingAsHex();
|
ulong gdbRegId = ss.ReadRemainingAsHex();
|
||||||
CommandReadGeneralRegister((int)gdbRegId);
|
CommandReadRegister((int)gdbRegId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'P':
|
case 'P':
|
||||||
{
|
{
|
||||||
ulong gdbRegId = ss.ReadUntilAsHex('=');
|
ulong gdbRegId = ss.ReadUntilAsHex('=');
|
||||||
ulong value = ss.ReadRemainingAsHex();
|
CommandWriteRegister((int)gdbRegId, ss);
|
||||||
CommandWriteGeneralRegister((int)gdbRegId, value);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'q':
|
case 'q':
|
||||||
|
@ -355,7 +382,7 @@ namespace Ryujinx.HLE.Debugger
|
||||||
CommandContinue(null);
|
CommandContinue(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandReadGeneralRegisters()
|
void CommandReadRegisters()
|
||||||
{
|
{
|
||||||
if (gThread == null)
|
if (gThread == null)
|
||||||
{
|
{
|
||||||
|
@ -373,7 +400,7 @@ namespace Ryujinx.HLE.Debugger
|
||||||
Reply(registers);
|
Reply(registers);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandWriteGeneralRegisters(StringStream ss)
|
void CommandWriteRegisters(StringStream ss)
|
||||||
{
|
{
|
||||||
if (gThread == null)
|
if (gThread == null)
|
||||||
{
|
{
|
||||||
|
@ -384,7 +411,11 @@ namespace Ryujinx.HLE.Debugger
|
||||||
var ctx = GetThread(gThread.Value);
|
var ctx = GetThread(gThread.Value);
|
||||||
for (int i = 0; i < GdbRegisterCount; i++)
|
for (int i = 0; i < GdbRegisterCount; i++)
|
||||||
{
|
{
|
||||||
GdbWriteRegister(ctx, i, ss.ReadLengthAsLEHex(GdbRegisterHexSize(i)));
|
if (!GdbWriteRegister(ctx, i, ss))
|
||||||
|
{
|
||||||
|
ReplyError();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ss.IsEmpty())
|
if (ss.IsEmpty())
|
||||||
|
@ -454,7 +485,7 @@ namespace Ryujinx.HLE.Debugger
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandReadGeneralRegister(int gdbRegId)
|
void CommandReadRegister(int gdbRegId)
|
||||||
{
|
{
|
||||||
if (gThread == null)
|
if (gThread == null)
|
||||||
{
|
{
|
||||||
|
@ -474,7 +505,7 @@ namespace Ryujinx.HLE.Debugger
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandWriteGeneralRegister(int gdbRegId, ulong value)
|
void CommandWriteRegister(int gdbRegId, StringStream ss)
|
||||||
{
|
{
|
||||||
if (gThread == null)
|
if (gThread == null)
|
||||||
{
|
{
|
||||||
|
@ -483,7 +514,7 @@ namespace Ryujinx.HLE.Debugger
|
||||||
}
|
}
|
||||||
|
|
||||||
var ctx = GetThread(gThread.Value);
|
var ctx = GetThread(gThread.Value);
|
||||||
if (GdbWriteRegister(ctx, gdbRegId, value))
|
if (GdbWriteRegister(ctx, gdbRegId, ss) && ss.IsEmpty())
|
||||||
{
|
{
|
||||||
ReplyOK();
|
ReplyOK();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue