Er, for a legacy architecture, register_offset_hack(i) (aka
current_regcache->descr->register_offset) should be REGISTER_BYTE(i).
See init_legacy_regcache_descr.
Sounds like the MIPS is sneeking past:
/* If an old style architecture, fill in the remainder of the
register cache descriptor using the register macros. */
if (!gdbarch_pseudo_register_read_p (gdbarch)
&& !gdbarch_pseudo_register_write_p (gdbarch)
&& !gdbarch_register_type_p (gdbarch))
{
descr->legacy_p = 1;
init_legacy_regcache_descr (gdbarch, descr);
return descr;
}