http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49468
--- Comment #5 from Kazumoto Kojima <kkojima at gcc dot gnu.org> 2011-06-27 06:39:40 UTC --- Argh, I also missed clobbers. Looks fine to me now, except that insn_and_split "*negdi2" forgot to set constraints and some minor coding style issues below. The first comment should be started with a capital letter and ended with a period. Also please follow GCC C coding style even for C program segments in .md file. C lines in the patch are started with a tab instead of 2 spaces. A long conditional should be broken like as (cond ? value0 : value1) instead of (cond ? value0 : value1) Please use braces " { int low_word = ... ... emit_insn (... DONE; }") instead of " int low_word = ... ... emit_insn (... DONE; ") especially when new variables are used, though those braces aren't required with the current gen* tools. > + emit_insn (gen_negsi_cond (operands[0], operands[1], operands[1], > + GEN_INT (1))); The first line has an extra space after the last comma and the indentation of the 2nd line doesn't match with GCC coding standard. BTW, you could use const[01]_rtx for GEN_INT ([01]): emit_insn (gen_negsi_cond (operands[0], operands[1], operands[1], const1_rtx)); There are similar extra white space + broken indentation issues: > +(define_insn_and_split "negsi_cond" > + [(set (match_operand:SI 0 "arith_reg_dest" "=r,r") > + (if_then_else:SI (eq:SI (reg:SI T_REG) > + (match_operand:SI 3 > "const_int_operand" "M,N")) ... > + emit_label_after (skip_neg_label, > + emit_insn (gen_negsi2 > (operands[0], operands[1]))); ... Perhaps mail or editor problem?