» 您尚未 登录   注册 | 银行 | 首页调用管理 | 博客 | 帮助 | 社区 | 无图版
华镭社区论坛 -> 硬件支持 -> 华镭龙芯版 -> 发布龙芯2E多媒体指令分析、测试文档
 XML   RSS 2.0   WAP 

--> 本页主题: 发布龙芯2E多媒体指令分析、测试文档 加入收藏 | 收藏主题 | 上一主题 | 下一主题
comcat


头衔:一介草民一介草民
该用户目前不在线
级别: 论坛版主
精华: 3
发帖: 165
威望: 144 点
镭: 219 L
贡献值: 0 点
在线时间:114(小时)
注册时间:2006-04-14
最后登录:2010-01-12
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

发布龙芯2E多媒体指令分析、测试文档

因为没有公开的多媒体指令文档,这个让要做多媒体优化的弟兄们比较郁闷

手头刚好有打了龙芯补丁的汇编器as, 于是将龙芯补丁提取出来,稍作整理,得到了龙芯扩展的指令列表:


/* godson2 extensions */

faddu,   D,V,T,   0x45800000, 0xffe0003f  
for,   D,V,T,   0x45a00000, 0xffe0003f  
fadd,   D,V,T,   0x45c00000, 0xffe0003f  
fdadd,   D,V,T,   0x45e00000, 0xffe0003f  
pavgh,   D,V,T,   0x46400000, 0xffe0003f  
pavgb,   D,V,T,   0x46600000, 0xffe0003f  
pmaxsh,   D,V,T,   0x46800000, 0xffe0003f  
pminsh,   D,V,T,   0x46a00000, 0xffe0003f  
pmaxub,   D,V,T,   0x46c00000, 0xffe0003f  
pminub,   D,V,T,   0x46e00000, 0xffe0003f  
paddsh,   D,V,T,   0x47000000, 0xffe0003f  
paddush,   D,V,T,   0x47200000, 0xffe0003f  
paddh,   D,V,T,   0x47400000, 0xffe0003f  
paddw,   D,V,T,   0x47600000, 0xffe0003f  
paddsb,   D,V,T,   0x47800000, 0xffe0003f  
paddusb,   D,V,T,   0x47a00000, 0xffe0003f  
paddb,   D,V,T,   0x47c00000, 0xffe0003f  
paddd,   D,V,T,   0x47e00000, 0xffe0003f  
fsubu,   D,V,T,   0x45800001, 0xffe0003f  
pasubub,   D,V,T,   0x45a00001, 0xffe0003f  
fsub,   D,V,T,   0x45c00001, 0xffe0003f  
fdsub,   D,V,T,   0x45e00001, 0xffe0003f  
pcmpeqw,   D,V,T,   0x46400001, 0xffe0003f  
pcmpgtw,   D,V,T,   0x46600001, 0xffe0003f  
pcmpeqh,   D,V,T,   0x46800001, 0xffe0003f  
pcmpgth,   D,V,T,   0x46a00001, 0xffe0003f  
pcmpeqb,   D,V,T,   0x46c00001, 0xffe0003f  
pcmpgtb,   D,V,T,   0x46e00001, 0xffe0003f  
psubsh, D,V,T,   0x47000001, 0xffe0003f  
psubush,   D,V,T,   0x47200001, 0xffe0003f  
psubh,   D,V,T,   0x47400001, 0xffe0003f  
psubw,   D,V,T,   0x47600001, 0xffe0003f  
psubsb, D,V,T,   0x47800001, 0xffe0003f  
psubusb,   D,V,T,   0x47a00001, 0xffe0003f  
psubb,   D,V,T,   0x47c00001, 0xffe0003f  
psubd,   D,V,T,   0x47e00001, 0xffe0003f  
fsll,   D,V,T,   0x45800002, 0xffe0003f  
fdsll,   D,V,T,   0x45a00002, 0xffe0003f  
pextrh,   D,V,T,   0x45c00002, 0xffe0003f  
pmaddhw,   D,V,T,   0x45e00002, 0xffe0003f  
psllw,   D,V,T,   0x46400002, 0xffe0003f  
psllh,   D,V,T,   0x46600002, 0xffe0003f  
pmullh,   D,V,T,   0x46800002, 0xffe0003f  
pmulhh,   D,V,T,   0x46a00002, 0xffe0003f  
pmuluw,   D,V,T,   0x46c00002, 0xffe0003f  
pmulhuh,   D,V,T,   0x46e00002, 0xffe0003f  
pshufh,   D,V,T,   0x47000002, 0xffe0003f  
packsswh,   D,V,T,   0x47200002, 0xffe0003f  
packsshb,   D,V,T,   0x47400002, 0xffe0003f  
packushb,   D,V,T,   0x47600002, 0xffe0003f  
fxor,   D,V,T,   0x47800002, 0xffe0003f  
fnor,   D,V,T,   0x47a00002, 0xffe0003f  
fand,   D,V,T,   0x47c00002, 0xffe0003f  
pandn,   D,V,T,   0x47e00002, 0xffe0003f  
fsrl,   D,V,T,   0x45800003, 0xffe0003f  
fdsrl,   D,V,T,   0x45a00003, 0xffe0003f  
fsra, D,V,T,   0x45c00003, 0xffe0003f  
fdsra, D,V,T,   0x45e00003, 0xffe0003f  
psrlw,   D,V,T,   0x46400003, 0xffe0003f  
psrlh,   D,V,T,   0x46600003, 0xffe0003f  
psraw,   D,V,T,   0x46800003, 0xffe0003f  
psrah,   D,V,T,   0x46a00003, 0xffe0003f  
punpcklwd, D,V,T,   0x46c00003, 0xffe0003f  
punpckhwd, D,V,T,   0x46e00003, 0xffe0003f  
punpcklhw, D,V,T,   0x47000003, 0xffe0003f  
punpckhhw, D,V,T,   0x47200003, 0xffe0003f  
punpcklbh, D,V,T,   0x47400003, 0xffe0003f  
punpckhbh, D,V,T,   0x47600003, 0xffe0003f  
pinsrh_0,   D,V,T,   0x47800003, 0xffe0003f  
pinsrh_1,   D,V,T,   0x47a00003, 0xffe0003f  
pinsrh_2,   D,V,T,   0x47c00003, 0xffe0003f  
pinsrh_3,   D,V,T,   0x47e00003, 0xffe0003f  
fseq,     S,T,   0x46800032, 0xffe007ff  
fseq1,     S,T,   0x46a00032, 0xffe007ff  
fsltu, S,T,   0x4680003c, 0xffe007ff  
fslt,     S,T,   0x46a0003c, 0xffe007ff  
fsleu, S,T,   0x4680003e, 0xffe007ff  
fsle,     S,T,   0x46a0003e, 0xffe007ff  
biadd,   D,V,   0x46800005, 0xffff003f  
pmovmskb,   D,V,   0x46a00005, 0xffff003f  


