• <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架構設計
    欧美色欧美亚洲另类二区| 亚洲成人免费电影在线观看| 国产亚洲精品综合一区在线观看| 欧美高清性xxxxhd video| 日本在线视频免费播放| 极品教师在线视频| 日韩 亚洲 欧美在线| 可以在线观看的亚洲视频| 午夜福利成人在线免费观看| 国模一区二区三区四区视频| 99国产综合亚洲精品| 午夜福利免费观看在线| 黄色女人牲交| 亚洲成人中文字幕在线播放| ponron亚洲| 好男人电影高清在线观看| 国产乱人视频| 日韩精品中文字幕看吧| 人人妻人人看人人澡| 国产在线男女| 国产在视频线在精品| 免费黄网站久久成人精品 | 中文字幕高清在线视频| 国产v大片淫在线免费观看| 极品教师在线免费播放| a级毛片a级免费在线| www.999成人在线观看| 神马国产精品三级电影在线观看| 国产欧美日韩精品一区二区| 又爽又黄a免费视频| 精品一区二区三区av网在线观看| 免费黄网站久久成人精品 | 久久久成人免费电影| 在线免费观看的www视频| 久久人人爽人人爽人人片va | 久久草成人影院| 又爽又黄无遮挡网站| 亚洲成a人片在线一区二区| 中文字幕久久专区| 成人欧美大片| 精品不卡国产一区二区三区| 久久国产乱子伦精品免费另类| 男女床上黄色一级片免费看| 毛片一级片免费看久久久久 | 狠狠狠狠99中文字幕| 简卡轻食公司| 老女人水多毛片| 好看av亚洲va欧美ⅴa在| 午夜两性在线视频| 村上凉子中文字幕在线| 有码 亚洲区| 99riav亚洲国产免费| 久久99热6这里只有精品| 日本在线视频免费播放| 国产在线男女| 欧美潮喷喷水| 国产精品久久久久久久久免 | 老师上课跳d突然被开到最大视频 久久午夜综合久久蜜桃 | 三级毛片av免费| 五月玫瑰六月丁香| 久久热精品热| 一个人看视频在线观看www免费| 99久久精品热视频| 网址你懂的国产日韩在线| 又黄又爽又刺激的免费视频.| 又黄又爽又刺激的免费视频.| 一进一出抽搐动态| 国产精品亚洲av一区麻豆| 国产美女午夜福利| 成人鲁丝片一二三区免费| 亚洲第一欧美日韩一区二区三区| 老司机福利观看| 99久久成人亚洲精品观看| 日日夜夜操网爽| 91狼人影院| 精品不卡国产一区二区三区| 一级a爱片免费观看的视频| 嫩草影院新地址| 人妻久久中文字幕网| 亚洲国产精品合色在线| 国产91精品成人一区二区三区| 日韩欧美精品免费久久 | 亚洲国产欧美人成| 亚洲精品456在线播放app | 久久婷婷人人爽人人干人人爱| 亚洲五月天丁香| 亚洲久久久久久中文字幕| 91在线观看av| 亚洲经典国产精华液单 | 欧美一区二区亚洲| av在线天堂中文字幕| 在线观看美女被高潮喷水网站 | 又爽又黄无遮挡网站| 亚洲不卡免费看| 精品久久久久久久人妻蜜臀av| 亚洲成av人片在线播放无| 一个人看视频在线观看www免费| 国产探花极品一区二区| 欧美最新免费一区二区三区 | 日本 av在线| 少妇人妻一区二区三区视频| 丰满的人妻完整版| 亚洲国产欧美人成| 18禁在线播放成人免费| 国产一区二区三区在线臀色熟女| 麻豆av噜噜一区二区三区| 天堂影院成人在线观看| 免费在线观看影片大全网站| 亚洲av第一区精品v没综合| 欧美极品一区二区三区四区| 亚洲色图av天堂| 国产精品久久久久久精品电影| 性色avwww在线观看| 亚洲av成人精品一区久久| 悠悠久久av| 国产黄a三级三级三级人| 中文字幕精品亚洲无线码一区| 可以在线观看毛片的网站| 在线天堂最新版资源| 国产欧美日韩精品亚洲av| 午夜激情福利司机影院| netflix在线观看网站| 久久国产乱子伦精品免费另类| 99国产精品一区二区蜜桃av| 中文在线观看免费www的网站| 日韩中文字幕欧美一区二区| 18禁在线播放成人免费| 老女人水多毛片| 国产爱豆传媒在线观看| 淫秽高清视频在线观看| 丰满人妻熟妇乱又伦精品不卡| 美女高潮喷水抽搐中文字幕| 一本久久中文字幕| 亚洲av中文字字幕乱码综合| 日韩精品青青久久久久久| 99热只有精品国产| 18禁裸乳无遮挡免费网站照片| 亚洲成人久久爱视频| 高清在线国产一区| 搞女人的毛片| 老司机深夜福利视频在线观看| 伦理电影大哥的女人| 欧美三级亚洲精品| 久久久久久久久大av| 偷拍熟女少妇极品色| 欧美成狂野欧美在线观看| 国产高清三级在线| 在线天堂最新版资源| 欧美黑人欧美精品刺激| 精品久久久久久久末码| 午夜福利成人在线免费观看| 少妇熟女aⅴ在线视频| 99久久久亚洲精品蜜臀av| 久久久久久久久久黄片| 九色成人免费人妻av| 国产精品久久久久久人妻精品电影| 男女视频在线观看网站免费| 精品无人区乱码1区二区| 国产在线精品亚洲第一网站| 亚洲专区国产一区二区| 一级黄色大片毛片| 日韩欧美国产一区二区入口| 成人国产一区最新在线观看| 免费电影在线观看免费观看| 我要搜黄色片| 欧美zozozo另类| 免费在线观看亚洲国产| 国产久久久一区二区三区| 欧美日本视频| 日本成人三级电影网站| 亚洲乱码一区二区免费版| 欧美精品国产亚洲| 啪啪无遮挡十八禁网站| aaaaa片日本免费| av专区在线播放| 精品国产亚洲在线| 美女黄网站色视频| 18美女黄网站色大片免费观看| 欧洲精品卡2卡3卡4卡5卡区| 国产熟女xx| 男女做爰动态图高潮gif福利片| 亚洲成av人片免费观看| 亚洲最大成人中文| 99热只有精品国产| 成熟少妇高潮喷水视频| 男人舔奶头视频| 男女视频在线观看网站免费| 在线播放无遮挡| 搡女人真爽免费视频火全软件 | 最好的美女福利视频网| 日韩欧美一区二区三区在线观看| 噜噜噜噜噜久久久久久91| 亚洲aⅴ乱码一区二区在线播放| 国产单亲对白刺激| 午夜日韩欧美国产| av在线蜜桃| 精品午夜福利在线看| 桃红色精品国产亚洲av| 亚洲国产日韩欧美精品在线观看| 免费av毛片视频| 中文字幕精品亚洲无线码一区| 成年版毛片免费区| 亚洲狠狠婷婷综合久久图片| 国产 一区 欧美 日韩| 国产精品久久久久久亚洲av鲁大| 中国美女看黄片| 18+在线观看网站| 九九久久精品国产亚洲av麻豆| 久久久国产成人免费| 老司机深夜福利视频在线观看| 日本精品一区二区三区蜜桃| 亚洲美女搞黄在线观看 | 欧美区成人在线视频| 噜噜噜噜噜久久久久久91| 99久久成人亚洲精品观看| 亚洲av成人不卡在线观看播放网| 欧美乱妇无乱码| 午夜日韩欧美国产| АⅤ资源中文在线天堂| 日本在线视频免费播放| 精品人妻视频免费看| 日韩高清综合在线| 淫妇啪啪啪对白视频| 久久久久久久亚洲中文字幕 | a级毛片免费高清观看在线播放| 在线免费观看不下载黄p国产 | 禁无遮挡网站| 51国产日韩欧美| 老师上课跳d突然被开到最大视频 久久午夜综合久久蜜桃 | 国产乱人伦免费视频| ponron亚洲| 国产精品一及| 十八禁人妻一区二区| 国产大屁股一区二区在线视频| 欧美日韩黄片免| 69人妻影院| 啦啦啦韩国在线观看视频| 男人舔女人下体高潮全视频| 国产成人av教育| 又紧又爽又黄一区二区| av视频在线观看入口| 午夜视频国产福利| 亚洲国产欧洲综合997久久,| 在线播放国产精品三级| 精品人妻视频免费看| 麻豆国产av国片精品| 天天一区二区日本电影三级| 我要看日韩黄色一级片| 99久久精品一区二区三区| 精品一区二区免费观看| 国产日本99.免费观看| 精品国产亚洲在线| 久久午夜福利片| 成年免费大片在线观看| 丰满乱子伦码专区| 在现免费观看毛片| 一个人看的www免费观看视频| 国产一区二区激情短视频| 国内久久婷婷六月综合欲色啪| 99国产极品粉嫩在线观看| 亚洲最大成人手机在线| 亚洲人成网站在线播放欧美日韩| 一个人免费在线观看电影| 中文字幕久久专区| 88av欧美| 国产在视频线在精品| 国产精品影院久久| 女人十人毛片免费观看3o分钟| 中文字幕免费在线视频6| 久久精品国产亚洲av涩爱 | 亚洲专区中文字幕在线| 搡女人真爽免费视频火全软件 | 久久久久久久久久成人| 美女大奶头视频| 亚洲黑人精品在线| 国产伦一二天堂av在线观看| 中文字幕熟女人妻在线| 人妻丰满熟妇av一区二区三区| 国内揄拍国产精品人妻在线| 色综合欧美亚洲国产小说| 在线观看av片永久免费下载| 男人和女人高潮做爰伦理| 婷婷亚洲欧美| 最近中文字幕高清免费大全6 | h日本视频在线播放| 国产一区二区三区在线臀色熟女| 天堂av国产一区二区熟女人妻| 久久久久久久久大av| 精品午夜福利视频在线观看一区| 午夜免费成人在线视频| 一级黄片播放器| 精品国产亚洲在线| 桃红色精品国产亚洲av| 国产亚洲精品久久久久久毛片| 欧美zozozo另类| 久久久久免费精品人妻一区二区| 五月玫瑰六月丁香| 乱码一卡2卡4卡精品| 最新中文字幕久久久久| 亚洲av不卡在线观看| 久久欧美精品欧美久久欧美| 欧美xxxx性猛交bbbb| 国产一区二区三区视频了| 精品久久久久久久末码| 亚洲色图av天堂| 天美传媒精品一区二区| 欧美乱色亚洲激情| 观看美女的网站| 日韩大尺度精品在线看网址| 五月玫瑰六月丁香| 天堂网av新在线| 高清日韩中文字幕在线| 在线播放国产精品三级| 免费av毛片视频| 一卡2卡三卡四卡精品乱码亚洲| 日本五十路高清| 精品熟女少妇八av免费久了| 久久久久久九九精品二区国产| 日韩高清综合在线| 全区人妻精品视频| 桃红色精品国产亚洲av| 亚洲 欧美 日韩 在线 免费| 国产亚洲av嫩草精品影院| 三级男女做爰猛烈吃奶摸视频| av视频在线观看入口| 91狼人影院| 亚洲最大成人av| 真人做人爱边吃奶动态| 午夜福利免费观看在线| 免费av观看视频| 哪里可以看免费的av片| 成人欧美大片| 欧美性猛交黑人性爽| 99热精品在线国产| 国产黄a三级三级三级人| 淫妇啪啪啪对白视频| 久久婷婷人人爽人人干人人爱| 97超级碰碰碰精品色视频在线观看| 欧美日韩综合久久久久久 | 欧美黑人欧美精品刺激| 91麻豆av在线| 神马国产精品三级电影在线观看| 中亚洲国语对白在线视频| 欧美最黄视频在线播放免费| 久久国产乱子伦精品免费另类| 欧美成人一区二区免费高清观看| 国产色婷婷99| 人人妻人人澡欧美一区二区| 国产精品久久久久久人妻精品电影| 亚洲三级黄色毛片| 精品人妻视频免费看| 精品一区二区三区视频在线| 国产极品精品免费视频能看的| 男插女下体视频免费在线播放| 欧美区成人在线视频| 国模一区二区三区四区视频| 熟女电影av网| 日本一二三区视频观看| 看十八女毛片水多多多| 观看美女的网站| 国产伦在线观看视频一区| 欧美性猛交╳xxx乱大交人| 小蜜桃在线观看免费完整版高清| 最近视频中文字幕2019在线8| 看片在线看免费视频| 长腿黑丝高跟| 99热精品在线国产| a级毛片免费高清观看在线播放| 精品久久久久久久人妻蜜臀av| 国产一区二区激情短视频| 美女被艹到高潮喷水动态| 亚洲国产欧洲综合997久久,| a级一级毛片免费在线观看| 国产91精品成人一区二区三区| 亚洲avbb在线观看| 久久欧美精品欧美久久欧美| 美女 人体艺术 gogo| 国产高清视频在线播放一区| 亚洲欧美日韩高清专用| 色哟哟哟哟哟哟| 真人一进一出gif抽搐免费| 人妻夜夜爽99麻豆av| 91久久精品国产一区二区成人| 国产精品亚洲美女久久久| 变态另类丝袜制服| 亚洲天堂国产精品一区在线| 日本 av在线| 欧美黄色淫秽网站| 欧美一区二区精品小视频在线| 俺也久久电影网| 亚洲国产精品合色在线| 我要搜黄色片| 丁香六月欧美| 黄片小视频在线播放| 色综合欧美亚洲国产小说| 亚洲 国产 在线| 亚洲精品影视一区二区三区av| 男女那种视频在线观看| 国产午夜精品久久久久久一区二区三区 | 欧美午夜高清在线| 国产久久久一区二区三区| 一a级毛片在线观看| 99国产精品一区二区三区| 久久6这里有精品| 欧美日韩瑟瑟在线播放| 在线观看午夜福利视频| 三级国产精品欧美在线观看| 午夜精品在线福利| 在线观看av片永久免费下载| 国产69精品久久久久777片| 亚洲成人中文字幕在线播放| 国内久久婷婷六月综合欲色啪| 久久久久久久久大av| 国产aⅴ精品一区二区三区波| 国产精品免费一区二区三区在线| 淫妇啪啪啪对白视频| 国产精品一区二区三区四区久久| 看黄色毛片网站| 乱人视频在线观看| 国产伦在线观看视频一区| 69人妻影院| 内射极品少妇av片p| 亚洲最大成人av| 国产午夜精品论理片| 岛国在线免费视频观看| 国产精品98久久久久久宅男小说| 午夜老司机福利剧场| 动漫黄色视频在线观看| 国产真实乱freesex| 人人妻,人人澡人人爽秒播| 一卡2卡三卡四卡精品乱码亚洲| 精品人妻1区二区| 久久草成人影院| 婷婷六月久久综合丁香| 99热这里只有是精品50| a级毛片a级免费在线| 亚洲,欧美,日韩| 岛国在线免费视频观看| 一区二区三区激情视频| 精品人妻熟女av久视频| 美女大奶头视频| 日本三级黄在线观看| 亚洲av美国av| 日韩欧美在线乱码| 色播亚洲综合网| 夜夜看夜夜爽夜夜摸| 能在线免费观看的黄片| 少妇人妻一区二区三区视频| 级片在线观看| 国产黄a三级三级三级人| 国产熟女xx| 国产高清有码在线观看视频| 国产精品亚洲一级av第二区| 麻豆成人午夜福利视频| 村上凉子中文字幕在线| 久久久久精品国产欧美久久久| 国产欧美日韩精品亚洲av| 日韩欧美在线乱码| 色播亚洲综合网| 亚洲第一区二区三区不卡| 欧美xxxx性猛交bbbb| 成人三级黄色视频| 乱码一卡2卡4卡精品| 亚洲国产欧美人成| 人妻制服诱惑在线中文字幕| 日韩高清综合在线| 国产三级中文精品| 亚洲男人的天堂狠狠| 精品午夜福利在线看| 9191精品国产免费久久| 69av精品久久久久久| 小说图片视频综合网站| 国产欧美日韩一区二区精品| 久久人人精品亚洲av| 蜜桃久久精品国产亚洲av| 免费电影在线观看免费观看| 国产精品人妻久久久久久| 丝袜美腿在线中文| 免费在线观看影片大全网站| 国产成人欧美在线观看| 最新中文字幕久久久久| 脱女人内裤的视频| 性色av乱码一区二区三区2| 国产视频一区二区在线看| 在现免费观看毛片| 日韩欧美精品v在线| 内地一区二区视频在线| 十八禁网站免费在线| 一本综合久久免费| 嫁个100分男人电影在线观看| 亚洲精品亚洲一区二区| 99热这里只有精品一区| 亚洲精品粉嫩美女一区| 黄色一级大片看看| 欧美成狂野欧美在线观看| 神马国产精品三级电影在线观看| 日韩欧美在线二视频| 国产av不卡久久| 好看av亚洲va欧美ⅴa在| 一区二区三区四区激情视频 | 午夜激情福利司机影院| 国产精品av视频在线免费观看| 久久久精品大字幕| 偷拍熟女少妇极品色| 日本成人三级电影网站| 成年人黄色毛片网站| 婷婷精品国产亚洲av在线| 久久精品国产亚洲av天美| 有码 亚洲区| 老司机深夜福利视频在线观看| 一边摸一边抽搐一进一小说| 嫩草影视91久久| 欧美高清性xxxxhd video| 久久久久久久久久黄片| 国产成+人综合+亚洲专区| 97热精品久久久久久| 久久热精品热| 欧美另类亚洲清纯唯美| 国产国拍精品亚洲av在线观看| 国产精品不卡视频一区二区 | 永久网站在线| 国产亚洲欧美98| 国产主播在线观看一区二区| 十八禁国产超污无遮挡网站| 床上黄色一级片| 午夜日韩欧美国产| 亚洲国产精品成人综合色| 国产午夜福利久久久久久| 无人区码免费观看不卡| 一区福利在线观看| 怎么达到女性高潮| 午夜福利免费观看在线| 婷婷精品国产亚洲av| av女优亚洲男人天堂| 亚洲国产精品sss在线观看| 精品人妻一区二区三区麻豆 | av天堂在线播放| 欧洲精品卡2卡3卡4卡5卡区| 国产精品三级大全| 少妇高潮的动态图| 精品熟女少妇八av免费久了| 少妇丰满av| 亚洲av成人精品一区久久| av在线天堂中文字幕| 亚洲精品一卡2卡三卡4卡5卡| 欧美日韩福利视频一区二区| 一级a爱片免费观看的视频| 日韩大尺度精品在线看网址| 天美传媒精品一区二区| 亚洲成人久久性| 精品99又大又爽又粗少妇毛片 | 亚洲人与动物交配视频| 久久精品国产自在天天线| 看免费av毛片| 亚洲七黄色美女视频| 动漫黄色视频在线观看| 男人狂女人下面高潮的视频| 日韩欧美一区二区三区在线观看| 精品一区二区三区av网在线观看| 一个人免费在线观看电影| 午夜福利在线观看免费完整高清在 | 日韩中文字幕欧美一区二区| 日本黄色片子视频| 亚洲av免费在线观看| 在线国产一区二区在线| 嫩草影院入口| 成人国产一区最新在线观看| 高清在线国产一区| 亚洲,欧美精品.| 日日夜夜操网爽| 亚洲性夜色夜夜综合| 熟女电影av网| 日本黄色片子视频| 在线观看一区二区三区| 欧美成人免费av一区二区三区| 深夜精品福利| 成人高潮视频无遮挡免费网站| 午夜精品在线福利| 午夜福利欧美成人| 国产av麻豆久久久久久久| 一个人观看的视频www高清免费观看| 每晚都被弄得嗷嗷叫到高潮| 精品日产1卡2卡| АⅤ资源中文在线天堂| 看十八女毛片水多多多| 非洲黑人性xxxx精品又粗又长| 婷婷六月久久综合丁香| netflix在线观看网站| 男插女下体视频免费在线播放| 国产真实伦视频高清在线观看 | 1000部很黄的大片| 国产久久久一区二区三区| 欧美性感艳星| 看十八女毛片水多多多| 桃色一区二区三区在线观看| 国产成年人精品一区二区| 免费无遮挡裸体视频| 亚洲欧美激情综合另类| 欧美精品国产亚洲| 国产精品1区2区在线观看.| 亚洲欧美激情综合另类| 欧美精品国产亚洲| av福利片在线观看| 亚洲精品456在线播放app | 国产视频内射| 高清日韩中文字幕在线| av专区在线播放| 性色avwww在线观看| 五月伊人婷婷丁香| 欧美高清成人免费视频www| 中亚洲国语对白在线视频| av在线观看视频网站免费| 看免费av毛片| 最后的刺客免费高清国语| 国产av在哪里看|