inline-assembly

    2熱度

    3回答

    我有一個大功能,需要從一個點浮動轉換爲整數。沒有這個轉換,我的機器上的功能需要11-12 ns /循環。通過轉換,它需要約400納秒/循環。 經過一番閱讀,我找到了一種方法來加快使用一些內聯彙編的轉換。我的函數的第一次迭代如下: inline int FISTToInt (float f) { int i; asm("fld %1;" "fistp %0;"

    1熱度

    1回答

    我想在更可調試的狀態下編譯seabios,所以我想取消函數內聯。 要做到這一點,我已經添加-fon內聯的編譯標誌,但後來我得到的編譯錯誤: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm' 這是對下面的代碼complaning: asm volatile( "calll __call16

    2熱度

    1回答

    我需要在我的newlib存根中調用一些系統調用,而當前的實現使用C宏,這些宏隨着時間的推移變得難以閱讀和糟糕。 (我討厭宏...) 但是,我的C++模板實現不只有一個參數工作: template <int nr, typename RETTYPE, typename PARAM1> inline RETTYPE syscall(PARAM1 p1) { register PA

    1熱度

    1回答

    我有一個C文件f1.c裏面有幾個函數。我需要在armv4的彙編代碼中編寫其中的一個函數,然後將其放回到f1.c中。 所以我提取我的彙編代碼想要的功能到另一個文件(稱爲test1.c),並編譯它: arm-linux-gnueabi-gcc -S -march=armv4 test1.c 在test1.c我: extern long int li1, li2, li3; int main()

    2熱度

    1回答

    我正在嘗試調用位於某個地址的其他函數的函數。 調用另一個函數的函數只接收傳入的類型(如char *),返回類型和參數本身。 但它每次在調用函數本身或調用它後都會突然崩潰。 基本上,我想達到,在C++中類似這樣的寫入功能: function callfunc(name,...) --Lua local func=_G[name]; func(...) end 因此,這裏是我的代碼: #in

    3熱度

    1回答

    我正在寫一個微小的操作系統作爲學校的assigment的一部分,但我得到了鍵盤輸入(按一個鍵 - >顯示在屏幕上)卡住了。我使用的是osdev.org(gcc交叉編譯器,GRUB引導程序,ld鏈接器)中的Bare Bones教程,由於我處於保護模式,因此我無法使用BIOS中斷進行輸入,這就是爲什麼我必須編寫自己的中斷處理程序?)但我不確定如何做到這一點,即使我閱讀了一些osdev文章和論壇討論。非

    0熱度

    1回答

    我有幾個結構/聯合,例如: union { uint8_t X; struct __attribute__((packed, aligned(1))) { uint8_t A : 1; uint8_t B : 1; uint8_t C : 1; uint8_t D : 1; uint8_t E : 1; u

    0熱度

    1回答

    我希望把這種功能: iowrite32(mem1, value1); 成彙編代碼。爲了使用的ioremap int * mem1; : MEM1被定義爲。 我寫這段代碼: asm volatile( "mov %[whr],%[wht]" : [whr] "=r" (mem1) : [wht] "r" (value) ); 然後我意識到我不想動值MEM1,

    0熱度

    1回答

    我想讓編譯器通過參數化我的C代碼中的內聯彙編來自動選擇寄存器,但是我遇到了一些麻煩。誰能告訴我發生了什麼問題?如果我使用我已註釋掉的代碼(強制與%xmm0有關),它將編譯並獲得預期結果。但是,如果我離開它註釋掉作爲寫到這裏,我得到的編譯器錯誤: /tmp/ccJxmSbm.s: Assembler messages: /tmp/ccJxmSbm.s:81: Error: the first op

    1熱度

    1回答

    我有一個GNU C程序下面的代碼: void *segment = malloc(1024); asm volatile("mov $%0, %%rax" : : "r" (segment)); 而且我得到以下錯誤: Error: illegal immediate register operand %rax 有什麼不對%rax?