Page 377 - ARM 64 Bit Assembly Language
P. 377

Advanced SIMD instructions 367

                     sqrdmulh
                                Saturating Multiply Double and Round (High).


                     10.7.4.1 Syntax

                          sq{r}dmulh    Vd.T, Vn.T, Vm.T
                          sq{r}dmulh    Vd.Td, Vn.Td, Vm.Ts[x]


                     •   T must be 4h, 8h, 2s,or 4s.
                     •   Td/Ts must be 4h/h, 8h/h, 2s/s,or 4s/s.
                     •   If Ts is h,then Vm must be in the range v0-v15.

                     10.7.4.2 Operations

                       Name        Effect                             Description
                       sqdmulh     n ← #ofelementsin Ts               Multiply elements, double the re-
                                   if [x] is present then             sults and store the high half in the
                                     Vd[] ←                           destination vector with saturation.
                                       Vn[] × Vm[x]× 2   n
                                   else
                                     Vd[] ←
                                       Vn[] × Vm[] × 2   n
                                   end if
                       sqrdmulh    n ← #ofelementsin Ts               Multiply elements, double the re-
                                   if [x] is present then             sults, round, and store the high
                                     Vd[] ←                           half in the destination vector with
                                        Vn[] × Vm[x]× 2    n          saturation.
                                   else
                                     Vd[] ←
                                        Vn[] × Vm[] × 2    n
                                   end if


                     10.7.4.3 Examples

                    1     sqrdmulh v1.4h,v6.4h,v8.h[3]  // Multiply elements, double, round
                    2                                  // saturate, store high half
                    3     sqdmulh  v0.4s,v4.4s,v5.s[2]  // Multiply elements, double,
                    4                                  // accumulate high half, saturate
   372   373   374   375   376   377   378   379   380   381   382