diff --git a/scripts/generator/generator.py b/scripts/generator/generator.py index 47972714..874074d1 100644 --- a/scripts/generator/generator.py +++ b/scripts/generator/generator.py @@ -266,6 +266,7 @@ def wrapper_cblas(routines): # Special case for scalar outputs assignment = "" postfix = "" + endofline = "" extra_argument = "" for output_buffer in routine.outputs: if output_buffer in routine.ScalarBuffersFirst(): @@ -274,12 +275,17 @@ def wrapper_cblas(routines): indent += " " extra_argument += ",\n"+indent+"reinterpret_cast(&"+output_buffer+"_buffer["+output_buffer+"_offset])" else: - assignment = output_buffer+"_buffer["+output_buffer+"_offset] = " + assignment = output_buffer+"_buffer["+output_buffer+"_offset]" + if (flavour.name in ["Sc","Dz"]): + assignment = assignment+".real(" + endofline += ")" + else: + assignment = assignment+" = " indent += " "*len(assignment) result += " "+assignment+"cblas_"+flavour.name.lower()+routine.name+postfix+"(" result += (",\n"+indent).join([a for a in arguments]) - result += extra_argument+");" + result += extra_argument+endofline+");" result += "\n}\n" return result diff --git a/test/wrapper_cblas.h b/test/wrapper_cblas.h index 566c90e5..1b6977c0 100644 --- a/test/wrapper_cblas.h +++ b/test/wrapper_cblas.h @@ -338,14 +338,14 @@ void cblasXnrm2(const size_t n, void cblasXnrm2(const size_t n, std::vector& nrm2_buffer, const size_t nrm2_offset, const std::vector& x_buffer, const size_t x_offset, const size_t x_inc) { - nrm2_buffer[nrm2_offset] = cblas_scnrm2(n, - reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc)); + nrm2_buffer[nrm2_offset].real(cblas_scnrm2(n, + reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc))); } void cblasXnrm2(const size_t n, std::vector& nrm2_buffer, const size_t nrm2_offset, const std::vector& x_buffer, const size_t x_offset, const size_t x_inc) { - nrm2_buffer[nrm2_offset] = cblas_dznrm2(n, - reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc)); + nrm2_buffer[nrm2_offset].real(cblas_dznrm2(n, + reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc))); } // Forwards the Netlib BLAS calls for SASUM/DASUM/ScASUM/DzASUM @@ -364,14 +364,14 @@ void cblasXasum(const size_t n, void cblasXasum(const size_t n, std::vector& asum_buffer, const size_t asum_offset, const std::vector& x_buffer, const size_t x_offset, const size_t x_inc) { - asum_buffer[asum_offset] = cblas_scasum(n, - reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc)); + asum_buffer[asum_offset].real(cblas_scasum(n, + reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc))); } void cblasXasum(const size_t n, std::vector& asum_buffer, const size_t asum_offset, const std::vector& x_buffer, const size_t x_offset, const size_t x_inc) { - asum_buffer[asum_offset] = cblas_dzasum(n, - reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc)); + asum_buffer[asum_offset].real(cblas_dzasum(n, + reinterpret_cast(&x_buffer[x_offset]), static_cast(x_inc))); } // Forwards the Netlib BLAS calls for iSAMAX/iDAMAX/iCAMAX/iZAMAX