从网上看到说,VC会放弃对含有内联汇编代码的函数,这是错误的。
我试验了一下,VC照样会内联含有汇编代码的函数,只要汇编代码里面不要有跳转到C++代码段的指令就可以了。原因可能是你这样跳转,编译器的智商就不足够处理寄存器的恢复问题了。我不知道ICL会不会有能力处理这样的问题?
所以要内联,就要避免跳转到C++代码段,在汇编代码段内部的跳转是允许的。如果VC没有内联,你可以用__forceinline关键字,这样再长的汇编代码都会被内联,十分恐怖就是了。我原来怀疑是成员函数不能内联,后来发现跟这无关。但是成员函数不能使用naked声明,这是一个限制,只好不用了,但是照样可以把光线追踪的核心求交函数写的很完美,既不破坏OOP的设计,又能保持很高的效率,通过内联获得效率是很合算的,而通过汇编优化又是终极手段。