In my VM, the X_REGS class is a generic 64bit regsiter class that can hold
both 64bit DImode and 64bit DFmode.
Such class does not allow direct constant loading, so in 4.3.3 I had:

enum reg_class
xxx_preferred_reload_class(rtx x, enum reg_class regclass)
{
        enum machine_mode mode = GET_MODE(x);

        if (regclass == NO_REGS ||
            ((GET_CODE(x) == CONST_INT ||
              GET_CODE(x) == CONST_DOUBLE) && regclass == X_REGS))
                return NO_REGS;
        switch (mode) {
        case DImode:
        case SFmode:
        case DFmode:
                return X_REGS;
        default:
                break;
        }

        return regclass;
}

This was working fine with 4.3.3, while with 4.4 I get an error like if GCC was 
trying
to load a const_int directly anyway:

./csrc/test_sha512.c:294: error: insn does not satisfy its constraints:
(insn 870 869 43 2 ./csrc/test_sha512.c:200 (set (reg:DI 55 x0)
        (const_int 7640891576956012808 [0x6a09e667f3bcc908])) 31 {movdi} (nil))
./csrc/test_sha512.c:294: internal compiler error: in 
reload_cse_simplify_operands, at postreload.c:396


Any hints?


 - Jamie



      

Reply via email to