{"id":7163,"date":"2019-03-06T23:52:33","date_gmt":"2019-03-06T14:52:33","guid":{"rendered":"http:\/\/umezawa.dyndns.info\/wordpress\/?p=7163"},"modified":"2019-03-07T18:03:45","modified_gmt":"2019-03-07T09:03:45","slug":"vs2017-vc2017-%e3%81%ae%e6%9c%80%e9%81%a9%e5%8c%96%e3%81%8c-2015-%e3%82%88%e3%82%8a%e5%bc%b1%e3%81%84%e4%be%8b","status":"publish","type":"post","link":"http:\/\/umezawa.dyndns.info\/wordpress\/?p=7163","title":{"rendered":"VS2017 (VC++2017) \u306e\u6700\u9069\u5316\u304c 2015 \u3088\u308a\u5f31\u3044\u4f8b"},"content":{"rendered":"<p><a href=\"http:\/\/umezawa.dyndns.info\/wordpress\/?p=7160\">\u524d\u306e\u8a18\u4e8b<\/a>\u3067 ULxx \u306e median decode \u304c\u9045\u304f\u306a\u308b\u3068\u66f8\u304d\u307e\u3057\u305f\u3002\u5b9f\u969b\u3069\u3046\u306a\u3063\u3066\u308b\u306e\u304b\u3068\u3044\u3046\u8a71\u3067\u3059\u3002<\/p>\n<p><!--more--><\/p>\n<p>gradient\/left \u306e decode \u306f\u9045\u304f\u306a\u3063\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u602a\u3057\u3044\u306e\u306f <a href=\"https:\/\/github.com\/umezawatakeshi\/utvideo\/blob\/utvideo-20.2.0\/utv_core\/Predict_x86x64.cpp#L341-L388\">tuned_RestoreCylindricalWrongMedian8<\/a> \u3068\u3044\u3046\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002\u6700\u5f8c\u306e for \u30eb\u30fc\u30d7\u306e\u90e8\u5206\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<blockquote>\n<pre>\r\n    for (; p &lt; pSrcEnd; p++, q++)\r\n    {\r\n        __m128i top = _mm_cvtsi32_si128(<strong>*(const uint32_t *)(q - cbStride)<\/strong>);\r\n        __m128i grad = _mm_add_epi8(left, _mm_sub_epi8(top, topleft));\r\n        __m128i pred = _mm_max_epu8(_mm_min_epu8(_mm_max_epu8(left, top), grad), _mm_min_epu8(left, top));\r\n        __m128i value = _mm_add_epi8(pred, _mm_cvtsi32_si128(*(const uint32_t *)p));\r\n        *q = _mm_cvtsi128_si32(value);\r\n        left = value;\r\n        topleft = top;\r\n    }\r\n<\/pre>\n<\/blockquote>\n<p>\u305f\u3060\u3057\u3001pSrcEnd \u3068 cbStride \u306f\u95a2\u6570\u306e\u5f15\u6570\u3067\u3059\u3002<\/p>\n<p>\u3053\u308c\u304c VS2015 \u3060\u3068\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<blockquote>\n<pre>\r\n000007FEB485D680 4D 85 C0             test        r8,r8\r\n000007FEB485D683 74 48                je          tuned_RestoreCylindricalWrongMedian8<6>+17Dh (07FEB485D6CDh)\r\n000007FEB485D685 49 F7 DB             <strong>neg         r11<\/strong>\r\n000007FEB485D688 48 2B D1             sub         rdx,rcx\r\n000007FEB485D68B 0F 1F 44 00 00       nop         dword ptr [rax+rax]\r\n\r\n000007FEB485D690 C4 C1 79 6E 2C 0B    vmovd       xmm5,dword ptr <strong>[r11+rcx]<\/strong>\r\n000007FEB485D696 C5 D9 DE D5          vpmaxub     xmm2,xmm4,xmm5\r\n000007FEB485D69A C5 D1 F8 C0          vpsubb      xmm0,xmm5,xmm0\r\n000007FEB485D69E C5 F9 FC CC          vpaddb      xmm1,xmm0,xmm4\r\n000007FEB485D6A2 C5 F9 6E 04 0A       vmovd       xmm0,dword ptr [rdx+rcx]\r\n000007FEB485D6A7 C5 E9 DA D9          vpminub     xmm3,xmm2,xmm1\r\n000007FEB485D6AB C5 D9 DA D5          vpminub     xmm2,xmm4,xmm5\r\n000007FEB485D6AF C5 E1 DE E2          vpmaxub     xmm4,xmm3,xmm2\r\n000007FEB485D6B3 C5 D9 FC E0          vpaddb      xmm4,xmm4,xmm0\r\n000007FEB485D6B7 C5 F9 7E E0          vmovd       eax,xmm4\r\n000007FEB485D6BB 49 FF C1             inc         r9\r\n000007FEB485D6BE 88 01                mov         byte ptr [rcx],al\r\n000007FEB485D6C0 48 8D 49 01          lea         rcx,[rcx+1]\r\n000007FEB485D6C4 C5 FA 6F C5          vmovdqu     xmm0,xmm5\r\n000007FEB485D6C8 4D 3B C8             cmp         r9,r8\r\n000007FEB485D6CB 72 C3                jb          tuned_RestoreCylindricalWrongMedian8<6>+140h (07FEB485D690h)\r\n<\/pre>\n<\/blockquote>\n<p>x86 \u3067\u306f\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u306e\u30a2\u30c9\u30ec\u30b9\u306e\u6307\u5b9a\u3067\u30ec\u30b8\u30b9\u30bf\u30922\u3064\u4f7f\u3046\u5834\u5408\u306b\u300c\u30ec\u30b8\u30b9\u30bf+\u30ec\u30b8\u30b9\u30bf\u300d\u3057\u304b\u4f7f\u3048\u306a\u3044\uff08\u300c\u30ec\u30b8\u30b9\u30bf-\u30ec\u30b8\u30b9\u30bf\u300d\u306f\u4f7f\u3048\u306a\u3044\uff09\u306e\u3067\u3001\u5148\u306b -cbStride \u3092\u8a08\u7b97\u3057\u3066\u304a\u3044\u3066\u304b\u3089\u3001 q + (-cbStride) \u306e\u5f62\u306b\u7f6e\u304d\u63db\u3048\u3066\u3044\u308b\u308f\u3051\u3067\u3059\u3002<\/p>\n<p>\u3067\u3001VS2017 \u3067\u306f\u3069\u3046\u306a\u308b\u304b\u3068\u3044\u3046\u3068\u3001<\/p>\n<blockquote>\n<pre>\r\n000007FEB4795E70 4D 85 C0             test        r8,r8\r\n000007FEB4795E73 74 4B                je          tuned_RestoreCylindricalWrongMedian8<6>+180h (07FEB4795EC0h)\r\n000007FEB4795E75 48 2B D1             sub         rdx,rcx\r\n000007FEB4795E78 0F 1F 84 00 00 00 00 00 nop         dword ptr [rax+rax]\r\n\r\n000007FEB4795E80 48 8B C1             <strong>mov         rax,rcx<\/strong>\r\n000007FEB4795E83 49 FF C1             inc         r9\r\n000007FEB4795E86 49 2B C3             <strong>sub         rax,r11<\/strong>\r\n000007FEB4795E89 C5 F9 6E 28          vmovd       xmm5,dword ptr <strong>[rax]<\/strong>\r\n000007FEB4795E8D C5 D9 DE D5          vpmaxub     xmm2,xmm4,xmm5\r\n000007FEB4795E91 C5 D1 F8 C0          vpsubb      xmm0,xmm5,xmm0\r\n000007FEB4795E95 C5 F9 FC CC          vpaddb      xmm1,xmm0,xmm4\r\n000007FEB4795E99 C5 F9 6E 04 0A       vmovd       xmm0,dword ptr [rdx+rcx]\r\n000007FEB4795E9E C5 E9 DA D9          vpminub     xmm3,xmm2,xmm1\r\n000007FEB4795EA2 C5 D9 DA D5          vpminub     xmm2,xmm4,xmm5\r\n000007FEB4795EA6 C5 E1 DE E2          vpmaxub     xmm4,xmm3,xmm2\r\n000007FEB4795EAA C5 D9 FC E0          vpaddb      xmm4,xmm4,xmm0\r\n000007FEB4795EAE C5 F9 7E E0          vmovd       eax,xmm4\r\n000007FEB4795EB2 88 01                mov         byte ptr [rcx],al\r\n000007FEB4795EB4 48 FF C1             inc         rcx\r\n000007FEB4795EB7 C5 FA 6F C5          vmovdqu     xmm0,xmm5\r\n000007FEB4795EBB 4D 3B C8             cmp         r9,r8\r\n000007FEB4795EBE 72 C0                jb          tuned_RestoreCylindricalWrongMedian8<6>+140h (07FEB4795E80h)\r\n<\/pre>\n<\/blockquote>\n<p>\u306a\u3093\u3067\u3084\u306d\u3093\u3002\u30eb\u30fc\u30d7\u5916\u306b\u51fa\u3057\u3066\u3088\u3002<\/p>\n<p>\u3058\u3083\u3042\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u30ec\u30d9\u30eb\u3067\u660e\u793a\u7684\u306b -cbStride \u3092\u8a08\u7b97\u3057\u305f\u3089\u3044\u3044\u304b\u3068\u3044\u3046\u3068\u305d\u3046\u306f\u3044\u304b\u305a\u3001\u300c\u6700\u9069\u5316\u300d\u3092\u3057\u3066\u540c\u3058\u30d0\u30a4\u30ca\u30ea\u3092\u5410\u3044\u3066\u304d\u307e\u3059\u3002cbStride \u3092\u95a2\u6570\u306b\u6e21\u3059\u306e\u3067\u306f\u306a\u304f\u6700\u521d\u304b\u3089 -cbStride \u3092\u6e21\u3059\u3053\u3068\u306b\u3057\u3066\u30a2\u30c9\u30ec\u30b9\u306e\u8a08\u7b97\u304c\u52a0\u7b97\u306b\u306a\u308b\u3088\u3046\u306b\u3059\u308b\u3068\u3001\u5f53\u7136\u306a\u304c\u3089\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d0\u30a4\u30ca\u30ea\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<blockquote>\n<pre>\r\n000007FEB6ED5E70 4D 85 C0             test        r8,r8\r\n000007FEB6ED5E73 74 47                je          tuned_RestoreCylindricalWrongMedian8<6>+16Ch (07FEB6ED5EBCh)\r\n000007FEB6ED5E75 48 2B D1             sub         rdx,rcx\r\n000007FEB6ED5E78 0F 1F 84 00 00 00 00 00 nop         dword ptr [rax+rax]\r\n\r\n000007FEB6ED5E80 C5 F9 6E 2C 19       vmovd       xmm5,dword ptr <strong>[rcx+rbx]<\/strong>\r\n000007FEB6ED5E85 C5 D9 DE D5          vpmaxub     xmm2,xmm4,xmm5\r\n000007FEB6ED5E89 C5 D1 F8 C0          vpsubb      xmm0,xmm5,xmm0\r\n000007FEB6ED5E8D C5 F9 FC CC          vpaddb      xmm1,xmm0,xmm4\r\n000007FEB6ED5E91 C5 F9 6E 04 0A       vmovd       xmm0,dword ptr [rdx+rcx]\r\n000007FEB6ED5E96 C5 E9 DA D9          vpminub     xmm3,xmm2,xmm1\r\n000007FEB6ED5E9A C5 D9 DA D5          vpminub     xmm2,xmm4,xmm5\r\n000007FEB6ED5E9E C5 E1 DE E2          vpmaxub     xmm4,xmm3,xmm2\r\n000007FEB6ED5EA2 C5 D9 FC E0          vpaddb      xmm4,xmm4,xmm0\r\n000007FEB6ED5EA6 C5 F9 7E E0          vmovd       eax,xmm4\r\n000007FEB6ED5EAA 49 FF C1             inc         r9\r\n000007FEB6ED5EAD 88 01                mov         byte ptr [rcx],al\r\n000007FEB6ED5EAF 48 8D 49 01          lea         rcx,[rcx+1]\r\n000007FEB6ED5EB3 C5 FA 6F C5          vmovdqu     xmm0,xmm5\r\n000007FEB6ED5EB7 4D 3B C8             cmp         r9,r8\r\n000007FEB6ED5EBA 72 C4                jb          tuned_RestoreCylindricalWrongMedian8<6>+130h (07FEB6ED5E80h)\r\n<\/pre>\n<\/blockquote>\n<p>\u306a\u304a\u3001\u51e6\u7406\u5bfe\u8c61\u306e\u30e9\u30a4\u30f3\u306e\u524d\u306e\u30e9\u30a4\u30f3\u306b\u3082\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3044\u3046\u306e\u306f median decode \u306b\u9650\u3089\u306a\u3044\u306e\u3067\u3059\u304c\u3001median predict \u3084 gradient\/left \u306e\u5834\u5408\u3068\u306f\u9055\u3063\u3066\u3053\u306e\u90e8\u5206\u306f\u30d9\u30af\u30c8\u30eb\u5316\u3067\u304d\u305a\u300116\u500d\u306e\u5f71\u97ff\u304c\u51fa\u3066\u8a08\u6e2c\u8aa4\u5dee\u306b\u57cb\u3082\u308c\u305a\u89b3\u6e2c\u3055\u308c\u305f\u3068\u3044\u3046\u3053\u3068\u3060\u3068\u601d\u308f\u308c\u307e\u3059\u3002<\/p>\n<p>\u3057\u304b\u3057\u3053\u308c\u3001\u3088\u304f\u898b\u308b\u3068 VS2015 \u306e\u5834\u5408\u3067\u3082\u307e\u3060\u6700\u9069\u89e3\u3058\u3083\u306a\u3044\u3067\u3059\u306d\u3002\uff08r9 \u4f7f\u308f\u306a\u3044\u3067 rcx \u3067\u7d42\u4e86\u5224\u5b9a\u3059\u3079\u304d\uff09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u306e\u8a18\u4e8b\u3067 ULxx \u306e median decode \u304c\u9045\u304f\u306a\u308b\u3068\u66f8\u304d\u307e\u3057\u305f\u3002\u5b9f\u969b\u3069\u3046\u306a\u3063\u3066\u308b\u306e\u304b\u3068\u3044\u3046\u8a71\u3067\u3059\u3002<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-7163","post","type-post","status-publish","format-standard","hentry","category-technology"],"_links":{"self":[{"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7163"}],"version-history":[{"count":7,"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7163\/revisions"}],"predecessor-version":[{"id":7170,"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7163\/revisions\/7170"}],"wp:attachment":[{"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7163"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/umezawa.dyndns.info\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}