{"id":31,"date":"2009-01-15T23:43:00","date_gmt":"2009-01-15T13:43:00","guid":{"rendered":"http:\/\/brnz.org\/hbr\/?p=31"},"modified":"2010-11-09T14:14:24","modified_gmt":"2010-11-09T04:14:24","slug":"unrolled-1","status":"publish","type":"post","link":"https:\/\/brnz.org\/hbr\/?p=31","title":{"rendered":"Unrolled 1"},"content":{"rendered":"<p>Shortest form I&#8217;ve found so far.  Not a good odd\/even balance on the pipeline usage though.<\/p>\n<pre>for (j = 0; j &lt; num_indexes; j += 24) {\r\n qword* lower_qword = (qword*)&amp;indexes[j];\r\n\u00a0qword i0 = lower_qword[0];\r\n\u00a0qword i1 = lower_qword[1];\r\n\u00a0qword i2 = lower_qword[2];\r\n\u00a0qword i0r = si_rotqmbyi(i0, -2);\r\n\u00a0qword i1r = si_rotqmbyi(i1, -2);\r\n\u00a0qword i2r = si_rotqmbyi(i2, -2);\r\n\r\n qword v0 = si_mpya(i0, vertex_sizes, verticess);\r\n\u00a0qword v1 = si_mpya(i1, vertex_sizes, verticess);\r\n\u00a0qword v2 = si_mpya(i2, vertex_sizes, verticess);\r\n\u00a0qword v0r = si_mpya(i0r, vertex_sizes, verticess);\r\n\u00a0qword v1r = si_mpya(i1r, vertex_sizes, verticess);\r\n\u00a0qword v2r = si_mpya(i2r, vertex_sizes, verticess);\r\n\r\n \/\/ Little constant reuse here :\\\r\n\u00a0qword vs7 = si_shufb(v2r, v2, SHUFB4(c,D,d,0));\r\n\u00a0qword vs6 = si_shufb(v2r, v2, SHUFB4(B,b,C,0));\r\n\u00a0qword vs5 = si_shufb(v1, v2r, SHUFB4(D,a,0,0));\r\n\u00a0vs5 = si_shufb(vs5, v2, SHUFB4(A,B,a,0));\r\n\u00a0qword vs4 = si_shufb(v1, v1r, SHUFB4(c,C,d,0));\r\n\u00a0qword vs3 = si_shufb(v1, v1r, SHUFB4(A,b,B,0));\r\n\u00a0qword vs2 = si_shufb(v0r, v0, SHUFB4(D,d,0,0));\r\n\u00a0vs2 = si_shufb(vs2, v1r,SHUFB4(A,B,a,0));\r\n\u00a0qword vs1 = si_shufb(v0r, v0, SHUFB4(b,C,c,0));\r\n\u00a0qword vs0 = si_shufb(v0r, v0, SHUFB4(A,a,B,0));\r\n\r\n switch(num_indexes - j) {\r\n \u00a0default: func(vs7);\r\n \u00a0case 21: func(vs6);\r\n \u00a0case 18: func(vs5);\r\n \u00a0case 15: func(vs4);\r\n \u00a0case 12: func(vs3);\r\n \u00a0case 9:  func(vs2);\r\n \u00a0case 6:  func(vs1);\r\n \u00a0case 3:  func(vs0);   \r\n }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Shortest form I&#8217;ve found so far. Not a good odd\/even balance on the pipeline usage though. for (j = 0; j &lt; num_indexes; j += 24) { qword* lower_qword = (qword*)&amp;indexes[j]; \u00a0qword i0 = lower_qword[0]; \u00a0qword i1 = lower_qword[1]; \u00a0qword i2 = lower_qword[2]; \u00a0qword i0r = si_rotqmbyi(i0, -2); \u00a0qword i1r = si_rotqmbyi(i1, -2); \u00a0qword i2r &hellip; <a href=\"https:\/\/brnz.org\/hbr\/?p=31\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Unrolled 1&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[37],"_links":{"self":[{"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/posts\/31"}],"collection":[{"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=31"}],"version-history":[{"count":3,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/posts\/31\/revisions"}],"predecessor-version":[{"id":623,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=\/wp\/v2\/posts\/31\/revisions\/623"}],"wp:attachment":[{"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=31"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=31"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brnz.org\/hbr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}