• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Matrix編譯器中飽和算術指令映射的設計與實現*

    2013-09-05 06:35:44淡孝強陳躍躍孫海燕辛乃軍
    計算機工程與科學 2013年8期
    關鍵詞:編譯器數據類型算術

    淡孝強,陳躍躍,孫海燕,陽 柳,羅 杰,辛乃軍,王 霽

    (國防科學技術大學計算機學院,湖南 長沙410073)

    1 引言

    當前,DSP芯片在多媒體、信號處理等領域中的應用越來越廣泛,由于嵌入式芯片功耗和成本的限制,DSP芯片對編譯器指令映射的精確性和高效性的要求也越來越高,同時選擇快速、有效、低成本的編譯器開發(fā)平臺也越來越重要。

    Matrix是一款面向軟基站的、自主指令集的高性能DSP,Matrix編譯器的開發(fā)平臺是gcc,它是一個開發(fā)運行在不同系統平臺的高效快速的開源的編譯系統。對于特定的目標體系結構,通過移植gcc可以開發(fā)出這個平臺的編譯系統,是一種快速、有效、低成本的方案。

    gcc目前只支持基于Fixed-point數據類型飽和算術指令映射。Fixed-point是一種精度介于整數和浮點之間的數據類型,有別于整數類型和浮點類型[1]。由于Matrix指令集的飽和指令是基于整數和浮點的,所以需要移植gcc,使其支持整數和浮點的飽和算術指令的映射。飽和算術指令使得數字信號處理算法更加準確、更加高效,是Matrix指令集中很重要的一種指令。對gcc進行移植,使得在Matrix編譯器支持飽和算術指令的映射。本文對gcc指令映射過程的分析以及實現飽和算術指令映射的思路,對于其他指令映射的實現具有一定的借鑒作用。

    本文第2節(jié)介紹了飽和算術的定義和特征;第3節(jié)介紹了gcc中指令映射的一般過程;第4節(jié)給出了飽和算術指令映射的實現過程;第5節(jié)描述了飽和加法指令映射實驗結果;第6節(jié)對全文總結。

    2 飽和算術簡介

    飽和算術使得一些算法更加準確、更加高效,尤其是在DSP算法中。例如:調整聲量可能導致聲音信號溢出,而飽和算術可以明顯減少對信號的扭曲。把兩個數的補碼形式相加,會導致環(huán)繞現象(wrap-around),這可能會對DSP系統的信噪比造成災難性結果,運用飽和算術則可以避免。

    飽和算術運算是一種值被限定在固定范圍內的運算操作,有最大值和最小值[2]。比如飽和加法操作:如果兩個數相加后的結果比最大值要大,那么最終的結果就等于最大值;如果相加后的結果比最小值要小,最終結果就等于最小值;如果相加后的結果在最大值和最小值之間,這就是最終的結果。對于這樣的C語言描述,gcc目前只能完成基于Fixed-point數據類型的映射。因此,在gcc中實現基于整數和浮點類型的飽和算術指令的映射會使得編譯器更加高效。

    3 gcc指令映射機制分析

    gcc的編譯流程是:詞法分析→語法分析→中間代碼生成→代碼優(yōu)化→代碼生成。詞法分析和語法分析稱之為前端,中間代碼生成和部分優(yōu)化稱之為中端,部分優(yōu)化、機器描述 MD(Machine Description)和代碼生成稱之為后端。

    3.1 前端處理過程

    在gcc內,前端預處理、詞法分析、語法分析三個過程統稱為解析過程。gcc前端的主要任務是對輸入的C代碼進行解析并記錄有效信息,形成抽象語法樹AST(Abstract Syntax Tree)。解析過程的依據是C標準,C標準在前端的信息可以分為基本詞匯符號和語法規(guī)則兩類。一般以hash表的形式把基本詞匯符號的信息組織起來,供解析過程查詢。語法規(guī)則實際是基本詞匯符號排列組合的規(guī)則,一般體現在語法分析過程中。前端大致分為兩個階段:預處理和詞法分析把輸入代碼轉換成gcc的內部表示(內碼),語法分析再根據內碼來建立抽象語法樹,兩個過程都伴隨著出錯處理。

    3.1.1 前端中的C標準基本詞匯符號

    C標準的基本詞匯符號可以分為字符集和標識符。字符集分為英文字母、阿拉伯數字和特殊符號。標識符包括保留字、預定義標識符、用戶定義標識符[3]。預處理器和詞法分析將對源代碼中的所有詞匯符號(token)進行分類解析,不同類的信息在gcc內部用不同的變量。輸入代碼中所有字符在gcc內部都有對應的內碼來表示。下面初步介紹gcc中的基本詞匯及其內部表示。

    所有的保留字定義在c-parser.c的一個結構體數組reswords[]中,這個數組的成員在解析器初始化的過程中將根據名字被索引到hash表中,以供解析時查找匹配。其內碼是一個枚舉數組中的值,一般形式為RID_*。對于用戶定義的標識符,一般解析為CPP_NAME。

    C中各種符號的定義。以“+”來說明定義過程?!埃钡膅cc內部表示CPP_PLUS是枚舉數組cpp_ttype(in cpplib.h)中的一員。CPP_PLUS包含在宏定義TTYPE_TABLE中。對輸入代碼進行分析時函數cpp_lex_direct會將外部表示“+”和內碼CPP_PLUS對應起來。其他的英文字母和阿拉伯數字包含在字符識別函數_cpp_lex_direct中?;驹~匯符號的信息在初始化時以靜態(tài)數組的形式被組織進hash表。詞法分析完成內外信息轉換過程之后,進入語法分析過程。根據本文需要,下面僅重點介紹語法分析中的數據類型。

    3.1.2 前端C數據類型

    基本的數據類型節(jié)點對于編譯器至關重要,是編譯器將高級語言精確而高效地映射到匯編語言的基礎。整型數據節(jié)點是C語言最基礎、最重要的部分,其使用頻率很高,必須保證對這些節(jié)點的訪問盡可能高效。因此,這些節(jié)點定義在全局數組integer_types[](in tree.h)中。

    內建節(jié)點的初始化過程實際上是對tree結構中許多子成員的賦值過程。tree結構是定義在tree.h中的聯合,其成員涵蓋了C語言的各種語法類型,因此tree結構十分龐雜,所以對tree結構的操作是通過函數和宏來進行的。

    前兩小節(jié)所介紹的基本詞匯字符和基本數據節(jié)點大多是以靜態(tài)形式存在的,而整個詞法語法分析會將這些信息串聯起來。

    3.1.3 前端分析過程簡介

    函數c_parse_file是前端對一個文件開始解析的入口。c_parser_declaration_or_fndef處理變量聲明和函數定義,在此過程將調用更底層的函數來對輸入的程序進行識別和分類并將信息記錄到相關的數據結構中。c_lex_one_token函數對一個字符進行分析,首先調用函數c_lex_with_flags來確定字符的type,_cpp_lex_direct在這里被進一步調用,使得輸入字符和它們的gcc內碼對應起來,比如,字符“+”將返回的type是CPP_PLUS。然后,根據得到的類型進行分類處理,CPP_NAME的case分支中包含了對標識符或者保留字的處理,保留字將被識別并用gcc內部的數據結構表示。其他的外部信息也由相應模塊來處理。

    外部信息表示成內碼之后進行語法解析。語法解析的主要任務是抽象語法樹的建立、出錯處理、符號表的建立。gcc中所有語法樹都定義在tree.def中[4]。在語法解析過程中,解析器會根據操作符的內部表示映射到相應的樹節(jié)點,如CPP_PLUS映射為PLUS_EXPR。更為復雜的語法樹建立是由tree.c中的build_*族函數來完成的。

    抽象語法樹是一種語言相關的中間語言表示IR(Intermediate Representation),為了方便對其進行優(yōu)化將進一步轉化成語言無關的中間語言表示(GIMPLE)。

    3.2 gcc中端分析

    GIMPLE IR是抽象語法樹的子集,兩者之間的不同之處就在于GIMPLE IR只含有順序和分支結構,其他的控制流都轉化成這兩種結構。GIMPLE階段最關鍵的步驟是GIMPLE轉化成RTL。GIMPLE是機器無關的,而RTL是機器相關的。GIMPLE到RTL的轉化過程在函數expand_expr中,此函數包含一個巨大的switchcase,每一個GIMPLE的節(jié)點都會映射到后端的標準名(SPN),這些標準名必須被編碼到gcc中去。在中端,標準名實際上是*_optab的一類變量。擴展到RTL的過程從函數聲明的頂部開始,深度優(yōu)先遍歷整個GIMPLE樹[5]。

    選擇了某個后端的標準名之后就進入到后端RTL生成過程了。

    3.3 后端RTL生成過程

    中端映射到標準名之后,gcc會自動根據模式(mode)去查找后端模板中是否有滿足條件的指令。所以,對于添加新的指令而言,標準名的定義和后端模板描述最值得關注,最后會在此基礎上簡要說明匹配過程以及最后的RTL生成。

    3.3.1 標準名的添加

    標準名的添加包括以下幾個方面:(1)在rtl.def文件中定義RTL操作符。(2)optabs.c中函數init_optabs對庫函數的初始化。(3)后端模板自動生成程序genopinit.c的修改,增加optabs成員,描述新操作下數據模式的映射規(guī)則。

    標準名添加之后,后端機器描述必須要使用該準名來描述指令,才能完成匹配。下面介紹機器描述。

    3.3.2 機器描述(MD)

    機器描述包括指令集、指令延遲、功能部件、流水線等[4]。機器描述MD是一個內容較豐富的部分,本文中只涉及到指令集的描述。在MD文件中描述指令集,gcc編譯生成CC1的過程會根據MD文件自動生成一系列的insn-*.c和insn-*.h文件,供編譯過程更有效地獲取機器相關的信息。自動生成的過程由一系列的gen*.c文件來完成[6]。

    在編譯生成CC1時,genemit.c文件會根據MD描述自動生成文件insn-emit.c,此文件集合了許多產生rtx的函數,這些函數在CC1運行C程序的時候使用。

    3.3.3 GIMPLE到RTL生成總結

    通過前面的描述,現在可以總結GIMPLE到RTL生成的過程。

    (1)目標無關的expand_*函數集完成GIMPLE到RTL的映射過程。

    (2)目標相關的gen_*函數集完成RTX的具體生成過程。gen_*函數由自動生成程序根據機器描述自動生成。

    (3)expand_*函數集和gen_*函數集的操作接口主要是:optab_table[]和insn_data[]。例如,針對CODE為PLUS的表達式,其調用過程為:首先找到PLUS對應的optab_table[code];接著根據正確的 mode來找到optab_table[code].handlers[mode].insn_code;再由insn_code找到insn_data[insn_code];最后insn_data[insn_code].genfun對應上insn-emit.c文件中的gen_addsi3函數,調用該函數生成合適的RTL。

    (4)經過RTL的優(yōu)化遍,最后匯編輸出。

    3.4 指令映射過程總結

    gcc內部指令映射的過程本質上是多種語言之間的轉化過程。首先是詞法分析將輸入的C代碼轉化成內部表示,語法分析在此基礎上建立AST,對AST進行簡化生成GIMPLE,經過優(yōu)化過程之后再映射到RTL,經過RTL優(yōu)化遍之后就是匯編輸出。這些中間語言都有相應的數據結構和變量來描述,它們是靜態(tài)的;gcc的編譯流程是由一系列重要的函數實現的,它們控制了中間語言之間的轉化,是動態(tài)的過程。所以,實現新的類型的指令映射,就是給中間表示增加靜態(tài)的變量成員,并控制相應函數的動態(tài)轉化過程。接下來將以飽和加法的實現為例來簡要介紹飽和算術在gcc中的設計與實現。

    4 飽和算術指令映射機制的實現

    gcc將高級語言映射到匯編語言的過程,本質上是幾種中間語言的轉化過程。因此,對于飽和這一新的數據類型,不同的中間語言需要增加描述它的詞匯,并在映射過程中控制中間語言之間的轉化過程,使之映射到正確的目標代碼。對于飽和屬性,仿照C語言中signed這個作為修飾作用的保留字,擴展C語言增加一個修飾保留字sat。針對這一擴展,在前端、中端、后端的中間語言中增加新的數據變量,并控制這些變量之間的轉化,完成映射過程。本節(jié)將以飽和加法指令的實現過程為例來實現上述思路。

    飽和加法的基本目標是:對C標準進行擴展,用sat來描述數據類型(類似于C保留字signed,修飾作用),那么sat int a,b,c;c=a+b;能夠映射到整數飽和有符號加法指令SADD32。

    4.1 前端設計與實現

    前端涉及的中間表示有兩種:詞法分析之后的內碼以及語法分析建立的AST。首先要在這兩種中間表示中增加新的成員,然后控制新成員在前端的轉化過程。

    4.1.1 前端增加新的保留字sat

    所有的保留字定義在c-parser.c的一個結構體數組reswords[]中,以保留字“char”為例作簡要說明:{“char”,RID_CHAR,0},成員一代表保留字在輸入代碼中的寫法;成員二是該保留字在gcc內部的表示,是一個枚舉數字的成員,定義在ccommon.h的枚舉數組rid[]中;第三個成員是一個數字,表示該保留字是為哪種C標準所有。

    (1)在c-parser.c的一個結構體數組reswords[]中,增加保留字"sat":{"sat",RID_SAT,0}。

    (2)c-common.h的枚舉中增加 RID_SAT。

    4.1.2 增加內建數據節(jié)點

    整數的內建數據節(jié)點定義在integer_types[](in tree.h)的全局數組中,而不像其它類型節(jié)點被放在哈希表里。這只是一個簡單的tree結構數組的聲明。函數build_common_tree_nodes和函數build_common_tree_nodes2完成了所有的內建數據節(jié)點的初始化過程。record_builtin_type把已經初始化的節(jié)點類型和它們的輸入名稱聯系起來。

    (1)在tree.h中增加sat_integer_type_node。

    #define sat_integer_type_node integer_types[itk_sat_int]枚舉integer_type_kind中增加itk_sat_int。(2)build_common_tree_nodes函數中增加對新增內建節(jié)點的初始化過程。

    sat_integer_type_node= make_signed_type(INT_TYPE_SIZE,1)

    (3)函數 make_signed_type是確定數據的有無符號屬性,在此函數中增加satp參數來判斷是否為飽和屬性。make_signed_type(INT_TYPE_SIZE,satp)函數體內增加代碼:

    if(satp)

    TYPE_SATURATING(type)=1;

    make_unsigned_type需要類似修改。調用這兩個函數的地方都要做出相應修改。

    (4)c_common_nodes_and_builtins的修改:用函數record_builtin_type把外部 C語法“sat int”與新增數據節(jié)點對應起來。

    4.1.3 前端解析過程移植

    詞法分析和語法分析過程都是在函數c_parser_declaration_or_fndef中進行的。

    specs是函數c_parser_declaration_or_fndef中記錄C聲明特征的變量,其中包括描述屬性的許多標志位,如有無符號,是否為long,是否是short等。函數declspecs_add_type會根據specs的信息并結合C標準來判斷不同保留字組合的合法性,不合法就報警告或者錯誤,合法就進一步完善specs的信息。記錄在specs中的數據類型的信息傳遞是通過函數finish_declspecs來完成的。根據specs中的信息可以判斷對于當前的一個變量a是一個什么類型的內建數據節(jié)點。

    (1)declspecs_add_type函數修改:

    case RID_SAT時修改使得sat int合法不報錯,并且記錄有效信息。

    (2)修改finish_declspecs使得新增加的節(jié)點被使用。case cts_int時增加一個飽和屬性的分支情形:

    specs→type= (specs→saturating_p?sat_integer_type_node:integer_type_node)

    4.2 中端設計與實現

    GIMPLE轉化成RTL首先是由樹節(jié)點(*_EXPR)結合機器模式信息映射到后端數組optabs[]的成員*_optab(SPN 包含在其中),再由*_optab中的信息找到后端生成RTL的函數gen_*。這個過程是用標準名聯系起來的。

    以c=a+b的轉化過程為例簡要說明。前端已經解析得到:(1)a、b、c為有符號的整數;(2)“+”的GIMPLE表示為PLUS_EXPR。由GIMPLE到RTL的轉化是由expand_*函數集來完成的。expand_expr_real_1函數包含加法操作的轉化過程,在此函數可以根據操作符的操作數情況做相應的轉化,可以轉化為其他的*_EXPR,也可以根據操作數來確定*_optab。加法的過程是進一步調用函數optab_for_tree_code才確定的,在這個函數里,可以根據加法的性質(有無符號,是否飽和)來選擇相應的*_optab。

    中端修改使得PLUS_EXPR能選擇新增的ssadd_optab,在函數optab_for_tree_code做以下修改:case PLUS_EXPR:時根據是否飽和、有無符號判斷返回對應的*_optab。

    4.3 后端設計與實現

    標準名的添加首先要分析*_optab,結合其內容來添加相應的定義。以加法為例來分析:

    (1)add_optab在tree.h被宏定義轉換成數組optab_table的一個成員。

    #define add_optab (&optab_table[OTI_add])

    (2)跟蹤查看optab_table[OTI_add]如圖1所示(有省略)。

    Figure 1 Standard pattern names in optab圖1 操作表中的標準名變量

    optab_table是一個結構體。code是一個RTL操作,定義在rtl.def:DEF_RTL_EXPR(PLUS,"plus","ee",RTX_COMM_ARITH)中,PLUS是optab_table中用到的值。

    libcall_basenam、libcall_gen是庫函數調用的接口信息,如果在后端模板中沒有匹配到合適的信息,這些信息將被用來匹配庫函數。這幾個成員的初始化是由optabs.c的函數init_optabs完成的。

    handlers是一個結構體數組,每一個成員代表某一個模式下后端是否有相應的指令來匹配,如果有,數組中insn_code的值的名稱就是操作和模式下的一個組合。例如,加法的整數(SI)模式為CODE_FOR_addsi3(3為操作數個數),如果沒有值就是CODE_FOR_nothing。這個數組是機器指令描述信息的體現。從上面的值可以看出,該加法只有整數(SI)和浮點單雙精度模式(SF、DF)有指令模板供匹配。程序genopinit.c自動將后端模板描述信息映射到optab_table的handlers數組中。genopinit.c中的數組optabs記錄了不同操作不同數據類型映射的規(guī)則,函數gen_insn會根據這些信息來完成映射。

    根據以上分析,做出如下修改:

    (1)rtl.def中新增飽和有符號加法的rtl操作符SS_PLUS;

    (2)新增ssadd_optab:#define ssadd_optab(&optab_table[OTI_ssadd]);

    (3)在enum optab_index中增加 OTI_ssadd;

    (4)修改init_optabs函數,使得ssadd_optab初始化(包括code和庫函數名稱的初始化);

    (5)修改genopinit.c中的數組optabs,使之建立后端整數飽和加法機器描述的自動映射過程;

    (6)機器描述中新增有符號飽和加法的擴展規(guī)則(define_expand)和指令描述(define_insn)。

    define_expand描述了中端GIMPILE向RTL的擴展規(guī)則。define_insn是一種機器描述構造的方式,用來為gcc新增標準名操作,描述機器指令。

    4.4 映射過程總結

    本節(jié)以飽和加法指令映射過程為例說明了本文飽和算術指令在gcc中的實現方案。首先對C語言擴展增加描述飽和屬性的保留字sat,在前端增加保留字的內碼表示,增加新的數據類型,在中端增加新的操作,在后端增加新的標準名以及新的機器描述。在完成靜態(tài)信息的添加的基礎上,進一步改變前端、中端函數的映射路徑,使得前端對飽和屬性數據的操作最終能映射到后端相應的機器描述上去,從而完成整個飽和加法的映射過程。

    與gcc已有的基于Fixed-point數據類型飽和算術指令映射比較,本文的飽和指令映射實現過程更加簡潔。原因在于Fixed-point是一種新的數據類型,為支持新的數據類型,需要在gcc中構建新的框架,這本身就是一個浩大的工程。本文是基于整數類型的飽和指令的實現,同時也借鑒了基于Fixed-point飽和指令映射的方法,方案實現的可操作性和復雜性就相對較低。與gcc已有飽和指令映射過程的不同點在于:C擴展的關鍵字不同,映射過程變量數據模式不同;映射過程相對單一簡潔。

    5 實驗結果

    根據上節(jié)描述的方案和過程,基于gcc-4.3.2版本實現了Matrix指令集中整數飽和加法的映射過程。gcc-4.3.2版本支持 Fixed-point數據類型飽和算術指令,不支持整數和浮點數據類型飽和算術指令映射。

    Figure 2 Generation of saturation addition instruction圖2 飽和加法指令映射實驗結果

    圖2 a是Matrix編譯器整數飽和加法的指令映射的示例。對于c=a+b的飽和加法程序,a、b、c均為整數類型,用關鍵字sat int來定義,表示通過Matrix編譯器編譯生成的匯編代碼中產生了預期的飽和加法指令SADD32。圖2b是gcc中支持的Fixed-point數據類型飽和加法指令映射示例。對于c=a+b的飽和加法程序,a、b、c均為Fixed-point類型,通過Matrix編譯器編譯會映射到代表Fixed-point類型加法的指令ADDF(Matrix指令集中不存在ADDF,為實驗對比添加)。

    未實現飽和算術的編譯器中,飽和加法的描述需要兩個嵌套的if-else結構才能實現。對于實現了飽和算術的Matrix編譯器,只需要在定義變量時給變量增加一個飽和屬性的保留字sat,編譯器就能映射到一條有符號飽和加法指令——SADD32指令。這樣的設計大大減輕了編譯器飽和算術指令映射的復雜度,映射更加準確,且提高了效率。

    6 結束語

    飽和算術指令使得數字信號處理算法更加準確、更加高效,是Matrix指令集中很重要的一種指令。gcc目前只支持基于Fixed-point數據類型的飽和算術指令映射。Matrix指令集的飽和指令是基于整數和浮點的,所以需要移植gcc使其支持整數和浮點的飽和算術指令的映射。

    本文首先針對飽和算術指令映射的實現,對gcc的一般加法指令映射過程從前端到后端做了針對性的分析,在此基礎上,設計并實現了一種基于C擴展關鍵字sat的飽和算術指令映射機制;然后基于Matrix編譯器實現了算術飽和指令的映射,并以飽和有符號的整數加法指令的映射為例介紹了本文提出的飽和算術指令映射方案具體的實現過程;最后的實驗結果驗證了實現策略和過程的正確性和簡潔性。本文對標準C的擴展方法也適用于對Embedded-C進行此類擴展;類似的策略和實現過程也可以用來實現其它的飽和算術指令的映射,對于其他類型指令的映射過程,有一定的借鑒作用。

    [1] http://gcc.gnu.org/wiki/FixedPointArithmetic.

    [2] http://en.wikipedia.org/wiki/Saturation_arithmetic.

    [3] Huang Wei-tong,Lu Ming-yu.C programming language[M].Beijing:Tsinghua University Press,2005.(in Chinese)

    [4] http://gcc.gnu.org/onlinedocs/gccint/.

    [5] Vichare A,Deshpande S.GCC 4.0.2—The implementation[EB/OL].[2008-10-15].http://www.iitb.ac.in.

    [6] Ren Shan-h(huán)ong,Zhao Ke-jia,Zhao Xiong-fang.The intermediate language and the back-end information translation in GCC[J].Computer Engineering & Science,1995,17(2):74-82.(in Chinese)

    附中文參考文獻:

    [3] 黃維通,魯明羽.C程序設計教程[M].北京:清華大學出版社,2005.

    [6] 任珊虹,趙克佳,趙雄芳.GCC的中間語言以及后端信息的轉換[J].計算機工程與科學,1995,17(2):74-82.

    猜你喜歡
    編譯器數據類型算術
    詳談Java中的基本數據類型與引用數據類型
    如何理解數據結構中的抽象數據類型
    數碼世界(2020年5期)2020-06-23 00:14:36
    基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設計
    算算術
    學算術
    小狗算算術
    做算術(外一則)
    讀寫算(中)(2015年12期)2015-11-07 07:25:01
    通用NC代碼編譯器的設計與實現
    編譯器無關性編碼在微控制器中的優(yōu)勢
    基于ARM嵌入式平臺的x86譯碼SOC架構設計
    大香蕉久久成人网| 久久精品国产99精品国产亚洲性色 | 亚洲精品一卡2卡三卡4卡5卡| 午夜精品在线福利| 亚洲自拍偷在线| 女同久久另类99精品国产91| 人人澡人人妻人| av福利片在线| 岛国视频午夜一区免费看| 男女午夜视频在线观看| 欧美久久黑人一区二区| 97超级碰碰碰精品色视频在线观看| 日韩大码丰满熟妇| 亚洲精品国产精品久久久不卡| 亚洲少妇的诱惑av| 97人妻天天添夜夜摸| 精品久久久久久久久久免费视频| 一进一出抽搐动态| 欧美成人一区二区免费高清观看 | 999精品在线视频| 亚洲色图综合在线观看| 欧美黄色淫秽网站| 亚洲av第一区精品v没综合| 国产精品久久久av美女十八| 两性午夜刺激爽爽歪歪视频在线观看 | av福利片在线| 久久久久久久精品吃奶| 精品乱码久久久久久99久播| av天堂在线播放| 亚洲国产精品合色在线| 啦啦啦韩国在线观看视频| 少妇的丰满在线观看| 别揉我奶头~嗯~啊~动态视频| 淫秽高清视频在线观看| 亚洲第一av免费看| 一二三四在线观看免费中文在| 可以在线观看毛片的网站| 久久久国产成人精品二区| 一本久久中文字幕| 日本a在线网址| 天堂动漫精品| 美女大奶头视频| 不卡一级毛片| 亚洲av成人一区二区三| 国产单亲对白刺激| 久久久久九九精品影院| 欧美在线一区亚洲| 亚洲av第一区精品v没综合| av视频免费观看在线观看| 99久久久亚洲精品蜜臀av| 亚洲一区中文字幕在线| 一级毛片精品| 国内久久婷婷六月综合欲色啪| 成人手机av| 精品国产乱码久久久久久男人| АⅤ资源中文在线天堂| 亚洲国产精品999在线| 亚洲五月色婷婷综合| 色综合婷婷激情| 亚洲欧美精品综合久久99| 成年人黄色毛片网站| 国产三级黄色录像| 亚洲国产看品久久| 日本黄色视频三级网站网址| 两个人看的免费小视频| 免费在线观看黄色视频的| 国产精品爽爽va在线观看网站 | 久久青草综合色| 欧美日韩一级在线毛片| 国产成人精品久久二区二区91| 欧美激情 高清一区二区三区| 老熟妇仑乱视频hdxx| 少妇熟女aⅴ在线视频| 黄色a级毛片大全视频| 日本撒尿小便嘘嘘汇集6| 丝袜美腿诱惑在线| 久久精品aⅴ一区二区三区四区| 搡老岳熟女国产| 色哟哟哟哟哟哟| 精品福利观看| 看片在线看免费视频| 老司机午夜福利在线观看视频| 亚洲 国产 在线| 亚洲欧洲精品一区二区精品久久久| 国产麻豆69| 亚洲一码二码三码区别大吗| 亚洲九九香蕉| 露出奶头的视频| 大陆偷拍与自拍| 亚洲av成人av| 村上凉子中文字幕在线| 精品国产国语对白av| 夜夜躁狠狠躁天天躁| 成人18禁在线播放| e午夜精品久久久久久久| 一区在线观看完整版| 国产精品久久久久久人妻精品电影| 一夜夜www| 性色av乱码一区二区三区2| 亚洲国产精品999在线| 成年版毛片免费区| 国产精品免费视频内射| 日韩av在线大香蕉| www.熟女人妻精品国产| 少妇 在线观看| 男人的好看免费观看在线视频 | 69精品国产乱码久久久| 午夜精品在线福利| 久久热在线av| 女性被躁到高潮视频| 九色亚洲精品在线播放| 国产精品乱码一区二三区的特点 | 精品少妇一区二区三区视频日本电影| 18禁观看日本| 国产三级黄色录像| 曰老女人黄片| 国产国语露脸激情在线看| 欧美黑人欧美精品刺激| 老司机深夜福利视频在线观看| 好男人在线观看高清免费视频 | 91字幕亚洲| 一级毛片精品| 国产单亲对白刺激| 在线天堂中文资源库| 黄色成人免费大全| tocl精华| 无遮挡黄片免费观看| √禁漫天堂资源中文www| av网站免费在线观看视频| 亚洲欧美日韩无卡精品| 一级毛片女人18水好多| 日韩大码丰满熟妇| 国产xxxxx性猛交| 亚洲va日本ⅴa欧美va伊人久久| 亚洲一卡2卡3卡4卡5卡精品中文| 悠悠久久av| 丁香六月欧美| 久久久久国内视频| 久久狼人影院| 亚洲午夜精品一区,二区,三区| 麻豆国产av国片精品| 国产精品免费一区二区三区在线| 亚洲三区欧美一区| 国产在线精品亚洲第一网站| 母亲3免费完整高清在线观看| 天天躁夜夜躁狠狠躁躁| 国产精品一区二区在线不卡| 母亲3免费完整高清在线观看| 一级a爱片免费观看的视频| 亚洲av成人一区二区三| 18禁黄网站禁片午夜丰满| 成人免费观看视频高清| 黄网站色视频无遮挡免费观看| 性欧美人与动物交配| 国产三级黄色录像| 国产亚洲精品久久久久久毛片| 国产成人啪精品午夜网站| 日本免费a在线| 午夜久久久久精精品| 一区二区日韩欧美中文字幕| 久久国产精品影院| 国产精品 欧美亚洲| 一本久久中文字幕| 欧美黑人欧美精品刺激| 久久国产乱子伦精品免费另类| 精品久久久久久久人妻蜜臀av | 欧美老熟妇乱子伦牲交| 丁香六月欧美| 操出白浆在线播放| 深夜精品福利| 精品一区二区三区视频在线观看免费| 亚洲第一av免费看| 精品国产超薄肉色丝袜足j| 少妇熟女aⅴ在线视频| www.精华液| 午夜免费观看网址| 国语自产精品视频在线第100页| 中亚洲国语对白在线视频| 在线观看免费视频日本深夜| 成人亚洲精品av一区二区| 日韩欧美三级三区| 在线av久久热| 久久天堂一区二区三区四区| 18禁黄网站禁片午夜丰满| 我的亚洲天堂| 精品久久久久久久毛片微露脸| 又紧又爽又黄一区二区| 一边摸一边抽搐一进一出视频| 美女国产高潮福利片在线看| 手机成人av网站| 亚洲人成网站在线播放欧美日韩| 欧美亚洲日本最大视频资源| 日韩免费av在线播放| 久久人人精品亚洲av| 日本 av在线| 亚洲av美国av| 免费高清视频大片| 国产一区二区在线av高清观看| 露出奶头的视频| 日韩视频一区二区在线观看| 国产片内射在线| 国产成人av教育| av片东京热男人的天堂| 亚洲第一欧美日韩一区二区三区| 中出人妻视频一区二区| 精品久久久久久成人av| 亚洲avbb在线观看| 久久国产精品人妻蜜桃| 高潮久久久久久久久久久不卡| 麻豆一二三区av精品| 超碰成人久久| 色婷婷久久久亚洲欧美| 一边摸一边抽搐一进一出视频| 麻豆成人av在线观看| 久久人人97超碰香蕉20202| 国产av在哪里看| 午夜福利,免费看| 成人免费观看视频高清| 欧美成人一区二区免费高清观看 | 欧美激情极品国产一区二区三区| 国产免费av片在线观看野外av| 啦啦啦免费观看视频1| 精品国产美女av久久久久小说| 女生性感内裤真人,穿戴方法视频| 午夜福利欧美成人| 嫩草影视91久久| 老汉色∧v一级毛片| 久久久久国产精品人妻aⅴ院| 亚洲自偷自拍图片 自拍| 国产熟女xx| 人妻丰满熟妇av一区二区三区| 久久热在线av| 淫妇啪啪啪对白视频| 国产精品野战在线观看| 伦理电影免费视频| 欧美一级毛片孕妇| 亚洲欧洲精品一区二区精品久久久| 国产激情久久老熟女| 亚洲一区高清亚洲精品| 国内精品久久久久精免费| 在线国产一区二区在线| 亚洲色图综合在线观看| 中文字幕精品免费在线观看视频| 老汉色∧v一级毛片| 久久亚洲精品不卡| 免费女性裸体啪啪无遮挡网站| 午夜福利视频1000在线观看 | 九色亚洲精品在线播放| 丝袜在线中文字幕| 99re在线观看精品视频| 色综合站精品国产| av网站免费在线观看视频| 日本vs欧美在线观看视频| 黄片播放在线免费| 熟妇人妻久久中文字幕3abv| 成人av一区二区三区在线看| 美女大奶头视频| 亚洲熟妇中文字幕五十中出| 免费看美女性在线毛片视频| 在线观看免费日韩欧美大片| 日韩一卡2卡3卡4卡2021年| 日韩一卡2卡3卡4卡2021年| 久久影院123| 国产日韩一区二区三区精品不卡| av中文乱码字幕在线| 成人av一区二区三区在线看| 国产精品乱码一区二三区的特点 | 亚洲一区二区三区色噜噜| 欧美精品啪啪一区二区三区| 成人国语在线视频| 性欧美人与动物交配| 成年女人毛片免费观看观看9| 精品日产1卡2卡| 一级毛片高清免费大全| 国产精品99久久99久久久不卡| 侵犯人妻中文字幕一二三四区| 日韩成人在线观看一区二区三区| 亚洲国产看品久久| 在线观看免费视频网站a站| 免费在线观看完整版高清| 午夜福利欧美成人| 久久香蕉国产精品| 亚洲av电影在线进入| 少妇裸体淫交视频免费看高清 | 大型黄色视频在线免费观看| 在线十欧美十亚洲十日本专区| 国产熟女xx| 97人妻天天添夜夜摸| 亚洲成人免费电影在线观看| 男人舔女人下体高潮全视频| 日韩欧美一区二区三区在线观看| 丰满的人妻完整版| 日本精品一区二区三区蜜桃| 日韩精品免费视频一区二区三区| 日本免费一区二区三区高清不卡 | 久久天堂一区二区三区四区| 男女做爰动态图高潮gif福利片 | 久久久久久人人人人人| 亚洲色图av天堂| 亚洲色图av天堂| 亚洲专区国产一区二区| 757午夜福利合集在线观看| 久久精品国产综合久久久| 欧美日本视频| 亚洲一区中文字幕在线| 国产精品一区二区精品视频观看| 亚洲精品在线美女| 午夜激情av网站| 午夜福利高清视频| 久久婷婷成人综合色麻豆| 最好的美女福利视频网| 国产在线观看jvid| 午夜福利一区二区在线看| 少妇被粗大的猛进出69影院| 国产高清视频在线播放一区| 女同久久另类99精品国产91| 成人特级黄色片久久久久久久| 精品人妻在线不人妻| 精品国产美女av久久久久小说| 免费在线观看完整版高清| 宅男免费午夜| 1024香蕉在线观看| 国产精品,欧美在线| 亚洲中文av在线| 极品教师在线免费播放| 国产精品日韩av在线免费观看 | 久久精品成人免费网站| 亚洲精品久久国产高清桃花| 亚洲国产欧美一区二区综合| 免费人成视频x8x8入口观看| 久久精品国产亚洲av高清一级| 精品久久久久久久毛片微露脸| 精品国产乱码久久久久久男人| 日韩高清综合在线| 视频在线观看一区二区三区| 后天国语完整版免费观看| 男人操女人黄网站| 日本在线视频免费播放| 久久影院123| 搡老熟女国产l中国老女人| 中文亚洲av片在线观看爽| 亚洲第一av免费看| 极品教师在线免费播放| 在线观看免费午夜福利视频| 中文字幕最新亚洲高清| 老司机深夜福利视频在线观看| 97碰自拍视频| 久久久久久国产a免费观看| 亚洲人成电影观看| 亚洲国产中文字幕在线视频| 99久久99久久久精品蜜桃| 久久婷婷成人综合色麻豆| 他把我摸到了高潮在线观看| 国产高清有码在线观看视频 | 久久九九热精品免费| 波多野结衣一区麻豆| 1024香蕉在线观看| 成人亚洲精品一区在线观看| 成年人黄色毛片网站| 国产精品久久电影中文字幕| 国产精品亚洲美女久久久| 老熟妇仑乱视频hdxx| 亚洲精品美女久久久久99蜜臀| 人成视频在线观看免费观看| 后天国语完整版免费观看| 可以在线观看的亚洲视频| 色综合欧美亚洲国产小说| 一区二区三区国产精品乱码| 国产精品98久久久久久宅男小说| 亚洲全国av大片| 亚洲久久久国产精品| 国产精品日韩av在线免费观看 | 国产一区二区三区在线臀色熟女| 欧美成狂野欧美在线观看| 日韩欧美在线二视频| www日本在线高清视频| 久久国产精品男人的天堂亚洲| 久久中文字幕人妻熟女| 国产国语露脸激情在线看| 欧美乱码精品一区二区三区| 日本五十路高清| 精品一区二区三区四区五区乱码| 欧美成人午夜精品| 嫩草影院精品99| 久久国产亚洲av麻豆专区| 美女午夜性视频免费| 香蕉国产在线看| 9191精品国产免费久久| 黑丝袜美女国产一区| 久久热在线av| 免费少妇av软件| 首页视频小说图片口味搜索| 国产一区二区三区视频了| 精品免费久久久久久久清纯| 不卡av一区二区三区| 亚洲av美国av| 亚洲成国产人片在线观看| 一区二区三区激情视频| www.www免费av| 中文字幕精品免费在线观看视频| 国产精品一区二区三区四区久久 | 午夜精品国产一区二区电影| 国产精品 国内视频| 黄色毛片三级朝国网站| 宅男免费午夜| 久久青草综合色| 美女午夜性视频免费| 日韩有码中文字幕| 国产av在哪里看| 热99re8久久精品国产| 久久欧美精品欧美久久欧美| 一级作爱视频免费观看| 女人高潮潮喷娇喘18禁视频| 狂野欧美激情性xxxx| 搡老熟女国产l中国老女人| 久久天堂一区二区三区四区| 欧美丝袜亚洲另类 | 欧美不卡视频在线免费观看 | 久久国产精品人妻蜜桃| 国产精品久久久av美女十八| 国产单亲对白刺激| 12—13女人毛片做爰片一| 高清黄色对白视频在线免费看| 亚洲欧洲精品一区二区精品久久久| 波多野结衣高清无吗| 最近最新免费中文字幕在线| 成人永久免费在线观看视频| 国产一区二区在线av高清观看| 怎么达到女性高潮| 婷婷六月久久综合丁香| av片东京热男人的天堂| 亚洲五月色婷婷综合| 在线观看午夜福利视频| 在线观看舔阴道视频| 久久久水蜜桃国产精品网| 国产成人免费无遮挡视频| 午夜免费观看网址| 一卡2卡三卡四卡精品乱码亚洲| 在线观看66精品国产| 亚洲五月婷婷丁香| 久久久久国产精品人妻aⅴ院| 国产一区二区三区在线臀色熟女| 757午夜福利合集在线观看| 免费高清在线观看日韩| 久久精品亚洲熟妇少妇任你| 亚洲av电影在线进入| 不卡av一区二区三区| 国产精品爽爽va在线观看网站 | x7x7x7水蜜桃| 巨乳人妻的诱惑在线观看| 中文字幕人妻熟女乱码| 亚洲国产欧美一区二区综合| 国产亚洲精品第一综合不卡| 母亲3免费完整高清在线观看| 在线观看免费视频日本深夜| 中亚洲国语对白在线视频| 999久久久精品免费观看国产| 在线观看午夜福利视频| 亚洲成人久久性| 一本综合久久免费| 乱人伦中国视频| 一边摸一边做爽爽视频免费| 国产av又大| 国产精品永久免费网站| 色婷婷久久久亚洲欧美| 国产男靠女视频免费网站| 亚洲欧美日韩另类电影网站| 免费搜索国产男女视频| 麻豆av在线久日| 在线观看午夜福利视频| 可以在线观看毛片的网站| 国产欧美日韩一区二区三区在线| 日韩欧美一区视频在线观看| 人人妻人人爽人人添夜夜欢视频| 午夜福利免费观看在线| 69精品国产乱码久久久| 精品第一国产精品| 超碰成人久久| 伊人久久大香线蕉亚洲五| 成人免费观看视频高清| x7x7x7水蜜桃| 精品高清国产在线一区| 日本欧美视频一区| 亚洲精华国产精华精| 中文字幕色久视频| 国产成+人综合+亚洲专区| 日韩欧美一区二区三区在线观看| 国产精品久久久久久人妻精品电影| 欧美午夜高清在线| 国产一区在线观看成人免费| 精品国产乱码久久久久久男人| 老司机福利观看| 亚洲五月色婷婷综合| 精品国产一区二区三区四区第35| 欧美最黄视频在线播放免费| 国产成人精品久久二区二区免费| 97人妻精品一区二区三区麻豆 | 国产精品免费视频内射| 国产xxxxx性猛交| 国产欧美日韩综合在线一区二区| 色播在线永久视频| 久久亚洲精品不卡| 操美女的视频在线观看| 久久精品亚洲熟妇少妇任你| 精品人妻在线不人妻| 中国美女看黄片| 国产97色在线日韩免费| 国产精品乱码一区二三区的特点 | 三级毛片av免费| 一级毛片高清免费大全| 亚洲国产精品sss在线观看| 日本三级黄在线观看| 一a级毛片在线观看| 国产精品一区二区免费欧美| 亚洲久久久国产精品| 咕卡用的链子| 叶爱在线成人免费视频播放| 一级黄色大片毛片| 又大又爽又粗| 人人妻,人人澡人人爽秒播| 国产成人一区二区三区免费视频网站| 亚洲国产精品999在线| 99久久精品国产亚洲精品| 日本 av在线| 美女扒开内裤让男人捅视频| 亚洲全国av大片| 美女高潮到喷水免费观看| 18禁观看日本| 国产av一区二区精品久久| 一个人免费在线观看的高清视频| av有码第一页| 亚洲视频免费观看视频| videosex国产| www.www免费av| 色尼玛亚洲综合影院| 久久精品91蜜桃| 18禁国产床啪视频网站| 国产欧美日韩一区二区精品| 国产成人av激情在线播放| 女人被躁到高潮嗷嗷叫费观| 国产三级黄色录像| 亚洲人成伊人成综合网2020| 国产亚洲精品综合一区在线观看 | 淫秽高清视频在线观看| 国产亚洲精品久久久久5区| 国产97色在线日韩免费| 中文字幕av电影在线播放| 人人妻,人人澡人人爽秒播| 国产精华一区二区三区| 欧美最黄视频在线播放免费| 国产精品久久久久久亚洲av鲁大| 99riav亚洲国产免费| 夜夜躁狠狠躁天天躁| 999久久久精品免费观看国产| 亚洲熟妇熟女久久| 一进一出抽搐动态| 国语自产精品视频在线第100页| 久久久国产欧美日韩av| 人人妻人人爽人人添夜夜欢视频| 日韩欧美免费精品| 99精品久久久久人妻精品| 亚洲中文日韩欧美视频| 国产野战对白在线观看| 亚洲七黄色美女视频| 国产成人av激情在线播放| 纯流量卡能插随身wifi吗| 精品久久久久久久毛片微露脸| 精品卡一卡二卡四卡免费| 国产精品久久视频播放| 岛国在线观看网站| 成人三级黄色视频| 国产一区二区在线av高清观看| 欧美成人性av电影在线观看| e午夜精品久久久久久久| 久久久久久久久免费视频了| 亚洲欧美激情在线| 深夜精品福利| 中文字幕人妻熟女乱码| 韩国av一区二区三区四区| 国产一区二区在线av高清观看| 老熟妇乱子伦视频在线观看| a在线观看视频网站| www.自偷自拍.com| 欧美黄色淫秽网站| 丝袜美足系列| 免费在线观看完整版高清| 久久精品91无色码中文字幕| 中出人妻视频一区二区| 老司机深夜福利视频在线观看| 韩国精品一区二区三区| 国产精品av久久久久免费| 亚洲第一欧美日韩一区二区三区| ponron亚洲| 无遮挡黄片免费观看| 99香蕉大伊视频| 亚洲片人在线观看| 亚洲av片天天在线观看| 国产成人影院久久av| 亚洲自拍偷在线| 亚洲在线自拍视频| 成人免费观看视频高清| 在线十欧美十亚洲十日本专区| 国产av一区二区精品久久| 在线观看午夜福利视频| 日本三级黄在线观看| 久久精品亚洲熟妇少妇任你| 亚洲第一青青草原| 国产成人精品在线电影| 老司机午夜福利在线观看视频| 777久久人妻少妇嫩草av网站| 亚洲国产毛片av蜜桃av| 中国美女看黄片| 国产aⅴ精品一区二区三区波| 国产主播在线观看一区二区| 丝袜美足系列|