Macro To Generate Inline Assembly
Hi All,
Knuth said:
"Premature optimization is the root of all evil."
So I waited until my (big) Integer class was sufficiently mature
before optimizing it.
An Integer is formed from an array of machine words, and there are
four critical operations, ADD, SUBTRACT, MULTIPLY, and DIVIDE, that
get invoked repeatedly against two of these machine words to support
the class-level overloaded operators, +, -, *, %, and /.
Currently, ADD, SUBTRACT, MULTIPLY, AND DIVIDE are written in C++. I
would like to replace the C++ code with inline assembly, using a macro
to generate the inline assembly to facilitate support for as many
CPU's as possible [Yes, I know some compilers do not support inline
assembly for some CPU's].
I tried:
#define MULTIPLY(A, B, lower_word, upper_word)\
{\
_asm mov eax, A;\
_asm mul B;\
_asm mov upper_word, edx;\
_asm mov lower_word, eax;\
}
int foo ()
{
unsigned int L, H;
MULTIPLY(0, 0, L, H);
return 0;
}
...and I get the following error:
1>Compiling...
1>Integer.cpp
1>..\Integer\Integer.cpp(44) : error C2447: '{' : missing function
header (old-style formal list?)
1>..\Integer\Integer.cpp(65) : error C2017: illegal escape sequence
...using Visual Studio 2005.
There seems to be some kind of strange interaction between the
preprocessor and the inline-assembly lexical analyzer.
Naturally, I would like to understand not just how to do this for
VS2005, but for all systems/compilers, so that I am not left guessing
whether I got it right or not.
TIA,
-Le Chaud Lapin-
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]