青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天衣有縫

冠蓋滿京華,斯人獨(dú)憔悴~
posts - 35, comments - 115, trackbacks - 0, articles - 0
   :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

fpu, mmx及sse的一些 介紹(原創(chuàng))

Posted on 2007-04-18 15:57 天衣有縫 閱讀(4697) 評論(2)  編輯 收藏 引用 所屬分類: program
為什么要需要FPU和MMX/SSE?
提供了SIMD環(huán)境(single instruction multi data),即單指令多數(shù)據(jù)。
內(nèi)嵌浮點(diǎn)運(yùn)算單元,64及128位寄存器等。甚至sin/cos等數(shù)學(xué)函數(shù)也囊括其中,
著名的xvid項(xiàng)目就是使用gcc編譯后使用MMX/SSE優(yōu)化匯編的典型案例。

轉(zhuǎn)載請注明原創(chuàng):http://www.shnenglu.com/jinglexy
msn and mail: jinglexy at yahoo dot com dot cn 上海體育館2007.4.18

FPU: 8個80位浮點(diǎn)寄存器(數(shù)據(jù)),16位狀態(tài)寄存器,16位控制寄存器,16為標(biāo)識寄存器。
     使用FPU指令對這些寄存器進(jìn)行操作,這些寄存器構(gòu)成一個循環(huán)棧,st7棧底,st0棧頂,
     當(dāng)一個值被壓入時,被存入st0,原來st0中的值被存入st7
MMX: 將8個FPU寄存器重命名為8個64位MMX寄存器,即mm0到mm7。
     57條MMX指令,加快了整形浮點(diǎn)運(yùn)算,但是對于復(fù)雜浮點(diǎn)運(yùn)算無幫助

SSE: 8個128位寄存器(從xmm0到xmm7),MXSCR寄存器,EFLAGS寄存器,專有指令(復(fù)雜浮點(diǎn)運(yùn)算)
SSE2: 寄存器和SSE相同,增加了5種數(shù)據(jù)類型(都是128位),專有指令
SSE3: 僅增加了幾個新的指令

由于MMX使用的寄存器影射到FPU寄存器上,所以MMX指令執(zhí)行前,需要保存FPU堆棧。

示例1,F(xiàn)PU寄存器及指令使用(下面所有程序都使用at&t風(fēng)格匯編):
data1:
        .byte 0x34, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
data2:
        .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.section .text
.globl _start
_start:
        nop
        fbld  data1     壓入st0
        fimul data2     st0中的值和data2相乘,保存在st0中
        fbstp data1     st0彈出到內(nèi)存44


示例2, SSE寄存器及指令使用
.lcomm data 16
value1:
        .float 12.34, 2345.543, -3493.2, 0.44901
value2:
        .float -54439.234, 23231.4, 1.0098, 0.000003
.section .text
.globl _start
_start:
        movups value1, %xmm0
        movups value2, %xmm1
        movups %xmm0, %xmm2
        movups %xmm0, data


Feedback

# re: fpu, mmx及sse的一些 介紹(原創(chuàng))  回復(fù)  更多評論   

2008-02-19 14:47 by 海楓
你好,我最近也在看FPU的資料(Intel CPU的官方文檔)

想向你請教一下:
FPU,SEE和MMX是不是有重疊的部分呢?

在Intel CPU下的GCC對于浮點(diǎn)計算部分代碼是不是轉(zhuǎn)換上只用FPU的指令呢?
下面是我在Linux下跑的一個例子,前一部分代碼是C源代碼,后一部分代碼是GCC處理后的相應(yīng)匯編代碼,我發(fā)現(xiàn)里面只有涉及FPU的東西,而沒有MMX和SEE。

ylin@ylin:~/program/c$ cat double.c

double sum(double s1, double s2)
{
int i = 1;
double c = 3.0;
c += s1;
c += s2;
c += i;

return c;
}


void test()
{
sum(1.0, 2.0);
}
ylin@ylin:~/program/c$ cat double.s
.file "double.c"
.section .rodata
.align 8
.LC0:
.long 0
.long 1074266112
.text
.globl sum
.type sum, @function
sum:
pushl %ebp
movl %esp, %ebp
subl $32, %esp
movl 8(%ebp), %eax
movl %eax, -24(%ebp)
movl 12(%ebp), %eax
movl %eax, -20(%ebp)
movl 16(%ebp), %eax
movl %eax, -32(%ebp)
movl 20(%ebp), %eax
movl %eax, -28(%ebp)
movl $1, -4(%ebp)
fldl .LC0
fstpl -16(%ebp)
fldl -16(%ebp)
faddl -24(%ebp)
fstpl -16(%ebp)
fldl -16(%ebp)
faddl -32(%ebp)
fstpl -16(%ebp)
fildl -4(%ebp)
fldl -16(%ebp)
faddp %st, %st(1)
fstpl -16(%ebp)
fldl -16(%ebp)
leave
ret
.size sum, .-sum
.section .rodata
.align 8
.LC2:
.long 0
.long 1073741824
.text
.globl test
.type test, @function
test:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
fldl .LC2
fstpl 8(%esp)
fld1
fstpl (%esp)
call sum
fstp %st(0)
leave
ret
.size test, .-test
.ident "GCC: (GNU) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)"
.section .note.GNU-stack,"",@progbits