/* godson2 paired single */

add.gps,   D,V,T,   0x45600000, 0xffe0003f  
sub.gps,   D,V,T,   0x45600001, 0xffe0003f  
mul.gps,   D,V,T,   0x45600002, 0xffe0003f  
abs.gps, D,V,   0x45600005, 0xffff003f  
mov.gps,   D,S,   0x45600006, 0xffff003f  
neg.gps, D,V,   0x45600007, 0xffff003f  
c.f.gps, S,T,   0x45600030, 0xffe007ff  
c.un.gps, S,T,   0x45600031, 0xffe007ff  
c.eq.gps, S,T,   0x45600032, 0xffe007ff  
c.ueq.gps, S,T,   0x45600033, 0xffe007ff  
c.olt.gps, S,T,   0x45600034, 0xffe007ff  
c.ult.gps, S,T,   0x45600035, 0xffe007ff  
c.ole.gps, S,T,   0x45600036, 0xffe007ff  
c.ule.gps, S,T,   0x45600037, 0xffe007ff  
c.sf.gps, S,T,   0x45600038, 0xffe007ff  
c.ngle.gps, S,T,   0x45600039, 0xffe007ff  
c.seq.gps, S,T,   0x4560003a, 0xffe007ff  
c.ngl.gps, S,T,   0x4560003b, 0xffe007ff  
c.lt.gps, S,T,   0x4560003c, 0xffe007ff  
c.nge.gps, S,T,   0x4560003d, 0xffe007ff  
c.le.gps, S,T,   0x4560003e, 0xffe007ff  
c.ngt.gps, S,T,   0x4560003f 0xffe007ff      



于是边假设,边测试就有了这个文档。 看过MMX, SSE的兄弟应该对前面80条指令的大部分很眼熟的。


文档涵盖80条整型多媒体指令,尚有22条双单精度指令(Paired-Singl, 同时操作2个单精度浮点数)没有一一测试,因为
这些在一般的多媒体优化中用的较少,以后再熟悉吧。

文档附带了一些多媒体指令编程的小技巧,以Tips的条目形式列出。对多媒体中指令中的一些重要概念做了概要的说明。

文档从程序员的角度出发写的,不太喜欢一堆罗嗦的文字, 一些指令的操作一部分用图形示意,复杂点的就用伪代码表示了:)

因为很多指令实现的MMX的思想,对类MMX一看就知道的就没有去测试,绝大部分指令经测试,所有用到的测试程序在这里找: http://people.openrays.org/~comcat/ 有疑问的可以自己再测测。


可以供在龙芯平台做多媒体优化的兄弟参考.

文档共63页.

下载链接: http://people.openrays.org/~comcat/mydoc/godson2e.mmi.pdf


另: fadd 的问题(详见文档描述)已经得到龙梦方面的回帖:

http://www.lemote.com/bbs/viewthread.php?tid=3057&extra=page%3D1

CODE:

确实有问题,我已经去问做ALU的人了;这里可能是个bug。龙芯2E在64位、32位的问题处理上和MIPS R4000并不完全一样,没有一个模式位,因此64位的指令也可以在32位下自由使用,但这样做可能引起一些意想不到的问题。

add的问题,有可能是因为0x0000 0000 ffff fffe高位为0,导致溢出判断逻辑出问题。正常情况-2应该是0xffff ffff ffff fffe,纯32位的操作不会出现前面那种数据。

建议用addu指令,彻底避免溢出例外;记得一般mips编译器也不产生add指令。


要使用该指令的兄弟要注意, 尽量避免使用 fadd。


龙梦方面的最新回复:

CODE:

MIPS指令集定义中关于add指令的描述有一段是这样的:
Restrictions:
On 64-bit processors, if either GPR rt or GPR rs do not contain sign-extended 32-bit
values (bits 63..31 equal), then the result of the operation is undefined.

因此这个不是一个bug,已经和相关人员确认过了。


这样看来,因为fadd的操作对象是64位多媒体(浮点)寄存器(MMR/FPR),而fadd只对低32位执行加运算,如果要使用fadd的话,则程序员将负数从GPR移入MMR时,要对其进行符号扩展。否则程序会异常退出。这个只对运行于32位模式下的龙芯2E而言, 64位模式下的龙芯2E就不会有该问题.

如上面的测试程序中操作数 0x0000 0000 ffff fffe(-2)要扩展为0xffff ffff ffff fffe 方可无事。


[ 此贴被comcat在2006-12-21 17:00重新编辑 ]


行到水穷处,坐看云起时

[楼 主] | Posted: 2006-12-20 18:17
顶端
Skywind


