Andreas Krebbel wrote: > (define_insn "*tabort_1" > - [(unspec_volatile [(match_operand:SI 0 "shift_count_or_setmem_operand" > "Y")] > + [(unspec_volatile [(match_operand:SI 0 "addrreg_or_constint_operand" > "a,n")] > UNSPECV_TABORT)] > "TARGET_HTM && operands != NULL" > - "tabort\t%Y0" > + "@ > + tabort\t0(%0) > + tabort\t%0" > + [(set_attr "op_type" "S")]) > + > +(define_insn "*tabort_1_plus" > + [(unspec_volatile [(plus:SI (match_operand:SI 0 "register_operand" "a") > + (match_operand:SI 1 "const_int_operand" "J"))] > + UNSPECV_TABORT)] > + "TARGET_HTM && operands != NULL" > + "tabort\t%1(%0)"
This seems dangerous: const_int_operand may match a constant that does not fit into the "J" constraint, which would lead to an abort in reload. What is the semantics for the abort code anyway? It is supposed to be automatically truncated or not? Bye, Ulrich -- Dr. Ulrich Weigand GNU/Linux compilers and toolchain ulrich.weig...@de.ibm.com