即時(shí)生成矢量常量的最佳指令序列是什么?“最佳”是指最少的指令(或最少的微指令,如果有任何指令解碼到一個(gè)以上的微指令)。機(jī)器碼大?。ㄒ宰止?jié)為單位)是相等的insn計(jì)數(shù)的平局。從本質(zhì)上講,恒定生成是新的依賴鏈的開(kāi)始,因此延遲很重要。在循環(huán)內(nèi)生成常量也很不常見(jiàn),因此吞吐量和執(zhí)行端口需求也幾乎無(wú)關(guān)緊要。生成常量而不是加載常量需要更多指令(全零或全一除外),因此確實(shí)會(huì)占用寶貴的uop緩存空間。與數(shù)據(jù)緩存相比,這可能是更為有限的資源。Agner Fog出色的《優(yōu)化裝配》指南在中對(duì)此進(jìn)行了介紹Section 13.4。表13.10具有用于產(chǎn)生向量序列,每一個(gè)元素是0,1,2,3,4,-1,或-2,與從8位到64位單元大小。表13.11具有用于產(chǎn)生一些浮點(diǎn)值序列(0.0,0.5,1.0,1.5,2.0,-2.0,和位掩碼為符號(hào)位。)Agner Fog的序列僅出于設(shè)計(jì)目的或因?yàn)橐延幸欢螘r(shí)間沒(méi)有更新而僅使用SSE2。簡(jiǎn)短的非顯而易見(jiàn)的指令序列還可以生成其他哪些常量? (具有不同移位計(jì)數(shù)的進(jìn)一步擴(kuò)展是顯而易見(jiàn)的,并且沒(méi)有“興趣”。)是否有更好的序列來(lái)生成Agner Fog列出的常數(shù)?如何將128位立即數(shù)移動(dòng)到XMM寄存器說(shuō)明了一些將任意128b常量放入指令流中的方法,但這通常不明智(它不節(jié)省任何空間,并占用大量的uop緩存空間。)
即時(shí)生成矢量常量的最佳指令序列是什么?
哈士奇WWW
2019-09-26 10:00:24