该用户目前不在线
级别: 论坛版主
精华: 2
发帖: 519
威望: 481 点
镭: 99 L
贡献值: 0 点
在线时间:264(小时)
注册时间:2005-03-07
最后登录:2008-12-18
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



顶,大作!
[1 楼] | Posted: 2006-12-20 18:42 顶端
comcat


头衔:一介草民一介草民
该用户目前不在线
级别: 论坛版主
精华: 3
发帖: 165
威望: 144 点
镭: 219 L
贡献值: 0 点
在线时间:114(小时)
注册时间:2006-04-14
最后登录:2010-01-12
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



我要加精

行到水穷处,坐看云起时
[2 楼] | Posted: 2006-12-20 19:26 顶端
Skywind


该用户目前不在线
级别: 论坛版主
精华: 2
发帖: 519
威望: 481 点
镭: 99 L
贡献值: 0 点
在线时间:264(小时)
注册时间:2005-03-07
最后登录:2008-12-18
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



好,加了,确实精华:)
继续努力~

[3 楼] | Posted: 2006-12-20 21:23 顶端
Wingsun


该用户目前不在线
级别: 龙芯核心团队
精华: 0
发帖: 599
威望: 512 点
镭: 958 L
贡献值: 0 点
在线时间:490(小时)
注册时间:2003-11-19
最后登录:2008-09-10
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



好,继续努力。
[4 楼] | Posted: 2006-12-21 09:29 顶端
stanley


该用户目前不在线
级别: 管理员
精华: 1
发帖: 1122
威望: 1154 点
镭: 854 L
贡献值: 0 点
在线时间:844(小时)
注册时间:2002-11-07
最后登录:2011-10-12
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



QUOTE:
引用第0楼comcat2006-12-20 18:17发表的“发布龙芯2E多媒体指令分析、测试文档”: 因为没有公开的多媒体指令文档,这个让要做多媒体优化的弟兄们比较郁闷 手头刚好有打了龙芯补丁的汇编器as, 于是将龙芯补丁提取出来,稍作整理,得到了龙芯扩展的指令列表: .......



不错,加油!有兴趣的朋友可以一起交流,共同研究。

[5 楼] | Posted: 2006-12-21 09:40 顶端
weihezhang




该用户目前不在线
级别: 普通会员
精华: 0
发帖: 64
威望: 65 点
镭: 66 L
贡献值: 0 点
在线时间:15(小时)
注册时间:2006-12-28
最后登录:2007-03-15
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



好!

linux is all
[6 楼] | Posted: 2007-01-01 14:55 顶端
jackysc


该用户目前不在线
级别: 新手上路
精华: 0
发帖: 5
威望: 6 点
镭: 6 L
贡献值: 0 点
在线时间:3(小时)
注册时间:2007-01-06
最后登录:2007-01-25
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



好深奥
[7 楼] | Posted: 2007-01-06 20:18 顶端
comcat


头衔:一介草民一介草民
该用户目前不在线
级别: 论坛版主
精华: 3
发帖: 165
威望: 144 点
镭: 219 L
贡献值: 0 点
在线时间:114(小时)
注册时间:2006-04-14
最后登录:2010-01-12
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



修正了3处错误,添加了书签,更新到 0.3 版

地址不变,仍然是: http://people.openrays.org/~comcat/mydoc/godson2e.mmi.pdf


行到水穷处,坐看云起时
[8 楼] | Posted: 2007-01-26 09:37 顶端
卉飞宽




该用户目前不在线
级别: 新手上路
精华: 0
发帖: 29
威望: 30 点
镭: 46 L
贡献值: 0 点
在线时间:0(小时)
注册时间:2009-05-13
最后登录:2009-10-05
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

好贴,楼主果然是牛人,顶起来.

好贴,楼主果然是牛人,顶起来.










手表直销网www.watch-watch.cn

[9 楼] | Posted: 2009-06-22 23:35 顶端

华镭社区论坛 -> 华镭龙芯版