File: clear_page.S

package info (click to toggle)
kernel-source-2.4.14 2.4.14-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 139,160 kB
  • ctags: 428,423
  • sloc: ansic: 2,435,554; asm: 141,119; makefile: 8,258; sh: 3,099; perl: 2,561; yacc: 1,177; cpp: 755; tcl: 577; lex: 352; awk: 251; lisp: 218; sed: 72
file content (51 lines) | stat: -rw-r--r-- 1,014 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
 *
 * Optimized function to clear a page of memory.
 *
 * Inputs:
 *	in0:	address of page
 *
 * Output:
 * 	none
 *
 * Copyright (C) 1999-2001 Hewlett-Packard Co
 * Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com>
 * Copyright (C) 1999-2001 David Mosberger-Tang <davidm@hpl.hp.com>
 *
 * 1/06/01 davidm	Tuned for Itanium.
 */
#include <asm/asmmacro.h>
#include <asm/page.h>

#define saved_lc	r2
#define dst0		in0
#define dst1		r8
#define dst2		r9
#define dst3		r10
#define dst_fetch	r11

GLOBAL_ENTRY(clear_page)
	.prologue
	.regstk 1,0,0,0
	mov r16 = PAGE_SIZE/64-1	// -1 = repeat/until
	;;
	.save ar.lc, saved_lc
	mov saved_lc = ar.lc
	.body
	mov ar.lc = r16
	adds dst1 = 16, dst0
	adds dst2 = 32, dst0
	adds dst3 = 48, dst0
	adds dst_fetch = 512, dst0
	;;
1:	stf.spill.nta [dst0] = f0, 64
	stf.spill.nta [dst1] = f0, 64
	stf.spill.nta [dst2] = f0, 64
	stf.spill.nta [dst3] = f0, 64

	lfetch [dst_fetch], 64
	br.cloop.dptk.few 1b
	;;
	mov ar.lc = r2		// restore lc
	br.ret.sptk.few rp
END(clear_page)