@ VFP with Neon-style syntax .syntax unified .include "itblock.s" func: .macro testvmov cond="" f32=".f32" f64=".f64" itblock 4 \cond vmov\cond\f32 s0,s1 vmov\cond\f64 d0,d1 vmov\cond\f32 s0,#0.25 vmov\cond\f64 d0,#1.0 itblock 4 \cond vmov\cond r0,s1 vmov\cond s0,r1 vmov\cond r0,r1,s2,s3 vmov\cond s0,s1,r2,r4 .endm @ Test VFP vmov variants. These can all be conditional. testvmov testvmov eq .macro monadic op cond="" f32=".f32" f64=".f64" itblock 2 \cond \op\cond\f32 s0,s1 \op\cond\f64 d0,d1 .endm .macro monadic_c op monadic \op monadic \op eq .endm .macro dyadic op cond="" f32=".f32" f64=".f64" itblock 2 \cond \op\cond\f32 s0,s1,s2 \op\cond\f64 d0,d1,d2 .endm .macro dyadic_c op dyadic \op dyadic \op eq .endm .macro dyadicz op cond="" f32=".f32" f64=".f64" itblock 2 \cond \op\cond\f32 s0,#0 \op\cond\f64 d0,#0 .endm .macro dyadicz_c op dyadicz \op dyadicz \op eq .endm monadic_c vsqrt monadic_c vabs monadic_c vneg monadic_c vcmp monadic_c vcmpe dyadic_c vnmul dyadic_c vnmla dyadic_c vnmls dyadic_c vmul dyadic_c vmla dyadic_c vmls dyadic_c vadd dyadic_c vsub dyadic_c vdiv dyadicz_c vcmp dyadicz_c vcmpe .macro cvtz cond="" s32=".s32" u32=".u32" f32=".f32" f64=".f64" itblock 4 \cond vcvtz\cond\s32\f32 s0,s1 vcvtz\cond\u32\f32 s0,s1 vcvtz\cond\s32\f64 s0,d1 vcvtz\cond\u32\f64 s0,d1 .endm cvtz cvtz eq .macro cvt cond="" s32=".s32" u32=".u32" f32=".f32" f64=".f64" itblock 4 \cond vcvt\cond\s32\f32 s0,s1 vcvt\cond\u32\f32 s0,s1 vcvt\cond\f32\s32 s0,s1 vcvt\cond\f32\u32 s0,s1 itblock 4 \cond vcvt\cond\f32\f64 s0,d1 vcvt\cond\f64\f32 d0,s1 vcvt\cond\s32\f64 s0,d1 vcvt\cond\u32\f64 s0,d1 itblock 2 \cond vcvt\cond\f64\s32 d0,s1 vcvt\cond\f64\u32 d0,s1 .endm cvt cvt eq .macro cvti cond="" s32=".s32" u32=".u32" f32=".f32" f64=".f64" s16=".s16" u16=".u16" itblock 4 \cond vcvt\cond\s32\f32 s0,s0,#1 vcvt\cond\u32\f32 s0,s0,#1 vcvt\cond\f32\s32 s0,s0,#1 vcvt\cond\f32\u32 s0,s0,#1 itblock 4 \cond vcvt\cond\s32\f64 d0,d0,#1 vcvt\cond\u32\f64 d0,d0,#1 vcvt\cond\f64\s32 d0,d0,#1 vcvt\cond\f64\u32 d0,d0,#1 itblock 4 \cond vcvt\cond\f32\s16 s0,s0,#1 vcvt\cond\f32\u16 s0,s0,#1 vcvt\cond\f64\s16 d0,d0,#1 vcvt\cond\f64\u16 d0,d0,#1 itblock 4 \cond vcvt\cond\s16\f32 s0,s0,#1 vcvt\cond\u16\f32 s0,s0,#1 vcvt\cond\s16\f64 d0,d0,#1 vcvt\cond\u16\f64 d0,d0,#1 .endm cvti cvti eq .macro multi op cond="" n="" ia="ia" db="db" itblock 4 \cond \op\n\cond r0,{s3-s6} \op\ia\cond r0,{s3-s6} \op\ia\cond r0!,{s3-s6} \op\db\cond r0!,{s3-s6} itblock 4 \cond \op\n\cond r0,{d3-d6} \op\ia\cond r0,{d3-d6} \op\ia\cond r0!,{d3-d6} \op\db\cond r0!,{d3-d6} .endm multi vldm multi vldm eq multi vstm multi vstm eq .macro single op cond="" itblock 2 \cond \op\cond s0,[r0,#4] \op\cond d0,[r0,#4] .endm single vldr single vldr eq single vstr single vstr eq