Page 376 - ARM 64 Bit Assembly Language
P. 376

366 Chapter 10

                  •  If 2 is present, then Td/Ta/Tb is 4s/8h/h or 2d/4s/s, and the upper half of Vn is used. Oth-
                     erwise Td/Ta/Tb is 4s/4h/h or 2d/4s/s, and the lower half of Vn is used.
                  •  If the third operand is a scalar ([x] is specified) and Tb is h,then Vm must be in the range
                     v0-v15.

                  10.7.3.2 Operations

                   Name       Effect                              Description
                   sqdmull    if second operand is scalar then    Multiply elements, double the re-
                                Vd[] ← Vn[] × Vm[x]× 2            sults, and store in the destination
                              else                                vector with saturation.
                                Vd[] ← Vn[] × Vm[] × 2
                              end if
                   sqdmlal    if second operand is scalar then    Multiply elements, double the re-
                                Vd[] ←                            sults, and add to the destination
                                    Vd[] + Vn[] × Vm[x]× 2        vector with saturation.
                              else
                                Vd[] ←
                                    Vd[] + Vn[] × Vm[] × 2
                              end if
                   sqdmlsl    if second operand is scalar then    Multiply elements, double the re-
                                Vd[] ←                            sults, and subtract from the destina-
                                    Vd[] − Vn[] × Vm[x]× 2        tion vector with saturation.
                              else
                                Vd[] ←
                                    Vd[] − Vn[] × Vm[] × 2
                              end if

                  10.7.3.3 Examples

                1     sqdmull  v1.4s,v6.4h,v8.4h  // Multiply elements, double,
                2                                 // saturate
                3     sqdmlal2 v0.4s,v4.8h,v5.h[0] // Multiply elements, double,
                4                                 // saturate, accumulate


                  10.7.4 Saturating multiply and double (high)

                  These instructions perform multiplication, double the results, perform saturation, and store the
                  high half of the results:
                  sqdmulh   Saturating Multiply Double (High), and
   371   372   373   374   375   376   377   378   379   380   381