Missing file

slava 2006-07-07 04:18:40 +00:00
parent c5a6f75488
commit ca54e6b32b
1 changed files with 34 additions and 0 deletions

34
vm/cpu-ppc.S Normal file
View File

@ -0,0 +1,34 @@
/* Thanks to Joshua Grams for this code.
On PowerPC processors, we must flush the instruction cache manually
after writing to the code heap.
Callable from C as
void flush_icache(void *start, int len)
This function is called from compiler.c. */
#ifdef __APPLE__
#define MANGLE(sym) _##sym
#else
#define MANGLE(sym) sym
#endif
.globl MANGLE(flush_icache)
MANGLE(flush_icache):
/* compute number of cache lines to flush */
add r4,r4,r3
clrrwi r3,r3,5 /* align addr to next lower cache line boundary */
sub r4,r4,r3 /* then n_lines = (len + 0x1f) / 0x20 */
addi r4,r4,0x1f
srwi. r4,r4,5 /* note '.' suffix */
beqlr /* if n_lines == 0, just return. */
mtctr r4 /* flush cache lines */
0: dcbf 0,r3 /* for each line... */
sync
icbi 0,r3
addi r3,r3,0x20
bdnz 0b
sync /* finish up */
isync
blr