[Openmcl-devel] Inline assembly?

R. Matthew Emerson rme at clozure.com
Wed Aug 26 18:34:38 UTC 2009


On Aug 26, 2009, at 6:08 AM, Jianshi Huang wrote:

> I'm reading the source code of ccl's backend. Currently the x86  
> backend
> does not support emitting SSE instructions.
>
> I'm wondering how much effort does it take to add SSE instruction
> support? Is alignment in the GC a problem?
>
> If only the compiler backend needs modification I'd like to volunteer
> for the work.

We do use some mmx/sse/sse2 instructions:  scalar floating point  
operations and some more exotic ones (like pmuldq) in bignum  
operations (see the source for %multiply-and-add-loop on a 64-bit  
lisp, for example), but it's true that the assembler doesn't recognize  
all of them.

These instructions are defined at around line 2987 of  
ccl:compiler;X86;x86-asm.lisp.

Adding more instructions is not too difficult once you figure out what  
the def-x86-opcode macro is expecting.

If you need 16-byte alignment (for instance, in order to use movapd or  
whatever), then you generally have to ensure proper alignment yourself  
somehow.

All heap-allocated lisp objects are doublenode (8 bytes on x8632, 16  
bytes on x8664) aligned.  Double-floats are 8-byte aligned on both  
platforms.  The elements of vectors have natural alignment.

http://ccl.clozure.com/ccl-documentation.html#Tagging-scheme talks  
about how objects are represented in memory in a little more detail.

If you send a patch (or patches) to add more SSE instructions, I'll be  
glad to commit it.

If I'm not answering your questions, please don't hesitate to ask for  
clarification.



More information about the Openmcl-devel mailing list