Hi,
On 20/06/16 19:01, Michael Matz wrote:
> On Mon, 20 Jun 2016, Andrew Haley wrote:
>
>> On 20/06/16 18:36, Michael Matz wrote:
>>> I see zero gain by deprecating them and only churn. What would be the
>>> advantage again?
>>
>> Correctness.
>
> As said in the various threads about basic asms, all correctness
> problems can be solved by making GCC more conservative in handling them
> (or better said: not making it less conservative).
Well, yes. That's exactly why we've agreed to change basic asms to
make them clobber memory, i.e. to make GCC more conservative.
> If you talk about cases where basic asms diddle registers expecting GCC to
> have placed e.g. local variables into specific ones (without using local
> reg vars, or extended asm) I won't believe any claims ...
>
>> It is very likely that many of these basic asms are not
>> robust
>
> ... of them being very likely without proof. They will have stopped
> working with every change in compilation options or compiler
> version. In contrast I think those that did survive a couple years
> in software very likely _are_ correct, under the then documented (or
> implicit) assumptions. Those usually are: clobbers and uses memory,
> processor state and fixed registers.
Well, maybe. It's also fairly likely that many work by accident. IMO
this is more of a statement of hope than any kind of reasonable
expectation.
>> in the face of compiler changes because they don't declare their
>> dependencies and therefore work only by accident.
>
> Then the compiler better won't change into less conservative
> handling of basic asms.
Repeat, repeat: the change being made is to make gcc MORE
conservative.
> You see, the experiment shows that there's a gazillion uses of basic
> asms out there. Deprecating them means that each and every one of
> them (for us alone that's 540 something, including testsuite and
> boehm) has to be changed from asm("body") into asm("body" : : :
> "memory") (give and take some syntax for also clobbering flags).
> Alternatively rewrite the body to actually make use of extended asm.
> I guarantee you that a non-trivial percentage will be wrong _then_
> while they work fine now. Even if it weren't so it still would be
> silly if GCC simply could regard the former as the latter
> internally.
That's what we're doing.
Andrew.