[theora-dev] "Xiph needs someone to help with assembly for MSVC!"

Chris Brien chris.brien at tandberg.com
Thu Oct 2 07:14:37 PDT 2008


Fernando Pelliccioni wrote:
> Hello,
> 
> I write to you for the announcement in this blog:
> http://blog.hartwork.org/?p=86.
> 
> 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
#else
#define asm_op_3(instruction, a, b, c) instruction c,b,a
#endif

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)
#else
#define asm_c_var(x) x
#define bind_asm_c_var(name, constraint)
#endif

So you can then write
asm
{
	asm_op_2(movd, asm_c_var(foo), xmm1);
	asm_op_3(pushfd, 0xd, xmm1, xmm2);
	asm_inputs
	bind_asm_reg(foo, "m,r")
	asm_outputs
	asm_clobbers
};

Etcetera.

Chris


More information about the theora-dev mailing list