Chinaunix

标题: 想問問這樣的問題 [打印本页]

作者: Arthur_    时间: 2007-06-19 16:05
标题: 想問問這樣的問題
簡單描述一下:

I want to use AT&T in mipsel-linux kernel2.4.20 and  glibc-2.2, but it seems useless.

__asm__("rep; movsl\n\t"
               :"&=c"(d0),"=&S"(d1),"=&D"(d2)
               :"0"(n/4),"1"(from),"2"(to)
               :"memory"
              );

the result is empty.



see the detail:
http://linux.chinaunix.net/bbs/thread-901184-1-1.html



thanks !

[ 本帖最后由 Arthur_ 于 2007-6-20 18:01 编辑 ]
作者: mingyanguo    时间: 2007-06-19 16:05
原帖由 Arthur_ 于 2007-6-20 18:00 发表于 13楼  



說在前面的話,

個位大俠的每個留言我都去研究了, 有些去做了驗證.ok!


程序結構大概這樣:
在inline函數中定義上面的代碼(加上__volatile__),但是沒有在主程序中調用它, 然後編譯沒有錯誤.
問題是 ...

我建议你把编译出来的代码 objdump -d 一下,怀疑你的代码被编译器去掉了。
还有,mips应该是不能用这句汇编的(我对mips不熟悉,不过没记得有这种指令),我觉得可以像上面有人提到的那样找找Linux kernel中的汇编实现,即使不是inline的实现也没关系,一个函数调用没那么大的效率损失。
作者: MMMIX    时间: 2007-06-19 18:48
原帖由 Arthur_ 于 2007-6-19 16:05 发表于 1楼  
簡單描述一下:

I want to use AT&T in mipsel-linux kernel2.4.20 and  glibc-2.2, but it seems useless.

__asm__("rep; movsl\n\t"
               :"&=c"(d0),"=& ...

还是直接用中文描述你的问题吧,要练英文可以直接去英文的邮件列表/IRC。
作者: mik    时间: 2007-06-19 22:44
原帖由 Arthur_ 于 2007-6-19 16:05 发表于 1楼  
簡單描述一下:

I want to use AT&T in mipsel-linux kernel2.4.20 and  glibc-2.2, but it seems useless.

__asm__("rep; movsl\n\t"
               :"&=c"(d0),"=& ...



你应该先了解 mips 方面的指令吧
作者: Arthur_    时间: 2007-06-20 08:57
原帖由 MMMIX 于 2007-6-19 18:48 发表于 2楼  

还是直接用中文描述你的问题吧,要练英文可以直接去英文的邮件列表/IRC。



好, 我之前就是中文, 後來有到郵件列表裡面問, 後來有拿出來問
所以沒有翻譯過來


順便說一下, 我才懶得鍊英文.你別有意見
作者: Arthur_    时间: 2007-06-20 08:58
原帖由 mik 于 2007-6-19 22:44 发表于 3楼  



你应该先了解 mips 方面的指令吧



我是這方面的新手, 可以提供參考資料碼.
作者: bluster    时间: 2007-06-20 10:53
我看这句asm像是x86的汇编,这种mips(是mips么?我不懂)的板子能用x86的汇编?
还有,如果不希望编译器动你的代码,一般这么写


  1. __asm__ __volatile__ (...)
复制代码


另外,可以看Linux kernel 下面 arch/mips/lib/memcpy.S 中的汇编实现

[ 本帖最后由 bluster 于 2007-6-20 10:56 编辑 ]
作者: MMMIX    时间: 2007-06-20 11:23
原帖由 Arthur_ 于 2007-6-20 08:57 发表于 4楼  



好, 我之前就是中文, 後來有到郵件列表裡面問, 後來有拿出來問
所以沒有翻譯過來


順便說一下, 我才懶得鍊英文.你別有意見

没有什么意见。只是你的英文表述不太清楚而已。
作者: Arthur_    时间: 2007-06-20 12:05
原帖由 MMMIX 于 2007-6-20 11:23 发表于 7楼  

没有什么意见。只是你的英文表述不太清楚而已。



哦. 這樣啊
tt
作者: sep    时间: 2007-06-20 12:55
学会用英文表述问题是个好习惯
作者: Garyyin    时间: 2007-06-20 13:39
路过,学习一下,
顺便问问楼主,你做什么产品的啊,都需要研究MIPS指令集?
作者: Arthur_    时间: 2007-06-20 14:08
原帖由 Garyyin 于 2007-6-20 13:39 发表于 10楼  
路过,学习一下,
顺便问问楼主,你做什么产品的啊,都需要研究MIPS指令集?



具體說應該是mipsel

wireless router 上的

gcc 內嵌彙編不知道怎麼不耗用

如果我加__volatile__就說不兼容錯誤.

我想知道為甚麼.

我的glibc是2.2的難道不支持碼?

另, 我東西已經做完了現在初在測試階段.不過有幾個像這樣的問題還沒有清楚, 所以想問問

我剛接觸這行, 懂的不是很多, 所以說話沒有邊界, 請見諒
作者: bluster    时间: 2007-06-20 17:10
原帖由 Arthur_ 于 2007-6-20 14:08 发表于 11楼  



具體說應該是mipsel

wireless router 上的

gcc 內嵌彙編不知道怎麼不耗用

如果我加__volatile__就說不兼容錯誤.

我想知道為甚麼.

我的glibc是2.2的難道不支持碼?

另, 我東西已經做完了 ...

把加上__volatile__时报的错误帖上来,还有就是,如果想解决问题,仔细的看别人的回复。
你如果不care别人的回复,还是不要寄希望于bbs了。
作者: Arthur_    时间: 2007-06-20 18:00
原帖由 bluster 于 2007-6-20 17:10 发表于 12楼  

把加上__volatile__时报的错误帖上来,还有就是,如果想解决问题,仔细的看别人的回复。
你如果不care别人的回复,还是不要寄希望于bbs了。



說在前面的話,

個位大俠的每個留言我都去研究了, 有些去做了驗證.ok!


程序結構大概這樣:
在inline函數中定義上面的代碼(加上__volatile__),但是沒有在主程序中調用它, 然後編譯沒有錯誤.
問題是下面:
當我在主程序任何一個地方調用它後出現如下錯誤:
inconsistent operand constraints in an 'asm'

後來我不得不把__volatile__去掉然後編譯通過, 但是程序執行結果不正確
作者: Arthur_    时间: 2007-06-20 18:02
如果可以幫我的話, 需要甚麼測試條件隨便說

我這裡設備全的很.
作者: Arthur_    时间: 2007-06-21 09:07
objdump後看不到, 看來真是有問題

下面是mipsel裡面的一段彙編, 跟我的格式不一樣,正在研究中.

static __inline__ char *strcpy(char *__dest, __const__ char *__src)
025 {
026   char *__xdest = __dest;
027
028   __asm__ __volatile__(
029         ".set\tnoreorder\n\t"
030         ".set\tnoat\n"
031         "1:\tlbu\t$1,(%1)\n\t"
032         "addiu\t%1,1\n\t"
033         "sb\t$1,(%0)\n\t"
034         "bnez\t$1,1b\n\t"
035         "addiu\t%0,1\n\t"
036         ".set\tat\n\t"
037         ".set\treorder"
038         : "=r" (__dest), "=r" (__src)
039         : "0" (__dest), "1" (__src)
040         : "memory");
041
042   return __xdest;
043 }
作者: Arthur_    时间: 2007-06-21 09:23
終於找到了


http://logos.cs.uic.edu/366/notes/MIPS%20Quick%20Tutorial.htm




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2