Re: "Xiph needs someone to help with assembly for MSVC!"

Chris Brien <[email protected]>
Newsgroups gmane.comp.multimedia.ogg.theora.devel
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.