Updated data prefetch in TRSM, ASUM, DOT functions
Signed-off-by: kaustubh <kaustubh.raste@imgtec.com>
This commit is contained in:
@@ -46,29 +46,29 @@ void dsolve_8x4_rn_msa(FLOAT *a, FLOAT *b, FLOAT *c, BLASLONG ldc, BLASLONG bk)
|
||||
|
||||
if (bk)
|
||||
{
|
||||
BLASLONG i;
|
||||
v2f64 src_a0, src_a1, src_a2, src_a3, src_a4, src_a5, src_a6, src_a7;
|
||||
v2f64 src_b;
|
||||
BLASLONG i, pref_offset;
|
||||
FLOAT *pa0_pref;
|
||||
v2f64 src_a0, src_a1, src_a2, src_a3, src_b;
|
||||
|
||||
LD_DP4_INC(a, 2, src_a0, src_a1, src_a2, src_a3);
|
||||
LD_DP2_INC(b, 2, src_b0, src_b1);
|
||||
pref_offset = (uintptr_t)a & (L1_DATA_LINESIZE - 1);
|
||||
|
||||
for (i = ((bk - 1) >> 1); i--;)
|
||||
if (pref_offset)
|
||||
{
|
||||
#ifdef ENABLE_PREFETCH
|
||||
__asm__ __volatile__(
|
||||
"pref 0, 128(%[a]) \n\t"
|
||||
"pref 0, 160(%[a]) \n\t"
|
||||
"pref 0, 192(%[a]) \n\t"
|
||||
"pref 0, 224(%[a]) \n\t"
|
||||
pref_offset = L1_DATA_LINESIZE - pref_offset;
|
||||
pref_offset = pref_offset / sizeof(FLOAT);
|
||||
}
|
||||
|
||||
:
|
||||
: [a] "r"(a)
|
||||
);
|
||||
#endif
|
||||
pa0_pref = a + pref_offset;
|
||||
|
||||
LD_DP4_INC(a, 2, src_a4, src_a5, src_a6, src_a7);
|
||||
LD_DP2_INC(b, 2, src_b2, src_b3);
|
||||
for (i = (bk >> 1); i--;)
|
||||
{
|
||||
PREF_OFFSET(pa0_pref, 128);
|
||||
PREF_OFFSET(pa0_pref, 160);
|
||||
PREF_OFFSET(pa0_pref, 192);
|
||||
PREF_OFFSET(pa0_pref, 224);
|
||||
|
||||
LD_DP4_INC(a, 2, src_a0, src_a1, src_a2, src_a3);
|
||||
LD_DP2_INC(b, 2, src_b0, src_b1);
|
||||
|
||||
src_b = (v2f64) __msa_ilvr_d((v2i64) src_b0, (v2i64) src_b0);
|
||||
src_c0 -= src_a0 * src_b;
|
||||
@@ -97,33 +97,6 @@ void dsolve_8x4_rn_msa(FLOAT *a, FLOAT *b, FLOAT *c, BLASLONG ldc, BLASLONG bk)
|
||||
LD_DP4_INC(a, 2, src_a0, src_a1, src_a2, src_a3);
|
||||
LD_DP2_INC(b, 2, src_b0, src_b1);
|
||||
|
||||
src_b = (v2f64) __msa_ilvr_d((v2i64) src_b2, (v2i64) src_b2);
|
||||
src_c0 -= src_a4 * src_b;
|
||||
src_c1 -= src_a5 * src_b;
|
||||
src_c2 -= src_a6 * src_b;
|
||||
src_c3 -= src_a7 * src_b;
|
||||
|
||||
src_b = (v2f64) __msa_ilvl_d((v2i64) src_b2, (v2i64) src_b2);
|
||||
src_c4 -= src_a4 * src_b;
|
||||
src_c5 -= src_a5 * src_b;
|
||||
src_c6 -= src_a6 * src_b;
|
||||
src_c7 -= src_a7 * src_b;
|
||||
|
||||
src_b = (v2f64) __msa_ilvr_d((v2i64) src_b3, (v2i64) src_b3);
|
||||
src_c8 -= src_a4 * src_b;
|
||||
src_c9 -= src_a5 * src_b;
|
||||
src_c10 -= src_a6 * src_b;
|
||||
src_c11 -= src_a7 * src_b;
|
||||
|
||||
src_b = (v2f64) __msa_ilvl_d((v2i64) src_b3, (v2i64) src_b3);
|
||||
src_c12 -= src_a4 * src_b;
|
||||
src_c13 -= src_a5 * src_b;
|
||||
src_c14 -= src_a6 * src_b;
|
||||
src_c15 -= src_a7 * src_b;
|
||||
}
|
||||
|
||||
if ((bk - 1) & 1)
|
||||
{
|
||||
src_b = (v2f64) __msa_ilvr_d((v2i64) src_b0, (v2i64) src_b0);
|
||||
src_c0 -= src_a0 * src_b;
|
||||
src_c1 -= src_a1 * src_b;
|
||||
@@ -148,33 +121,38 @@ void dsolve_8x4_rn_msa(FLOAT *a, FLOAT *b, FLOAT *c, BLASLONG ldc, BLASLONG bk)
|
||||
src_c14 -= src_a2 * src_b;
|
||||
src_c15 -= src_a3 * src_b;
|
||||
|
||||
LD_DP4_INC(a, 2, src_a0, src_a1, src_a2, src_a3);
|
||||
LD_DP2_INC(b, 2, src_b0, src_b1);
|
||||
pa0_pref += 16;
|
||||
}
|
||||
|
||||
src_b = (v2f64) __msa_ilvr_d((v2i64) src_b0, (v2i64) src_b0);
|
||||
src_c0 -= src_a0 * src_b;
|
||||
src_c1 -= src_a1 * src_b;
|
||||
src_c2 -= src_a2 * src_b;
|
||||
src_c3 -= src_a3 * src_b;
|
||||
if (bk & 1)
|
||||
{
|
||||
LD_DP4_INC(a, 2, src_a0, src_a1, src_a2, src_a3);
|
||||
LD_DP2_INC(b, 2, src_b0, src_b1);
|
||||
|
||||
src_b = (v2f64) __msa_ilvl_d((v2i64) src_b0, (v2i64) src_b0);
|
||||
src_c4 -= src_a0 * src_b;
|
||||
src_c5 -= src_a1 * src_b;
|
||||
src_c6 -= src_a2 * src_b;
|
||||
src_c7 -= src_a3 * src_b;
|
||||
src_b = (v2f64) __msa_ilvr_d((v2i64) src_b0, (v2i64) src_b0);
|
||||
src_c0 -= src_a0 * src_b;
|
||||
src_c1 -= src_a1 * src_b;
|
||||
src_c2 -= src_a2 * src_b;
|
||||
src_c3 -= src_a3 * src_b;
|
||||
|
||||
src_b = (v2f64) __msa_ilvr_d((v2i64) src_b1, (v2i64) src_b1);
|
||||
src_c8 -= src_a0 * src_b;
|
||||
src_c9 -= src_a1 * src_b;
|
||||
src_c10 -= src_a2 * src_b;
|
||||
src_c11 -= src_a3 * src_b;
|
||||
src_b = (v2f64) __msa_ilvl_d((v2i64) src_b0, (v2i64) src_b0);
|
||||
src_c4 -= src_a0 * src_b;
|
||||
src_c5 -= src_a1 * src_b;
|
||||
src_c6 -= src_a2 * src_b;
|
||||
src_c7 -= src_a3 * src_b;
|
||||
|
||||
src_b = (v2f64) __msa_ilvl_d((v2i64) src_b1, (v2i64) src_b1);
|
||||
src_c12 -= src_a0 * src_b;
|
||||
src_c13 -= src_a1 * src_b;
|
||||
src_c14 -= src_a2 * src_b;
|
||||
src_c15 -= src_a3 * src_b;
|
||||
src_b = (v2f64) __msa_ilvr_d((v2i64) src_b1, (v2i64) src_b1);
|
||||
src_c8 -= src_a0 * src_b;
|
||||
src_c9 -= src_a1 * src_b;
|
||||
src_c10 -= src_a2 * src_b;
|
||||
src_c11 -= src_a3 * src_b;
|
||||
|
||||
src_b = (v2f64) __msa_ilvl_d((v2i64) src_b1, (v2i64) src_b1);
|
||||
src_c12 -= src_a0 * src_b;
|
||||
src_c13 -= src_a1 * src_b;
|
||||
src_c14 -= src_a2 * src_b;
|
||||
src_c15 -= src_a3 * src_b;
|
||||
}
|
||||
}
|
||||
|
||||
src_b0 = LD_DP(b + 0);
|
||||
|
||||
Reference in New Issue
Block a user