日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

VLC 倉(cāng)庫(kù) checkasm 測(cè)試編寫完全指南:從 API 命名到匯編級(jí)驗(yàn)證與基準(zhǔn)測(cè)試

VLC 倉(cāng)庫(kù) checkasm 測(cè)試編寫完全指南:從 API 命名到匯編級(jí)驗(yàn)證與基準(zhǔn)測(cè)試 音視頻【免費(fèi)下載鏈接】vlcVLC media player - plays everything, runs anywhere. Code here: https://code.videolan.org/videolan/vlc項(xiàng)目地址https://gitcode.com/gh_mirrors/vl/vlc點(diǎn)擊查看免費(fèi)下載本篇技術(shù)指南以 VLC 倉(cāng)庫(kù)test/checkasm/ext/docs/writing-tests.md為核心系統(tǒng)講解如何為 checkasmVideoLAN 自研的匯編 / SIMD 優(yōu)化實(shí)現(xiàn)測(cè)試框架編寫高質(zhì)量測(cè)試。checkasm 是 VLC 項(xiàng)目中驗(yàn)證 DSP、編解碼等優(yōu)化函數(shù)正確性與性能的關(guān)鍵基礎(chǔ)設(shè)施其完整源碼、頭文件與自測(cè)用例均位于 test/checkasm/ext。讀完本文你將掌握 checkasm 的基本測(cè)試工作流、現(xiàn)代/傳統(tǒng)兩套 API 命名、緩沖區(qū)分配與初始化、隨機(jī)參數(shù)生成、多配置循環(huán)測(cè)試、浮點(diǎn)容差比較、越界寫檢測(cè)、MMX 特例處理以及如何用固定種子、函數(shù)過(guò)濾和多種導(dǎo)出格式組織可復(fù)現(xiàn)的基準(zhǔn)測(cè)試?;緶y(cè)試結(jié)構(gòu)八步工作流checkasm 的核心思想是在同一個(gè)測(cè)試進(jìn)程里同時(shí)調(diào)用參考實(shí)現(xiàn)通常是純 C 版本和被測(cè)實(shí)現(xiàn)通常是匯編 / SIMD 優(yōu)化版本對(duì)比輸出是否一致并可選地對(duì)新實(shí)現(xiàn)做基準(zhǔn)計(jì)時(shí)。在深入高級(jí)模式之前先熟悉基本測(cè)試結(jié)構(gòu)完整可運(yùn)行示例見(jiàn) getting-started.md 的 Quick Start 章節(jié)。一個(gè)典型測(cè)試的工作流包含 8 個(gè)步驟分配對(duì)齊的緩沖區(qū)存放測(cè)試數(shù)據(jù)用checkasm_declare()聲明被測(cè)函數(shù)的函數(shù)簽名用checkasm_check_func()檢查該函數(shù)是否應(yīng)當(dāng)被測(cè)試決定要不要跳過(guò)初始化測(cè)試輸入、清空輸出緩沖區(qū)分別調(diào)用參考實(shí)現(xiàn)checkasm_call_ref()與新實(shí)現(xiàn)checkasm_call_new()用checkasm_check2d()或類似函數(shù)比較兩者輸出用checkasm_bench_new()對(duì)新實(shí)現(xiàn)做基準(zhǔn)測(cè)試可選用checkasm_report()匯報(bào)結(jié)果可選。其中第 3 步至關(guān)重要checkasm_check_func()會(huì)依據(jù)命令行傳入的過(guò)濾模式--function/--test、當(dāng)前 CPU 特性集合等條件決定當(dāng)前這個(gè)函數(shù)變體是否值得測(cè)試。從 test.h 的宏定義可以看出它會(huì)同時(shí)把傳入的函數(shù)指針記錄到全局的checkasm_key_new并把查找到的參考實(shí)現(xiàn)鍵值寫入checkasm_key_ref供后續(xù)的checkasm_call_ref()/checkasm_call_new()使用#define checkasm_check_func(func, ...) \ (checkasm_key_ref \ checkasm_check_key((checkasm_key_new (CheckasmKey) (func)), __VA_ARGS__))checkasm_call_ref()與checkasm_call_new()都是宏前者展開(kāi)為checkasm_call(checkasm_func_ref, ...)只做信號(hào)保護(hù)后者展開(kāi)為checkasm_call_checked(checkasm_func_new, ...)除信號(hào)保護(hù)外還會(huì)檢查棧破壞、寄存器被 clobber、寄存器寬度不匹配、ABI 違規(guī)等常見(jiàn)匯編錯(cuò)誤詳見(jiàn) test.h。API 命名約定現(xiàn)代 API 與傳統(tǒng)短別名checkasm 同時(shí)支持兩套命名風(fēng)格可以在同一個(gè)測(cè)試文件中混用。現(xiàn)代 API推薦所有函數(shù)使用checkasm_前綴checkasm_declare(void, uint8_t *dst, const uint8_t *src, int len); checkasm_check_func(dsp-func, func_name) checkasm_call_ref(dst_c, src, len); checkasm_call_new(dst_a, src, len); checkasm_check1d(uint8_t, dst_c, dst_a, len, dst); checkasm_bench_new(dst_a, src, len); checkasm_report(func_name); checkasm_fail() checkasm_alternate(buf0, buf1) // ...傳統(tǒng)/短別名 API為方便與向后兼容checkasm 提供了更短的別名declare_func(void, uint8_t *dst, const uint8_t *src, int len); check_func(dsp-func, func_name) call_ref(dst_c, src, len); call_new(dst_a, src, len); // checkasm_check1d() 沒(méi)有短別名 bench_new(dst_a, src, len); report(func_name); fail() alternate(buf0, buf1)這些別名在 test.h 的 Short-hand Aliases 分組中集中定義例如#define call_ref checkasm_call_ref、#define declare_func checkasm_declare、#define bench_new checkasm_bench_new等。值得注意的是緩沖比較函數(shù)checkasm_check1d()/checkasm_check2d()系列沒(méi)有對(duì)應(yīng)的短別名只有checkasm_check、checkasm_check_padded這類以checkasm_開(kāi)頭的別名這是刻意的設(shè)計(jì)。兩種風(fēng)格完全等價(jià)且可混用。但為了文檔與新增代碼的一致性和可讀性推薦統(tǒng)一使用帶checkasm_前綴的現(xiàn)代命名。最佳實(shí)踐緩沖區(qū)分配對(duì)齊是硬要求測(cè)試優(yōu)化實(shí)現(xiàn)時(shí)緩沖區(qū)必須按平臺(tái)要求對(duì)齊很多 SIMD 指令要求 16/32/64 字節(jié)對(duì)齊。CHECKASM_ALIGN()負(fù)責(zé)聲明帶平臺(tái)相關(guān)對(duì)齊屬性的變量BUF_RECT()更進(jìn)一步聲明一塊四周帶 padding、自動(dòng)計(jì)算 stride 的矩形緩沖。// 簡(jiǎn)單數(shù)組 CHECKASM_ALIGN(uint8_t buf[1024]); // 2D 緩沖自動(dòng)加 padding 并計(jì)算 stride // - 定義 dst 為指向 64x32 可用區(qū)域的指針以及 dst_stride字節(jié)為單位 BUF_RECT(uint8_t, dst, 64, 32);重要CHECKASM_ALIGN()必須對(duì)每個(gè)緩沖區(qū)單獨(dú)使用// 正確 CHECKASM_ALIGN(uint8_t buf1[32]); CHECKASM_ALIGN(uint8_t buf2[32]); // 錯(cuò)誤 - 只有 buf1 會(huì)被對(duì)齊 CHECKASM_ALIGN(uint8_t buf1[32], buf2[32]);從 utils.h 的實(shí)現(xiàn)看CHECKASM_ALIGN(x)在 MSVC 下展開(kāi)為_(kāi)_declspec(align(CHECKASM_ALIGNMENT)) x在 GCC/Clang 下展開(kāi)為x __attribute__((aligned(CHECKASM_ALIGNMENT)))——它修飾的是緊跟其后的單個(gè)聲明這正是逐緩沖對(duì)齊要求的根源。BUF_RECT()宏會(huì)一次性生成一系列變量name_buf含 padding 的完整數(shù)組、name_stride以字節(jié)計(jì)的 stride、name_buf_h含 padding 的總行數(shù)以及指向可用區(qū)域起點(diǎn)的指針name??捎脜^(qū)域四周預(yù)留了足夠 padding為后面的越界寫檢測(cè)checkasm_check_rect_padded()打基礎(chǔ)#define BUF_RECT(type, name, w, h) \ DECL_CHECK_FUNC(*checkasm_check_impl_##name##_type, type) \ checkasm_check_impl_##type; \ CHECKASM_ALIGN(type name##_buf[((h) 32) * (CHECKASM_ROUND(w, 64) 64) 64]); \ const int name##_buf_w CHECKASM_ROUND(w, 64) 64; \ const int name##_buf_h (h) 32; \ ptrdiff_t name##_stride sizeof(type) * name##_buf_w; \ ... type *name name##_buf name##_buf_w * 16 64緩沖區(qū)初始化隨機(jī)、病態(tài)與常量三種策略checkasm 提供三類緩沖區(qū)填充函數(shù)完整清單見(jiàn) utils.h 的 memory 分組// 隨機(jī)數(shù)據(jù)均勻分布 RANDOMIZE_BUF(buf); checkasm_randomize(buf, sizeof(buf)); // 等價(jià)于上面的宏 checkasm_randomize_mask8 (buf8, width, 0x0F); // 把取值范圍約束到掩碼內(nèi) checkasm_randomize_mask16(buf16, width, 1023); // 隨機(jī) 10-bit 值 // 病態(tài)測(cè)試模式邊界值、交替位、隨機(jī)字節(jié)的混合 INITIALIZE_BUF(buf); checkasm_init(buf, sizeof(buf)); // 等價(jià)于上面的宏 checkasm_init_mask16(buf16, width, (1 12) - 1); // 約束到 12-bit 范圍 // 清空為常量值 CLEAR_BUF(buf); checkasm_clear(buf, sizeof(buf)); // 等價(jià)于上面的宏 checkasm_clear16(buf16, width, 0x1234);checkasm_init()以及宏INITIALIZE_BUF()填充的是病態(tài)測(cè)試模式混合了極小值、極大值、交替位模式與隨機(jī)字節(jié)專門用于觸發(fā)潛在 bugcheckasm_clear()目前填充常量0xAA讓測(cè)試失敗時(shí)能從 hexdump 中一眼看出差異區(qū)域。對(duì)于BUF_RECT()創(chuàng)建的 2D 緩沖有對(duì)應(yīng)的矩形版本宏它們作用于含 padding 的整塊數(shù)組name_buf從而保證 padding 區(qū)域也有確定內(nèi)容可供比對(duì)BUF_RECT(uint8_t, src, 64, 32); INITIALIZE_BUF_RECT(src); // 用病態(tài)測(cè)試字節(jié)初始化 RANDOMIZE_BUF_RECT(tmp); // 填充隨機(jī)數(shù)據(jù) CLEAR_BUF_RECT(dst); // 清空為常量數(shù)據(jù)當(dāng)前為 0xAA多配置循環(huán)測(cè)試很多 DSP 函數(shù)按塊尺寸block size分派不同實(shí)現(xiàn)。應(yīng)當(dāng)在多個(gè)配置例如各種 2 的冪塊尺寸下循環(huán)測(cè)試保證覆蓋全面BUF_RECT(uint8_t, src, 128, 128); BUF_RECT(uint8_t, dst_c, 128, 128); BUF_RECT(uint8_t, dst_a, 128, 128); checkasm_declare(void, uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, int w, int h); // 測(cè)試各種 2 的冪塊尺寸從 4x4 到 128x128 for (int h 4; h 128; h 1) { for (int w 4; w 128; w 1) { if (checkasm_check_func(get_func(w), func_%dx%d, w, h)) { // 初始化測(cè)試數(shù)據(jù) - 放在循環(huán)內(nèi)部為每個(gè)測(cè)試選擇不同的數(shù)據(jù)模式 INITIALIZE_BUF(src); CLEAR_BUF(dst_c); CLEAR_BUF(dst_a); // 測(cè)試該配置 checkasm_call_ref(dst_c, dst_c_stride, src, src_stride, w, h); checkasm_call_new(dst_a, dst_a_stride, src, src_stride, w, h); checkasm_check_rect_padded(dst_c, dst_c_stride, dst_a, dst_a_stride, w, h, dst); // 基準(zhǔn)測(cè)試該配置 checkasm_bench_new(checkasm_alternate(dst_a, dst_c), dst_a_stride, src, src_stride, w, h); } } } checkasm_report(func);這里的checkasm_check_func()名稱支持 printf 風(fēng)格格式化如func_%dx%d會(huì)在報(bào)告中形成func_4x4、func_8x8這樣清晰的命名。使用隨機(jī)參數(shù)用checkasm_rand()及相關(guān)函數(shù)生成多樣化的測(cè)試輸入實(shí)現(xiàn)見(jiàn) utils.h 的 rng 分組// 隨機(jī)整數(shù) int byte checkasm_rand() 0xFF; uint32_t flags checkasm_rand_uint32(); // 隨機(jī)浮點(diǎn) double d checkasm_randf(); // [0.0, 1.0) float f (float) checkasm_randf() * 100.0f; // [0.0, 100.0) // 正態(tài)分布 double normal checkasm_rand_norm(); // mean0, stddev1 checkasm_randomize_normf(buf, len); // 用 N(0,1) 填充緩沖區(qū)rng 分組還提供checkasm_rand_int32()、checkasm_rand_dist()、checkasm_randomize_dist/distf/range/rangef等變體它們都基于CheckasmConfig中指定的種子未指定時(shí)按當(dāng)前時(shí)間取種因此可復(fù)現(xiàn)——這正是后面確定性測(cè)試一節(jié)的基礎(chǔ)。組織報(bào)告用checkasm_report()把相關(guān)的函數(shù)分組匯報(bào)。推薦的模式是一個(gè)函數(shù)組一個(gè) check_ 函數(shù) 一次 reportstatic void check_add_functions(const DSPContext *dsp) { // 測(cè)試多個(gè)相關(guān)函數(shù) for (int bpc 8; bpc 12; bpc 2) { if (checkasm_check_func(get_add8(bpc), add8_%dbpc, bpc)) { // Test add8 } if (checkasm_check_func(get_add16(bpc), add16_%dbpc, bpc)) { // Test add16 } } // 對(duì)整個(gè)組匯報(bào)一次 checkasm_report(add); }對(duì)于只有少數(shù)幾個(gè)函數(shù)、沒(méi)有邏輯分組、或?qū)儆陔s項(xiàng)函數(shù)的非常簡(jiǎn)單的測(cè)試checkasm_report()可以省略。任何其后沒(méi)有checkasm_report()調(diào)用的函數(shù)將隱式地以測(cè)試本身的名字被匯報(bào)。注意這只有在這些函數(shù)是某個(gè)測(cè)試中最后被測(cè)試的函數(shù)時(shí)才有意義因?yàn)橹笕魏蝐heckasm_report()調(diào)用都會(huì)把之前所有函數(shù)納入其中該行為自 v1.0.1 起見(jiàn) test.h。常見(jiàn)測(cè)試模式模式一2D 緩沖區(qū)處理處理帶 stride 的 2D 緩沖區(qū)如濾波、運(yùn)動(dòng)補(bǔ)償?shù)暮瘮?shù)是 checkasm 最典型的應(yīng)用場(chǎng)景static void check_filter(const DSPContext *dsp) { // 定義帶 padding 的 64x64 緩沖區(qū) BUF_RECT(uint8_t, src, 64, 64); BUF_RECT(uint8_t, dst_c, 64, 64); BUF_RECT(uint8_t, dst_a, 64, 64); checkasm_declare(void, uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, int w, int h); for (int w 4; w 64; w 1) { if (checkasm_check_func(dsp-filter, filter_w%d, w)) { // 測(cè)試多個(gè)高度 for (int h 4; h 64; h 1) { INITIALIZE_BUF_RECT(src); CLEAR_BUF_RECT(dst_c); CLEAR_BUF_RECT(dst_a); checkasm_call_ref(dst_c, dst_c_stride, src, src_stride, w, h); checkasm_call_new(dst_a, dst_a_stride, src, src_stride, w, h); // 連 padding 一起檢查 checkasm_check_rect_padded(dst_c, dst_c_stride, dst_a, dst_a_stride, w, h, dst); } // 只對(duì)全高度配置做基準(zhǔn) checkasm_bench_new(checkasm_alternate(dst_a, dst_c), dst_a_stride, src, src_stride, w, 64); } } checkasm_report(filter); }模式二有內(nèi)部狀態(tài)的函數(shù)對(duì)會(huì)修改內(nèi)部狀態(tài)或有副作用的函數(shù)關(guān)鍵在于讓參考實(shí)現(xiàn)與被測(cè)實(shí)現(xiàn)從完全相同的初始狀態(tài)出發(fā)static void check_decoder(const DecoderContext *dec) { DecoderState state_c, state_a; uint8_t bitstream[128]; // 用隨機(jī)數(shù)據(jù)初始化比特流 RANDOMIZE_BUF(bitstream); checkasm_declare(int, DecoderState *state, const uint8_t *data, int len); if (checkasm_check_func(dec-decode, decode)) { // 把兩個(gè)狀態(tài)初始化為相同 init_decoder_state(state_c, bitstream, 128); init_decoder_state(state_a, bitstream, 128); // 解碼并比較 int result_c checkasm_call_ref(state_c, bitstream, 128); int result_a checkasm_call_new(state_a, bitstream, 128); // 比較返回值 if (result_c ! result_a) { if (checkasm_fail()) { fprintf(stderr, return value mismatch: %d vs %d\n, result_c, result_a); } } // 比較最終狀態(tài)可選 // // 該檢查是否成立取決于 DecoderState 是否含 padding 字節(jié) // 或不確定的內(nèi)部狀態(tài) checkasm_check1d(uint8_t, state_c, state_a, sizeof(DecoderState), decoder state); checkasm_bench_new(state_a, bitstream, 128); } checkasm_report(decode); }注意checkasm_fail()的用法它記錄失敗并返回 1 僅當(dāng)用戶請(qǐng)求了詳細(xì)診斷輸出如--verbose時(shí)因此把fprintf包在if (checkasm_fail())分支里即可實(shí)現(xiàn)靜默失敗、按需診斷。模式三多輸出函數(shù)對(duì)產(chǎn)生多個(gè)輸出值的函數(shù)例如同時(shí)算方差與和需要逐一比較每個(gè)輸出static void check_stats(const DSPContext *dsp) { CHECKASM_ALIGN(uint8_t buf[64 * 64]); checkasm_declare(int, const uint8_t *buf, int len, unsigned *variance, unsigned *sum); if (checkasm_check_func(dsp-compute_stats, compute_stats)) { unsigned var_c, var_a, sum_c, sum_a; INITIALIZE_BUF(buf); int result_c checkasm_call_ref(buf, 64*64, var_c, sum_c); int result_a checkasm_call_new(buf, 64*64, var_a, sum_a); // 比較所有輸出 if (result_c ! result_a || var_c ! var_a || sum_c ! sum_a) { if (checkasm_fail()) { fprintf(stderr, result: %d vs %d, var: %u vs %u, sum: %u vs %u\n, result_c, result_a, var_c, var_a, sum_c, sum_a); } } checkasm_bench_new(buf, 64*64, var_a, sum_a); } checkasm_report(compute_stats); }模式四自定義輸入生成對(duì)于需要特定測(cè)試模式的函數(shù)例如變換類函數(shù)可以自行構(gòu)造最壞情況輸入// 生成最壞情況輸入來(lái)壓測(cè)實(shí)現(xiàn) static void generate_worst_case(uint16_t *buf, int len, int bitdepth_max) { // 創(chuàng)建倒序排列的輸入值序列 for (int i 0; i len; i) buf[i] (len - 1 - i) bitdepth_max; } static void check_transform(const DSPContext *dsp) { #define WIDTH 64 CHECKASM_ALIGN(int16_t src [WIDTH]); CHECKASM_ALIGN(int16_t dst_c[WIDTH]); CHECKASM_ALIGN(int16_t dst_a[WIDTH]); checkasm_declare(void, int16_t *dst, const int16_t *src, int width); if (checkasm_check_func(dsp-transform, transform)) { // 同時(shí)測(cè)試隨機(jī)輸入與最壞情況輸入 for (int pattern 0; pattern 2; pattern) { if (pattern 0) { INITIALIZE_BUF(src); // 隨機(jī)輸入 } else { generate_worst_case(src, WIDTH, 32767); // 最壞情況模式 } CLEAR_BUF(dst_c); CLEAR_BUF(dst_a); checkasm_call_ref(dst_c, src, WIDTH); checkasm_call_new(dst_a, src, WIDTH); checkasm_check1d(int16_t, dst_c, dst_a, WIDTH, dst); } checkasm_bench_new(checkasm_alternate(dst_a, dst_c), src, WIDTH); } checkasm_report(transform); }高級(jí)主題浮點(diǎn)結(jié)果比較ULP 與絕對(duì)容差匯編實(shí)現(xiàn)與 C 參考實(shí)現(xiàn)因計(jì)算順序不同浮點(diǎn)結(jié)果不可能逐位一致必須用容差比較。checkasm 提供兩套方案ULPUnits in Last Place末位單位容差與絕對(duì) epsilon 容差完整 API 見(jiàn) utils.h 的 floatcmp 分組static void check_float_func(const DSPContext *dsp) { #define WIDTH 128 CHECKASM_ALIGN(float src [WIDTH]); CHECKASM_ALIGN(float dst_c[WIDTH]); CHECKASM_ALIGN(float dst_a[WIDTH]); checkasm_declare(void, float *dst, const float *src, int len); if (checkasm_check_func(dsp-process_float, process_float)) { checkasm_randomize_normf(src, WIDTH); checkasm_call_ref(dst_c, src, WIDTH); checkasm_call_new(dst_a, src, WIDTH); // 用 ULP 容差比較 // 注意這里不能用 checkasm_check1d() const int max_ulp 1; checkasm_check2d(float_ulp, dst_c, 0, dst_a, 0, WIDTH, 1, dst, max_ulp); // 或用絕對(duì) epsilon 容差 // if (!checkasm_float_near_abs_eps_array(dst_c, dst_a, 1e-6f, WIDTH)) { // checkasm_fail(); // } checkasm_bench_new(checkasm_alternate(dst_a, dst_c), src, WIDTH); } checkasm_report(process_float); }float_ulp是checkasm_check2d()支持的特殊類型名會(huì)路由到checkasm_check_impl_float_ulp()聲明見(jiàn) utils.h其最后一個(gè)可變參數(shù)即為max_ulp。浮點(diǎn)工具集還包含checkasm_float_near_ulp()、checkasm_float_near_abs_eps_ulp()、checkasm_double_near_abs_eps()及對(duì)應(yīng)的數(shù)組版本以及無(wú)前綴的短別名float_near_ulp等。padding 與越界寫檢測(cè)很多匯編內(nèi)核會(huì)順手多寫幾個(gè)元素例如按 SIMD 寬度對(duì)齊。checkasm_check_rect_padded()系列能把 padding 區(qū)域也納入比對(duì)從而檢測(cè)函數(shù)是否寫越界static void check_bounds(const DSPContext *dsp) { BUF_RECT(uint8_t, dst_c, 64, 64); BUF_RECT(uint8_t, dst_a, 64, 64); checkasm_declare(void, uint8_t *dst, ptrdiff_t stride, int w, int h); if (checkasm_check_func(dsp-fill, fill)) { const int w 64, h 64; CLEAR_BUF_RECT(dst_c); CLEAR_BUF_RECT(dst_a); checkasm_call_ref(dst_c, dst_c_stride, w, h); checkasm_call_new(dst_a, dst_a_stride, w, h); // 標(biāo)準(zhǔn)檢查不含 padding checkasm_check2d(uint8_t, dst_c, dst_c_stride, dst_a, dst_a_stride, w, h, dst); // 帶 padding 檢測(cè)檢測(cè) w×h 之外的寫入 checkasm_check_rect_padded(dst_c, dst_c_stride, dst_a, dst_a_stride, w, h, dst); // 允許右邊緣最多越寫 16 個(gè)元素對(duì)齊導(dǎo)致的越寫 checkasm_check_rect_padded_align(dst_c, dst_c_stride, dst_a, dst_a_stride, w, h, dst, 16, 1); checkasm_bench_new(checkasm_alternate(dst_a, dst_c), dst_a_stride, w, h); } checkasm_report(fill); }從 utils.h 的宏定義看checkasm_check_rect_padded()展開(kāi)為checkasm_check2d_padded(type, ..., align_w1, align_h1, padding8)——即默認(rèn)允許 1 個(gè)元素的對(duì)齊越寫、檢查 8 個(gè)元素的 padding 帶checkasm_check_rect_padded_align()則允許你自定義align_w/align_h文檔中的16, 1表示只允許右邊緣最多越寫 16 個(gè)元素。更底層的checkasm_check2d_padded()接受align_w、align_h、padding三個(gè)額外參數(shù)align_h0可關(guān)閉上下邊緣的越寫檢查。與之配套的一維版本是checkasm_check1d_padded()但它因?qū)崿F(xiàn)原因不接受變參如需float_ulp檢查請(qǐng)改用align_h0的checkasm_check2d_padded()。多配置基準(zhǔn)測(cè)試與幾何平均checkasm_bench_new()可以在同一個(gè)checkasm_check_func()塊內(nèi)多次調(diào)用框架會(huì)把所有計(jì)時(shí)結(jié)果累積并以幾何平均匯報(bào)這非常適合多個(gè)尺寸合并成一個(gè)綜合數(shù)字的場(chǎng)景if (checkasm_check_func(dsp-filter, filter_w%d, w)) { for (int h 4; h 64; h 1) { // 對(duì)所有高度做正確性測(cè)試 checkasm_call_ref(dst_c, dst_c_stride, src, src_stride, w, h); checkasm_call_new(dst_a, dst_a_stride, src, src_stride, w, h); checkasm_check2d(uint8_t, dst_c, dst_c_stride, dst_a, dst_a_stride, w, h, dst); // 對(duì)每個(gè)配置做基準(zhǔn) checkasm_bench_new(checkasm_alternate(dst_a, dst_c), dst_a_stride, src, src_stride, w, h); } // 框架對(duì)同一 checkasm_check_func() 的所有基準(zhǔn)運(yùn)行匯報(bào)幾何平均 } checkasm_report(filter_w%d, w);除此之外還有兩種策略對(duì)每個(gè)配置單獨(dú)調(diào)用checkasm_check_func()以獲得每個(gè)尺寸獨(dú)立的基準(zhǔn)報(bào)告或者只對(duì)最大的輸入尺寸調(diào)用checkasm_bench_new()以考察極限行為具體取舍討論見(jiàn) benchmarking.md 的 Choosing Configurations 一節(jié)。多 Bitdepth 測(cè)試對(duì)支持多種位深bitdepth的編解碼函數(shù)一種做法是在循環(huán)內(nèi)按位深重建 DSP 上下文并約束隨機(jī)數(shù)據(jù)范圍static void check_pixfunc(void) { DSPContext dsp; #define WIDTH 64 CHECKASM_ALIGN(uint16_t src [WIDTH]); CHECKASM_ALIGN(uint16_t dst_c[WIDTH]); CHECKASM_ALIGN(uint16_t dst_a[WIDTH]); checkasm_declare(void, uint16_t *dst, const uint16_t *src, int len); for (int bpc 10; bpc 12; bpc 2) { const int bitdepth_max (1 bpc) - 1; dsp_context_init(dsp, checkasm_get_cpu_flags(), bpc); if (checkasm_check_func(dsp-process, process_%dbpc, bpc)) { // 在合法位深范圍內(nèi)隨機(jī)化 checkasm_randomize_mask16(src, WIDTH, bitdepth_max); checkasm_call_ref(dst_c, src, WIDTH); checkasm_call_new(dst_a, src, WIDTH); checkasm_check1d(uint16_t, dst_c, dst_a, WIDTH, dst); checkasm_bench_new(checkasm_alternate(dst_a, dst_c), src, WIDTH); } } checkasm_report(process); }這里checkasm_randomize_mask16(src, WIDTH, bitdepth_max)保證輸入始終落在合法位深范圍如 10-bit 時(shí)不超過(guò) 1023避免無(wú)意義的比較。另一種思路是把測(cè)試文件本身編譯多次用預(yù)處理器宏如-DBITDEPTH10區(qū)分位深。自定義失敗報(bào)告當(dāng)返回值或內(nèi)部狀態(tài)需要更細(xì)粒度的診斷時(shí)可以在checkasm_fail()分支內(nèi)打印自定義信息static void check_complex(const DSPContext *dsp) { // ... if (checkasm_check_func(dsp-complex, complex)) { for (int param 0; param 16; param) { int result_c checkasm_call_ref(param); int result_a checkasm_call_new(param); // 檢查返回值 if (result_c ! result_a) { if (checkasm_fail()) { // 僅當(dāng)用戶請(qǐng)求詳細(xì)錯(cuò)誤診斷時(shí)才執(zhí)行此分支 fprintf(stderr, return mismatch for param%d: %d vs %d\n, param, result_c, result_a); } } } } checkasm_report(complex); }checkasm_fail()的返回值語(yǔ)義在 test.h 中有明確文檔1 表示失敗詳情應(yīng)當(dāng)被詳細(xì)打印0 表示靜默。它展開(kāi)為checkasm_fail_func(%s:%d, __FILE__, __LINE__)自動(dòng)附帶失敗位置。通過(guò) wrapper 間接調(diào)用函數(shù)當(dāng)被測(cè)函數(shù)必須通過(guò)一個(gè) wrapper 間接調(diào)用時(shí)使用checkasm_call()和checkasm_call_checked()調(diào)用任意輔助函數(shù)。此時(shí)checkasm_declare()聲明的函數(shù)類型必須是 wrapper 的類型而不是傳給checkasm_check_func()的內(nèi)部函數(shù)類型內(nèi)部函數(shù)的指針可以通過(guò)無(wú)類型的checkasm_key_ref/checkasm_key_new取得typedef int (my_func)(int); // 調(diào)用實(shí)際函數(shù)的 wrapper static int sum_upto_n(my_func *func, int count) { int sum 0; for (int i 0; i count; i) sum func(i); return sum; } static void check_wrapper(void) { // 聲明 wrapper 的簽名而非內(nèi)部函數(shù)的簽名 checkasm_declare(int, my_func *, int); if (checkasm_check_func(get_my_func(), my_wrapped_func)) { const int count checkasm_rand() % 100; // 把 checkasm_key_new 轉(zhuǎn)型為合適的類型并傳給 wrapper const my_func *my_ref (my_func *) checkasm_key_ref; const my_func *my_new (my_func *) checkasm_key_new; int sum_c checkasm_call(sum_upto_n, my_ref, count); int sum_a checkasm_call_checked(sum_upto_n, my_new, count); if (sum_c ! sum_a) checkasm_fail(); } }注意在這種模式下傳給checkasm_check_func()的值甚至不必是函數(shù)指針——它可以是任意指針或指針大小的整數(shù)如配置結(jié)構(gòu)體、分發(fā)表索引只要它能唯一標(biāo)識(shí)被測(cè)的底層實(shí)現(xiàn)即可。checkasm_call()只提供信號(hào)處理用于調(diào)用參考實(shí)現(xiàn)等名義上安全的代碼checkasm_call_checked()才做完整校驗(yàn)棧保護(hù)、寄存器 clobber 檢測(cè)等見(jiàn) test.h因此被測(cè)的優(yōu)化實(shí)現(xiàn)應(yīng)當(dāng)用checkasm_call_checked()。MMX 函數(shù)的特殊處理x86x86 上的 MMX 函數(shù)常常在返回前省略emms指令期望調(diào)用方在循環(huán)結(jié)束后手動(dòng)執(zhí)行。emms用于在任何浮點(diǎn)代碼執(zhí)行前清空 MMX 狀態(tài)但它非常慢所以優(yōu)化過(guò)的循環(huán)通常在循環(huán)末尾才執(zhí)行一次以最小化開(kāi)銷。對(duì)這種不合 ABI 的函數(shù)使用checkasm_declare_emms()static void check_sad_mmx(const DSPContext *dsp) { #define SIZE 16 CHECKASM_ALIGN(uint8_t src [SIZE * SIZE]); CHECKASM_ALIGN(uint8_t ref [SIZE * SIZE]); // 聲明 CPU_FLAG_MMX 后每當(dāng)該標(biāo)志激活時(shí)會(huì)在調(diào)用本函數(shù)后自動(dòng)執(zhí)行 emms checkasm_declare_emms(CPU_FLAG_MMX, int, const uint8_t *src, const uint8_t *ref, ptrdiff_t stride); if (checkasm_check_func(dsp-sad_16x16, sad_16x16)) { INITIALIZE_BUF(src); INITIALIZE_BUF(ref); // checkasm 會(huì)在 checkasm_call_new() 之后自動(dòng)調(diào)用 emms int result_c checkasm_call_ref(src, ref, SIZE); int result_a checkasm_call_new(src, ref, SIZE); if (result_c ! result_a) { if (checkasm_fail()) { fprintf(stderr, sad mismatch: %d vs %d\n, result_c, result_a); } } // 基準(zhǔn)迭代之后 checkasm 同樣會(huì)調(diào)用 emms checkasm_bench_new(src, ref, SIZE); } checkasm_report(sad); }第一個(gè)參數(shù)是 CPU 標(biāo)志掩碼如CPU_FLAG_MMX | CPU_FLAG_MMXEXT當(dāng)掩碼中的任一 CPU 標(biāo)志激活時(shí)checkasm 會(huì)在每次checkasm_call_new()和基準(zhǔn)運(yùn)行之后調(diào)用emms。在非 x86 平臺(tái)上checkasm_declare_emms()等價(jià)于checkasm_declare()見(jiàn) test.h 的條件宏定義?,F(xiàn)代 SIMD 指令集SSE 及以后不使用 MMX 寄存器因此不需要emms。只對(duì)純 MMX 代碼或顯式使用 MMX 寄存器的 MMXEXT 函數(shù)使用checkasm_declare_emms()。提示與技巧確定性測(cè)試固定種子checkasm 使用帶種子的 PRNG 保證測(cè)試可復(fù)現(xiàn)。傳入一個(gè)位置參數(shù)即可使用指定種子./checkasm 12345 # 使用種子 12345失敗時(shí)會(huì)打印實(shí)際使用的種子便于復(fù)現(xiàn)checkasm: using random seed 987654321 ... sad_16x16: FAILED (ref:1234 new:1235)從 checkasm.h 的CheckasmConfig看種子相關(guān)的字段是seed與seed_setseed非零或seed_set非零時(shí)使用給定種子否則按當(dāng)前時(shí)間取種repeat字段還可以讓測(cè)試用連續(xù)多個(gè)種子重復(fù)運(yùn)行設(shè)為 -1 時(shí)幾乎窮舉所有種子用于窮盡式測(cè)試。選擇性測(cè)試只測(cè)試匹配特定模式的函數(shù)或測(cè)試模塊# 只測(cè)試匹配模式的函數(shù) ./checkasm --functionadd_* # 只測(cè)試特定的測(cè)試模塊 ./checkasm --testmath # 兩者組合 ./checkasm --testdsp --functionblend_*--test/--function對(duì)應(yīng)CheckasmConfig中的test_pattern/function_pattern字段shell 風(fēng)格通配符NULL 表示運(yùn)行全部。還可使用--list-tests、--list-functions、--list-cpu-flags查看可用的測(cè)試、函數(shù)與 CPU 特性清單getting-started.md 中的--help輸出列出了全部選項(xiàng)。詳細(xì)輸出啟用 verbose 模式以獲取詳細(xì)的失敗信息./checkasm --verbose當(dāng)使用內(nèi)置的checkasm_check*()系列緩沖比較助手時(shí)verbose 模式會(huì)自動(dòng)對(duì)被差異區(qū)域輸出 hexdump該行為在 utils.h 的checkasm_check2d()文檔中有明確說(shuō)明。基準(zhǔn)測(cè)試用適當(dāng)?shù)臅r(shí)長(zhǎng)運(yùn)行基準(zhǔn)# 快速基準(zhǔn)默認(rèn)時(shí)長(zhǎng) ./checkasm --bench # 更長(zhǎng)時(shí)間的基準(zhǔn)以獲得更精確結(jié)果每個(gè)函數(shù) 10ms ./checkasm --bench --duration10000 # 以不同格式導(dǎo)出結(jié)果 ./checkasm --bench --csv results.csv ./checkasm --bench --json results.json ./checkasm --bench --html results.html--duration以微秒為單位控制每個(gè)函數(shù)的基準(zhǔn)時(shí)長(zhǎng)--csv/--json/--html對(duì)應(yīng)CheckasmConfig.format的CHECKASM_FORMAT_*枚舉值。checkasm 的統(tǒng)計(jì)方法對(duì)數(shù)正態(tài)分布建模、log 空間線性回歸、幾何平均、no-op 開(kāi)銷校正與結(jié)果解讀cycles、時(shí)間、相對(duì)加速比(vs ref)列詳見(jiàn) benchmarking.md。輔助宏用輔助宏減少重復(fù)代碼#define TEST_FILTER(name, w, h) \ if (checkasm_check_func(dsp-name, #name _%dx%d, w, h)) { \ test_filter_##name(dsp, w, h); \ checkasm_bench_new(dst, dst_stride, src, src_stride, w, h); \ } // 用法 TEST_FILTER(blur, 16, 16); TEST_FILTER(blur, 32, 32); TEST_FILTER(sharpen, 16, 16);與框架配置銜接從測(cè)試到完整程序writing-tests.md聚焦于測(cè)試函數(shù)內(nèi)部的寫法而一個(gè)可運(yùn)行的 checkasm 程序還需要在main()中注冊(cè)測(cè)試與 CPU 特性。這部分的完整示例見(jiàn) getting-started.md 的 Quick Start核心模式是填充CheckasmConfig定義于 checkasm.h后交給checkasm_main()int main(int argc, const char *argv[]) { CheckasmConfig config { .tests tests, // CheckasmTest 數(shù)組{0} 結(jié)尾 .cpu_flags cpu_flags, // CheckasmCpuInfo 數(shù)組{0} 結(jié)尾 .cpu detect_cpu_flags(), }; return checkasm_main(config, argc, argv); }checkasm 會(huì)按cpu_flags數(shù)組中聲明的順序增量式遍歷 CPU 特性集合每個(gè)后續(xù)特性繼承之前已激活的標(biāo)志set_cpu_flags回調(diào)負(fù)責(zé)更新你的全局函數(shù)分發(fā)表測(cè)試函數(shù)內(nèi)可用checkasm_get_cpu_flags()查詢當(dāng)前激活標(biāo)志以選擇對(duì)應(yīng)實(shí)現(xiàn)??蚣軆?nèi)部還提供了一系列校驗(yàn)?zāi)芰π盘?hào)處理checkasm_set_signal_handler_state()、棧破壞檢測(cè)checkasm_push_stack_guard()/checkasm_pop_stack_guard()、x86 上 MMX 狀態(tài)清理checkasm_clear_cpu_state()這些在 test.h 的 internal 分組中均有定義。checkasm 自身的自測(cè)用例如 tests/x86/tests.c就通過(guò)故意 clobber 寄存器DEF_NOOP_FUNC(clobber_r0)等與故意寫壞棧corrupt_stack_x86來(lái)驗(yàn)證這些檢測(cè)機(jī)制確實(shí)生效。下一步掌握測(cè)試編寫之后可以繼續(xù)閱讀 benchmarking.md學(xué)習(xí)如何利用 checkasm 的基準(zhǔn)測(cè)試能力精確度量并比較優(yōu)化實(shí)現(xiàn)的性能——包括對(duì)數(shù)正態(tài)分布統(tǒng)計(jì)建模、log 空間線性回歸、幾何平均匯總、no-op 開(kāi)銷校正以及關(guān)閉 CPU 頻率縮放、禁用 turbo boost 等系統(tǒng)級(jí)最佳實(shí)踐。贊分享音視頻【免費(fèi)下載鏈接】vlcVLC media player - plays everything, runs anywhere. Code here: https://code.videolan.org/videolan/vlc項(xiàng)目地址https://gitcode.com/gh_mirrors/vl/vlc點(diǎn)擊查看免費(fèi)下載相關(guān)推薦如何用 XPipe 統(tǒng)一管理所有服務(wù)器一份完整上手指南如何用 XPipe 統(tǒng)一管理所有服務(wù)器一份完整上手指南 XPipe 是一款開(kāi)源的本地連接中樞加遠(yuǎn)程文件管理器讓你在桌面上用統(tǒng)一界面管理 SSH、Docker音視頻3步掌握WanVideo_comfyComfyUI視頻生成模型終極整合指南3步掌握WanVideo_comfyComfyUI視頻生成模型終極整合指南 WanVideo_comfy是一個(gè)專為ComfyUI設(shè)計(jì)的視頻生成模型整合工具它音視頻Snapshot report for test.jsSnapshot report for test.js The actual snapshot is saved in test.js.snap . Gener測(cè)試上一篇【親測(cè)免費(fèi)】 jOOQ - 更優(yōu)雅地處理 Java SQL 編程下一篇【親測(cè)免費(fèi)】 Crawler4J - Web爬蟲(chóng)框架創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美日韩国产高清在线一二三区 | 白嫩91在线亚洲| 久久久久国产无av| 欧美日本中字另类在线| 国产高清自拍| 2017天天操天天日| 无毛精品| 亚州欧美总和| 天天综合网AV91| 97资源制服丝袜| 五月天婷精品激情| 色欲三区| 日韩av一级黄片| 97香焦色区| 久久久亚洲高清不打码| 综合久久久久久久久91| 一级AAA片一区二区三区| 青青青青草av在线观看| 精品久久久久瑟瑟| 麻豆九九九| 欧美日韩国第一区| 欧插网站| av在线浏览| 精品久久人妻成人网| 色黄污美女啪啪啪免费网站| 精品区国产区一区二区三区| 久久婷综合| 亚洲AV无码久久久国产精品| 亚洲操人| 丁香五月激情五月| 99操| 五月丁香| 性色av一区二区| 国产天天骚| 日韩/97| 91大胆欧美| 骚货| 精吧天堂| 一区二区无码视频| 超碰在线一区二区三区| 91av熟女人妻| 日韩字幕一区| 亚洲精品三区在线观看| 亚洲色图欧美色图日韩色图| 丰满人妻一区二区三区大胸懂色| 五月婷婷久久综合| 床上啊啊啊一区二区三区| 亚洲激情AV| 天天狠| 精品美女在线视频| 日本免费一区二区不卡| 婷婷激情四射| 最新av网站在线观看| 国产东北女人在线视频| 中文字幕二区日韩天堂| 国产视频大全| 狠狠操,使劲操| 久久性生大片免费观看性| 啪啪性爱免费视频| 国产无套粉嫩白浆在| 无码免费一区二区三区啪啪| 久久久久元码视频| 大香久久| 蜜桃无码AV一区二区| 亚洲中文制服诱惑| 色九九久九九| 草莓精品视频在线免费观看| 国产日韩欧美三级片 | 香蕉人欧美综合| 99亚洲精品| 久久九九网| 欧洲乱码一区二区| 香蕉99秘 一区精品蜜桃臀| 日韩精品字幕| 大香蕉综合| 欧美一区二区日韩传媒搭讪精品| 人澡逼| 蜜臀久久99精品久久久久久酒店 | 日韩国产十八禁| 91N综合网| 另类亚洲一区二区三区| 九月丁香| 久久9999 | 床上啊啊啊一区二区三区| n1038 一二三区| 久久精品操| 国产又黄又粗的视频| 国产女人成人精品视频| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 久久 久久国内精品亚洲| 精品人妻一区二区三区在线视频不卡| 亚洲中文日韩精品| 美女大乳久久久久久久女人18| 久久久免费懂色| 97视频在线| 亚洲最新a在线观看| 欧美最婬乱婬爆婬性视频 | 国产精品伦理| 欧美午夜视频精品久久| 91欧美丝袜| 国产无码三级视频在线观看| 青青操青娱乐| 中文字幕国产在线天堂| 日韩情色视频| 久久色精品视频在线| 欧美黄片免费在线观看视频| 成人久久无码www| 午夜性生活av免费在线看| 五月婷婷激情网| 日本国产二线女色| 国产亚洲在线| 精品视频一二三中文| 色牛牛AV| 欧美午夜熟妇黑人精品91| 亚洲无码?第一页| 久插不卡| 久久夜黄色无码A级大片| 国产精品熟女AV中文字幕在线播放| 国产精品午夜精品| 日本在线不卡一二区| 狠狠做深爱婷婷久久二区| 精品国产91av一区二区三区| 一直超碰| 国模无码一区二区三区在线| 九草九九九| 欧美强奸乱| 尤物视频偷拍免费| 国产精品久久久三级无码| 大香蕉伊然在亚洲91| 秋霞蝌科网日本一区| 日本高清加勒比| 狼狼色丁香久久婷婷综合五月| 欧美亚洲美少妇一区二区| 肏逼福利网站| 欧美色日本| 91高清无码下载| 性欧美| 操人91| 九九久久玖玖| 天天综合影院91| 国产精品无码av| 熟女熟妇一区二区三区视频| 五月开心网| 中文字幕99999| 肥臀熟女福利视频一区二区| 日韩人妻中文视频| 97免费视频在线| 九九热免费在线国产视频伊人五月| 99婷婷一区二区| 加勒比海成人视频网| 亚洲二区精品在线观看| 夜夜爽夜夜操| 人妻素股| 91色黑人少妇| 婷婷伊人| 九九久久一区二区伦理| 亚洲熟妇一,二,三期| 中国黑人三级片网站上区| 在线可观看的黄色网址| 欧美巨大性舒爽顶到了| 男人的天堂三级| 丁香五月大香蕉| 91精品女厕偷拍视频| 乱人乱色一区二区三区免费| 青娱乐手机日韩在线视频| 婷婷五月天激情网| 熟女五十路一区二区三| 欧美性夜| 99re视频在线播放青草| 偷拍在线观看视频| 老鸭窝亚洲毛片| 日操粉逼逼| 特色a在线上| 天天插天天操天天摸天天射天天看| 大香蕉伊人久久| 亚洲网污污污污| 男人的天堂亚洲| 成人a级高清视频在线观看| 超碰社区97| 天天操女人| 久久久国产成人一区二区三区在线| 无遮挡又黄又刺激的视频| 色婷婷一区二区三区久久午夜 | 亚洲操操操无码| 伊蕉97蜜桃97狠狠综合干| 性站 | 精品无码少妇| 大香交| 91激情综合| 开心六月色| 老熟女91av| AA丁香综合激情| 色色色色综合网| 欧美日韩操操操| 日本熟女中文字幕一区| 中国探花熟女| 综合久久中文字幕综合日韩精品| 亚洲超碰在线| 日本一级一级一级一级| 久久久国产成人一区二区三区在线| 收看日本人日bb| 亚洲欧美日韩制服另类| 激情黄色片在线观看| 啊啊嗯嗯好爽| 家庭乱伦麻豆| 国产曰批免费观看久久久| 亚洲密乳AV| 中文字幕,人妻,日韩| 日韩97P| 超清中文乱码字幕| 在线视频 亚洲精品| 欧美亚洲丝袜人妻制服中文99| 国产精品97超碰| 裸体1区| 国产精品一区二区黄片| AAAA级日本片免费视频| 午夜啪| 啪啪啪综合网| 国产美女自拍AV| 国产精品永久免费10000| 国产av激情无码久久天堂| 国产精品露脸在线观看| 人妻 丝袜美腿 中文字幕| 久久久久人妻二区精品叶可怜| 日本高清视频xxxx| 亚洲欧洲国产综合av| 欧美日韩99| 东京热男人的天堂网| 国模限制级电影| 欧美中文字幕一区 | 97超碰总站| 骚货 中文字幕 av| dy888午夜老子影视达达兔| 人人看黄色视频| 国产一级不卡在线观看| 美女刺激久久国产欧美| 青青草久久一区网| 精品二区三四区五电影 | 日日日日做夜夜夜夜无码| 中文字幕一区二区韩| 亚洲第一成人影院色播| 高清不卡视频| 国语精品对白| 国产精品亚洲天堂网址| 日本色婷婷| 熟女一区二区| 欧美偷| 成人小说另类在线| 欧美婷婷五月天| 国产SV一线| 九九九九一区| 免费日韩黄片| 日夜啪电影| 成人五月天色网| www男人天堂| 婷婷色色五月天福利| 国产三级日产三级韩国三级| 日本99一区二区| 欧美自拍网| 欧美91视频| 69超碰综合| 超碰午夜| 超碰国产精品无码| 美女露胸露奶头| 97欧美久久久久久久| 欧美精品久久96人妻无码| 福利色色| 茄子社区国产精品| 手机在线A片| 欧美亚洲国产自久久| 青青草中出视频 | 五月天婷婷欧美三区| 热热热热日日漂亮永久永久国产日| 精品少妇99| 一区二区影院| 日日夜夜草草草| 91色色网站| 超碰99在线| 欧美激色| 欧美日韩操逼嗦吊| 日韩精品系列| 国产h片在线观看视频| 少妇天堂网络| 手机午夜电影神马久久| 久久一二三级一一一| 热99这里有精品综合久久 | 国产97在线播放| 26uuu偷拍亚洲欧洲综合| 欧美人妻二区三区| 国产精品久久久久久久AV大片| 黄色大片一区二区密桃丝袜| 国产老太乱伦一区| 91N五十路| 免费精品无码一级毛片牛牛影视 | 久久久亚洲| 99欧美| 日韩欧美传媒一区国产| 女人天堂AV五区在线| 九九九九9999| 台湾佬中文娱乐自偷自拍| 91综合网站| 久久色激情一区二区三区| 性色A∨91| 嗯啊免费视频| 欧 美 自 拍 偷 拍| 裸模AV女优| 2017人人操,人人摸| 久久精品老司| 极品极品色影院| 大香交| 欧美拳交在线播放| 国产亚洲深夜激情| 久久久久久久综合,国产| 久久99亚洲精品久久99果| 超碰天天去日穴| 七久久久| 91精品微拍福利| 日韩美女高潮喷水视频| 九九精品热| 国产毛片片精品天天看视频| 91久久久老司机| 精品人妻美妇91job| 久久三区四区| 成人熟女视频一区二区三区| 日本精品无码三级网站| 蜜桃臀av一区二区| 国产精品青青草| 伊人丁香五月婷婷| 欧美中日韩XXXX| av大香蕉网站| 国产懂色精品国产av| 免费国产视频| 亚洲好色人妻| 午夜呻吟欧美| 欧美性爱五月天| 2024年最新色情网站在线观看| 极品粉嫩少妇视频| 九九av| 日韩黄片视频试看| 天天干人人看综合| 亚洲,欧美,综合网| 国内操逼视频二区| 五月色综合| 日韩无码三级影院| 97在线免费视频| 午夜九九| 天天操天天7| 毛片视频白嫩| 亚洲av乱伦色图网站| CCYY草草影院地址入口| 欧美熟妇精品黑人巨大91| 天美一二三在线观看Av| 99在线精品观看99| 人人摸人人摸人人干| 女性喷水高潮在线观看| 嗯嗯啊啊啊好爽| 91欧美另类| 精品网站9999| 吻戏激情性巴克| 人妻熟女av国产网站| 超碰人人操97碰| 青青草毛片| 91女色| AV色图| 91九九九小逼| 亚州色站 日韩电影| 99只有精品| 99久久网站| 白嫩国模丰满一二三区| 国产精品麻豆视频网站| 国产精品一区av在线| 九九九九九九视频免费| 国产一国产一级毛片古装| 久久久涩| 久久这里只有精品9| 久久激情四射婷婷丁香五月天| 97免费视频在线观看视频| 欧美老妇女内射网址| 亚洲精品一区二区三区新线路| 色色无码| 国产少妇与亚洲av| 欧美黑人猛交春色影视大全| 精品无码一区二区| 日韩/97| 91网亚洲| 久久m| 91nbbbbbb| 天天操天天日天天干| 亚洲男人天堂2016| 日产成人久久| 色淫网站优优视频| 91国产操逼视频| 黄色免费一级在线毛片| 国产免a费看黄片在线| 在线色导航| 屁屁影院一区二区三区国产| 日本三级日本三级99| 99热超碰在线| 天天操女人| 看黑丝美女操逼青青网站| 亚洲激情色片| 超碰偷拍| 国产精品人妻免费精品| 人妻啪| 综合影视国产无码| 色五月综合网| 中文字幕丝袜人妻| 四虎免费视频| 欧美性爱一区二区| 国产欧美日韩一区二区三区| 99操碰| 精品免费一区二区三区在线亚洲人成| 加勒比日本在线| 51一区二区三区| 亚洲国产熟妇综合色专区| 日韩欧美福利视频看看| 欧美啪啪女女| 婷婷五月天久久精品视频一区二区三区 | 超碰97欧美日韩| 欧美欧美少妇| 亚洲少妇综合在线播放| 东京热激情视频一二三区| 神马午夜久久久| 99精品无码| 欧美欧美啪啪视频| 欧美成人黄网色网站| 男人的天堂啪啪啪啪啪蜜桃不卡| 国产传媒1234区| 天天拍天| 伊人五月天婷婷| 亚洲色欲天天人妻无码系列专区| 四虎视频在线观看| 91人人操| 97久久视频| 伊人伊人LD| 欧美在线天堂| 色欲日韩欧美在线一区| 中日韩久久人妻一区二区| 色97国产69香蕉| 亚洲另类欧美精品| 少妇超碰在线| 久久久久女教师免费一区| 内射老妇BBWX0C0CK| www.久久爱| 噜噜噜亚洲精品| 少妇被c 黄 免费观看| 深田咏美亚洲精品福利社| 台湾肥佬网一区二区三区| 欧美92| 亚洲精品一区二区三区在线播放| 欧美第38页| 久久久96| 91n美女视频| 欧美 亚洲精品首页| 色狠狠 - 百度| 91殴美大片| 色欲天天婬色婬香WWW夜色| 久久香蕉网| 中文有码9| 欧美一区二区亚洲天堂| 超碰视97中文| 国产福利av精彩对白| 人妻 制服 日韩 中文 在线| 国产精品女生av| 欧美色图私拍91| 天堂v无码免费视频| 亚洲天堂区| 97视频免费播放| 久久婷综合| 久久精品操| www.色婷婷色综合| 一二三区视频在线观看| 亚洲最大91网| 国产强奸AV在线| 亚洲91亚洲| 亚洲影院无码在线| 一本久久精品中文字| 五十路六十路素人熟女| 一级黄碟| 加勒比大香蕉视频在线| 天美传媒婬乱在| 欧美最婬乱婬爆婬性视频 | 不卡啪啪视频| 欧美色乱| 在线观看A啊啊啊| 日韩无码a片| 搡老女人老91妇女熟女| 丁香五月色情| 欧洲黄色网| 久久久111| 综合久久欧美| 偷拍 亚洲 欧美| 亚洲美欧999| 园内精品自拍视频在线播放| 99色在线| 人妻精品综合中文字幕在线| 干干干天天| 日本三级精品| 第45页一区二区| 午夜理论片在线观看免费| 亚欧洲日韩国产精品| 蜜伊人色综合97| 国产一级作爱毛片| 色婷婷一区二区三区久久| 国产久久一区二区三区野外在线| 操我无码| 国产精品不卡av免费在线观看| 2017天天透天天通天天擦| 五月天久久久| 丰满人妻一区二区三区四区| 国内一级精品| 91丝袜激情在线| 九九成人视频| 91在线视频免费播放| 老熟乱一区二区三区四区| 男人下部插入女人下部| HEYZO高无码国产精品227| 丰满人妻一区二区三区四区| 国产av热热色| 无码91| 91丨九色丨43老版熟女| 国产一级137片内射麻豆| 欧美综合综合| 亚州男人的天堂| 东北女人av| 亚洲五月婷| 久久精品中文字幕观看| 夜夜骑夜夜操| 91白虎| 劲爆欧美人妖三区91| 白嫩嫩一区| 久久久国产成人一区二区三区在线| 久久久久久亚洲Av无码精| 久久久999国产精品| 久久99草| 东北老女人的激情视频| 69人妻人人揉人人躁人人精品| 亚洲国产一区二区三区四区国产| 亚洲 自拍偷拍 欧美| 91国产操逼视频| 97亚洲在线| 日比av无码| 亚洲欧美校园| 亚洲 中文 欧美 日韩 在线| 夜夜骑操视频| 少妇内射www在线观看视频| 国产白领连续中出在线观看| 91xingse| 91蜜臀在线久久久久| 天天日天天插| 欧美久久九九| 77777亚洲蜜臀精品久久综合蜜臀| 99精品久久| 婷婷五月av| 婷婷六月色| 920日本午夜免费| 91蜜桃婷婷狠狠久久综合9色| 日本理论在线| 丁香六月综合激情| 天堂蜜桃无码视频一区二区| 夜夜中出国产| 欧色综合| 欧美亚洲激情一二三| 欧美97视频| 欧美亚州色的图| 国产精品色约约| 五月天九九日国产精品一区二区三区| 精品久操| 色97干| 精品视频一区二区| 天天日天天搞天天干| 一级毛片久久久久久久女人18| 激情熟女12P| 久久久久久99AV无码免费网站| 国产精品4p在线观看| 国产精品一区二区校花| 强奸乱伦av电影| 久久婷婷热| 国产11页| 欧美大战久久久伊人| 青青操视频在线| 撸无码不卡免费视频| 97免费在线观看视频| 99婷婷一区二区| 久久亚洲AV无码专区首页| 亚洲97久久精品亚洲| 午夜色婷婷| 天天干天天日天天射黄色大片| 香蕉久久精品| 亚洲蜜臀精品视频久久| 91综合网| 久久国内| 九一亚洲国产免费| 精品久久久久成人码免| 大象AV在线| 伊人五月天激情| 亚洲色图大香| 成人久久久精品| 啊啊啊免费| 自拍视频一区在线观看| 亚洲.欧美.丝袜.中文.综合| 亚洲涩涩| 少妇久久久久久| 国产亚洲精品av一区| 婷婷亚洲中文字幕在线| 人妻超碰青青草98| 亚洲国产美女久久久久| 十八禁视频网站| 99 国产丝袜在线| 午夜毛片亚洲精品片国产久久久| 91人妻做a观看视频| 好吊色在线观看| 韩国嫰模上门援交视频| 国产高清午夜成人在线观看| 五月婷婷爱六月丁香色| 九九九影院| 欧美性天天| 久久老子无码午夜伦不卡| 精品十三区| 97视频在线播放| 我要看免费韩日黄片| 动漫av中文| 欧美18老人禁| 久都青青视频 | 天天影视色香色欲| 偷拍新久久| 精品少妇人妻av久久免费| 蜜色网色哟哟| 国产精品扒开腿做爽爽爽视频| 欧美极度丰满熟妇hd| 蜜臀AV成人精品蜜臀| 91这里只有精品| 天天做天天爱| 国产精品另类| 五月丁香六月婷| wuyechaopeng| av绯色| 小骚逼被操的爽不爽| 人人操,人人插| av操操不卡| 中日韩免费看男女操逼大全| 亚洲人精品久久久喷水| 美女黄网| 黑丝少妇麻豆| 自拍内地三级在线观看| 精品人妻夜夜草| 国产精品日本无码A片| 日本伦理一区二区| 香蕉欧美| 亚洲中文电影| 家庭乱伦性爱av| 久久精品视| 美国aaaaa一级黄片| 熟女久久久| 天天躁日日躁AAAXX| 国产精品另类一区大香蕉| 妺妺跟我一起洗澡没忍住| 青青操日韩| 激情网五月天| 国产免费一区2区3区| 日韩三级网址| 懂色天天爱天天日天天射天天澡| 五月开心久久AV官网| 日韩成人性爱AV| 丝袜加勒比| 久久久精品日本一道| 2024年最新色情网站在线观看| 欧美老妇综合网| 久久久久亚洲av综合波多野制衣| 亚洲男人综合网| 亚洲AV永久无码一区仙野| 久久线上视频免费看| 日韩三四五区| 国产精品无码久久久久2025| 国产精品乱码久久久、久久| 五月丁香六月婷| 91社区伊人| 99色天堂| 97硬碰| 亚洲国产精品有声| 亚洲女优有码无码高清| 97资源超碰| 26uuu性| 超碰97伊人| 殴美综合色88| 无码在线亚洲| 日韩视频中文字幕| 色哟哟av网址| 欧州色图区| 日韩成人性爱AV| 999综合网| 一二三四视频在线社区中文字幕| 伊人欧美大香蕉视频| 操人妻丝袜高跟| 国产无马视频| 农村女一级毛卡片| 97射欧美| 超碰97玖玖爱| 99熟女| 两性色网| 国产又黄又爽| 5252色欧美在线男人的天堂| 91欧美偷拍| 久热九九| 国产精品视频白浆免费| 在线一区| 日韩不卡一二三四| 国产精点久久久成人| 91老熟女老女人国产老太| 一本一道人妻久久一区二区三区| 国模无码一区二区三区在线| 麻豆91熟妇人妻中文字幕茄子| 日韩欧美女优电影| 丁香五月性爱| 蜜桃臀av在线观看| 青青草在线成人视频| 99re国产中文字幕| 少妇色欲综合网2| 日韩猛交| 狠狠97| 7777奇米影视久久| 欧美亚洲首页| 日韩另类色图| 大奶的诱惑| 男人天堂站| 大香蕉免费乱伦视频| 好涩综合| 五月开心网| 天天操狠狠日夜夜干超碰撸com视频在线观看| 91在线视频免费播放| 天天做天天爱夜夜爽毛片试看| 91亚州| 天天日熟妇| 91美女色视频亚洲| 暖暖精品二区三区观看| 91精品免费| 大香交伊人网| 国产精品久久久无码aV去| 91黑丝在线播放| 操逼片国产| 97国产精选| 9久9久9久9久视频网站| 精品丰满熟妇人妻一区| 国产高清在线自在拍69| 色综合色综合网| caorenqi shipin| 男人高清无码一区二区| 大香蕉伊人在线成人AV在线观看| 久9综合在线| 91久久久久久久久18| 久久久性爱| 亚洲人天堂| 久草热制服丝袜在线观看 | 东北女人| 麻豆精品三区视频| 婷婷久久网| 搡老熟女老女人老熟妇免费视频| 亚欧成人综合影院| 亚91网| 色999人与兽| 加勒比av网| 麻豆视频test| 曰韩av中文字幕专区| 中字幕人妻一区二区三区| 9999九九九久久久| 97久久超碰国产网站| 亚洲成人激情小说视频| 日逼国产| 97在线日韩中文字幕| 日本性感人妻91| 桃色五月天| 少妇毛片久久| 久久97资源 网| 殴美综合色88| 婷婷五月天影院| 久九干| 伊人国产av| 性九九九九九九| 天操天操夜操夜月操月年年操操| 五月大香蕉| 强上我不卡卡| 99热销国产这里有精品| 18岁禁 茉莉成人久久| 色性综合| 久久久久久日韩| 久久中久文96| 精品一区二区三区18| 天天综合网在线91| 91青青在线视频| 99青青草国产视频| 久久一二三四五六七八九区区区| 久久噜噜噜精品国产亚洲综合| 免费一级视频特黄色大片| 亚洲情色91| 超碰在线日韩一区| 一区二区三区精品视频| 婷婷大香蕉| 99九九久久| 搡老女人老熟女91| 国产午夜福利合集| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产一区二区三区中文字幕| 爆乳免费黄网站| 大香蕉专区| 骚货操死你| 91美女視頻| 亚洲 中文 女同| 97碰碰日本乱偷人妻中文的| 欧美综合色综合| 大香蕉AV在线| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 人人操人人干网页| 99精品久久| 搞中出视频在线观看| 亚洲少妇综合在线播放| 国产又色又粗又黄又爽| 猛交交| 超碰在线91| 五月婷婷激情综合| 国产路线专区| 亚洲欧美中文日韩视频中国语| 太久视频| 欧美综合色站| 欧美十八禁导航成人| 男人的天堂 在线一区| 激情欧美日韩女同久久| 伊人991| 天天肏夜夜肏| 本道综合精品| 美女91在线| 亚洲.欧美.丝袜.中文.综合| 99综合视频一体| 国产精品熟女乱伦| 天天摸夜夜添无码小视频| 日韩一二三区| 女优视频第10页| 香蕉久久精品| 蜜色网色哟哟| 黑人娇小av在线播放| 亚洲中文字幕精品一区| 人夜夜精品网站香蕉嫩草| 色五月第四色| 日韩无码精品综合久久| 国产成人亚洲精品无码古代早漏男| 国产精品亚洲高清在线| 天天日老熟妇| 超碰久草| 深田咏美亚洲精品福利社| 色五月AV| 天天欧美欧美亚洲网| 国产啊v在线免费播放| 亚洲色图91欧美日韩| 青青草久久| 国产高清自拍视频| 亚洲18禁| 图片区小说区| 亚洲97| 又摸又舔在线观看网站| 综合色区偷拍| 九九九九九九九九九国产精品 | jizz啪啪| 91欧美综合| 99热在线只有精品| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 九九干| 欧美情色男人的天堂| 素人播放一区| 婷婷丁香五月天综合东京热| 9 1超碰九色| 国产精品 久久久精品一牛| 国产suv精品一区二区四区999| 人妻天天爽| 国产综合在线视频网站| 丁香激情五月| 久久精品无码专区| 亚洲男人天堂Av| 日日夜夜骑| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 免费一级毛片在线视频观看| 99国产天美| 性爱AV天堂| 九九九九九九九九九国产精品 | 男女啪啪网站免费视频| 色综合潮| 亚洲古典另类欧美在线| 国产精品天堂| 伊人伊人LD| 大香蕉伊人久久| 最新av中文字幕高清| 舔人妻中文免费视频| 日韩欧美成人大香蕉| 91成人精品在线播放| 久久大| 色制服丝袜夫妻av一区| 激情综合五| 精品久久久高清无码| 国语精品对白| 国产乱人妻精品入口| 三级三级三级日本99| 激情五月天插| 韩国一级婬片A片无码天美| 91劲爆| 国产成人在线观看网址| 色踪合AV| 91色鬼| 日本道久久综合色色| 人人模人人看| 97超级久久| 欧美大色交| 嫩草 人人网精品| 日本九九九九| 日韩乱伦影音先锋| 一区二区精品日韩欧美在线观看 | 日本色色视频网站| 熟妇色99| 欧美色交| 丝袜天堂网| 91天天爱| 97色欧州| 色婷婷六月丁香七月婷婷| 亚洲图片欧美91N| 午夜福利成人免费视频| 无码国产Av| 豆花视频操逼网址| 日本一区不卡| 嗯嗯啊啊好疼| 翔田千里AⅤHD无码| 四虎AV无码| 一级毛片久久久久久久女人18| 无码人妻系列少妇| 亚洲天堂一二| www.99中文字幕| 欧美大香蕉专区网| 日韩一级性爱无码| 老女人91| 五月天偷拍| 一本色道久久综合亚洲二区三区| 丁香五月天社区| 蜜臀99久久精品久久久懂爱| 亭亭丁香激情| 干干干天天| 无码免费精品高清| 鸥美插入视频| 嗯嗯啊啊用力视频免费| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 久久久精品电影| 精品蜜乳AV免费观看| 啊啊啊啊啊啊在线观看| 91无遮挡| 久久久久久99AV无码免费网站| 国产呦精品系列在线观看| 亚洲爽图| 色综合V| 18禁无码永久免费无限制| 一级日本牲交大片好爽在线看| 国产一区二区三区白丝| 日韩在线一区高清在线| 一起草日韩| 亚洲国产成人精品无码专区| 不卡啪啪视频| 天天干,夜夜爽| 艳美熟妇先锋一二三区| 九九久久久久久爱| 91日产欧美| 97操综合| 91综合网在线| 狠狠久久手机视频精品| 黄色AAAAAAAAAAA大片| 久草视频分类在线| 亚洲AV无码天美传媒一区| 黑人天8A∨高清网站| 91无码人妻| 日韩三级av片| 亚洲影院365| 亚洲αv一区二区三区| 人妻人人操| 青青操97| 亚州图片第一页| 久久久偷拍| 伊人超碰97| 欧美啪啪天堂| 欧美亚洲今日在线| 综合97| 一级婬片120分钟试看| 精品无码欧美三级| 青娱乐老司机视频| 91丨九色丨国产丨人妻在线| 久久欲| 无码天天操| 99九九精品| 97超碰美国| 国产精品密臀网在线观看| 天天综合网~91入口| 国产后入清纯| 久久久久久99AV无码免费网站| 亚洲怡春院| 日韩不卡网操逼中文字幕日韩| 国内精品999| 欧美中字二区| 2017大香蕉| 亚洲人码13| 热G综合热G中文| 欧美亚洲清纯| gogogo免费高清看中国国语 | 不卡超碰护士AV在线免费播放| 中文字幕人乱码中文字的预防方法| 亚洲天天自拍| 综合 欧美 亚洲 日本| 91亚洲人电影| 超碰97人人乐| 亚洲无码成人精品| 97干日韩| 2017天天操天天日| 上海一级黄片| 色九月综合| 欧美劲爆第一页| 成人福利视频网| 神马久久久久久久久久| 蜜臀久久99精品久久久久久无删减| 色久桃花影院在线观看| 欧美精品第四五页中文字幕在线观看| 成人一二三区| 久操不卡视频| 蜜桃狠狠色伊人亚洲综合| 日韩免费看在线黄色片| 五月天色图| 婷婷涩嫩草鲁丝久久午夜精品| 久久五月丁香| 日韩AV噜噜噜一区二区三区四区| 成人 日本A片无码8888| 密臀AV在线| 最近2018中文字幕在线高清第一页| 丁香五月综合| 女生看匆91网站| 国产又爽又黄| 综合网亚洲在线| 制服乱伦| 后入人妻无码| 2018色综合天天操| 天天综合网视频91| www…国产操逼| 色97欧美| 99热亚洲| 天天噜| 97超碰美国| 国产性爱强奸乱伦大全| 中文字幕一区二区三区人妻少妇在线| 在线亚洲欧美| 九九九九九九亚洲| 国产亚洲精品A在线观看下载| 蜜伊人色综合97| 老熟女乱伦一区| 久久超碰大香蕉| 色哟哟511老熟女| 天天日骚逼熟女| 爱射综合| 校园春色五月天| 国产有码一区| 中亚精品极乱| 日本日逼视频网| 国产人妻一区二区三区欧美毛片| 91搞逼视频| 色婷婷色99国产综合精品| 日韩钢筋无码高清啾啾啾| 精品国产91内射久久| 69久久久久久久久久久久久| 八人操人人摸人人看| 日韩色图 一区二区| 香蕉久久国产AV一区二区| 啊啊啊啊操死我| 亚洲中文人妻色| 综合五月婷婷亚洲一区| 啊啊啊好疼| 99热久| 亚洲国产成人精品久久久国产成人一区二区| 亚洲色堂免费视频| 老熟女乱伦一区| 91无码人妻| 五月丁香在线| 国产第12页| 青青青草原| 天天干天天操天天拍| 高清无码一区二区三区| 精品人妻一区二区三区蜜桃视频| 中文字幕精品一区二区精品| 自拍偷拍第26| 欧美色爱综合| 一本正道久久熟女| 亚洲色图欧美视频| 久久久久久久人妻丝袜| 国产十八禁视频| 天天插天天插| 精品国产人成在线| 国产白丝av| 91亚洲欧美综合高清在线 | 亚洲高清无码在线桃色| henhen91| 国产精品久久久九九九| 超91综合网| 一级特级aaaa毛片免费观看| 亚洲精品97久久| 最新9久久久9免费视频| 韩国女主播青草福利视频| 国产小u女在线观看| 亚洲伊人久久综合97| 全国男人天堂网| 亚州综合图片| 九九九久千久久激情蜜桃在线看 | 粉嫩绯色AV一区二区在线| 日本影视久久免费| 成人精品久久| 亚洲综合图片在线| 嫩草 人人网精品| 婷婷尹人大香蕉免费| 国产精品无套内谢| 欧美区亚洲区偷拍区| 综合 亚洲 欧美| 超碰 欧美| 亚洲色情在线影视| 久插综合| 久久一二区四| 9久综合网| 午夜丁香婷婷| 国产精选三级在线观看| 亚洲国产奇米影视久久| 极品销魂美女一区二区| 91色香| JuliaAnn丝袜熟女系列| 91精品在线播放| 欧美在线综合| 一区二区三区色综合| 青青草视频久久久久| 97人妻色| 亚洲春色激情小说| 日本三级韩国三级99| 婷婷久久五月| 国内精品久久久久影院亚洲| 亚洲一区二区三区四区视频| 亚洲一区二区三区播放在线| 久久这里只精品免费福利| 欧美性xxxxx狂欢| 97久久网| 日韩操啪| 激情小说日韩无码| 国产一区二区成人av在线播放| 日韩在线国产字幕| 2024黄色视频| 久久在线观看免费视频 | 97中文超碰| 亚洲综合网电影91| 久久久九97| 国产又黄又猛又粗又爽的网站| 欧美久久九九| 亚洲美女精品| 国产AV天美| 97精品综合久久网| 欧美日韩97在线| 天天综合欧美黑人| 欧美精品黑人猛交高潮| 毛片一区二区|