<div dir="ltr">Sorry I mistyped and forgot to include the register number in the mail but it is present in the patch. So it is:<div><br></div><div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">data GlobalReg = ...<br>                          |  XmmReg  !Int</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">                              (Maybe (Length, Width))</div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">                              (Maybe GlobalVecRegTy)<br><br>The purpose of the GlobalVecRegTy field is to rewrite this function definition : <a href="https://github.com/ghc/ghc/blob/master/compiler/cmm/CmmExpr.hs#L585-L587">https://github.com/ghc/ghc/blob/master/compiler/cmm/CmmExpr.hs#L585-L587</a><br><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><span style="color:rgb(36,41,46);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;background-color:rgb(255,251,221);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">globalRegType _      (</span><span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;text-decoration-style:initial;text-decoration-color:initial">XmmReg</span><span style="color:rgb(36,41,46);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;background-color:rgb(255,251,221);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> _)        </span><span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;text-decoration-style:initial;text-decoration-color:initial">=</span><span style="color:rgb(36,41,46);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;background-color:rgb(255,251,221);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> cmmVec </span><span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;text-decoration-style:initial;text-decoration-color:initial">4</span><span style="color:rgb(36,41,46);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;background-color:rgb(255,251,221);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> (cmmBits </span><span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;text-decoration-style:initial;text-decoration-color:initial">W32</span><span style="color:rgb(36,41,46);font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;white-space:pre;background-color:rgb(255,251,221);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">)
</span><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">and rewrite it to : </div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><table class="gmail-highlight gmail-tab-size gmail-js-file-line-container" style="box-sizing:border-box;border-collapse:collapse;color:rgb(36,41,46);font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;text-decoration-style:initial;text-decoration-color:initial"><tbody style="box-sizing:border-box"><tr style="box-sizing:border-box"><td id="gmail-LC596" class="gmail-blob-code gmail-blob-code-inner gmail-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;color:rgb(36,41,46);word-wrap:normal;white-space:pre">globalRegType _     (<span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">XmmReg</span> _ m ty)   <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">=</span> <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">let</span> (l,w) <span class="gmail-pl-k" style="box-sizing:border-box;color:rgb(215,58,73)">=</span> fromMaybe (<span class="gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,92,197)">2</span>, <span class="gmail-pl-ent" style="box-sizing:border-box;color:rgb(34,134,58)">W64</span>) m   -- a random default value of 2 and W64 chosen
                                         <span class="gmail-pl-k" style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box;color:rgb(215,58,73)">in</span><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">  </span><span class="gmail-pl-k" style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box;color:rgb(215,58,73)">case</span><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> fromMaybe </span><span class="gmail-pl-ent" style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box;color:rgb(34,134,58)">Float</span><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> ty </span><span class="gmail-pl-k" style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box;color:rgb(215,58,73)">of
                                                <span class="gmail-pl-ent" style="text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box;color:rgb(34,134,58)">Integer</span><span style="color:rgb(36,41,46);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> </span><span class="gmail-pl-k" style="text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box">-></span><span style="color:rgb(36,41,46);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> cmmVec l (cmmBits w)
                                                <span class="gmail-pl-ent" style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box;color:rgb(34,134,58)">Float</span><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">   </span><span class="gmail-pl-k" style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;box-sizing:border-box;color:rgb(215,58,73)">-></span><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"> cmmVec l (cmmFloat w)
</span>
Thanks,
Abhiroop</span></span></td></tr><tr style="box-sizing:border-box"><td id="gmail-L597" class="gmail-blob-num gmail-js-line-number" style="box-sizing:border-box;padding:0px 10px;width:50px;min-width:50px;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;line-height:20px;color:rgba(27,31,35,0.3);text-align:right;white-space:nowrap;vertical-align:top"></td><td id="gmail-LC597" class="gmail-blob-code gmail-blob-code-inner gmail-js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;color:rgb(36,41,46);word-wrap:normal;white-space:pre"></td></tr></tbody></table></div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Jul 13, 2018 at 4:12 PM Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-GB" link="blue" vlink="purple">
<div class="m_6965542420395903681WordSection1">
<p class="MsoNormal"><span>What is the GlobalVecRegTy field doing?<u></u><u></u></span></p>
<p class="MsoNormal"><span>Don’t you need an Int for the register number, like all the rest?<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>Generally, sounds good though<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>S<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Abhiroop Sarkar <<a href="mailto:asiamgenius@gmail.com" target="_blank">asiamgenius@gmail.com</a>>
<br>
<b>Sent:</b> 13 July 2018 14:07<br>
<b>To:</b> Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>><br>
<b>Cc:</b> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<b>Subject:</b> Re: Is it possible to enhance the vector STG registers(Xmm, Ymm, Zmm) with more information?<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hello Simon,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks for your response. I had written a patch[1] for this and the approach I took was quite similar to what you pointed out. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">data GlobalReg = ...<br>
                          |  XmmReg <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">                              (Maybe (Length, Width))<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">                              (Maybe GlobalVecRegTy)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">data GlobalVecRegTy = Integer | Float<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">-- Width and Length are already defined<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">data Width = W8 | W16 | W32 .....<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">type Length = Int  <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I wrapped the types inside a `Maybe` because when initializing a GlobalReg (in the `activeStgRegs`[2] function), I was not sure what value to initialize the register with, so I used a `Nothing` when initializing. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I see now in the case of `VanillaReg` it is initialized with the `VGcPtr` constructor: <span class="m_6965542420395903681gmail-pl-ent"><span style="font-size:9.0pt;font-family:Consolas;color:#22863a;background:white">VanillaReg</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#24292e;background:white">
