<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:clearspace="http://www.jivesoftware.com/xmlns/clearspace/rss" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>DSP Support Forum: Message List - very fast CRC32 code wanted</title>
    <link>http://ez.analog.com/community/blackfin-processors?view=discussions</link>
    <description>Most recent forum messages</description>
    <language>en</language>
    <pubDate>Wed, 09 Sep 2009 14:01:43 GMT</pubDate>
    <generator>Clearspace 2.5.7 (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2009-09-09T14:01:43Z</dc:date>
    <dc:language>en</dc:language>
    <item>
      <title>Re: fast CRC32 code - back to ~0.8 c/bit</title>
      <link>http://ez.analog.com/message/3808?tstart=0#3808</link>
      <description>&lt;!-- [DocumentBodyStart:c5777fae-ca92-43f0-a097-e7992f91bd77] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Thanks, Yosi - it sure works.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Boris&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:c5777fae-ca92-43f0-a097-e7992f91bd77] --&gt;</description>
      <pubDate>Wed, 09 Sep 2009 14:01:43 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3808?tstart=0#3808</guid>
      <dc:date>2009-09-09T14:01:43Z</dc:date>
      <clearspace:dateToText>2 months, 1 week ago</clearspace:dateToText>
    </item>
    <item>
      <title>Re: fast CRC32 code - back to ~0.8 c/bit</title>
      <link>http://ez.analog.com/message/3787?tstart=0#3787</link>
      <description>&lt;!-- [DocumentBodyStart:daa6eada-8740-413a-b4c6-3686bcf7786c] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;&lt;!----&gt;&lt;p class="MsoNoSpacing"&gt;Boris,&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;I think there is a way to remove the in-loop stall ( see the changes in red) and get it down to 12/2 bytes  or &lt;span&gt; &lt;/span&gt;0.75 c/bit.&lt;/p&gt;&lt;p class="MsoNoSpacing" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;LOOP CRC32 LC0 = p4; // p4 = (32 - 1) in this case&lt;br/&gt;     &lt;br/&gt;     p3 = p0;&lt;br/&gt;     &lt;br/&gt;     r0 = 0;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;r1 = r7&amp;lt;&amp;lt;2;&lt;span&gt;                                        &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="color: red;"&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt; &lt;/span&gt;m1 = r1;&lt;span&gt;                             &lt;/span&gt;//m1 = CRC table base.&lt;br/&gt; &lt;/span&gt;    &lt;br/&gt;     r1 = CRC32_32;  // CRC32 initial value corresponding to x^(8*32) message polynomial&lt;br/&gt;     &lt;br/&gt;     p3 += 32; //&lt;/p&gt;&lt;p class="MsoNoSpacing" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r5 = r0 &amp;gt;&amp;gt; 24 || r2 = b[p0++];  // r1 - input byte,  8 MSB of CRC interacting with input&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r2 = r2 ^ r5;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r3 = (r7+r2) &amp;lt;&amp;lt; 2 ;  // r7 = CRC table base&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    i1 = r3;                // ptr into CRC update table, size 256*4 bytes&lt;/p&gt;&lt;p class="MsoNoSpacing" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r5 = r1 &amp;gt;&amp;gt; 24 || r2 = b[p3++];                &lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r2 = r2 ^ r5;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r3 = (r7+r2) &amp;lt;&amp;lt; 2 ;  // r7 = CRC table base     &lt;br/&gt;     i2 = r3;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r5 = r0 &amp;lt;&amp;lt; 8;  // 24 LSB of old CRC interacting with CRC update  &lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r4 = r1 &amp;lt;&amp;lt; 8 || r3 = [i1]; // r6 is 32-bit CRC corresponding to input byte^MSbyte of CRC &lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;  &lt;br/&gt; LOOP_BEGIN CRC32; &lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r0  = r5 ^ r3; // update r0&lt;/p&gt;&lt;p class="MsoNoSpacing" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="color: red;"&gt; //    nop; // still 1 stall here...&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;br/&gt;     r5 = r0 &amp;gt;&amp;gt; 24 || r2 = b[p0++];  // r1 - input byte&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r2 = r2 ^ r5;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;&lt;span style="color: red;"&gt;    r2 = r2 &amp;lt;&amp;lt; 2 || r6 = [i2];&lt;/span&gt;  &lt;span&gt;         &lt;/span&gt;// r7 = CRC table base, &lt;span&gt; &lt;/span&gt;8 MSB of CRC interacting with input&lt;/p&gt;&lt;p class="MsoNoSpacing" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    i1 = r2;                &lt;span&gt;                        &lt;/span&gt;// ptr into CRC update table, size 256*4 bytes&lt;/p&gt;&lt;p class="MsoNoSpacing" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r1 = r4 ^ r6;    &lt;span&gt;                         &lt;/span&gt;&lt;span&gt; &lt;/span&gt;// update r1&lt;/p&gt;&lt;p class="MsoNoSpacing" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r5 = r1 &amp;gt;&amp;gt; 24 || r2 = b[p3++];             &lt;br/&gt;     r2 = r2 ^ r5;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r2 = (r7+r2) &amp;lt;&amp;lt; 2;  &lt;span&gt;                 &lt;/span&gt;&lt;span&gt; &lt;/span&gt;// r7 = CRC table base     &lt;br/&gt;     i2 = r2;&lt;/p&gt;&lt;p class="MsoNoSpacing" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r5 = r0 &amp;lt;&amp;lt; 8 &lt;span style="color: red;"&gt;|| i1+=m1&lt;/span&gt;  // 24 LSB of old CRC interacting with CRC update , update I1CRC tbl ptr&lt;/p&gt;&lt;p class="MsoNoSpacing"&gt;    r4 = r1 &amp;lt;&amp;lt; 8 || r3 = [i1]; // r6 is 32-bit CRC corresponding to input byte^MSbyte of CRC  &lt;br/&gt;          &lt;br/&gt; LOOP_END CRC32;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: &amp;amp;quot;Book Antiqua&amp;amp;quot;,&amp;amp;quot;serif&amp;amp;quot;;"&gt;      &lt;br/&gt;     r0 = r0 ^ r1; //final r0 update &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:daa6eada-8740-413a-b4c6-3686bcf7786c] --&gt;</description>
      <pubDate>Tue, 08 Sep 2009 23:56:00 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3787?tstart=0#3787</guid>
      <dc:date>2009-09-08T23:56:00Z</dc:date>
      <clearspace:dateToText>2 months, 1 week ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
    </item>
    <item>
      <title>fast CRC32 code - back to ~0.8 c/bit</title>
      <link>http://ez.analog.com/message/3786?tstart=0#3786</link>
      <description>&lt;!-- [DocumentBodyStart:576e79c9-3b34-4c6d-8ccb-82f735988e2a] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Hi,&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Yosi pointed out how to do it faster.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Usually we work on messages  that are not too small - at least, say, 64 bytes.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;So if we break our original 64-byte packet into 2 parts - say, the first 32 bytes and the last 32 bytes - can work on 2 32-byte messages independently, recombining the results once in the end.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Initial conditions for the packets will be r0 = 0 (CRC32 of 0 message) and some precalculated const CRC32_32.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;    LOOP CRC32 LC0 = p4; // p4 = (32 - 1) in this case&lt;br/&gt;    &lt;br/&gt;    p3 = p0;&lt;br/&gt;    &lt;br/&gt;    r0 = 0; &lt;br/&gt;    &lt;br/&gt;    r1 = CRC32_32;  // CRC32 initial value corresponging to x^(8*32) message polynomial&lt;br/&gt;    &lt;br/&gt;    p3 += 32; //&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;    r5 = r0 &amp;gt;&amp;gt; 24 || r2 = b[p0++];  // r1 - input byte,  8 MSB of CRC interacting with input&lt;/p&gt;&lt;p&gt;    r2 = r2 ^ r5;&lt;/p&gt;&lt;p&gt;    r3 = (r7+r2) &amp;lt;&amp;lt; 2 ;  // r7 = CRC table base&lt;/p&gt;&lt;p&gt;    i1 = r3;                // ptr into CRC update table, size 256*4 bytes&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;    r5 = r1 &amp;gt;&amp;gt; 24 || r2 = b[p3++];                 &lt;/p&gt;&lt;p&gt;    r2 = r2 ^ r5;&lt;/p&gt;&lt;p&gt;    r3 = (r7+r2) &amp;lt;&amp;lt; 2 ;  // r7 = CRC table base     &lt;br/&gt;    i2 = r3;&lt;br/&gt;   &lt;/p&gt;&lt;p&gt;    r5 = r0 &amp;lt;&amp;lt; 8;  // 24 LSB of old CRC interacting with CRC update   &lt;/p&gt;&lt;p&gt;    r4 = r1 &amp;lt;&amp;lt; 8 || r3 = [i1]; // r6 is 32-bit CRC corresponding to input byte^MSbyte of CRC  &lt;/p&gt;&lt;p&gt;  &lt;br/&gt;LOOP_BEGIN CRC32;  &lt;br/&gt; &lt;/p&gt;&lt;p&gt;    r0  = r5 ^ r3; // update r0&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;    nop; // still 1 stall here...&lt;/p&gt;&lt;p&gt;&lt;br/&gt;    r5 = r0 &amp;gt;&amp;gt; 24 || r2 = b[p0++] || r6 = [i2];  // r1 - input byte,  8 MSB of CRC interacting with input&lt;/p&gt;&lt;p&gt;    r2 = r2 ^ r5;&lt;/p&gt;&lt;p&gt;    r2 = (r7+r2) &amp;lt;&amp;lt; 2 ;  // r7 = CRC table base&lt;/p&gt;&lt;p&gt;    i1 = r2;                // ptr into CRC update table, size 256*4 bytes&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;    r1 = r4 ^ r6;    // update r1&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;    r5 = r1 &amp;gt;&amp;gt; 24 || r2 = b[p3++];             &lt;br/&gt;    r2 = r2 ^ r5;&lt;/p&gt;&lt;p&gt;    r2 = (r7+r2) &amp;lt;&amp;lt; 2 ;  // r7 = CRC table base     &lt;br/&gt;    i2 = r2;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;    r5 = r0 &amp;lt;&amp;lt; 8;  // 24 LSB of old CRC interacting with CRC update   &lt;/p&gt;&lt;p&gt;    r4 = r1 &amp;lt;&amp;lt; 8 || r3 = [i1]; // r6 is 32-bit CRC corresponding to input byte^MSbyte of CRC  &lt;br/&gt;         &lt;br/&gt;LOOP_END CRC32;&lt;/p&gt;&lt;p&gt;      &lt;br/&gt;    r0 = r0 ^ r1; //final r0 update &lt;br/&gt;   &lt;/p&gt;&lt;p&gt;// back at ~ 13 cycles/2 bytes = 6.5 c/byte = 0.8 c/bit&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:576e79c9-3b34-4c6d-8ccb-82f735988e2a] --&gt;</description>
      <pubDate>Tue, 08 Sep 2009 21:01:04 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3786?tstart=0#3786</guid>
      <dc:date>2009-09-08T21:01:04Z</dc:date>
      <clearspace:dateToText>2 months, 1 week ago</clearspace:dateToText>
      <clearspace:replyCount>2</clearspace:replyCount>
    </item>
    <item>
      <title>fast CRC32 code correction</title>
      <link>http://ez.analog.com/message/3766?tstart=0#3766</link>
      <description>&lt;!-- [DocumentBodyStart:39c909b1-e51c-470e-8d56-db74324e53f2] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Sorry, guys - I mislead you.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The code doesn't work because it has to have feedback - should "bite it's tail" and use LUT value in the same loop iteration (not in the next as it was).&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Don't know how to avoid nop's:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;CRC32Start:&lt;/p&gt;&lt;p&gt;      &lt;/p&gt;&lt;p&gt;     r5 = r0 &amp;gt;&amp;gt; 24 || r1 = b[p0++];  // r1 - input byte,  8 MSB of CRC interacting with input&lt;/p&gt;&lt;p&gt;     r2 = r1 ^ r5;&lt;/p&gt;&lt;p&gt;     r3 = (r7+r2) &amp;lt;&amp;lt; 2 ;   // r7 = CRC table base &lt;/p&gt;&lt;p&gt;     p1 = r3;                 // ptr into CRC update table, size 256*4 bytes&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;     nop;&lt;/p&gt;&lt;p&gt;     nop;&lt;/p&gt;&lt;p&gt;     nop; // can't use p1 for 4 cycles&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;     r5 = r0 &amp;lt;&amp;lt; 8;  // 24 LSB of old CRC interacting with CRC update    &lt;/p&gt;&lt;p&gt;     r6 = [p1]; // r6 is 32-bit CRC corresponding to input byte^MSbyte of CRC  &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;CRC32End:&lt;/p&gt;&lt;p&gt;     r0 = r5 ^ r6;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;So it is 10 cycles /8bits, 1.25 c/bit as for now.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Boris&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:39c909b1-e51c-470e-8d56-db74324e53f2] --&gt;</description>
      <pubDate>Tue, 08 Sep 2009 13:56:18 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3766?tstart=0#3766</guid>
      <dc:date>2009-09-08T13:56:18Z</dc:date>
      <clearspace:dateToText>2 months, 1 week ago</clearspace:dateToText>
      <clearspace:replyCount>3</clearspace:replyCount>
    </item>
    <item>
      <title>correction to the code</title>
      <link>http://ez.analog.com/message/3682?tstart=0#3682</link>
      <description>&lt;!-- [DocumentBodyStart:6f379ea1-9e49-4106-b500-7c402f54a251] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Have to correct the code - add+ shift can't be done in parallel:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;LOOP_BEGIN ...&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;  r2 = (r7 + r2) &amp;lt;&amp;lt; 2 ;&lt;/p&gt;&lt;p&gt;  r3 = r0 &amp;gt;&amp;gt; 24 || r6 = [p1];  // 8 MSB of CRC interacting with input,  r6 is 32-bit CRC corresponding to input byte&lt;br/&gt;  p1 = r2;                          // ptr into CRC update table, size 256*4 bytes&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;  r5 = r0 &amp;lt;&amp;lt; 8   || r1 = b[p0++];  // 24 LSB of old CRC interacting with CRC update          &lt;br/&gt;  &lt;br/&gt;  r2 = r3 ^ r1;&lt;br/&gt;  &lt;br/&gt;  r0 = r5 ^ r6;   &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;LOOP_END ...&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:6f379ea1-9e49-4106-b500-7c402f54a251] --&gt;</description>
      <pubDate>Thu, 03 Sep 2009 19:29:33 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3682?tstart=0#3682</guid>
      <dc:date>2009-09-03T19:29:33Z</dc:date>
      <clearspace:dateToText>2 months, 2 weeks ago</clearspace:dateToText>
    </item>
    <item>
      <title>Re: very fast CRC32 code wanted</title>
      <link>http://ez.analog.com/message/3679?tstart=0#3679</link>
      <description>&lt;!-- [DocumentBodyStart:40319d9f-a158-4fef-abfb-ecba9c0393a8] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Boris,&lt;/p&gt;&lt;p&gt;Do you agree that the two LSB of R7 are "0" (32bit aligned!)&lt;/p&gt;&lt;p&gt;You can save a cycle by:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Mine  R7 == yours &amp;gt;&amp;gt;2!!!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 12pt; color: #000000; font-family: Consolas;"&gt;// CRC lives in R0&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 12pt; color: #000000; font-family: Consolas;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 12pt; color: #000000; font-family: Consolas;"&gt;CRC32Start:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;p&gt;  r3 = (r7+r2) &amp;lt;&amp;lt; 2      || r6 =[p1];           // r7 = CRC table base , r6 is 32-bit CRC corresponding to input byte^MSbyte of CRC&lt;/p&gt;&lt;p&gt;  p1 = r3;                                            // ptr into CRC update table, size 256*4 bytes&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;  r5 = r0 &amp;gt;&amp;gt; 24 ||  r1 = b[p0++];            // r1 - input byte,  8 MSB of CRC interacting with input&lt;/p&gt;&lt;p&gt;  r2 = r1 ^ r5;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;  r5 = r0 &amp;lt;&amp;lt; 8;                                    // 24 LSB of old CRC interacting with CRC update&lt;/p&gt;&lt;p&gt;CRC32End:&lt;/p&gt;&lt;p&gt;  r0 = r5 ^ r6;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;and now you have 6 cyc/8bit == &amp;gt; 0.75cyc/bit&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;do you agree?&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Thanks,&lt;/p&gt;&lt;p&gt;Yosi&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:40319d9f-a158-4fef-abfb-ecba9c0393a8] --&gt;</description>
      <pubDate>Thu, 03 Sep 2009 18:50:13 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3679?tstart=0#3679</guid>
      <dc:date>2009-09-03T18:50:13Z</dc:date>
      <clearspace:dateToText>2 months, 2 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>6</clearspace:replyCount>
    </item>
    <item>
      <title>Re: very fast CRC32 code wanted</title>
      <link>http://ez.analog.com/message/3680?tstart=0#3680</link>
      <description>&lt;!-- [DocumentBodyStart:c30b3e97-52b0-4036-a696-b09f1e81b322] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Thanks, Yosi - &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Sure, base address is 32 bit aligned and with add with shift you saved 1 cycle.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Boris&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;//////////&lt;/p&gt;&lt;p&gt;Boris,&lt;/p&gt;&lt;p&gt;Do you agree that the two LSB of R7 are "0" (32bit align!)&lt;/p&gt;&lt;p&gt;You can save a cycle by:&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Mine  R7 == yours &amp;gt;&amp;gt;2!!!&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;   r3 = (r7+r2) &amp;lt;&amp;lt; 2      || r6 = p1;   // r7 = CRC table base , r6 is 32-bit CRC corresponding to input byte^MSbyte of CRC&lt;/p&gt;&lt;p&gt;   p1 = r3;                           // ptr into CRC update table, size 256*4 bytes&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;   r5 = r0 &amp;gt;&amp;gt; 24 || || r1 = b[p0++];  // r1 - input byte,  8 MSB of CRC interacting with input&lt;/p&gt;&lt;p&gt;   r2 = r1 ^ r5;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;   r5 = r0 &amp;lt;&amp;lt; 8;  // 24 LSB of old CRC interacting with CRC update&lt;/p&gt;&lt;p&gt;CRC32End:&lt;/p&gt;&lt;p&gt;   r0 = r5 ^ r6;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;and now you have 6 cyc/8bit == &amp;gt; 0.75cyc/bit&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;do you agree?&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Thanks,&lt;/p&gt;&lt;p&gt;Yosi&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:c30b3e97-52b0-4036-a696-b09f1e81b322] --&gt;</description>
      <pubDate>Thu, 03 Sep 2009 19:01:43 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3680?tstart=0#3680</guid>
      <dc:date>2009-09-03T19:01:43Z</dc:date>
      <clearspace:dateToText>2 months, 2 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>4</clearspace:replyCount>
    </item>
    <item>
      <title>Re: very fast CRC32 code wanted</title>
      <link>http://ez.analog.com/message/3675?tstart=0#3675</link>
      <description>&lt;!-- [DocumentBodyStart:61232b29-e2fc-4128-8c48-c1eb651235e5] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Hi Yaniv,&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;WIth LUT, it could work like this -&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;/* algorithm:&lt;/p&gt;&lt;p&gt;   new CRC (updated each incoming byte) = (old CRC &amp;lt;&amp;lt; 8) ^ (CRC_update_table[input byte ^ MSByte of old CRC] )&lt;/p&gt;&lt;p&gt;*/&lt;/p&gt;&lt;p&gt;// ... proper loading the loop, then:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// CRC lives in R0&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;CRC32Start:&lt;br/&gt;   &lt;br/&gt;   r3 = r2 &amp;lt;&amp;lt; 2      || r6 = [p1];    // r6 is 32-bit CRC corresponding to input byte^MSbyte of CRC&lt;br/&gt;   r3 = r7 + r3 (ns) || r1 = b[p0++]; // r7 - base  for CRC update table, r1 - input byte &lt;br/&gt;   p1 = r3;                           // ptr into CRC update table, size 256*4 bytes&lt;br/&gt;   &lt;br/&gt;   r5 = r0 &amp;gt;&amp;gt; 24;  // 8 MSB of CRC interacting with input &lt;br/&gt;   r2 = r1 ^ r5;&lt;br/&gt;   &lt;br/&gt;   r5 = r0 &amp;lt;&amp;lt; 8;  // 24 LSB of old CRC interacting with CRC update          &lt;br/&gt;CRC32End:   &lt;br/&gt;   r0 = r5 ^ r6;    &lt;br/&gt;   &lt;br/&gt;   // 7 cycles per 8 bits = 0.875 c/bit&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a class="jive-link-email-small" href="mailto:boris.liberol@analog.com"&gt;boris.liberol@analog.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:61232b29-e2fc-4128-8c48-c1eb651235e5] --&gt;</description>
      <pubDate>Thu, 03 Sep 2009 15:36:35 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3675?tstart=0#3675</guid>
      <dc:date>2009-09-03T15:36:35Z</dc:date>
      <clearspace:dateToText>2 months, 2 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>7</clearspace:replyCount>
    </item>
    <item>
      <title>Re: very fast CRC32 code wanted</title>
      <link>http://ez.analog.com/message/3655?tstart=0#3655</link>
      <description>&lt;!-- [DocumentBodyStart:9eea5fd3-6063-4e3c-a92b-23501d8ca6c7] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;LOL! I wonder why... &lt;img height="16px" src="http://analog.hosted.jivesoftware.com/images/emoticons/silly.gif" width="16px"/&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:9eea5fd3-6063-4e3c-a92b-23501d8ca6c7] --&gt;</description>
      <pubDate>Thu, 03 Sep 2009 00:09:05 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3655?tstart=0#3655</guid>
      <dc:date>2009-09-03T00:09:05Z</dc:date>
      <clearspace:dateToText>2 months, 2 weeks ago</clearspace:dateToText>
    </item>
    <item>
      <title>Re: very fast CRC32 code wanted</title>
      <link>http://ez.analog.com/message/3654?tstart=0#3654</link>
      <description>&lt;!-- [DocumentBodyStart:58053938-1970-43a3-9bad-08560fe7dccf] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Heh, I should really have looked at the embedded.com article you posted as it's pretty much the same as the PRM text.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:58053938-1970-43a3-9bad-08560fe7dccf] --&gt;</description>
      <pubDate>Wed, 02 Sep 2009 21:03:22 GMT</pubDate>
      <author>analog@sgaur.hosted.jivesoftware.com</author>
      <guid>http://ez.analog.com/message/3654?tstart=0#3654</guid>
      <dc:date>2009-09-02T21:03:22Z</dc:date>
      <clearspace:dateToText>2 months, 2 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
    </item>
  </channel>
</rss>

