專利名稱:用于將三個(gè)源操作數(shù)相加的加法指令的制作方法
技術(shù)領(lǐng)域:
各種不同實(shí)施例涉及加法指令、執(zhí)行這些指令的方法、用于執(zhí)行這些指令的執(zhí)行 單元、或納入此類執(zhí)行單元的設(shè)備。具體而言,各種不同實(shí)施例涉及用于執(zhí)行帶進(jìn)位的三路 加法的加法指令、執(zhí)行這些指令的方法、用于執(zhí)行這些指令的執(zhí)行單元、或納入此類執(zhí)行單 元的設(shè)備。
背景技術(shù):
指令集架構(gòu)(ISA)中通常包括加法指令。加法指令允許設(shè)備將數(shù)據(jù)相加或求和。已知加法指令包括加法指令A(yù)DD以及帶進(jìn)位加法指令A(yù)DC,這兩者皆在Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2A :Instruction Set Reference, A-M, Order Number :253666-032US, September 2009 (Intel 64 禾口 IA-32 架構(gòu) 軟件開發(fā)者手冊第2A卷指令集參考,A-M,序號253666-032US,2009年9月)以及各種舊 手冊中描述。ADD和ADC指令各自僅能將兩個(gè)操作數(shù)相加。在某些情形中,這可能具有缺點(diǎn)。由于快速和高效處理數(shù)據(jù)的重要性,新的和不同的加法指令將是有用的。附圖簡述通過參考用來說明本發(fā)明的實(shí)施例的以下描述和附圖,可最好地理解本發(fā)明。在 附圖中
圖1是處理加法指令的一實(shí)施例的方法的實(shí)施例的流程框圖。圖2是指令處理裝置的示例實(shí)施例的框圖。圖3是示出可用于存儲加法指令的實(shí)施例的總和的寄存器和多個(gè)標(biāo)志的組合的 實(shí)施例的框圖。圖4示出適用于各個(gè)實(shí)施例的各種無符號整數(shù)數(shù)值數(shù)據(jù)類型。圖5是對帶標(biāo)志加法指令的實(shí)施例作出響應(yīng)的執(zhí)行單元的實(shí)施例的框圖。圖6示出表示具有多個(gè)標(biāo)志的標(biāo)志寄存器的示例實(shí)施例的EFLAGS寄存器。圖7示出合適的32位通用寄存器集的示例實(shí)施例。圖8示出合適的64位通用寄存器集的示例實(shí)施例。圖9示出表示加法指令的特定示例實(shí)施例的ADD3指令的描述。圖10示出表示加法指令的特定示例實(shí)施例的ADD3指令的偽代碼中的操作。圖11示出表示帶標(biāo)志加法指令的特定示例實(shí)施例的AD0C3指令的描述。圖12示出表示帶標(biāo)志加法指令的特定示例實(shí)施例的AD0C3指令的偽代碼中的操 作。圖13示出256位無符號整數(shù)的實(shí)施例,其被存儲為各自存儲在四個(gè)相應(yīng)寄存器之 一中的4個(gè)四字無符號整數(shù)。圖14示出256位四字無符號整數(shù)乘以64位無符號整數(shù)的乘法,以及用ADD/ADC 指令進(jìn)行相關(guān)聯(lián)部分積的求和。
圖15示出256位四字無符號整數(shù)乘以64位無符號整數(shù)的乘法,以及用根據(jù)一個(gè) 或多個(gè)實(shí)施例的ADD3/AD0C3指令進(jìn)行相關(guān)聯(lián)部分積的求和。圖16是具有與整數(shù)乘法指令的隱式目標(biāo)操作數(shù)相同的隱式源操作數(shù)的加法指令 的實(shí)施例的框圖。圖17是合適的計(jì)算機(jī)系統(tǒng)的第一示例實(shí)施例的框圖。圖18是合適的計(jì)算機(jī)系統(tǒng)的第二示例實(shí)施例的框圖。詳細(xì)描述在以下描述中,闡述了眾多具體細(xì)節(jié),諸如指令實(shí)現(xiàn)細(xì)節(jié)、數(shù)據(jù)類型、寄存器類型、 寄存器安排、處理器類型、系統(tǒng)配置等。然而應(yīng)理解,本發(fā)明的實(shí)施例在沒有這些具體細(xì)節(jié) 的情況下也可實(shí)踐。在其他實(shí)例中,公知的電路、結(jié)構(gòu)和技術(shù)未被詳細(xì)示出以免混淆對本描 述的理解。各實(shí)施例涉及能夠?qū)⑷齻€(gè)操作數(shù)相加在一起的新且有用的加法指令。其他實(shí)施例 涉及用于執(zhí)行這些加法指令的執(zhí)行單元。再其他實(shí)施例涉及具有此類執(zhí)行單元或能夠執(zhí)行 此類指令的通用處理器、專用處理器、控制器、或其他邏輯器件或指令處理裝置。進(jìn)一步的 實(shí)施例涉及存儲在盤、存儲器、或其他有形機(jī)器可讀介質(zhì)上的加法指令。圖1是處理加法指令的實(shí)施例的方法100的實(shí)施例的流程框圖。在各種實(shí)施例 中,該方法可由通用處理器、專用處理器(例如,圖形處理器或數(shù)字信號處理器)、硬件加速 器(例如,加密加速器)、或其他類型的邏輯器件或指令處理裝置來執(zhí)行。在框102,可在處理器或其他指令處理裝置上接收加法指令。加法指令可指示第一 源操作數(shù)、第二源操作數(shù)和第三源操作數(shù)。隨后,在框104,作為加法指令的結(jié)果,可存儲第一、第二和第三源操作數(shù)的總和。 在一個(gè)或多個(gè)實(shí)施例中,該總和可部分地存儲在由加法指令指示的目標(biāo)操作數(shù)中以及部分 地存儲在多個(gè)標(biāo)志中。在一個(gè)或多個(gè)實(shí)施例中,所存儲的總和可包括該第一、第二和第三源 操作數(shù)的總和加上這些標(biāo)志的算術(shù)組合。圖2是指令處理裝置210的示例實(shí)施例的框圖。在一個(gè)或多個(gè)實(shí)施例中,指令處 理裝置可以是通用處理器。該處理器可以是各種復(fù)雜指令集計(jì)算(CISC)處理器、各種精簡 指令集計(jì)算(RISC)處理器、各種超長指令字(VLIW)處理器、其各種混合、或完全其他類型 的處理器中的任何處理器。在一個(gè)或多個(gè)實(shí)施例中,處理器可以是由美國加利福尼亞州圣 克拉拉市的英特爾antel)公司制造的類型的通用處理器,但這不是必須的??蓮挠⑻貭?公司購得的通用處理器的具體示例包括,但不限于,Intel Core i7(英特爾酷睿)處理 器終極版、Intel Core 7 處理器、Intel Core i5 處理器、Intel Core 2 終極處 理器、Intel Core1^Quad (英特爾酷睿四核)處理器、Intel Coren^Duo (英特爾酷睿雙 核)處理器、Intel Pentium ((英特爾奔騰)處理器、以及Intel Celeron (英特 爾賽揚(yáng))處理器。替換地,指令處理裝置可以是專用處理器。合適的專用處理器的代表性示例包括, 但不限于,網(wǎng)絡(luò)處理器、通信處理器、加密處理器、圖形處理器、協(xié)作處理器、嵌入式處理器、 以及數(shù)字信號處理器(DSP),這里僅列舉了少數(shù)示例。這些處理器也可基于CISC、RISC、 VLIW、其混合、或完全其他類型的處理器。在其他實(shí)施例中,指令處理裝置可以是控制器(例如,微控制器),或能夠處理指令的其他類型的邏輯電路。再次參照圖2,在使用期間,指令處理裝置可接收加法指令212的實(shí)施例。作為示 例,加法指令可從存儲器或從軟件接收。在一個(gè)或多個(gè)實(shí)施例中,加法指令可指示第一源操 作數(shù)、第二源操作數(shù)和第三源操作數(shù)。加法指令可指示這三個(gè)源操作數(shù)將被求和且總和存 儲在由該加法指令指示的目標(biāo)操作數(shù)中。加法指令可隱式地指示和/或顯式地指定源和目 標(biāo)操作數(shù)。例如,加法指令可具有用于顯式地指定與一個(gè)或多個(gè)操作數(shù)相對應(yīng)的寄存器、存 儲器、或其他存儲位置的一個(gè)或多個(gè)專用字段或比特集。加法指令可代表由指令處理裝置識別的機(jī)器指令或控制信號。指令處理裝置可具 有可用于響應(yīng)于加法指令和/或如由加法指令指定地對三個(gè)源操作數(shù)執(zhí)行加法運(yùn)算并響 應(yīng)于加法指令或作為加法指令的結(jié)果將總和存儲在目標(biāo)地中的具體或特定電路或其他邏 輯(例如,軟件結(jié)合硬件和/或固件)。指令處理裝置的所示實(shí)施例包括指令解碼器214。解碼器可接收和解碼加法指令 212。解碼器可生成并輸出反映原始加法指令或從原始加法指令導(dǎo)出的一個(gè)或多個(gè)微操作、 微代碼進(jìn)入點(diǎn)、微指令、其他指令、或其他控制信號。解碼器可使用各種不同機(jī)制來實(shí)現(xiàn)。合 適機(jī)制的示例包括,但不限于,微代碼只讀存儲器(ROM)、查找表、硬件實(shí)現(xiàn)、可編程邏輯陣 列(PLA)等。解碼器不是該裝置的必要組件。在一個(gè)或多個(gè)其他實(shí)施例中,該裝置可替換地具 有指令仿真器、指令轉(zhuǎn)譯器、指令變形器、指令解讀器、或其他指令轉(zhuǎn)換邏輯。各種不同類型 的指令仿真器、指令變形器、指令轉(zhuǎn)譯器等是本領(lǐng)域公知的。指令轉(zhuǎn)換邏輯可接收加法指 令,仿真、轉(zhuǎn)譯、變形、解讀或以其他方式轉(zhuǎn)換加法指令,以及輸出與原始加法指令相對應(yīng)的 一個(gè)或多個(gè)指令或控制信號。指令轉(zhuǎn)換邏輯可以在軟件、硬件、固件、或其組合中實(shí)現(xiàn)。在 一些情形中,指令轉(zhuǎn)換邏輯的部分或全部可位于指令處理裝置的其余部分的片外,諸如為 單獨(dú)的管芯或在系統(tǒng)存儲器中。在一些情形中,指令處理裝置可具有解碼器和指令轉(zhuǎn)換邏 輯兩者。再次參照圖2,指令處理裝置包括執(zhí)行單元216。作為示例,執(zhí)行單元可包括算術(shù) 單元、算術(shù)邏輯單元等。執(zhí)行單元包括能夠執(zhí)行加法——諸如例如有符號和無符號整數(shù)加 法——的加法單元218。在所示實(shí)施例中,執(zhí)行單元與解碼器的輸出耦合或以其他方式通信。術(shù)語“耦合” 可意味著兩個(gè)或多個(gè)元件直接電氣接觸或連接。然而,術(shù)語“耦合”也可意味著兩個(gè)或更多 的元件彼此并不直接接觸,但是仍然彼此協(xié)作或交互(例如,通過居間組件)。作為一個(gè)示 例,解碼器和執(zhí)行單元可通過居間任選緩沖器和/或通過本領(lǐng)域已知能夠耦合在解碼器和 執(zhí)行單元之間的一個(gè)或多個(gè)其他組件彼此耦合。作為解碼器解碼加法指令的結(jié)果,執(zhí)行單 元可接收反映加法指令或從加法指令導(dǎo)出的一個(gè)或多個(gè)微操作、微代碼進(jìn)入點(diǎn)、微指令、其 他指令、或其他控制信號。替換地,執(zhí)行單元可接收和執(zhí)行來自前述指令轉(zhuǎn)換邏輯的指令或 控制信號。作為加法指令的結(jié)果,解碼器或該裝置的另一部分可訪問由該加法指令指示的三 個(gè)源操作數(shù)。源操作數(shù)可存儲在寄存器、存儲器、或其他存儲位置。在所示實(shí)施例中,第一 源操作數(shù)(SRCl)、第二源操作數(shù)(SRC2)和第三源操作數(shù)(SRC3)皆存儲在寄存器集220的 寄存器中,但不要求如此。
寄存器集220連同潛在可能的其他寄存器(例如,控制寄存器、狀態(tài)寄存器、標(biāo)志 寄存器等)可以是寄存器文件的一部分。每個(gè)寄存器可以為可用于存儲數(shù)據(jù)的存儲位置或 設(shè)備。各種不同類型的寄存器是合適的,只要它們能夠如本文中所描述地存儲并提供數(shù)據(jù)。 寄存器可以或可以被重命名。合適寄存器的示例包括,但不限于,專用物理寄存器、使用寄 存器重命名的動態(tài)分配物理寄存器、專用和動態(tài)分配物理寄存器的組合等。寄存器集常常 可物理地與執(zhí)行單元位于相同管芯上。寄存器可從處理器外部或從程序員的觀點(diǎn)可見。例 如,指令可指定存儲在寄存器中的操作數(shù)。執(zhí)行單元可包括能夠執(zhí)行加法指令(例如,從加法指令導(dǎo)出的一個(gè)或多個(gè)指令或 其他控制信號)的電路或其他執(zhí)行邏輯(例如,軟件和/或硬件和/或固件的各種組合)。 在一個(gè)或多個(gè)實(shí)施例中,作為指示第一源操作數(shù)(SRCl)、第二源操作數(shù)(SRC2)和第三源操 作數(shù)(SRC3)的加法指令212的結(jié)果,執(zhí)行單元可用于將該第一、第二和第三源操作數(shù)的總 和作為該加法指令的結(jié)果部分地存儲在由該加法指令指示的目標(biāo)操作數(shù)(DEST)中。如圖 所示,目標(biāo)操作數(shù)(DEST)可以是寄存器。替換地,目標(biāo)操作數(shù)可以是存儲器中的位置或另 一存儲位置。在該說明中,目標(biāo)操作數(shù)對應(yīng)于與用于源操作數(shù)的寄存器分開的寄存器。替 換地,用于源操作數(shù)的寄存器也可用于目標(biāo)操作數(shù),例如目標(biāo)操作數(shù)可覆寫源操作數(shù)。在一個(gè)或多個(gè)實(shí)施例中,除了部分地存儲在目標(biāo)操作數(shù)(DEST)中,該總和還可被 部分地存儲在多個(gè)標(biāo)志中,諸如第一標(biāo)志222和第二標(biāo)志224。如圖所示,這些標(biāo)志可存儲 在寄存器226中,諸如舉例而言狀態(tài)寄存器、標(biāo)志寄存器、或條件代碼寄存器,但這不是必 須的。處理器和各種其他類型的邏輯器件往往具有標(biāo)志。例如,標(biāo)志可各自包括一個(gè)或 多個(gè)比特,且每個(gè)比特可具有二進(jìn)制值1或0。標(biāo)志的這些不同值可能具有處理器或其他邏 輯器件所指派或理解的涵意。這些標(biāo)志用于各種不同目標(biāo)。在一些情形中,標(biāo)志用于記錄 操作的情形、狀態(tài)、條件或結(jié)果。在一個(gè)或多個(gè)實(shí)施例中,第一標(biāo)志222可以是進(jìn)位標(biāo)志,且進(jìn)位標(biāo)志222可用于存 儲總和的一部分。進(jìn)位標(biāo)志是處理器和其他邏輯器件中常見的公知類型的架構(gòu)標(biāo)志或狀態(tài) 標(biāo)志。進(jìn)位標(biāo)志可用于指示算術(shù)運(yùn)算中是否有溢出。例如,進(jìn)位標(biāo)志可以是單個(gè)比特,若在 先前運(yùn)算期間有溢出——諸如算術(shù)運(yùn)算的結(jié)果的最高有效位的進(jìn)位或借位——則該比特 可具有第一值(例如,二進(jìn)制值1),否則若沒有此類溢出則進(jìn)位標(biāo)志可具有第二值(例如, 二進(jìn)制值0)。進(jìn)位標(biāo)志可用于指示算術(shù)運(yùn)算已生成大于給定寄存器或存儲位置中的比特?cái)?shù) 能表示的數(shù)量的結(jié)果。進(jìn)位標(biāo)志可用在諸如加法和減法等算術(shù)運(yùn)算中。為了進(jìn)一步說明可如何在加法中使用進(jìn)位標(biāo)志,考慮其中使用8位無符號整數(shù) 將數(shù)字255和255加在一起的示例。值255加255等于510。數(shù)字510以二進(jìn)制表示為 “111111110”。然而,注意“111111110”有9位而非只有8位。換言之,以二進(jìn)制表示數(shù)字 510需要9位而非僅僅8位。8個(gè)最低有效位“11111110”是數(shù)字254的二進(jìn)制表示。由于 255加255的總和產(chǎn)生第八個(gè)最高有效位“進(jìn)位”到第九位,因此進(jìn)位標(biāo)志可被設(shè)為值1。將 進(jìn)位標(biāo)志設(shè)為值1可向機(jī)器指示8位無符號解釋的結(jié)果是不正確的,和/或可指示正確結(jié) 果是1位進(jìn)位標(biāo)志與該8位結(jié)果的9位級聯(lián)。進(jìn)位標(biāo)志可用于諸如加法或/和減法等后續(xù) 算術(shù)運(yùn)算(例如,作為進(jìn)位)。在一個(gè)或多個(gè)實(shí)施例中,第一標(biāo)志222可以是進(jìn)位標(biāo)志,且第二標(biāo)志2M可以是架構(gòu)標(biāo)志,其可用于粗略地類似使用進(jìn)位標(biāo)志222的方式。架構(gòu)標(biāo)志2 可用于指示算術(shù)運(yùn) 算中是否有溢出。例如,架構(gòu)標(biāo)志2 可以是單個(gè)比特,若先前運(yùn)算期間進(jìn)位標(biāo)志222有溢 出則該比特可具有第一值(例如,二進(jìn)制值1),否則若進(jìn)位標(biāo)志222沒有此類溢出則架構(gòu)標(biāo) 志2M可具有第二值(例如,二進(jìn)制值0)。架構(gòu)標(biāo)志2M可用于指示算術(shù)運(yùn)算已生成大于 給定寄存器或存儲位置中的比特?cái)?shù)加上第一標(biāo)志(例如,進(jìn)位標(biāo)志)能表示的數(shù)量的結(jié)果。 第一標(biāo)志(例如,進(jìn)位標(biāo)志)222和第二或附加架構(gòu)標(biāo)志2M各自可提供可用于存儲加法指 令的總和的至少一個(gè)附加比特。在一個(gè)或多個(gè)實(shí)施例中,第二或附加架構(gòu)標(biāo)志2 可以是溢出標(biāo)志。溢出標(biāo)志是 處理器和其他邏輯器件中常見的另一公知類型的架構(gòu)或狀態(tài)標(biāo)志。然而,溢出標(biāo)志按照慣 例不以上文描述的使用第二或附加架構(gòu)標(biāo)志2M的方式使用。在ADD和ADC指令的情形中, 溢出標(biāo)志目前被定義成檢測有符號整數(shù)的溢出。然而,溢出標(biāo)志按照慣例不結(jié)合另一標(biāo)志 用來存儲總和的一部分。另外,溢出標(biāo)志按照慣例不結(jié)合另一標(biāo)志用來提供多個(gè)進(jìn)位。另 外,溢出標(biāo)志按照慣例不用作無符號操作數(shù)的寬度的擴(kuò)展。因此,如上所述地使用溢出標(biāo)志是對進(jìn)位標(biāo)志的用途變更。替換地,在一個(gè)或多個(gè) 其他實(shí)施例中,可變更另一現(xiàn)有架構(gòu)標(biāo)志的用途。在現(xiàn)有架構(gòu)中,現(xiàn)有架構(gòu)標(biāo)志的這種用途 變更與引入全新的或?qū)S脴?biāo)志相比趨向于呈現(xiàn)對整個(gè)架構(gòu)和文件的較少改變。替換地,在 一個(gè)或多個(gè)實(shí)施例中,可針對用于本文所述用途的第一和/或第二標(biāo)志引入一個(gè)或多個(gè)新 的或?qū)S脴?biāo)志。為了避免混淆本描述,已示出和描述了相對簡單的指令處理裝置。將領(lǐng)會,其他實(shí) 施例可具有多個(gè)執(zhí)行單元。例如,該裝置可包括多個(gè)不同類型的執(zhí)行單元,例如算術(shù)單元、 算術(shù)邏輯單元(ALU)、整數(shù)單元等。這些單元中的至少一個(gè)可對如本文中公開的加法指令的 實(shí)施例作出響應(yīng)。其他實(shí)施例可具有多個(gè)核、邏輯處理器、或執(zhí)行引擎。可用于執(zhí)行如本文 中所公開的加法指令的執(zhí)行單元可被包括在至少一個(gè)、至少兩個(gè)、大多數(shù)、或所有核、邏輯 處理器或執(zhí)行引擎中。指令處理裝置還可任選地包括一個(gè)或多個(gè)其他公知組件。例如,其他實(shí)施例可任 選地包括指令讀取邏輯、預(yù)解碼邏輯、調(diào)度邏輯、重排序緩沖器、分支預(yù)測邏輯、引退邏輯、 寄存器重命名邏輯等、或其某種組合。這些組件可按照慣例實(shí)現(xiàn),或作少量修改,這基于本 公開對于本領(lǐng)域技術(shù)人員將是明顯的。對這些組件的進(jìn)一步描述對于理解本文中的實(shí)施例 不是必要的,盡管進(jìn)一步的描述已經(jīng)可在公眾文獻(xiàn)中獲得(若需要)。本領(lǐng)域中已知這些組 件的表面上眾多不同的組合和配置。本發(fā)明的范圍不限于任何已知的此類組合或配置。各 實(shí)施例可實(shí)現(xiàn)成有或沒有此類附加組件。圖3是示出可用于存儲加法指令的實(shí)施例的總和的寄存器330和多個(gè)標(biāo)志322、 324的組合的實(shí)施例的框圖。寄存器具有比特[N:0]。寄存器可用于存儲總和的一部分???和的幾個(gè)代表性比特被示為存儲在寄存器中。第一標(biāo)志322具有一個(gè)附加比特[N+1]。同樣,第二標(biāo)志3M具有一個(gè)附加比 特[N+2]。這些標(biāo)志的這兩個(gè)比特提供用于存儲總和的另一部分的兩個(gè)附加比特。標(biāo)志 [N+2:N+1]的這兩個(gè)比特可被機(jī)器解釋或理解為與寄存器的比特[N:0]的級聯(lián),從而提供 完整總和。比特[N+2]用于存儲總和的最高有效位(MS^。比特[N+1]用于存儲總和的次 最高有效位(MSB)。
作為一個(gè)具體示例,寄存器可具有用于存儲部分總和的比特[31:0],第一標(biāo)志 322可具有附加比特[32]以及第二標(biāo)志3M也可具有附加比特[33],它們一起用于存儲部 分總和。作為另一具體示例,寄存器可具有用于存儲部分總和的比特[63:0],以及第一和第 二標(biāo)志可具有用于存儲部分總和的兩個(gè)附加比特[65:64]。有利地,由第一和第二標(biāo)志提供的這些附加比特可允許存儲更大的總和。在加三 個(gè)數(shù)字時(shí),在一些情形中可能需要額外的進(jìn)位比特。在加三個(gè)源操作數(shù)時(shí),取決于這些操作 數(shù)的值,可使用和/或需要這些附加比特來存儲所得總和。考慮64位寄存器中的操作數(shù)的 示例。由于3個(gè)寄存器的最大無符號值可以是Q64-I),若OF CF = 1 1,則所得中間總 和最多可為3*264。該值小于066_1)。因此,除了由寄存器提供的64比特,由標(biāo)志提供的兩 個(gè)附加比特足以表示存儲在三個(gè)相應(yīng)64位寄存器中的任何三個(gè)值的總和的最高有效位。 將三個(gè)源操作數(shù)求和的加法指令生成的最大值將不導(dǎo)致溢出。類似地,除了 32位寄存器, 由標(biāo)志提供的兩個(gè)附加比特足以表示存儲在三個(gè)相應(yīng)32位寄存器中的任何三個(gè)值的總和 的最高有效位。在一個(gè)或多個(gè)實(shí)施例中,加法指令可加整數(shù)。在一個(gè)或多個(gè)實(shí)施例中,整數(shù)可以是 無符號整數(shù)。替換地,在一個(gè)或多個(gè)實(shí)施例中,整數(shù)可以是有符號整數(shù)。為了說明某些概念, 本公開將趨向于強(qiáng)調(diào)無符號整數(shù)的乘法,但本發(fā)明的范圍不限于此。圖4示出適用于各個(gè)實(shí)施例的各種無符號整數(shù)數(shù)值數(shù)據(jù)類型。第一類型是“字無 符號整數(shù)”。字無符號整數(shù)具有16位。第二類型是雙字無符號整數(shù)。雙字無符號整數(shù)具有 32位。第三類型是四字無符號整數(shù)。四字無符號整數(shù)具有64位。這些僅僅是少數(shù)說明性 示例。無符號整數(shù)的其他大小也是適用的,諸如字節(jié)或?qū)捰?4位字節(jié)(例如,1 位字節(jié))。 而且,類似有符號整數(shù)類型也是適用的。根據(jù)一個(gè)或多個(gè)實(shí)施例的加法指令可以是帶標(biāo)志加法指令,其可用于使執(zhí)行單元 和/或處理器(或其他指令處理裝置)生成部分地基于多個(gè)標(biāo)志計(jì)算出的總和。在一個(gè)或 多個(gè)實(shí)施例中,部分地基于多個(gè)標(biāo)志計(jì)算出的總和可包括三個(gè)源操作數(shù)的總和加上這多個(gè) 標(biāo)志的算術(shù)組合。圖5是對帶標(biāo)志加法指令513的實(shí)施例作出響應(yīng)的執(zhí)行單元516的實(shí)施例的 框圖。帶標(biāo)志加法指令指示第一源操作數(shù)(SRCl)、第二源操作數(shù)(SRC2)、第三源操作數(shù) (SRC3)、作為源操作數(shù)的第一標(biāo)志(Fl)和作為源操作數(shù)的第二標(biāo)志(F2)。該指令可將第一 和第二標(biāo)志指示為隱式或理解的源操作數(shù)。響應(yīng)于帶標(biāo)志加法指令,執(zhí)行單元可接收3此1、3此2、31^3、?1和?2。在一個(gè)或多 個(gè)實(shí)施例中,作為帶標(biāo)志加法指令的結(jié)果,執(zhí)行單元可用于將至少部分地基于標(biāo)志Fl和F2 計(jì)算出的SRC1、SRC2和SRC3的總和存儲在由該帶標(biāo)志加法指令指示的目標(biāo)操作數(shù)(DEST) 中。如圖所示,在一個(gè)或多個(gè)實(shí)施例中,總和可被計(jì)算為DEST = SRC1+SRC2+SCR3+F1+2*F2在該總和中,表達(dá)式“F1+2*F2”表示標(biāo)志Fl與F2的算術(shù)組合。第二標(biāo)志(F2)具 有乘數(shù)2。圖6示出表示具有多個(gè)標(biāo)志的標(biāo)志寄存器的示例實(shí)施例的EFLAGS寄存器626。該 EFLAGS寄存器為32位寄存器,其包括一群狀態(tài)標(biāo)志、一控制標(biāo)志、以及一群系統(tǒng)標(biāo)志。狀態(tài)標(biāo)志包括進(jìn)位標(biāo)志(CF,比特0)、奇偶校驗(yàn)標(biāo)志(PF,比特2)、輔助進(jìn)位標(biāo)志(AF,比特4)、零標(biāo)志(ZF,比特6)、符號標(biāo)志(SF,比特7),以及溢出標(biāo)志(0F,比特11)。如 前所述,在一個(gè)或多個(gè)實(shí)施例中,進(jìn)位標(biāo)志(CF,比特0)和溢出標(biāo)志(0F,比特11)可用作與 本文中公開的加法指令相關(guān)聯(lián)的第一和第二標(biāo)志222、224。出于此原因強(qiáng)調(diào)了 CF和OFjfi 不要求使用這些特定標(biāo)志。系統(tǒng)標(biāo)志包括陷阱標(biāo)志(TF,比特8)、中斷啟用標(biāo)志(IF,比特9)、I/O特權(quán)級 (I0PL,比特12-13)、嵌套任務(wù)(NT,比特14)、恢復(fù)標(biāo)志(RF,比特16)、虛擬8086模式(VM, 比特17)、對準(zhǔn)檢查(AC,比特18)、虛擬中斷標(biāo)志(VIF,比特19)、虛擬中斷待決(VIP,比特 20)、以及ID標(biāo)志(ID,比特21)??刂茦?biāo)志包括方向標(biāo)志(DF,比特10)。EFLAGS的比特 22-31保留。該EFLAGS寄存器是早先的16位FLAGS寄存器的繼承者。此外,在64位模式處理 器中,EFLAGS寄存器已被RFLAGS寄存器繼承且被擴(kuò)展到64比特。RFLAGS較低的32位與 EFLAGS寄存器相同。EFLAGS寄存器是具有用于實(shí)現(xiàn)一個(gè)或多個(gè)實(shí)施例的合適標(biāo)志的寄存器的一個(gè)特 定示例實(shí)施例,但該特定寄存器和這些特定標(biāo)志并非是必需的。EFLAGS/RFLAGS寄存器以 及進(jìn)位標(biāo)志(若需要)的附加描述參見htel 64 andIA-32 Architectures Software Developer' s Manual, Volume 1 :Basic Architecture, Order Number :253665_032US, September 2009 (Intel 64和IA-32架構(gòu)軟件開發(fā)者手冊第1卷基本架構(gòu),序號 253665-032US,2009 年 9 月)。在一個(gè)或多個(gè)實(shí)施例中,加法指令可指示通用寄存器集中的一個(gè)或多個(gè)源操作數(shù) 和/或一個(gè)或多個(gè)目標(biāo)操作數(shù)。在一個(gè)或多個(gè)實(shí)施例中,這些通用寄存器可用于存儲整數(shù)。圖7示出合適的32位通用寄存器集740的示例實(shí)施例。32位寄存器集包括8個(gè) 32位或雙字通用寄存器。這些寄存器被稱為EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP。這 些32位寄存器也可以16位和8位模式來尋址。EAX、EBX、ECX和EDX寄存器較低的16位 分別被稱為AX、BX、CX和DX。作為示例,具有16位的字無符號整數(shù)可分別被存儲在寄存器 BX、CX和DX中。具有32位的雙字無符號整數(shù)可被存儲在寄存器EAX、EBX、ECX、EDX、ESI、 EDI、EBP、ESP、R8D-R15D 中。圖8示出合適的64位通用寄存器集850的示例實(shí)施例。64位寄存器集包括16個(gè) 64位或四字通用寄存器。這些寄存器被稱為RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、 RIO、RlU R12、R13、R14和R15。這些寄存器可以32位模式對32位操作數(shù)進(jìn)行操作,并且 可以64位模式對64位操作數(shù)進(jìn)行操作。RAX、RBX、RCX、RDX、RSI、RDI、RBP和RSP寄存器 較低的32位分別對應(yīng)于EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP寄存器。寄存器R8-R15 較低的32位也可以32位模式來尋址并且被稱為R8D-R15D。作為示例,具有64位的四字無 符號整數(shù)可被存儲在寄存器RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP或R8-R15中。這些通用寄存器可用在各種x86架構(gòu)處理器中,且適用于實(shí)現(xiàn)一個(gè)或多個(gè)實(shí) 施例,但這些特定寄存器不一定必需。對這些通用寄存器(若需要)的附加描述參見 Intel 64 and IA-32 Architectures Software Developer' s Manual,Volume 1 :Basic Architecture, Order Number :253665_032US,September 2009 (Intel 64 禾口 IA—32 架構(gòu) 軟件開發(fā)者手冊第1卷基本架構(gòu),序號253665-032US,2009年9月)。根據(jù)一個(gè)特定示例實(shí)施例,加法指令是ADD3——三個(gè)操作數(shù)的無符號整數(shù)加法指令。ADD3指令可具有標(biāo)準(zhǔn)3字節(jié)x86操作碼,其可任選地具有REX前綴以尋址更多寄存器 和更寬的數(shù)據(jù)空間。ADD3指令是三操作數(shù)指令,其中兩個(gè)操作數(shù)是顯式操作數(shù),而另一個(gè)操作數(shù)是隱 式操作數(shù)。對ADD3指令的指令操作數(shù)編碼在表1中示出。表1. ADD3操作數(shù)編碼
權(quán)利要求
1.一種方法,包括接收加法指令,所述加法指令指示第一源操作數(shù)、第二源操作數(shù)和第三源操作數(shù);以及作為所述加法指令的結(jié)果,存儲使用所述第一、第二和第三源操作數(shù)計(jì)算出的總和,其 中所述總和部分地存儲在由所述加法指令指示的目標(biāo)操作數(shù)中且部分地存儲在多個(gè)標(biāo)志 中。
2.如權(quán)利要求1所述的方法,其特征在于,存儲包括將所述總和的次最高有效位存儲 在所述多個(gè)標(biāo)志中的第一標(biāo)志中以及將所述總和的最高有效位存儲在所述多個(gè)標(biāo)志中的 第二標(biāo)志中。
3.如權(quán)利要求1所述的方法,其特征在于,將所述總和部分地存儲在所述標(biāo)志中包括 將所述總和部分地存儲在進(jìn)位標(biāo)志中以及部分地存儲在第二標(biāo)志中。
4.如權(quán)利要求3所述的方法,其特征在于,所述第二標(biāo)志包括用途變更的架構(gòu)標(biāo)志。
5.如權(quán)利要求3所述的方法,其特征在于,所述第二標(biāo)志包括溢出標(biāo)志。
6.如權(quán)利要求1所述的方法,其特征在于,存儲所述總和包括存儲所述第一、第二和第 三源操作數(shù)的總和加上所述多個(gè)標(biāo)志的組合。
7.如權(quán)利要求6所述的方法,其特征在于,存儲所述總和包括存儲所述第一、第二和第 三源操作數(shù)的總和加上所述多個(gè)標(biāo)志中的第一標(biāo)志以及加上是所述多個(gè)標(biāo)志中的第二標(biāo) 志的兩倍的積。
8.如權(quán)利要求6所述的方法,其特征在于,所述多個(gè)標(biāo)志的組合包括溢出標(biāo)志,且所述 源操作數(shù)包括無符號整數(shù)。
9.如權(quán)利要求1所述的方法,其特征在于,接收包括接收作為寄存器來隱式地指定選 自所述第一、第二和第三源操作數(shù)的源操作數(shù)的加法指令,所述寄存器被隱 式地指定為相 同的指令集架構(gòu)的整數(shù)乘法指令的目標(biāo)操作數(shù)。
10.如權(quán)利要求1所述的方法,其特征在于,所述第一、第二和第三源操作數(shù)是具有選 自32位和64位的大小的無符號整數(shù)操作數(shù)。
11.如權(quán)利要求1所述的方法,其特征在于,所述方法作為大整數(shù)乘法的一部分執(zhí)行, 所述大整數(shù)大于用于存儲所述大整數(shù)的寄存器大小。
12.如權(quán)利要求1所述的方法,其特征在于,所述方法由具有多個(gè)核的通用微處理器執(zhí) 行,且所述核中的至少一個(gè)核具有響應(yīng)所述指令的電路。
13.一種裝置,包括執(zhí)行單元,用于作為指示第一源操作數(shù)、第二源操作數(shù)和第三源操作數(shù)的加法指令的 結(jié)果,存儲使用所述第一、第二和第三源操作數(shù)計(jì)算出的總和,其中所述總和部分地存儲在 由所述加法指令指示的目標(biāo)操作數(shù)中且部分地存儲在多個(gè)標(biāo)志中。
14.如權(quán)利要求13所述的裝置,其特征在于,所述執(zhí)行單元用于將所述總和的次最高 有效位存儲在所述多個(gè)標(biāo)志中的第一標(biāo)志中以及將所述總和的最高有效位存儲在所述多 個(gè)標(biāo)志中的第二標(biāo)志中。
15.如權(quán)利要求13所述的裝置,其特征在于,所述執(zhí)行單元用于將所述總和部分地存 儲在進(jìn)位標(biāo)志中以及部分地存儲在第二標(biāo)志中。
16.如權(quán)利要求15所述的裝置,其特征在于,所述第二標(biāo)志包括用途變更的架構(gòu)標(biāo)志。
17.如權(quán)利要求15所述的裝置,其特征在于,所述第二標(biāo)志包括溢出標(biāo)志。
18.如權(quán)利要求13所述的裝置,其特征在于,所述執(zhí)行單元用于存儲所述第一、第二和 第三源操作數(shù)的總和加上所述多個(gè)標(biāo)志的組合。
19.如權(quán)利要求18所述的裝置,其特征在于,所述執(zhí)行單元用于存儲所述第一、第二和 第三源操作數(shù)的總和加上所述多個(gè)標(biāo)志中的第一標(biāo)志以及加上是所述多個(gè)標(biāo)志中的第二 標(biāo)志的兩倍的積。
20.如權(quán)利要求18所述的裝置,其特征在于,所述執(zhí)行單元作用于存儲所述第一、第 二和第三源操作數(shù)的總和加上包括溢出標(biāo)志的標(biāo)志組合,其中所述源操作數(shù)包括無符號整數(shù)。
21.如權(quán)利要求13所述的裝置,其特征在于,所述執(zhí)行單元對作為寄存器來隱式地指 定選自所述第一、第二和第三源操作數(shù)的源操作數(shù)的加法指令作出響應(yīng),所述寄存器被隱 式地指定為相同的指令集架構(gòu)的整數(shù)乘法指令的目標(biāo)操作數(shù)。
22.如權(quán)利要求13所述的裝置,其特征在于,所述執(zhí)行單元對指定具有無符號整數(shù)的 所述源操作數(shù)的加法指令作出響應(yīng),所述無符號整數(shù)具有選自32位和64位的大小。
23.如權(quán)利要求11所述的裝置,其特征在于,所述執(zhí)行單元被包括在多核通用微處理 器的核內(nèi)。
24.如權(quán)利要求11所述的裝置,其特征在于,所述執(zhí)行單元被包括在專用加密設(shè)備內(nèi)。
25.一種裝置,包括 執(zhí)行單元,用于作為指示各自具有無符號整數(shù)的第一源操作數(shù)、第二源操作數(shù)和第三 源操作數(shù)的加法指令的結(jié)果,存儲使用所述第一、第二和第三源操作數(shù)計(jì)算出的總和加上 多個(gè)標(biāo)志的組合,其中所述總和部分地存儲在由所述加法指令指示的目標(biāo)操作數(shù)中且部分 地存儲在所述多個(gè)標(biāo)志中。
26.如權(quán)利要求25所述的裝置,其特征在于,所述執(zhí)行單元用于存儲所述第一、第二和 第三源操作數(shù)的總和加上所述多個(gè)標(biāo)志中的第一標(biāo)志以及加上是所述多個(gè)標(biāo)志中的第二 標(biāo)志的兩倍的積。
27.—種系統(tǒng),包括互連;耦合到所述互連的處理器,所述處理器用于作為指示第一源操作數(shù)、第二源操作數(shù)和 第三源操作數(shù)的加法指令的結(jié)果,存儲使用所述第一、第二和第三源操作數(shù)計(jì)算出的總和, 其中所述總和部分地存儲在由所述加法指令指示的目標(biāo)操作數(shù)中且部分地存儲在多個(gè)標(biāo) 志中;以及耦合至所述互連的動態(tài)隨機(jī)存取存儲器(DRAM)。
28.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述處理器用于存儲所述第一、第二和第 三源操作數(shù)的總和加上所述多個(gè)標(biāo)志的組合。
29.一種制品,包括包括固體物質(zhì)的有形機(jī)器可讀介質(zhì),用于提供加法指令,所述加法指令用于指示第一源操作數(shù)、第二源操作數(shù)和第三源操作數(shù),且若被機(jī)器執(zhí) 行則使所述機(jī)器執(zhí)行以下操作使用所述第一、第二和第三源操作數(shù)計(jì)算總和;以及將所述總和部分地存儲在由所述加法指令指示的目標(biāo)操作數(shù)中以及部分地存儲在多個(gè)標(biāo)志中。
30.如權(quán)利要求四所述的制品,其特征在于,所述處理器用于計(jì)算所述第一、第二和第 三源操作數(shù)的總和加上所述多個(gè)標(biāo)志的組合。
全文摘要
一個(gè)方面中的方法可包括接收加法指令。加法指令可指示第一源操作數(shù)、第二源操作數(shù)和第三源操作數(shù)。可存儲第一、第二和第三源操作數(shù)的總和作為該加法指令的結(jié)果。該總和可部分地存儲在由加法指令指示的目標(biāo)操作數(shù)中以及部分地存儲在多個(gè)標(biāo)志中。還公開了其他方法,和裝置、系統(tǒng)以及機(jī)器可讀介質(zhì)上的指令。
文檔編號G06F9/302GK102103486SQ20101061803
公開日2011年6月22日 申請日期2010年12月21日 優(yōu)先權(quán)日2009年12月22日
發(fā)明者A·法希, B·L·托爾, E·奧茲圖科, G·M·沃爾里齊, J·D·吉爾福德, M·C·戴維斯, M·G·迪克森, M·洛克西金, S·P·米萊克斯, V·戈帕爾, W·K·費(fèi)格哈利 申請人:英特爾公司