summaryrefslogtreecommitdiff
path: root/src/kernels/level2/xgemv.opencl
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernels/level2/xgemv.opencl')
-rw-r--r--src/kernels/level2/xgemv.opencl23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/kernels/level2/xgemv.opencl b/src/kernels/level2/xgemv.opencl
index f0bf4405..f6c4476e 100644
--- a/src/kernels/level2/xgemv.opencl
+++ b/src/kernels/level2/xgemv.opencl
@@ -134,6 +134,29 @@ inline real LoadMatrixA(const __global real* restrict agm, const int x, const in
}
}
+ // For hermitian packed matrices
+ #elif defined(ROUTINE_HPMV)
+ if (parameter == 1) {
+ if (x <= y) {
+ result = agm[((y+1)*y)/2 + x + a_offset];
+ if (x == y) { result.y = ZERO; }
+ }
+ else {
+ result = agm[((x+1)*x)/2 + y + a_offset];
+ COMPLEX_CONJUGATE(result);
+ }
+ }
+ else {
+ if (x >= y) {
+ result = agm[((2*a_ld-(y+1))*y)/2 + x + a_offset];
+ if (x == y) { result.y = ZERO; }
+ }
+ else {
+ result = agm[((2*a_ld-(x+1))*x)/2 + y + a_offset];
+ COMPLEX_CONJUGATE(result);
+ }
+ }
+
// For symmetric matrices
#elif defined(ROUTINE_SYMV)
if ((parameter == 0 && y <= x) || (parameter == 1 && x <= y)) {