2014-12-07 12:51 GMT+03:00 Richard Sandiford <rdsandif...@googlemail.com>:
> Ilya Enkovich <enkovich....@gmail.com> writes:
>> diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
>> index 88435d6..9019ed8 100644
>> --- a/gcc/config/i386/i386.md
>> +++ b/gcc/config/i386/i386.md
>> @@ -10958,6 +10958,24 @@
>>  ;; Basic conditional jump instructions.
>>  ;; We ignore the overflow flag for signed branch instructions.
>>
>> +(define_insn "*jcc_1_bnd"
>> +  [(set (pc)
>> +     (if_then_else (match_operator 1 "ix86_comparison_operator"
>> +                                   [(reg FLAGS_REG) (const_int 0)])
>> +                   (label_ref (match_operand 0))
>> +                   (pc)))]
>> +  "TARGET_MPX && ix86_bnd_prefixed_insn_p (insn)"
>> +  "bnd %+j%C1\t%l0"
>> +  [(set_attr "type" "ibr")
>> +   (set_attr "modrm" "0")
>> +   (set (attr "length")
>> +        (if_then_else (and (ge (minus (match_dup 0) (pc))
>> +                               (const_int -126))
>> +                           (lt (minus (match_dup 0) (pc))
>> +                               (const_int 128)))
>> +          (const_int 3)
>> +          (const_int 7)))])
>> +
>
> Sorry, looking at this again, shouldn't the offset be -125 rather
> than -126?  The pc in:
>
>    (ge (minus (match_dup 0) (pc))
>        (const_int -126))
>
> is the start of the instruction, so we need to add the length
> of the jump itself to the real minimum range of -128.

You are right.  Similarly upper bound should be changed from 128 to 129.

Thanks,
Ilya

>
> Thanks,
> Richard

Reply via email to