Hi All,
  I am getting the error message bellow while hacking my gcc backend.
Any suggestions on how to fix this?

error: insn does not satisfy its constraints:
(insn 25 50 26 2 (set (reg:HI 1 %r0 [33])
         (plus:HI (mem/s/j:HI (plus:HI (reg:HI 3 %r2)
                     (reg/v/f:HI 11 %i2h [orig:28 cell ] [28])) [0
<variable>.dod S2 A8])
             (reg:HI 1 %r0 [43]))) 8 {*addhi3} (insn_list:REG_DEP_TRUE 3
(insn_list:REG_DEP_TRUE 24 (nil)))
     (nil))


The md description for this instruction is:

;; addhi3
(define_expand "addhi3"
   [(set (match_operand:HI 0 "register_operand"             "")
        (plus:HI (match_operand:HI 1 "cool_addhi_operand"  "")
                 (match_operand:HI 2 "cool_addhi_operand"  "")))]
   ""
   "")

(define_insn "*addhi3"
   [(set (match_operand:HI 0 "register_operand"            "=r ,r  ,r")
        (plus:HI (match_operand:HI 1 "cool_addhi_operand" "%0 ,rim,r")
                 (match_operand:HI 2 "cool_addhi_operand" "rim,0  ,r")))]
   ""
  {
    operands[3] = simplify_gen_subreg (QImode, operands[0], HImode, 1);
    operands[4] = simplify_gen_subreg (QImode, operands[0], HImode, 0);

    operands[5] = simplify_gen_subreg (QImode, operands[1], HImode, 1);
    operands[6] = simplify_gen_subreg (QImode, operands[1], HImode, 0);

    operands[7] = simplify_gen_subreg (QImode, operands[2], HImode, 1);
    operands[8] = simplify_gen_subreg (QImode, operands[2], HImode, 0);

    if (!which_alternative)
        return "ADD\t%3,%7\n\tADDC\t%4,%8";
    else if (1 == which_alternative)
        return "ADD\t%3,%5\n\tADDC\t%4,%6";
    else
        return "ADD\t%3,%5,%8\n\tADDC\t%4,%5,%8";
   })

Regards,
  -Omar

Reply via email to