国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      堆棧存儲(chǔ)的變量值預(yù)測(cè)的制作方法_2

      文檔序號(hào):8472904閱讀:來(lái)源:國(guó)知局
      堆棧時(shí),它被寫(xiě)至堆棧指針?biāo)赶虻奈?置,并且例如通過(guò)將指針增加4 (即,4字節(jié)=32位)來(lái)更新堆棧指針的值(從而使得該堆 棧指針指向下一非使用的條目)。當(dāng)隨后從堆棧中移除(或"彈出")數(shù)據(jù)元素時(shí),移除該 數(shù)據(jù)元素并且更新堆棧指針以指向更短堆棧上的下一非使用條目。
      [0036] 為了以下描述的目的并如圖1所示,堆棧100 (具有由箭頭102所指示的堆棧原 點(diǎn))被認(rèn)為是向下生長(zhǎng),從而使得當(dāng)數(shù)據(jù)被推入堆棧時(shí)(例如,當(dāng)添加數(shù)據(jù)108時(shí),在堆棧 指針從由箭頭104所標(biāo)記的位置移動(dòng)到由箭頭106所標(biāo)記的位置時(shí))堆棧指針的值減小, 并且當(dāng)從堆棧彈出數(shù)據(jù)時(shí)(例如,當(dāng)移除數(shù)據(jù)108時(shí),在堆棧指針從箭頭106所標(biāo)記的位置 移動(dòng)至由箭頭104所標(biāo)記的位置時(shí))該堆棧指針的值增大。然而,將理解到,如果堆棧被認(rèn) 為是向上生長(zhǎng)(其中當(dāng)數(shù)據(jù)被推入堆棧時(shí)堆棧指針值增加,而當(dāng)數(shù)據(jù)被從堆棧彈出時(shí)堆棧 指針值減小),則本文中描述的方法是同等可應(yīng)用的。
      [0037] 在由程序所使用的變量被存儲(chǔ)在堆棧100中的情況下(例如,在存在不足的虛擬 寄存器情況下),這些變量被存儲(chǔ)在可以由距當(dāng)前堆棧指針位置(如由箭頭114所指示的) 的偏移112所引用的位置中(例如,圖1中的陰影位置110)。替選地,當(dāng)在函數(shù)中存在動(dòng)態(tài) 堆棧生長(zhǎng)的情況下,則位置可以由距幀指針而非堆棧指針的偏移所引用。如果在堆棧中存 儲(chǔ)的變量隨后被讀取回寄存器中從而能夠使用這些變量,則這引入了顯著的延遲。
      [0038] 以下描述對(duì)堆棧保存變量的值進(jìn)行預(yù)測(cè)的方法。通過(guò)預(yù)測(cè)該值,而非從存儲(chǔ)器中 讀取它,消除了與從堆棧中讀取該值相關(guān)聯(lián)的延遲。在以下描述的方法中,當(dāng)變量被存儲(chǔ)到 堆棧以釋放虛擬寄存器時(shí),連同變量被存儲(chǔ)在堆棧中的何處的細(xì)節(jié)一起,數(shù)據(jù)條目被存儲(chǔ) 在記錄了其中存儲(chǔ)有變量的值(在它被存儲(chǔ)到堆棧中之前)的物理寄存器的數(shù)據(jù)結(jié)構(gòu)中。 隨后,當(dāng)存在從堆棧加載變量的指令時(shí),之前存儲(chǔ)的數(shù)據(jù)條目能夠用于標(biāo)識(shí)哪個(gè)物理寄存 器包含該變量的值,并且新的虛擬寄存器能夠被映射到該物理寄存器。在一些示例中,不執(zhí) 行從存儲(chǔ)器的加載,而在其它示例中,仍然可以執(zhí)行從存儲(chǔ)器的加載但預(yù)測(cè)的值用于使得 能夠與該加載并行地執(zhí)行相關(guān)指令并且該加載僅用于核對(duì)預(yù)測(cè)的值(即,在數(shù)據(jù)結(jié)構(gòu)中標(biāo) 識(shí)的、并且新的虛擬寄存器被映射到的物理寄存器中存儲(chǔ)的值)是正確的。還描述進(jìn)一步 的方法,這些進(jìn)一步的方法使得該方法能夠在函數(shù)調(diào)用之后和/或在未使用寄存器重命名 的情況下工作。
      [0039] 圖2示出了對(duì)保存到堆棧的變量的值進(jìn)行預(yù)測(cè)的示例方法的流程圖。如圖2所示, 當(dāng)出現(xiàn)參照堆棧指針而存儲(chǔ)值(在更高等級(jí)的構(gòu)造中,該值也可以被稱(chēng)作變量)的指令時(shí) (塊202),與該存儲(chǔ)指令對(duì)應(yīng)的數(shù)據(jù)條目被存儲(chǔ)在新的數(shù)據(jù)結(jié)構(gòu)中(塊204),該新的數(shù)據(jù)結(jié) 構(gòu)在本文中可以被稱(chēng)作"堆棧保存的值存儲(chǔ)區(qū)"。例如可以通過(guò)檢查該指令以查找在重命名 前具有以下形式的指令來(lái)檢測(cè)(在塊202中)該指令:
      [0040]STReg, [SP+#offset]
      [0041](其中,Reg可以是任意的,#offset(偏移)是字面值(literalvalue),并且SP 指的是虛擬堆棧指針),并且在一些示例中,也可以使用基于PC(程序計(jì)數(shù)器)的信任表 (confidencetable)。每個(gè)數(shù)據(jù)條目包括三個(gè)元素:存儲(chǔ)當(dāng)前堆棧指針值的物理寄存器 的寄存器ID(Psp)、在變量的值被存儲(chǔ)到堆棧之前存儲(chǔ)該變量的值的物理寄存器的寄存器 ID(P)、以及到該變量所存儲(chǔ)處的當(dāng)前堆棧指針的偏移(0)。在一些示例中,所有三個(gè)元素 (PSP、P和0)被全部包括在一個(gè)數(shù)據(jù)條目?jī)?nèi)。在其它示例中,盡管在數(shù)據(jù)條目?jī)?nèi)表示所有三 個(gè)元素,但是它們可以不被全部包括;然而,這可能導(dǎo)致增加數(shù)量的不正確預(yù)測(cè)。例如,可以 包括Psp的位的子集而非全部包括PSP,并且類(lèi)似地可以包括0的位的子集而非全部包括0。 在其它示例中,可以使用來(lái)自Psp和〇的位的組合(而非全部的PSP和〇),例如,PSP和〇的 "哈希",例如,使用XOR邏輯函數(shù)來(lái)將Psp的位與0的位進(jìn)行組合的結(jié)果。
      [0042] 如上所述,當(dāng)在函數(shù)中存在動(dòng)態(tài)的堆棧生長(zhǎng)的情況下,可以通過(guò)距幀指針而非堆 棧指針的偏移來(lái)參照該位置,并且在這種情況下,將存儲(chǔ)當(dāng)前幀指針值的物理寄存器的寄 存器ID存儲(chǔ)在適當(dāng)?shù)奈恢茫≒fp),而非存儲(chǔ)當(dāng)前堆棧指針值的物理寄存器的寄存器ID(Psp)。 然后,所存儲(chǔ)的偏移〇是到該變量所存儲(chǔ)處的當(dāng)前幀指針的偏移。查找過(guò)程維持不變,而不 管在兩種情況下是Psp還是PFP被存儲(chǔ)作為存儲(chǔ)物理寄存器ID的表。為了清楚的目的,以下 描述指的是存儲(chǔ)PSP,但是將理解到,該描述也適用于存儲(chǔ)Pfp的情形。
      [0043] 在堆棧保存的值存儲(chǔ)區(qū)中存在許多數(shù)據(jù)條目,并且該存儲(chǔ)區(qū)可以被設(shè)置為以任意 適當(dāng)?shù)姆绞酱鎯?chǔ)實(shí)施例,并且以下描述的示例僅提供少量的示例。在一個(gè)示例中,每個(gè)數(shù)據(jù) 條目可以包括用于堆棧指針的5位寄存器ID,用于寄存器ID的5位條目保持有在變量被 存儲(chǔ)到堆棧中之前的該變量并且如果容納堆棧內(nèi)的可能偏移的全部范圍,則偏移可以例如 是16位尺寸。然而,由于實(shí)際偏移可能在尺寸上要小得多,因而在堆棧保存的變量存儲(chǔ)區(qū) 中存儲(chǔ)的偏移的尺寸可以在尺寸上被限制到例如5位。
      [0044] 在能夠被存儲(chǔ)在堆棧保存的變量存儲(chǔ)區(qū)中的偏移的尺寸被限制(例如,到5位的 條目)的情況下,存在多個(gè)不同機(jī)制,這些機(jī)制可以用于解決不太可能發(fā)生的實(shí)際偏移大 于能夠在可用條目中存儲(chǔ)的偏移的事件。在第一示例中,未存儲(chǔ)條目,從而使得隨后不能預(yù) 測(cè)變量的值并且相反必須從堆棧中讀取變量的值。在第二示例中,僅存儲(chǔ)底部(即,最不重 要的)位。如果所存儲(chǔ)的這5位與在堆棧保存的值存儲(chǔ)區(qū)中的另一條目匹配,則這可能導(dǎo) 致不正確的預(yù)測(cè)。在第三示例中,所存儲(chǔ)的偏移值可能不是實(shí)際偏移,而是創(chuàng)建5位值的偏 移值的哈希(這減少了堆棧保存的值存儲(chǔ)區(qū)中的兩個(gè)條目之間的匹配的風(fēng)險(xiǎn))。
      [0045] 在示例中,可以識(shí)別出以下參照堆棧指針而存儲(chǔ)值的指令(在塊202中):
      [0046] STR2 8[SP]
      [0047] 其中,R2是要被存儲(chǔ)到堆棧中的虛擬寄存器,并且這要被存儲(chǔ)在距堆棧指針(SP) 的偏移8處。這可以通過(guò)處理器中的解碼和重命名級(jí)來(lái)(使用寄存器重命名映射)進(jìn)行翻 譯以:
      [0048] STP8 8[P4]
      [0049] 假設(shè)在該示例中,虛擬寄存器R2當(dāng)前被映射到物理寄存器P8并且當(dāng)前堆棧指針 被存儲(chǔ)在物理寄存器P4中。這導(dǎo)致堆棧保持的變量存儲(chǔ)區(qū)中的條目包括三個(gè)元素:P4、P8 和8。
      [0050] 在示例中,堆棧保存的值存儲(chǔ)區(qū)可以是表的形式:
      [0051]
      【主權(quán)項(xiàng)】
      1. 一種對(duì)處理器中的堆棧中存儲(chǔ)的變量的值進(jìn)行預(yù)測(cè)的方法,所述堆棧具有堆棧指 針,并且所述方法包括: 響應(yīng)于檢測(cè)到參照所述堆棧指針而將變量存儲(chǔ)到所述堆棧的指令(202),在數(shù)據(jù)結(jié) 構(gòu)中存儲(chǔ)數(shù)據(jù)條目,所述數(shù)據(jù)條目包括用于所述堆棧指針的唯一ID、表示所述變量被存儲(chǔ) 到所述堆棧之前的所述變量的值的參數(shù)、以及所述變量所存儲(chǔ)處與所述堆棧指針的偏移 (204); 響應(yīng)于隨后檢測(cè)到參照所述堆棧指針而從所述堆棧加載變量的指令(206),在所述數(shù) 據(jù)結(jié)構(gòu)中搜索與所檢測(cè)到的指令對(duì)應(yīng)的條目(208);并且 響應(yīng)于找到所述數(shù)據(jù)結(jié)構(gòu)中的對(duì)應(yīng)條目(210),使用在所述對(duì)應(yīng)條目中存儲(chǔ)的信息來(lái) 更新在所檢測(cè)到的指令中引用的虛擬寄存器的有效值(212)。
      2. 根據(jù)權(quán)利要求1所述的方法,其中,對(duì)應(yīng)條目包括與所檢測(cè)到的指令中的偏移和堆 棧指針信息對(duì)應(yīng)的偏移和用于所述堆棧指針的唯一ID。
      3. 根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 響應(yīng)于沒(méi)有找到所述數(shù)據(jù)結(jié)構(gòu)中的對(duì)應(yīng)條目(210),執(zhí)行所檢測(cè)到的指令(214)。
      4. 根據(jù)權(quán)利要求1所述的方法,其中,用于所述堆棧指針的唯一ID是每當(dāng)所述堆棧增 大或縮小時(shí)所更新的標(biāo)識(shí)符。
      5. 根據(jù)權(quán)利要求4所述的方法,其中,所述表示所述變量被存儲(chǔ)到所述堆棧之前的所 述變量的值的參數(shù)包括所述變量被存儲(chǔ)到所述堆棧之前的所述變量的值。
      6. 根據(jù)權(quán)利要求1所述的方法,其中,用于所述堆棧指針的唯一ID是存儲(chǔ)所述堆棧指 針的當(dāng)前值的物理寄存器的寄存器ID。
      7. 根據(jù)權(quán)利要求6所述的方法,其中,所述表示所述變量被存儲(chǔ)到所述堆棧之前的所 述變量的值的參數(shù)包括存儲(chǔ)有在所述變量被存儲(chǔ)到所述堆棧之前的所述變量的值的物理 寄存器的寄存器ID。
      8. 根據(jù)權(quán)利要求6所述的方法,其中,對(duì)應(yīng)條目包括與所檢測(cè)到的指令中的偏移對(duì)應(yīng) 的偏移,并且進(jìn)一步包括存儲(chǔ)有所述堆棧指針的值的、與存
      當(dāng)前第2頁(yè)1 2 3 
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1