.macro f16_sss_arithmetic reg0, reg1, reg2 | |
.irp op, vdiv, vfma, vfms, vfnma, vfnms, vmla, vmls, vmul, vnmla, vnmls, vnmul, vsub | |
.irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16 | |
\op\cond s\reg0, s\reg1, s\reg2 | |
.endr | |
.endr | |
.endm | |
.macro f16_ss_arithmetic reg0, reg1 | |
.irp op, vabs, vadd, vsqrt, vneg | |
.irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16 | |
\op\cond s\reg0, s\reg1 | |
.endr | |
.endr | |
.endm | |
.macro f16_si_cmp reg0, imm | |
.irp op, vcmp, vcmpe | |
.irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16 | |
\op\cond s\reg0, \imm | |
.endr | |
.endr | |
.endm | |
.macro f16_ss_cmp reg0, reg1 | |
.irp op, vcmp, vcmpe | |
.irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16 | |
\op\cond s\reg0, s\reg1 | |
.endr | |
.endr | |
.endm | |
.macro f16_ss_cvt reg0, reg1 | |
.irp cond, eq, ne, ge, lt, gt, le | |
.irp mode, .s32.f16, .u32.f16, .f16.s32, .f16.u32 | |
vcvt\cond\mode s\reg0, s\reg1 | |
.endr | |
.endr | |
.endm | |
.macro f16_ssi_cvt_imm32 reg0, reg1, imm | |
.irp cond, eq, ne, ge, lt, gt, le | |
.irp mode, .s32.f16, .u32.f16, .f16.s32, .f16.u32 | |
vcvt\cond\mode s\reg0, s\reg1, \imm | |
.endr | |
.endr | |
.endm | |
.macro f16_ss_cvt_r reg0, reg1 | |
.irp cond, eq, ne, ge, lt, gt, le | |
.irp mode, .s32.f16, .u32.f16 | |
vcvtr\cond\mode s\reg0, s\reg1 | |
.endr | |
.endr | |
.endm | |
.macro f16_ss_vrint reg0, reg1 | |
.irp op, vrintr, vrintx, vrintz | |
.irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16 | |
\op\cond s\reg0, s\reg1 | |
.endr | |
.endr | |
.endm | |
.macro f16_ss_mov reg0, reg1 | |
.irp op, vins, vmovx | |
.irp cond, eq.f16, ne.f16, ge.f16, lt.f16, gt.f16, le.f16 | |
\op\cond s\reg0, s\reg1 | |
.endr | |
.endr | |
.endm | |
.macro t_f16_ss_mov reg0, reg1 | |
.irp op, vins, vmovx | |
.irp cond, eq, ne, ge, lt, gt, le | |
.irp mode, .f16 | |
it \cond | |
\op\cond\mode s\reg0, s\reg1 | |
.endr | |
.endr | |
.endr | |
.endm | |
.text | |
@ invalied immediate range | |
vldr.16 s6, [pc, #-511] | |
vldr.16 s6, [pc, #111] | |
vldr.16 s3, [pc, #511] | |
@ invalid immediate range | |
vcvt.s32.f16 s11, s11, #33 | |
vcvt.u32.f16 s11, s11, #0 | |
vcvt.f16.s32 s12, s12, #34 | |
vcvt.f16.u32 s12, s12, #-1 | |
@ armv8.2 fp16 scalar instruction cannot be conditional | |
f16_sss_arithmetic 0, 1, 2 | |
f16_ss_arithmetic 0, 1 | |
f16_si_cmp 2, #0.0 | |
f16_ss_cmp 0, 1 | |
f16_ss_cvt 1, 8 | |
f16_ssi_cvt_imm32 2, 2, #29 | |
f16_ss_cvt_r 0, 10 | |
f16_ss_vrint 3, 11 | |
f16_ss_mov 0, 1 | |
.syntax unified | |
.thumb | |
t_f16_ss_mov 0, 1 |