On 02/01/2016 02:36 PM, Ulrich Weigand wrote:
> 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.

Right. The insn condition should make sure it fits already when matching the 
insn.

> What is the semantics for the abort code anyway?  It is supposed to be
> automatically truncated or not?

Not to my knowledge.  There seem to be a full 64 bit slot in the transaction 
diagnostic buffer where
this value will be copied to.

-Andreas-

Reply via email to