Hi Eric.

    +(define_insn "*plus_sltu<W:mode>_vis3"
    +  [(set (match_operand:W 0 "register_operand" "=r")
    +   (plus:W (ltu:W (match_operand 2 "icc_register_operand" "X")
    +                  (const_int 0))
    +           (match_operand:W 1 "arith_operand" "rI")))]
    +  "TARGET_ARCH64 && TARGET_VIS3
    +   && (GET_MODE (operands[2]) == CCXmode || GET_MODE (operands[2]) == 
CCXCmode)"
    +  "addxc\t%%g0, %1, %0"
    +  [(set_attr "type" "ialuX")])

    [...]

    +(define_insn "*minus_neg_sltu<W:mode>_subxc"
    +  [(set (match_operand:W 0 "register_operand" "=r")
    +   (minus:W (neg:W (ltu:W (match_operand 2 "icc_register_operand" "X")
    +                          (const_int 0)))
    +            (match_operand:W 1 "arith_operand" "rI")))]
    +  "TARGET_ARCH64 && TARGET_SUBXC
    +   && (GET_MODE (operands[2]) == CCXmode || GET_MODE (operands[2]) == 
CCXCmode)"
    +  "subxc\t%%g0, %1, %0"

    [... etc ...]

Note that the ADDXC, ADDXCCC, SUBXC and SUBXCCC instructions do not
support immediate operands.  Hence the patch breaks vis3-enabling arches
and niagara-7.

(Yes, ADXCC and SUBXCC both support immediate operands, it can be
confusing :/)

Reply via email to