[問題] Floating compute (C inline asm code)

看板C_and_CPP作者 (卯)時間15年前 (2010/12/26 12:24), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/1
請教一下關於C inline asm的問題 目前我在C code中插入一段asm的floating compute 不過發現一個小問題,就是當我將float換成double時 答案會全部錯掉,我不是很清楚原因是什麼 我是用的Compiler為gcc-4.4,OS為Linux 以下是我的Sample Code: 可運行的code float a = 10, b = 11, c; asm ("fld %1; fld %2; fstp %0;" :"=g"(c) : "g"(a), "g"(b)); printf("%f\n", a); 有問題的code double a = 10, b = 11, c; asm ("fld %1; fld %2; fstp %0;" :"=g"(c) : "g"(a), "g"(b)); printf("%f\n", a); 請教各位先進,不知道我是哪邊沒有注意到,還請指點一下,謝謝 -- ˍˍ 很多人在即將失去的時候,不知他即將失去,最後他就真正失去 ▕天險▏ 其實,一個不曾失去的人最可憐。因為,他永遠學不會什麼叫珍惜。▕刀藏▏  ̄ ̄ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.9.54 ※ 編輯: godman362 來自: 122.118.9.54 (12/26 12:30)

12/26 13:15, , 1F
我以為x86的fstp等等的指令的32bits的,不知道有沒有錯
12/26 13:15, 1F

12/26 13:24, , 2F
呃, double 用 %f 印? 應該要用 %lf 吧
12/26 13:24, 2F

12/26 13:29, , 3F
另外你的問題 試試用 fldl fstpl
12/26 13:29, 3F

12/26 16:03, , 4F
在printf的地方是小弟一時手誤打錯,真是抱歉
12/26 16:03, 4F

12/26 16:04, , 5F
問題的確是出在L大和s大所提到的部份
12/26 16:04, 5F

12/26 16:04, , 6F
要用longword版的指令才可跑出正確的數值,謝謝兩位解答
12/26 16:04, 6F
文章代碼(AID): #1D5iDYkf (C_and_CPP)