<div dir="ltr">Hao,<div><br></div><div>The followings are missed in AArch64TargetLowering::getTargetNodeName,</div><div><br></div><div><div>  case AArch64ISD::NEON_DUPIMM:</div><div>    return "AArch64ISD::NEON_DUPIMM";</div>
<div>  case AArch64ISD::NEON_SLI:</div><div>    return "AArch64ISD::NEON_SLI";</div><div>  case AArch64ISD::NEON_SRI:</div><div>    return "AArch64ISD::NEON_SRI";</div><div>  case AArch64ISD::NEON_RSRAs:</div>
<div>    return "AArch64ISD::NEON_RSRAs";</div><div>  case AArch64ISD::NEON_RSRAu:</div><div>    return "AArch64ISD::NEON_RSRAu";</div><div>  case AArch64ISD::NEON_SRAs:</div><div>    return "AArch64ISD::NEON_SRAs";</div>
<div>  case AArch64ISD::NEON_SRAu:</div><div>    return "AArch64ISD::NEON_SRAu";</div><div><br></div></div><div>Thanks,</div><div>-Jiangning</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/8/30 Hao Liu <span dir="ltr"><<a href="mailto:Hao.Liu@arm.com" target="_blank">Hao.Liu@arm.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
Attached are patches to implement aarch64 neon instruction class AdvSIMD<br>
(shift), which patches implemented 21 shift instructions and 4 convert<br>
instructions. Most of them are implemented like ARMv7, except :<br>
1)  SHRN is implemented by IR (lshr/ashr, tuncate) instead of IR intrinsics.<br>
2)  There are some special instructions added in AArch64: shift narrow high,<br>
which is implemented by combining shuffle vector and normal shift narrow<br>
instructions.<br>
3) Simplify  vshll_high_n/vmovl_high ACLE functions by calling vget_high and<br>
vshll_n, instead of adding new __builtins.  In arm_neon.h, We can't write<br>
code like:<br>
                       (int16x8_t)vshll_n_s8(vget_high_s8(__a), __b),<br>
     as there is a local variable in Macro vshll_n_s8 also named "__a".<br>
Macro expanding will generate code like "__a = vget_high_s8(__a)", which<br>
will report an error when compiling ACLE functions.<br>
     So I make the generated code in arm_neon.h as following:<br>
                       int8x8_t __a1 = vget_high_s8(__a);<br>
                      (int16x8_t)vshll_n_s8(__a1, __b);<br>
<br>
There are some changed in Clang as new types need to be supported:<br>
1)  Add a new naming type 'm' in <a href="http://arm_neon.td" target="_blank">arm_neon.td</a> to generate "half width<br>
elements, same num elts", as there are some complicated  ACLE functions<br>
can't be generated, such as "int8x16_t vqshrn_high_n_s16(int8x8_t,<br>
int16x8_t, )".<br>
2)  There is a minor bug about double type in ModType() NeonEmitter.cpp,<br>
which will result in wrong NeonTypeFlages. Fix it by adding:<br>
              +      if (type == 'd')<br>
              +        type = 'l';<br>
3) Enable the range check for VCVT_N can check [1, 64] for floating-point<br>
64-bit type in NeonEmitter.cpp.<br>
<br>
<br>
Ask for review, please.<br>
<br>
Thanks,<br>
-Hao<br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Thanks,<div>-Jiangning</div>
</div>