diff options
Diffstat (limited to 'src/kernels/level2/xgemv.opencl')
-rw-r--r-- | src/kernels/level2/xgemv.opencl | 23 |
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)) { |