</span><span class="m_6965542420395903681gmail-pl-c1"><span style="font-size:9.0pt;font-family:Consolas;color:#005cc5;background:white">1</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#24292e;background:white">
</span><span class="m_6965542420395903681gmail-pl-ent"><span style="font-size:9.0pt;font-family:Consolas;color:#22863a;background:white">VGcPtr etc</span></span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I think I should modify my patch as well to remove the Maybe and initialize with some default Length, Width and GlobalRegTy.  Thanks for the help.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;background:white">Abhiroop</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">[1] <a href="https://phabricator.haskell.org/D4922" target="_blank">https://phabricator.haskell.org/D4922</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">[2] <a href="https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fghc%2Fghc%2Fblob%2Fmaster%2Fincludes%2FCodeGen.Platform.hs%23L450&data=02%7C01%7Csimonpj%40microsoft.com%7Ccb18f3003224456cfd5b08d5e8c19b21%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636670840587296823&sdata=quBJxkG7r6a7ylFqrh4VMgP8y0P1i1Xc79Xj10kV9ts%3D&reserved=0" target="_blank">https://github.com/ghc/ghc/blob/master/includes/CodeGen.Platform.hs#L450-L623</a><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Fri, Jul 13, 2018 at 10:58 AM Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">Abhiroop</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt">Did anyone reply?</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt">My instinct is this. You want to use the same register (say Xmm reg 3) in different ways.  We already have this for ‘VanillaReg’:</span><u></u><u></u></p>
<p class="m_6965542420395903681m160898050108459242code">data GlobalReg<u></u><u></u></p>
<p class="m_6965542420395903681m160898050108459242code">  = VanillaReg      -- pointers, unboxed ints and chars<u></u><u></u></p>
<p class="m_6965542420395903681m160898050108459242code">        Int         -- its number<u></u><u></u></p>
<p class="m_6965542420395903681m160898050108459242code">        VGcPtr<u></u><u></u></p>
<p class="m_6965542420395903681m160898050108459242code">   | …<u></u><u></u></p>
<p class="m_6965542420395903681m160898050108459242code"> <u></u><u></u></p>
<p class="m_6965542420395903681m160898050108459242code">data VGcPtr = VGcPtr | VNonGcPtr <u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt">We use VanillaReg for both pointers and non-pointers, so (VanillaReg 3 VGcPtr) is register 3 used as a pointer, and (VanillaReg 3 VNonGcPtr) is register
 3 used as a non-pointer.  And notice that globalRegType looks at this field to decide what type to return.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt">I think you can do exactly the same: add a field to Xmm that explains how you are gong to divide it up.  Would that work?</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt">Simon</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt"> </span><u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> ghc-devs <<a href="mailto:ghc-devs-bounces@haskell.org" target="_blank">ghc-devs-bounces@haskell.org</a>>
<b>On Behalf Of </b>Abhiroop Sarkar<br>
<b>Sent:</b> 27 June 2018 22:32<br>
<b>To:</b> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<b>Subject:</b> Is it possible to enhance the vector STG registers(Xmm, Ymm, Zmm) with more information?</span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">Hello all,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">I am currently working on adding support for SIMD operations to the native code generator. One of the roadblocks I faced recently was the definition of the `globalRegType` function in
 "compiler/cmm/CmmExpr.hs". The `globalRegType` function maps the STG registers to the respective `CmmType` datatype.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">For Xmm, Ymm, Zmm registers the function defines globalRegType like this: <a href="https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fghc%2Fghc%2Fblob%2Fmaster%2Fcompiler%2Fcmm%2FCmmExpr.hs%23L585-L587&data=02%7C01%7Csimonpj%40microsoft.com%7Ccb18f3003224456cfd5b08d5e8c19b21%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636670840587296823&sdata=Ct2zsaFgEsRTclglezuPAg05zlSWwuyU45KZrrzcZCc%3D&reserved=0" target="_blank">https://github.com/ghc/ghc/blob/master/compiler/cmm/CmmExpr.hs#L585-L587</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">Consider the case for an Xmm register, the above definition limits an Xmm register to hold only vectors of size 4. However we can store 2 64-bit Doubles or 16 Int8s or 8 Int16s and so
 on<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">The function `globalRegType` is internally called by the function `cmmRegType` (<a href="https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fghc%2Fghc%2Fblob%2F838b69032566ce6ab3918d70e8d5e098d0bcee02%2Fcompiler%2Fcmm%2FCmmExpr.hs%23L275&data=02%7C01%7Csimonpj%40microsoft.com%7Ccb18f3003224456cfd5b08d5e8c19b21%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636670840587296823&sdata=yi3CN5tdL%2FEteEwBRH6Pt%2B3QB7Ji0sGWnnlE02eyMqk%3D&reserved=0" target="_blank">https://github.com/ghc/ghc/blob/838b69032566ce6ab3918d70e8d5e098d0bcee02/compiler/cmm/CmmExpr.hs#L275</a>)
 which is itself used in a number of places in the x86 code generator.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">In fact depending on the result of the `cmmRegType` function is another important function `cmmTypeFormat` defined in Format.hs whose result is used to print the actual assembly instruction.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">I have extended all the other Format types to include VectorFormats, however this definition of the `globalRegType` seems incorrect to me. Looking at the signature of the function itself:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">`globalRegType :: DynFlags -> GlobalReg -> CmmType`<br>
<br>
its actually difficult to predict the CmmType by just looking at the GlobalReg in case of Xmm, Ymm, Zmm. So thats why my original question how do I go about solving this. Should I modify the GlobalReg type to contain more information like Width and Length(for
 Xmm, Ymm, Zmm)  or do I somehow pass the length and width information to the globalRegType function?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">Thanks<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">Abhiroop Sakar<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">Kloona - Coming Soon!<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Kloona - Coming Soon!<br></div></div>