<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic BUG? ipp function overwrites ymm11 register without preserving it in Intel® Integrated Performance Primitives</title>
    <link>https://community.intel.com/t5/Intel-Integrated-Performance/BUG-ipp-function-overwrites-ymm11-register-without-preserving-it/m-p/823830#M5023</link>
    <description>Hi all,&lt;BR /&gt;&lt;BR /&gt;I encountered a problem while developing on VS2008 64bit win7 using ipp library (version 7.0.4). Could anybody help me?&lt;BR /&gt;&lt;BR /&gt;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:&lt;BR /&gt;&lt;BR /&gt;void my_func()&lt;BR /&gt;{&lt;BR /&gt; double i = 1; // according to the disassembly file, register xmm11 was used to save the constant value 1.&lt;BR /&gt; ...&lt;BR /&gt; double d1 = 0.0;&lt;BR /&gt; ippiConvValid_32f_C1R(...); // invoke ipp function. inside of which ymm11 was changed but not resotred.&lt;BR /&gt;&lt;BR /&gt;
 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.&lt;BR /&gt; ...&lt;BR /&gt; return;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;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.&lt;BR /&gt;&lt;BR /&gt;According to &lt;A href="http://msdn.microsoft.com/en-us/library/9z1stfyw.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/9z1stfyw.aspx&lt;/A&gt;, the registers &lt;B&gt;XMM6 &lt;/B&gt;to &lt;B&gt;XMM15 &lt;/B&gt;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?&lt;BR /&gt;&lt;BR /&gt;Thanks very much.&lt;BR /&gt;&lt;BR /&gt;P.S.&lt;BR /&gt;Here attached the disassembly contents I get from my debugger for your reference.&lt;BR /&gt;</description>
    <pubDate>Mon, 26 Sep 2011 04:15:23 GMT</pubDate>
    <dc:creator>jingjingliu</dc:creator>
    <dc:date>2011-09-26T04:15:23Z</dc:date>
    <item>
      <title>BUG? ipp function overwrites ymm11 register without preserving it</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/BUG-ipp-function-overwrites-ymm11-register-without-preserving-it/m-p/823830#M5023</link>
      <description>Hi all,&lt;BR /&gt;&lt;BR /&gt;I encountered a problem while developing on VS2008 64bit win7 using ipp library (version 7.0.4). Could anybody help me?&lt;BR /&gt;&lt;BR /&gt;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:&lt;BR /&gt;&lt;BR /&gt;void my_func()&lt;BR /&gt;{&lt;BR /&gt; double i = 1; // according to the disassembly file, register xmm11 was used to save the constant value 1.&lt;BR /&gt; ...&lt;BR /&gt; double d1 = 0.0;&lt;BR /&gt; ippiConvValid_32f_C1R(...); // invoke ipp function. inside of which ymm11 was changed but not resotred.&lt;BR /&gt;&lt;BR /&gt;
 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.&lt;BR /&gt; ...&lt;BR /&gt; return;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;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.&lt;BR /&gt;&lt;BR /&gt;According to &lt;A href="http://msdn.microsoft.com/en-us/library/9z1stfyw.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/9z1stfyw.aspx&lt;/A&gt;, the registers &lt;B&gt;XMM6 &lt;/B&gt;to &lt;B&gt;XMM15 &lt;/B&gt;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?&lt;BR /&gt;&lt;BR /&gt;Thanks very much.&lt;BR /&gt;&lt;BR /&gt;P.S.&lt;BR /&gt;Here attached the disassembly contents I get from my debugger for your reference.&lt;BR /&gt;</description>
      <pubDate>Mon, 26 Sep 2011 04:15:23 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/BUG-ipp-function-overwrites-ymm11-register-without-preserving-it/m-p/823830#M5023</guid>
      <dc:creator>jingjingliu</dc:creator>
      <dc:date>2011-09-26T04:15:23Z</dc:date>
    </item>
    <item>
      <title>BUG? ipp function overwrites ymm11 register without preserving</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/BUG-ipp-function-overwrites-ymm11-register-without-preserving-it/m-p/823831#M5024</link>
      <description>Does anyone can help me with this issue? Or where is a proper place to ask these questions?</description>
      <pubDate>Fri, 30 Sep 2011 04:10:57 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/BUG-ipp-function-overwrites-ymm11-register-without-preserving-it/m-p/823831#M5024</guid>
      <dc:creator>jingjingliu</dc:creator>
      <dc:date>2011-09-30T04:10:57Z</dc:date>
    </item>
    <item>
      <title>BUG? ipp function overwrites ymm11 register without preserving</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/BUG-ipp-function-overwrites-ymm11-register-without-preserving-it/m-p/823832#M5025</link>
      <description>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)&lt;BR /&gt;&lt;BR /&gt;regards,&lt;BR /&gt;Igor</description>
      <pubDate>Wed, 12 Oct 2011 06:11:18 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/BUG-ipp-function-overwrites-ymm11-register-without-preserving-it/m-p/823832#M5025</guid>
      <dc:creator>Igor_A_Intel</dc:creator>
      <dc:date>2011-10-12T06:11:18Z</dc:date>
    </item>
  </channel>
</rss>

