<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.3199" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY
style="WORD-WRAP: break-word; khtml-nbsp-mode: space; khtml-line-break: after-white-space"
bgColor=#ffffff>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
<DIV
style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B>
<A title=sabre@nondot.org href="mailto:sabre@nondot.org">Chris Lattner</A>
</DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A title=cr88192@hotmail.com
href="mailto:cr88192@hotmail.com">BGB</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Cc:</B> <A title=llvmdev@cs.uiuc.edu
href="mailto:llvmdev@cs.uiuc.edu">LLVM Developers Mailing List</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Monday, October 22, 2007 12:28
PM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> Re: [LLVMdev] OT: new here,
dynamic/runtime compilation (in general)</DIV>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT
face=Arial size=2></FONT><BR></DIV><BR>
<DIV>
<DIV>On Oct 21, 2007, at 6:23 PM, BGB wrote:</DIV><BR
class=Apple-interchange-newline>
<BLOCKQUOTE type="cite"><SPAN class=Apple-style-span
style="WORD-SPACING: 0px; FONT: 12px Helvetica; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; border-spacing: 0px 0px; khtml-text-decorations-in-effect: none; apple-text-size-adjust: auto; orphans: 2; widows: 2">
<DIV dir=ltr><FONT face=Arial size=2><SPAN class=Apple-style-span
style="FONT-SIZE: 10px; FONT-FAMILY: Arial">ok, just in my case, I guess I
am a little fussy/weird, wanting efficient dot and cross products
(if at all possible, though these operations at present don't exist natively
within SSE...), among many other operations (length, lerp, renormalization,
..).</SPAN></FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial size=2><SPAN class=Apple-style-span
style="FONT-SIZE: 10px; FONT-FAMILY: Arial">then again, probably a fairly
smart compiler could still get plenty good results out of inline functions
and intrinsics or something (as it so happens, my compiler is not so smart
here, so I made these features builtin, and fell back to functions for more
involved operations, such as quaternion slerp, ..).</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT
face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><BR
class=khtml-block-placeholder></DIV></SPAN></BLOCKQUOTE>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT
face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><BR class=khtml-block-placeholder></DIV>
<DIV>llvm-gcc and clang both fully support GCC style generic vectors and
altivec/sse intrinsics. In addition, clang supports "glsl" style vector
permutations, direct vector element access, etc. The LLVM optimizer and
code generator supports many vector operations independent of the front-end
syntax, as well as highly optimized code generation for Altivec and
SSE.</DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT
face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT
face=Arial size=2></FONT> </DIV></BLOCKQUOTE>
<DIV><FONT face=Arial size=2>yes, cool.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>in any case, people can probably build whatever
they need using what is provided...</FONT></DIV>
<DIV><FONT face=Arial size=2>(and, if all this is already built in, all the
better...).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV>
<DIV><FONT face=Arial size=2>but, yes, it may not matter much, I simply have
some stuff that is non-standard and tweaky is all...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV></DIV>
<DIV><FONT face=Arial size=2>sorry if it seems I am obsessing, or if this topic
seems inappropriate here...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>looking, trying to determine if GLSL has these
operations (ok, it has a few, implemented as functions at least, like 'dot' and
'cross'). note that my interface is a little different than GLSL, but
I may change it to more closely resemble that of GLSL.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>now, of course, what I was not sure of (what I keep
going on about) was not about specific general vector features (aka: much of
anything what SSE itself, or most compilers, provide), but the specifics
of geometric vectors (like in 3D or physics).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>(one has special fun trying to implement
these well within the context of SSE...).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I have some funky operator overloading as well:
'vec^vec' gives a dot product ('vec*vec' gives a per-component product, as in
gcc); and 'vec%vec' gives a cross product. for quaternions, 'quat*quat' is
overloaded for a quaternion product (grassman).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>per-component access:</FONT></DIV>
<DIV><FONT face=Arial size=2>I treat vectors like some kind of implicit
struct.</FONT></DIV>
<DIV><FONT face=Arial size=2>components are: x,y,z,w. i, j, and k are analogous
to x, y, and z.</FONT></DIV>
<DIV><FONT face=Arial size=2>looks like GLSL also has r, g, b, and a as synonyms
as well (don't have these in my case, then again, I don't usually do color
calculations either...).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>so, for a vector v: v.x, v.y, v.z, or v.w; or
a quat q: q.i, q.j, q.k, or q.w.</FONT></DIV>
<DIV><FONT face=Arial size=2>I also do this for complexes, where complexes are
viewed as having 2 components: i and w (matching them with quaternions as
such).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>so, it is valid to type: </FONT><FONT face=Arial
size=2>"(float _Complex)QUAT(3,1,0,0);", which comes out
as the complex</FONT></DIV>
<DIV><FONT face=Arial size=2>"3+1i" (j and k are simply discarded). note that,
at present, it is not possible to type out quaternions like complexes, say
"(3+1i+0j+0k)*(0+5i+1j-2k)", though this could be a sane feature, it would
also give pressure to allow similar for vectors, such as ("3x+4y-5z", which may
look odd and misleading), and simply allowing it for complexes may be
enough...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>hmm: as for vectors, the funky syntax could be very
useful for translation and accelaration ("vel-=gravity*1z;", as opposed to
"gavity-=VEC3(0,0,gravity);").</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>who knows though...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>misc, quaternions (general
concept):</FONT></DIV>
<DIV><FONT face=Arial size=2><A
href="http://en.wikipedia.org/wiki/Quaternion">http://en.wikipedia.org/wiki/Quaternion</A></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT
face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><FONT face=Arial size=2></FONT><BR
class=khtml-block-placeholder></DIV>
<DIV>-Chris</DIV>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT><FONT
face=Arial size=2></FONT><FONT face=Arial
size=2></FONT><BR></DIV><BR></BLOCKQUOTE></BODY></HTML>