[theora-dev] "Xiph needs someone to help with assembly for MSVC!"
fpelliccioni at gmail.com
Thu Oct 2 07:30:33 PDT 2008
I think that the idea is to have a utility that makes the code
portable. Like the boost philosophy.
int val1, val2;
"movl %%eax, %0;"
"movl %%ebx, %1;"
: "=r" ( val1 ), "=r" ( val2 )
movl val1, eax
movl val2, ebx
En Preprocessor code:
asm_op_2(movl , asm_c_var(val1), eax);
asm_op_2(movl , asm_c_var(val2), ebx);
I don't known how to count the 'asm_c_var' entries to convert to '%0',
'%1', ... '%n' ...
On Thu, Oct 2, 2008 at 11:14 AM, Chris Brien <chris.brien at tandberg.com> wrote:
> Fernando Pelliccioni wrote:
>> I write to you for the announcement in this blog:
>> I am interested in the open-source solution proposed in this article
>> (the preprocessor-macros solution).
> I would suggest using a compiler which understands GCC-style assembly syntax
> such as Intel's ICC, rather than making the effort to rewrite. Since this is
> for MSVC users, the fact that it is non-free is moot.
> Otherwise, it is relatively straightforward to write macros which expand to
> MSVC or GCC style syntax, such as
> #ifdef GCC
> #define asm_op_3(instruction, a, b, c) instruction %a,%b,%c
> #define asm_op_3(instruction, a, b, c) instruction c,b,a
> The major difference being the order of operands is exactly reversed, which
> is easy to deal with using a macro. The only other thing to worry about is
> how to specify C variables from assembly. GCC uses complicated constraints
> whereas MSVC can refer to variables directly.
> #ifdef GCC
> #define asm_c_var(x) %x
> #define bind_asm_c_var(name, constraint) (name) constraint (name)
> #define asm_c_var(x) x
> #define bind_asm_c_var(name, constraint)
> So you can then write
> asm_op_2(movd, asm_c_var(foo), xmm1);
> asm_op_3(pushfd, 0xd, xmm1, xmm2);
> bind_asm_reg(foo, "m,r")
More information about the theora-dev