# re: fpu, mmx及sse的一些 介紹(原創(chuàng))[未登錄]  回復(fù)  更多評論   

2008-03-19 10:44 by 補(bǔ)考少年
[b]原始短消息:[/b] [url=http://bbs.chinaunix.net/pm.php?action=view&folder=inbox&pmid=757158]你好![/url]
[quote]我在你的博客中有留言??!
想問你個問題!
期待你的回復(fù)??![/quote]


很抱歉,才看到你的短信
FPU,SEE和MMX是不是有重疊的部分呢?
你是說寄存器重疊嗎?fpu和mmx使用相同的寄存器,名字不同,使用任意一個之前最好保存相關(guān)上下文寄存器。
sse和sse2只有比較新的cpu(pII以上)才支持,為了保證兼容性,默認(rèn)編譯器不會使用它。
gcc幫助中有:
i386 and x86-64 Options -mtune=cpu-type -march=cpu-type -mfp-
math=unit -masm=dialect -mno-fancy-math-387 -mno-fp-ret-in-387
-msoft-float -msvr3-shlib -mno-wide-multiply -mrtd -malign-dou-
ble -mpreferred-stack-boundary=num -mmmx -msse -msse2 -msse3
-m3dnow -mthreads -mno-align-stringops -minline-all-stringops
-mpush-args -maccumulate-outgoing-args -m128bit-long-double
-m96bit-long-double -mregparm=num -momit-leaf-frame-pointer
-mno-red-zone -mno-tls-direct-seg-refs -mcmodel=code-model -m32
-m64
就像沒有fpu的時候使用libc中軟浮點(diǎn)一樣,默認(rèn)gcc對一些復(fù)雜算法使用fpu指令和軟件算法來解決
可以比較一下:
gcc -c double.c -o double -msse2
objdump -d double
gcc -c double.c -o double -m3dnow
objdump -d double
對優(yōu)化的一些猜測:針對各個平臺編譯一套dll或.so(不同的編譯優(yōu)化選項(xiàng)),然后啟動時判斷平臺,加載不同的dll

具體的我也沒深入研究過,都是一知半解,希望對你有幫助
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品综合| 亚洲成色精品| 亚洲精品黄色| 欧美日韩精品伦理作品在线免费观看| 国产伦精品一区二区| 亚洲一区视频在线| 亚洲国产另类 国产精品国产免费| 亚洲在线电影| 国产精品揄拍一区二区| 一区二区三区免费网站| av成人免费观看| 国产精品私人影院| 欧美中文字幕| 久久精彩免费视频| 国语自产精品视频在线看8查询8 | 亚洲国产精品一区在线观看不卡| 久久综合九色综合久99| 蜜桃久久精品乱码一区二区| 亚洲精品美女免费| 亚洲尤物在线| 国内精品久久久| 欧美成年人视频网站欧美| 欧美黄色精品| 欧美在线免费视频| 久热精品视频| 亚洲欧美日韩一区二区| 久久久久国产精品www| 一本色道综合亚洲| 亚洲一区中文| 依依成人综合视频| 99精品久久久| 国产色爱av资源综合区| 亚洲国产精品黑人久久久 | 在线中文字幕日韩| 亚洲国产视频一区| 亚洲天堂久久| 99成人精品| 久久蜜桃资源一区二区老牛| 日韩天堂在线观看| 免费观看在线综合| 久久综合给合久久狠狠色 | 在线观看欧美激情| 久久黄色级2电影| 亚洲欧美伊人| 欧美日韩国产在线播放| 欧美护士18xxxxhd| 亚洲第一福利视频| 久久久噜噜噜久久人人看| 亚洲一品av免费观看| 欧美日韩视频第一区| 欧美一区二区视频免费观看 | 日韩视频免费在线| 国产亚洲综合性久久久影院| 国内外成人免费激情在线视频| 久久久精品一品道一区| 亚洲成人在线视频播放| 亚洲欧洲一级| 国产伦精品一区二区三区在线观看 | 亚洲国产精品小视频| 国产精品久久波多野结衣| 久久久久免费视频| 亚洲国产精品毛片| 亚洲性视频网址| 激情久久综合| 欧美视频日韩| 欧美在线看片| 亚洲人成啪啪网站| 亚洲愉拍自拍另类高清精品| 国产精品视频一| 欧美/亚洲一区| 亚洲欧美日韩精品久久| 最新国产精品拍自在线播放| 亚洲一区二区三区午夜| 极品av少妇一区二区| 欧美国产日本| 久久精品日韩| 这里只有精品视频| 久久精品亚洲精品国产欧美kt∨| 亚洲天堂免费观看| 久久九九免费视频| 亚洲视频在线观看网站| 国产日本欧美视频| 国产精品www色诱视频| 欧美成人小视频| 蜜臀av一级做a爰片久久| 久久精品国产一区二区电影| 亚洲专区在线视频| 亚洲天堂免费在线观看视频| 99re热这里只有精品视频| 91久久精品国产91性色tv| 欧美高清视频一区二区三区在线观看| 欧美一区日韩一区| 亚洲视频免费在线| 一区二区三区免费观看| 99热精品在线观看| 亚洲看片一区| 日韩香蕉视频| 亚洲少妇最新在线视频| 一区二区精品在线观看| 亚洲深夜福利在线| 这里只有精品电影| 一区二区三区日韩在线观看| 亚洲精品一区二区三区福利| 最新国产乱人伦偷精品免费网站| 亚洲精品乱码久久久久| 亚洲精品无人区| 亚洲视频一起| 久久久www成人免费精品| 久久综合一区| 最新亚洲激情| 亚洲免费在线视频一区 二区| 久久精品日韩欧美| 国产精品久久91| 又紧又大又爽精品一区二区| 亚洲午夜高清视频| 亚洲精品日韩久久| 欧美人与禽猛交乱配| 亚洲日韩第九十九页| 亚洲电影成人| 麻豆九一精品爱看视频在线观看免费| 欧美第一黄色网| 国产综合视频| 亚洲欧美999| 欧美成人按摩| 久久精品卡一| 国产精品网站视频| 亚洲三级免费电影| 久久免费精品日本久久中文字幕| 亚洲美女av在线播放| 久久久一本精品99久久精品66| 国产精品啊v在线| 亚洲日本aⅴ片在线观看香蕉| 久久都是精品| 午夜精品影院| 国产美女精品免费电影| 亚洲午夜久久久| 99国产一区| 欧美日韩在线电影| 91久久嫩草影院一区二区| 久久五月激情| 国产精品一区二区黑丝| 久久er精品视频| 久久久久国产精品一区三寸| 欧美精选午夜久久久乱码6080| 国产亚洲精品久久久| 激情五月综合色婷婷一区二区| 欧美高清视频一区| 欧美四级剧情无删版影片| 亚洲先锋成人| 久久久久网址| 中文av一区二区| 先锋影音久久| 99国产精品| 欧美专区第一页| 亚洲电影自拍| 亚洲欧美激情一区二区| 韩日在线一区| 欧美一区免费视频| 美女精品视频一区| 欧美一区深夜视频| 欧美成人资源网| 亚洲免费观看| 欧美日韩a区| 亚洲日本无吗高清不卡| 免费在线一区二区| 亚洲无线视频| 国产精品www网站| 亚洲伊人色欲综合网| 久久精品国产久精国产一老狼| 亚洲欧美一区二区在线观看| 欧美成人亚洲成人| 久久全国免费视频| 999在线观看精品免费不卡网站| 亚洲性线免费观看视频成熟| 国内精品视频在线观看| 亚洲国产日韩欧美综合久久| 欧美日韩免费| 美女精品自拍一二三四| 欧美日韩国产综合在线| 久久精品国产视频| 女同性一区二区三区人了人一| 亚洲一区二区三区视频播放| 欧美一二三区精品| 亚洲精品中文字幕在线观看| 宅男噜噜噜66一区二区66| 亚洲国产日韩欧美| 亚洲欧美日韩国产精品| 亚洲国产日韩欧美综合久久| 亚洲欧美日韩在线| 亚洲剧情一区二区| 亚洲女性裸体视频| 一二三区精品福利视频| 久久在线免费视频| 欧美一区2区三区4区公司二百| 欧美极品aⅴ影院| 麻豆精品视频在线观看视频| 国产精品亚洲а∨天堂免在线| 免费在线欧美黄色| 国产精品一区二区欧美| 一本色道88久久加勒比精品|