From 3b81ee2c088355d60aabf1e9d919384fb47b808e Mon Sep 17 00:00:00 2001 From: cnugteren Date: Sun, 8 May 2016 18:28:01 +0200 Subject: [PATCH] Fixed an issue where the xAMAX tester would incorrectly report failures when testing against CBLAS --- scripts/generator/generator.py | 3 +++ test/wrapper_cblas.h | 16 ++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/scripts/generator/generator.py b/scripts/generator/generator.py index 874074d1..210f371f 100644 --- a/scripts/generator/generator.py +++ b/scripts/generator/generator.py @@ -274,6 +274,9 @@ def wrapper_cblas(routines): postfix += "_sub" indent += " " extra_argument += ",\n"+indent+"reinterpret_cast(&"+output_buffer+"_buffer["+output_buffer+"_offset])" + elif output_buffer in routine.IndexBuffers(): + assignment = "((int*)&"+output_buffer+"_buffer[0])["+output_buffer+"_offset] = " + indent += " "*len(assignment) else: assignment = output_buffer+"_buffer["+output_buffer+"_offset]" if (flavour.name in ["Sc","Dz"]): diff --git a/test/wrapper_cblas.h b/test/wrapper_cblas.h index 1b6977c0..529acfbf 100644 --- a/test/wrapper_cblas.h +++ b/test/wrapper_cblas.h @@ -378,26 +378,26 @@ void cblasXasum(const size_t n, void cblasXamax(const size_t n, std::vector& imax_buffer, const size_t imax_offset, const std::vector& x_buffer, const size_t x_offset, const size_t x_inc) { - imax_buffer[imax_offset] = cblas_isamax(n, - &x_buffer[x_offset], static_cast(x_inc)); + ((int*)&imax_buffer[0])[imax_offset] = cblas_isamax(n, + &x_buffer[x_offset], static_cast(x_inc)); } void cblasXamax(const size_t n, std::vector& imax_buffer, const size_t imax_offset, const std::vector& x_buffer, const size_t x_offset, const size_t x_inc) { - imax_buffer[imax_offset] = cblas_idamax(n, - &x_buffer[x_offset], static_cast(x_inc)); + ((int*)&imax_buffer[0])[imax_offset] = cblas_idamax(n, + &x_buffer[x_offset], static_cast(x_inc)); } void cblasXamax(const size_t n, std::vector& imax_buffer, const size_t imax_offset, const std::vector& x_buffer, const size_t x_offset, const size_t x_inc) { - imax_buffer[imax_offset] = cblas_icamax(n, - reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc)); + ((int*)&imax_buffer[0])[imax_offset] = cblas_icamax(n, + reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc)); } void cblasXamax(const size_t n, std::vector& imax_buffer, const size_t imax_offset, const std::vector& x_buffer, const size_t x_offset, const size_t x_inc) { - imax_buffer[imax_offset] = cblas_izamax(n, - reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc)); + ((int*)&imax_buffer[0])[imax_offset] = cblas_izamax(n, + reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc)); } // =================================================================================================