flush.S
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Cache flushing routines.
  3.  *
  4.  * Copyright (C) 1999-2001 Hewlett-Packard Co
  5.  * Copyright (C) 1999-2001 David Mosberger-Tang <davidm@hpl.hp.com>
  6.  */
  7. #include <asm/asmmacro.h>
  8. #include <asm/page.h>
  9. /*
  10.  * flush_icache_range(start,end)
  11.  * Must flush range from start to end-1 but nothing else (need to
  12.  * be careful not to touch addresses that may be unmapped).
  13.  */
  14. GLOBAL_ENTRY(flush_icache_range)
  15. .prologue
  16. alloc r2=ar.pfs,2,0,0,0
  17. sub r8=in1,in0,1
  18. ;;
  19. shr.u r8=r8,5 // we flush 32 bytes per iteration
  20. .save ar.lc, r3
  21. mov r3=ar.lc // save ar.lc
  22. ;;
  23. .body
  24. mov ar.lc=r8
  25. ;;
  26. .Loop: fc in0 // issuable on M0 only
  27. add in0=32,in0
  28. br.cloop.sptk.few .Loop
  29. ;;
  30. sync.i
  31. ;;
  32. srlz.i
  33. ;;
  34. mov ar.lc=r3 // restore ar.lc
  35. br.ret.sptk.many rp
  36. END(flush_icache_range)