[PATCH 6/9] S/390: Get rid of Y constraint in tabort.

Andreas Krebbel krebbel@linux.vnet.ibm.com
Tue Feb 23 14:28:00 GMT 2016


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-



More information about the Gcc-patches mailing list