用于提供利用跨越和掩碼功能的向量加載和存儲(chǔ)的指令和邏輯的制作方法
【專利摘要】指令和邏輯提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)。在一些實(shí)施例中,響應(yīng)于指定加載的集合、目的地寄存器、掩碼寄存器、存儲(chǔ)器地址以及跨越長(zhǎng)度的指令,執(zhí)行單元讀取掩碼寄存器中的值,其中掩碼寄存器中的字段對(duì)應(yīng)于從該存儲(chǔ)器地址到存儲(chǔ)器中的數(shù)據(jù)元素的跨越長(zhǎng)度倍數(shù)。第一掩碼值指示該元素尚未從存儲(chǔ)器中被加載,而第二值指示該元素?zé)o需被加載或已經(jīng)被加載。對(duì)于具有第一值的每個(gè)字段,根據(jù)掩碼寄存器中的數(shù)據(jù)字段的位置來(lái)產(chǎn)生所述跨越長(zhǎng)度的相應(yīng)倍數(shù),以將來(lái)自存儲(chǔ)器的數(shù)據(jù)元素加載到相應(yīng)的目的地寄存器位置,并且將掩碼寄存器中的相應(yīng)值改變成第二值。這些指令可在錯(cuò)誤之后重啟。
【專利說(shuō)明】用于提供利用跨越和掩碼功能的向量加載和存儲(chǔ)的指令和邏輯
【技術(shù)領(lǐng)域】
[0001]本公開(kāi)涉及處理邏輯、微處理器以及相關(guān)的指令集體系結(jié)構(gòu)的領(lǐng)域,這些指令集體系結(jié)構(gòu)在被處理器或其他處理邏輯所執(zhí)行時(shí)運(yùn)行邏輯、數(shù)學(xué)或其他功能性操作。具體而言,本公開(kāi)涉及用于提供利用跨越(Stride)和掩碼功能的向量加載和/或存儲(chǔ)的指令和邏輯。
【背景技術(shù)】
[0002]目前的諸多處理器通常包括用于提供計(jì)算密集型操作但提供高度數(shù)據(jù)并行性的指令,這些指令可通過(guò)使用多種數(shù)據(jù)存儲(chǔ)設(shè)備的高效實(shí)現(xiàn)來(lái)使用,這些數(shù)據(jù)存儲(chǔ)設(shè)備諸如:單指令多數(shù)據(jù)(SMD)向量寄存器。
[0003]將應(yīng)用或軟件代碼向量化可包括使該應(yīng)用在特定系統(tǒng)或指令集體系結(jié)構(gòu)(諸如例如寬或大寬度向量體系結(jié)構(gòu))上編譯、安裝和/或運(yùn)行。對(duì)于一些應(yīng)用,由于向量寬度增加(例如用于諸如三維(3D)圖像渲染之類的操作),存儲(chǔ)器訪問(wèn)可能是復(fù)雜的、不一致的或不連續(xù)的。用于向量化進(jìn)程的存儲(chǔ)器可能被存儲(chǔ)在不連續(xù)或不鄰近的存儲(chǔ)器位置中。多種體系結(jié)構(gòu)可能需要額外的指令,這些額外的指令最小化了指令吞吐量,并顯著增加在執(zhí)行任何算術(shù)操作之前對(duì)寄存器中的數(shù)據(jù)進(jìn)行排序所需的時(shí)鐘周期的數(shù)量。
[0004]用于改善存儲(chǔ)器訪問(wèn)和對(duì)去往和來(lái)自更寬向量的數(shù)據(jù)進(jìn)行排序的機(jī)制可包括實(shí)現(xiàn)聚集和分散操作,以針對(duì)來(lái)自其他非本地和/或不連續(xù)的存儲(chǔ)器位置的數(shù)據(jù)產(chǎn)生本地連續(xù)的存儲(chǔ)器訪問(wèn)。聚集操作可從存儲(chǔ)裝置中的一組不連續(xù)或隨機(jī)的存儲(chǔ)器位置收集數(shù)據(jù),并將不同的數(shù)據(jù)組合到打包結(jié)構(gòu)中。分散操作可將打包結(jié)構(gòu)中的元素散開(kāi)至一組不連續(xù)或隨機(jī)的存儲(chǔ)器位置。其他機(jī)制可包括利用常規(guī)跨越的加載和存儲(chǔ),用于從存儲(chǔ)設(shè)備中的不連續(xù)存儲(chǔ)器位置的集合中收集數(shù)據(jù)并將數(shù)據(jù)組合到打包結(jié)構(gòu)中,或?qū)⒋虬Y(jié)構(gòu)中的元素分散到存儲(chǔ)設(shè)備中的不連續(xù)存儲(chǔ)器位置的集合中。這些存儲(chǔ)器位置中的一些可能未被高速緩存,或已經(jīng)被移出物理存儲(chǔ)器的分頁(yè)。
[0005]如果這些操作由于頁(yè)面錯(cuò)誤或一些其他原因而中斷,在一些體系結(jié)構(gòu)下,機(jī)器的狀態(tài)可能未保存,從而需要重復(fù)整個(gè)操作,而不是在該操作中斷的位置處重新開(kāi)始。由于在任一重復(fù)操作上可能需要多次存儲(chǔ)器訪問(wèn),所以可能需要許多時(shí)鐘周期來(lái)完成,任何后續(xù)的依賴算術(shù)操作必須等待該重復(fù)操作完成。這樣的延遲代表瓶頸,該瓶頸會(huì)限制例如從寬或大寬度向量體系結(jié)構(gòu)原本預(yù)期的性能優(yōu)勢(shì)。
[0006]到目前為止,尚未充分探索針對(duì)這樣的性能受限問(wèn)題和瓶頸的潛在解決方案。
【專利附圖】
【附圖說(shuō)明】
[0007]在附圖的各圖中通過(guò)示例而非限制地示出本發(fā)明。
[0008]圖1A是執(zhí)行用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的系統(tǒng)的一個(gè)實(shí)施例的框圖。[0009]圖1B是執(zhí)行用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的系統(tǒng)的另一實(shí)施例的框圖。
[0010]圖1C是執(zhí)行用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的系統(tǒng)的另一實(shí)施例的框圖。
[0011]圖2是執(zhí)行用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的處理器的一個(gè)實(shí)施例的框圖。
[0012]圖3A示出根據(jù)一個(gè)實(shí)施例的打包數(shù)據(jù)類型。
[0013]圖3B示出根據(jù)一個(gè)實(shí)施例的打包數(shù)據(jù)類型。
[0014]圖3C示出根據(jù)一個(gè)實(shí)施例的打包數(shù)據(jù)類型。
[0015]圖3D示出根據(jù)一個(gè)實(shí)施例的編碼成用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令。
[0016]圖3E示出根據(jù)另一實(shí)施例的編碼成用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令。
[0017]圖3F示出根據(jù)另一實(shí)施例的編碼成用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令。
[0018]圖3G示出根據(jù)另一實(shí)施例的編碼成用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令。
[0019]圖3H示出根據(jù)另一實(shí)施例的編碼成用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令。
[0020]圖4A示出用于執(zhí)行提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的處理器微體系結(jié)構(gòu)的一個(gè)實(shí)施例的要素。
[0021]圖4B示出用于執(zhí)行提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的處理器微體系結(jié)構(gòu)的另一實(shí)施例的要素。
[0022]圖5是用于執(zhí)行提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的處理器的一個(gè)實(shí)施例的框圖。
[0023]圖6是用于執(zhí)行提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例的框圖。
[0024]圖7是用于執(zhí)行提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的計(jì)算機(jī)系統(tǒng)的另一實(shí)施例的框圖。
[0025]圖8是用于執(zhí)行提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的計(jì)算機(jī)系統(tǒng)的另一實(shí)施例的框圖。
[0026]圖9是用于執(zhí)行提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的芯片上系統(tǒng)的一個(gè)實(shí)施例的框圖。
[0027]圖10是用于執(zhí)行提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的處理器的實(shí)施例的框圖。
[0028]圖11是提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的IP核開(kāi)發(fā)系統(tǒng)的一個(gè)實(shí)施例的框圖。
[0029]圖12示出提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的體系結(jié)構(gòu)仿真系統(tǒng)的一個(gè)實(shí)施例。[0030]圖13示出用于轉(zhuǎn)換提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的系統(tǒng)的一個(gè)實(shí)施例。
[0031]圖14示出用于提供利用跨越和掩碼功能的向量加載的過(guò)程的一個(gè)實(shí)施例的流程圖。
[0032]圖15示出用于提供利用跨越和掩碼功能的向量加載的過(guò)程的另一實(shí)施例的流程圖。
[0033]圖16示出用于提供利用跨越和掩碼功能的向量存儲(chǔ)的過(guò)程的一個(gè)實(shí)施例的流程圖。
[0034]圖17示出用于提供利用跨越和掩碼功能的向量存儲(chǔ)的過(guò)程的另一實(shí)施例的流程圖。
【具體實(shí)施方式】
[0035]下文描述了位于處理器、計(jì)算機(jī)系統(tǒng)或其他處理設(shè)備之內(nèi)或與處理器、計(jì)算機(jī)系統(tǒng)或其他處理設(shè)備相關(guān)聯(lián)的用于提供向量分散操作和/或聚集操作功能的指令和處理邏輯。
[0036]在一些實(shí)施例中,響應(yīng)于指定例如聚集和第二操作、目的地寄存器、操作數(shù)寄存器以及存儲(chǔ)器地址的指令,執(zhí)行單元讀取掩碼寄存器中的值,其中掩碼寄存器中的字段對(duì)應(yīng)于存儲(chǔ)器中的數(shù)據(jù)元素的索引寄存器中的偏移量索引。第一掩碼值指示該元素尚未從存儲(chǔ)器中被聚集,而第二值指示該元素?zé)o需被聚集或已經(jīng)被聚集。對(duì)于具有第一值的每個(gè)數(shù)據(jù)元素,將該數(shù)據(jù)元素從存儲(chǔ)器聚集到相應(yīng)的目的地寄存器位置中,并且將掩碼寄存器中的相應(yīng)值改成第二值。當(dāng)所有的掩碼寄存器字段具有第二值時(shí),利用目的地和操作數(shù)寄存器中的相應(yīng)數(shù)據(jù)來(lái)執(zhí)行第二操作以產(chǎn)生結(jié)果。在一些替代實(shí)施例中,響應(yīng)于指定例如分散和第一操作、目的地寄存器、操作數(shù)寄存器以及存儲(chǔ)器地址的指令,執(zhí)行單元可在使用或不使用掩碼寄存器的情況下執(zhí)行第一操作,并且掩碼值可用來(lái)指示所得的元素是否已被分散至存儲(chǔ)器,或者指示該元素?zé)o需被分散至存儲(chǔ)器或已經(jīng)被分散至存儲(chǔ)器。
[0037]在以下描述中,陳述了諸如處理邏輯、處理器類型、微體系結(jié)構(gòu)狀況、事件、啟用機(jī)制等多種特定細(xì)節(jié),以提供對(duì)本發(fā)明實(shí)施例的更透徹理解。然而,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)領(lǐng)會(huì),沒(méi)有這些具體細(xì)節(jié)也可實(shí)踐本發(fā)明。此外,沒(méi)有詳細(xì)示出一些公知的結(jié)構(gòu)、電路等等,以避免不必要地模糊本發(fā)明的實(shí)施例。
[0038]雖然下述的諸個(gè)實(shí)施例參照處理器來(lái)描述,但其他實(shí)施例也適用于其他類型的集成電路和邏輯設(shè)備。本發(fā)明的實(shí)施例的類似技術(shù)和教導(dǎo)可應(yīng)用于其它類型的電路或半導(dǎo)體器件,這些其它類型的電路或半導(dǎo)體器件也可受益于更高的流水線吞吐量和提高的性能。本發(fā)明的諸個(gè)實(shí)施例的教示適用于執(zhí)行數(shù)據(jù)操縱的任何處理器或機(jī)器。然而,本發(fā)明不限于執(zhí)行512位、256位、128位、64位、32位、或16位數(shù)據(jù)運(yùn)算的處理器或機(jī)器,并適用于執(zhí)行數(shù)據(jù)操縱或管理的任何處理器和機(jī)器。此外,下述描述提供了示例,并且附圖出于示意性目的示出了多個(gè)示例。然而,這些示例不應(yīng)該被理解為具有限制性目的,因?yàn)樗鼈儍H僅旨在提供本發(fā)明的諸個(gè)實(shí)施例的示例,而并非對(duì)本發(fā)明的實(shí)施例的所有可能實(shí)現(xiàn)方式進(jìn)行窮舉。
[0039]雖然下述的示例描述了在執(zhí)行單元和邏輯電路情況下的指令處理和分配,但本發(fā)明的其他實(shí)施例也可通過(guò)存儲(chǔ)在機(jī)器可讀有形介質(zhì)上的數(shù)據(jù)和/或指令來(lái)完成,這些數(shù)據(jù)和/或指令在被機(jī)器執(zhí)行時(shí)使得機(jī)器執(zhí)行與本發(fā)明至少一個(gè)實(shí)施例相一致的功能。在一個(gè)實(shí)施例中,與本發(fā)明的實(shí)施例相關(guān)聯(lián)的功能被具體化在機(jī)器可執(zhí)行指令中。這些指令可用來(lái)使通過(guò)這些指令編程的通用處理器或?qū)S锰幚砥鲌?zhí)行本發(fā)明的步驟。本發(fā)明的諸個(gè)實(shí)施例也可以作為計(jì)算機(jī)程序產(chǎn)品或軟件來(lái)提供,該計(jì)算機(jī)程序產(chǎn)品或軟件可包括其上存儲(chǔ)有指令的機(jī)器或計(jì)算機(jī)可讀介質(zhì),這些指令可被用來(lái)對(duì)計(jì)算機(jī)(或其他電子設(shè)備)進(jìn)行編程來(lái)執(zhí)行根據(jù)本發(fā)明的實(shí)施例的一個(gè)或多個(gè)操作。另選地,本發(fā)明的諸個(gè)實(shí)施例的這些步驟可由包含用于執(zhí)行這些步驟的固定功能邏輯的專用硬件組件來(lái)執(zhí)行,或由經(jīng)編程的計(jì)算機(jī)組件以及固定功能硬件組件的任何組合來(lái)執(zhí)行。
[0040]被用于對(duì)邏輯進(jìn)行編程以執(zhí)行本發(fā)明的諸個(gè)實(shí)施例的指令可被存儲(chǔ)在系統(tǒng)中的存儲(chǔ)器(諸如,DRAM、高速緩存、閃存、或其他存儲(chǔ)器)內(nèi)。進(jìn)一步的,指令可經(jīng)由網(wǎng)絡(luò)或其他計(jì)算機(jī)可讀介質(zhì)來(lái)分發(fā)。因此,計(jì)算機(jī)可讀介質(zhì)可包括用于以機(jī)器(諸如,計(jì)算機(jī))可讀的格式存儲(chǔ)或發(fā)送信息的任何機(jī)制,但不限于:磁盤(pán)、光盤(pán)、致密盤(pán)只讀存儲(chǔ)器(CD-ROM)、磁光盤(pán)、只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、可擦除可編程只讀存儲(chǔ)器(EPR0M)、電可擦除可編程只讀存儲(chǔ)器(EEPR0M)、磁卡或光卡、閃存、或在經(jīng)由互聯(lián)網(wǎng)通過(guò)電、光、聲、或其他形式的傳播信號(hào)(諸如,載波、紅外信號(hào)、數(shù)字信號(hào)等)發(fā)送信息中所用的有形機(jī)器可讀存儲(chǔ)器。因此,計(jì)算機(jī)可讀介質(zhì)包括用于存儲(chǔ)或發(fā)送機(jī)器(例如,計(jì)算機(jī))可讀形式的電子指令或信息的任何類型的有形機(jī)器可讀介質(zhì)。
[0041]設(shè)計(jì)會(huì)經(jīng)歷多個(gè)級(jí),從創(chuàng)新到模擬到制造。表示設(shè)計(jì)的數(shù)據(jù)可用多種方式來(lái)表示該設(shè)計(jì)。首先,如模擬中將有用的,可使用硬件描述語(yǔ)言或其他功能性描述語(yǔ)言來(lái)表示硬件。此外,具有邏輯和/或晶體管門(mén)電路的電路級(jí)模型可在設(shè)計(jì)流程的其他級(jí)產(chǎn)生。此外,大多數(shù)設(shè)計(jì)在某些級(jí)都達(dá)到表示硬件模型中多種設(shè)備的物理配置的數(shù)據(jù)水平。在使用常規(guī)半導(dǎo)體制造技術(shù)的情況下,表示硬件模型的數(shù)據(jù)可以是在不同掩模層上對(duì)用于生成集成電路的掩模指示不同特征的存在與否的數(shù)據(jù)。在任何的設(shè)計(jì)表示中,數(shù)據(jù)可被存儲(chǔ)在任何形式的機(jī)器可讀介質(zhì)中。存儲(chǔ)器或磁/光存儲(chǔ)器(諸如,盤(pán))可以是存儲(chǔ)信息的機(jī)器可讀介質(zhì),這些信息是經(jīng)由光學(xué)或電學(xué)波來(lái)發(fā)送的,這些光學(xué)或電學(xué)波被調(diào)制或以其他方式生成以傳送這些信息。當(dāng)發(fā)送指示或承載代碼或設(shè)計(jì)的電學(xué)載波時(shí),執(zhí)行電信號(hào)的復(fù)制、緩沖或重傳情況時(shí),制作一個(gè)新的副本。因此,通信提供商或網(wǎng)絡(luò)提供商會(huì)在有形機(jī)器可讀介質(zhì)上至少臨時(shí)地存儲(chǔ)具體化本發(fā)明的諸個(gè)實(shí)施例的技術(shù)的物品(諸如,編碼在載波中的信息)。
[0042]在現(xiàn)代處理器中,多個(gè)不同執(zhí)行單元被用于處理和執(zhí)行多種代碼和指令。并不是所有指令都被同等地創(chuàng)建,因?yàn)槠渲杏幸恍└斓乇煌瓿啥硪恍┬枰鄠€(gè)時(shí)鐘周期來(lái)完成。指令的吞吐量越快,則處理器的總體性能越好。因此,使大量指令盡可能快地執(zhí)行將會(huì)是有利的。然而,某些指令具有更大的復(fù)雜度,并需要更多的執(zhí)行時(shí)間和處理器資源。例如,存在浮點(diǎn)指令、加載/存儲(chǔ)操作、數(shù)據(jù)移動(dòng)等等。
[0043]因?yàn)楦嗟挠?jì)算機(jī)系統(tǒng)被用于互聯(lián)網(wǎng)、文本以及多媒體應(yīng)用,所以逐漸地引進(jìn)更多的處理器支持。在一個(gè)實(shí)施例中,指令集可與一個(gè)或多個(gè)計(jì)算機(jī)體系結(jié)構(gòu)相關(guān)聯(lián),一個(gè)或多個(gè)計(jì)算機(jī)體系結(jié)構(gòu)包括數(shù)據(jù)類型、指令、寄存器體系結(jié)構(gòu)、尋址模式、存儲(chǔ)器體系結(jié)構(gòu)、中斷和異常處理、外部輸入輸出(I/o)。
[0044]在一個(gè)實(shí)施例中,指令集體系結(jié)構(gòu)(ISA)可由一個(gè)或更多微體系結(jié)構(gòu)來(lái)執(zhí)行,微體系結(jié)構(gòu)包括用于實(shí)現(xiàn)一個(gè)或多個(gè)指令集的處理器邏輯和電路。相應(yīng)地,具有不同微體系結(jié)構(gòu)的諸個(gè)處理器可共享公共指令集的至少一部分。例如,INTEL?奔騰四(Pentium4)處理器、Intel?酷睿(Core?)處理器、以及來(lái)自加利福尼亞州桑尼威爾(Sunnyvale)的超微半導(dǎo)體有限公司(Advanced Micro Devices, Inc.)的諸多處理器執(zhí)行幾乎相同版本的x86指令集(在更新的版本中加入了一些擴(kuò)展),但具有不同的內(nèi)部設(shè)計(jì)。類似地,由其他處理器開(kāi)發(fā)公司(諸如,ARM控股有限公司、MIPS或它們的授權(quán)方或兼容方)所設(shè)計(jì)的諸多處理器可共享至少一部分公共指令集,但可包括不同的處理器設(shè)計(jì)。例如,ISA的相同寄存器體系結(jié)構(gòu)在不同的微體系結(jié)構(gòu)中可使用新的或已知的技術(shù)以不同方法來(lái)實(shí)現(xiàn),包括專用物理寄存器、使用寄存器重命名機(jī)制(諸如,使用寄存器別名表RAT、重排序緩沖器ROB、以及隱退寄存器文件)的一個(gè)或多個(gè)動(dòng)態(tài)分配物理寄存器。在一個(gè)實(shí)施例中,寄存器可包括:可由軟件編程者尋址或不可尋址的一個(gè)或多個(gè)寄存器、寄存器體系結(jié)構(gòu)、寄存器文件、或其他寄存器
口 O
[0045]在一個(gè)實(shí)施例中,指令可包括一個(gè)或多個(gè)指令格式。在一個(gè)實(shí)施例中,指令格式可指示多個(gè)字段(位的數(shù)目、位的位置等)以特別指定將要被執(zhí)行的操作以及將要被執(zhí)行的操作的操作數(shù)。一些指令格式可進(jìn)一步被指令模板(或子格式)所細(xì)分定義。例如,給定指令格式的指令模板可被定義為具有指令格式字段的不同的子集,和/或被定義為具有不同解釋的給定字段。在一個(gè)實(shí)施例中,使用指令格式(并且,如果定義過(guò),則以該指令格式的一個(gè)給定指令模板)來(lái)表示指令,并且該指令指定或指示操作以及該操作將操作的操作數(shù)。
[0046]科學(xué)應(yīng)用、金融應(yīng)用、自動(dòng)向量化通用應(yīng)用、RMS (識(shí)別、挖掘和合成)應(yīng)用以及視覺(jué)和多媒體應(yīng)用(諸如,2D/3D圖形、圖像處理、視頻壓縮/解壓縮、語(yǔ)音識(shí)別算法和音頻處理)可能需要對(duì)大量數(shù)據(jù)項(xiàng)執(zhí)行相同的操作。在一個(gè)實(shí)施例中,單指令多數(shù)據(jù)(SMD)指的是使得處理器在多個(gè)數(shù)據(jù)元素上執(zhí)行一操作的一種類型的指令。SMD技術(shù)可被用于處理器中,這些處理器將寄存器中的諸個(gè)位(bit)邏輯地劃分入多個(gè)固定大小或可變大小的數(shù)據(jù)元素,每個(gè)數(shù)據(jù)元素表示單獨(dú)的值。例如,在一個(gè)實(shí)施例中,64位寄存器中的諸個(gè)位可被組織為包含四個(gè)單獨(dú)的16位數(shù)據(jù)元素的源操作數(shù),每個(gè)數(shù)據(jù)元素表示單獨(dú)的16位值。該數(shù)據(jù)類型可被稱為“打包”數(shù)據(jù)類型或“向量”數(shù)據(jù)類型,并且該數(shù)據(jù)類型的操作數(shù)被稱為打包數(shù)據(jù)操作數(shù)或向量操作數(shù)。在一個(gè)實(shí)施例中,打包數(shù)據(jù)項(xiàng)或向量可以是存儲(chǔ)在單個(gè)寄存器中的打包數(shù)據(jù)元素的序列,并且打包數(shù)據(jù)操作數(shù)或向量操作數(shù)可以是SMD指令(或“打包數(shù)據(jù)指令”或“向量指令”)的源操作數(shù)或目的地操作數(shù)。在一個(gè)實(shí)施例中,SIMD指令指定了將要對(duì)兩個(gè)源向量操作數(shù)執(zhí)行的單個(gè)向量操作,以生成具有相同或不同大小的、具有相同或不同數(shù)量的數(shù)據(jù)元素的、具有相同或不同數(shù)據(jù)元素次序的目的地向量操作數(shù)(也被稱為結(jié)果向量操作數(shù))。
[0047]諸如由Intel?酷睿(Core?)處理器(具有包括x86、MMX?、流SMD擴(kuò)展(SSE)、SSE2、SSE3、SSE4.1、SSE4.2指令的指令集)、ARM處理器(諸如,ARM Cortex?處理器族,具有包括向量浮點(diǎn)(VFP)和/或NEON指令的指令集)、MIPS處理器(諸如,中國(guó)科學(xué)院計(jì)算機(jī)技術(shù)研究所(ICT)開(kāi)發(fā)的龍芯處理器族)所使用的SMD技術(shù)之類的SMD技術(shù)在應(yīng)用性能上帶來(lái)了極大的提高(Core?和MMX?是加利福尼亞州圣克拉拉市的英特爾公司的注冊(cè)商標(biāo)或商標(biāo))。
[0048]在一個(gè)實(shí)施例中,目的地寄存器/數(shù)據(jù)和源寄存器/數(shù)據(jù)是表示對(duì)應(yīng)數(shù)據(jù)或操作的源和目的地的通用術(shù)語(yǔ)。在一些實(shí)施例中,它們可由寄存器、存儲(chǔ)器或具有與所示出的那些名稱或功能不同的名稱或功能的其他存儲(chǔ)區(qū)域所實(shí)現(xiàn)。例如,在一個(gè)實(shí)施例中,“DEST1”可以是臨時(shí)存儲(chǔ)寄存器或其他存儲(chǔ)區(qū)域,而“SRC1”和“SRC2”是第一和第二源存儲(chǔ)寄存器或其他存儲(chǔ)區(qū)域,等等。在其他實(shí)施例中,SRC和DEST存儲(chǔ)區(qū)域中的兩個(gè)或更多區(qū)域可對(duì)應(yīng)于相同存儲(chǔ)區(qū)域中的不同數(shù)據(jù)存儲(chǔ)元素(例如,SIMD寄存器)。在一個(gè)實(shí)施例中,例如通過(guò)將對(duì)第一和第二源數(shù)據(jù)執(zhí)行的操作的結(jié)果寫(xiě)回至兩個(gè)源寄存器中作為目的地寄存器的那個(gè)寄存器,源寄存器中的一個(gè)也可以作為目的地寄存器。
[0049]圖1A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例性計(jì)算機(jī)系統(tǒng)的框圖,該計(jì)算機(jī)系統(tǒng)被形成為具有包括執(zhí)行單元以執(zhí)行指令的處理器。根據(jù)本發(fā)明,諸如根據(jù)在此所描述的實(shí)施例,系統(tǒng)100包括諸如處理器102之類的組件,以采用包括邏輯的執(zhí)行單元來(lái)執(zhí)行算法以處理數(shù)據(jù)。系統(tǒng)100代表基于可從美國(guó)加利福尼亞州圣克拉拉市的英特爾公司獲得的PENTIUMK IH>PENTIUMl<: 4、Xeont' Itanium"、XScaletm 和 / 或 StrongARMtm 微處理器的處理系統(tǒng),不過(guò)也可使用其它系統(tǒng)(包括具有其它微處理器的PC、工程工作站、機(jī)頂盒等)。在一個(gè)實(shí)施例中,樣本系統(tǒng)100可執(zhí)行可從美國(guó)華盛頓州雷蒙德市的微軟公司買(mǎi)到的WINDOWStm操作系統(tǒng)的一個(gè)版本,不過(guò)也可使用其它操作系統(tǒng)(例如UNIX和Linux)、嵌入式軟件、和/或圖形用戶界面。因此,本發(fā)明的各實(shí)施例不限于硬件和軟件的任何具體組合。
[0050]實(shí)施例不限于計(jì)算機(jī)系統(tǒng)。本發(fā)明的替換實(shí)施例可被用于其他設(shè)備,諸如手持式設(shè)備和嵌入式應(yīng)用。手持式設(shè)備的一些示例包括:蜂窩電話、互聯(lián)網(wǎng)協(xié)議設(shè)備、數(shù)碼相機(jī)、個(gè)人數(shù)字助理(PDA)、手持式PC。嵌入式應(yīng)用可包括:微控制器、數(shù)字信號(hào)處理器(DSP)、芯片上系統(tǒng)、網(wǎng)絡(luò)計(jì)算機(jī)(NetPC)、機(jī)頂盒、網(wǎng)絡(luò)中樞、廣域網(wǎng)(WAN)交換機(jī)、或可執(zhí)行參照至少一個(gè)實(shí)施例的一個(gè)或多個(gè)指令的任何其他系統(tǒng)。
[0051]圖1A是計(jì)算機(jī)系統(tǒng)100的框圖,計(jì)算機(jī)系統(tǒng)100被形成為具有處理器102,處理器102包括一個(gè)或多個(gè)執(zhí)行單元108以執(zhí)行算法,以執(zhí)行根據(jù)本發(fā)明的一個(gè)實(shí)施例的至少一個(gè)指令。參照單處理器桌面或服務(wù)器系統(tǒng)來(lái)描述了一個(gè)實(shí)施例,但替代實(shí)施例可被包括在多處理器系統(tǒng)中。系統(tǒng)100是“中樞”系統(tǒng)體系結(jié)構(gòu)的示例。計(jì)算機(jī)系統(tǒng)100包括處理器102以處理數(shù)據(jù)信號(hào)。處理器102可以是復(fù)雜指令集計(jì)算機(jī)(CISC)微處理器、精簡(jiǎn)指令集計(jì)算(RISC)微處理器、超長(zhǎng)指令字(VLIW)微處理器、實(shí)現(xiàn)指令集組合的處理器或任意其它處理器設(shè)備(諸如數(shù)字信號(hào)處理器)。處理器102耦合至處理器總線110,處理器總線110可在處理器102和系統(tǒng)100內(nèi)的其他組件之間傳輸數(shù)據(jù)信號(hào)。系統(tǒng)100的諸個(gè)元素執(zhí)行本領(lǐng)域所熟知的常規(guī)功能。
[0052]在一個(gè)實(shí)施例中,處理器102包括第一級(jí)(LI)內(nèi)部高速緩存存儲(chǔ)器104。取決于體系結(jié)構(gòu),處理器102可具有單個(gè)內(nèi)部高速緩存或多級(jí)內(nèi)部高速緩存?;蛘撸诹硪粋€(gè)實(shí)施例中,高速緩存存儲(chǔ)器可位于處理器102的外部。其他實(shí)施例也可包括內(nèi)部高速緩存和外部高速緩存的組合,這取決于特定實(shí)現(xiàn)和需求。寄存器文件106可在多個(gè)寄存器(包括整數(shù)寄存器、浮點(diǎn)寄存器、狀態(tài)寄存器、指令指針寄存器)中存儲(chǔ)不同類型的數(shù)據(jù)。
[0053]執(zhí)行單元108 (包括執(zhí)行整數(shù)和浮點(diǎn)操作的邏輯)也位于處理器102中。處理器102還包括微代碼(Ucode)ROM,其存儲(chǔ)用于特定宏指令的微代碼。對(duì)于一個(gè)實(shí)施例,執(zhí)行單元108包括處理打包指令集109的邏輯。通過(guò)將打包指令集109包括在通用處理器102的指令集內(nèi)并包括相關(guān)的電路以執(zhí)行這些指令,可使用通用處理器102中的打包數(shù)據(jù)來(lái)執(zhí)行許多多媒體應(yīng)用所使用的操作。因此,通過(guò)將處理器數(shù)據(jù)總線的全帶寬用于對(duì)打包數(shù)據(jù)進(jìn)行操作,許多多媒體應(yīng)用可獲得加速,并更為有效率地執(zhí)行。這能減少在處理器數(shù)據(jù)總線上傳輸更小數(shù)據(jù)單元以在一個(gè)時(shí)間對(duì)一個(gè)數(shù)據(jù)元素執(zhí)行一個(gè)或多個(gè)操作的需要。
[0054]執(zhí)行單元108的替換實(shí)施例也可被用于微控制器、嵌入式處理器、圖形設(shè)備、DSP以及其他類型的邏輯電路。系統(tǒng)100包括存儲(chǔ)器120。存儲(chǔ)器設(shè)備120可以是動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)設(shè)備、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)設(shè)備、閃存設(shè)備或其他存儲(chǔ)器設(shè)備。存儲(chǔ)器120可存儲(chǔ)可由處理器102執(zhí)行的指令和/或數(shù)據(jù),數(shù)據(jù)由數(shù)據(jù)信號(hào)表示。
[0055]系統(tǒng)邏輯芯片116耦合至處理器總線110和存儲(chǔ)器120。在所示出的實(shí)施例中的系統(tǒng)邏輯芯片116是存儲(chǔ)器控制器中樞(MCH)。處理器102可經(jīng)由處理器總線110與MCH116通信。MCHl 16提供至存儲(chǔ)器120的高帶寬存儲(chǔ)器路徑118,用于指令和數(shù)據(jù)存儲(chǔ),以及用于存儲(chǔ)圖形命令、數(shù)據(jù)和文本。MCH116用于引導(dǎo)處理器102、存儲(chǔ)器120以及系統(tǒng)100內(nèi)的其他組件之間的數(shù)據(jù)信號(hào),并在處理器總線110、存儲(chǔ)器120和系統(tǒng)1/0122之間橋接數(shù)據(jù)信號(hào)。在一些實(shí)施例中,系統(tǒng)邏輯芯片116可提供耦合至圖形控制器112的圖形端口。MCHl 16經(jīng)由存儲(chǔ)器接口 118耦合至存儲(chǔ)器120。圖形卡112通過(guò)加速圖形端口(AGP)互連114耦合至 MCHl 16。
[0056]系統(tǒng)100使用外圍設(shè)備中樞接口總線122以將MCH116耦合至I/O控制器中樞(ICH) 130。ICH130經(jīng)由局部I/O總線提供至一些I/O設(shè)備的直接連接。局部I/O總線是高速I(mǎi)/O總線,用于將外圍設(shè)備連接至存儲(chǔ)器120、芯片組以及處理器102。一些示例是音頻控制器、固件中樞(閃存BIOS) 128、無(wú)線收發(fā)機(jī)126、數(shù)據(jù)存儲(chǔ)器124、包括用戶輸入和鍵盤(pán)接口的傳統(tǒng)I/O控制器、串行擴(kuò)展端口(諸如通用串行總線USB)以及網(wǎng)絡(luò)控制器134。數(shù)據(jù)存儲(chǔ)設(shè)備124可以包括硬盤(pán)驅(qū)動(dòng)器、軟盤(pán)驅(qū)動(dòng)器、CD-ROM設(shè)備、閃存設(shè)備、或其他大容量存儲(chǔ)設(shè)備。
[0057]對(duì)于系統(tǒng)的另一個(gè)實(shí)施例,根據(jù)一個(gè)實(shí)施例的指令可被用于芯片上系統(tǒng)。芯片上系統(tǒng)的一個(gè)實(shí)施例包括處理器和存儲(chǔ)器。用于這樣一個(gè)系統(tǒng)的存儲(chǔ)器是閃存存儲(chǔ)器。閃存存儲(chǔ)器可位于與處理器和其他系統(tǒng)組件相同的管芯上。此外,諸如存儲(chǔ)器控制器或圖形控制器之類的其他邏輯塊也可位于芯片上系統(tǒng)上。
[0058]圖1B示出數(shù)據(jù)處理系統(tǒng)140,數(shù)據(jù)處理系統(tǒng)140實(shí)現(xiàn)本發(fā)明的一個(gè)實(shí)施例的原理。本領(lǐng)域的技術(shù)人員將容易理解,在此描述的諸個(gè)實(shí)施例可用于替代處理系統(tǒng),而不背離本發(fā)明的實(shí)施例的范圍。
[0059]計(jì)算機(jī)系統(tǒng)140包括處理核159,處理核159能執(zhí)行根據(jù)一個(gè)實(shí)施例的至少一個(gè)指令。對(duì)于一個(gè)實(shí)施例,處理核159表示任何類型的體系結(jié)構(gòu)的處理單元,包括但不限于:CISC、RISC或VLIW類型體系結(jié)構(gòu)。處理核159也可適于以一種或多種處理技術(shù)來(lái)制造,并且通過(guò)充分詳細(xì)地表示在機(jī)器可讀介質(zhì)上可以便于其制造。
[0060]處理核159包括執(zhí)行單兀142、一組寄存器文件145以及解碼器144。處理核159也包括對(duì)于理解本發(fā)明的實(shí)施例不是必需的額外電路(沒(méi)有示出)。執(zhí)行單元142用于執(zhí)行處理核159所接收到的指令。除了執(zhí)行典型的處理器指令外,執(zhí)行單元142也執(zhí)行打包指令集143中的指令,用于對(duì)打包數(shù)據(jù)格式執(zhí)行操作。打包指令集143包括用于執(zhí)行本發(fā)明的諸個(gè)實(shí)施例的指令以及其他打包指令。執(zhí)行單元142通過(guò)內(nèi)部總線而耦合至寄存器文件145。寄存器文件145表示處理核159上的存儲(chǔ)區(qū)域,用于存儲(chǔ)包括數(shù)據(jù)的信息。如前所述的,可以理解,該存儲(chǔ)區(qū)域被用于存儲(chǔ)打包數(shù)據(jù)不是關(guān)鍵。執(zhí)行單元142耦合至解碼器144。解碼器144用于將處理核159所接收到的指令解碼為控制信號(hào)和/或微代碼進(jìn)入點(diǎn)。響應(yīng)于這些控制信號(hào)和/或微代碼進(jìn)入點(diǎn),執(zhí)行單元142執(zhí)行合適的操作。在一個(gè)實(shí)施例中,解碼器用于解釋指令的操作碼,操作碼指示應(yīng)當(dāng)對(duì)該指令內(nèi)所指示的對(duì)應(yīng)數(shù)據(jù)執(zhí)行何種操作。
[0061]處理核159耦合至總線141,用于與多個(gè)其他系統(tǒng)設(shè)備進(jìn)行通信,這些系統(tǒng)設(shè)備包括但不限于:例如,同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM)控制器146、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)控制器147、猝發(fā)閃存接口 148、個(gè)人計(jì)算機(jī)存儲(chǔ)卡國(guó)際協(xié)會(huì)(PCMCIA)/致密閃存(CF)卡控制器149、液晶顯示器(IXD)控制器150、直接存儲(chǔ)器存取(DMA)控制器151、以及替代的總線主接口 152。在一個(gè)實(shí)施例中,數(shù)據(jù)處理系統(tǒng)140也包括I/O橋154,用于經(jīng)由I/O總線153與多個(gè)I/O設(shè)備進(jìn)行通信。這樣的I/O設(shè)備可包括但不限于:例如,通用異步接收機(jī)/發(fā)射機(jī)(UART) 155、通用串行總線(USB) 156、藍(lán)牙無(wú)線UART157、以及I/O擴(kuò)展接Π 158。
[0062]數(shù)據(jù)處理系統(tǒng)140的一個(gè)實(shí)施例提供了移動(dòng)通信、網(wǎng)絡(luò)通信和/或無(wú)線通信,并提供了能夠執(zhí)行SMD操作的處理核159,SIMD操作包括文本串比較操作。處理核159可編程有多種音頻、視頻、圖像和通信算法,包括離散變換(諸如Walsh-Hadamard變換、快速傅立葉變換(FFT)、離散余弦變換(DCT)、以及它們相應(yīng)的逆變換)、壓縮/解壓縮技術(shù)(諸如色彩空間變換)、視頻編碼運(yùn)動(dòng)估計(jì)或視頻解碼運(yùn)動(dòng)補(bǔ)償、以及調(diào)制/解調(diào)(MODEM)功能(諸如脈沖編碼調(diào)制PCM)。
[0063]圖1C示出了能夠執(zhí)行用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令的數(shù)據(jù)處理系統(tǒng)的另一替代實(shí)施例。根據(jù)一個(gè)替代實(shí)施例,數(shù)據(jù)處理系統(tǒng)160可包括主處理器166、SMD協(xié)處理器161、高速緩存處理器167以及輸入/輸出系統(tǒng)168。輸入/輸出系統(tǒng)168可選地耦合至無(wú)線接口 169。SIMD協(xié)處理器161能夠執(zhí)行包括根據(jù)一個(gè)實(shí)施例的指令的操作。處理核170可適于以一種或多種處理技術(shù)來(lái)制造,并且通過(guò)充分詳細(xì)地表示在機(jī)器可讀介質(zhì)上可以便于包括處理核170的數(shù)據(jù)處理系統(tǒng)160的全部或一部分的制造。
[0064]對(duì)于一個(gè)實(shí)施例,SMD協(xié)處理器161包括執(zhí)行單元162以及一組寄存器文件164。主處理器166的一個(gè)實(shí)施例包括解碼器165,用于識(shí)別指令集163的指令,指令集163包括根據(jù)一個(gè)實(shí)施例的用于由執(zhí)行單元162所執(zhí)行的指令。對(duì)于替換實(shí)施例,SMD協(xié)處理器161也包括解碼器165B的至少一部分以解碼指令集163的指令。處理核170也包括對(duì)于理解本發(fā)明的實(shí)施例不是必需的額外電路(沒(méi)有示出)。
[0065]在操作中,主處理器166執(zhí)行數(shù)據(jù)處理指令流,數(shù)據(jù)處理指令流控制通用類型的數(shù)據(jù)處理操作,包括與高速緩存存儲(chǔ)器167以及輸入/輸入系統(tǒng)168的交互。SMD協(xié)處理器指令嵌入數(shù)據(jù)處理指令流中。主處理器166的解碼器165將這些SMD協(xié)處理器指令識(shí)別為可由附連的SMD協(xié)處理器161來(lái)執(zhí)行的類型。因此,主處理器166在協(xié)處理器總線171上發(fā)出這些SMD協(xié)處理器指令(或表示SMD協(xié)處理器指令的控制信號(hào)),任何附連的SMD協(xié)處理器從協(xié)處理器總線171接收到這些指令。在該情況中,SMD協(xié)處理器161將接受并執(zhí)行任何接收到的針對(duì)該SMD協(xié)處理器的SMD協(xié)處理器指令。
[0066]可經(jīng)由無(wú)線接口 169接收數(shù)據(jù)以通過(guò)SMD協(xié)處理器指令進(jìn)行處理。對(duì)于一個(gè)示例,語(yǔ)音通信可以數(shù)字信號(hào)的形式被接收到,其將被SMD協(xié)處理器指令所處理,以重新生成表示該語(yǔ)音通信的數(shù)字音頻采樣。對(duì)于另一個(gè)示例,壓縮音頻和/或視頻可以數(shù)字位流的形式被接收到,其將被SMD協(xié)處理器指令所處理,以重新生成數(shù)字音頻采樣和/或運(yùn)動(dòng)視頻巾貞。對(duì)于處理核170的一個(gè)實(shí)施例,主處理器166和SIMD協(xié)處理器161被集成在單個(gè)處理核170中,該單個(gè)處理核170包括執(zhí)行單元162、一組寄存器文件164、以及解碼器165以識(shí)別指令集163的指令,指令集163包括根據(jù)一個(gè)實(shí)施例的指令。
[0067]圖2是包括邏輯電路以執(zhí)行根據(jù)本發(fā)明的一個(gè)實(shí)施例的指令的處理器200的微體系結(jié)構(gòu)的框圖。在一些實(shí)施例中,根據(jù)一個(gè)實(shí)施例的指令可被實(shí)現(xiàn)為對(duì)具有字節(jié)大小、字大小、雙字大小、四字大小等并具有諸多數(shù)據(jù)類型(諸如單精度和雙精度整數(shù)和浮點(diǎn)數(shù)據(jù)類型)的數(shù)據(jù)元素執(zhí)行操作。在一個(gè)實(shí)施例中,有序前端201是處理器200的一部分,其獲取將要被執(zhí)行的指令,并準(zhǔn)備這些指令以在稍后供處理器流水線使用。前端201可包括諸個(gè)單元。在一個(gè)實(shí)施例中,指令預(yù)取器226從存儲(chǔ)器獲取指令,并將指令饋送至指令解碼器228,指令解碼器228隨后解碼或解釋指令。例如,在一個(gè)實(shí)施例中,解碼器將所接收到的指令解碼為機(jī)器可執(zhí)行的被稱為“微指令”或“微操作”(也稱為微操作數(shù)或uop)的一個(gè)或多個(gè)操作。在其他實(shí)施例中,解碼器將指令解析為操作碼和對(duì)應(yīng)的數(shù)據(jù)及控制字段,它們被微體系結(jié)構(gòu)用于執(zhí)行根據(jù)一個(gè)實(shí)施例的操作。在一個(gè)實(shí)施例中,追蹤高速緩存230接受經(jīng)解碼的微操作,并將它們組裝為程序有序序列或微操作隊(duì)列234中的蹤跡,以用于執(zhí)行。當(dāng)追蹤高速緩存230遇到復(fù)雜指令時(shí),微代碼R0M232提供完成操作所需的微操作。
[0068]一些指令被轉(zhuǎn)換為單個(gè)微操作,而其他指令需要若干個(gè)微操作以完成整個(gè)操作。在一個(gè)實(shí)施例中,如果需要超過(guò)四個(gè)微操作來(lái)完成指令,則解碼器228訪問(wèn)微代碼R0M232以進(jìn)行該指令。對(duì)于一個(gè)實(shí)施例,指令可被解碼為少量的微操作以用于在指令解碼器228處進(jìn)行處理。在另一個(gè)實(shí)施例中,如果需要若干微操作來(lái)完成操作,則可將指令存儲(chǔ)在微代碼R0M232中。追蹤高速緩存230參考進(jìn)入點(diǎn)可編程邏輯陣列(PLA)來(lái)確定正確的微指令指針,以從微代碼R0M232讀取微代碼序列以完成根據(jù)一個(gè)實(shí)施例的一個(gè)或多個(gè)指令。在微代碼R0M232完成對(duì)于指令的微操作序列化之后,機(jī)器的前端201恢復(fù)從追蹤高速緩存230提取微操作。
[0069]無(wú)序執(zhí)行引擎203是將指令準(zhǔn)備好用于執(zhí)行的單元。無(wú)序執(zhí)行邏輯具有若干個(gè)緩沖器,用于將指令流平滑并且重排序,以優(yōu)化指令流進(jìn)入流水線后的性能,并調(diào)度指令流以供執(zhí)行。分配器邏輯分配每個(gè)微操作需要的機(jī)器緩沖器和資源,以用于執(zhí)行。寄存器重命名邏輯將諸個(gè)邏輯寄存器重命名為寄存器文件中的條目。在指令調(diào)度器(存儲(chǔ)器調(diào)度器、快速調(diào)度器202、慢速/通用浮點(diǎn)調(diào)度器204、簡(jiǎn)單浮點(diǎn)調(diào)度器206)之前,分配器也將每個(gè)微操作的條目分配在兩個(gè)微操作隊(duì)列中的一個(gè)之中,一個(gè)微操作隊(duì)列用于存儲(chǔ)器操作,另一個(gè)微操作隊(duì)列用于非存儲(chǔ)器操作。微操作調(diào)度器202、204、206基于對(duì)它們的依賴輸入寄存器操作數(shù)源的準(zhǔn)備就緒以及微操作完成它們的操作所需的執(zhí)行資源的可用性來(lái)確定微操作何時(shí)準(zhǔn)備好用于執(zhí)行。一個(gè)實(shí)施例的快速調(diào)度器202可在主時(shí)鐘周期的每半個(gè)上進(jìn)行調(diào)度,而其他調(diào)度器可僅僅在每個(gè)主處理器時(shí)鐘周期上調(diào)度一次。調(diào)度器對(duì)分配端口進(jìn)行仲裁以調(diào)度微操作以便執(zhí)行。
[0070]寄存器文件208、210位于調(diào)度器202、204、206和執(zhí)行塊211中的執(zhí)行單元212、214、216、218、220、222、224之間。也存在單獨(dú)的寄存器文件208、210,分別用于整數(shù)和浮點(diǎn)操作。一個(gè)實(shí)施例的每個(gè)寄存器文件208、210也包括旁路網(wǎng)絡(luò),旁路網(wǎng)絡(luò)可將剛完成的還沒(méi)有被寫(xiě)入寄存器文件的結(jié)果旁路或轉(zhuǎn)發(fā)給新的依賴微操作。整數(shù)寄存器文件208和浮點(diǎn)寄存器文件210也能夠彼此通信數(shù)據(jù)。對(duì)于一個(gè)實(shí)施例,整數(shù)寄存器文件208被劃分為兩個(gè)單獨(dú)的寄存器文件,一個(gè)寄存器文件用于低階的32位數(shù)據(jù),第二個(gè)寄存器文件用于高階的32位數(shù)據(jù)。一個(gè)實(shí)施例的浮點(diǎn)寄存器文件210具有128位寬度的條目,因?yàn)楦↑c(diǎn)指令通常具有從64至128位寬度的操作數(shù)。
[0071]執(zhí)行塊211 包括執(zhí)行單元 212、214、216、218、220、222、224,在執(zhí)行單元 212、214、216、218、220、222、224中實(shí)際執(zhí)行指令。該區(qū)塊包括寄存器文件208、210,寄存器文件208、210存儲(chǔ)微指令需要執(zhí)行的整數(shù)和浮點(diǎn)數(shù)據(jù)操作數(shù)值。一個(gè)實(shí)施例的處理器200由若干個(gè)執(zhí)行單元所組成。一個(gè)實(shí)施例的處理器200包括有若干個(gè)執(zhí)行單元:地址生成單元(AGU)212、AGU214、快速ALU216、快速ALU218、慢速ALU220、浮點(diǎn)ALU222、浮點(diǎn)移動(dòng)單元224。對(duì)于一個(gè)實(shí)施例,浮點(diǎn)執(zhí)行塊222、224執(zhí)行浮點(diǎn)、MMX、SIMD, SSE以及其他操作。一個(gè)實(shí)施例的浮點(diǎn)ALU222包括64位/64位浮點(diǎn)除法器,用于執(zhí)行除法、平方根、以及余數(shù)微操作。對(duì)于本發(fā)明的諸個(gè)實(shí)施例,涉及浮點(diǎn)值的指令可使用浮點(diǎn)硬件來(lái)處理。在一個(gè)實(shí)施例中,ALU操作進(jìn)入高速ALU執(zhí)行單元216、218。一個(gè)實(shí)施例的高速ALU216、218可執(zhí)行高速操作,有效等待時(shí)間為半個(gè)時(shí)鐘周期。對(duì)于一個(gè)實(shí)施例,大多數(shù)復(fù)雜整數(shù)操作進(jìn)入慢速ALU220,因?yàn)槁貯LU220包括用于長(zhǎng)等待時(shí)間類型操作的整數(shù)執(zhí)行硬件,諸如,乘法器、移位器、標(biāo)記邏輯和分支處理。存儲(chǔ)器加載/存儲(chǔ)操作由AGU212、214來(lái)執(zhí)行。對(duì)于一個(gè)實(shí)施例,整數(shù)ALU216、218、220被描述為對(duì)64位數(shù)據(jù)操作數(shù)執(zhí)行整數(shù)操作。在替換實(shí)施例中,ALU216、218、220可被實(shí)現(xiàn)為支持大范圍的數(shù)據(jù)位,包括16、32、128、256等等。類似地,浮點(diǎn)單元222、224可被實(shí)現(xiàn)為支持具有多種寬度的位的操作數(shù)范圍。對(duì)于一個(gè)實(shí)施例,浮點(diǎn)單元222、224可結(jié)合SIMD和多媒體指令對(duì)128位寬度打包數(shù)據(jù)操作數(shù)進(jìn)行操作。
[0072]在一個(gè)實(shí)施例中,在父加載完成執(zhí)行之前,微操作調(diào)度器202、204、206就分派依賴操作。因?yàn)樵谔幚砥?00中微操作被投機(jī)地調(diào)度和執(zhí)行,所以處理器200也包括處理存儲(chǔ)器未命中的邏輯。如果數(shù)據(jù)加載在數(shù)據(jù)高速緩存中未命中,則可能存在帶有臨時(shí)錯(cuò)誤數(shù)據(jù)離開(kāi)調(diào)度器并運(yùn)行在流水線中的依賴操作。重放機(jī)制跟蹤使用錯(cuò)誤數(shù)據(jù)的指令,并重新執(zhí)行這些指令。僅僅依賴操作需要被重放,而允許獨(dú)立操作完成。處理器的一個(gè)實(shí)施例的調(diào)度器和重放機(jī)制也被設(shè)計(jì)為捕捉提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的指令。
[0073]術(shù)語(yǔ)“寄存器”指代被用作為指令的一部分以標(biāo)識(shí)操作數(shù)的板上處理器存儲(chǔ)位置。換句話說(shuō),寄存器是那些處理器外部(從編程者的角度來(lái)看)可用的處理器存儲(chǔ)位置。然而,一實(shí)施例的寄存器不限于表不特定類型的電路。相反,一實(shí)施例的寄存器能夠存儲(chǔ)并提供數(shù)據(jù),能夠執(zhí)行在此所述的功能。在此所述的寄存器可由處理器中的電路使用任何數(shù)量不同技術(shù)來(lái)實(shí)現(xiàn),諸如,專用物理寄存器、使用寄存器重命名的動(dòng)態(tài)分配物理寄存器、專用和動(dòng)態(tài)分配物理寄存器的組合,等等。在一個(gè)實(shí)施例中,整數(shù)寄存器存儲(chǔ)三十二位整數(shù)數(shù)據(jù)。一個(gè)實(shí)施例的寄存器文件也包含八個(gè)多媒體SIMD寄存器,用于打包數(shù)據(jù)。對(duì)于以下討論,寄存器應(yīng)被理解為設(shè)計(jì)成保存打包數(shù)據(jù)的數(shù)據(jù)寄存器,諸如來(lái)自美國(guó)加利福尼亞州圣克拉拉市的英特爾公司的啟用了 MMX技術(shù)的微處理器的64位寬MMXtm寄存器(在一些實(shí)例中也稱為“mm寄存器)?!边@些MMX寄存器(可用在整數(shù)和浮點(diǎn)格式中)可與伴隨SMD和SSE指令的打包數(shù)據(jù)元素一起操作。類似地,涉及SSE2、SSE3、SSE4或更新的技術(shù)(統(tǒng)稱為“SSEx”)的128位寬XMM寄存器也可被用于保持這樣打包數(shù)據(jù)操作數(shù)。在一個(gè)實(shí)施例中,在存儲(chǔ)打包數(shù)據(jù)和整數(shù)數(shù)據(jù)時(shí),寄存器不需要區(qū)分這兩類數(shù)據(jù)類型。在一個(gè)實(shí)施例中,整數(shù)和浮點(diǎn)數(shù)據(jù)可被包括在相同的寄存器文件中,或被包括在不同的寄存器文件中。進(jìn)一步的,在一個(gè)實(shí)施例中,浮點(diǎn)和整數(shù)數(shù)據(jù)可被存儲(chǔ)在不同的寄存器中,或被存儲(chǔ)在相同的寄存器中。
[0074]在下述附圖的示例中,描述了多個(gè)數(shù)據(jù)操作數(shù)。圖3A示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的多媒體寄存器中的多種打包數(shù)據(jù)類型表示。圖3A示出了打包字節(jié)310、打包字320、打包雙字(dword)330的用于128位寬操作數(shù)的數(shù)據(jù)類型。本示例的打包字節(jié)格式310是128位長(zhǎng),并且包含十六個(gè)打包字節(jié)數(shù)據(jù)元素。字節(jié)在此被定義為是8位數(shù)據(jù)。每一個(gè)字節(jié)數(shù)據(jù)元素的信息被存儲(chǔ)為:對(duì)于字節(jié)O存儲(chǔ)在位7到位0,對(duì)于字節(jié)I存儲(chǔ)在位15到位8,對(duì)于字節(jié)2存儲(chǔ)在位23到位16,最后對(duì)于字節(jié)15存儲(chǔ)在位120到位127。因此,在該寄存器中使用了所有可用的位。該存儲(chǔ)配置提高了處理器的存儲(chǔ)效率。同樣,因?yàn)樵L問(wèn)了十六個(gè)數(shù)據(jù)元素,所以現(xiàn)在可對(duì)十六個(gè)數(shù)據(jù)元素并行地執(zhí)行一個(gè)操作。
[0075]通常,數(shù)據(jù)元素是單獨(dú)的數(shù)據(jù)片,與具有相同長(zhǎng)度的其他數(shù)據(jù)元素一起存儲(chǔ)在單個(gè)寄存器或存儲(chǔ)器位置中。在涉及SSEx技術(shù)的打包數(shù)據(jù)序列中,存儲(chǔ)在XMM寄存器中的數(shù)據(jù)元素的數(shù)目是128位除以單個(gè)數(shù)據(jù)元素的位長(zhǎng)。類似地,在涉及MMX和SSE技術(shù)的打包數(shù)據(jù)序列中,存儲(chǔ)在MMX寄存器中的數(shù)據(jù)元素的數(shù)目是64位除以單個(gè)數(shù)據(jù)元素的位長(zhǎng)。雖然圖3A中所示的數(shù)據(jù)類型是128位長(zhǎng),但本發(fā)明的諸個(gè)實(shí)施例也可操作64位寬、256位寬、512位寬或其他大小的操作數(shù)。本示例的打包字格式320是128位長(zhǎng),并且包含八個(gè)打包字?jǐn)?shù)據(jù)元素。每個(gè)打包字包含十六位的信息。圖3A的打包雙字格式330是128位長(zhǎng),并且包含四個(gè)打包雙字?jǐn)?shù)據(jù)元素。每個(gè)打包雙字?jǐn)?shù)據(jù)元素包含三十二位信息。打包四字是128位長(zhǎng),并包含兩個(gè)打包四字?jǐn)?shù)據(jù)元素。
[0076]圖3B示出了替代的寄存器內(nèi)數(shù)據(jù)存儲(chǔ)格式。每個(gè)打包數(shù)據(jù)可包括超過(guò)一個(gè)獨(dú)立數(shù)據(jù)元素。示出了三個(gè)打包數(shù)據(jù)格式:打包半數(shù)據(jù)元素314、打包單數(shù)據(jù)元素342、以及打包雙數(shù)據(jù)元素343。打包半數(shù)據(jù)元素341、打包單數(shù)據(jù)元素342、打包雙數(shù)據(jù)元素343的一個(gè)實(shí)施例包含定點(diǎn)數(shù)據(jù)元素。對(duì)于替代實(shí)施例中,一個(gè)或多個(gè)打包半數(shù)據(jù)元素341、打包單數(shù)據(jù)元素342、打包雙數(shù)據(jù)元素343可包含浮點(diǎn)數(shù)據(jù)元素。打包半數(shù)據(jù)元素341的一個(gè)替代實(shí)施例是一百二十八位長(zhǎng)度,包含八個(gè)16位數(shù)據(jù)元素。打包單數(shù)據(jù)元素342的一個(gè)替代實(shí)施例是一百二十八位長(zhǎng)度,且包含四個(gè)32位數(shù)據(jù)元素。打包雙數(shù)據(jù)元素343的一個(gè)實(shí)施例是一百二十八位長(zhǎng)度,且包含兩個(gè)64位數(shù)據(jù)元素??梢岳斫獾氖?,這樣的打包數(shù)據(jù)格式進(jìn)一步可被擴(kuò)展至其他寄存器長(zhǎng)度,例如,96位、160位、192位、224位、256位、512位或更長(zhǎng)。
[0077]圖3C示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的多媒體寄存器中的多種有符號(hào)和無(wú)符號(hào)打包數(shù)據(jù)類型表示。無(wú)符號(hào)打包字節(jié)表示344示出了 SMD寄存器中的無(wú)符號(hào)打包字節(jié)的存儲(chǔ)。每一個(gè)字節(jié)數(shù)據(jù)元素的信息被存儲(chǔ)為:對(duì)于字節(jié)O存儲(chǔ)在位7到位0,對(duì)于字節(jié)I存儲(chǔ)在位15到位8,對(duì)于字節(jié)2存儲(chǔ)在位23到位16,等等,最后對(duì)于字節(jié)15存儲(chǔ)在位120到位127。因此,在該寄存器中使用了所有可用的位。該存儲(chǔ)配置可提高處理器的存儲(chǔ)效率。同樣,因?yàn)樵L問(wèn)了十六個(gè)數(shù)據(jù)元素,所以可對(duì)十六個(gè)數(shù)據(jù)元素并行地執(zhí)行一個(gè)操作。有符號(hào)打包字節(jié)表示345示出了有符號(hào)打包字節(jié)的存儲(chǔ)。注意到,每個(gè)字節(jié)數(shù)據(jù)元素的第八位是符號(hào)指示符。無(wú)符號(hào)打包字表示346示出了 SMD寄存器中字7到字O如何被存儲(chǔ)。有符號(hào)打包字表示347類似于無(wú)符號(hào)打包字寄存器內(nèi)表示346。注意到,每個(gè)字?jǐn)?shù)據(jù)元素的第十六位是符號(hào)指示符。無(wú)符號(hào)打包雙字表示348示出了雙字?jǐn)?shù)據(jù)元素如何存儲(chǔ)。有符號(hào)打包雙字表示349類似于無(wú)符號(hào)打包雙字寄存器內(nèi)表示348。注意到,必要的符號(hào)位是每個(gè)雙字?jǐn)?shù)據(jù)元素的第三十二位。
[0078]圖3D是與可從美國(guó)加利福尼亞州圣克拉拉市的英特爾公司的萬(wàn)維網(wǎng)(畫(huà))intel.com/products/processor/manuals/ 上獲得的“丨ntel? 64 和 IA-32 英特爾體系結(jié)構(gòu)軟件開(kāi)發(fā)者手冊(cè)組合卷2A和2B:指令集參考A-Z(Intel? 64and IA_32Intel ArchitectureSoftware Developer’s Manual Combined Volumes 2A and2B:1nstruction Set ReferenceA-Z,)”中描述的操作碼格式類型相對(duì)應(yīng)的具有32或更多位的操作編碼(操作碼)格式360以及寄存器/存儲(chǔ)器操作數(shù)尋址模式的一個(gè)實(shí)施例的描述。在一個(gè)實(shí)施例中,可通過(guò)一個(gè)或更多個(gè)字段361和362來(lái)編碼指令??梢詷?biāo)識(shí)每個(gè)指令高達(dá)兩個(gè)操作數(shù)位置,包括高達(dá)兩個(gè)源操作數(shù)標(biāo)識(shí)符364和365。對(duì)于一個(gè)實(shí)施例,目的地操作數(shù)標(biāo)識(shí)符366與源操作數(shù)標(biāo)識(shí)符364相同,而在其他實(shí)施例中它們不相同。對(duì)于替代實(shí)施例,目的地操作數(shù)標(biāo)識(shí)符366與源操作數(shù)標(biāo)識(shí)符365相同,而在其他實(shí)施例中它們不相同。在一個(gè)實(shí)施例中,由源操作數(shù)標(biāo)識(shí)符364和365所標(biāo)識(shí)的源操作數(shù)中的一個(gè)被指令的結(jié)果所覆寫(xiě),而在其他實(shí)施例中,標(biāo)識(shí)符364對(duì)應(yīng)于源寄存器元素,而標(biāo)識(shí)符365對(duì)應(yīng)于目的地寄存器元素。對(duì)于一個(gè)實(shí)施例,操作數(shù)標(biāo)識(shí)符364和365可被用于標(biāo)識(shí)32位或64位的源和目的地操作數(shù)。
[0079]圖3E示出了具有四十個(gè)或更多位的另一個(gè)替代操作編碼(操作碼)格式370。操作碼格式370對(duì)應(yīng)于操作碼格式360,并包括可選的前綴字節(jié)378。根據(jù)一個(gè)實(shí)施例的指令可通過(guò)字段378、371和372中的一個(gè)或多個(gè)來(lái)編碼。通過(guò)源操作數(shù)標(biāo)識(shí)符374和375以及通過(guò)前綴字節(jié)378,可標(biāo)識(shí)每個(gè)指令中高達(dá)兩個(gè)操作數(shù)位置。對(duì)于一個(gè)實(shí)施例,前綴字節(jié)378可被用于標(biāo)識(shí)32位或64位的源和目的地操作數(shù)。對(duì)于一個(gè)實(shí)施例,目的地操作數(shù)標(biāo)識(shí)符376與源操作數(shù)標(biāo)識(shí)符374相同,而在其他實(shí)施例中它們不相同。對(duì)于替代實(shí)施例,目的地操作數(shù)標(biāo)識(shí)符376與源操作數(shù)標(biāo)識(shí)符375相同,而在其他實(shí)施例中它們不相同。在一個(gè)實(shí)施例中,指令對(duì)由操作數(shù)標(biāo)識(shí)符374和375所標(biāo)識(shí)的一個(gè)或多個(gè)操作數(shù)進(jìn)行操作,并且由操作數(shù)標(biāo)識(shí)符374和375所標(biāo)識(shí)的一個(gè)或多個(gè)操作數(shù)被指令的結(jié)果所覆寫(xiě),然而在其他實(shí)施例中,由標(biāo)識(shí)符374和375所標(biāo)識(shí)的操作數(shù)被寫(xiě)入另一個(gè)寄存器中的另一個(gè)數(shù)據(jù)元素中。操作碼格式360和370允許由MOD字段363和373以及由可選的比例-變址-基址(scale-1ndex-base)和位移(displacement)字節(jié)所部分指定的寄存器到寄存器尋址、存儲(chǔ)器到寄存器尋址、由存儲(chǔ)器對(duì)寄存器尋址、由寄存器對(duì)寄存器尋址、直接對(duì)寄存器尋址、寄存器至存儲(chǔ)器尋址。
[0080]接下來(lái)轉(zhuǎn)到圖3F,在一些替換實(shí)施例中,64位(或128位、或256位、或512位或更多)單指令多數(shù)據(jù)(SMD)算術(shù)操作可經(jīng)由協(xié)處理器數(shù)據(jù)處理(CDP)指令來(lái)執(zhí)行。操作編碼(操作碼)格式380示出了一個(gè)這樣的CDP指令,其具有CDP操作碼字段382和389。對(duì)于替代實(shí)施例,該類型⑶P指令操作可由字段383、384、387和388中的一個(gè)或多個(gè)來(lái)編碼??梢詫?duì)每個(gè)指令標(biāo)識(shí)高達(dá)三個(gè)操作數(shù)位置,包括高達(dá)兩個(gè)源操作數(shù)標(biāo)識(shí)符385和390以及一個(gè)目的地操作數(shù)標(biāo)識(shí)符386。協(xié)處理器的一個(gè)實(shí)施例可對(duì)8、16、32和64位值操作。對(duì)于一個(gè)實(shí)施例,對(duì)整數(shù)數(shù)據(jù)元素執(zhí)行指令。在一些實(shí)施例中,使用條件字段381,可有條件地執(zhí)行指令。對(duì)于一些實(shí)施例,源數(shù)據(jù)大小可通過(guò)字段383來(lái)編碼。在一些實(shí)施例中,可對(duì)SMD字段執(zhí)行零(Z)、負(fù)(N)、進(jìn)位(C)和溢出(V)檢測(cè)。對(duì)于一些指令,飽和類型可通過(guò)字段384來(lái)編碼。
[0081]現(xiàn)在轉(zhuǎn)到圖3G,其描繪了根據(jù)另一實(shí)施例的與可從美國(guó)加利福尼亞州圣克拉拉市的英特爾公司的萬(wàn)維網(wǎng)(WWW) intel.com/products/processor/manuals/上獲得的 “Intel? 高級(jí)向量擴(kuò)展編程參考(Intel? Advanced Vector Extensions ProgrammingReference)中描述的操作碼格式類型相對(duì)應(yīng)的用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的另一替代操作編碼(操作碼)格式397。
[0082]原始x86指令集向I字節(jié)操作碼提供多種地址字節(jié)(syllable)格式以及包含在附加字節(jié)中的直接操作數(shù),其中可從第一個(gè)“操作碼”字節(jié)中獲知附加字節(jié)的存在。此外,特定字節(jié)值被預(yù)留給操作碼作為修改符(稱為前綴prefix,因?yàn)樗鼈儽环胖迷谥噶钪?。當(dāng)256個(gè)操作碼字節(jié)的原始配置(包括這些特殊前綴值)耗盡時(shí),指定單個(gè)字節(jié)以跳出(escape)到新的256個(gè)操作碼集合。因?yàn)樘砑恿讼蛄恐噶?諸如,SIMD),即便通過(guò)使用前綴進(jìn)行了擴(kuò)展以后,也需要產(chǎn)生更多的操作碼,并且“兩字節(jié)”操作碼映射也已經(jīng)不夠。為此,將新指令加入附加的映射中,附加的映射使用兩字節(jié)加上可選的前綴作為標(biāo)識(shí)符。
[0083]除此外,為了便于在64位模式中實(shí)現(xiàn)額外的寄存器,在前綴和操作碼(以及任何的用于確定操作碼所需的跳出字節(jié))之間使用額外的前綴(被稱為“REX”)。在一個(gè)實(shí)施例中,REX具有4個(gè)“有效載荷”位,以指示在64位模式中使用附加的寄存器。在其他實(shí)施例中,可具有比4位更少或更多的位。至少一個(gè)指令集的通用格式(一般對(duì)應(yīng)于格式360和/或格式370)被一般地不出如下:
[0084][prefixes] [rex] escape [escape2] opcode modrm (等等)
[0085]操作碼格式397對(duì)應(yīng)于操作碼格式370,并包括可選的VEX前綴字節(jié)391 (在一個(gè)實(shí)施例中,以十六進(jìn)制的C4開(kāi)始)以替換大部分的其他公共使用的傳統(tǒng)指令前綴字節(jié)和跳出代碼。例如,以下示出了使用兩個(gè)字段來(lái)編碼指令的實(shí)施例,其可在原始指令中存在第二跳出代碼時(shí)、或在需要在REX字段中使用額外位(諸如,XB和W字段)時(shí)被使用。在以下所示的實(shí)施例中,傳統(tǒng)跳出由新的跳出值所表示,傳統(tǒng)前綴被完全壓縮為“有效載荷(payload)”字節(jié)的一部分,傳統(tǒng)前綴被重新申明并可用于未來(lái)的擴(kuò)展,第二跳出代碼被壓縮在“映射(map)”字段中且未來(lái)的映射或`特征空間可用,并且加入新的特征(諸如,增加的向量長(zhǎng)度以及額外的源寄存器區(qū)分符)。
[0086]
Iprefi?*| [rex] escape |繼_?2】opcoie β?ο#? |?ib| _零3 liein]
K
種 IXBmiiibiiiiiii 冒爾_ 等_& iiieinii [,Λ] __ Ι—]
V
r#i_
[0087]根據(jù)一個(gè)實(shí)施例的指令可通過(guò)字段391和392中的一個(gè)或多個(gè)來(lái)編碼。通過(guò)字段391與源操作碼標(biāo)識(shí)符374和375以及可選的比例-變址-基址(scale-1ndex-base,SIB)標(biāo)識(shí)符393、可選位移標(biāo)識(shí)符394以及可選直接字節(jié)395相結(jié)合,可以為每個(gè)指令標(biāo)識(shí)高達(dá)四個(gè)操作數(shù)位置。對(duì)于一個(gè)實(shí)施例,VEX前綴字節(jié)391可被用于標(biāo)識(shí)32位或64位的源和目的地操作數(shù)和/或128位或256位SMD寄存器或存儲(chǔ)器操作數(shù)。對(duì)于一個(gè)實(shí)施例,由操作碼格式397所提供的功能可與操作碼格式370形成冗余,而在其他實(shí)施例中它們不同。操作碼格式370和397允許由MOD字段373以及由可選的SIB標(biāo)識(shí)符393、可選的位移標(biāo)識(shí)符394以及可選的直接標(biāo)識(shí)符395所部分指定的寄存器到寄存器尋址、存儲(chǔ)器到寄存器尋址、由存儲(chǔ)器對(duì)寄存器尋址、由寄存器對(duì)寄存器尋址、直接對(duì)寄存器尋址、寄存器至存儲(chǔ)器尋址。
[0088]現(xiàn)在轉(zhuǎn)到圖3H,其描繪了根據(jù)另一實(shí)施例的用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的另一替代操作編碼(操作碼)格式398。操作碼格式398對(duì)應(yīng)于操作碼格式370和397,并包括可選的EVEX前綴字節(jié)396 (在一個(gè)實(shí)施例中,以十六進(jìn)制的62開(kāi)始)以替換大部分的其他公共使用的傳統(tǒng)指令前綴字節(jié)和跳出代碼,并提供附加的功能。根據(jù)一個(gè)實(shí)施例的指令可通過(guò)字段396和392中的一個(gè)或多個(gè)來(lái)編碼。通過(guò)字段396與源操作碼標(biāo)識(shí)符374和375以及可選規(guī)?;笜?biāo)(scale-1ndex-base SIB)標(biāo)識(shí)符393、可選位移標(biāo)識(shí)符394以及可選直接字節(jié)395相結(jié)合,可以標(biāo)識(shí)每個(gè)指令高達(dá)四個(gè)操作數(shù)位置和掩碼。對(duì)于一個(gè)實(shí)施例,EVEX前綴字節(jié)396可被用于標(biāo)識(shí)32位或64位的源和目的地操作數(shù)和/或128位、256位或512位SIMD寄存器或存儲(chǔ)器操作數(shù)。對(duì)于一個(gè)實(shí)施例,由操作碼格式398所提供的功能可與操作碼格式370或397形成冗余,而在其他實(shí)施例中它們不同。操作碼格式398允許由MOD字段373以及由可選的(SIB)標(biāo)識(shí)符393、可選的位移標(biāo)識(shí)符394以及可選的直接標(biāo)識(shí)符395所部分指定的利用掩碼的寄存器到寄存器尋址、存儲(chǔ)器到寄存器尋址、由存儲(chǔ)器對(duì)寄存器尋址、由寄存器對(duì)寄存器尋址、直接對(duì)寄存器尋址、寄存器至存儲(chǔ)器尋址。至少一個(gè)指令集的通用格式(一般對(duì)應(yīng)于格式360和/或格式370)被一般地示出如下:
[0089]evexlRXBmmmmm WvvvLpp evex4opcode modrm[sib][disp][imm]
[0090]對(duì)于一個(gè)實(shí)施例,根據(jù)EVEX格式398編碼的指令可具有附加的“有效載荷”位,這些附加的“有效載荷”位可利用附加的新特征來(lái)利用跨越和掩碼功能提供向量加載和/或存儲(chǔ),附加的新特征諸如例如用戶可配置的掩碼寄存器、或附加的操作數(shù)、或從128位、256位或512位向量寄存器或備選的更多寄存器中的選擇等等。
[0091]例如,在VEX格式397可用于利用隱式掩碼提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的場(chǎng)合,EVEX格式398可被用于利用顯式用戶可配置掩碼來(lái)提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)。附加地,在VEX格式397可用于在128位或256位寄存器上利用跨越和掩碼功能提供向量加載和/或存儲(chǔ)的場(chǎng)合,EVEX格式398可用于在128位、256位、512位或更大(或更小)的向量寄存器上提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)。
[0092]通過(guò)以下示例說(shuō)明用于提供利用跨越和掩碼功能的向量加載和/或存儲(chǔ)的示例指令:
[0093]
【權(quán)利要求】
1.一種處理器,包括: 完成掩碼寄存器,包括第一多個(gè)數(shù)據(jù)字段,其中完成掩碼寄存器中的第一多個(gè)數(shù)據(jù)字段中的每個(gè)數(shù)據(jù)字段對(duì)應(yīng)于存儲(chǔ)器中的相應(yīng)數(shù)據(jù)元素的與起始地址相距的跨越長(zhǎng)度的倍數(shù),其中對(duì)于完成掩碼寄存器中的每個(gè)數(shù)據(jù)字段,第一值指示相應(yīng)的元素尚未從所述存儲(chǔ)器被加載,而第二值指示所述相應(yīng)的數(shù)據(jù)元素?zé)o需被加載或已經(jīng)從所述存儲(chǔ)器被加載; 解碼級(jí),用于解碼第一指令,所述第一指令指定所述完成掩碼寄存器、跨越長(zhǎng)度以及與所述第一多個(gè)數(shù)據(jù)字段中的一個(gè)或多個(gè)數(shù)據(jù)字段相對(duì)應(yīng)的加載操作的集合;以及 一個(gè)或多個(gè)執(zhí)行單元,用于響應(yīng)于經(jīng)解碼的第一指令: 讀取所述完成掩碼寄存器中的每個(gè)數(shù)據(jù)字段的值; 對(duì)于所述完成掩碼寄存器中的所述第一多個(gè)數(shù)據(jù)字段中具有第一值的每個(gè)數(shù)據(jù)字段,根據(jù)完成掩碼寄存器中的所述數(shù)據(jù)字段的位置來(lái)計(jì)算所述跨越長(zhǎng)度的相應(yīng)倍數(shù),以從存儲(chǔ)器中加載相應(yīng)的數(shù)據(jù)元素并將相應(yīng)的數(shù)據(jù)元素存儲(chǔ)到目的地寄存器中,所述目的地寄存器具有第二多個(gè)數(shù)據(jù)字段,所述第二多個(gè)數(shù)據(jù)字段的一部分用于存儲(chǔ)被加載的數(shù)據(jù)元素,以及 將完成掩碼寄存器中的相應(yīng)的數(shù)據(jù)字段的值從所述第一值改變成所述第二值。
2.如權(quán)利要求1所述的處理器,其特征在于,所述第一值是I。
3.如權(quán)利要求1所述的處理器,其特征在于,所述第二值是O。
4.如權(quán)利要求1所述的處理器,其特征在于,所述一個(gè)或多個(gè)執(zhí)行單元響應(yīng)于經(jīng)解碼的第一指令,將每個(gè)被加載的數(shù)據(jù)元素存儲(chǔ)到所述目的地寄存器中的第二多個(gè)數(shù)據(jù)字段中的一個(gè)數(shù)據(jù)字段中,所述一個(gè)數(shù)據(jù)字段的位`置對(duì)應(yīng)于所述完成掩碼寄存器中的相應(yīng)數(shù)據(jù)字段的位置。
5.如權(quán)利要求1所述的處理器,其特征在于,被存儲(chǔ)到所述目的地寄存器中的數(shù)據(jù)元素是32位數(shù)據(jù)元素。
6.如權(quán)利要求1所述的處理器,其特征在于,被存儲(chǔ)到所述目的地寄存器中的數(shù)據(jù)元素是64位數(shù)據(jù)元素。
7.如權(quán)利要求1所述的處理器,其特征在于,被存儲(chǔ)到所述目的地寄存器中的數(shù)據(jù)元素是8位數(shù)據(jù)元素。
8.如權(quán)利要求1所述的處理器,其特征在于,被存儲(chǔ)到所述目的地寄存器中的數(shù)據(jù)元素是16位數(shù)據(jù)元素。
9.如權(quán)利要求1所述的處理器,其特征在于,所述目的地寄存器是128位向量寄存器。
10.如權(quán)利要求1所述的處理器,其特征在于,所述目的地寄存器是256位向量寄存器。
11.如權(quán)利要求1所述的處理器,其特征在于,所述目的地寄存器是512位向量寄存器。
12.一種機(jī)器可讀介質(zhì),用于記錄包括第一可執(zhí)行指令的功能性描述素材,所述第一可執(zhí)行指令如果由機(jī)器執(zhí)行則使所述機(jī)器: 讀取第一寄存器中的第一多個(gè)數(shù)據(jù)字段中的每個(gè)數(shù)據(jù)字段的值,其中第一寄存器中的第一多個(gè)數(shù)據(jù)字段中的每個(gè)數(shù)據(jù)字段對(duì)應(yīng)于存儲(chǔ)器中的相應(yīng)數(shù)據(jù)元素的與起始地址相距的跨越長(zhǎng)度的倍數(shù),其中對(duì)于第一寄存器中的每個(gè)數(shù)據(jù)字段,第一值指示相應(yīng)的元素尚未從所述存儲(chǔ)器被加載,而第二值指示所述相應(yīng)的數(shù)據(jù)元素?zé)o需被加載或已經(jīng)從所述存儲(chǔ)器被加載;以及對(duì)于所述第一寄存器中的所述第一多個(gè)數(shù)據(jù)字段中具有第一值的每個(gè)數(shù)據(jù)字段,根據(jù)第一寄存器中的所述數(shù)據(jù)字段的位置來(lái)計(jì)算所述跨越長(zhǎng)度的相應(yīng)倍數(shù),以從存儲(chǔ)器中加載相應(yīng)的數(shù)據(jù)元素并將相應(yīng)的數(shù)據(jù)元素存儲(chǔ)到第二寄存器中,所述第二寄存器具有第二多個(gè)數(shù)據(jù)字段,所述第二多個(gè)數(shù)據(jù)字段的一部分用于存儲(chǔ)被加載的數(shù)據(jù)元素,以及將第一寄存器中的相應(yīng)的數(shù)據(jù)字段的值從所述第一值改變成所述第二值。
13.如權(quán)利要求12所述的機(jī)器可讀介質(zhì),其特征在于,所述第一可執(zhí)行指令如果由所述機(jī)器執(zhí)行則進(jìn)一步使所述機(jī)器: 將每個(gè)被加載的數(shù)據(jù)元素存儲(chǔ)到所述第二寄存器中的第二多個(gè)數(shù)據(jù)字段中的一個(gè)數(shù)據(jù)字段中,所述一個(gè)數(shù)據(jù)字段的位置對(duì)應(yīng)于所述第一寄存器中的相應(yīng)數(shù)據(jù)字段的位置。
14.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其特征在于,被存儲(chǔ)到所述第二寄存器中的數(shù)據(jù)元素是32位數(shù)據(jù)元素。
15.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其特征在于,被存儲(chǔ)到所述第二寄存器中的數(shù)據(jù)元素是64位數(shù)據(jù)元素。
16.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其特征在于,所述第二寄存器是128位向量寄存器。
17.如權(quán)利要求13所述的機(jī)器可讀介質(zhì),其特征在于,所述第二寄存器是256位向量寄存器。
18.如權(quán)利要求 13所述的機(jī)器可讀介質(zhì),其特征在于,所述第二寄存器是512位向量寄存器。
19.一種處理器,包括: 解碼級(jí),用于解碼第一單指令多數(shù)據(jù)(SIMD)指令,所述第一單指令多數(shù)據(jù)(SIMD)指令指定加載操作的集合、目的地寄存器、存儲(chǔ)器地址以及跨越長(zhǎng)度;以及一個(gè)或多個(gè)執(zhí)行單元,用于響應(yīng)于經(jīng)解碼的第一 SMD指令: 讀取掩碼寄存器中的第一多個(gè)數(shù)據(jù)字段中的每個(gè)數(shù)據(jù)字段的值,其中所述掩碼寄存器中的第一多個(gè)數(shù)據(jù)字段中的每個(gè)數(shù)據(jù)字段對(duì)應(yīng)于存儲(chǔ)器中的相應(yīng)數(shù)據(jù)元素的與所述存儲(chǔ)器地址相距的跨越長(zhǎng)度的倍數(shù),其中對(duì)于所述掩碼寄存器中的每個(gè)數(shù)據(jù)字段,第一值指示相應(yīng)的元素尚未從所述存儲(chǔ)器被加載,而第二值指示所述相應(yīng)的數(shù)據(jù)元素?zé)o需被加載或已經(jīng)從所述存儲(chǔ)器被加載; 對(duì)于所述掩碼寄存器中的所述多個(gè)數(shù)據(jù)字段中具有第一值的每個(gè)數(shù)據(jù)字段,根據(jù)所述掩碼寄存器中的所述數(shù)據(jù)字段的位置來(lái)計(jì)算所述跨越長(zhǎng)度的相應(yīng)倍數(shù),以將存儲(chǔ)器中相應(yīng)的數(shù)據(jù)元素加載到目的地寄存器中的相應(yīng)數(shù)據(jù)字段中,并將所述掩碼寄存器中的數(shù)據(jù)字段的值從第一值改變成第二值。
20.如權(quán)利要求19所述的處理器,其特征在于,所述一個(gè)或多個(gè)執(zhí)行單元響應(yīng)于經(jīng)解碼的第一 SIMD指令,將每個(gè)被加載的數(shù)據(jù)元素存儲(chǔ)到所述第二寄存器中的第二多個(gè)數(shù)據(jù)字段中的一個(gè)數(shù)據(jù)字段中,所述一個(gè)數(shù)據(jù)字段的位置對(duì)應(yīng)于所述掩碼寄存器中的相應(yīng)數(shù)據(jù)字段的位置。
21.如權(quán)利要求20所述的處理器,其特征在于,被存儲(chǔ)到所述第二寄存器中的數(shù)據(jù)元素是64位數(shù)據(jù)元素。
22.如權(quán)利要求20所述的處理器,其特征在于,所述第二寄存器是128位向量寄存器。
23.如權(quán)利要求20所述的處理器,其特征在于,所述第二寄存器是256位向量寄存器。
24.如權(quán)利要求20所述的處理器,其特征在于,所述第二寄存器是512位向量寄存器。
25.—種處理系統(tǒng),包括: 存儲(chǔ)器;以及 多個(gè)處理器,所述多個(gè)處理器中的每個(gè)處理器包括: 解碼級(jí),用于解碼第一 SMD指令,所述第一 SMD指令指定加載操作的集合、目的地寄存器、掩碼寄存器、存儲(chǔ)器地址以及跨越長(zhǎng)度;以及 一個(gè)或多個(gè)執(zhí)行單元,用于響應(yīng)于經(jīng)解碼的第一 SMD指令: 讀取掩碼寄存器中的第一多個(gè)數(shù)據(jù)字段中的每個(gè)數(shù)據(jù)字段的值,其中所述掩碼寄存器中的第一多個(gè)數(shù)據(jù)字段中的每個(gè)數(shù)據(jù)字段對(duì)應(yīng)于存儲(chǔ)器中的相應(yīng)數(shù)據(jù)元素的與所述存儲(chǔ)器地址相距的跨越長(zhǎng)度的倍數(shù),其中對(duì)于所述掩碼寄存器中的每個(gè)數(shù)據(jù)字段,第一值指示相應(yīng)的元素尚未從所述存儲(chǔ)器被加載,而第二值指示所述相應(yīng)的數(shù)據(jù)元素?zé)o需被加載或已經(jīng)從所述存儲(chǔ)器被加載; 對(duì)于所述掩碼寄存器中的所述多個(gè)數(shù)據(jù)字段中具有第一值的每個(gè)數(shù)據(jù)字段,根據(jù)所述掩碼寄存器中的所述數(shù)據(jù)字段的位置來(lái)計(jì)算所述跨越長(zhǎng)度的相應(yīng)倍數(shù),以將存儲(chǔ)器中相應(yīng)的數(shù)據(jù)元素加載到目的地寄存器中的相應(yīng)數(shù)據(jù)字段中,并將所述掩碼寄存器中的數(shù)據(jù)字段的值從第一值改變成第 二值。
26.如權(quán)利要求25所述的處理系統(tǒng),其特征在于,所述一個(gè)或多個(gè)執(zhí)行單元進(jìn)一步響應(yīng)于所述第一 SMD指令: 將每個(gè)被加載的數(shù)據(jù)元素存儲(chǔ)到所述目的地寄存器中的第二多個(gè)數(shù)據(jù)字段中的一個(gè)數(shù)據(jù)字段中,所述一個(gè)數(shù)據(jù)字段的位置對(duì)應(yīng)于所述掩碼寄存器中的相應(yīng)數(shù)據(jù)字段的位置。
27.如權(quán)利要求25所述的處理系統(tǒng),其特征在于,被存儲(chǔ)到所述目的地寄存器中的數(shù)據(jù)元素是32位數(shù)據(jù)元素。
28.如權(quán)利要求25所述的處理系統(tǒng),其特征在于,所述目的地寄存器是128位向量寄存器。
29.如權(quán)利要求25所述的處理系統(tǒng),其特征在于,所述目的地寄存器是256位向量寄存器。
30.如權(quán)利要求25所述的處理系統(tǒng),其特征在于,所述目的地寄存器是512位向量寄存器。
【文檔編號(hào)】G06F9/30GK103827815SQ201180073694
【公開(kāi)日】2014年5月28日 申請(qǐng)日期:2011年9月26日 優(yōu)先權(quán)日:2011年9月26日
【發(fā)明者】E·烏爾德-阿邁德-瓦爾, K·A·杜什, S·賽爾, C·R·揚(yáng)特 申請(qǐng)人:英特爾公司