qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 02/22] tcg/i386: Move constraint type check to tcg_target_


From: Richard Henderson
Subject: Re: [PATCH v2 02/22] tcg/i386: Move constraint type check to tcg_target_const_match
Date: Tue, 19 Jan 2021 09:19:51 -1000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

On 1/19/21 4:27 AM, Peter Maydell wrote:
> On Fri, 15 Jan 2021 at 21:14, Richard Henderson
> <richard.henderson@linaro.org> wrote:
>>
>> Rather than check the type when filling in the constraint,
>> check it when matching the constant.  This removes the only
>> use of the type argument to target_parse_constraint.
>>
>> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
>> ---
>>  tcg/i386/tcg-target.c.inc | 28 +++++++++++++++++-----------
>>  1 file changed, 17 insertions(+), 11 deletions(-)
>>
>> diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
>> index 050f3cb0b1..74637f654a 100644
>> --- a/tcg/i386/tcg-target.c.inc
>> +++ b/tcg/i386/tcg-target.c.inc
>> @@ -263,13 +263,13 @@ static const char 
>> *target_parse_constraint(TCGArgConstraint *ct,
>>          break;
>>
>>      case 'e':
>> -        ct->ct |= (type == TCG_TYPE_I32 ? TCG_CT_CONST : TCG_CT_CONST_S32);
>> +        ct->ct |= TCG_CT_CONST_S32;
>>          break;
>>      case 'Z':
>> -        ct->ct |= (type == TCG_TYPE_I32 ? TCG_CT_CONST : TCG_CT_CONST_U32);
>> +        ct->ct |= TCG_CT_CONST_U32;
>>          break;
>>      case 'I':
>> -        ct->ct |= (type == TCG_TYPE_I32 ? TCG_CT_CONST : TCG_CT_CONST_I32);
>> +        ct->ct |= TCG_CT_CONST_I32;
>>          break;
>>
>>      default:
>> @@ -286,14 +286,20 @@ static inline int 
>> tcg_target_const_match(tcg_target_long val, TCGType type,
>>      if (ct & TCG_CT_CONST) {
>>          return 1;
>>      }
>> -    if ((ct & TCG_CT_CONST_S32) && val == (int32_t)val) {
>> -        return 1;
>> -    }
>> -    if ((ct & TCG_CT_CONST_U32) && val == (uint32_t)val) {
>> -        return 1;
>> -    }
>> -    if ((ct & TCG_CT_CONST_I32) && ~val == (int32_t)~val) {
>> -        return 1;
>> +    if (TCG_TARGET_REG_BITS == 32 || type == TCG_TYPE_I32) {
> 
> Where does the TCG_TARGET_REG_BITS check come from? We weren't
> testing that in the old code in target_parse_constraint() that
> I can see.

Premature optimization and a separate change.
Dropped.


r~

> 
>> +        if (ct & (TCG_CT_CONST_S32 | TCG_CT_CONST_U32 | TCG_CT_CONST_I32)) {
>> +            return 1;
>> +        }
>> +    } else {
>> +        if ((ct & TCG_CT_CONST_S32) && val == (int32_t)val) {
>> +            return 1;
>> +        }
>> +        if ((ct & TCG_CT_CONST_U32) && val == (uint32_t)val) {
>> +            return 1;
>> +        }
>> +        if ((ct & TCG_CT_CONST_I32) && ~val == (int32_t)~val) {
>> +            return 1;
>> +        }
>>      }
>>      if ((ct & TCG_CT_CONST_WSZ) && val == (type == TCG_TYPE_I32 ? 32 : 64)) 
>> {
>>          return 1;
> 
> thanks
> -- PMM
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]