Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
36344762
Commit
36344762
authored
Feb 25, 2006
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SPARC64]: Niagara optimized XOR functions for RAID.
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
c4e9249b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
342 additions
and
5 deletions
+342
-5
arch/sparc64/kernel/sparc64_ksyms.c
arch/sparc64/kernel/sparc64_ksyms.c
+13
-0
arch/sparc64/lib/xor.S
arch/sparc64/lib/xor.S
+299
-1
include/asm-sparc64/xor.h
include/asm-sparc64/xor.h
+30
-4
No files found.
arch/sparc64/kernel/sparc64_ksyms.c
View file @
36344762
...
@@ -108,6 +108,14 @@ extern void xor_vis_4(unsigned long, unsigned long *, unsigned long *,
...
@@ -108,6 +108,14 @@ extern void xor_vis_4(unsigned long, unsigned long *, unsigned long *,
extern
void
xor_vis_5
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
extern
void
xor_vis_5
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
);
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_niagara_2
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_niagara_3
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_niagara_4
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_niagara_5
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
);
/* Per-CPU information table */
/* Per-CPU information table */
EXPORT_PER_CPU_SYMBOL
(
__cpu_data
);
EXPORT_PER_CPU_SYMBOL
(
__cpu_data
);
...
@@ -388,4 +396,9 @@ EXPORT_SYMBOL(xor_vis_3);
...
@@ -388,4 +396,9 @@ EXPORT_SYMBOL(xor_vis_3);
EXPORT_SYMBOL
(
xor_vis_4
);
EXPORT_SYMBOL
(
xor_vis_4
);
EXPORT_SYMBOL
(
xor_vis_5
);
EXPORT_SYMBOL
(
xor_vis_5
);
EXPORT_SYMBOL
(
xor_niagara_2
);
EXPORT_SYMBOL
(
xor_niagara_3
);
EXPORT_SYMBOL
(
xor_niagara_4
);
EXPORT_SYMBOL
(
xor_niagara_5
);
EXPORT_SYMBOL
(
prom_palette
);
EXPORT_SYMBOL
(
prom_palette
);
arch/sparc64/lib/xor.S
View file @
36344762
...
@@ -2,9 +2,10 @@
...
@@ -2,9 +2,10 @@
*
arch
/
sparc64
/
lib
/
xor
.
S
*
arch
/
sparc64
/
lib
/
xor
.
S
*
*
*
High
speed
xor_block
operation
for
RAID4
/
5
utilizing
the
*
High
speed
xor_block
operation
for
RAID4
/
5
utilizing
the
*
UltraSparc
Visual
Instruction
Set
.
*
UltraSparc
Visual
Instruction
Set
and
Niagara
store
-
init
/
twin
-
load
.
*
*
*
Copyright
(
C
)
1997
,
1999
Jakub
Jelinek
(
jj
@
ultra
.
linux
.
cz
)
*
Copyright
(
C
)
1997
,
1999
Jakub
Jelinek
(
jj
@
ultra
.
linux
.
cz
)
*
Copyright
(
C
)
2006
David
S
.
Miller
<
davem
@
davemloft
.
net
>
*/
*/
#include <asm/visasm.h>
#include <asm/visasm.h>
...
@@ -19,6 +20,8 @@
...
@@ -19,6 +20,8 @@
*/
*/
.
text
.
text
.
align
32
.
align
32
/
*
VIS
versions
.
*/
.
globl
xor_vis_2
.
globl
xor_vis_2
.
type
xor_vis_2
,#
function
.
type
xor_vis_2
,#
function
xor_vis_2
:
xor_vis_2
:
...
@@ -352,3 +355,298 @@ xor_vis_5:
...
@@ -352,3 +355,298 @@ xor_vis_5:
ret
ret
restore
restore
.
size
xor_vis_5
,
.
-
xor_vis_5
.
size
xor_vis_5
,
.
-
xor_vis_5
/
*
Niagara
versions
.
*/
.
globl
xor_niagara_2
.
type
xor_niagara_2
,#
function
xor_niagara_2
:
/
*
%
o0
=
bytes
,
%
o1
=
dest
,
%
o2
=
src
*/
save
%
sp
,
-
192
,
%
sp
prefetch
[%
i1
],
#
n_writes
prefetch
[%
i2
],
#
one_read
rd
%
asi
,
%
g7
wr
%
g0
,
ASI_BLK_INIT_QUAD_LDD_P
,
%
asi
srlx
%
i0
,
6
,
%
g1
mov
%
i1
,
%
i0
mov
%
i2
,
%
i1
1
:
ldda
[%
i1
+
0x00
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src
+
0x00
*/
ldda
[%
i1
+
0x10
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src
+
0x10
*/
ldda
[%
i1
+
0x20
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src
+
0x20
*/
ldda
[%
i1
+
0x30
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
src
+
0x30
*/
prefetch
[%
i1
+
0x40
],
#
one_read
ldda
[%
i0
+
0x00
]
%
asi
,
%
o0
/*
%
o0
/%
o1
=
dest
+
0x00
*/
ldda
[%
i0
+
0x10
]
%
asi
,
%
o2
/*
%
o2
/%
o3
=
dest
+
0x10
*/
ldda
[%
i0
+
0x20
]
%
asi
,
%
o4
/*
%
o4
/%
o5
=
dest
+
0x20
*/
ldda
[%
i0
+
0x30
]
%
asi
,
%
l2
/*
%
l2
/%
l3
=
dest
+
0x30
*/
prefetch
[%
i0
+
0x40
],
#
n_writes
xor
%
o0
,
%
i2
,
%
o0
xor
%
o1
,
%
i3
,
%
o1
stxa
%
o0
,
[%
i0
+
0x00
]
%
asi
stxa
%
o1
,
[%
i0
+
0x08
]
%
asi
xor
%
o2
,
%
i4
,
%
o2
xor
%
o3
,
%
i5
,
%
o3
stxa
%
o2
,
[%
i0
+
0x10
]
%
asi
stxa
%
o3
,
[%
i0
+
0x18
]
%
asi
xor
%
o4
,
%
g2
,
%
o4
xor
%
o5
,
%
g3
,
%
o5
stxa
%
o4
,
[%
i0
+
0x20
]
%
asi
stxa
%
o5
,
[%
i0
+
0x28
]
%
asi
xor
%
l2
,
%
l0
,
%
l2
xor
%
l3
,
%
l1
,
%
l3
stxa
%
l2
,
[%
i0
+
0x30
]
%
asi
stxa
%
l3
,
[%
i0
+
0x38
]
%
asi
add
%
i0
,
0x40
,
%
i0
subcc
%
g1
,
1
,
%
g1
bne
,
pt
%
xcc
,
1
b
add
%
i1
,
0x40
,
%
i1
membar
#
Sync
wr
%
g7
,
0x0
,
%
asi
ret
restore
.
size
xor_niagara_2
,
.
-
xor_niagara_2
.
globl
xor_niagara_3
.
type
xor_niagara_3
,#
function
xor_niagara_3
:
/
*
%
o0
=
bytes
,
%
o1
=
dest
,
%
o2
=
src1
,
%
o3
=
src2
*/
save
%
sp
,
-
192
,
%
sp
prefetch
[%
i1
],
#
n_writes
prefetch
[%
i2
],
#
one_read
prefetch
[%
i3
],
#
one_read
rd
%
asi
,
%
g7
wr
%
g0
,
ASI_BLK_INIT_QUAD_LDD_P
,
%
asi
srlx
%
i0
,
6
,
%
g1
mov
%
i1
,
%
i0
mov
%
i2
,
%
i1
mov
%
i3
,
%
l7
1
:
ldda
[%
i1
+
0x00
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x00
*/
ldda
[%
i1
+
0x10
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src1
+
0x10
*/
ldda
[%
l7
+
0x00
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src2
+
0x00
*/
ldda
[%
l7
+
0x10
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
src2
+
0x10
*/
ldda
[%
i0
+
0x00
]
%
asi
,
%
o0
/*
%
o0
/%
o1
=
dest
+
0x00
*/
ldda
[%
i0
+
0x10
]
%
asi
,
%
o2
/*
%
o2
/%
o3
=
dest
+
0x10
*/
xor
%
g2
,
%
i2
,
%
g2
xor
%
g3
,
%
i3
,
%
g3
xor
%
o0
,
%
g2
,
%
o0
xor
%
o1
,
%
g3
,
%
o1
stxa
%
o0
,
[%
i0
+
0x00
]
%
asi
stxa
%
o1
,
[%
i0
+
0x08
]
%
asi
ldda
[%
i1
+
0x20
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x20
*/
ldda
[%
l7
+
0x20
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src2
+
0x20
*/
ldda
[%
i0
+
0x20
]
%
asi
,
%
o0
/*
%
o0
/%
o1
=
dest
+
0x20
*/
xor
%
l0
,
%
i4
,
%
l0
xor
%
l1
,
%
i5
,
%
l1
xor
%
o2
,
%
l0
,
%
o2
xor
%
o3
,
%
l1
,
%
o3
stxa
%
o2
,
[%
i0
+
0x10
]
%
asi
stxa
%
o3
,
[%
i0
+
0x18
]
%
asi
ldda
[%
i1
+
0x30
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src1
+
0x30
*/
ldda
[%
l7
+
0x30
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
src2
+
0x30
*/
ldda
[%
i0
+
0x30
]
%
asi
,
%
o2
/*
%
o2
/%
o3
=
dest
+
0x30
*/
prefetch
[%
i1
+
0x40
],
#
one_read
prefetch
[%
l7
+
0x40
],
#
one_read
prefetch
[%
i0
+
0x40
],
#
n_writes
xor
%
g2
,
%
i2
,
%
g2
xor
%
g3
,
%
i3
,
%
g3
xor
%
o0
,
%
g2
,
%
o0
xor
%
o1
,
%
g3
,
%
o1
stxa
%
o0
,
[%
i0
+
0x20
]
%
asi
stxa
%
o1
,
[%
i0
+
0x28
]
%
asi
xor
%
l0
,
%
i4
,
%
l0
xor
%
l1
,
%
i5
,
%
l1
xor
%
o2
,
%
l0
,
%
o2
xor
%
o3
,
%
l1
,
%
o3
stxa
%
o2
,
[%
i0
+
0x30
]
%
asi
stxa
%
o3
,
[%
i0
+
0x38
]
%
asi
add
%
i0
,
0x40
,
%
i0
add
%
i1
,
0x40
,
%
i1
subcc
%
g1
,
1
,
%
g1
bne
,
pt
%
xcc
,
1
b
add
%
l7
,
0x40
,
%
l7
membar
#
Sync
wr
%
g7
,
0x0
,
%
asi
ret
restore
.
size
xor_niagara_3
,
.
-
xor_niagara_3
.
globl
xor_niagara_4
.
type
xor_niagara_4
,#
function
xor_niagara_4
:
/
*
%
o0
=
bytes
,
%
o1
=
dest
,
%
o2
=
src1
,
%
o3
=
src2
,
%
o4
=
src3
*/
save
%
sp
,
-
192
,
%
sp
prefetch
[%
i1
],
#
n_writes
prefetch
[%
i2
],
#
one_read
prefetch
[%
i3
],
#
one_read
prefetch
[%
i4
],
#
one_read
rd
%
asi
,
%
g7
wr
%
g0
,
ASI_BLK_INIT_QUAD_LDD_P
,
%
asi
srlx
%
i0
,
6
,
%
g1
mov
%
i1
,
%
i0
mov
%
i2
,
%
i1
mov
%
i3
,
%
l7
mov
%
i4
,
%
l6
1
:
ldda
[%
i1
+
0x00
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x00
*/
ldda
[%
l7
+
0x00
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src2
+
0x00
*/
ldda
[%
l6
+
0x00
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src3
+
0x00
*/
ldda
[%
i0
+
0x00
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
dest
+
0x00
*/
xor
%
i4
,
%
i2
,
%
i4
xor
%
i5
,
%
i3
,
%
i5
ldda
[%
i1
+
0x10
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x10
*/
xor
%
g2
,
%
i4
,
%
g2
xor
%
g3
,
%
i5
,
%
g3
ldda
[%
i7
+
0x10
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src2
+
0x10
*/
xor
%
l0
,
%
g2
,
%
l0
xor
%
l1
,
%
g3
,
%
l1
stxa
%
l0
,
[%
i0
+
0x00
]
%
asi
stxa
%
l1
,
[%
i0
+
0x08
]
%
asi
ldda
[%
i6
+
0x10
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src3
+
0x10
*/
ldda
[%
i0
+
0x10
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
dest
+
0x10
*/
xor
%
i4
,
%
i2
,
%
i4
xor
%
i5
,
%
i3
,
%
i5
ldda
[%
i1
+
0x20
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x20
*/
xor
%
g2
,
%
i4
,
%
g2
xor
%
g3
,
%
i5
,
%
g3
ldda
[%
i7
+
0x20
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src2
+
0x20
*/
xor
%
l0
,
%
g2
,
%
l0
xor
%
l1
,
%
g3
,
%
l1
stxa
%
l0
,
[%
i0
+
0x10
]
%
asi
stxa
%
l1
,
[%
i0
+
0x18
]
%
asi
ldda
[%
i6
+
0x20
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src3
+
0x20
*/
ldda
[%
i0
+
0x20
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
dest
+
0x20
*/
xor
%
i4
,
%
i2
,
%
i4
xor
%
i5
,
%
i3
,
%
i5
ldda
[%
i1
+
0x30
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x30
*/
xor
%
g2
,
%
i4
,
%
g2
xor
%
g3
,
%
i5
,
%
g3
ldda
[%
i7
+
0x30
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src2
+
0x30
*/
xor
%
l0
,
%
g2
,
%
l0
xor
%
l1
,
%
g3
,
%
l1
stxa
%
l0
,
[%
i0
+
0x20
]
%
asi
stxa
%
l1
,
[%
i0
+
0x28
]
%
asi
ldda
[%
i6
+
0x30
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src3
+
0x30
*/
ldda
[%
i0
+
0x30
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
dest
+
0x30
*/
prefetch
[%
i1
+
0x40
],
#
one_read
prefetch
[%
l7
+
0x40
],
#
one_read
prefetch
[%
l6
+
0x40
],
#
one_read
prefetch
[%
i0
+
0x40
],
#
n_writes
xor
%
i4
,
%
i2
,
%
i4
xor
%
i5
,
%
i3
,
%
i5
xor
%
g2
,
%
i4
,
%
g2
xor
%
g3
,
%
i5
,
%
g3
xor
%
l0
,
%
g2
,
%
l0
xor
%
l1
,
%
g3
,
%
l1
stxa
%
l0
,
[%
i0
+
0x30
]
%
asi
stxa
%
l1
,
[%
i0
+
0x38
]
%
asi
add
%
i0
,
0x40
,
%
i0
add
%
i1
,
0x40
,
%
i1
add
%
l7
,
0x40
,
%
l7
subcc
%
g1
,
1
,
%
g1
bne
,
pt
%
xcc
,
1
b
add
%
l6
,
0x40
,
%
l6
membar
#
Sync
wr
%
g7
,
0x0
,
%
asi
ret
restore
.
size
xor_niagara_4
,
.
-
xor_niagara_4
.
globl
xor_niagara_5
.
type
xor_niagara_5
,#
function
xor_niagara_5
:
/
*
%
o0
=
bytes
,
%
o1
=
dest
,
%
o2
=
src1
,
%
o3
=
src2
,
%
o4
=
src3
,
%
o5
=
src4
*/
save
%
sp
,
-
192
,
%
sp
prefetch
[%
i1
],
#
n_writes
prefetch
[%
i2
],
#
one_read
prefetch
[%
i3
],
#
one_read
prefetch
[%
i4
],
#
one_read
prefetch
[%
i5
],
#
one_read
rd
%
asi
,
%
g7
wr
%
g0
,
ASI_BLK_INIT_QUAD_LDD_P
,
%
asi
srlx
%
i0
,
6
,
%
g1
mov
%
i1
,
%
i0
mov
%
i2
,
%
i1
mov
%
i3
,
%
l7
mov
%
i4
,
%
l6
mov
%
i5
,
%
l5
1
:
ldda
[%
i1
+
0x00
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x00
*/
ldda
[%
l7
+
0x00
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src2
+
0x00
*/
ldda
[%
l6
+
0x00
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src3
+
0x00
*/
ldda
[%
l5
+
0x00
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
src4
+
0x00
*/
ldda
[%
i0
+
0x00
]
%
asi
,
%
l2
/*
%
l2
/%
l3
=
dest
+
0x00
*/
xor
%
i4
,
%
i2
,
%
i4
xor
%
i5
,
%
i3
,
%
i5
ldda
[%
i1
+
0x10
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x10
*/
xor
%
g2
,
%
i4
,
%
g2
xor
%
g3
,
%
i5
,
%
g3
ldda
[%
l7
+
0x10
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src2
+
0x10
*/
xor
%
l0
,
%
g2
,
%
l0
xor
%
l1
,
%
g3
,
%
l1
ldda
[%
l6
+
0x10
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src3
+
0x10
*/
xor
%
l2
,
%
l0
,
%
l2
xor
%
l3
,
%
l1
,
%
l3
stxa
%
l2
,
[%
i0
+
0x00
]
%
asi
stxa
%
l3
,
[%
i0
+
0x08
]
%
asi
ldda
[%
l5
+
0x10
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
src4
+
0x10
*/
ldda
[%
i0
+
0x10
]
%
asi
,
%
l2
/*
%
l2
/%
l3
=
dest
+
0x10
*/
xor
%
i4
,
%
i2
,
%
i4
xor
%
i5
,
%
i3
,
%
i5
ldda
[%
i1
+
0x20
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x20
*/
xor
%
g2
,
%
i4
,
%
g2
xor
%
g3
,
%
i5
,
%
g3
ldda
[%
l7
+
0x20
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src2
+
0x20
*/
xor
%
l0
,
%
g2
,
%
l0
xor
%
l1
,
%
g3
,
%
l1
ldda
[%
l6
+
0x20
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src3
+
0x20
*/
xor
%
l2
,
%
l0
,
%
l2
xor
%
l3
,
%
l1
,
%
l3
stxa
%
l2
,
[%
i0
+
0x10
]
%
asi
stxa
%
l3
,
[%
i0
+
0x18
]
%
asi
ldda
[%
l5
+
0x20
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
src4
+
0x20
*/
ldda
[%
i0
+
0x20
]
%
asi
,
%
l2
/*
%
l2
/%
l3
=
dest
+
0x20
*/
xor
%
i4
,
%
i2
,
%
i4
xor
%
i5
,
%
i3
,
%
i5
ldda
[%
i1
+
0x30
]
%
asi
,
%
i2
/*
%
i2
/%
i3
=
src1
+
0x30
*/
xor
%
g2
,
%
i4
,
%
g2
xor
%
g3
,
%
i5
,
%
g3
ldda
[%
l7
+
0x30
]
%
asi
,
%
i4
/*
%
i4
/%
i5
=
src2
+
0x30
*/
xor
%
l0
,
%
g2
,
%
l0
xor
%
l1
,
%
g3
,
%
l1
ldda
[%
l6
+
0x30
]
%
asi
,
%
g2
/*
%
g2
/%
g3
=
src3
+
0x30
*/
xor
%
l2
,
%
l0
,
%
l2
xor
%
l3
,
%
l1
,
%
l3
stxa
%
l2
,
[%
i0
+
0x20
]
%
asi
stxa
%
l3
,
[%
i0
+
0x28
]
%
asi
ldda
[%
l5
+
0x30
]
%
asi
,
%
l0
/*
%
l0
/%
l1
=
src4
+
0x30
*/
ldda
[%
i0
+
0x30
]
%
asi
,
%
l2
/*
%
l2
/%
l3
=
dest
+
0x30
*/
prefetch
[%
i1
+
0x40
],
#
one_read
prefetch
[%
l7
+
0x40
],
#
one_read
prefetch
[%
l6
+
0x40
],
#
one_read
prefetch
[%
l5
+
0x40
],
#
one_read
prefetch
[%
i0
+
0x40
],
#
n_writes
xor
%
i4
,
%
i2
,
%
i4
xor
%
i5
,
%
i3
,
%
i5
xor
%
g2
,
%
i4
,
%
g2
xor
%
g3
,
%
i5
,
%
g3
xor
%
l0
,
%
g2
,
%
l0
xor
%
l1
,
%
g3
,
%
l1
xor
%
l2
,
%
l0
,
%
l2
xor
%
l3
,
%
l1
,
%
l3
stxa
%
l2
,
[%
i0
+
0x30
]
%
asi
stxa
%
l3
,
[%
i0
+
0x38
]
%
asi
add
%
i0
,
0x40
,
%
i0
add
%
i1
,
0x40
,
%
i1
add
%
l7
,
0x40
,
%
l7
add
%
l6
,
0x40
,
%
l6
subcc
%
g1
,
1
,
%
g1
bne
,
pt
%
xcc
,
1
b
add
%
l5
,
0x40
,
%
l5
membar
#
Sync
wr
%
g7
,
0x0
,
%
asi
ret
restore
.
size
xor_niagara_5
,
.
-
xor_niagara_5
include/asm-sparc64/xor.h
View file @
36344762
...
@@ -2,9 +2,11 @@
...
@@ -2,9 +2,11 @@
* include/asm-sparc64/xor.h
* include/asm-sparc64/xor.h
*
*
* High speed xor_block operation for RAID4/5 utilizing the
* High speed xor_block operation for RAID4/5 utilizing the
* UltraSparc Visual Instruction Set.
* UltraSparc Visual Instruction Set and Niagara block-init
* twin-load instructions.
*
*
* Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
* Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
* Copyright (C) 2006 David S. Miller <davem@davemloft.net>
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* it under the terms of the GNU General Public License as published by
...
@@ -16,8 +18,7 @@
...
@@ -16,8 +18,7 @@
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
*/
#include <asm/pstate.h>
#include <asm/spitfire.h>
#include <asm/asi.h>
extern
void
xor_vis_2
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_vis_2
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_vis_3
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
extern
void
xor_vis_3
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
...
@@ -37,4 +38,29 @@ static struct xor_block_template xor_block_VIS = {
...
@@ -37,4 +38,29 @@ static struct xor_block_template xor_block_VIS = {
.
do_5
=
xor_vis_5
,
.
do_5
=
xor_vis_5
,
};
};
#define XOR_TRY_TEMPLATES xor_speed(&xor_block_VIS)
extern
void
xor_niagara_2
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_niagara_3
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_niagara_4
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
);
extern
void
xor_niagara_5
(
unsigned
long
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
,
unsigned
long
*
);
static
struct
xor_block_template
xor_block_niagara
=
{
.
name
=
"Niagara"
,
.
do_2
=
xor_niagara_2
,
.
do_3
=
xor_niagara_3
,
.
do_4
=
xor_niagara_4
,
.
do_5
=
xor_niagara_5
,
};
#undef XOR_TRY_TEMPLATES
#define XOR_TRY_TEMPLATES \
do { \
xor_speed(&xor_block_VIS); \
xor_speed(&xor_block_niagara); \
} while (0)
/* For VIS for everything except Niagara. */
#define XOR_SELECT_TEMPLATE(FASTEST) \
(tlb_type == hypervisor ? &xor_block_niagara : &xor_block_VIS)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment