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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  * Optimized function to clear a page of memory.
  4.  *
  5.  * Inputs:
  6.  * in0: address of page
  7.  *
  8.  * Output:
  9.  *  none
  10.  *
  11.  * Copyright (C) 1999-2001 Hewlett-Packard Co
  12.  * Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com>
  13.  * Copyright (C) 1999-2001 David Mosberger-Tang <davidm@hpl.hp.com>
  14.  *
  15.  * 1/06/01 davidm Tuned for Itanium.
  16.  */
  17. #include <asm/asmmacro.h>
  18. #include <asm/page.h>
  19. #define saved_lc r2
  20. #define dst0 in0
  21. #define dst1 r8
  22. #define dst2 r9
  23. #define dst3 r10
  24. #define dst_fetch r11
  25. GLOBAL_ENTRY(clear_page)
  26. .prologue
  27. .regstk 1,0,0,0
  28. mov r16 = PAGE_SIZE/64-1 // -1 = repeat/until
  29. ;;
  30. .save ar.lc, saved_lc
  31. mov saved_lc = ar.lc
  32. .body
  33. mov ar.lc = r16
  34. adds dst1 = 16, dst0
  35. adds dst2 = 32, dst0
  36. adds dst3 = 48, dst0
  37. adds dst_fetch = 512, dst0
  38. ;;
  39. 1: stf.spill.nta [dst0] = f0, 64
  40. stf.spill.nta [dst1] = f0, 64
  41. stf.spill.nta [dst2] = f0, 64
  42. stf.spill.nta [dst3] = f0, 64
  43. lfetch [dst_fetch], 64
  44. br.cloop.dptk.few 1b
  45. ;;
  46. mov ar.lc = r2 // restore lc
  47. br.ret.sptk.many rp
  48. END(clear_page)