[Patch,AVR]: Fix PR52496: Add memory barriers to built-ins

Georg-Johann Lay avr@gjlay.de
Wed Mar 7 12:40:00 GMT 2012


This patch adds memory barriers to

__builtin_avr_nop
__builtin_avr_sei
__builtin_avr_cli
__builtin_avr_wdr
__builtin_avr_sleep
__builtin_avr_delay_cycles

so that their code cannot be dragged over memory accesses.

Ok for trunk?

	PR target/52496
	* config/avr/avr.c (avr_mem_clobber): New static function.
	(avr_expand_delay_cycles): Add memory clobber operand to
	delay_cycles_1, delay_cycles_2, delay_cycles_3, delay_cycles_4.
	* config/avr/avr.md (unspec): Add UNSPEC_MEMORY_BARRIER.
	(enable_interrupt, disable_interrupt): New expander.
	(nopv, sleep, wdr): New expanders.
	(delay_cycles_1): Add memory clobber.
	(delay_cycles_2): Add memory clobber.
	(delay_cycles_3): Add memory clobber.
	(delay_cycles_4): Add memory clobber.
	(cli_sei): New insn from former "enable_interrupt",
	"disable_interrupt" with memory clobber.
	(*wdt): New insn from former "wdt" with memory clobber.
	(*sleep): New insn from former "sleep" with memory clobber.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: builtin-mem-barrier.diff
Type: text/x-patch
Size: 8436 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20120307/a647ab93/attachment.bin>


More information about the Gcc-patches mailing list