Inline assembly without inputs considered const/pure?

Matthias Pfaller leo@marco.de
Thu Feb 25 16:03:00 GMT 2016


On 02/25/2016 04:40 PM, Andrew Haley wrote:
> On 02/25/2016 03:36 PM, Matthias Pfaller wrote:
>> When gcc decides to inline mrsbasepri it will again be free to CSE the
>> mrs instructions :-(. Is it really just me having run into this problem?
>> How do other people solve the problem that __asm__ without input is
>> handled like a __attribute((const)) function?
> 
> Either with a memoryclobber, or make it volatile, or both.

I have a memoryclobber, but that's output and doesn't help for input.
And marking it volatile will avoid deleting it in all cases. But I want
to get it deleted when I don't need the return value. Its just getting
deleted by CSE I want to avoid. That's because I sometimes need

	dfi();
	... some code ...
	efi();

and sometimes I'd like to do

	sr = dfi();
	... some code ...
	rfi(sr);

In the first case I'd like gcc to delete the "mrs Rx,basepri". In the
second case I need it. Usually that works quite well, but when you do
multiple

	sr = dfi();
	...
	rfi(sr)

sequences in a function, gcc will CSE the later mrs opcodes. With the
__COUNTER__ trick I can avoid that. But when you are using this in
functions that get inlined you're off where you started...

regards, Matthias
-- 
Matthias Pfaller                          Software Entwicklung
marco Systemanalyse und Entwicklung GmbH  Tel   +49 8131 5161 41
Hans-Böckler-Str. 2, D 85221 Dachau       Fax   +49 8131 5161 66
http://www.marco.de/                      Email leo@marco.de
Geschäftsführer Martin Reuter             HRB 171775 Amtsgericht München



More information about the Gcc-help mailing list