+ int i;
+
+ if (regno == PS_REGNUM || regno == -1)
+ supply_register (PS_REGNUM, regs + REG32_OFFSET_PSR);
+
+ if (regno == PC_REGNUM || regno == -1)
+ supply_register (PC_REGNUM, regs + REG32_OFFSET_PC);
+
+ if (regno == DEPRECATED_NPC_REGNUM || regno == -1)
+ supply_register (DEPRECATED_NPC_REGNUM, regs + REG32_OFFSET_NPC);
+
+ if (regno == Y_REGNUM || regno == -1)
+ supply_register (Y_REGNUM, regs + REG32_OFFSET_Y);
+
+ if ((regno >= G0_REGNUM && regno <= G7_REGNUM) || regno == -1)
+ {
+ if (regno == G0_REGNUM || regno == -1)
+ supply_register (G0_REGNUM, NULL); /* %g0 is always zero */
+ for (i = G1_REGNUM; i <= G7_REGNUM; i++)
+ {
+ if (regno == i || regno == -1)
+ supply_register (i, regs + REG32_OFFSET_GLOBAL +
+ ((i - G0_REGNUM) * 4));
+ }
+ }
+
+ if ((regno >= O0_REGNUM && regno <= O7_REGNUM) || regno == -1)
+ {
+ for (i = O0_REGNUM; i <= O7_REGNUM; i++)
+ {
+ if (regno == i || regno == -1)
+ supply_register (i, regs + REG32_OFFSET_OUT +
+ ((i - O0_REGNUM) * 4));
+ }
+ }
+
+ /* Inputs and Locals are stored onto the stack by by the kernel. */
+ if ((regno >= L0_REGNUM && regno <= I7_REGNUM) || regno == -1)
+ {
+ CORE_ADDR sp = read_register (SP_REGNUM);
+ char buf[4];
+
+ for (i = L0_REGNUM; i <= I7_REGNUM; i++)
+ {
+ if (regno == i || regno == -1)
+ {
+ target_read_memory (sp + ((i - L0_REGNUM) * 4),
+ buf, sizeof (buf));
+ supply_register (i, buf);
+ }
+ }
+ }
+
+ /* FIXME: If we don't set these valid, read_register_bytes() rereads
+ all the regs every time it is called! */
+ if (regno == WIM_REGNUM || regno == -1)
+ supply_register (WIM_REGNUM, NULL);
+ if (regno == TBR_REGNUM || regno == -1)
+ supply_register (TBR_REGNUM, NULL);
+ if (regno == CPS_REGNUM || regno == -1)
+ supply_register (CPS_REGNUM, NULL);