three_same frecps
three_same fdiv
three_same frsqrts
+
+ /* Scalar three-same. */
+
+ .macro sthree_same, op
+ \op d0, d1, d2
+ \op s0, s1, s2
+ \op h0, h1, h2
+ \op h0, h0, h0
+ .endm
+
+ sthree_same fabd
+ sthree_same fmulx
+ sthree_same fcmeq
+ sthree_same fcmgt
+ sthree_same fcmge
+ sthree_same facge
+ sthree_same facgt
+ sthree_same frecps
+ sthree_same frsqrts
+
+ /* Vector two-register misc. */
+
+ .macro tworeg_zero, op
+ \op v0.2d, v1.2d, #0.0
+ \op v0.2s, v1.2s, #0.0
+ \op v0.4s, v1.4s, #0.0
+ \op v0.4h, v1.4h, #0.0
+ \op v0.8h, v1.8h, #0.0
+ .endm
+
+ tworeg_zero fcmgt
+ tworeg_zero fcmge
+ tworeg_zero fcmeq
+ tworeg_zero fcmle
+ tworeg_zero fcmlt
+
+ .macro tworeg_misc, op
+ \op v0.2d, v1.2d
+ \op v0.2s, v1.2s
+ \op v0.4s, v1.4s
+ \op v0.4h, v1.4h
+ \op v0.8h, v1.8h
+ .endm
+
+ tworeg_misc fabs
+ tworeg_misc fneg
+
+ tworeg_misc frintn
+ tworeg_misc frinta
+ tworeg_misc frintp
+
+ tworeg_misc frintm
+ tworeg_misc frintx
+ tworeg_misc frintz
+ tworeg_misc frinti
+
+ tworeg_misc fcvtns
+ tworeg_misc fcvtnu
+ tworeg_misc fcvtps
+ tworeg_misc fcvtpu
+
+ tworeg_misc fcvtms
+ tworeg_misc fcvtmu
+ tworeg_misc fcvtzs
+ tworeg_misc fcvtzu
+
+ tworeg_misc fcvtas
+ tworeg_misc fcvtau
+
+ tworeg_misc scvtf
+ tworeg_misc ucvtf
+ tworeg_misc frecpe
+ tworeg_misc frsqrte
+ tworeg_misc fsqrt
+
+ /* Scalar two-register misc. */
+
+ .macro stworeg_zero, op
+ \op d0, d1, #0.0
+ \op s0, s1, #0.0
+ \op h0, h1, #0.0
+ \op h0, h0, #0.0
+ .endm
+
+ stworeg_zero fcmgt
+ stworeg_zero fcmge
+ stworeg_zero fcmeq
+ stworeg_zero fcmle
+ stworeg_zero fcmlt
+
+ .macro stworeg_misc, op
+ \op d0, d1
+ \op s0, s1
+ \op h0, h1
+ \op h0, h0
+ .endm
+
+ stworeg_misc fcvtns
+ stworeg_misc fcvtnu
+ stworeg_misc fcvtps
+ stworeg_misc fcvtpu
+
+ stworeg_misc fcvtms
+ stworeg_misc fcvtmu
+ stworeg_misc fcvtzs
+ stworeg_misc fcvtzu
+
+ stworeg_misc fcvtas
+ stworeg_misc fcvtau
+
+ stworeg_misc scvtf
+ stworeg_misc ucvtf
+
+ stworeg_misc frecpe
+ stworeg_misc frsqrte
+ stworeg_misc frecpx
+
+ /* Vector indexed element. */
+
+ .macro indexed_elem, op
+ \op v1.2d, v2.2d, v3.d[1]
+ \op v1.2s, v2.2s, v3.s[2]
+ \op v1.4s, v2.4s, v3.s[1]
+ \op v0.4h, v0.4h, v0.h[0]
+ \op v1.4h, v2.4h, v3.h[0]
+ \op v0.8h, v0.8h, v0.h[0]
+ \op v1.8h, v2.8h, v3.h[0]
+ \op v1.2d, v5.2d, v10.d[0]
+ \op v8.2s, v0.2s, v11.s[3]
+ \op v0.4h, v9.4h, v15.h[7]
+ .endm
+
+ indexed_elem fmla
+ indexed_elem fmls
+
+ indexed_elem fmul
+ indexed_elem fmulx
+
+ /* Scalar indexed element. */
+
+ .macro sindexed_elem, op
+ \op d1, d2, v3.d[1]
+ \op s1, s2, v3.s[1]
+ \op h1, h2, v3.h[1]
+ \op h0, h0, v0.h[0]
+ .endm
+
+ sindexed_elem fmla
+ sindexed_elem fmls
+
+ sindexed_elem fmul
+ sindexed_elem fmulx
+
+ /* Adv.SIMD across lanes. */
+
+ .macro across_lanes, op
+ \op s1, v2.4s
+ \op h1, v2.4h
+ \op h1, v2.8h
+ \op h0, v0.4h
+ \op h0, v0.8h
+ .endm
+
+ across_lanes fmaxnmv
+ across_lanes fmaxv
+ across_lanes fminnmv
+ across_lanes fminv
+
+ /* Adv.SIMD modified immediate. */
+
+ fmov v1.2d, #2.0
+ fmov v1.2s, #2.0
+ fmov v1.4s, #2.0
+ fmov v1.4h, #2.0
+ fmov v1.8h, #2.0
+ fmov v0.4h, #1.0
+ fmov v0.8h, #1.0
+
+ /* Adv.SIMD scalar pairwise. */
+
+ .macro scalar_pairwise, op
+ \op d1, v2.2d
+ \op s1, v2.2s
+ \op h1, v2.2h
+ \op h0, v0.2h
+ .endm
+
+ scalar_pairwise fmaxnmp
+ scalar_pairwise faddp
+ scalar_pairwise fmaxp
+ scalar_pairwise fminnmp
+ scalar_pairwise fminp
+
+ /* Adv.SIMD shift by immediate. */
+
+ .macro shift_imm, op
+ \op v1.2d, v2.2d, #3
+ \op v1.2s, v2.2s, #3
+ \op v1.4s, v2.4s, #3
+ \op v1.4h, v2.4h, #3
+ \op v1.8h, v2.8h, #3
+ \op v0.4h, v0.4h, #1
+ \op v0.8h, v0.8h, #1
+ .endm
+
+ shift_imm scvtf
+ shift_imm fcvtzs
+ shift_imm ucvtf
+ shift_imm fcvtzu
+
+ /* Adv.SIMD scalar shift by immediate. */
+
+ .macro sshift_imm, op
+ \op d1, d2, #3
+ \op s1, s2, #3
+ \op h1, h2, #3
+ \op h0, h0, #1
+ .endm
+
+ sshift_imm scvtf
+ sshift_imm fcvtzs
+ sshift_imm ucvtf
+ sshift_imm fcvtzu