blob: fad0bded369c18980019cb9ac308bcd863a44788 [file] [log] [blame]
@ 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