<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>75528</bug_id>
          
          <creation_ts>2012-01-04 01:04:07 -0800</creation_ts>
          <short_desc>Optimize the multiply-add in Biquad.cpp::process</short_desc>
          <delta_ts>2013-07-09 10:43:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>UNCONFIRMED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>81168</dependson>
    
    <dependson>102524</dependson>
    
    <dependson>102544</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Xingnan Wang">xingnan.wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>bfulgham</cc>
    
    <cc>crogers</cc>
    
    <cc>danceoffwithyourpantsoff</cc>
    
    <cc>dglazkov</cc>
    
    <cc>rtoy</cc>
    
    <cc>rtoy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>529398</commentid>
    <comment_count>0</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-04 01:04:07 -0800</bug_when>
    <thetext>Optimize the multiply-add by piplining with SSE2 instructions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529405</commentid>
    <comment_count>1</comment_count>
      <attachid>121082</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-04 01:17:37 -0800</bug_when>
    <thetext>Created attachment 121082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529923</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 18:04:48 -0800</bug_when>
    <thetext>Thanks for the optimization!  Any idea how much improvement this gives?

I&apos;m adding Raymond as reviewer here, and think we should get at least a very simple Biquad layout test written to validate both the existing code, and your new code.  The layout test can do the following:

1. create a BiquadFilterNode, configure it as lowpass at a certain cutoff frequency
2. feed an impulse into the filter in an OfflineAudioContext
3. compare the result with the expected output using JavaScript to generate the expected response (we can borrow the math from Biquad.cpp and convert to JS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529925</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 18:06:30 -0800</bug_when>
    <thetext>Xingnan do you know how to write a layout test.  If not, maybe Raymond can help you there, since he&apos;s just starting to write them himself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529930</commentid>
    <comment_count>4</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-04 18:12:11 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Thanks for the optimization!  Any idea how much improvement this gives?
&gt; 
From my test, it boosted at least 20%(for 128 frames size), and reached 40% with larger size(like 1280).
&gt; I&apos;m adding Raymond as reviewer here, and think we should get at least a very simple Biquad layout test written to validate both the existing code, and your new code.  The layout test can do the following:
&gt; 
&gt; 1. create a BiquadFilterNode, configure it as lowpass at a certain cutoff frequency
&gt; 2. feed an impulse into the filter in an OfflineAudioContext
&gt; 3. compare the result with the expected output using JavaScript to generate the expected response (we can borrow the math from Biquad.cpp and convert to JS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529932</commentid>
    <comment_count>5</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-04 18:16:41 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Xingnan do you know how to write a layout test.  If not, maybe Raymond can help you there, since he&apos;s just starting to write them himself.

I did not write layout test before but very interest in it, I would like to run the layout test, it`s very pleasure if Raymond can help. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530326</commentid>
    <comment_count>6</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-05 08:53:24 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; Xingnan do you know how to write a layout test.  If not, maybe Raymond can help you there, since he&apos;s just starting to write them himself.
&gt; 
&gt; I did not write layout test before but very interest in it, I would like to run the layout test, it`s very pleasure if Raymond can help. Thanks.

I would be my pleasure to write a simple layout test that you can start with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530422</commentid>
    <comment_count>7</comment_count>
      <attachid>121300</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-05 10:45:40 -0800</bug_when>
    <thetext>Created attachment 121300
Biquad layout test script

Here is a start at a test of the biquad (lowpass) filter.

Place this file in the third_party/WebKit/LayoutTests/webaudio directory.  A biquad-test-expected.txt file needs to be created that contains the expected output.

To run the layout test, see http://www.chromium.org/developers/testing/webkit-layout-tests.

Perhaps it is enough to test just the lowpass filter for now.  But eventually, I think we need a test for all the filters.  In that case biquad-test.html should be broken up into a common piece that contains the test infrastructure and a probably several tests that create the appropriate filter tests.

Should probably follow the style of convolution-mono-mono.html tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530446</commentid>
    <comment_count>8</comment_count>
      <attachid>121082</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-05 11:07:10 -0800</bug_when>
    <thetext>Comment on attachment 121082
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121082&amp;action=review

&gt; Source/WebCore/platform/audio/Biquad.cpp:90
&gt; +#ifdef __SSE2__

Did you test this on windows?  I think the asm syntax below only works for gcc, so this conditionalization should test for gcc too.  (But I guess on windows, __SSE2__ is probably never defined.)

&gt; Source/WebCore/platform/audio/Biquad.cpp:93
&gt; +    __asm__(

I am far from an expert in sse2, but this seems rather complex.  Could we do something like this?

Create array yy of length 2 (or maybe use the destination array directly?):
yy[0] = y
yy[1] = y1

load xmm0 with (b0 b1 b2 0)
load xmm1 with (-a0 -a1 0 0)
load xmm2 from *source to get (x[0] x[1] x[2] x[3])
xmm2 = xmm2 * xmm0 to get (b0*x0 b1*x1 b2*x2 0)
load xmm3 from yy to get (y0 y1 junk junk)
xmm3 = xmm3 * xmm1 to get (-a0*y0 a1*y1 0 0)
xmm3 = xmm3 + xmm2 to get (b0*x0-a0*y0, b1*x1-a1*y1, b2*x2, 0)

Extract each part of xmm3 and add them together.  (We could gain something here if we had SSE3 to do the add, I think.)

yy[0] = yy[1]
yy[1] = result of sum.

Don&apos;t know if this is faster or slower.  This will change results slightly because we do everything in single precision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530458</commentid>
    <comment_count>9</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-05 11:20:26 -0800</bug_when>
    <thetext>Oops.  In the test script, you need to uncomment the first 5 commented lines in runTest() when running the layout test.  You can use the script as is when running in a browser (provided the other scripts are available).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530475</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-05 11:34:28 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Don&apos;t know if this is faster or slower.  This will change results slightly because we do everything in single precision.

I&apos;d like to keep everything in double-precision because of filter stability problems with certain types of filters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530831</commentid>
    <comment_count>11</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-05 17:31:21 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; Xingnan do you know how to write a layout test.  If not, maybe Raymond can help you there, since he&apos;s just starting to write them himself.
&gt; &gt; 
&gt; &gt; I did not write layout test before but very interest in it, I would like to run the layout test, it`s very pleasure if Raymond can help. Thanks.
&gt; 
&gt; I would be my pleasure to write a simple layout test that you can start with.

That`s so nice if there is a sample, thanks Raymond.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530844</commentid>
    <comment_count>12</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-05 17:59:50 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 121082 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121082&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/Biquad.cpp:90
&gt; &gt; +#ifdef __SSE2__
&gt; 
&gt; Did you test this on windows?  I think the asm syntax below only works for gcc, so this conditionalization should test for gcc too.  (But I guess on windows, __SSE2__ is probably never defined.)
Yes, there is another macro in windows. I just started with linux support only, in case of any potential issues. I can add the windows support and do the test.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/Biquad.cpp:93
&gt; &gt; +    __asm__(
&gt; 
&gt; I am far from an expert in sse2, but this seems rather complex.  Could we do something like this?
&gt; 
&gt; Create array yy of length 2 (or maybe use the destination array directly?):
&gt; yy[0] = y
&gt; yy[1] = y1
&gt; 
&gt; load xmm0 with (b0 b1 b2 0)
&gt; load xmm1 with (-a0 -a1 0 0)
&gt; load xmm2 from *source to get (x[0] x[1] x[2] x[3])
&gt; xmm2 = xmm2 * xmm0 to get (b0*x0 b1*x1 b2*x2 0)
&gt; load xmm3 from yy to get (y0 y1 junk junk)
&gt; xmm3 = xmm3 * xmm1 to get (-a0*y0 a1*y1 0 0)
&gt; xmm3 = xmm3 + xmm2 to get (b0*x0-a0*y0, b1*x1-a1*y1, b2*x2, 0)
&gt; 
&gt; Extract each part of xmm3 and add them together.  (We could gain something here if we had SSE3 to do the add, I think.)
&gt; 
&gt; yy[0] = yy[1]
&gt; yy[1] = result of sum.
&gt; 
&gt; Don&apos;t know if this is faster or slower.  This will change results slightly because we do everything in single precision.

Your solution may work in single precision and I didn`t try.
I have tried this way in double precision but no too much improvement. Then I changed to use inline asm so that I can pipeline the instructions, also get the benefit from SSE2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533974</commentid>
    <comment_count>13</comment_count>
      <attachid>121082</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-11 09:54:53 -0800</bug_when>
    <thetext>Comment on attachment 121082
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121082&amp;action=review

&gt;&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:93
&gt;&gt;&gt; +    __asm__(
&gt;&gt; 
&gt;&gt; I am far from an expert in sse2, but this seems rather complex.  Could we do something like this?
&gt;&gt; 
&gt;&gt; Create array yy of length 2 (or maybe use the destination array directly?):
&gt;&gt; yy[0] = y
&gt;&gt; yy[1] = y1
&gt;&gt; 
&gt;&gt; load xmm0 with (b0 b1 b2 0)
&gt;&gt; load xmm1 with (-a0 -a1 0 0)
&gt;&gt; load xmm2 from *source to get (x[0] x[1] x[2] x[3])
&gt;&gt; xmm2 = xmm2 * xmm0 to get (b0*x0 b1*x1 b2*x2 0)
&gt;&gt; load xmm3 from yy to get (y0 y1 junk junk)
&gt;&gt; xmm3 = xmm3 * xmm1 to get (-a0*y0 a1*y1 0 0)
&gt;&gt; xmm3 = xmm3 + xmm2 to get (b0*x0-a0*y0, b1*x1-a1*y1, b2*x2, 0)
&gt;&gt; 
&gt;&gt; Extract each part of xmm3 and add them together.  (We could gain something here if we had SSE3 to do the add, I think.)
&gt;&gt; 
&gt;&gt; yy[0] = yy[1]
&gt;&gt; yy[1] = result of sum.
&gt;&gt; 
&gt;&gt; Don&apos;t know if this is faster or slower.  This will change results slightly because we do everything in single precision.
&gt; 
&gt; Your solution may work in single precision and I didn`t try.
&gt; I have tried this way in double precision but no too much improvement. Then I changed to use inline asm so that I can pipeline the instructions, also get the benefit from SSE2.

This looks fine then especially considering Chris&apos;s comment about keeping things in double for stability reasons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534983</commentid>
    <comment_count>14</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 11:10:25 -0800</bug_when>
    <thetext>If you are not in a hurry, bug 71413 will include a bunch of tests for the biquad filters so you do not have to write any.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535504</commentid>
    <comment_count>15</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-13 00:51:05 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; If you are not in a hurry, bug 71413 will include a bunch of tests for the biquad filters so you do not have to write any.

That will be nice. I was going to update the patch with the low pass filter layout test, but if bug 71413 provides all the tests, I will wait for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553885</commentid>
    <comment_count>16</comment_count>
      <attachid>126465</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-09 23:44:37 -0800</bug_when>
    <thetext>Created attachment 126465
Patch

Update the patch as layout tests of biquad filter landed, it`s OK to pass all these tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553941</commentid>
    <comment_count>17</comment_count>
      <attachid>126465</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-10 01:20:22 -0800</bug_when>
    <thetext>Comment on attachment 126465
Patch

Attachment 126465 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11486599

New failing tests:
webaudio/biquad-highpass.html
webaudio/biquad-lowpass.html
webaudio/biquad-lowshelf.html
webaudio/biquad-notch.html
webaudio/biquad-highshelf.html
webaudio/biquad-peaking.html
webaudio/biquad-bandpass.html
webaudio/biquad-allpass.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554366</commentid>
    <comment_count>18</comment_count>
      <attachid>126465</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-10 13:56:13 -0800</bug_when>
    <thetext>Comment on attachment 126465
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=126465&amp;action=review

There also appears to be test failures on linux.  Can you investigate why that is happening?

&gt; Source/WebCore/platform/audio/Biquad.cpp:121
&gt; +        &quot;addsd    %%xmm4,  %%xmm5\n\t&quot; // x*b0 + (x2*b2+x*b0)

Doesn&apos;t xmm4 contain a1*y1 here so the result is a1*y1 + (x2*b2+x*b0)?

&gt; Source/WebCore/platform/audio/Biquad.cpp:137
&gt; +        :&quot;eax&quot;, &quot;edx&quot;, &quot;ecx&quot;

Is it necessary to add all of the xmm registers to this clobber list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555045</commentid>
    <comment_count>19</comment_count>
      <attachid>126465</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-12 23:26:19 -0800</bug_when>
    <thetext>Comment on attachment 126465
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=126465&amp;action=review

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:121
&gt;&gt; +        &quot;addsd    %%xmm4,  %%xmm5\n\t&quot; // x*b0 + (x2*b2+x*b0)
&gt; 
&gt; Doesn&apos;t xmm4 contain a1*y1 here so the result is a1*y1 + (x2*b2+x*b0)?

Sorry for that, it should be a1*y1 + (x2*b2+x*b0).

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:137
&gt;&gt; +        :&quot;eax&quot;, &quot;edx&quot;, &quot;ecx&quot;
&gt; 
&gt; Is it necessary to add all of the xmm registers to this clobber list?

OK, it`s better to add all the xmm registers to the clobber-list, through there is little possibility of conflict of xmm registers here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555053</commentid>
    <comment_count>20</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-12 23:32:34 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 126465 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126465&amp;action=review
&gt; 
&gt; There also appears to be test failures on linux.  Can you investigate why that is happening?
&gt; 

It`s strange that I can pass the layout tests locally, and little message can be found from the error log  http://queues.webkit.org/results/11486599. I`ll try to check my patch in different machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555065</commentid>
    <comment_count>21</comment_count>
      <attachid>126729</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-13 00:03:59 -0800</bug_when>
    <thetext>Created attachment 126729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555388</commentid>
    <comment_count>22</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-13 11:04:32 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=126729) [details]
&gt; Patch

Looks good, except for the test failures that happened in the previous patch.  I didn&apos;t see any test failures from the bots for this patch, though.  Perhaps they&apos;ve been fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555793</commentid>
    <comment_count>23</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-13 17:23:21 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Created an attachment (id=126729) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Looks good, except for the test failures that happened in the previous patch.  I didn&apos;t see any test failures from the bots for this patch, though.  Perhaps they&apos;ve been fixed?

Actually I never reproduced the failures at all, just updated the patch as your comments. Perhaps the last patch would pass the tests if run it again. Whatever, does that mean the patch is OK now?

BTW, how can I check the building details including these failures from the bots? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556350</commentid>
    <comment_count>24</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-14 09:39:06 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; Created an attachment (id=126729) [details] [details] [details]
&gt; &gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Looks good, except for the test failures that happened in the previous patch.  I didn&apos;t see any test failures from the bots for this patch, though.  Perhaps they&apos;ve been fixed?
&gt; 
&gt; Actually I never reproduced the failures at all, just updated the patch as your comments. Perhaps the last patch would pass the tests if run it again. Whatever, does that mean the patch is OK now?

Since there are no messages from the webkit review bot with your latest change, I think it&apos;s ok now.  Not sure what changes made this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560824</commentid>
    <comment_count>25</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-21 05:46:42 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; &gt; Created an attachment (id=126729) [details] [details] [details] [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; Looks good, except for the test failures that happened in the previous patch.  I didn&apos;t see any test failures from the bots for this patch, though.  Perhaps they&apos;ve been fixed?
&gt; &gt; 
&gt; &gt; Actually I never reproduced the failures at all, just updated the patch as your comments. Perhaps the last patch would pass the tests if run it again. Whatever, does that mean the patch is OK now?
&gt; 
&gt; Since there are no messages from the webkit review bot with your latest change, I think it&apos;s ok now.  Not sure what changes made this work.

Since the patch is OK, can it be submitted now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562186</commentid>
    <comment_count>26</comment_count>
      <attachid>126729</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-22 11:35:37 -0800</bug_when>
    <thetext>Comment on attachment 126729
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566351</commentid>
    <comment_count>27</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-27 20:58:20 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 126729 [details])
&gt; LGTM

Chris, does the patch need more review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568286</commentid>
    <comment_count>28</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-29 20:32:41 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (From update of attachment 126729 [details] [details])
&gt; &gt; LGTM
&gt; 
&gt; Chris, does the patch need more review?

Whether the patch is OK to commit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578744</commentid>
    <comment_count>29</comment_count>
      <attachid>126729</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-14 14:01:51 -0700</bug_when>
    <thetext>Comment on attachment 126729
Patch

Clearing flags on attachment: 126729

Committed r110744: &lt;http://trac.webkit.org/changeset/110744&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578745</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-14 14:01:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578903</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 16:25:32 -0700</bug_when>
    <thetext>This patch seems to crash in debug:

[49220:49236:17280644243061:ERROR:process_util_posix.cc(142)] Received signal 11
	base::debug::StackTrace::StackTrace() [0x851b56]
	base::(anonymous namespace)::StackDumpSignalHandler() [0x80b739]
	0x7f352f9d1af0
	WebCore::Biquad::process() [0x256d73e]
	WebCore::HRTFKernel::HRTFKernel() [0x25ac2e4]
	WebCore::HRTFKernel::create() [0x25ab549]
	WebCore::HRTFElevation::calculateKernelsForAzimuthElevation() [0x25aa703]
	WebCore::HRTFElevation::createForSubject() [0x25aa9db]
	WebCore::HRTFDatabase::HRTFDatabase() [0x25a987e]
	WebCore::HRTFDatabase::create() [0x25a9630]
	WebCore::HRTFDatabaseLoader::load() [0x257382d]
	WebCore::databaseLoaderEntry() [0x25737ac]
	WTF::threadEntryPoint() [0x1f509e5]
	WTF::wtfThreadEntryPoint() [0x793cb8]
	start_thread [0x7f3531e369ca]
	0x7f352fa8470d
None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578919</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 16:34:51 -0700</bug_when>
    <thetext>Rolled out in http://trac.webkit.org/changeset/110782</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579181</commentid>
    <comment_count>33</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-15 00:33:53 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; This patch seems to crash in debug:
&gt; 
&gt; [49220:49236:17280644243061:ERROR:process_util_posix.cc(142)] Received signal 11
&gt;     base::debug::StackTrace::StackTrace() [0x851b56]
&gt;     base::(anonymous namespace)::StackDumpSignalHandler() [0x80b739]
&gt;     0x7f352f9d1af0
&gt;     WebCore::Biquad::process() [0x256d73e]
&gt;     WebCore::HRTFKernel::HRTFKernel() [0x25ac2e4]
&gt;     WebCore::HRTFKernel::create() [0x25ab549]
&gt;     WebCore::HRTFElevation::calculateKernelsForAzimuthElevation() [0x25aa703]
&gt;     WebCore::HRTFElevation::createForSubject() [0x25aa9db]
&gt;     WebCore::HRTFDatabase::HRTFDatabase() [0x25a987e]
&gt;     WebCore::HRTFDatabase::create() [0x25a9630]
&gt;     WebCore::HRTFDatabaseLoader::load() [0x257382d]
&gt;     WebCore::databaseLoaderEntry() [0x25737ac]
&gt;     WTF::threadEntryPoint() [0x1f509e5]
&gt;     WTF::wtfThreadEntryPoint() [0x793cb8]
&gt;     start_thread [0x7f3531e369ca]
&gt;     0x7f352fa8470d
&gt; None

Hi,
That`s strange that I cannot reproduce the issue (by several different machines). Could you provide more details about your platform?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579188</commentid>
    <comment_count>34</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 01:03:40 -0700</bug_when>
    <thetext>It was the chromium-mac-linux configuration, which is Ubuntu Lucid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579411</commentid>
    <comment_count>35</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-15 08:38:09 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; It was the chromium-mac-linux configuration, which is Ubuntu Lucid.

I am confused by chromium-mac-linux, should not it be either chromium-linux or chromium-mac? The patch only acts in linux, I`ve tested in Ubuntu oneiric and it works very well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579439</commentid>
    <comment_count>36</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-15 09:26:08 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #31)
&gt; &gt; This patch seems to crash in debug:
&gt; &gt; 
&gt; &gt; [49220:49236:17280644243061:ERROR:process_util_posix.cc(142)] Received signal 11
&gt; &gt;     base::debug::StackTrace::StackTrace() [0x851b56]
&gt; &gt;     base::(anonymous namespace)::StackDumpSignalHandler() [0x80b739]
&gt; &gt;     0x7f352f9d1af0
&gt; &gt;     WebCore::Biquad::process() [0x256d73e]
&gt; &gt;     WebCore::HRTFKernel::HRTFKernel() [0x25ac2e4]
&gt; &gt;     WebCore::HRTFKernel::create() [0x25ab549]
&gt; &gt;     WebCore::HRTFElevation::calculateKernelsForAzimuthElevation() [0x25aa703]
&gt; &gt;     WebCore::HRTFElevation::createForSubject() [0x25aa9db]
&gt; &gt;     WebCore::HRTFDatabase::HRTFDatabase() [0x25a987e]
&gt; &gt;     WebCore::HRTFDatabase::create() [0x25a9630]
&gt; &gt;     WebCore::HRTFDatabaseLoader::load() [0x257382d]
&gt; &gt;     WebCore::databaseLoaderEntry() [0x25737ac]
&gt; &gt;     WTF::threadEntryPoint() [0x1f509e5]
&gt; &gt;     WTF::wtfThreadEntryPoint() [0x793cb8]
&gt; &gt;     start_thread [0x7f3531e369ca]
&gt; &gt;     0x7f352fa8470d
&gt; &gt; None
&gt; 
&gt; Hi,
&gt; That`s strange that I cannot reproduce the issue (by several different machines). Could you provide more details about your platform?

The stack trace looks totally bogus. (I&apos;m pretty sure the HRTFKernel doesn&apos;t call Biquad).

But I can reproduce the crash on my system.  The stack trace is totally trash too.  More work needed....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579499</commentid>
    <comment_count>37</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-15 10:39:35 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #33)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; This patch seems to crash in debug:
&gt; &gt; &gt; 
&gt; &gt; &gt; [49220:49236:17280644243061:ERROR:process_util_posix.cc(142)] Received signal 11
&gt; &gt; &gt;     base::debug::StackTrace::StackTrace() [0x851b56]
&gt; &gt; &gt;     base::(anonymous namespace)::StackDumpSignalHandler() [0x80b739]
&gt; &gt; &gt;     0x7f352f9d1af0
&gt; &gt; &gt;     WebCore::Biquad::process() [0x256d73e]
&gt; &gt; &gt;     WebCore::HRTFKernel::HRTFKernel() [0x25ac2e4]
&gt; &gt; &gt;     WebCore::HRTFKernel::create() [0x25ab549]
&gt; &gt; &gt;     WebCore::HRTFElevation::calculateKernelsForAzimuthElevation() [0x25aa703]
&gt; &gt; &gt;     WebCore::HRTFElevation::createForSubject() [0x25aa9db]
&gt; &gt; &gt;     WebCore::HRTFDatabase::HRTFDatabase() [0x25a987e]
&gt; &gt; &gt;     WebCore::HRTFDatabase::create() [0x25a9630]
&gt; &gt; &gt;     WebCore::HRTFDatabaseLoader::load() [0x257382d]
&gt; &gt; &gt;     WebCore::databaseLoaderEntry() [0x25737ac]
&gt; &gt; &gt;     WTF::threadEntryPoint() [0x1f509e5]
&gt; &gt; &gt;     WTF::wtfThreadEntryPoint() [0x793cb8]
&gt; &gt; &gt;     start_thread [0x7f3531e369ca]
&gt; &gt; &gt;     0x7f352fa8470d
&gt; &gt; &gt; None
&gt; &gt; 
&gt; &gt; Hi,
&gt; &gt; That`s strange that I cannot reproduce the issue (by several different machines). Could you provide more details about your platform?
&gt; 
&gt; The stack trace looks totally bogus. (I&apos;m pretty sure the HRTFKernel doesn&apos;t call Biquad).
&gt; 
&gt; But I can reproduce the crash on my system.  The stack trace is totally trash too.  More work needed....

Ok.  The issue is that on my debug build, I get a 64-bit build so loading the source address into edx loses the top 32 bits, which are non-zero.  We then try to load from that non-existent address and crash.

Don&apos;t understand why this doesn&apos;t happen on a release build, but this is definitely a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579601</commentid>
    <comment_count>38</comment_count>
      <attachid>132095</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-15 11:51:01 -0700</bug_when>
    <thetext>Created attachment 132095
Updated patch to handle 32 and 64-bit builds

Here is an updated patch.  This passes all of the webaudio tests in debug mode. (Release mode test in progress.)

This basically replaces all uses of the edx and ecx registers with their 64-bit counterparts, rdx and rcx.

However, the complexity of maintaining this assembly code is getting rather large, so I&apos;m inclined not to do this.  It would be much better if intrinsics could be used, or, even better, do what the FIXME comment says and unroll the while loop with carefully scheduled arithmetic (in C) if that can achieve the desired performance gains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579682</commentid>
    <comment_count>39</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 13:33:56 -0700</bug_when>
    <thetext>&gt; I am confused by chromium-mac-linux, should not it be either chromium-linux or chromium-mac? The patch only acts in linux, I`ve tested in Ubuntu oneiric and it works very well.

Sorry.  I meant chromium-linux.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580037</commentid>
    <comment_count>40</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-15 19:17:59 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Created an attachment (id=132095) [details]
&gt; Updated patch to handle 32 and 64-bit builds
&gt; 
&gt; Here is an updated patch.  This passes all of the webaudio tests in debug mode. (Release mode test in progress.)
&gt; 
&gt; This basically replaces all uses of the edx and ecx registers with their 64-bit counterparts, rdx and rcx.
&gt; 
&gt; However, the complexity of maintaining this assembly code is getting rather large, so I&apos;m inclined not to do this.  It would be much better if intrinsics could be used, or, even better, do what the FIXME comment says and unroll the while loop with carefully scheduled arithmetic (in C) if that can achieve the desired performance gains.

Hi Ray, thank you very much for fixing this bug. I agree that we should not make the code here to get too large.
I have tried some ways to use intrinsics and C code to unroll the loop, but they could not achieve the performance increased by assembly code, because it was not easy to pipeline and reschedule the executing order of the code as assembly did. 
But I can make a try to find whether there is a better way to optimize the code with intrinsics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581588</commentid>
    <comment_count>41</comment_count>
      <attachid>132532</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-18 20:18:12 -0700</bug_when>
    <thetext>Created attachment 132532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581592</commentid>
    <comment_count>42</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-18 20:23:38 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; Created an attachment (id=132532) [details]
&gt; Patch

Re-implemented the pipeline by intrinsics. What surprised me is the performance is much better than assembly code, ~45% with original ~20%(for 128 frames size).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582029</commentid>
    <comment_count>43</comment_count>
      <attachid>132532</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-19 12:13:27 -0700</bug_when>
    <thetext>Comment on attachment 132532
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=132532&amp;action=review

This looks much nicer than the assembly code, and it&apos;s faster too!  Code looks good, but adding some comments would help to understand what&apos;s going on.

&gt; Source/WebCore/platform/audio/Biquad.cpp:113
&gt; +    __m128d mma1 = _mm_set_sd(-a1);

mma1 = (0, -a1)

&gt; Source/WebCore/platform/audio/Biquad.cpp:117
&gt; +        mm6 = mm1;

Add comment mm6 = (y2, x)

&gt; Source/WebCore/platform/audio/Biquad.cpp:118
&gt; +        mm1 = _mm_shuffle_pd(mm1, mm4, 0); // y2 = y1

Add comment that mm1 = (y1, x)

&gt; Source/WebCore/platform/audio/Biquad.cpp:119
&gt; +        mm5 = _mm_mul_pd(mm2, mm0); // (x1*b1 x2*b2)

Insert comma:  (x1 * b1, x2 * b2)
Webkit style includes a space around arithmetic operators.  Do the same for next line.

&gt; Source/WebCore/platform/audio/Biquad.cpp:121
&gt; +        mm0 = _mm_shuffle_pd(mm0, mm1, 1); // (x1 = x, x2 = x1)

Comment is confusing.  Maybe say mm0 = (x, x1)

&gt; Source/WebCore/platform/audio/Biquad.cpp:122
&gt; +        mm4 = _mm_mul_sd(mm4, mma1); // -y1*a1

Be more explicit about contents of mm4.

mm4 = (0, -y1 * a1)

&gt; Source/WebCore/platform/audio/Biquad.cpp:123
&gt; +        mm5 = _mm_add_pd(mm5, mm6); // (x1*b1-y2*a2 x2*b2+x*b0)

Insert comma, add space around operators:

(x1 * b1 - y2 * a2, x2 * b2 + x * b0)

&gt; Source/WebCore/platform/audio/Biquad.cpp:124
&gt; +        n--;

Why decrement n here?  Is this a pipeline issue?  If not, can we put the decrement back into while (n--)?

&gt; Source/WebCore/platform/audio/Biquad.cpp:125
&gt; +        mm6 = mm5;

mm6 = (x1 * b1 - y2 * a2, x2 * b2 + x * b0)

&gt; Source/WebCore/platform/audio/Biquad.cpp:126
&gt; +        mm7 = _mm_load_ss(sourceP);

mm7 = (0, 0, 0, *sourceP)

And we&apos;re loading the next x value.

&gt; Source/WebCore/platform/audio/Biquad.cpp:127
&gt; +        mm1 = _mm_cvtss_sd(mm1, mm7); // x = *sourceP

Maybe say exactly what is in mm1?  mm1 = (y1, x)

&gt; Source/WebCore/platform/audio/Biquad.cpp:128
&gt; +        mm5 = _mm_add_pd(mm4, mm5); // (x1*b1-y2*a2 x2*b2+x*b0-y1*a1) 

Same comment as for line 123, 119.

Any advantage in doing mm_add_pd?  It looks like we don&apos;t care about the high part of mm5.  Is that right?

&gt; Source/WebCore/platform/audio/Biquad.cpp:129
&gt; +        mm6 = _mm_shuffle_pd(mm6, mm6, 1);

mm6 = (x2 * b2 + x * b0, x1 * b1 - y2 * a2)

&gt; Source/WebCore/platform/audio/Biquad.cpp:130
&gt; +        mm5 = _mm_add_pd(mm5, mm6); // y

mm5 = (x1*b1-y2*a2+x2*b2+x*b0, y = x2*b2+x*b0-y1*a1+x1*b1-y2*a2), and we ignore high part of mm5, so maybe just mm_add_sd?

&gt; Source/WebCore/platform/audio/Biquad.cpp:131
&gt; +        mm7 = _mm_cvtsd_ss(mm7, mm5);

mm7 = (0, 0, 0, y)

&gt; Source/WebCore/platform/audio/Biquad.cpp:133
&gt; +        mm4 = mm5; // y1 = y

mm4 = (x1*b1-y2*a2+x2*b2+x*b0, y)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582767</commentid>
    <comment_count>44</comment_count>
      <attachid>132760</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-19 22:34:45 -0700</bug_when>
    <thetext>Created attachment 132760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582774</commentid>
    <comment_count>45</comment_count>
      <attachid>132532</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-19 22:44:34 -0700</bug_when>
    <thetext>Comment on attachment 132532
Patch

Hi Ray, patch is updated as your comments.

View in context: https://bugs.webkit.org/attachment.cgi?id=132532&amp;action=review

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:113
&gt;&gt; +    __m128d mma1 = _mm_set_sd(-a1);
&gt; 
&gt; mma1 = (0, -a1)

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:117
&gt;&gt; +        mm6 = mm1;
&gt; 
&gt; Add comment mm6 = (y2, x)

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:118
&gt;&gt; +        mm1 = _mm_shuffle_pd(mm1, mm4, 0); // y2 = y1
&gt; 
&gt; Add comment that mm1 = (y1, x)

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:119
&gt;&gt; +        mm5 = _mm_mul_pd(mm2, mm0); // (x1*b1 x2*b2)
&gt; 
&gt; Insert comma:  (x1 * b1, x2 * b2)
&gt; Webkit style includes a space around arithmetic operators.  Do the same for next line.

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:121
&gt;&gt; +        mm0 = _mm_shuffle_pd(mm0, mm1, 1); // (x1 = x, x2 = x1)
&gt; 
&gt; Comment is confusing.  Maybe say mm0 = (x, x1)

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:122
&gt;&gt; +        mm4 = _mm_mul_sd(mm4, mma1); // -y1*a1
&gt; 
&gt; Be more explicit about contents of mm4.
&gt; 
&gt; mm4 = (0, -y1 * a1)

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:123
&gt;&gt; +        mm5 = _mm_add_pd(mm5, mm6); // (x1*b1-y2*a2 x2*b2+x*b0)
&gt; 
&gt; Insert comma, add space around operators:
&gt; 
&gt; (x1 * b1 - y2 * a2, x2 * b2 + x * b0)

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:124
&gt;&gt; +        n--;
&gt; 
&gt; Why decrement n here?  Is this a pipeline issue?  If not, can we put the decrement back into while (n--)?

This will impact the pipeline, using &quot;while(n--)&quot; pulls down the performance a little, 45% to 43%.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:125
&gt;&gt; +        mm6 = mm5;
&gt; 
&gt; mm6 = (x1 * b1 - y2 * a2, x2 * b2 + x * b0)

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:126
&gt;&gt; +        mm7 = _mm_load_ss(sourceP);
&gt; 
&gt; mm7 = (0, 0, 0, *sourceP)
&gt; 
&gt; And we&apos;re loading the next x value.

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:128
&gt;&gt; +        mm5 = _mm_add_pd(mm4, mm5); // (x1*b1-y2*a2 x2*b2+x*b0-y1*a1) 
&gt; 
&gt; Same comment as for line 123, 119.
&gt; 
&gt; Any advantage in doing mm_add_pd?  It looks like we don&apos;t care about the high part of mm5.  Is that right?

Yes, _mm_add_sd is better.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:129
&gt;&gt; +        mm6 = _mm_shuffle_pd(mm6, mm6, 1);
&gt; 
&gt; mm6 = (x2 * b2 + x * b0, x1 * b1 - y2 * a2)

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:130
&gt;&gt; +        mm5 = _mm_add_pd(mm5, mm6); // y
&gt; 
&gt; mm5 = (x1*b1-y2*a2+x2*b2+x*b0, y = x2*b2+x*b0-y1*a1+x1*b1-y2*a2), and we ignore high part of mm5, so maybe just mm_add_sd?

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:133
&gt;&gt; +        mm4 = mm5; // y1 = y
&gt; 
&gt; mm4 = (x1*b1-y2*a2+x2*b2+x*b0, y)

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583169</commentid>
    <comment_count>46</comment_count>
      <attachid>132760</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-20 10:00:27 -0700</bug_when>
    <thetext>Comment on attachment 132760
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=132760&amp;action=review

Code looks good; just a few more minor items to look at.

&gt; Source/WebCore/platform/audio/Biquad.cpp:109
&gt; +    __m128d mm4 = _mm_set_pd(0, y1); // mm4 = (0, y1)

It looks like we only care about the the low part of mm4.  Maybe add comment that we only use the low part of mm4.

Same goes for mma1 in line 113.

&gt; Source/WebCore/platform/audio/Biquad.cpp:122
&gt; +        mm4 = _mm_mul_sd(mm4, mma1); // mm4 = (0, -y1 * a1)

I think the comment should be mm4=-y1*a1 since we&apos;re doing mul_sd.  We don&apos;t care what&apos;s in the high part of mm4.

&gt; Source/WebCore/platform/audio/Biquad.cpp:125
&gt; +        mm6 = mm5; // mm6 = (x1 * b1 - y2 * a2, x2 * b2 + x * b0)

See note on for line 130.  Shuffle mm5 to the right parts of mm6 now instead of later?

&gt; Source/WebCore/platform/audio/Biquad.cpp:126
&gt; +        mm7 = _mm_load_ss(sourceP); // Load next x value, mm7 = (0, 0, 0, x)

We load mm7 from memory here, but use it in the very next instruction.  Could this be moved further up to lessen any pipeline issues?  We&apos;re not using the value of mm7 until line 127.

&gt; Source/WebCore/platform/audio/Biquad.cpp:128
&gt; +        mm5 = _mm_add_sd(mm4, mm5); // mm5 = (x1 * b1 - y2 * a2, x2 * b2 + x * b0 - y1 * a1)

Since we&apos;re doing mm_add_sd, we don&apos;t care what&apos;s in the high part of mm5.  Maybe the comment should be mm5 = x2*b2 + x*b0-y1*a1.

&gt; Source/WebCore/platform/audio/Biquad.cpp:130
&gt; +        mm5 = _mm_add_sd(mm5, mm6); // mm5 = (x1 * b1 - y2 * a2, x * b0 + x1 * b1 + x2 * b2 - y1 * a1 - y2 * a2) = (*, y)

Same comment here as for line 128.  We don&apos;t care what&apos;s in the high part of mm5.

Also, in line 129, we swap the high and low parts of mm6.  Isn&apos;t it possible to do that in line 125 where we assign mm5 to mm6?  Just shuffle mm5 to the right parts of mm6?  That&apos;s one less instruction, but I don&apos;t know what the pipeline affects will be.

&gt; Source/WebCore/platform/audio/Biquad.cpp:131
&gt; +        mm7 = _mm_cvtsd_ss(mm7, mm5); // mm7 = (0, 0, 0, y)

Actually, I think the comment is wrong. (Sorry about that.)  cvtsd_ss doesn&apos;t modify the other parts of mm7.  Plus we&apos;re only using the low part, maybe just say mm7 = static_cast&lt;float&gt;(y).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583729</commentid>
    <comment_count>47</comment_count>
      <attachid>132954</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-20 20:12:57 -0700</bug_when>
    <thetext>Created attachment 132954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583744</commentid>
    <comment_count>48</comment_count>
      <attachid>132760</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-20 20:36:18 -0700</bug_when>
    <thetext>Comment on attachment 132760
Patch

Thanks, Ray. Update the patch.

View in context: https://bugs.webkit.org/attachment.cgi?id=132760&amp;action=review

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:126
&gt;&gt; +        mm7 = _mm_load_ss(sourceP); // Load next x value, mm7 = (0, 0, 0, x)
&gt; 
&gt; We load mm7 from memory here, but use it in the very next instruction.  Could this be moved further up to lessen any pipeline issues?  We&apos;re not using the value of mm7 until line 127.

There is little difference of performance after moving this line up, I think it is not in the key path of the pipeline.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:130
&gt;&gt; +        mm5 = _mm_add_sd(mm5, mm6); // mm5 = (x1 * b1 - y2 * a2, x * b0 + x1 * b1 + x2 * b2 - y1 * a1 - y2 * a2) = (*, y)
&gt; 
&gt; Same comment here as for line 128.  We don&apos;t care what&apos;s in the high part of mm5.
&gt; 
&gt; Also, in line 129, we swap the high and low parts of mm6.  Isn&apos;t it possible to do that in line 125 where we assign mm5 to mm6?  Just shuffle mm5 to the right parts of mm6?  That&apos;s one less instruction, but I don&apos;t know what the pipeline affects will be.

It seems we should do that and make us to save one instruction, but it pulls down the performance after that, strange~ 
I guess the compiler does much for us when we use intrinsic, the actual assembly code looks much different from what I expect for after  &quot;gcc -s &quot; .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584205</commentid>
    <comment_count>49</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-21 09:17:07 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 132760 [details])
&gt; Thanks, Ray. Update the patch.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132760&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:126
&gt; &gt;&gt; +        mm7 = _mm_load_ss(sourceP); // Load next x value, mm7 = (0, 0, 0, x)
&gt; &gt; 
&gt; &gt; We load mm7 from memory here, but use it in the very next instruction.  Could this be moved further up to lessen any pipeline issues?  We&apos;re not using the value of mm7 until line 127.
&gt; 
&gt; There is little difference of performance after moving this line up, I think it is not in the key path of the pipeline.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:130
&gt; &gt;&gt; +        mm5 = _mm_add_sd(mm5, mm6); // mm5 = (x1 * b1 - y2 * a2, x * b0 + x1 * b1 + x2 * b2 - y1 * a1 - y2 * a2) = (*, y)
&gt; &gt; 
&gt; &gt; Same comment here as for line 128.  We don&apos;t care what&apos;s in the high part of mm5.
&gt; &gt; 
&gt; &gt; Also, in line 129, we swap the high and low parts of mm6.  Isn&apos;t it possible to do that in line 125 where we assign mm5 to mm6?  Just shuffle mm5 to the right parts of mm6?  That&apos;s one less instruction, but I don&apos;t know what the pipeline affects will be.
&gt; 
&gt; It seems we should do that and make us to save one instruction, but it pulls down the performance after that, strange~ 
&gt; I guess the compiler does much for us when we use intrinsic, the actual assembly code looks much different from what I expect for after  &quot;gcc -s &quot; .

Ok.  I&apos;m happy with this patch as it is now.  Looks good.

I do wonder, though, if you moved load_ss to be after line 124 and changed line 125 to do the shuffle (removing the shuffle at line 129) would improve performance.  Or maybe move the (new) shuffle down a few lines since we don&apos;t need mm6 until line 130.  Perhaps these changes will help the pipeline.

You don&apos;t have to do this experiment if you don&apos;t want to.  I&apos;m just kind of curious.  Otherwise, the patch looks good to me and is ready to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584506</commentid>
    <comment_count>50</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-21 12:38:13 -0700</bug_when>
    <thetext>Does this latest patch pass the layout test (and not crash) on the Debug build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585084</commentid>
    <comment_count>51</comment_count>
      <attachid>132760</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-22 02:41:26 -0700</bug_when>
    <thetext>Comment on attachment 132760
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=132760&amp;action=review

&gt;&gt;&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:126
&gt;&gt;&gt;&gt; +        mm7 = _mm_load_ss(sourceP); // Load next x value, mm7 = (0, 0, 0, x)
&gt;&gt;&gt; 
&gt;&gt;&gt; We load mm7 from memory here, but use it in the very next instruction.  Could this be moved further up to lessen any pipeline issues?  We&apos;re not using the value of mm7 until line 127.
&gt;&gt; 
&gt;&gt; There is little difference of performance after moving this line up, I think it is not in the key path of the pipeline.
&gt; 
&gt; Ok.  I&apos;m happy with this patch as it is now.  Looks good.
&gt; 
&gt; I do wonder, though, if you moved load_ss to be after line 124 and changed line 125 to do the shuffle (removing the shuffle at line 129) would improve performance.  Or maybe move the (new) shuffle down a few lines since we don&apos;t need mm6 until line 130.  Perhaps these changes will help the pipeline.
&gt; 
&gt; You don&apos;t have to do this experiment if you don&apos;t want to.  I&apos;m just kind of curious.  Otherwise, the patch looks good to me and is ready to go.

It does not matter, I did it. But it seems it does not work, a tiny slowing down. Hard to explain, we cannot exactly schedule the pipeline by intrinsics as the way by assembly, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585089</commentid>
    <comment_count>52</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-22 02:52:28 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; Does this latest patch pass the layout test (and not crash) on the Debug build?

The layout test passed in both debug and release build from my environment (32-bit).
Last crash issue`s root cause is I used 32-bit registers for the address and it will failed in 64-bit system. I use intrinsics this time and suppose it would not meet this issue. Certainly more tests are needed, but I don`t have 64-bit system right now.

Ray, would you mind to help me to check whether the patch is OK in your 64-bit system?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585444</commentid>
    <comment_count>53</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-22 10:28:13 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; (In reply to comment #50)
&gt; &gt; Does this latest patch pass the layout test (and not crash) on the Debug build?
&gt; 
&gt; The layout test passed in both debug and release build from my environment (32-bit).
&gt; Last crash issue`s root cause is I used 32-bit registers for the address and it will failed in 64-bit system. I use intrinsics this time and suppose it would not meet this issue. Certainly more tests are needed, but I don`t have 64-bit system right now.

I don&apos;t expect any issues with 64-bit builds.  The compiler should use the right sized registers for the intrinsic operations.

&gt; 
&gt; Ray, would you mind to help me to check whether the patch is OK in your 64-bit system?

No problem.  The debug build passes all tests, except for the convolution-mono-mono test, but I think that&apos;s a bug in the convolver that needs to be fixed.

The release build passes all tests too. (convolution-mono-mono passes.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585448</commentid>
    <comment_count>54</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-22 10:30:29 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 132760 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132760&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:126
&gt; &gt;&gt;&gt;&gt; +        mm7 = _mm_load_ss(sourceP); // Load next x value, mm7 = (0, 0, 0, x)
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; We load mm7 from memory here, but use it in the very next instruction.  Could this be moved further up to lessen any pipeline issues?  We&apos;re not using the value of mm7 until line 127.
&gt; &gt;&gt; 
&gt; &gt;&gt; There is little difference of performance after moving this line up, I think it is not in the key path of the pipeline.
&gt; &gt; 
&gt; &gt; Ok.  I&apos;m happy with this patch as it is now.  Looks good.
&gt; &gt; 
&gt; &gt; I do wonder, though, if you moved load_ss to be after line 124 and changed line 125 to do the shuffle (removing the shuffle at line 129) would improve performance.  Or maybe move the (new) shuffle down a few lines since we don&apos;t need mm6 until line 130.  Perhaps these changes will help the pipeline.
&gt; &gt; 
&gt; &gt; You don&apos;t have to do this experiment if you don&apos;t want to.  I&apos;m just kind of curious.  Otherwise, the patch looks good to me and is ready to go.
&gt; 
&gt; It does not matter, I did it. But it seems it does not work, a tiny slowing down. Hard to explain, we cannot exactly schedule the pipeline by intrinsics as the way by assembly, I guess.

Thanks for doing the test.  I would have thought there might be some small gain, but the compiler can rearrange things as you say.

So I think this new patch is ready to go as is.  Thanks for doing the new version!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586029</commentid>
    <comment_count>55</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-03-22 19:58:56 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #52)
&gt; &gt; (In reply to comment #50)
&gt; &gt; &gt; Does this latest patch pass the layout test (and not crash) on the Debug build?
&gt; &gt; 
&gt; &gt; The layout test passed in both debug and release build from my environment (32-bit).
&gt; &gt; Last crash issue`s root cause is I used 32-bit registers for the address and it will failed in 64-bit system. I use intrinsics this time and suppose it would not meet this issue. Certainly more tests are needed, but I don`t have 64-bit system right now.
&gt; 
&gt; I don&apos;t expect any issues with 64-bit builds.  The compiler should use the right sized registers for the intrinsic operations.
&gt; 
&gt; &gt; 
&gt; &gt; Ray, would you mind to help me to check whether the patch is OK in your 64-bit system?
&gt; 
&gt; No problem.  The debug build passes all tests, except for the convolution-mono-mono test, but I think that&apos;s a bug in the convolver that needs to be fixed.
&gt; 
&gt; The release build passes all tests too. (convolution-mono-mono passes.)

Ray, thank you for doing the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767523</commentid>
    <comment_count>56</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-14 17:42:33 -0800</bug_when>
    <thetext>If this patch looked good back in March, why hasn&apos;t it been approved or landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768716</commentid>
    <comment_count>57</comment_count>
      <attachid>132954</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-15 17:10:38 -0800</bug_when>
    <thetext>Comment on attachment 132954
Patch

I&apos;m landing based on prior reviewers comments.  It seems like it was simply lost in the shuffle at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768725</commentid>
    <comment_count>58</comment_count>
      <attachid>132954</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 17:20:24 -0800</bug_when>
    <thetext>Comment on attachment 132954
Patch

Clearing flags on attachment: 132954

Committed r134867: &lt;http://trac.webkit.org/changeset/134867&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768726</commentid>
    <comment_count>59</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 17:20:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769522</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 11:43:33 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 102544</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769526</commentid>
    <comment_count>61</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-16 11:45:41 -0800</bug_when>
    <thetext>Reopened because this change broke one of the security tests.  See https://bugs.webkit.org/show_bug.cgi?id=102524 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769530</commentid>
    <comment_count>62</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-16 11:47:12 -0800</bug_when>
    <thetext>Rollout was done via https://bugs.webkit.org/show_bug.cgi?id=102544.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907175</commentid>
    <comment_count>63</comment_count>
    <who name="danceoffwithyourpantsoff">danceoffwithyourpantsoff</who>
    <bug_when>2013-07-09 10:24:55 -0700</bug_when>
    <thetext>I might be completely wrong (I just happened to skim past this patch), but shouldn&apos;t the SSE2 code be a runtime check?  The #ifdef SSE2 is only good for knowing if you can use the intrinsics or not (if the compiler supports SSE2).  I don&apos;t know the current standing expectation of having SSE2 support is, but last I remember it wasn&apos;t considered a requirement:

https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/66p8sJtluJA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907185</commentid>
    <comment_count>64</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2013-07-09 10:43:54 -0700</bug_when>
    <thetext>(In reply to comment #63)
&gt; I might be completely wrong (I just happened to skim past this patch), but shouldn&apos;t the SSE2 code be a runtime check?  The #ifdef SSE2 is only good for knowing if you can use the intrinsics or not (if the compiler supports SSE2).  I don&apos;t know the current standing expectation of having SSE2 support is, but last I remember it wasn&apos;t considered a requirement:
&gt; 
&gt; https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/66p8sJtluJA

I think you are correct.  It&apos;s been a while since I looked, but I think on Linux and Windows the compiler flag that enables SSE2 support is not set, so the SSE2 code is never compiled in.  On Mac, SSE2 has always been available on x86 machines and I think SSE2 code is compiled by default.  

There should be no issues with this code.  In any case, this particular patch was rolled out.

Ideally, we would like a runtime check and use the SSE2 code when available, falling back to the C reference when SSE2 is not available.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121082</attachid>
            <date>2012-01-04 01:17:37 -0800</date>
            <delta_ts>2012-02-09 23:44:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>4400</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNzBiNTllLi4zODZiNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTItMDEtMDQgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgT3B0aW1pemUgdGhlIG11bHRpcGx5LWFkZCBpbiBCaXF1YWQuY3BwOjpwcm9jZXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUyOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBpcGVsaW5l
IHRoZSBtdWx0aXBseS1hZGQgd2l0aCBTU0UyIGluc3RydWN0aW9ucy4KKyAgICAgICAgR2V0IGFi
b3V0IDIwJSB+IDQwJSBpbXByb3ZlbWVudCBmb3IgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJv
Y2Vzcyk6CisKIDIwMTItMDEtMDMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoIHNob3VsZG4ndCByZXR1cm4gYSB2
YWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKaW5kZXggOGRjMWY0
Zi4uNWUyMTE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlx
dWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCkBA
IC00MSw2ICs0MSwxMCBAQAogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgogI2Vu
ZGlmCiAKKyNpZmRlZiBfX1NTRTJfXworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgaW50IGtCdWZmZXJTaXplID0gMTAyNDsKQEAg
LTgyLDkgKzg2LDYwIEBAIHZvaWQgQmlxdWFkOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VQ
LCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgZG91YmxlIGIyID0g
bV9iMjsKICAgICBkb3VibGUgYTEgPSBtX2ExOwogICAgIGRvdWJsZSBhMiA9IG1fYTI7Ci0KKy8v
IE9wdGltaXplIHRoZSBob3QgbXVsdGlwbHktYWRkIGJ5IHBpcGVsaW5pbmcgd2l0aCBTU0UyIGlu
c3RydWN0aW9ucy4KKyNpZmRlZiBfX1NTRTJfXworICAgIGRvdWJsZSBuYTEgPSAtYTE7CisgICAg
ZG91YmxlIG5hMiA9IC1hMjsKKyAgICBfX2FzbV9fKAorICAgICAgICAibW92bCAgICAgJTAsICAg
ICAgJSVlZHhcblx0IiAvLyBtb3ZlIHNvdXJjZVAgdG8gZWR4CisgICAgICAgICJtb3ZsICAgICAl
MSwgICAgICAlJWVjeFxuXHQiIC8vIG1vdmUgZGVzdFAgdG8gZWN4CisgICAgICAgICJtb3ZsICAg
ICAlMiwgICAgICAlJWVheFxuXHQiIC8vIG1vdmUgbiB0byBlYXgKKyAgICAgICAgInRlc3RsICAg
ICUlZWF4LCAgICUlZWF4XG5cdCIKKyAgICAgICAgImplIC5MYWJlbEVuZFxuXHQiCisgICAgICAg
ICJtb3ZzcyAgICAoJSVlZHgpLCAlJXhtbTdcblx0IiAvLyBsb2FkIHggdG8geG1tN1s2MzowXQor
ICAgICAgICAiY3Z0c3Myc2QgJSV4bW03LCAgJSV4bW0xXG5cdCIgLy8gY29udmVydCB4IGZyb20g
ZmxvYXQgdG8gZG91YmxlCisgICAgICAgICJtb3ZscGQgICAlNCwgICAgICAlJXhtbTBcblx0IiAv
LyBtb3ZlIHgyIHRvIHhtbTBbNjM6MF0KKyAgICAgICAgIm1vdmxwZCAgICU5LCAgICAgICUleG1t
MlxuXHQiIC8vIG1vdmUgYjIgdG8geG1tMls2MzowXQorICAgICAgICAibW92bHBkICAgJTcsICAg
ICAgJSV4bW0zXG5cdCIgLy8gbW92ZSBiMCB0byB4bW0zWzYzOjBdCisgICAgICAgICJtb3ZocGQg
ICAlMywgICAgICAlJXhtbTBcblx0IiAvLyBtb3ZlIHgxIHRvIHhtbTBbMTI3OjY0XSAtLS0tPiAo
eDEgeDIpCisgICAgICAgICJtb3ZocGQgICAlNiwgICAgICAlJXhtbTFcblx0IiAvLyBtb3ZlIHky
IHRvIHhtbTFbMTI3OjY0XSAtLS0tPiAoeTIgeCApCisgICAgICAgICJtb3ZocGQgICAlOCwgICAg
ICAlJXhtbTJcblx0IiAvLyBtb3ZlIGIxIHRvIHhtbTJbMTI3OjY0XSAtLS0tPiAoYjEgYjIpCisg
ICAgICAgICJtb3ZocGQgICAlMTEsICAgICAlJXhtbTNcblx0IiAvLyBtb3ZlIGEyIHRvIHhtbTNb
MTI3OjY0XSAtLS0tPiAoYTIgYjApCisgICAgICAgICJtb3ZscGQgICAlNSwgICAgICAlJXhtbTRc
blx0IiAvLyBtb3ZlIHkxIHRvIHhtbTRbNjM6MF0KKyAgICAgICAgIi5MYWJlbExvb3A6XG5cdCIK
KyAgICAgICAgImFkZGwgICAgICQ0LCAgICAgICUlZWR4XG5cdCIgLy8gc291cmNlUCsrCisgICAg
ICAgICJtb3ZhcGQgICAlJXhtbTAsICAlJXhtbTVcblx0IiAvLyBjb3B5ICh4MSB4MikKKyAgICAg
ICAgIm1vdmFwZCAgICUleG1tMSwgICUleG1tNlxuXHQiIC8vIGNvcHkgKHkyIHggKQorICAgICAg
ICAic2h1ZnBkICAgJDAsICUleG1tNCwgJSV4bW0xXG5cdCIgLy8geTI9eTEKKyAgICAgICAgIm11
bHBkICAgICUleG1tMiwgICUleG1tNVxuXHQiIC8vICh4MSpiMSB4MipiMikKKyAgICAgICAgIm11
bHBkICAgICUleG1tMywgICUleG1tNlxuXHQiIC8vICh5MiphMiB4ICpiMCkKKyAgICAgICAgInNo
dWZwZCAgICQxLCAlJXhtbTEsICUleG1tMFxuXHQiIC8vIHgyPXgxIHgxPXgKKyAgICAgICAgIm11
bHNkICAgICUxMCwgICAgICUleG1tNFxuXHQiIC8vIGExKnkxCisgICAgICAgICJhZGRwZCAgICAl
JXhtbTYsICAlJXhtbTVcblx0IiAvLyAoeDEqYjEreTIqYTIgeDIqYjIreCpiMCkKKyAgICAgICAg
InN1YmwgICAgICQxLCAgICAgICUlZWF4XG5cdCIgLy8gbi0tCisgICAgICAgICJtb3ZhcGQgICAl
JXhtbTUsICAlJXhtbTZcblx0IgorICAgICAgICAibW92c3MgICAgKCUlZWR4KSwgJSV4bW03XG5c
dCIgLy8gbG9hZCB4CisgICAgICAgICJjdnRzczJzZCAlJXhtbTcsICAlJXhtbTFcblx0IiAvLyBj
dnQgeCBmcm9tIGZsb2F0IHRvIGRvdWJsZSAgeCA9IG5ldyB4CisgICAgICAgICJhZGRzZCAgICAl
JXhtbTQsICAlJXhtbTVcblx0IiAvLyB4KmIwICsgKHgyKmIyK3gqYjApCisgICAgICAgICJzaHVm
cGQgICAkMSwgJSV4bW02LCAlJXhtbTZcblx0IiAvLyAoeDEqYjEreTIqYTIgeDIqYjIreCpiMCkg
LT4gKHgyKmIyK3gqYjAgeDEqYjEreTIqYTIpCisgICAgICAgICJhZGRzZCAgICAlJXhtbTYsICAl
JXhtbTVcblx0IiAvLyB5CisgICAgICAgICJjdnRzZDJzcyAlJXhtbTUsICAlJXhtbTdcblx0Igor
ICAgICAgICAibW92c3MgICAgJSV4bW03LCAgKCUlZWN4KVxuXHQiIC8vIHkgLT4gKmRlc3RQCisg
ICAgICAgICJtb3ZhcGQgICAlJXhtbTUsICAlJXhtbTRcblx0IiAvLyB5MSA9IHkKKyAgICAgICAg
ImFkZGwgICAgICQ0LCAgICAgICUlZWN4XG5cdCIgLy8gZGVzdFArKworICAgICAgICAidGVzdGwg
ICAgJSVlYXgsICAgJSVlYXhcblx0IgorICAgICAgICAiam5lIC5MYWJlbExvb3Bcblx0IiAvLyB3
aGlsZSgpCisgICAgICAgICIuTGFiZWxFbmQ6XG5cdCIKKyAgICAgICAgIm1vdmhwZCAgICUleG1t
MCwgICUzXG5cdCIKKyAgICAgICAgIm1vdmxwZCAgICUleG1tMCwgICU0XG5cdCIKKyAgICAgICAg
Im1vdmxwZCAgICUleG1tNCwgICU1XG5cdCIKKyAgICAgICAgIm1vdmhwZCAgICUleG1tMSwgICU2
XG5cdCIKKyAgICAgICAgOgorICAgICAgICA6Im0iKHNvdXJjZVApLCAibSIoZGVzdFApLCAibSIo
biksICJtIih4MSksICJtIih4MiksICJtIih5MSksICJtIih5MiksICJtIihiMCksICJtIihiMSks
ICJtIihiMiksICJtIihuYTEpLCAibSIobmEyKQorICAgICAgICA6ImVheCIsICJlZHgiLCAiZWN4
IgorICAgICk7CisjZWxzZQogICAgIHdoaWxlIChuLS0pIHsKLSAgICAgICAgLy8gRklYTUU6IHRo
aXMgY2FuIGJlIG9wdGltaXplZCBieSBwaXBlbGluaW5nIHRoZSBtdWx0aXBseSBhZGRzLi4uCiAg
ICAgICAgIGZsb2F0IHggPSAqc291cmNlUCsrOwogICAgICAgICBmbG9hdCB5ID0gYjAqeCArIGIx
KngxICsgYjIqeDIgLSBhMSp5MSAtIGEyKnkyOwogCkBAIC05Niw2ICsxNTEsNyBAQCB2b2lkIEJp
cXVhZDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKQogICAgICAgICB5MiA9IHkxOwogICAgICAgICB5MSA9IHk7CiAgICAg
fQorI2VuZGlmCiAKICAgICAvLyBMb2NhbCB2YXJpYWJsZXMgYmFjayB0byBtZW1iZXIuIEZsdXNo
IGRlbm9ybWFscyBoZXJlIHNvIHdlCiAgICAgLy8gZG9uJ3Qgc2xvdyBkb3duIHRoZSBpbm5lciBs
b29wIGFib3ZlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>121300</attachid>
            <date>2012-01-05 10:45:40 -0800</date>
            <delta_ts>2012-01-05 10:45:40 -0800</delta_ts>
            <desc>Biquad layout test script</desc>
            <filename>biquad-test.html</filename>
            <type>text/html</type>
            <size>4176</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiI+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkJpcXVhZCBUZXN0PC90aXRsZT4KICAg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiLz4KICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CiAgPC9oZWFkPgoKICA8Ym9keT4KICAgIDxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogICAgPHNjcmlw
dD4KCWRlc2NyaXB0aW9uKCJUZXN0IGJpcXVhZCBmaWx0ZXIgcmVzcG9uc2UiKTsKCgl2YXIgY29u
dGV4dDsKCXZhciBmaWx0ZXI7Cgl2YXIgc2lnbmFsOwoJdmFyIGltcHVsc2U7Cgl2YXIgcmVuZGVy
ZWRCdWZmZXI7Cgl2YXIgcmVuZGVyZWREYXRhOwoJdmFyIHRydWVSZXN1bHQ7Cgl2YXIgc2FtcGxl
UmF0ZSA9IDQ0MTAwLjA7Cgl2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDE7Cgl2YXIgcHVsc2VM
ZW5ndGhTZWNvbmRzID0gLjE7Cgl2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNl
Y29uZHMgKiBzYW1wbGVSYXRlOwoJdmFyIGN1dG9mZiA9IDAuNTsKCXZhciBxID0gMTAuMDsKCXZh
ciBnYWluID0gMC4wOwoKCS8vIEZpbHRlciBjb2VmZmljaWVudHMKCS8vIEgoeikgPSAoYjAgKyBi
MS96ICsgYjIvel4yKS8oMSArIGExL3orYTIvel4yKQoJdmFyIGIwOwoJdmFyIGIxOwoJdmFyIGIy
OwoJdmFyIGExOwoJdmFyIGEyOwoJCglmdW5jdGlvbiBjcmVhdGVMb3dwYXNzRmlsdGVyKGZyZXEs
IHEsIGdhaW4pIHsKCSAgdmFyIGcgPSBNYXRoLnBvdygxMCwgcS8yMCk7CgkgIHZhciBkID0gTWF0
aC5zcXJ0KCg0LU1hdGguc3FydCgxNi0xNi9nL2cpKS8yKTsKCSAgdmFyIHRoZXRhID0gTWF0aC5Q
SSAqIGZyZXE7CgkgIHZhciBzbiA9IGQgKiBNYXRoLnNpbih0aGV0YSkvMjsKCSAgdmFyIGJldGEg
PSAxLzIqKDEgLSBzbikvKDEgKyBzbik7CgkgIHZhciBnYW1tYSA9ICgxLzIgKyBiZXRhKSpNYXRo
LmNvcyh0aGV0YSk7CgkgIHZhciBhbHBoYSA9IDEvNCooMS8yICsgYmV0YSAtIGdhbW1hKTsKCSAg
YjAgPSAyICogYWxwaGE7CgkgIGIxID0gNCAqIGFscGhhOwoJICBiMiA9IDIgKiBhbHBoYTsKCSAg
YTEgPSAyICogKC1nYW1tYSk7CgkgIGEyID0gMiAqIGJldGE7Cgl9CgoJZnVuY3Rpb24gZmlsdGVy
RGF0YShzaWduYWwsIGxlbikgewoJICB2YXIgeSA9IG5ldyBBcnJheShsZW4pOwoJICB5WzBdID0g
YjAqc2lnbmFsWzBdOwoJICB5WzFdID0gYjAqc2lnbmFsWzFdICsgYjEqc2lnbmFsWzBdIC0gYTEq
eVswXTsKCSAgZm9yICh2YXIgayA9IDI7IGsgPCBzaWduYWwubGVuZ3RoOyArK2spIHsKCSAgICB5
W2tdID0gYjAqc2lnbmFsW2tdICsgYjEqc2lnbmFsW2stMV0gKyBiMipzaWduYWxbay0yXSAtIGEx
Knlbay0xXSAtIGEyKnlbay0yXTsKCSAgfQoJICBmb3IgKHZhciBrID0gc2lnbmFsLmxlbmd0aDsg
ayA8IGxlbjsgKytrKSB7CgkgICAgeVtrXSA9IC0gYTEqeVtrLTFdIC0gYTIqeVtrLTJdOwoJICB9
CgoJICByZXR1cm4geTsKCX0KCQoJZnVuY3Rpb24gY2hlY2tGaWx0ZXJSZXNwb25zZShyZWZlcmVu
Y2UpIHsKCSAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CgkgICAgcmVuZGVyZWRCdWZmZXIgPSBl
dmVudC5yZW5kZXJlZEJ1ZmZlcjsKCSAgICByZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5n
ZXRDaGFubmVsRGF0YSgwKTsKCSAgICB2YXIgbGVuID0gTWF0aC5taW4ocmVuZGVyZWREYXRhLmxl
bmd0aCwgcmVmZXJlbmNlLmxlbmd0aCk7CgkgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOwoJICAgIHZh
ciBtYXhFcnJvciA9IDA7CgkgICAgdmFyIG1heFBvc2l0aW9uID0gMDsKCgkKCSAgICAvLyBhbGxv
d2VkRXJyb3IgZGV0ZXJtaW5lZCBleHBlcmltZW50YWxseS4gIFNldCB0byAwLCBhbmQKCSAgICAv
LyBsb29rIGF0IHRoZSBtYXggZXJyb3IgcHJpbnRlZCBvdXQuICBBZGp1c3QKCSAgICAvLyBhY2Nv
cmRpbmdseS4gIE5vdGUgdGhhdCBpbnRlcm5hbGx5LCBhcml0aG1ldGljIGlzIGRvbmUKCSAgICAv
LyB1c2luZyBzaW5nbGUtcHJlY2lzaW9uLCBzbyB0aGUgZXJyb3IgY2Fubm90IGJlIG11Y2gKCSAg
ICAvLyBiZXR0ZXIgdGhhbiBzaW5nbGUtcHJlY2lzaW9uIGVwc2lsb24gb2YgYWJvdXQgNS45NmUt
OC4KCSAgICB2YXIgYWxsb3dlZEVycm9yID0gNWUtODsKCgkgICAgZm9yICh2YXIgayA9IDA7IGsg
PCBsZW47ICsraykgewoJICAgICAgdmFyIGVyciA9IE1hdGguYWJzKHJlbmRlcmVkRGF0YVtrXSAt
IHJlZmVyZW5jZVtrXSk7CgkgICAgICBpZiAoZXJyID4gbWF4RXJyb3IpIHsKCSAgICAgICAgbWF4
RXJyb3IgPSBlcnI7CgkgICAgICAgIG1heFBvc2l0aW9uID0gazsKCSAgICAgIH0KCSAgICB9Cgkg
ICAgaWYgKG1heEVycm9yIDw9IGFsbG93ZWRFcnJvcikgewoJICAgICAgdGVzdFBhc3NlZCgiTG93
cGFzcyBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4iKTsKCSAgICB9IGVsc2UgewoJICAgICAg
dGVzdEZhaWxlZCgiTG93cGFzcyBmaWx0ZXIgcmVzcG9uc2UgaXMgaW5jb3JyZWN0LiAgTWF4IGVy
ciA9ICIgKyBtYXhFcnJvciArICIgYXQgIiArIG1heFBvc2l0aW9uKTsKICAgICAgICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CgkgICAgfQoJICAgIGlmIChzdWNjZXNzKSB7CgkgICAgICB0ZXN0UGFz
c2VkKCJUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLiIpOwoJICAgIH0gZWxzZSB7
CgkgICAgICB0ZXN0RmFpbGVkKCJUZXN0IHNpZ25hbCB3YXMgbm90IGNvcnJlY3RseSBmaWx0ZXJl
ZC4iKTsKCSAgICB9CgkgICAgZmluaXNoSlNUZXN0KCk7CgkgIH0KCX0KCQoJZnVuY3Rpb24gcnVu
VGVzdCgpIHsKLy8JICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci8vCSAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLy8JICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwovLwkgIH0KCi8vCSAgd2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOwoKCSAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dAoJICBjb250ZXh0
ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vj
b25kcywgc2FtcGxlUmF0ZSk7CgoJICAvLyBDcmVhdGUgYW4gaW1wdWxzZQoJICBpbXB1bHNlID0g
Y29udGV4dC5jcmVhdGVCdWZmZXIoMSwgcHVsc2VMZW5ndGhGcmFtZXMsIGNvbnRleHQuc2FtcGxl
UmF0ZSk7CgkgIHZhciBkYXRhID0gaW1wdWxzZS5nZXRDaGFubmVsRGF0YSgwKTsKCSAgZm9yICh2
YXIgayA9IDE7IGsgPCBkYXRhLmxlbmd0aDsgKytrKSB7CgkgICAgZGF0YVtrXSA9IDA7CgkgIH0K
CSAgZGF0YVswXSA9IDE7CgoJICBzaWduYWwgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgp
OwoJICBzaWduYWwuYnVmZmVyID0gaW1wdWxzZTsKCgkgIGZpbHRlciA9IGNvbnRleHQuY3JlYXRl
QmlxdWFkRmlsdGVyKCk7CgkgIGZpbHRlci50eXBlID0gZmlsdGVyLkxPV1BBU1M7CiAgICAgICAg
ICBmaWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gc2FtcGxlUmF0ZS8yICogY3V0b2ZmOwogICAgICAg
ICAgZmlsdGVyLlEudmFsdWUgPSBxOwogICAgICAgICAgZmlsdGVyLmdhaW4udmFsdWUgPSBnYWlu
OwoJICAKCSAgc2lnbmFsLmNvbm5lY3QoZmlsdGVyKTsKCSAgZmlsdGVyLmNvbm5lY3QoY29udGV4
dC5kZXN0aW5hdGlvbik7CgoJICBjcmVhdGVMb3dwYXNzRmlsdGVyKGN1dG9mZiwgcSwgZ2Fpbik7
CgkgIGNvbnNvbGUubG9nKCJiMCA9ICIgKyBiMCk7CgkgIHRydWVSZXN1bHQgPSBmaWx0ZXJEYXRh
KGRhdGEsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzKTsKCSAgCgkgIHNpZ25hbC5u
b3RlT24oMCk7CgkgIGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNrRmlsdGVyUmVzcG9uc2UodHJ1
ZVJlc3VsdCk7CgkgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKCX0KCglydW5UZXN0KCk7Cglz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwoKICAgICAgPC9zY3JpcHQ+CgogICAgICA8c2NyaXB0
IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KICA8
L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126465</attachid>
            <date>2012-02-09 23:44:37 -0800</date>
            <delta_ts>2012-02-13 00:03:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>4196</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhNTI5MDNlLi41MzU1N2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMDItMDkgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgT3B0aW1pemUgdGhlIG11bHRpcGx5LWFkZCBpbiBCaXF1YWQuY3BwOjpwcm9jZXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUyOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBpcGVsaW5l
IHRoZSBtdWx0aXBseS1hZGQgd2l0aCBTU0UyIGluc3RydWN0aW9ucyBhbmQgZ2V0IGFib3V0IDIw
JSBpbXByb3ZlbWVudCBmb3IgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vQmlxdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJvY2Vzcyk6CisKIDIw
MTItMDItMDkgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJvdGVjdFZpc2libGVUaWxlVGV4
dHVyZXMoKSBzaG91bGQgb25seSBwcm90ZWN0IHRoZSB2aXNpYmxlIHRleHR1cmVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAppbmRleCBjZmVlOWNmLi5hMzJlNTdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKQEAgLTgzLDYgKzgzLDYw
IEBAIHZvaWQgQmlxdWFkOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVz
dFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgZG91YmxlIGExID0gbV9hMTsKICAgICBk
b3VibGUgYTIgPSBtX2EyOwogCisvLyBPcHRpbWl6ZSB0aGUgaG90IG11bHRpcGx5LWFkZCBieSBw
aXBlbGluaW5nIHdpdGggU1NFMiBpbnN0cnVjdGlvbnMuCisjaWZkZWYgX19TU0UyX18KKyAgICBk
b3VibGUgbmExID0gLWExOworICAgIGRvdWJsZSBuYTIgPSAtYTI7CisKKyAgICBfX2FzbV9fKAor
ICAgICAgICAibW92bCAgICAgJTQsICAgICAgJSVlZHhcblx0IiAvLyBtb3ZlIHNvdXJjZVAgdG8g
ZWR4CisgICAgICAgICJtb3ZsICAgICAlNSwgICAgICAlJWVjeFxuXHQiIC8vIG1vdmUgZGVzdFAg
dG8gZWN4CisgICAgICAgICJtb3ZsICAgICAlNiwgICAgICAlJWVheFxuXHQiIC8vIG1vdmUgbiB0
byBlYXgKKyAgICAgICAgInRlc3RsICAgICUlZWF4LCAgICUlZWF4XG5cdCIKKyAgICAgICAgImpl
IC5MYWJlbEVuZFxuXHQiCisgICAgICAgICJtb3ZzcyAgICAoJSVlZHgpLCAlJXhtbTdcblx0IiAv
LyBsb2FkIHggdG8geG1tN1s2MzowXQorICAgICAgICAiY3Z0c3Myc2QgJSV4bW03LCAgJSV4bW0x
XG5cdCIgLy8gY29udmVydCB4IGZyb20gZmxvYXQgdG8gZG91YmxlCisgICAgICAgICJtb3ZscGQg
ICAlMSwgICAgICAlJXhtbTBcblx0IiAvLyBtb3ZlIHgyIHRvIHhtbTBbNjM6MF0KKyAgICAgICAg
Im1vdmxwZCAgICU5LCAgICAgICUleG1tMlxuXHQiIC8vIG1vdmUgYjIgdG8geG1tMls2MzowXQor
ICAgICAgICAibW92bHBkICAgJTcsICAgICAgJSV4bW0zXG5cdCIgLy8gbW92ZSBiMCB0byB4bW0z
WzYzOjBdCisgICAgICAgICJtb3ZocGQgICAlMCwgICAgICAlJXhtbTBcblx0IiAvLyBtb3ZlIHgx
IHRvIHhtbTBbMTI3OjY0XSAtLS0tPiAoeDEgeDIpCisgICAgICAgICJtb3ZocGQgICAlMywgICAg
ICAlJXhtbTFcblx0IiAvLyBtb3ZlIHkyIHRvIHhtbTFbMTI3OjY0XSAtLS0tPiAoeTIgeCApCisg
ICAgICAgICJtb3ZocGQgICAlOCwgICAgICAlJXhtbTJcblx0IiAvLyBtb3ZlIGIxIHRvIHhtbTJb
MTI3OjY0XSAtLS0tPiAoYjEgYjIpCisgICAgICAgICJtb3ZocGQgICAlMTEsICAgICAlJXhtbTNc
blx0IiAvLyBtb3ZlIGEyIHRvIHhtbTNbMTI3OjY0XSAtLS0tPiAoYTIgYjApCisgICAgICAgICJt
b3ZscGQgICAlMiwgICAgICAlJXhtbTRcblx0IiAvLyBtb3ZlIHkxIHRvIHhtbTRbNjM6MF0KKyAg
ICAgICAgIi5MYWJlbExvb3A6XG5cdCIKKyAgICAgICAgImFkZGwgICAgICQ0LCAgICAgICUlZWR4
XG5cdCIgLy8gc291cmNlUCsrCisgICAgICAgICJtb3ZhcGQgICAlJXhtbTAsICAlJXhtbTVcblx0
IiAvLyBjb3B5ICh4MSB4MikKKyAgICAgICAgIm1vdmFwZCAgICUleG1tMSwgICUleG1tNlxuXHQi
IC8vIGNvcHkgKHkyIHggKQorICAgICAgICAic2h1ZnBkICAgJDAsICUleG1tNCwgJSV4bW0xXG5c
dCIgLy8geTI9eTEKKyAgICAgICAgIm11bHBkICAgICUleG1tMiwgICUleG1tNVxuXHQiIC8vICh4
MSpiMSB4MipiMikKKyAgICAgICAgIm11bHBkICAgICUleG1tMywgICUleG1tNlxuXHQiIC8vICh5
MiphMiB4ICpiMCkKKyAgICAgICAgInNodWZwZCAgICQxLCAlJXhtbTEsICUleG1tMFxuXHQiIC8v
IHgyPXgxIHgxPXgKKyAgICAgICAgIm11bHNkICAgICUxMCwgICAgICUleG1tNFxuXHQiIC8vIGEx
KnkxCisgICAgICAgICJhZGRwZCAgICAlJXhtbTYsICAlJXhtbTVcblx0IiAvLyAoeDEqYjEreTIq
YTIgeDIqYjIreCpiMCkKKyAgICAgICAgInN1YmwgICAgICQxLCAgICAgICUlZWF4XG5cdCIgLy8g
bi0tCisgICAgICAgICJtb3ZhcGQgICAlJXhtbTUsICAlJXhtbTZcblx0IgorICAgICAgICAibW92
c3MgICAgKCUlZWR4KSwgJSV4bW03XG5cdCIgLy8gbG9hZCB4CisgICAgICAgICJjdnRzczJzZCAl
JXhtbTcsICAlJXhtbTFcblx0IiAvLyBjdnQgeCBmcm9tIGZsb2F0IHRvIGRvdWJsZSAgeCA9IG5l
dyB4CisgICAgICAgICJhZGRzZCAgICAlJXhtbTQsICAlJXhtbTVcblx0IiAvLyB4KmIwICsgKHgy
KmIyK3gqYjApCisgICAgICAgICJzaHVmcGQgICAkMSwgJSV4bW02LCAlJXhtbTZcblx0IiAvLyAo
eDEqYjEreTIqYTIgeDIqYjIreCpiMCkgLT4gKHgyKmIyK3gqYjAgeDEqYjEreTIqYTIpCisgICAg
ICAgICJhZGRzZCAgICAlJXhtbTYsICAlJXhtbTVcblx0IiAvLyB5CisgICAgICAgICJjdnRzZDJz
cyAlJXhtbTUsICAlJXhtbTdcblx0IgorICAgICAgICAibW92c3MgICAgJSV4bW03LCAgKCUlZWN4
KVxuXHQiIC8vIHkgLT4gKmRlc3RQCisgICAgICAgICJtb3ZhcGQgICAlJXhtbTUsICAlJXhtbTRc
blx0IiAvLyB5MSA9IHkKKyAgICAgICAgImFkZGwgICAgICQ0LCAgICAgICUlZWN4XG5cdCIgLy8g
ZGVzdFArKworICAgICAgICAidGVzdGwgICAgJSVlYXgsICAgJSVlYXhcblx0IgorICAgICAgICAi
am5lIC5MYWJlbExvb3Bcblx0IiAvLyB3aGlsZSgpCisgICAgICAgICJtb3ZocGQgICAlJXhtbTAs
ICAlMFxuXHQiCisgICAgICAgICJtb3ZscGQgICAlJXhtbTAsICAlMVxuXHQiCisgICAgICAgICJt
b3ZscGQgICAlJXhtbTQsICAlMlxuXHQiCisgICAgICAgICJtb3ZocGQgICAlJXhtbTEsICAlM1xu
XHQiCisgICAgICAgICIuTGFiZWxFbmQ6XG5cdCIKKyAgICAgICAgOiIrbSIoeDEpLCAiK20iKHgy
KSwgIittIih5MSksICIrbSIoeTIpCisgICAgICAgIDoibSIoc291cmNlUCksICJtIihkZXN0UCks
ICJtIihuKSwgIm0iKGIwKSwgIm0iKGIxKSwgIm0iKGIyKSwgIm0iKG5hMSksICJtIihuYTIpCisg
ICAgICAgIDoiZWF4IiwgImVkeCIsICJlY3giCisgICAgKTsKKyNlbHNlCiAgICAgd2hpbGUgKG4t
LSkgewogICAgICAgICAvLyBGSVhNRTogdGhpcyBjYW4gYmUgb3B0aW1pemVkIGJ5IHBpcGVsaW5p
bmcgdGhlIG11bHRpcGx5IGFkZHMuLi4KICAgICAgICAgZmxvYXQgeCA9ICpzb3VyY2VQKys7CkBA
IC05Niw2ICsxNTAsNyBAQCB2b2lkIEJpcXVhZDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNl
UCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgICAgICB5MiA9IHkx
OwogICAgICAgICB5MSA9IHk7CiAgICAgfQorI2VuZGlmCiAKICAgICAvLyBMb2NhbCB2YXJpYWJs
ZXMgYmFjayB0byBtZW1iZXIuIEZsdXNoIGRlbm9ybWFscyBoZXJlIHNvIHdlCiAgICAgLy8gZG9u
J3Qgc2xvdyBkb3duIHRoZSBpbm5lciBsb29wIGFib3ZlLgo=
</data>
<flag name="commit-queue"
          id="128297"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126729</attachid>
            <date>2012-02-13 00:03:59 -0800</date>
            <delta_ts>2012-03-18 20:17:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>4206</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YTQ0MzQzLi45OTgxZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMDItMTIgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgT3B0aW1pemUgdGhlIG11bHRpcGx5LWFkZCBpbiBCaXF1YWQuY3BwOjpwcm9jZXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUyOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBpcGVsaW5l
IHRoZSBtdWx0aXBseS1hZGQgd2l0aCBTU0UyIGluc3RydWN0aW9ucyBhbmQgZ2V0IGFib3V0IDIw
JSBpbXByb3ZlbWVudCBmb3IgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vQmlxdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJvY2Vzcyk6CisKIDIw
MTItMDItMTIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBOYXZp
Z2F0b3Iud2Via2l0R2V0VXNlck1lZGlhIGRvZXNuJ3QgbmVlZCB0byBiZSBjdXN0b20KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCmluZGV4IGNmZWU5Y2YuLjI4N2Q2Nzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcApAQCAtODMsNiArODMs
NjAgQEAgdm9pZCBCaXF1YWQ6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBk
ZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBkb3VibGUgYTEgPSBtX2ExOwogICAg
IGRvdWJsZSBhMiA9IG1fYTI7CiAKKy8vIE9wdGltaXplIHRoZSBob3QgbXVsdGlwbHktYWRkIGJ5
IHBpcGVsaW5pbmcgd2l0aCBTU0UyIGluc3RydWN0aW9ucy4KKyNpZmRlZiBfX1NTRTJfXworICAg
IGRvdWJsZSBuYTEgPSAtYTE7CisgICAgZG91YmxlIG5hMiA9IC1hMjsKKworICAgIF9fYXNtX18o
CisgICAgICAgICJtb3ZsICAgICAlNCwgICAgICAlJWVkeFxuXHQiIC8vIG1vdmUgc291cmNlUCB0
byBlZHgKKyAgICAgICAgIm1vdmwgICAgICU1LCAgICAgICUlZWN4XG5cdCIgLy8gbW92ZSBkZXN0
UCB0byBlY3gKKyAgICAgICAgIm1vdmwgICAgICU2LCAgICAgICUlZWF4XG5cdCIgLy8gbW92ZSBu
IHRvIGVheAorICAgICAgICAidGVzdGwgICAgJSVlYXgsICAgJSVlYXhcblx0IgorICAgICAgICAi
amUgLkxhYmVsRW5kXG5cdCIKKyAgICAgICAgIm1vdnNzICAgICglJWVkeCksICUleG1tN1xuXHQi
IC8vIGxvYWQgeCB0byB4bW03WzYzOjBdCisgICAgICAgICJjdnRzczJzZCAlJXhtbTcsICAlJXht
bTFcblx0IiAvLyBjb252ZXJ0IHggZnJvbSBmbG9hdCB0byBkb3VibGUKKyAgICAgICAgIm1vdmxw
ZCAgICUxLCAgICAgICUleG1tMFxuXHQiIC8vIG1vdmUgeDIgdG8geG1tMFs2MzowXQorICAgICAg
ICAibW92bHBkICAgJTksICAgICAgJSV4bW0yXG5cdCIgLy8gbW92ZSBiMiB0byB4bW0yWzYzOjBd
CisgICAgICAgICJtb3ZscGQgICAlNywgICAgICAlJXhtbTNcblx0IiAvLyBtb3ZlIGIwIHRvIHht
bTNbNjM6MF0KKyAgICAgICAgIm1vdmhwZCAgICUwLCAgICAgICUleG1tMFxuXHQiIC8vIG1vdmUg
eDEgdG8geG1tMFsxMjc6NjRdIC0tLS0+ICh4MSB4MikKKyAgICAgICAgIm1vdmhwZCAgICUzLCAg
ICAgICUleG1tMVxuXHQiIC8vIG1vdmUgeTIgdG8geG1tMVsxMjc6NjRdIC0tLS0+ICh5MiB4ICkK
KyAgICAgICAgIm1vdmhwZCAgICU4LCAgICAgICUleG1tMlxuXHQiIC8vIG1vdmUgYjEgdG8geG1t
MlsxMjc6NjRdIC0tLS0+IChiMSBiMikKKyAgICAgICAgIm1vdmhwZCAgICUxMSwgICAgICUleG1t
M1xuXHQiIC8vIG1vdmUgYTIgdG8geG1tM1sxMjc6NjRdIC0tLS0+IChhMiBiMCkKKyAgICAgICAg
Im1vdmxwZCAgICUyLCAgICAgICUleG1tNFxuXHQiIC8vIG1vdmUgeTEgdG8geG1tNFs2MzowXQor
ICAgICAgICAiLkxhYmVsTG9vcDpcblx0IgorICAgICAgICAiYWRkbCAgICAgJDQsICAgICAgJSVl
ZHhcblx0IiAvLyBzb3VyY2VQKysKKyAgICAgICAgIm1vdmFwZCAgICUleG1tMCwgICUleG1tNVxu
XHQiIC8vIGNvcHkgKHgxIHgyKQorICAgICAgICAibW92YXBkICAgJSV4bW0xLCAgJSV4bW02XG5c
dCIgLy8gY29weSAoeTIgeCApCisgICAgICAgICJzaHVmcGQgICAkMCwgJSV4bW00LCAlJXhtbTFc
blx0IiAvLyB5Mj15MQorICAgICAgICAibXVscGQgICAgJSV4bW0yLCAgJSV4bW01XG5cdCIgLy8g
KHgxKmIxIHgyKmIyKQorICAgICAgICAibXVscGQgICAgJSV4bW0zLCAgJSV4bW02XG5cdCIgLy8g
KHkyKmEyIHggKmIwKQorICAgICAgICAic2h1ZnBkICAgJDEsICUleG1tMSwgJSV4bW0wXG5cdCIg
Ly8geDI9eDEgeDE9eAorICAgICAgICAibXVsc2QgICAgJTEwLCAgICAgJSV4bW00XG5cdCIgLy8g
YTEqeTEKKyAgICAgICAgImFkZHBkICAgICUleG1tNiwgICUleG1tNVxuXHQiIC8vICh4MSpiMSt5
MiphMiB4MipiMit4KmIwKQorICAgICAgICAic3VibCAgICAgJDEsICAgICAgJSVlYXhcblx0IiAv
LyBuLS0KKyAgICAgICAgIm1vdmFwZCAgICUleG1tNSwgICUleG1tNlxuXHQiCisgICAgICAgICJt
b3ZzcyAgICAoJSVlZHgpLCAlJXhtbTdcblx0IiAvLyBsb2FkIHgKKyAgICAgICAgImN2dHNzMnNk
ICUleG1tNywgICUleG1tMVxuXHQiIC8vIGN2dCB4IGZyb20gZmxvYXQgdG8gZG91YmxlICB4ID0g
bmV3IHgKKyAgICAgICAgImFkZHNkICAgICUleG1tNCwgICUleG1tNVxuXHQiIC8vIGExKnkxICsg
KHgyKmIyK3gqYjApCisgICAgICAgICJzaHVmcGQgICAkMSwgJSV4bW02LCAlJXhtbTZcblx0IiAv
LyAoeDEqYjEreTIqYTIgeDIqYjIreCpiMCkgLT4gKHgyKmIyK3gqYjAgeDEqYjEreTIqYTIpCisg
ICAgICAgICJhZGRzZCAgICAlJXhtbTYsICAlJXhtbTVcblx0IiAvLyB5CisgICAgICAgICJjdnRz
ZDJzcyAlJXhtbTUsICAlJXhtbTdcblx0IgorICAgICAgICAibW92c3MgICAgJSV4bW03LCAgKCUl
ZWN4KVxuXHQiIC8vIHkgLT4gKmRlc3RQCisgICAgICAgICJtb3ZhcGQgICAlJXhtbTUsICAlJXht
bTRcblx0IiAvLyB5MSA9IHkKKyAgICAgICAgImFkZGwgICAgICQ0LCAgICAgICUlZWN4XG5cdCIg
Ly8gZGVzdFArKworICAgICAgICAidGVzdGwgICAgJSVlYXgsICAgJSVlYXhcblx0IgorICAgICAg
ICAiam5lIC5MYWJlbExvb3Bcblx0IiAvLyB3aGlsZSgpCisgICAgICAgICJtb3ZocGQgICAlJXht
bTAsICAlMFxuXHQiCisgICAgICAgICJtb3ZscGQgICAlJXhtbTAsICAlMVxuXHQiCisgICAgICAg
ICJtb3ZscGQgICAlJXhtbTQsICAlMlxuXHQiCisgICAgICAgICJtb3ZocGQgICAlJXhtbTEsICAl
M1xuXHQiCisgICAgICAgICIuTGFiZWxFbmQ6XG5cdCIKKyAgICAgICAgOiIrbSIoeDEpLCAiK20i
KHgyKSwgIittIih5MSksICIrbSIoeTIpCisgICAgICAgIDoibSIoc291cmNlUCksICJtIihkZXN0
UCksICJtIihuKSwgIm0iKGIwKSwgIm0iKGIxKSwgIm0iKGIyKSwgIm0iKG5hMSksICJtIihuYTIp
CisgICAgICAgIDoiZWF4IiwgImVkeCIsICJlY3giLCAieG1tMCIsICJ4bW0xIiwgInhtbTIiLCAi
eG1tMyIsICJ4bW00IiwgInhtbTUiLCAieG1tNiIsICJ4bW03IgorICAgICk7CisjZWxzZQogICAg
IHdoaWxlIChuLS0pIHsKICAgICAgICAgLy8gRklYTUU6IHRoaXMgY2FuIGJlIG9wdGltaXplZCBi
eSBwaXBlbGluaW5nIHRoZSBtdWx0aXBseSBhZGRzLi4uCiAgICAgICAgIGZsb2F0IHggPSAqc291
cmNlUCsrOwpAQCAtOTYsNiArMTUwLDcgQEAgdm9pZCBCaXF1YWQ6OnByb2Nlc3MoY29uc3QgZmxv
YXQqIHNvdXJjZVAsIGZsb2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICAg
ICAgeTIgPSB5MTsKICAgICAgICAgeTEgPSB5OwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8gTG9j
YWwgdmFyaWFibGVzIGJhY2sgdG8gbWVtYmVyLiBGbHVzaCBkZW5vcm1hbHMgaGVyZSBzbyB3ZQog
ICAgIC8vIGRvbid0IHNsb3cgZG93biB0aGUgaW5uZXIgbG9vcCBhYm92ZS4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132095</attachid>
            <date>2012-03-15 11:51:01 -0700</date>
            <delta_ts>2012-03-15 11:51:01 -0700</delta_ts>
            <desc>Updated patch to handle 32 and 64-bit builds</desc>
            <filename>biquad.patch</filename>
            <type>text/plain</type>
            <size>4413</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCmluZGV4IGQ2Nzk5YzYuLmUw
N2M5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcApAQCAtOTYs
NiArOTYsOTUgQEAgdm9pZCBCaXF1YWQ6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZVAsIGZs
b2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBkb3VibGUgYTEgPSBtX2Ex
OwogICAgIGRvdWJsZSBhMiA9IG1fYTI7CiAKKy8vIE9wdGltaXplIHRoZSBob3QgbXVsdGlwbHkt
YWRkIGJ5IHBpcGVsaW5pbmcgd2l0aCBTU0UyIGluc3RydWN0aW9ucy4KKyNpZmRlZiBfX1NTRTJf
XworICAgIGRvdWJsZSBuYTEgPSAtYTE7CisgICAgZG91YmxlIG5hMiA9IC1hMjsKKworICAgIGZw
cmludGYoc3RkZXJyLCAicGlkID0gJWRcbiIsIGdldHBpZCgpKTsKKworICAgIF9fYXNtX18oCisj
aWYgZGVmaW5lZChfX0xQNjRfXykKKyAgICAgICAgIm1vdnEgICAgJTQsICAgICAgJSVyZHhcblx0
IiAvLyBtb3ZlIHNvdXJjZVAgdG8gcmR4CisgICAgICAgICJtb3ZxICAgICU1LCAgICAgICUlcmN4
XG5cdCIgLy8gbW92ZSBkZXN0UCB0byByY3gKKyNlbHNlCisgICAgICAgICJtb3ZsICAgICAlNCwg
ICAgICAlJWVkeFxuXHQiIC8vIG1vdmUgc291cmNlUCB0byBlZHgKKyAgICAgICAgIm1vdmwgICAg
ICU1LCAgICAgICUlZWN4XG5cdCIgLy8gbW92ZSBkZXN0UCB0byBlY3gKKyNlbmRpZgorICAgICAg
ICAibW92bCAgICAgJTYsICAgICAgJSVlYXhcblx0IiAvLyBtb3ZlIG4gdG8gZWF4CisgICAgICAg
ICJ0ZXN0bCAgICAlJWVheCwgICAlJWVheFxuXHQiCisgICAgICAgICJqZSAuTGFiZWxFbmRcblx0
IgorI2lmIGRlZmluZWQoX19MUDY0X18pCisgICAgICAgICJtb3ZzcyAgICAoJSVyZHgpLCAlJXht
bTdcblx0IiAvLyBsb2FkIHggdG8geG1tN1s2MzowXQorI2Vsc2UKKyAgICAgICAgIm1vdnNzICAg
ICglJWVkeCksICUleG1tN1xuXHQiIC8vIGxvYWQgeCB0byB4bW03WzYzOjBdCisjZW5kaWYKKyAg
ICAgICAgImN2dHNzMnNkICUleG1tNywgICUleG1tMVxuXHQiIC8vIGNvbnZlcnQgeCBmcm9tIGZs
b2F0IHRvIGRvdWJsZQorICAgICAgICAibW92bHBkICAgJTEsICAgICAgJSV4bW0wXG5cdCIgLy8g
bW92ZSB4MiB0byB4bW0wWzYzOjBdCisgICAgICAgICJtb3ZscGQgICAlOSwgICAgICAlJXhtbTJc
blx0IiAvLyBtb3ZlIGIyIHRvIHhtbTJbNjM6MF0KKyAgICAgICAgIm1vdmxwZCAgICU3LCAgICAg
ICUleG1tM1xuXHQiIC8vIG1vdmUgYjAgdG8geG1tM1s2MzowXQorICAgICAgICAibW92aHBkICAg
JTAsICAgICAgJSV4bW0wXG5cdCIgLy8gbW92ZSB4MSB0byB4bW0wWzEyNzo2NF0gLS0tLT4gKHgx
IHgyKQorICAgICAgICAibW92aHBkICAgJTMsICAgICAgJSV4bW0xXG5cdCIgLy8gbW92ZSB5MiB0
byB4bW0xWzEyNzo2NF0gLS0tLT4gKHkyIHggKQorICAgICAgICAibW92aHBkICAgJTgsICAgICAg
JSV4bW0yXG5cdCIgLy8gbW92ZSBiMSB0byB4bW0yWzEyNzo2NF0gLS0tLT4gKGIxIGIyKQorICAg
ICAgICAibW92aHBkICAgJTExLCAgICAgJSV4bW0zXG5cdCIgLy8gbW92ZSBhMiB0byB4bW0zWzEy
Nzo2NF0gLS0tLT4gKGEyIGIwKQorICAgICAgICAibW92bHBkICAgJTIsICAgICAgJSV4bW00XG5c
dCIgLy8gbW92ZSB5MSB0byB4bW00WzYzOjBdCisgICAgICAgICIuTGFiZWxMb29wOlxuXHQiCisj
aWYgZGVmaW5lZChfX0xQNjRfXykKKyAgICAgICAgImFkZHEgICAgICQ0LCAgICAgICUlcmR4XG5c
dCIgLy8gc291cmNlUCsrCisjZWxzZQorICAgICAgICAiYWRkbCAgICAgJDQsICAgICAgJSVlZHhc
blx0IiAvLyBzb3VyY2VQKysKKyNlbmRpZgorICAgICAgICAibW92YXBkICAgJSV4bW0wLCAgJSV4
bW01XG5cdCIgLy8gY29weSAoeDEgeDIpCisgICAgICAgICJtb3ZhcGQgICAlJXhtbTEsICAlJXht
bTZcblx0IiAvLyBjb3B5ICh5MiB4ICkKKyAgICAgICAgInNodWZwZCAgICQwLCAlJXhtbTQsICUl
eG1tMVxuXHQiIC8vIHkyPXkxCisgICAgICAgICJtdWxwZCAgICAlJXhtbTIsICAlJXhtbTVcblx0
IiAvLyAoeDEqYjEgeDIqYjIpCisgICAgICAgICJtdWxwZCAgICAlJXhtbTMsICAlJXhtbTZcblx0
IiAvLyAoeTIqYTIgeCAqYjApCisgICAgICAgICJzaHVmcGQgICAkMSwgJSV4bW0xLCAlJXhtbTBc
blx0IiAvLyB4Mj14MSB4MT14CisgICAgICAgICJtdWxzZCAgICAlMTAsICAgICAlJXhtbTRcblx0
IiAvLyBhMSp5MQorICAgICAgICAiYWRkcGQgICAgJSV4bW02LCAgJSV4bW01XG5cdCIgLy8gKHgx
KmIxK3kyKmEyIHgyKmIyK3gqYjApCisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyAgICAgICAgInN1
YnEgICAgICQxLCAgICAgICUlcmF4XG5cdCIgLy8gbi0tCisjZWxzZQorICAgICAgICAic3VibCAg
ICAgJDEsICAgICAgJSVlYXhcblx0IiAvLyBuLS0KKyNlbmRpZgorICAgICAgICAibW92YXBkICAg
JSV4bW01LCAgJSV4bW02XG5cdCIKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICAgICAgICAibW92
c3MgICAgKCUlcmR4KSwgJSV4bW03XG5cdCIgLy8gbG9hZCB4CisjZWxzZQorICAgICAgICAibW92
c3MgICAgKCUlZWR4KSwgJSV4bW03XG5cdCIgLy8gbG9hZCB4CisjZW5kaWYKKyAgICAgICAgImN2
dHNzMnNkICUleG1tNywgICUleG1tMVxuXHQiIC8vIGN2dCB4IGZyb20gZmxvYXQgdG8gZG91Ymxl
ICB4ID0gbmV3IHgKKyAgICAgICAgImFkZHNkICAgICUleG1tNCwgICUleG1tNVxuXHQiIC8vIGEx
KnkxICsgKHgyKmIyK3gqYjApCisgICAgICAgICJzaHVmcGQgICAkMSwgJSV4bW02LCAlJXhtbTZc
blx0IiAvLyAoeDEqYjEreTIqYTIgeDIqYjIreCpiMCkgLT4gKHgyKmIyK3gqYjAgeDEqYjEreTIq
YTIpCisgICAgICAgICJhZGRzZCAgICAlJXhtbTYsICAlJXhtbTVcblx0IiAvLyB5CisgICAgICAg
ICJjdnRzZDJzcyAlJXhtbTUsICAlJXhtbTdcblx0IgorI2lmIGRlZmluZWQoX19MUDY0X18pCisg
ICAgICAgICJtb3ZzcyAgICAlJXhtbTcsICAoJSVyY3gpXG5cdCIgLy8geSAtPiAqZGVzdFAKKyNl
bHNlCisgICAgICAgICJtb3ZzcyAgICAlJXhtbTcsICAoJSVlY3gpXG5cdCIgLy8geSAtPiAqZGVz
dFAKKyNlbmRpZgorICAgICAgICAibW92YXBkICAgJSV4bW01LCAgJSV4bW00XG5cdCIgLy8geTEg
PSB5CisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyAgICAgICAgImFkZHEgICAgICQ0LCAgICAgICUl
cmN4XG5cdCIgLy8gZGVzdFArKworI2Vsc2UKKyAgICAgICAgImFkZGwgICAgICQ0LCAgICAgICUl
ZWN4XG5cdCIgLy8gZGVzdFArKworI2VuZGlmCisgICAgICAgICJ0ZXN0bCAgICAlJWVheCwgICAl
JWVheFxuXHQiCisgICAgICAgICJqbmUgLkxhYmVsTG9vcFxuXHQiIC8vIHdoaWxlKCkKKyAgICAg
ICAgIm1vdmhwZCAgICUleG1tMCwgICUwXG5cdCIKKyAgICAgICAgIm1vdmxwZCAgICUleG1tMCwg
ICUxXG5cdCIKKyAgICAgICAgIm1vdmxwZCAgICUleG1tNCwgICUyXG5cdCIKKyAgICAgICAgIm1v
dmhwZCAgICUleG1tMSwgICUzXG5cdCIKKyAgICAgICAgIi5MYWJlbEVuZDpcblx0IgorICAgICAg
ICA6IittIih4MSksICIrbSIoeDIpLCAiK20iKHkxKSwgIittIih5MikKKyAgICAgICAgOiJtIihz
b3VyY2VQKSwgIm0iKGRlc3RQKSwgIm0iKG4pLCAibSIoYjApLCAibSIoYjEpLCAibSIoYjIpLCAi
bSIobmExKSwgIm0iKG5hMikKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICAgICAgICA6ImVheCIs
ICJyZHgiLCAicmN4IiwgInhtbTAiLCAieG1tMSIsICJ4bW0yIiwgInhtbTMiLCAieG1tNCIsICJ4
bW01IiwgInhtbTYiLCAieG1tNyIKKyNlbHNlCisgICAgICAgIDoiZWF4IiwgImVkeCIsICJlY3gi
LCAieG1tMCIsICJ4bW0xIiwgInhtbTIiLCAieG1tMyIsICJ4bW00IiwgInhtbTUiLCAieG1tNiIs
ICJ4bW03IgorI2VuZGlmCisgICAgKTsKKyNlbHNlCiAgICAgd2hpbGUgKG4tLSkgewogICAgICAg
ICAvLyBGSVhNRTogdGhpcyBjYW4gYmUgb3B0aW1pemVkIGJ5IHBpcGVsaW5pbmcgdGhlIG11bHRp
cGx5IGFkZHMuLi4KICAgICAgICAgZmxvYXQgeCA9ICpzb3VyY2VQKys7CkBAIC0xMDksNiArMTk4
LDcgQEAgdm9pZCBCaXF1YWQ6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBk
ZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAgeTIgPSB5MTsKICAgICAgICAg
eTEgPSB5OwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8gTG9jYWwgdmFyaWFibGVzIGJhY2sgdG8g
bWVtYmVyLiBGbHVzaCBkZW5vcm1hbHMgaGVyZSBzbyB3ZQogICAgIC8vIGRvbid0IHNsb3cgZG93
biB0aGUgaW5uZXIgbG9vcCBhYm92ZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132532</attachid>
            <date>2012-03-18 20:18:12 -0700</date>
            <delta_ts>2012-03-19 22:44:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75528-20120319112125.patch</filename>
            <type>text/plain</type>
            <size>3250</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhkZDhjOThhNDJkYjZi
Zjc5M2Q0OTgxNWIzMDMxYjE3OWY5Yjk4Mi4uNmU2ZGFhYWVlZDI1NTJiMDkxOWE0M2JkMDcwNDkx
NWE1NzY0OTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTAzLTE4ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIE9wdGltaXplIHRo
ZSBtdWx0aXBseS1hZGQgaW4gQmlxdWFkLmNwcDo6cHJvY2VzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQaXBlbGluZSB0aGUgbXVsdGlwbHktYWRkIHdp
dGggU1NFMiBpbnRyaW5zaWNzLgorICAgICAgICBHZXQgfjQ1JSBwZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCBmb3IgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJvY2Vzcyk6CisKIDIwMTItMDMtMTgg
IERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBEb24ndCBvY2NsdWRlIG9uIG1haW4tdGhyZWFkIGJlaGluZCBsYXllcnMvc3VyZmFjZXMgd2l0
aCBpbXBsLXRocmVhZCBhbmltYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9CaXF1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlx
dWFkLmNwcAppbmRleCBkNjc5OWM2OWQzZmQ1ZDIxMTU0ZjM3ODA5MjkwMTk3MDdiNzBlNjlhLi44
NzMzYmM2NGJkYTBjODAyOGQzNDkyY2ZkZmMxY2ViMDExY2EwNDc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9fU1NFMl9fCisjaW5j
bHVkZSA8ZW1taW50cmluLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25z
dCBpbnQga0J1ZmZlclNpemUgPSAxMDI0OwpAQCAtOTYsNiArMTAwLDQ0IEBAIHZvaWQgQmlxdWFk
Ojpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCiAgICAgZG91YmxlIGExID0gbV9hMTsKICAgICBkb3VibGUgYTIgPSBtX2Ey
OwogCisgICAgLy8gT3B0aW1pemUgdGhlIGhvdCBtdWx0aXBseS1hZGQgYnkgcGlwZWxpbmluZyB3
aXRoIFNTRTIgaW50cmluc2ljcy4KKyNpZmRlZiBfX1NTRTJfXworICAgIF9fbTEyOGQgbW0wID0g
X21tX3NldF9wZCh4MSwgeDIpOyAvLyAoeDEsIHgyKQorICAgIF9fbTEyOGQgbW0xID0gX21tX3Nl
dF9wZCh5Miwgc3RhdGljX2Nhc3Q8ZG91YmxlPigqc291cmNlUCkpOyAvLyAoeTIsIHgpCisgICAg
X19tMTI4ZCBtbTIgPSBfbW1fc2V0X3BkKGIxLCBiMik7IC8vIChiMSwgYjIpCisgICAgX19tMTI4
ZCBtbTMgPSBfbW1fc2V0X3BkKC1hMiwgYjApOyAvLyAoLWEyLCBiMCkKKyAgICBfX20xMjhkIG1t
NCA9IF9tbV9zZXRfcGQoMCwgeTEpOyAvLyAoMCwgeTEpCisgICAgX19tMTI4ZCBtbTU7CisgICAg
X19tMTI4ZCBtbTY7CisgICAgX19tMTI4IG1tNzsKKyAgICBfX20xMjhkIG1tYTEgPSBfbW1fc2V0
X3NkKC1hMSk7CisKKyAgICB3aGlsZSAobikgeworICAgICAgICBzb3VyY2VQKys7CisgICAgICAg
IG1tNiA9IG1tMTsKKyAgICAgICAgbW0xID0gX21tX3NodWZmbGVfcGQobW0xLCBtbTQsIDApOyAv
LyB5MiA9IHkxCisgICAgICAgIG1tNSA9IF9tbV9tdWxfcGQobW0yLCBtbTApOyAvLyAoeDEqYjEg
eDIqYjIpCisgICAgICAgIG1tNiA9IF9tbV9tdWxfcGQobW0zLCBtbTYpOyAvLyAoLXkyKmEyIHgg
KmIwKQorICAgICAgICBtbTAgPSBfbW1fc2h1ZmZsZV9wZChtbTAsIG1tMSwgMSk7IC8vICh4MSA9
IHgsIHgyID0geDEpCisgICAgICAgIG1tNCA9IF9tbV9tdWxfc2QobW00LCBtbWExKTsgLy8gLXkx
KmExCisgICAgICAgIG1tNSA9IF9tbV9hZGRfcGQobW01LCBtbTYpOyAvLyAoeDEqYjEteTIqYTIg
eDIqYjIreCpiMCkKKyAgICAgICAgbi0tOworICAgICAgICBtbTYgPSBtbTU7CisgICAgICAgIG1t
NyA9IF9tbV9sb2FkX3NzKHNvdXJjZVApOworICAgICAgICBtbTEgPSBfbW1fY3Z0c3Nfc2QobW0x
LCBtbTcpOyAvLyB4ID0gKnNvdXJjZVAKKyAgICAgICAgbW01ID0gX21tX2FkZF9wZChtbTQsIG1t
NSk7IC8vICh4MSpiMS15MiphMiB4MipiMit4KmIwLXkxKmExKSAKKyAgICAgICAgbW02ID0gX21t
X3NodWZmbGVfcGQobW02LCBtbTYsIDEpOworICAgICAgICBtbTUgPSBfbW1fYWRkX3BkKG1tNSwg
bW02KTsgLy8geQorICAgICAgICBtbTcgPSBfbW1fY3Z0c2Rfc3MobW03LCBtbTUpOworICAgICAg
ICBfbW1fc3RvcmVfc3MoZGVzdFAsIG1tNyk7IC8vICpkZXN0UCA9IHkKKyAgICAgICAgbW00ID0g
bW01OyAvLyB5MSA9IHkKKyAgICAgICAgZGVzdFArKzsKKyAgICB9CisgICAgX21tX3N0b3JlaF9w
ZCgmeDEsIG1tMCk7CisgICAgX21tX3N0b3JlbF9wZCgmeDIsIG1tMCk7CisgICAgX21tX3N0b3Jl
bF9wZCgmeTEsIG1tNCk7CisgICAgX21tX3N0b3JlaF9wZCgmeTIsIG1tMSk7CisjZWxzZQogICAg
IHdoaWxlIChuLS0pIHsKICAgICAgICAgLy8gRklYTUU6IHRoaXMgY2FuIGJlIG9wdGltaXplZCBi
eSBwaXBlbGluaW5nIHRoZSBtdWx0aXBseSBhZGRzLi4uCiAgICAgICAgIGZsb2F0IHggPSAqc291
cmNlUCsrOwpAQCAtMTA5LDYgKzE1MSw3IEBAIHZvaWQgQmlxdWFkOjpwcm9jZXNzKGNvbnN0IGZs
b2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAg
ICAgIHkyID0geTE7CiAgICAgICAgIHkxID0geTsKICAgICB9CisjZW5kaWYgLy8gX19TU0UyX18K
IAogICAgIC8vIExvY2FsIHZhcmlhYmxlcyBiYWNrIHRvIG1lbWJlci4gRmx1c2ggZGVub3JtYWxz
IGhlcmUgc28gd2UKICAgICAvLyBkb24ndCBzbG93IGRvd24gdGhlIGlubmVyIGxvb3AgYWJvdmUu
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132760</attachid>
            <date>2012-03-19 22:34:45 -0700</date>
            <delta_ts>2012-03-22 02:41:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75528-20120320133759.patch</filename>
            <type>text/plain</type>
            <size>3719</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhkZDhjOThhNDJkYjZi
Zjc5M2Q0OTgxNWIzMDMxYjE3OWY5Yjk4Mi4uNmU2ZGFhYWVlZDI1NTJiMDkxOWE0M2JkMDcwNDkx
NWE1NzY0OTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTAzLTE4ICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIE9wdGltaXplIHRo
ZSBtdWx0aXBseS1hZGQgaW4gQmlxdWFkLmNwcDo6cHJvY2VzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQaXBlbGluZSB0aGUgbXVsdGlwbHktYWRkIHdp
dGggU1NFMiBpbnRyaW5zaWNzLgorICAgICAgICBHZXQgfjQ1JSBwZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCBmb3IgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJvY2Vzcyk6CisKIDIwMTItMDMtMTgg
IERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBEb24ndCBvY2NsdWRlIG9uIG1haW4tdGhyZWFkIGJlaGluZCBsYXllcnMvc3VyZmFjZXMgd2l0
aCBpbXBsLXRocmVhZCBhbmltYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9CaXF1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlx
dWFkLmNwcAppbmRleCBkNjc5OWM2OWQzZmQ1ZDIxMTU0ZjM3ODA5MjkwMTk3MDdiNzBlNjlhLi42
YzMzMGFkNzBjMzY0YTdmMjA0NjJlMjNlMzg2YTRiZWZlMzZhNGE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9fU1NFMl9fCisjaW5j
bHVkZSA8ZW1taW50cmluLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25z
dCBpbnQga0J1ZmZlclNpemUgPSAxMDI0OwpAQCAtOTYsOCArMTAwLDQ1IEBAIHZvaWQgQmlxdWFk
Ojpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCiAgICAgZG91YmxlIGExID0gbV9hMTsKICAgICBkb3VibGUgYTIgPSBtX2Ey
OwogCisgICAgLy8gT3B0aW1pemUgdGhlIGhvdCBtdWx0aXBseS1hZGQgYnkgcGlwZWxpbmluZyB3
aXRoIFNTRTIgaW50cmluc2ljcy4KKyNpZmRlZiBfX1NTRTJfXworICAgIF9fbTEyOGQgbW0wID0g
X21tX3NldF9wZCh4MSwgeDIpOyAvLyBtbTAgPSAoeDEsIHgyKQorICAgIF9fbTEyOGQgbW0xID0g
X21tX3NldF9wZCh5Miwgc3RhdGljX2Nhc3Q8ZG91YmxlPigqc291cmNlUCkpOyAvLyBtbTEgPSAo
eTIsIHgpCisgICAgX19tMTI4ZCBtbTIgPSBfbW1fc2V0X3BkKGIxLCBiMik7IC8vIG1tMiA9IChi
MSwgYjIpCisgICAgX19tMTI4ZCBtbTMgPSBfbW1fc2V0X3BkKC1hMiwgYjApOyAvLyBtbTMgPSAo
LWEyLCBiMCkKKyAgICBfX20xMjhkIG1tNCA9IF9tbV9zZXRfcGQoMCwgeTEpOyAvLyBtbTQgPSAo
MCwgeTEpCisgICAgX19tMTI4ZCBtbTU7CisgICAgX19tMTI4ZCBtbTY7CisgICAgX19tMTI4IG1t
NzsKKyAgICBfX20xMjhkIG1tYTEgPSBfbW1fc2V0X3NkKC1hMSk7IC8vIG1tYTEgPSAoMCwgLWEx
KQorCisgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgc291cmNlUCsrOworICAgICAgICBtbTYgPSBt
bTE7IC8vIG1tNiA9ICh5MiwgeCkKKyAgICAgICAgbW0xID0gX21tX3NodWZmbGVfcGQobW0xLCBt
bTQsIDApOyAvLyBtbTEgPSAoeTEsIHgpCisgICAgICAgIG1tNSA9IF9tbV9tdWxfcGQobW0yLCBt
bTApOyAvLyBtbTUgPSAoeDEgKiBiMSwgeDIgKiBiMikKKyAgICAgICAgbW02ID0gX21tX211bF9w
ZChtbTMsIG1tNik7IC8vIG1tNiA9ICgteTIgKiBhMiwgeCAqIGIwKQorICAgICAgICBtbTAgPSBf
bW1fc2h1ZmZsZV9wZChtbTAsIG1tMSwgMSk7IC8vIG1tMCA9ICh4LCB4MSkKKyAgICAgICAgbW00
ID0gX21tX211bF9zZChtbTQsIG1tYTEpOyAvLyBtbTQgPSAoMCwgLXkxICogYTEpCisgICAgICAg
IG1tNSA9IF9tbV9hZGRfcGQobW01LCBtbTYpOyAvLyBtbTUgPSAoeDEgKiBiMSAtIHkyICogYTIs
IHgyICogYjIgKyB4ICogYjApCisgICAgICAgIG4tLTsKKyAgICAgICAgbW02ID0gbW01OyAvLyBt
bTYgPSAoeDEgKiBiMSAtIHkyICogYTIsIHgyICogYjIgKyB4ICogYjApCisgICAgICAgIG1tNyA9
IF9tbV9sb2FkX3NzKHNvdXJjZVApOyAvLyBMb2FkIG5leHQgeCB2YWx1ZSwgbW03ID0gKDAsIDAs
IDAsIHgpCisgICAgICAgIG1tMSA9IF9tbV9jdnRzc19zZChtbTEsIG1tNyk7IC8vIG1tMSA9ICh5
MSwgeCkKKyAgICAgICAgbW01ID0gX21tX2FkZF9zZChtbTQsIG1tNSk7IC8vIG1tNSA9ICh4MSAq
IGIxIC0geTIgKiBhMiwgeDIgKiBiMiArIHggKiBiMCAtIHkxICogYTEpCisgICAgICAgIG1tNiA9
IF9tbV9zaHVmZmxlX3BkKG1tNiwgbW02LCAxKTsgLy8gbW02ID0gKHgyICogYjIgKyB4ICogYjAs
IHgxICogYjEgLSB5MiAqIGEyKQorICAgICAgICBtbTUgPSBfbW1fYWRkX3NkKG1tNSwgbW02KTsg
Ly8gbW01ID0gKHgxICogYjEgLSB5MiAqIGEyLCB4ICogYjAgKyB4MSAqIGIxICsgeDIgKiBiMiAt
IHkxICogYTEgLSB5MiAqIGEyKSA9ICgqLCB5KQorICAgICAgICBtbTcgPSBfbW1fY3Z0c2Rfc3Mo
bW03LCBtbTUpOyAvLyBtbTcgPSAoMCwgMCwgMCwgeSkKKyAgICAgICAgX21tX3N0b3JlX3NzKGRl
c3RQLCBtbTcpOyAvLyBTdG9yZSB5IHRvIGRlc3RQCisgICAgICAgIG1tNCA9IG1tNTsgLy8gbW00
ID0gKHgxICogYjEgLSB5MiAqIGEyLCB5KQorICAgICAgICBkZXN0UCsrOworICAgIH0KKyAgICBf
bW1fc3RvcmVoX3BkKCZ4MSwgbW0wKTsKKyAgICBfbW1fc3RvcmVsX3BkKCZ4MiwgbW0wKTsKKyAg
ICBfbW1fc3RvcmVsX3BkKCZ5MSwgbW00KTsKKyAgICBfbW1fc3RvcmVoX3BkKCZ5MiwgbW0xKTsK
KyNlbHNlCiAgICAgd2hpbGUgKG4tLSkgewotICAgICAgICAvLyBGSVhNRTogdGhpcyBjYW4gYmUg
b3B0aW1pemVkIGJ5IHBpcGVsaW5pbmcgdGhlIG11bHRpcGx5IGFkZHMuLi4KICAgICAgICAgZmxv
YXQgeCA9ICpzb3VyY2VQKys7CiAgICAgICAgIGZsb2F0IHkgPSBiMCp4ICsgYjEqeDEgKyBiMip4
MiAtIGExKnkxIC0gYTIqeTI7CiAKQEAgLTEwOSw2ICsxNTAsNyBAQCB2b2lkIEJpcXVhZDo6cHJv
Y2Vzcyhjb25zdCBmbG9hdCogc291cmNlUCwgZmxvYXQqIGRlc3RQLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKQogICAgICAgICB5MiA9IHkxOwogICAgICAgICB5MSA9IHk7CiAgICAgfQorI2VuZGlm
IC8vIF9fU1NFMl9fCiAKICAgICAvLyBMb2NhbCB2YXJpYWJsZXMgYmFjayB0byBtZW1iZXIuIEZs
dXNoIGRlbm9ybWFscyBoZXJlIHNvIHdlCiAgICAgLy8gZG9uJ3Qgc2xvdyBkb3duIHRoZSBpbm5l
ciBsb29wIGFib3ZlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132954</attachid>
            <date>2012-03-20 20:12:57 -0700</date>
            <delta_ts>2012-11-15 17:20:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75528-20120321111612.patch</filename>
            <type>text/plain</type>
            <size>3765</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk5YzAwMWEyOTFkMzFj
ZDRmNjk4MTYyNDg2NWNkMTZjZjQyZWEyMy4uZmFiMTJhZWRhMWM3NDBkMTdjNjVlNzg2Y2MzOGI4
ZjA3NmE4M2RhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTAzLTIwICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIE9wdGltaXplIHRo
ZSBtdWx0aXBseS1hZGQgaW4gQmlxdWFkLmNwcDo6cHJvY2VzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQaXBlbGluZSB0aGUgbXVsdGlwbHktYWRkIHdp
dGggU1NFMiBpbnRyaW5zaWNzLgorICAgICAgICBHZXQgfjQ1JSBwZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCBmb3IgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6cHJvY2Vzcyk6CisKIDIwMTItMDMtMTgg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW5maW5p
dGUgcmVwYWludCBsb29wIHdpdGggU1ZHSW1hZ2VDYWNoZSBhbmQgZGVmZXJyZWQgcmVwYWludCB0
aW1lcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCmluZGV4IGQ2Nzk5
YzY5ZDNmZDVkMjExNTRmMzc4MDkyOTAxOTcwN2I3MGU2OWEuLjFjZjVjNmM3ZWI0YzVkY2FiOTVk
NmI0OTg1MDQ3ZDYxMDFjOGI0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0JpcXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlx
dWFkLmNwcApAQCAtNDEsNiArNDEsMTAgQEAKICNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJh
dGUuaD4KICNlbmRpZgogCisjaWZkZWYgX19TU0UyX18KKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4K
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9
IDEwMjQ7CkBAIC05Niw4ICsxMDAsNDUgQEAgdm9pZCBCaXF1YWQ6OnByb2Nlc3MoY29uc3QgZmxv
YXQqIHNvdXJjZVAsIGZsb2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBk
b3VibGUgYTEgPSBtX2ExOwogICAgIGRvdWJsZSBhMiA9IG1fYTI7CiAKKyAgICAvLyBPcHRpbWl6
ZSB0aGUgaG90IG11bHRpcGx5LWFkZCBieSBwaXBlbGluaW5nIHdpdGggU1NFMiBpbnRyaW5zaWNz
LgorI2lmZGVmIF9fU1NFMl9fCisgICAgX19tMTI4ZCBtbTAgPSBfbW1fc2V0X3BkKHgxLCB4Mik7
IC8vIG1tMCA9ICh4MSwgeDIpCisgICAgX19tMTI4ZCBtbTEgPSBfbW1fc2V0X3BkKHkyLCBzdGF0
aWNfY2FzdDxkb3VibGU+KCpzb3VyY2VQKSk7IC8vIG1tMSA9ICh5MiwgeCkKKyAgICBfX20xMjhk
IG1tMiA9IF9tbV9zZXRfcGQoYjEsIGIyKTsgLy8gbW0yID0gKGIxLCBiMikKKyAgICBfX20xMjhk
IG1tMyA9IF9tbV9zZXRfcGQoLWEyLCBiMCk7IC8vIG1tMyA9ICgtYTIsIGIwKQorICAgIF9fbTEy
OGQgbW00ID0gX21tX3NldF9zZCh5MSk7IC8vIG1tNCA9IHkxLCBvbmx5IHVzZSBsb3cgcGFydCBv
ZiBtbTQuCisgICAgX19tMTI4ZCBtbTU7CisgICAgX19tMTI4ZCBtbTY7CisgICAgX19tMTI4IG1t
NzsgLy8gT25seSB1c2UgbG93IHBhcnQgb2YgbW03LgorICAgIF9fbTEyOGQgbW1hMSA9IF9tbV9z
ZXRfc2QoLWExKTsgLy8gbW1hMSA9IC1hMSwgb25seSB1c2UgbG93IHBhcnQgb2YgbW1hMS4KKwor
ICAgIHdoaWxlIChuKSB7CisgICAgICAgIHNvdXJjZVArKzsKKyAgICAgICAgbW02ID0gbW0xOyAv
LyBtbTYgPSAoeTIsIHgpCisgICAgICAgIG1tMSA9IF9tbV9zaHVmZmxlX3BkKG1tMSwgbW00LCAw
KTsgLy8gbW0xID0gKHkxLCB4KQorICAgICAgICBtbTUgPSBfbW1fbXVsX3BkKG1tMiwgbW0wKTsg
Ly8gbW01ID0gKHgxICogYjEsIHgyICogYjIpCisgICAgICAgIG1tNiA9IF9tbV9tdWxfcGQobW0z
LCBtbTYpOyAvLyBtbTYgPSAoLXkyICogYTIsIHggKiBiMCkKKyAgICAgICAgbW0wID0gX21tX3No
dWZmbGVfcGQobW0wLCBtbTEsIDEpOyAvLyBtbTAgPSAoeCwgeDEpCisgICAgICAgIG1tNCA9IF9t
bV9tdWxfc2QobW00LCBtbWExKTsgLy8gbW00ID0gLXkxICogYTEKKyAgICAgICAgbW01ID0gX21t
X2FkZF9wZChtbTUsIG1tNik7IC8vIG1tNSA9ICh4MSAqIGIxIC0geTIgKiBhMiwgeDIgKiBiMiAr
IHggKiBiMCkKKyAgICAgICAgbi0tOworICAgICAgICBtbTYgPSBtbTU7IC8vIG1tNiA9ICh4MSAq
IGIxIC0geTIgKiBhMiwgeDIgKiBiMiArIHggKiBiMCkKKyAgICAgICAgbW03ID0gX21tX2xvYWRf
c3Moc291cmNlUCk7IC8vIG1tNyA9ICpzb3VyY2VQLCBsb2FkIG5leHQgeCB2YWx1ZS4KKyAgICAg
ICAgbW0xID0gX21tX2N2dHNzX3NkKG1tMSwgbW03KTsgLy8gbW0xID0gKHkxLCB4KQorICAgICAg
ICBtbTUgPSBfbW1fYWRkX3NkKG1tNCwgbW01KTsgLy8gbW01ID0geDIgKiBiMiArIHggKiBiMCAt
IHkxICogYTEsIG9ubHkgY2FyZSBsb3cgcGFydCBvZiBtbTUgaGVyZS4KKyAgICAgICAgbW02ID0g
X21tX3NodWZmbGVfcGQobW02LCBtbTYsIDEpOyAvLyBtbTYgPSAoeDIgKiBiMiArIHggKiBiMCwg
eDEgKiBiMSAtIHkyICogYTIpCisgICAgICAgIG1tNSA9IF9tbV9hZGRfc2QobW01LCBtbTYpOyAv
LyBtbTUgPSB4ICogYjAgKyB4MSAqIGIxICsgeDIgKiBiMiAtIHkxICogYTEgLSB5MiAqIGEyID0g
eSwgb25seSBjYXJlIGxvdyBwYXJ0IG9mIG1tNS4KKyAgICAgICAgbW03ID0gX21tX2N2dHNkX3Nz
KG1tNywgbW01KTsgLy8gbW03ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpCisgICAgICAgIF9tbV9z
dG9yZV9zcyhkZXN0UCwgbW03KTsgLy8gU3RvcmUgeSB0byBkZXN0UAorICAgICAgICBtbTQgPSBt
bTU7IC8vIG1tNCA9IHkKKyAgICAgICAgZGVzdFArKzsKKyAgICB9CisgICAgX21tX3N0b3JlaF9w
ZCgmeDEsIG1tMCk7CisgICAgX21tX3N0b3JlbF9wZCgmeDIsIG1tMCk7CisgICAgX21tX3N0b3Jl
bF9wZCgmeTEsIG1tNCk7CisgICAgX21tX3N0b3JlaF9wZCgmeTIsIG1tMSk7CisjZWxzZQogICAg
IHdoaWxlIChuLS0pIHsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgY2FuIGJlIG9wdGltaXplZCBi
eSBwaXBlbGluaW5nIHRoZSBtdWx0aXBseSBhZGRzLi4uCiAgICAgICAgIGZsb2F0IHggPSAqc291
cmNlUCsrOwogICAgICAgICBmbG9hdCB5ID0gYjAqeCArIGIxKngxICsgYjIqeDIgLSBhMSp5MSAt
IGEyKnkyOwogCkBAIC0xMDksNiArMTUwLDcgQEAgdm9pZCBCaXF1YWQ6OnByb2Nlc3MoY29uc3Qg
ZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAg
ICAgICAgeTIgPSB5MTsKICAgICAgICAgeTEgPSB5OwogICAgIH0KKyNlbmRpZiAvLyBfX1NTRTJf
XwogCiAgICAgLy8gTG9jYWwgdmFyaWFibGVzIGJhY2sgdG8gbWVtYmVyLiBGbHVzaCBkZW5vcm1h
bHMgaGVyZSBzbyB3ZQogICAgIC8vIGRvbid0IHNsb3cgZG93biB0aGUgaW5uZXIgbG9vcCBhYm92
ZS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>