1 .macro f16_sss_arithmetic reg0, reg1, reg2
2 .irp op, vdiv, vfma, vfms, vfnma, vfnms, vmla, vmls, vmul, vnmla, vnmls, vnmul, vsub
3 .irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16
4 \op\cond s\reg0, s\reg1, s\reg2
9 .macro f16_ss_arithmetic reg0, reg1
10 .irp op, vabs, vadd, vsqrt, vneg
11 .irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16
12 \op\cond s\reg0, s\reg1
17 .macro f16_si_cmp reg0, imm
19 .irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16
25 .macro f16_ss_cmp reg0, reg1
27 .irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16
28 \op\cond s\reg0, s\reg1
33 .macro f16_ss_cvt reg0, reg1
34 .irp cond, eq, ne, ge, lt, gt, le
35 .irp mode, .s32.f16, .u32.f16, .f16.s32, .f16.u32
36 vcvt\cond\mode s\reg0, s\reg1
41 .macro f16_ssi_cvt_imm32 reg0, reg1, imm
42 .irp cond, eq, ne, ge, lt, gt, le
43 .irp mode, .s32.f16, .u32.f16, .f16.s32, .f16.u32
44 vcvt\cond\mode s\reg0, s\reg1, \imm
49 .macro f16_ss_cvt_r reg0, reg1
50 .irp cond, eq, ne, ge, lt, gt, le
51 .irp mode, .s32.f16, .u32.f16
52 vcvtr\cond\mode s\reg0, s\reg1
57 .macro f16_ss_vrint reg0, reg1
58 .irp op, vrintr, vrintx, vrintz
59 .irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16
60 \op\cond s\reg0, s\reg1
65 .macro f16_ss_mov reg0, reg1
67 .irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16
68 \op\cond s\reg0, s\reg1
73 .macro t_f16_ss_mov reg0, reg1
75 .irp cond, eq, ne, ge, lt, gt, le
78 \op\cond\mode s\reg0, s\reg1
86 @ invalied immediate range
87 vldr.16 s6, [pc, #-511]
88 vldr.16 s6, [pc, #111]
89 vldr.16 s3, [pc, #511]
91 @ invalid immediate range
92 vcvt.s32.f16 s11, s11, #33
93 vcvt.u32.f16 s11, s11, #0
94 vcvt.f16.s32 s12, s12, #34
95 vcvt.f16.u32 s12, s12, #-1
97 @ armv8.2 fp16 scalar instruction cannot be conditional
98 f16_sss_arithmetic 0, 1, 2
99 f16_ss_arithmetic 0, 1
103 f16_ssi_cvt_imm32 2, 2, #29