Re: [alpha] cleanup opDEC workaround

From: Ivan Kokshaysky (ink@jurassic.park.msu.ru)
Date: Wed Nov 21 2001 - 07:15:55 EST


On Tue, Nov 20, 2001 at 10:47:48AM -0800, Richard Henderson wrote:
> In the working case, we'll enter entIF with pc==cmpteq. Add 8 gives
> stt, subtract 4 gives addt, which is engineered to be a noop.

Argh. I was thinking too much about dummy_emul case and missed the fact
that instruction at pc-4 is actually executed in alpha_fp_emul()...

> Hmm. If fp emulation isn't compiled in, we shouldn't bother
> testing this, I think. Means you can't debug fp emulation via
> modules on Multia, but I'm pretty sure I don't care.

Yes, making opDEC_check stuff `#ifdef CONFIG_MATHEMU' would be
reasonable.

> I suppose the other alternative to get the testing code out of
> the normal entIF is to create a custom entIF that is installed
> only during opDEC testing. Seems too much work...

Agreed. Alternatively, it's possible to hack dummy_emul(), which
doesn't affect the normal case.

static long dummy_emul(unsigned long pc)
{
        if (opDEC_fix != 8)
                return 0;
        /* Trap in opDEC_check() */
        if (*(u32 *)pc == 0x5bff141f) /* addt $f31, $f31, $f31 */
                return 1; /* SRM updates PC correctly */
        /* Broken SRM. "Emulate" cmpteq in opDEC_check() */
        __asm__ __volatile__("cmpteq $f31, $f31, $f0\n");
        return 1;
}

Ivan.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Nov 23 2001 - 21:00:27 EST