我目前嘗試使用ARM彙編代碼編寫iPhone的VFP單元的程序。 VFP可以做浮點計算,但是AFAIK沒有整數算術。但是,它可以將float轉換爲有符號整數(4字節)。另外,根據這個快速參考:http://www.voti.nl/hvu/arm/ARMquickref.pdf 它似乎不支持任何移位操作彙編:將浮點值轉換爲帶符號的字節
我想要做的是轉換4個浮點數,我敢肯定,每個大於-127和小於127成4個有符號的字節。我可以將浮點數轉換爲有符號整數,然後將值向左移動12個字節(分別爲接下來的兩個值的8個和4個字節),並將所有四個位按比例或運算。
然而,由於轉移不可用,我需要找到另一種方式來做到這一點。此外 - 我不能使用整數算術(所以我不能乘以已轉換的整數2^n爲了轉移,但我不得不在浮標上工作)。
任何人都知道我能做到嗎?
btw對那些熟悉ARM體系結構的人來說 - 我不想切換到Thumb指令,因爲這是在一個對許多元素進行操作的循環中完成的,我不想在這裏面的拇指和胳膊指令之間切換。循環(因爲那很貴)
謝謝!
編輯:
另一個問題:我怎麼能正常化有三個元素的向量?
是的,我知道這一點 - 但問題是從signed int轉換爲signed byte!最後,我想沒有4個4字節的整數,但是在一個寄存器中有4個1字節的帶符號的字節 – genesys 2010-01-18 23:34:36
對不起,一點也不清楚,那就是你想從你的問題中得到的結果(「然後將值移動12個字節到左邊」等等)。您可以直接在NEON上執行此操作,但是在僅具有VFP的ARM內核上,您需要將轉換後的值移回通用寄存器並將其壓縮爲字節。 – 2010-01-18 23:45:54
你確定嗎?有按位或 - 所以我thoght也許我可以建立一些使用浮點算術。如果我將我的float在-127 <= f <= 127的範圍內,我不能乘以#4096(= 2^12),然後使用ftosis將其轉換爲int?這不會導致與將轉換後的int向左移動12位相同嗎? - 如果沒有,也許你可以回答我的第二個問題? (請參閱上面問題中的編輯) – genesys 2010-01-18 23:59:21