日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

深入探讨用位掩码代替分支(8):SSE指令集速度测试

發(fā)布時(shí)間:2023/12/9 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入探讨用位掩码代替分支(8):SSE指令集速度测试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  在上一篇測(cè)試了MMX指令集,這次我們來測(cè)試SSE指令集。說的更精確一點(diǎn),是測(cè)試SSE2指令集。
  本篇致力于解決以下問題——
1.SSE/SSE2指令集是什么?
2.如何閱讀Intel/AMD的手冊(cè)?
3.如何運(yùn)用SSE指令集?如何將MMX代碼升級(jí)為SSE代碼。
4.如何在VC++6.0這樣的高級(jí)語(yǔ)言編譯器中使用MMX指令集?

一、簡(jiǎn)介

  1999 年 Intel 推出了第 1 代的 SSE(Streaming SIMD Extensions)指令以回?fù)?AMD 的 3DNow! 指令,使用在 Pentium III 處理器上。隨后 AMD 在 2001 年 10 月 發(fā)布 的 Athlon XP 處理器上首次加入了 SSE 指令集。
  2001 年 Intel 推出第 2 個(gè)版本的 SSE 指令,使用在 Pentium 4 處理器上,AMD 在 2003 年推出的 Athlon 64 和 Opteron 處理器上加入對(duì) SSE2 指令的支持。
  SSE有很多后續(xù)版本,詳見——
http://www.cnblogs.com/zyl910/archive/2012/02/26/x86_simd_table.html
[x86]SIMD指令集發(fā)展歷程表(MMX、SSE、AVX等)

1.1 概述

  SSE技術(shù)對(duì)x86體系的編程環(huán)境的擴(kuò)展是——
1.8個(gè)128位的SSE寄存器(xmm0~xmm7)。?// 64位環(huán)境下增加到16個(gè)寄存器(xmm0~xmm15)。
2.SSE數(shù)據(jù)類型(緊縮單精度浮點(diǎn))。而在SSE2中,又增加了整數(shù)和雙精度浮點(diǎn)類型。
3.SSE指令系統(tǒng)。

1.2 SSE寄存器

  SSE寄存器集是由8個(gè)128位寄存器組成,見下圖。SSE指令使用寄存器名xmm0~xmm7直接訪問SSE寄存器。


  還有一個(gè)新的控制/狀態(tài)寄存器MXCSR,用于屏蔽/開放數(shù)值異常處理、設(shè)置舍入方式、設(shè)置清零方式和觀察狀態(tài)標(biāo)志。
  與之前的MMX或3DNow!不同,這些寄存器并不是原來己有的寄存器(MMX和3DNow!均是使用x87浮點(diǎn)數(shù)寄存器),所以不需要像MMX或3DNow!一樣,要使用x87指令之前,需要利用一個(gè)EMMS指令來清除寄存器的狀態(tài)。因此,不像MMX或3DNow!指令,SSE運(yùn)算指令,可以很自由地和x87浮點(diǎn)指令,或是MMX指令共用。

  2003年,AMD發(fā)表的x86-64 延伸架構(gòu),為SSE技術(shù)增加了8個(gè)寄存器,共16個(gè)寄存器(xmm0~xmm15)。

(Figure 4-1. SSE Registers。出自AMD手冊(cè) Vol.1 112)


1.3 SSE數(shù)據(jù)類型

  SSE技術(shù)定義了以下數(shù)據(jù)類型——
1.128位緊縮單精度浮點(diǎn)(128-Bit Packed Single-Precision Floating-Point):4個(gè)單精度浮點(diǎn)(single)緊縮成一個(gè)128位。

(Figure 10-4. 128-Bit Packed Single-Precision Floating-Point Data Type。出自Intel手冊(cè) Vol.1 10-8)

  而在SSE2中,又定義了以下5種數(shù)據(jù)類型——
1.128位緊縮雙精度浮點(diǎn)(128-Bit Packed Double-Precision Floating-Point):2個(gè)雙精度浮點(diǎn)(double)緊縮成一個(gè)128位。
2.128位緊縮字節(jié)(128-Bit Packed Byte Integers):16個(gè)字節(jié)(byte)緊縮成一個(gè)128位。
3.128位緊縮字(128-Bit Packed Word Integers):8個(gè)字(word)緊縮成一個(gè)128位。
4.128位緊縮雙字(128-Bit Packed Doubleword Integers):4個(gè)雙字(doubleword)緊縮成一個(gè)128位。
5.128位緊縮四字(128-Bit Packed Quadword Integers):2個(gè)四字(quadword)緊縮成一個(gè)128位。

(Figure 11-2. Data Types Introduced with the SSE2 Extensions。出自Intel手冊(cè) Vol.1 11-5)

  因?yàn)椤皩?4位像素轉(zhuǎn)為32位像素”這項(xiàng)工作需要字節(jié)(byte)和字(word),所以只有SSE2能滿足需求。


二、指令解讀

  對(duì)于PACKUSWB指令來說,操作數(shù)不僅可以是MMX寄存器(出自MMX指令集),也可以是SSE寄存器(出自SSE2指令集),甚至可以是AVX寄存器(出自AVX指令集。本文不討AVX指令集)。雖然實(shí)際的機(jī)器碼有所不同。
  對(duì)于這一點(diǎn),Intel手冊(cè)的編排方案是——以指令名為準(zhǔn),然后再在那一節(jié)內(nèi)分別介紹不同寄存器的效果。
  而AMD的手冊(cè)不一樣,它按寄存器長(zhǎng)度分成兩個(gè)文檔——
