如何在 gcc 环境中将这个 cpp 代码段转换成 C 语言中的宏函数?

2019-04-06 10:16:03 +08:00
 zauruso

Gcc 使用 AT&T 语法,而这段代码是 Intel 语法,怎么在我的 C 语言程序中作为一个宏函数使用它呢

inline unsigned int Div_TEN9_2(unsigned long x,unsigned int *pRemainder )
{
         _asm
         {
                  mov eax,unsigned int ptr [x] 
                  mov edx,unsigned int ptr [x+4]              
                  mov ebx,TEN9
                  div ebx
                  mov ebx,pRemainder
                  mov [ebx],edx                                                                    
         }
}
3124 次点击
所在节点    C
7 条回复
yanaraika
2019-04-06 10:50:56 +08:00
手动翻译下就好,右转 stackoverflow
secondwtq
2019-04-06 11:25:47 +08:00
1. GCC 不是什么 AT&T 语法,只是默认 AT&T 语法,可以换成 intel 语法,是 GCC 和 MSVC 的 InlineAsm 扩展的区别,并且也不只是语法层面的
2. 这好像没啥可 port 的,就一个 divrem,其实编译器优化应该直接就能搞定
icyalala
2019-04-06 11:32:07 +08:00
用 C 来写的话,开了优化后编译器会把 div 优化成 mul 和 shr,你自己手写汇编用 div 反而可能会更慢
hx1997
2019-04-06 13:20:58 +08:00
gcc -masm=intel 了解一下
ipwx
2019-04-06 13:22:15 +08:00
这种函数 -O3 不就行了,还手动汇编。。。
ccpp132
2019-04-06 14:29:17 +08:00
这汇编写的估计还不如编译优化的速度
glishijie
2019-04-06 19:39:05 +08:00
想要性能 inline 就好了,不需要一定宏函数,加 always inline ;另外汇编最好加上 volatile

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/552450

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX