Skip to content

Commit 4850f86

Browse files
committed
optimize sdot lsx kernel
1 parent d1df592 commit 4850f86

2 files changed

Lines changed: 122 additions & 1 deletion

File tree

kernel/loongarch64/KERNEL.LA264

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
ifndef NO_LSX
22

3-
SDOTKERNEL = dot_lsx.S
3+
SDOTKERNEL = sdot_lsx.S
44
DSDOTKERNEL = dot_lsx.S
55
DDOTKERNEL = dot_lsx.S
66
CDOTKERNEL = cdot_lsx.S

kernel/loongarch64/sdot_lsx.S

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
/***************************************************************************
2+
Copyright (c) 2023, The OpenBLAS Project
3+
All rights reserved.
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions are
6+
met:
7+
1. Redistributions of source code must retain the above copyright
8+
notice, this list of conditions and the following disclaimer.
9+
2. Redistributions in binary form must reproduce the above copyright
10+
notice, this list of conditions and the following disclaimer in
11+
the documentation and/or other materials provided with the
12+
distribution.
13+
3. Neither the name of the OpenBLAS project nor the names of
14+
its contributors may be used to endorse or promote products
15+
derived from this software without specific prior written permission.
16+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
20+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
25+
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26+
*****************************************************************************/
27+
28+
#define ASSEMBLER
29+
30+
#include "common.h"
31+
32+
#define N $r4
33+
#define X $r5
34+
#define INCX $r6
35+
#define Y $r7
36+
#define INCY $r8
37+
38+
#define I $r17
39+
#define TEMP $r18
40+
41+
/* Don't change following FR unless you know the effects. */
42+
#define s1 $f8
43+
#define s2 $f9
44+
#define a1 $f10
45+
#define b1 $f11
46+
47+
PROLOGUE
48+
49+
vxor.v $vr8, $vr8, $vr8
50+
vxor.v $vr9, $vr9, $vr9
51+
slli.d INCX, INCX, BASE_SHIFT
52+
li.d TEMP, SIZE
53+
slli.d INCY, INCY, BASE_SHIFT
54+
bge $r0, N, .L999
55+
bne INCX, TEMP, .L20 /* inc_x=1 */
56+
bne INCY, TEMP, .L20 /* inc_y=1 */
57+
58+
/* ((inc_x == 1) && (inc_y == 1)) */
59+
srai.d I, N, 4
60+
bge $r0, I, .L12 /* FLOAT: <16 */
61+
.L11:
62+
/* FLOAT: 16~ */
63+
vld $vr0, X, 0
64+
vld $vr1, X, 16
65+
vld $vr2, X, 32
66+
vld $vr3, X, 48
67+
vld $vr4, Y, 0
68+
vld $vr5, Y, 16
69+
vld $vr6, Y, 32
70+
vld $vr7, Y, 48
71+
addi.d I, I, -1
72+
addi.d X, X, 64
73+
addi.d Y, Y, 64
74+
75+
vfmadd.s $vr8, $vr0, $vr4, $vr8
76+
vfmadd.s $vr9, $vr1, $vr5, $vr9
77+
vfmadd.s $vr8, $vr2, $vr6, $vr8
78+
vfmadd.s $vr9, $vr3, $vr7, $vr9
79+
80+
bnez I, .L11
81+
82+
vfadd.s $vr8, $vr8, $vr9
83+
vextrins.w $vr1, $vr8, 0x01
84+
vextrins.w $vr2, $vr8, 0x02
85+
vextrins.w $vr3, $vr8, 0x03
86+
fadd.s $f8, $f8, $f1
87+
fadd.s $f8, $f8, $f2
88+
fadd.s $f8, $f8, $f3
89+
.L12:
90+
andi I, N, 0xf
91+
bge $r0, I, .L999
92+
.L13:
93+
addi.d I, I, -1
94+
fld.s $f0, X, 0
95+
fld.s $f4, Y, 0
96+
addi.d X, X, 4
97+
addi.d Y, Y, 4
98+
fmadd.s $f8, $f0, $f4, $f8
99+
bnez I, .L13
100+
b .L999
101+
102+
/* !((inc_x == 1) && (inc_y == 1)) */
103+
.L20:
104+
move I, N
105+
.L21:
106+
addi.d I, I, -1
107+
108+
fld.s $f0, X, 0
109+
fld.s $f4, Y, 0
110+
add.d X, X, INCX
111+
add.d Y, Y, INCY
112+
fmadd.s $f8, $f0, $f4, $f8
113+
114+
bnez I, .L21
115+
b .L999
116+
117+
.L999:
118+
fmov.s $f0, $f8
119+
jirl $r0, $r1, 0x0
120+
121+
EPILOGUE

0 commit comments

Comments
 (0)