Probably because -O3 automatically make short functions inline so local_sb1___flush_cache_all disappears asm("sb1___flush_cache_all_ipi = local_sb1___flush_cache_all"); ^^^^^^^^^I don't know whether this trick is safe for auto-inlining. as for the problem of adding prefetch to memcpy, I am not famliar with SB1250, but as of version 2.4.22, arch/mips/lib/memcpy.S already support using MIPS IV prefetch macrohat wrote: >Dear Fuxin Zhang: > >Thinks for your help! > >Now i have another question, I use mips-linux-gcc which is ported from gcc-3.2.3 by Broadcom to compile linux kernel,when I use "-O2" or "-Os" option, it can complete successfully, but if i use "-O3" option, it can not complete.Enclosed is the err log and souce code. >Any help would be really appreciated. > >err log: > >arch/mips64/mm/mm.o: In function `sb1___flush_cache_all': >arch/mips64/mm/mm.o(.text+0x1930): undefined reference to `local_sb1___flush_cac >he_all' >arch/mips64/mm/mm.o(.text+0x1934): undefined reference to `local_sb1___flush_cac >he_all' >make: *** [vmlinux] Error 1 > >source code: > >static void local_sb1___flush_cache_all(void) >{ > TRACE_RECORD(TRC_CACHEOP_BASE+5, 0, 0, > read_c0_count()); > > __sb1_writeback_inv_dcache_all(); > __sb1_flush_icache_all(); >} > >extern void sb1___flush_cache_all_ipi(void *ignored); >asm("sb1___flush_cache_all_ipi = local_sb1___flush_cache_all"); > >static void sb1___flush_cache_all(void) >{ > smp_call_function(sb1___flush_cache_all_ipi, 0, 1, 1); > local_sb1___flush_cache_all(); >} > > >Regards! > > macrohat > emblinux@xxxxxxxxxxxx > 2004-11-14 > >