1.SSE、AVS指令在第4卷中(AMD64 Architecture Programmer's Manual Volume 4: 128-bit and 256 bit media instructions)。
2.MMX、3DNow!、浮點(diǎn)指令在第5卷中(AMD64 Architecture Programmer's Manual Volume 5: 64-Bit Media and x87 Floating-Point Instructions)。

2.1 Intel手冊(cè)原文

  略。與前一篇(http://www.cnblogs.com/zyl910/archive/2012/04/09/noifopex7.html)的“2.1 Intel手冊(cè)對(duì)PACKUSWB指令的說明”相同。

  PS:SSE編程指南見“Volume 1: Basic Architecture”的“Chapter 10 Programming with Streaming SIMD Extensions (SSE)”和“Chapter 11 Programming with Streaming SIMD Extensions 2 (SSE2)”。不屬于本文范疇,讀者可自行翻閱。

2.2 AMD手冊(cè)原文

  找到AMD手冊(cè)的第4卷(AMD64 Architecture Programmer's Manual Volume 4: 128-bit and 256 bit media instructions)。如果沒有的話,請(qǐng)?jiān)诠倬W(wǎng)下載——
http://developer.amd.com/documentation/guides/Pages/default.aspx#manuals

  打開第4卷(26568_APM_v4.pdf)。在左側(cè)的書簽樹中依次展開“2 Instruction Reference”,然后拖動(dòng)滾動(dòng)條找到“PACKUSWB”——

圖4

  AMD手冊(cè)對(duì)PACKUSWB指令的說明有兩頁(yè),上圖(圖4)是第一頁(yè)的內(nèi)容。第二頁(yè)內(nèi)容不屬于本文范疇,故不貼圖,讀者可自行翻閱。

  PS:SSE編程指南見“Volume 1: Application Programming”的“4 Streaming SIMD Extensions Media and Scientific Programming”。不屬于本文范疇,讀者可自行翻閱。

2.3 手冊(cè)解讀

  首先看Intel手冊(cè),圖1最上面的那個(gè)方框內(nèi),列出了PACKUSWB指令在不同環(huán)境下(MMX、SSE、AVX)的效果。

  本篇只關(guān)心SSE指令集。此時(shí)該指令的格式為“PACKUSWB xmm1, xmm2/m128”,描述信息為“Converts 8 signed word integers from xmm1 and 8 signed word integers from xmm2/m128 into 16 unsigned byte integers in xmm1 using unsigned saturation.”。

  而在AMD手冊(cè)(圖4)中,對(duì)該指令的描述是“Converts 16-bit signed integers in xmm1 and xmm2 or mem128 into 8-bit signed integers with saturation. Writes packed results to xmm1.”。

  在Intel手冊(cè)PACKUSWB指令的第二頁(yè)(圖2)中,有解釋該指令功能的偽代碼——

PACKUSWB (with 128-bit operands) DEST[7:0]← SaturateSignedWordToUnsignedByte (DEST[15:0]); DEST[15:8] ← SaturateSignedWordToUnsignedByte (DEST[31:16]); DEST[23:16] ← SaturateSignedWordToUnsignedByte (DEST[47:32]); DEST[31:24] ← SaturateSignedWordToUnsignedByte (DEST[63:48]); DEST[39:32] ← SaturateSignedWordToUnsignedByte (DEST[79:64]); DEST[47:40] ← SaturateSignedWordToUnsignedByte (DEST[95:80]); DEST[55:48] ← SaturateSignedWordToUnsignedByte (DEST[111:96]); DEST[63:56] ← SaturateSignedWordToUnsignedByte (DEST[127:112]); DEST[71:64] ← SaturateSignedWordToUnsignedByte (SRC[15:0]); DEST[79:72] ← SaturateSignedWordToUnsignedByte (SRC[31:16]); DEST[87:80] ← SaturateSignedWordToUnsignedByte (SRC[47:32]); DEST[95:88] ← SaturateSignedWordToUnsignedByte (SRC[63:48]); DEST[103:96] ← SaturateSignedWordToUnsignedByte (SRC[79:64]); DEST[111:104] ← SaturateSignedWordToUnsignedByte (SRC[95:80]); DEST[119:112] ← SaturateSignedWordToUnsignedByte (SRC[111:96]); DEST[127:120] ← SaturateSignedWordToUnsignedByte (SRC[127:112]);


  該偽代碼的大致含義為——將DEST中的 每16位的帶符號(hào)整數(shù) 飽和轉(zhuǎn)換為 8位的無(wú)符號(hào)整數(shù),放到返回值(DEST)的低64位;將SRC中的每16位的整數(shù) 飽和轉(zhuǎn)換為 8位的整數(shù),放到返回值的高64位。
注:x86指令的2操作數(shù)指令一般是——第1個(gè)參數(shù)是DEST,第2個(gè)參數(shù)是SRC。即參數(shù)格式為“PACKUSWB DEST, SRC”。


2.4 畫圖解釋

  用文字或偽代碼來解釋MMX指令都不太直觀,用圖片就直觀多了。

  這一次AMD的手冊(cè)沒有配圖。

  因此,我畫了一張圖片,更能清晰表示SSE2模式下PACKUSWB指令的功能——

  該圖的風(fēng)格與第7篇(http://www.cnblogs.com/zyl910/archive/2012/04/09/noifopex7.html)的圖片類似,左側(cè)是內(nèi)存中的源數(shù)據(jù),右側(cè)是運(yùn)算結(jié)果,中間是SSE寄存器,箭頭代表運(yùn)算過程。該圖 繪有三種操作——
1.加載(紅色箭頭)。將內(nèi)存中的源數(shù)據(jù)(源緩沖區(qū))加載到SSE寄存器。因?yàn)镾SE寄存器是128位(16字節(jié))的,所以該環(huán)節(jié)共加載了32字節(jié)數(shù)據(jù),分別加載到2個(gè)SSE寄存器中(PACKUSWB需要兩個(gè)操作數(shù))。
2.運(yùn)算(綠色將頭)。這里就是PACKUSWB指令的功能,將 每個(gè)16位的帶符號(hào)整數(shù) 飽和轉(zhuǎn)換為 8位的無(wú)符號(hào)整數(shù)。
3.存儲(chǔ)(藍(lán)色箭頭)。將SSE寄存器中的運(yùn)算結(jié)果 存儲(chǔ)到內(nèi)存(目標(biāo)緩沖區(qū))。


三、如何在VC中使用MMX指令集?

  對(duì)于Visual C++ 6.0來說,依次打上SP5、PP5補(bǔ)丁后,就能支持MMX、SSE、SSE2這三套指令集。它們的下載地址是——
SP5(Visual Studio 6.0 Service Pack 5):http://www.microsoft.com/download/en/details.aspx?id=2618
PP5(Visual C++ 6.0 Processor Pack):http://msdn.microsoft.com/en-us/library/aa718349.aspx

  對(duì)于更高版本Visual Studio,它們內(nèi)置了對(duì)MMX指令集的支持,不需要安裝補(bǔ)丁。詳見——
http://www.cnblogs.com/zyl910/archive/2012/02/28/vs_intrin_table.html
Intrinsics頭文件與SIMD指令集、Visual Studio版本對(duì)應(yīng)表

3.1 使用內(nèi)嵌匯編

  在VC中,最直接的辦法就是使用內(nèi)嵌匯編,即利用“_asm”關(guān)鍵字直接寫匯編語(yǔ)句。
  例如下面那段代碼,先嘗試執(zhí)行cpuid指令檢查CPU特性,再嘗試執(zhí)行xorps指令測(cè)試系統(tǒng)中是否能運(yùn)行SSE指令——

// 檢測(cè)SSE系列指令集的支持級(jí)別 int simd_sse_level() {const DWORD BIT_D_SSE = 0x02000000; // bit 25const DWORD BIT_D_SSE2 = 0x04000000; // bit 26const DWORD BIT_C_SSE3 = 0x00000001; // bit 0const DWORD BIT_C_SSSE3 = 0x00000100; // bit 9const DWORD BIT_C_SSE41 = 0x00080000; // bit 19const DWORD BIT_C_SSE42 = 0x00100000; // bit 20BYTE rt = SIMD_SSE_NONE; // result DWORD v_edx;DWORD v_ecx;// check processor support __try {_asm {mov eax, 1cpuidmov v_edx, edxmov v_ecx, ecx}}__except (EXCEPTION_EXECUTE_HANDLER){return SIMD_SSE_NONE;}if ( v_edx & BIT_D_SSE ){rt = SIMD_SSE_1;if ( v_edx & BIT_D_SSE2 ){rt = SIMD_SSE_2;if ( v_ecx & BIT_C_SSE3 ){rt = SIMD_SSE_3;if ( v_ecx & BIT_C_SSSE3 ){rt = SIMD_SSE_3S;if ( v_ecx & BIT_C_SSE41 ){rt = SIMD_SSE_41;if ( v_ecx & BIT_C_SSE42 ){rt = SIMD_SSE_42;}}}}}}// check OS support __try {_asm{xorps xmm0, xmm0 // executing any SSE instruction }}__except (EXCEPTION_EXECUTE_HANDLER){return SIMD_SSE_NONE;}return rt; }

http://www.cnblogs.com/zyl910/archive/2012/03/01/checksimd.html
[VC6] 檢查MMX和SSE系列指令集的支持級(jí)別(最高SSE4.2)


3.2 使用Intrinsics函數(shù)

  SSE指令也有對(duì)應(yīng)的Intrinsics函數(shù)。
  在MSDN中可以找到SSE/SSE2的Intrinsics函數(shù)幫助:http://msdn.microsoft.com/en-us/library/y0dh78ez(v=vs.110).aspx。具體的目錄層次是——
MSDN Library
Development Tools and Languages
Visual Studio 11 Beta
Visual C++? Reference
C/C++ Languages
Compiler Intrinsics
MMX, SSE, and SSE2 Intrinsics

  SSE/SSE2的Intrinsics函數(shù)的應(yīng)用方法,推薦Alex Farber的《Introduction to SSE Programming》——
http://www.codeproject.com/Articles/4522/Introduction-to-SSE-Programming
Introduction to SSE Programming

  中文翻譯版見——
http://dev.gameres.com/Program/Other/sseintro.htm
基于SSE指令集的程序設(shè)計(jì)簡(jiǎn)介


四、實(shí)際應(yīng)用

  現(xiàn)在我們想使用PACKUSWB指令,怎么知道該指令對(duì)應(yīng)的Intrinsics函數(shù)呢?
  最簡(jiǎn)單的辦法就是查閱Intel手冊(cè)。在Intel手冊(cè)PACKUSWB指令的第三頁(yè)(圖3),列出Intrinsic函數(shù)的名稱——

Intel C/C++ Compiler Intrinsic Equivalent PACKUSWB: __m64 _mm_packs_pu16(__m64 m1, __m64 m2) PACKUSWB: __m128i _mm_packus_epi16(__m128i m1, __m128i m2)


  因現(xiàn)在是探討SSE指令集,所以應(yīng)該選用_mm_packus_epi16函數(shù)。

  現(xiàn)在萬(wàn)事具備,可以完成SSE版的“將64位像素轉(zhuǎn)為32位像素”函數(shù)了——

// 飽和處理SSE版 void f5_sse(BYTE* pbufD, const signed short* pbufS, int cnt) {//const signed short* pS = pbufS;//BYTE* pD = pbufD;const __m128i* pS = (const __m128i*)pbufS;__m128i* pD = (__m128i*)pbufD;int i;for(i=0; i<cnt; i+=4){// 同時(shí)對(duì)四個(gè)像素做飽和處理。即 將四個(gè)64位像素(4通道,每分量為帶符號(hào)16位) 轉(zhuǎn)為 四個(gè)32位像素(每分量為無(wú)符號(hào)8位)。pD[0] = _mm_packus_epi16(pS[0], pS[1]); // 飽和方式數(shù)據(jù)打包(帶符號(hào)16位->無(wú)符號(hào)8位)。等價(jià)于 for(i=0;i<8;++i){ pD[0].uB[i]=SU(pS[0].iW[i]); r.uB[8+i]=SU(pS[1].iW[i]); }// nextpS += 2;pD += 1;} }

?


  因SSE2版PACKUSWB指令(_mm_packus_epi16)的功能,現(xiàn)在的內(nèi)循環(huán)變得十分簡(jiǎn)單,一次就能處理4個(gè)像素。所以每次循環(huán)時(shí)“i+=4”。

  注意這里將pbufS、pbufD這兩個(gè)指針均設(shè)定為__m128i指針類型。所以“pD += 1”實(shí)際上將指針地址前移了16個(gè)字節(jié),而“pS += 2”將指針地址前移了32個(gè)字節(jié)。


五、全部代碼

  全部代碼——

// MMX, SSE, SSE2 #include <emmintrin.h>// 用位掩碼做飽和處理.用求負(fù)生成掩碼 #define LIMITSU_FAST(n, bits) ( (n) & -((n) >= 0) | -((n) >= (1<<(bits))) ) #define LIMITSU_SAFE(n, bits) ( (LIMITSU_FAST(n, bits)) & ((1<<(bits)) - 1) ) #define LIMITSU_BYTE(n) ((BYTE)(LIMITSU_FAST(n, 8)))// 用位掩碼做飽和處理.用帶符號(hào)右移生成掩碼 #define LIMITSW_FAST(n, bits) ( ( (n) | ((signed short)((1<<(bits)) - 1 - (n)) >> 15) ) & ~((signed short)(n) >> 15) ) #define LIMITSW_SAFE(n, bits) ( (LIMITSW_FAST(n, bits)) & ((1<<(bits)) - 1) ) #define LIMITSW_BYTE(n) ((BYTE)(LIMITSW_FAST(n, 8)))// 數(shù)據(jù)規(guī)模 #define DATASIZE 16384 // 128KB / (sizeof(signed short) * 4)// 緩沖區(qū)。SSE需要按128位對(duì)齊 __declspec(align(16)) signed short bufS[DATASIZE*4]; // 源緩沖區(qū)。64位的顏色(4通道,每通道16位) __declspec(align(16)) BYTE bufD[DATASIZE*4]; // 目標(biāo)緩沖區(qū)。32位的顏色(4通道,每通道8位)// 測(cè)試時(shí)的函數(shù)類型 typedef void (*TESTPROC)(BYTE* pbufD, const signed short* pbufS, int cnt);// http://www.cnblogs.com/zyl910/archive/2012/03/01/checksimd.html // SSE系列指令集的支持級(jí)別. simd_sse_level 函數(shù)的返回值。 #define SIMD_SSE_NONE 0 // 不支持 #define SIMD_SSE_1 1 // SSE #define SIMD_SSE_2 2 // SSE2 #define SIMD_SSE_3 3 // SSE3 #define SIMD_SSE_3S 4 // SSSE3 #define SIMD_SSE_41 5 // SSE4.1 #define SIMD_SSE_42 6 // SSE4.2const char* simd_sse_names[] = {"None","SSE","SSE2","SSE3","SSSE3","SSE4.1","SSE4.2", };// 是否支持MMX指令集 BOOL simd_mmx() {const DWORD BIT_DX_MMX = 0x00800000; // bit 23 DWORD v_edx;// check processor support __try {_asm {mov eax, 1cpuidmov v_edx, edx}}__except (EXCEPTION_EXECUTE_HANDLER){return FALSE;}if ( v_edx & BIT_DX_MMX ){// check OS support __try {_asm{pxor mm0, mm0 // executing any MMX instruction emms}return TRUE;}__except (EXCEPTION_EXECUTE_HANDLER){}}return FALSE; }// 檢測(cè)SSE系列指令集的支持級(jí)別 int simd_sse_level() {const DWORD BIT_D_SSE = 0x02000000; // bit 25const DWORD BIT_D_SSE2 = 0x04000000; // bit 26const DWORD BIT_C_SSE3 = 0x00000001; // bit 0const DWORD BIT_C_SSSE3 = 0x00000100; // bit 9const DWORD BIT_C_SSE41 = 0x00080000; // bit 19const DWORD BIT_C_SSE42 = 0x00100000; // bit 20BYTE rt = SIMD_SSE_NONE; // result DWORD v_edx;DWORD v_ecx;// check processor support __try {_asm {mov eax, 1cpuidmov v_edx, edxmov v_ecx, ecx}}__except (EXCEPTION_EXECUTE_HANDLER){return SIMD_SSE_NONE;}if ( v_edx & BIT_D_SSE ){rt = SIMD_SSE_1;if ( v_edx & BIT_D_SSE2 ){rt = SIMD_SSE_2;if ( v_ecx & BIT_C_SSE3 ){rt = SIMD_SSE_3;if ( v_ecx & BIT_C_SSSE3 ){rt = SIMD_SSE_3S;if ( v_ecx & BIT_C_SSE41 ){rt = SIMD_SSE_41;if ( v_ecx & BIT_C_SSE42 ){rt = SIMD_SSE_42;}}}}}}// check OS support __try {_asm{xorps xmm0, xmm0 // executing any SSE instruction }}__except (EXCEPTION_EXECUTE_HANDLER){return SIMD_SSE_NONE;}return rt; }// 用if分支做飽和處理 void f0_if(BYTE* pbufD, const signed short* pbufS, int cnt) {const signed short* pS = pbufS;BYTE* pD = pbufD;int i;for(i=0; i<cnt; ++i){// 分別對(duì)4個(gè)通道做飽和處理pD[0] = (pS[0]<0) ? 0 : ( (pS[0]>255) ? 255 : (BYTE)pS[0] );pD[1] = (pS[1]<0) ? 0 : ( (pS[1]>255) ? 255 : (BYTE)pS[1] );pD[2] = (pS[2]<0) ? 0 : ( (pS[2]>255) ? 255 : (BYTE)pS[2] );pD[3] = (pS[3]<0) ? 0 : ( (pS[3]>255) ? 255 : (BYTE)pS[3] );// nextpS += 4;pD += 4;} }// 用min、max飽和處理 void f1_min(BYTE* pbufD, const signed short* pbufS, int cnt) {const signed short* pS = pbufS;BYTE* pD = pbufD;int i;for(i=0; i<cnt; ++i){// 分別對(duì)4個(gè)通道做飽和處理pD[0] = min(max(0, pS[0]), 255);pD[1] = min(max(0, pS[1]), 255);pD[2] = min(max(0, pS[2]), 255);pD[3] = min(max(0, pS[3]), 255);// nextpS += 4;pD += 4;} }// 用位掩碼做飽和處理.用求負(fù)生成掩碼 void f2_neg(BYTE* pbufD, const signed short* pbufS, int cnt) {const signed short* pS = pbufS;BYTE* pD = pbufD;int i;for(i=0; i<cnt; ++i){// 分別對(duì)4個(gè)通道做飽和處理pD[0] = LIMITSU_BYTE(pS[0]);pD[1] = LIMITSU_BYTE(pS[1]);pD[2] = LIMITSU_BYTE(pS[2]);pD[3] = LIMITSU_BYTE(pS[3]);// nextpS += 4;pD += 4;} }// 用位掩碼做飽和處理.用帶符號(hào)右移生成掩碼 void f3_sar(BYTE* pbufD, const signed short* pbufS, int cnt) {const signed short* pS = pbufS;BYTE* pD = pbufD;int i;for(i=0; i<cnt; ++i){// 分別對(duì)4個(gè)通道做飽和處理pD[0] = LIMITSW_BYTE(pS[0]);pD[1] = LIMITSW_BYTE(pS[1]);pD[2] = LIMITSW_BYTE(pS[2]);pD[3] = LIMITSW_BYTE(pS[3]);// nextpS += 4;pD += 4;} }// 飽和處理MMX版 void f4_mmx(BYTE* pbufD, const signed short* pbufS, int cnt) {//const signed short* pS = pbufS;//BYTE* pD = pbufD;const __m64* pS = (const __m64*)pbufS;__m64* pD = (__m64*)pbufD;int i;for(i=0; i<cnt; i+=2){// 同時(shí)對(duì)兩個(gè)像素做飽和處理。即 將兩個(gè)64位像素(4通道,每分量為帶符號(hào)16位) 轉(zhuǎn)為 兩個(gè)32位像素(每分量為無(wú)符號(hào)8位)。pD[0] = _mm_packs_pu16(pS[0], pS[1]); // 飽和方式數(shù)據(jù)打包(帶符號(hào)16位->無(wú)符號(hào)8位)。等價(jià)于 for(i=0;i<4;++i){ pD[0].uB[i]=SU(pS[0].iW[i]); pD[0].uB[4+i]=SU(pS[1].iW[i]); }// nextpS += 2;pD += 1;}// MMX狀態(tài)置空 _mm_empty(); }// 飽和處理SSE版 void f5_sse(BYTE* pbufD, const signed short* pbufS, int cnt) {//const signed short* pS = pbufS;//BYTE* pD = pbufD;const __m128i* pS = (const __m128i*)pbufS;__m128i* pD = (__m128i*)pbufD;int i;for(i=0; i<cnt; i+=4){// 同時(shí)對(duì)四個(gè)像素做飽和處理。即 將四個(gè)64位像素(4通道,每分量為帶符號(hào)16位) 轉(zhuǎn)為 四個(gè)32位像素(每分量為無(wú)符號(hào)8位)。pD[0] = _mm_packus_epi16(pS[0], pS[1]); // 飽和方式數(shù)據(jù)打包(帶符號(hào)16位->無(wú)符號(hào)8位)。等價(jià)于 for(i=0;i<8;++i){ pD[0].uB[i]=SU(pS[0].iW[i]); r.uB[8+i]=SU(pS[1].iW[i]); }// nextpS += 2;pD += 1;} }// 進(jìn)行測(cè)試 void runTest(char* szname, TESTPROC proc) {const int nLoop = 16; // 使用MMX/SSE指令時(shí)速度太快了,只好再多循環(huán)幾次int i,j,k;DWORD tm0, tm1; // 存儲(chǔ)時(shí)間for(i=1; i<=3; ++i) // 多次測(cè)試 {//tm0 = GetTickCount();tm0 = timeGetTime();// mainfor(k=1; k<=nLoop; ++k){for(j=1; j<=4000; ++j) // 重復(fù)運(yùn)算幾次延長(zhǎng)時(shí)間,避免計(jì)時(shí)精度問題 {proc(bufD, bufS, DATASIZE);}}// show//tm1 = GetTickCount() - tm0;tm1 = timeGetTime() - tm0;printf("%s[%d]:\t%.1f\n", szname, i, (double)tm1/nLoop);// check//if (1==i)//{// // 檢查結(jié)果// for(j=0; j<=16; ++j)// printf("[%d]:\t%d\t%u\n", j, bufS[j], bufD[j]);//} } }int main(int argc, char* argv[]) {int i; // 循環(huán)變量//printf("Hello World!\n");printf("== noif:VC6 SIMD ==");// 初始化 srand( (unsigned)time( NULL ) );for(i=0; i<DATASIZE*4; ++i){bufS[i] = (signed short)((rand()&0x1FF) - 128); // 使數(shù)值在 [-128, 383] 區(qū)間 }// 準(zhǔn)備開始。可以將將進(jìn)程優(yōu)先級(jí)設(shè)為實(shí)時(shí)if (argc<=1){printf("<Press any key to continue>");getch();printf("\n");}// 進(jìn)行測(cè)試//runTest("f0_if", f0_if);//runTest("f1_min", f1_min);//runTest("f2_neg", f2_neg);//runTest("f3_sar", f3_sar);if (simd_mmx()) runTest("f4_mmx", f4_mmx);if (simd_sse_level()>=SIMD_SSE_2) runTest("f5_sse", f5_sse);// 結(jié)束前提示if (argc<=1){printf("<Press any key to exit>");getch();printf("\n");}return 0; }


  注意——
1.SSE需要按128位對(duì)齊。于是bufS、bufD的聲明中增加了“__declspec(align(16))”。
2.在調(diào)用測(cè)試函數(shù)時(shí),需要先檢查是否支持相應(yīng)的指令集——

if (simd_mmx()) runTest("f4_mmx", f4_mmx);if (simd_sse_level()>=SIMD_SSE_2) runTest("f5_sse", f5_sse);



六、測(cè)試結(jié)果

  在32位winXP上的測(cè)試結(jié)果——

== noif:VC6 SIMD ==<Press any key to continue> f4_mmx[1]: 37.5 f4_mmx[2]: 37.3 f4_mmx[3]: 38.9 f5_sse[1]: 25.6 f5_sse[2]: 26.1 f5_sse[3]: 25.7

?

  在64位win7上的測(cè)試結(jié)果——

== noif:VC6 SIMD ==<Press any key to continue> f4_mmx[1]: 37.1 f4_mmx[2]: 37.1 f4_mmx[3]: 36.1 f5_sse[1]: 25.4 f5_sse[2]: 24.4 f5_sse[3]: 25.3

?

  硬件環(huán)境——
CPU:Intel Core i3-2310M, 2100 MHz
內(nèi)存:DDR3-1066

?

參考文獻(xiàn)——
《Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z》. December 2011. http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.html
《AMD64 Architecture Programmer's Manual Volume 4: 128-bit and 256 bit media instructions》. December 2011. http://support.amd.com/us/Processor_TechDocs/26568_APM_v4.pdf
《Pentium Ⅱ/Ⅲ體系結(jié)構(gòu)及擴(kuò)展技術(shù)》。劉清森、馬鳴錦、吳灝等著。國(guó)防工業(yè)出版社,2000年7月。
《Introduction to SSE Programming》。Alex Farber 著。http://www.codeproject.com/Articles/4522/Introduction-to-SSE-Programming
《基于SSE指令集的程序設(shè)計(jì)簡(jiǎn)介》(Introduction to SSE Programming)。?譯。http://dev.gameres.com/Program/Other/sseintro.htm
《Pentium III處理器的SSE入門》。Bipin Patwardhan著,foenix譯。http://www.vckbase.com/document/viewdoc/?id=322
《在C/C++代碼中使用SSE等指令集的指令(1)介紹》。gengshenghong著。http://blog.csdn.net/gengshenghong/article/details/7007100
《x86 指令集發(fā)展歷程》。mik著。http://www.mouseos.com/x64/SIMD/x86_ISA.html

?

源碼下載——
http://files.cnblogs.com/zyl910/noifVC6s.rar
(建議閱讀編譯器生成的匯編代碼,位于Release\noifVC6s.asm)

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的深入探讨用位掩码代替分支(8):SSE指令集速度测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

久久91久久久久麻豆精品 | 成人午夜剧场在线观看 | 97人人精品| 成人18视频 | 日韩午夜视频在线观看 | 免费在线观看成人小视频 | 国产精品99久久久久久有的能看 | 日日成人网 | 天天曰天天曰 | 综合色综合 | 色播五月激情五月 | 韩国中文三级 | 欧洲精品久久久久毛片完整版 | 在线综合 亚洲 欧美在线视频 | 99精品国自产在线 | 在线免费av网 | 亚洲黄色免费在线 | 最新在线你懂的 | 日韩免费专区 | 综合网伊人 | 亚洲综合射 | 国产成人免费av电影 | 日本久久综合网 | 午夜精品一区二区三区免费 | 天天操天操 | 天天干天天操天天射 | 国产国语在线 | 久久久精品小视频 | 免费在线成人av | 一区二区三区四区精品 | 特级西西www44高清大胆图片 | 三级黄色理论片 | 天天干天天射天天爽 | 日本精品视频一区二区 | av成人在线看 | 国产麻豆剧传媒免费观看 | 特级黄色视频毛片 | 国产精品成人久久久久 | 亚洲国产成人在线播放 | 激情深爱 | 在线观看色网站 | 91av电影网| 天天干,夜夜爽 | 97精品国产一二三产区 | 91精品电影| 伊人手机在线 | 九九热在线视频免费观看 | 亚洲精品中文字幕视频 | 中文字幕乱码视频 | 中文字幕在线观看一区二区三区 | 日本韩国在线不卡 | 91视频黄色| 国内三级在线观看 | 欧美日韩一区二区三区在线观看视频 | 天天综合久久 | a视频在线| 日本黄色大片免费 | 色视频在线观看免费 | a级国产乱理伦片在线观看 亚洲3级 | 国偷自产中文字幕亚洲手机在线 | 在线观看免费观看在线91 | 久久精品79国产精品 | 色永久免费视频 | 欧美a性 | 久久国产精品99久久久久 | 久草在线综合网 | 日韩精品一区二区三区免费观看 | 亚洲成a人片在线www | 亚洲综合色视频在线观看 | 亚洲黄色激情小说 | 日韩aⅴ视频 | 四虎国产精品免费观看视频优播 | 99热在线免费观看 | 国产午夜三级 | 国产亚洲精品成人av久久ww | 亚洲精品一区二区三区在线观看 | av在线影片| 91探花系列在线播放 | 色资源网免费观看视频 | 麻花豆传媒mv在线观看网站 | 黄p在线播放| 九月婷婷人人澡人人添人人爽 | 操操操日日日干干干 | 婷婷爱五月天 | 国产精品视频你懂的 | 国产69熟| 国产午夜激情视频 | 91精品在线播放 | 在线免费观看的av | 久久超碰99 | 久久在线视频在线 | 国内精品久久久久国产 | 91视频3p | 精品国产免费看 | 在线观看日韩免费视频 | 中文字幕久久亚洲 | 国产91小视频 | 日本韩国精品一区二区在线观看 | 久久久久久毛片精品免费不卡 | aaa亚洲精品一二三区 | 97夜夜澡人人双人人人喊 | 热久久视久久精品18亚洲精品 | 成人av.com| 欧美一区二区视频97 | 性色av香蕉一区二区 | 国产免费又爽又刺激在线观看 | 国产精品成人免费一区久久羞羞 | 国产成人久久77777精品 | 狠狠狠色丁香婷婷综合久久五月 | aaawww| 亚洲天堂社区 | 成人手机在线视频 | 国产一区在线看 | 久草在线免费看视频 | 久草影视在线 | 婷婷网址| 久久久九色精品国产一区二区三区 | 香蕉视频在线观看免费 | 中文字幕中文字幕在线中文字幕三区 | 久久黄色影院 | 欧美日韩国产在线精品 | 天天干天天操天天干 | 国产精品一区二区三区电影 | 91在线视频免费观看 | 久久精品99北条麻妃 | 日韩欧美在线视频一区二区 | 九九免费精品视频在线观看 | 中文字幕国产在线 | 在线观看韩日电影免费 | 国产日韩精品在线 | 亚洲国产网站 | 欧美亚洲国产一卡 | 久草视频免费播放 | 少妇精品久久久一区二区免费 | 国产视频在 | 久久久久国产精品午夜一区 | 国产欧美精品一区二区三区 | 国产va在线 | 四虎成人在线 | 91九色pron| 美女激情影院 | 亚洲特级毛片 | 999久久精品 | 亚洲国产av精品毛片鲁大师 | 国产原创在线观看 | 欧美性脚交 | 视频在线观看亚洲 | 国产99久久精品一区二区永久免费 | 国产婷婷精品av在线 | 国产淫片免费看 | 久久久久国产精品午夜一区 | 99热日本| 91理论电影 | 亚洲男男gⅴgay双龙 | 日韩av免费大片 | www.午夜| 亚洲欧美成人在线 | 亚洲三级网站 | 又粗又长又大又爽又黄少妇毛片 | 成人一区二区三区在线观看 | 日韩欧美综合精品 | 丁香在线观看完整电影视频 | 成人欧美一区二区三区在线观看 | 蜜臀av一区二区 | 国产特级毛片aaaaaa毛片 | 国产精品成人一区二区 | 中文字幕国语官网在线视频 | 欧美日韩久久久 | 激情伊人五月天 | 深爱激情婷婷网 | 狠狠干夜夜爱 | 中文字幕大全 | 成年人在线免费视频观看 | 亚洲三级视频 | 九七视频在线观看 | 免费色黄| 97精品一区 | 欧美精品在线观看免费 | 一本一道久久a久久精品 | 天堂v中文 | 欧洲精品二区 | 99精品视频中文字幕 | 91私密保健| 日韩在线观看一区二区三区 | 国产69精品久久久久久 | 青青草华人在线视频 | 人人网人人爽 | 樱空桃av| 国产成人61精品免费看片 | 日韩精品视频免费专区在线播放 | 亚洲视频中文 | 成人三级视频 | 欧洲亚洲女同hd | 久一久久| 欧美精品久久久久久久久久丰满 | 亚洲精品网站在线 | 国产看片免费 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 久久精品黄 | 国产中文字幕视频在线观看 | 成人av电影在线 | 免费av免费观看 | 色中色综合 | 天天爱综合 | 五月天综合色激情 | 97精品国产97久久久久久春色 | 九九天堂 | 久久久精品欧美 | 在线观看涩涩 | 日韩欧美69 | 日韩欧美视频在线观看免费 | 中国一 片免费观看 | 亚洲国产小视频在线观看 | 国产一区二区日本 | 亚洲成色777777在线观看影院 | 91在线观看欧美日韩 | 日韩影片在线观看 | 亚洲精品久久久蜜桃 | 亚洲精品美女久久久久 | 西西人体4444www高清视频 | 成人中文字幕在线观看 | 美女网站黄免费 | 正在播放五月婷婷狠狠干 | 色国产精品 | 激情久久五月 | 日本夜夜草视频网站 | 69av在线视频| 国内精品久久久久久久久久清纯 | 色婷婷播放 | 日韩av中文在线 | 99久久精品国产一区二区成人 | 久久综合电影 | 久久精品成人 | 91香蕉视频黄 | 日韩精品一区二区在线观看视频 | 99爱在线| 国产亚洲在线 | 亚洲 欧美 国产 va在线影院 | 视频一区二区在线 | 欧美日韩另类在线 | a国产精品 | 国产精品乱码一区二区视频 | 免费观看国产成人 | 欧美日韩免费观看一区=区三区 | 四虎天堂 | 91在线91 | 久久精品视频在线播放 | 中文字幕中文中文字幕 | 毛片在线播放网址 | 久久久久久高潮国产精品视 | 狠狠操操网| 久久免费公开视频 | 国产一区二区在线播放视频 | 午夜精品一区二区三区在线视频 | 成人av久久| 欧美日韩一区二区在线观看 | 国产精品久久久久久久久软件 | 久久永久免费视频 | av网站在线观看播放 | 欧美一级片 | 人人爽人人射 | 国产亚洲精品美女久久 | 日韩高清成人 | 国产91精品在线观看 | 美女网站免费福利视频 | 日日碰狠狠添天天爽超碰97久久 | 黄色成人在线 | 又爽又黄在线观看 | 少妇精品久久久一区二区免费 | 色婷婷成人网 | 日本美女xx | 日韩精品你懂的 | 欧美日韩高清在线一区 | 中文字幕美女免费在线 | 黄色免费观看 | 久久99久国产精品黄毛片入口 | 免费看一级特黄a大片 | 中文字幕乱码电影 | 免费观看国产精品视频 | 中文字幕成人在线 | 麻豆一二三精选视频 | 五月婷婷久久丁香 | 夜夜夜夜爽 | 国产成人精品一区二区三区在线 | 四虎免费在线观看视频 | 五月激情av| 在线观看免费av网站 | 午夜免费久久看 | 香蕉视频在线免费 | 久久高清 | av在线播放亚洲 | 中文字幕在线观看的网站 | 在线视频 91 | 4hu视频 | 亚洲理论在线观看 | 免费av的网站 | 97精品国产97久久久久久春色 | 在线黄色免费av | 国产精品久久久久久久久久免费 | 精品国产免费看 | 精品视频国产一区 | 一区二区视频电影在线观看 | 中文字幕人成人 | 一区中文字幕电影 | 久草干| 久久全国免费视频 | 黄色的网站免费看 | 麻花传媒mv免费观看 | 国产精品一区二区久久久 | 亚洲经典精品 | 天天综合久久综合 | 美女又爽又黄 | 成 人 黄 色视频免费播放 | 日本女人逼 | 在线99视频| 婷婷丁香在线视频 | 2000xxx影视 | 国内精品在线一区 | 亚洲欧美日韩在线一区二区 | 超碰免费成人 | 狠狠色丁香婷婷 | 91福利视频免费观看 | 久久伦理网 | 久久国产二区 | 国产日韩高清在线 | 久久精品亚洲国产 | 国产精品亚洲a | 超碰激情在线 | 麻豆视频一区二区 | 天天爱天天操天天爽 | 97精品视频在线 | 国产精品久久久久久久妇 | 久久伊人操 | 国产剧情av在线播放 | 国产精品久久久久久久午夜 | 黄色字幕网 | av先锋影音少妇 | 国产成人精品综合久久久 | 三级黄色欧美 | 国产精品一区二区在线观看免费 | 久久99国产视频 | 久久成人亚洲欧美电影 | 99久久精品午夜一区二区小说 | 久久精品一区八戒影视 | 91麻豆精品国产91久久久无需广告 | 色99在线 | 超碰伊人网 | 色综合天天射 | 日韩一区二区免费播放 | 五月婷婷综| 在线观看视频国产 | 国产精品电影在线 | 蜜臀av麻豆 | 亚洲男模gay裸体gay | www.av免费 | 精品久久久久久久久中文字幕 | 超碰97.com| 久久久久久久免费 | 97成人在线 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 伊人六月| av免费电影网站 | 91最新在线视频 | 狠狠色综合网站久久久久久久 | 一区久久久 | 一区二区伦理电影 | 欧美精品一区二区三区一线天视频 | 在线观看中文字幕第一页 | 日韩av二区 | 一区国产精品 | 国产一区二区在线免费播放 | 91丨九色丨国产女 | 天天干夜夜夜 | 久久国产精品电影 | 成年人免费在线观看网站 | 欧美久久综合 | 欧美精品做受xxx性少妇 | 青青草国产在线 | 久久国产免费 | 九九热国产| 日日干夜夜干 | 91社区国产高清 | 国产美女网站在线观看 | 色美女在线 | 综合国产视频 | 狠狠干狠狠色 | 免费观看一区 | 精品你懂的 | 成人免费在线看片 | 国产亚洲精品美女久久 | 天堂网一区二区 | 日本三级全黄少妇三2023 | 亚洲男男gⅴgay双龙 | 国产97在线观看 | 国产在线不卡精品 | 免费麻豆网站 | 亚洲精选在线 | 国产精品久久久久久久7电影 | 免费国产在线视频 | 伊人射 | 色婷婷久久久综合中文字幕 | 插婷婷| 国产精品久久久久久久久婷婷 | 五月婷婷一区二区三区 | 18国产精品白浆在线观看免费 | 18性欧美xxxⅹ性满足 | 成人羞羞视频在线观看免费 | 国产精品欧美 | www.一区二区三区 | 波多野结衣在线播放一区 | 国产亚洲免费的视频看 | 91九色精品女同系列 | 久草免费在线视频观看 | 国产日本高清 | 久久看片 | 国产精品国产三级国产 | 成人午夜毛片 | 成人黄色在线观看视频 | 欧美一级大片在线观看 | 热久久国产精品 | 天天草天天爽 | 91精品久久久久久久99蜜桃 | 久久综合九色综合97婷婷女人 | 成年人在线观看视频免费 | 99久久精品国产观看 | 国产福利一区在线观看 | www黄色软件| 成人禁用看黄a在线 | 久草在线视频中文 | 天天色天天上天天操 | 国产精品原创av片国产免费 | 国产精品成人自拍 | 人人草人 | 在线黄av | av播放在线 | 夜色成人av | 在线观看 国产 | 免费看片网页 | 免费h精品视频在线播放 | 久草视频中文 | 99久久综合国产精品二区 | 91麻豆福利| 特级毛片在线免费观看 | 午夜视频免费 | 成人一级电影在线观看 | 精品v亚洲v欧美v高清v | 欧美日在线观看 | 久久永久免费 | 综合精品在线 | 免费色视频在线 | 色婷婷中文 | 黄色在线观看免费网站 | 一区二区精品在线视频 | 久久99亚洲精品久久久久 | 美女视频黄免费网站 | 97在线播放 | 国产在线p | 免费日韩一区二区三区 | 欧洲视频一区 | 免费在线h| 婷婷丁香激情综合 | 午夜性生活 | 天天干天天弄 | 国产精品乱码久久久 | 中文国产成人精品久久一 | 久草成人在线 | 欧美日韩精品在线免费观看 | 国产无遮挡猛进猛出免费软件 | 婷婷丁香五 | 超碰97人人爱 | 欧美日韩久久久 | 99热国产在线中文 | 美女视频黄在线观看 | 天堂av在线中文在线 | 激情综合色综合久久综合 | 97人人精品 | 亚洲精品一区二区三区四区高清 | 国产精品免费一区二区三区在线观看 | 精品久久一区二区三区 | 天天天色 | 美女在线免费观看视频 | 国产精品6999成人免费视频 | 国产一区精品在线观看 | 久久噜噜少妇网站 | 五月天丁香视频 | 成人毛片在线视频 | 天天干,天天射,天天操,天天摸 | 一区二区三区四区五区在线 | 国产精品一区二区免费 | 最近免费中文视频 | 亚洲欧洲国产精品 | 亚洲综合五月 | 亚洲 中文 欧美 日韩vr 在线 | 日韩理论在线视频 | 日韩理论电影在线 | 麻豆视频免费在线 | 国产色久 | 天天天射 | 日韩免费中文 | 特级黄色片免费看 | 国产亚洲精品电影 | 婷婷激情久久 | 丝袜美女视频网站 | 天天色天天综合网 | 久久国产亚洲 | 婷五月天激情 | 国产精品久久久久久久av电影 | 91资源在线免费观看 | 激情图片qvod| 久久人人爽爽人人爽人人片av | 麻豆一区二区三区视频 | 久久久久国产成人精品亚洲午夜 | 狠狠躁夜夜躁人人爽视频 | 成年人在线观看网站 | 欧美日韩在线精品一区二区 | 婷婷久月 | 亚洲精选99 | 在线观看黄色国产 | 中文字幕2021 | 亚洲精品在线观看中文字幕 | 国产一区二区在线播放 | 亚洲永久字幕 | 91网址在线观看 | 91av亚洲| 乱子伦av| 四虎国产永久在线精品 | 久草热久草视频 | 一级电影免费在线观看 | 91在线视频在线 | 又黄又刺激的网站 | 久久99久| 国产精品嫩草影院9 | 最近2019中文免费高清视频观看www99 | 欧美性猛片 | 天天爽天天爽天天爽 | 欧美日韩二三区 | 成人一区二区三区在线 | 国产二区视频在线 | 五月天狠狠操 | 狠狠的操 | 国产不卡在线播放 | 午夜精品一区二区三区在线观看 | 国产成人精品久久亚洲高清不卡 | 美女视频久久 | 丁香婷婷社区 | 日韩色在线观看 | 免费日韩一区 | 国产一区二区在线播放视频 | 国产一级免费av | 久久久国产精品亚洲一区 | 毛片1000部免费看 | 在线看毛片网站 | 日韩精品在线观看av | 国产亚洲视频中文字幕视频 | 五月婷婷一区二区三区 | 人人插人人插 | 久久99精品国产 | 天天操比 | 欧美亚洲另类在线视频 | 狠狠色伊人亚洲综合网站野外 | 国产精品午夜久久 | 国产成人精品国内自产拍免费看 | 韩国精品视频在线观看 | 在线免费av电影 | 婷婷亚洲综合 | 尤物一区二区三区 | 欧美一性一交一乱 | 精品在线亚洲视频 | 天天综合网入口 | 中文字幕在线观看网 | 亚洲美女视频在线 | 免费观看9x视频网站在线观看 | www天天操 | 国产午夜精品久久久久久久久久 | 久久人人爽人人爽人人片 | 欧美成人aa| 热久久免费国产视频 | 亚洲激情在线播放 | 亚洲艳情| 青草视频网 | 中文网丁香综合网 | 色综合久久综合中文综合网 | avsex| 国产亚洲精品综合一区91 | 中文字幕永久在线 | 久草在线资源免费 | 超碰激情在线 | 日韩 国产 | 欧美日韩91 | 亚洲一区二区三区毛片 | 欧美日韩国产伦理 | 在线观看亚洲国产精品 | 激情综合狠狠 | 久久99国产综合精品免费 | 黄色免费大全 | 精品在线观看一区二区三区 | 国产精成人品免费观看 | 九九视频一区 | 亚洲欧美日韩精品久久奇米一区 | 日韩欧美高清在线 | 蜜臀av免费一区二区三区 | 日韩免费专区 | 国产明星视频三级a三级点| 久久中文欧美 | 91精品国产自产91精品 | 天天操天天干天天操天天干 | 婷婷色资源 | 精品a在线 | 不卡精品视频 | 欧美日韩在线视频观看 | 99久久精品国产亚洲 | 天天操网 | 亚洲最大成人网4388xx | 狠狠色狠狠色 | 天天射天天 | 午夜av影院 | 在线韩国电影免费观影完整版 | 久久久精品亚洲 | 91麻豆精品国产91久久久无需广告 | 亚洲国产成人高清精品 | 成人免费在线视频观看 | 欧美大香线蕉线伊人久久 | 精品在线观看一区二区 | 不卡视频在线 | 999在线精品 | 国产精品高潮呻吟久久久久 | 久久久高清免费视频 | 欧美日韩国产一区二区三区在线观看 | www.香蕉视频 | 丁香花在线观看免费完整版视频 | 欧洲精品久久久久毛片完整版 | 日黄网站 | 在线中文字幕网站 | 色com网 | 欧美精品久久久久久久 | 日韩欧美视频一区二区 | 黄色国产区 | 欧美日本国产在线观看 | 久草在线免费色站 | 色橹橹欧美在线观看视频高清 | 久久久激情视频 | 国产精品免费观看在线 | 欧美一区二区精品在线 | 国产 一区二区三区 在线 | 天天插狠狠插 | 久久精品波多野结衣 | 三级黄色理论片 | 狠狠网站 | 国产精品成人一区 | 欧美日本三级 | 日韩欧美精品一区 | 免费在线观看一区 | 插婷婷 | 国产在线观看一 | 成人av影视观看 | 国内精品在线观看视频 | 久在线观看 | 久久婷婷一区二区三区 | 天天爽天天碰狠狠添 | 国产 成人 久久 | 久久久久免费精品国产 | 国产精品久久久久久久久久久久冷 | 亚洲第一av在线播放 | 国产成人av一区二区三区在线观看 | 色综合久久综合网 | 超碰在线cao| www.夜夜爽| 亚洲 中文 在线 精品 | 久色小说 | 免费精品国产va自在自线 | 欧美精品视 | 久草在线资源免费 | 久草香蕉在线视频 | 久久露脸国产精品 | 国产日产精品久久久久快鸭 | 精品视频久久 | 久章草在线观看 | 国产黄色精品在线观看 | 久久国色夜色精品国产 | 国产精品99久久久久久久久久久久 | 狠狠色丁香婷婷综合欧美 | 九色在线视频 | 日韩成人黄色 | 久久综合给合久久狠狠色 | 久久久久久久久久影视 | 日韩午夜网站 | 夜夜澡人模人人添人人看 | 国产精品久久一区二区三区不卡 | 国内成人综合 | 久久久99国产精品免费 | 亚洲最大av网 | 天天av资源| 亚洲日本在线视频观看 | 成人黄色小说视频 | 婷婷干五月 | 可以免费看av | 天天天天色射综合 | 国产日韩中文在线 | 99久久99久久免费精品蜜臀 | 伊人伊成久久人综合网小说 | 一区中文字幕在线观看 | 国产成人精品999在线观看 | 日日夜夜草 | 久久伊人精品天天 | 玖玖在线看 | 亚洲国产成人精品电影在线观看 | 亚洲三级网 | 色婷婷在线视频 | 日日干av| 日本中文字幕久久 | 国产亚洲成av片在线观看 | 久久中文精品视频 | 特片网久久| 国产一区在线视频播放 | 色爱区综合激月婷婷 | 天天做天天看 | 黄色成人91| 欧美在线观看视频一区二区三区 | av成人资源 | 国产日韩欧美在线免费观看 | 日日干干夜夜 | 亚洲精品视频在线免费播放 | 91成人区| 超碰97中文| 久久成人国产 | 日日爱视频| 在线观看黄网站 | 中文字幕一区av | av电影免费在线播放 | 亚洲我射av| 免费碰碰 | 在线 精品 国产 | 麻豆精品视频在线 | 欧美日韩不卡一区二区 | 91精品国产91热久久久做人人 | 99久高清在线观看视频99精品热在线观看视频 | 日本巨乳在线 | 在线视频日韩欧美 | 国产精品va在线播放 | 天天插狠狠插 | 国产美女主播精品一区二区三区 | 一区二区三区四区五区在线 | 国产成人精品久久二区二区 | 性色av免费在线观看 | 国产黄色免费电影 | 久久专区| 精品久久久久久国产91 | 99精品黄色片免费大全 | 日韩一区二区三区观看 | 在线观看成人一级片 | 青青久视频 | 免费看亚洲毛片 | av在线成人 | 国产成人777777 | 麻豆 91 在线 | 欧美va日韩va | 亚洲国产精品一区二区久久hs | 久久天天躁夜夜躁狠狠85麻豆 | 在线高清一区 | 久久毛片网站 | 国产精品久久久久久久久久久免费看 | 国产自产在线视频 | 91片网 | 中文永久字幕 | 国产精品手机播放 | 亚洲aⅴ一区二区三区 | 久久成年视频 | 91女子私密保健养生少妇 | 中文字幕亚洲在线观看 | 国产精品久久久久9999 | 精品一区二区日韩 | 久久美女高清视频 | 欧美污网站 | 国产高清免费在线观看 | 欧美极度另类性三渗透 | 日韩h在线观看 | 国产丝袜一区二区三区 | 91自拍视频在线 | 免费高清国产 | 在线看片日韩 | 人人澡人人舔 | 久久免费看毛片 | 国产精品久久久久久久久久久免费 | 欧美伊人网 | 天堂va在线观看 | 福利视频一区二区 | 日韩在线电影一区二区 | 日韩av二区| 日韩电影久久 | 丰满少妇高潮在线观看 | 综合网久久 | 天天插天天射 | 国产无遮挡又黄又爽馒头漫画 | 成人av一区二区三区 | 久久成人欧美 | 国产高清在线精品 | 国产精品资源 | 97精品国产91久久久久久 | 欧美成人黄 | 91视频国产免费 | 日韩在线观看网站 | 日本在线成人 | 免费看黄网站在线 | 国产久草在线 | 久久亚洲免费 | 日日夜夜天天久久 | 性色视频在线 | 久久久精品视频成人 | wwwwww色 | 国产亚洲人成网站在线观看 | 婷五月激情 | 天天干天天操天天爱 | 国产伦精品一区二区三区免费 | 天天操天天爽天天干 | 国产v在线 | 玖玖视频| 日韩欧美在线不卡 | 国产成人精品一区二区三区 | 国产97碰免费视频 | 色www免费视频 | 麻豆传媒一区二区 | 激情综合五月天 | 五月天,com | 综合伊人av | 久久免费毛片视频 | 93久久精品日日躁夜夜躁欧美 | 日韩av在线高清 | 视频三区在线 | 国产精品嫩草在线 | 91精品国自产在线偷拍蜜桃 | 亚洲黄色av网址 | 亚洲精品在线视频观看 | 在线观看小视频 | 成人综合婷婷国产精品久久免费 | 六月激情久久 | 天天摸天天舔天天操 | 午夜影院一级片 | 97碰在线视频 | wwwww.国产 | 日韩在线国产精品 | 国产黄色大全 | 国产精品系列在线观看 | 久久国产露脸精品国产 | 国产在线视频资源 | 免费特级黄色片 | 西西444www大胆无视频 | 国产午夜精品理论片在线 | 久久怡红院 | 91人人爽久久涩噜噜噜 | 久久国产精品99国产精 | 中文字幕有码在线 | 99久久婷婷国产综合精品 | 国产欧美综合视频 | 久久草| 国产亚洲成人网 | 色wwww| 不卡国产在线 | 久久艹在线| 九九视频在线观看视频6 | 97超级碰碰碰碰久久久久 | 日韩高清精品一区二区 | www..com黄色片 | 久久亚洲综合国产精品99麻豆的功能介绍 | 免费福利在线 | 国产一二三区在线观看 | 香蕉在线观看 | 欧美性极品xxxx娇小 | 不卡精品 | 久久久久久久久久久久久久电影 | 天天草视频 | 丁香久久 | 久久久久久国产精品999 | 91视频午夜 | 91在线免费观看网站 | 永久免费视频国产 | 四虎国产精品永久在线国在线 | 天天干天天操天天爱 | 99精品视频99 | 日韩精品在线一区 | www.夜夜操.com | 豆豆色资源网xfplay | 看全黄大色黄大片 | 日韩在线观看一区二区三区 | 人人搞人人干 | 国产伦精品一区二区三区高清 | 一区二区三区在线免费播放 | 午夜性生活 | 免费看av在线 | 在线国产日韩 | 国产婷婷视频在线 | 国产亚洲精品美女 | 日日夜夜精品免费观看 | 久久精品一区二区 | 国产色秀视频 | 久久久久欧美精品999 | av福利第一导航 | 欧美精品久久久久久久久老牛影院 | 日韩精品免费在线 | 国产成人精品免费在线观看 | 久青草视频在线观看 | 亚洲人在线7777777精品 | 香蕉免费在线 | 国产精品久久久久久久毛片 | 国产伦理久久精品久久久久_ | 免费网站v | 青青啪 | 国产精品久久久久久久久久久杏吧 | 91精品国产麻豆 | 中文字幕精品三级久久久 | 日韩在线电影一区二区 | 亚洲精选视频免费看 | 99精品久久久久 | 久久国产精品99国产精 | 日本深夜福利视频 | 日批视频在线播放 | www色com | 国产一卡二卡在线 | 色婷婷狠狠五月综合天色拍 | 国产成人福利在线观看 | 成人av网站在线播放 | 92av视频| 在线播放av网址 | 最近中文字幕第一页 | 九热在线| 国产一区二区久久 | 在线久久| 精品视频 | 免费黄色av | 91麻豆精品国产91久久久无限制版 | 久久久久国产精品www | 色网站在线观看 | 日本久久成人 | 国产最新视频在线观看 | 97在线精品视频 | 亚洲最大av网站 | 免费电影播放 | 成人va天堂 | 国产一区在线播放 | 亚色视频在线观看 | 中文字幕免费高 | 91夫妻视频 | 国产免费观看高清完整版 | 久久网站最新地址 | 97视频在线免费观看 | 久草| 日韩精品久久久久久中文字幕8 | 日本在线精品视频 | 国产97碰免费视频 | 人人涩 | 欧美乱码精品一区 | 欧美日韩国产精品久久 | 九九热精品视频在线播放 | 久久深夜福利免费观看 | 四虎亚洲精品 | 久久大片| 91九色性视频 | 国产精品99久久久久久人免费 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 99精品视频免费看 | 欧美性免费 | av专区在线| 成人av电影在线观看 | 97人人澡人人添人人爽超碰 | 黄在线免费观看 | 国产伦理久久精品久久久久_ | 色噜噜在线观看 | 国产精品久久久久三级 | 日日添夜夜添 | 国内久久精品 | 日韩欧美视频免费看 | 亚洲精品欧美成人 | 婷婷丁香花五月天 | 亚洲一级黄色 | 精品国产91亚洲一区二区三区www | www.xxxx变态.com | 日本在线视频一区二区三区 | 精品在线视频观看 | 亚洲高清视频在线观看 | 久久精品麻豆 | 国产又粗又猛又黄 | 亚洲视频电影在线 | 国产精品 亚洲精品 | 97超碰站| 日韩av免费在线电影 | 亚洲激情电影在线 | 欧美一二三专区 | 亚洲视频在线看 | 黄色大全在线观看 | 亚洲视频精品 | 精品日韩在线 | 婷婷久操 | 国产视频日韩视频欧美视频 | 成人国产精品免费 | 97超碰网 | 在线观看日本高清mv视频 | 在线观看aaa | 欧洲亚洲精品 | 九九视频网 |