Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.
6709 Discussions

BUG? ipp function overwrites ymm11 register without preserving it

jingjingliu
Beginner
284 Views
Hi all,

I encountered a problem while developing on VS2008 64bit win7 using ipp library (version 7.0.4). Could anybody help me?

I have some floating calculations in my function. Between them there is an ipp function invoked and the result of the calculation after the ipp function is wrong. My fuction is something like this:

void my_func()
{
double i = 1; // according to the disassembly file, register xmm11 was used to save the constant value 1.
...
double d1 = 0.0;
ippiConvValid_32f_C1R(...); // invoke ipp function. inside of which ymm11 was changed but not resotred.

double d2 = 1 - d1; // d2 supposed to be 1.0, but not. It reads value from xmm11 to do the calculation, but xmm11 is not 1 any more.
...
return;
}

After following the disassembly file and looking into the register, I find that the register xmm11 which is used to keep the constant value in my function is changed in the ipp function. So after returning from the ipp fucntion, the value in xmm11 is changed to something odd. And I cannot get the correct result.

According to http://msdn.microsoft.com/en-us/library/9z1stfyw.aspx, the registers XMM6 to XMM15 should be nonvolatile. So is that mean the ipp function should save the registers value before use it and restore it on return? Is it possible a bug in ipp? Does anybody can help me?

Thanks very much.

P.S.
Here attached the disassembly contents I get from my debugger for your reference.
0 Kudos
2 Replies
jingjingliu
Beginner
284 Views
Does anyone can help me with this issue? Or where is a proper place to ask these questions?
0 Kudos
Igor_A_Intel
Employee
284 Views
thank you for reporting this issue - will be fixed in IPP7.0.6 (release date ww49 2011, so will be available for customers somewhere before NewYear)

regards,
Igor
0 Kudos
Reply