Subject: CVS commit: syssrc
To: None <source-changes@netbsd.org>
From: Ignatios Souvatzis <is@netbsd.org>
List: source-changes
Date: 11/25/1999 12:30:41
Module Name:	syssrc
Committed By:	is
Date:		Thu Nov 25 20:30:40 UTC 1999

Modified Files:
	syssrc/sys/arch/amiga/amiga: sys_machdep.c
	syssrc/sys/arch/atari/atari: sys_machdep.c
	syssrc/sys/arch/hp300/hp300: sys_machdep.c
	syssrc/sys/arch/mvme68k/mvme68k: sys_machdep.c
	syssrc/sys/arch/next68k/next68k: sys_machdep.c
	syssrc/sys/arch/x68k/x68k: sys_machdep.c

Log Message:
From the 68040 User Manual, page 4-10:

"To fully support self-modifying code in any situation, it is imperative that
a CPUSHA intrcution is executed before the execution of the first self-modified
instruction. The CPUSHA instruction has the effect of ensuring that there is
no stale data iin memory, the pipeline is flushed, and instruction prefetches
are repeated and taken from external memory."

I verified that this is the only way (I can think of) to make the sigtramp
regression test work on 68040. doing cpushl dc; cinvl ic; over the affected
address range, then nop (to synchronize the pipeline) is not enough; apparently
the nop does not FLUSH the pipeline and prefetch...

Note that the 68060 UM has copied the above cited passage, but in fact this is
not true. This might be connected to the fact that the 68060 does ensure
memory access order under most conditions.


To generate a diff of this commit:
cvs rdiff -r1.25 -r1.26 syssrc/sys/arch/amiga/amiga/sys_machdep.c
cvs rdiff -r1.20 -r1.21 syssrc/sys/arch/atari/atari/sys_machdep.c
cvs rdiff -r1.26 -r1.27 syssrc/sys/arch/hp300/hp300/sys_machdep.c
cvs rdiff -r1.18 -r1.19 syssrc/sys/arch/mvme68k/mvme68k/sys_machdep.c
cvs rdiff -r1.8 -r1.9 syssrc/sys/arch/next68k/next68k/sys_machdep.c
cvs rdiff -r1.17 -r1.18 syssrc/sys/arch/x68k/x68k/sys_machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.