libyuv的一段代碼 , 謝謝
__declspec(naked) __declspec(align(16))
unsigned int SumSquareError_AVX2(const unsigned char* src_a, const unsigned char* src_b, int count) {
__asm {
mov eax, [esp + 4] // src_a
mov edx, [esp + 8] // src_b
mov ecx, [esp + 12] // count
vpxor ymm0, ymm0, ymm0 // sum
vpxor ymm5, ymm5, ymm5 // constant 0 for unpck
sub edx, eax
align 4
wloop:
vmovdqu ymm1, [eax]
vmovdqu ymm2, [eax + edx]
lea eax, [eax + 32]
sub ecx, 32
vpsubusb ymm3, ymm1, ymm2 // abs difference trick
vpsubusb ymm2, ymm2, ymm1
vpor ymm1, ymm2, ymm3
vpunpcklbw ymm2, ymm1, ymm5 // u16. mutates order.
vpunpckhbw ymm1, ymm1, ymm5
vpmaddwd ymm2, ymm2, ymm2 // square + hadd to u32.
vpmaddwd ymm1, ymm1, ymm1
vpaddd ymm0, ymm0, ymm1
vpaddd ymm0, ymm0, ymm2
jg wloop
vpshufd ymm1, ymm0, 0xee // 3, 2 + 1, 0 both lanes.
vpaddd ymm0, ymm0, ymm1
vpshufd ymm1, ymm0, 0x01 // 1 + 0 both lanes.
vpaddd ymm0, ymm0, ymm1
vpermq ymm1, ymm0, 0x02 // high + low lane.
vpaddd ymm0, ymm0, ymm1
vmovd eax, xmm0
vzeroupper
ret
}
}
uj5u.com熱心網友回復:
將編譯錯誤提示資訊復制粘貼到百度搜索框里搜一下。uj5u.com熱心網友回復:
yuvlib\source\row_win.cc(4210): error C2024: "alignas" 屬性僅適用于變數、資料成員和標記型別大概意思是 這東西只能不能給函式用, 但我不清楚 vs2015后,如何處理, 百度也沒有找到
uj5u.com熱心網友回復:
把__declspec(align(16))刪掉即可uj5u.com熱心網友回復:
這么秀 寫匯編uj5u.com熱心網友回復:
不會影響 功能嗎? 為什么vs2015不需要了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278200.html
標籤:C++ 語言
上一篇:來位義夫解釋下
