[PATCH v2 3/3] RISC-V: Add testcases for z[fdq]inx

Palmer Dabbelt palmer@dabbelt.com
Thu Nov 18 02:15:03 GMT 2021


On Wed, 17 Nov 2021 04:10:08 PST (-0800), jiawei@iscas.ac.cn wrote:
> Use gpr when the zfinx enable, the testcases contain float
> instructions that reuse by z[fdq]inx.
>
> gas/ChangeLog:
>
> * testsuite/gas/riscv/zdinx.d: New test.
> * testsuite/gas/riscv/zdinx.s: New test.
> * testsuite/gas/riscv/zfinx.d: New test.
> * testsuite/gas/riscv/zfinx.s: New test.
> * testsuite/gas/riscv/zqinx.d: New test.
> * testsuite/gas/riscv/zqinx.s: New test.
>
> ---
>  gas/testsuite/gas/riscv/zdinx.d | 42 +++++++++++++++++++++++++++++++
>  gas/testsuite/gas/riscv/zdinx.s | 34 +++++++++++++++++++++++++
>  gas/testsuite/gas/riscv/zfinx.d | 40 ++++++++++++++++++++++++++++++
>  gas/testsuite/gas/riscv/zfinx.s | 32 ++++++++++++++++++++++++
>  gas/testsuite/gas/riscv/zqinx.d | 44 +++++++++++++++++++++++++++++++++
>  gas/testsuite/gas/riscv/zqinx.s | 36 +++++++++++++++++++++++++++
>  6 files changed, 228 insertions(+)
>  create mode 100644 gas/testsuite/gas/riscv/zdinx.d
>  create mode 100644 gas/testsuite/gas/riscv/zdinx.s
>  create mode 100644 gas/testsuite/gas/riscv/zfinx.d
>  create mode 100644 gas/testsuite/gas/riscv/zfinx.s
>  create mode 100644 gas/testsuite/gas/riscv/zqinx.d
>  create mode 100644 gas/testsuite/gas/riscv/zqinx.s

These generally look good, but we should have some negative tests too -- 
ie, these should fail on F, and things like "fadd.s a0, a0, a0" should 
fail on Zfinx.  IMO that doesn't need to block the patch set, though, as 
these do work now.

> diff --git a/gas/testsuite/gas/riscv/zdinx.d b/gas/testsuite/gas/riscv/zdinx.d
> new file mode 100644
> index 00000000000..85c270fe913
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/zdinx.d
> @@ -0,0 +1,42 @@
> +#as: -march=rv64ima_zdinx
> +#source: zdinx.s
> +#objdump: -dr
> +
> +.*:[ 	]+file format .*
> +
> +Disassembly of section .text:
> +
> +0+000 <target>:
> +[ 	]+[0-9a-f]+:[ 	]+02c5f553[ 	]+fadd.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+0ac5f553[ 	]+fsub.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+12c5f553[ 	]+fmul.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+1ac5f553[ 	]+fdiv.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+5a057553[ 	]+fsqrt.d[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+2ac58553[ 	]+fmin.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+2ac59553[ 	]+fmax.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+6ac5f543[ 	]+fmadd.d[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+6ac5f54f[ 	]+fnmadd.d[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+6ac5f547[ 	]+fmsub.d[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+6ac5f54b[ 	]+fnmsub.d[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+c205f553[ 	]+fcvt.w.d[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c215f553[ 	]+fcvt.wu.d[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c225f553[ 	]+fcvt.l.d[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c235f553[ 	]+fcvt.lu.d[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+4015f553[ 	]+fcvt.s.d[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+42058553[ 	]+fcvt.d.s[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d2058553[ 	]+fcvt.d.w[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d2158553[ 	]+fcvt.d.wu[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d225f553[ 	]+fcvt.d.l[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d235f553[ 	]+fcvt.d.lu[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+22c58553[ 	]+fsgnj.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+22c59553[ 	]+fsgnjn.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+22c5a553[ 	]+fsgnjx.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a2c5a553[ 	]+feq.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a2c59553[ 	]+flt.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a2c58553[ 	]+fle.d[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a2b61553[ 	]+flt.d[ 	]+a0,a2,a1
> +[ 	]+[0-9a-f]+:[ 	]+a2b60553[ 	]+fle.d[ 	]+a0,a2,a1
> +[ 	]+[0-9a-f]+:[ 	]+22a51553[ 	]+fneg.d[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+22a52553[ 	]+fabs.d[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+e2059553[ 	]+fclass.d[ 	]+a0,a1
> +
> diff --git a/gas/testsuite/gas/riscv/zdinx.s b/gas/testsuite/gas/riscv/zdinx.s
> new file mode 100644
> index 00000000000..e1bf73cf4bf
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/zdinx.s
> @@ -0,0 +1,34 @@
> +target:
> +	fadd.d	a0, a1, a2
> +	fsub.d	a0, a1, a2
> +	fmul.d	a0, a1, a2
> +	fdiv.d	a0, a1, a2
> +	fsqrt.d	a0, a0
> +	fmin.d	a0, a1, a2
> +	fmax.d	a0, a1, a2
> +	fmadd.d	a0, a1, a2, a3
> +	fnmadd.d	a0, a1, a2, a3
> +	fmsub.d	a0, a1, a2, a3
> +	fnmsub.d	a0, a1, a2, a3
> +	fcvt.w.d	a0, a1
> +	fcvt.wu.d	a0, a1
> +	fcvt.l.d	a0, a1
> +	fcvt.lu.d	a0, a1
> +	fcvt.s.d	a0, a1
> +	fcvt.d.s	a0, a1
> +	fcvt.d.w	a0, a1
> +	fcvt.d.wu	a0, a1
> +	fcvt.d.l	a0, a1
> +	fcvt.d.lu	a0, a1
> +	fsgnj.d	a0, a1, a2
> +	fsgnjn.d	a0, a1, a2
> +	fsgnjx.d	a0, a1, a2
> +	feq.d	a0, a1, a2
> +	flt.d	a0, a1, a2
> +	fle.d	a0, a1, a2
> +	fgt.d	a0, a1, a2
> +	fge.d	a0, a1, a2
> +	fneg.d  a0, a0
> +	fabs.d	a0, a0
> +	fclass.d	a0, a1
> +
> diff --git a/gas/testsuite/gas/riscv/zfinx.d b/gas/testsuite/gas/riscv/zfinx.d
> new file mode 100644
> index 00000000000..7aebe9d5e3e
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/zfinx.d
> @@ -0,0 +1,40 @@
> +#as: -march=rv64ima_zfinx
> +#source: zfinx.s
> +#objdump: -dr
> +
> +.*:[ 	]+file format .*
> +
> +Disassembly of section .text:
> +
> +0+000 <target>:
> +[ 	]+[0-9a-f]+:[ 	]+00c5f553[ 	]+fadd.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+08c5f553[ 	]+fsub.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+10c5f553[ 	]+fmul.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+18c5f553[ 	]+fdiv.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+58057553[ 	]+fsqrt.s[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+28c58553[ 	]+fmin.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+28c59553[ 	]+fmax.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+68c5f543[ 	]+fmadd.s[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+68c5f54f[ 	]+fnmadd.s[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+68c5f547[ 	]+fmsub.s[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+68c5f54b[ 	]+fnmsub.s[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+c005f553[ 	]+fcvt.w.s[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c015f553[ 	]+fcvt.wu.s[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c025f553[ 	]+fcvt.l.s[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c035f553[ 	]+fcvt.lu.s[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d005f553[ 	]+fcvt.s.w[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d015f553[ 	]+fcvt.s.wu[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d025f553[ 	]+fcvt.s.l[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d035f553[ 	]+fcvt.s.lu[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+20c58553[ 	]+fsgnj.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+20c59553[ 	]+fsgnjn.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+20c5a553[ 	]+fsgnjx.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a0c5a553[ 	]+feq.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a0c59553[ 	]+flt.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a0c58553[ 	]+fle.s[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a0b61553[ 	]+flt.s[ 	]+a0,a2,a1
> +[ 	]+[0-9a-f]+:[ 	]+a0b60553[ 	]+fle.s[ 	]+a0,a2,a1
> +[ 	]+[0-9a-f]+:[ 	]+20a51553[ 	]+fneg.s[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+20a52553[ 	]+fabs.s[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+e0059553[ 	]+fclass.s[ 	]+a0,a1
> +
> diff --git a/gas/testsuite/gas/riscv/zfinx.s b/gas/testsuite/gas/riscv/zfinx.s
> new file mode 100644
> index 00000000000..aa5cd386536
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/zfinx.s
> @@ -0,0 +1,32 @@
> +target:
> +	fadd.s	a0, a1, a2
> +	fsub.s	a0, a1, a2
> +	fmul.s	a0, a1, a2
> +	fdiv.s	a0, a1, a2
> +	fsqrt.s	a0, a0
> +	fmin.s	a0, a1, a2
> +	fmax.s	a0, a1, a2
> +	fmadd.s	a0, a1, a2, a3
> +	fnmadd.s	a0, a1, a2, a3
> +	fmsub.s	a0, a1, a2, a3
> +	fnmsub.s	a0, a1, a2, a3
> +	fcvt.w.s	a0, a1
> +	fcvt.wu.s	a0, a1
> +	fcvt.l.s	a0, a1
> +	fcvt.lu.s	a0, a1
> +	fcvt.s.w	a0, a1
> +	fcvt.s.wu	a0, a1
> +	fcvt.s.l	a0, a1
> +	fcvt.s.lu	a0, a1
> +	fsgnj.s	a0, a1, a2
> +	fsgnjn.s	a0, a1, a2
> +	fsgnjx.s	a0, a1, a2
> +	feq.s	a0, a1, a2
> +	flt.s	a0, a1, a2
> +	fle.s	a0, a1, a2
> +	fgt.s	a0, a1, a2
> +	fge.s	a0, a1, a2
> +	fneg.s  a0, a0
> +	fabs.s	a0, a0
> +	fclass.s	a0, a1
> +
> diff --git a/gas/testsuite/gas/riscv/zqinx.d b/gas/testsuite/gas/riscv/zqinx.d
> new file mode 100644
> index 00000000000..5f5ab7c75cb
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/zqinx.d
> @@ -0,0 +1,44 @@
> +#as: -march=rv64ima_zqinx
> +#source: zqinx.s
> +#objdump: -dr
> +
> +.*:[ 	]+file format .*
> +
> +Disassembly of section .text:
> +
> +0+000 <target>:
> +[ 	]+[0-9a-f]+:[ 	]+06c5f553[ 	]+fadd.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+0ec5f553[ 	]+fsub.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+16c5f553[ 	]+fmul.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+1ec5f553[ 	]+fdiv.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+5e057553[ 	]+fsqrt.q[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+2ec58553[ 	]+fmin.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+2ec59553[ 	]+fmax.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+6ec5f543[ 	]+fmadd.q[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+6ec5f54f[ 	]+fnmadd.q[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+6ec5f547[ 	]+fmsub.q[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+6ec5f54b[ 	]+fnmsub.q[ 	]+a0,a1,a2,a3
> +[ 	]+[0-9a-f]+:[ 	]+c605f553[ 	]+fcvt.w.q[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c615f553[ 	]+fcvt.wu.q[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c625f553[ 	]+fcvt.l.q[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+c635f553[ 	]+fcvt.lu.q[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+4035f553[ 	]+fcvt.s.q[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+4235f553[ 	]+fcvt.d.q[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+46058553[ 	]+fcvt.q.s[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+46158553[ 	]+fcvt.q.d[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d6058553[ 	]+fcvt.q.w[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d6158553[ 	]+fcvt.q.wu[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d625f553[ 	]+fcvt.q.l[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+d635f553[ 	]+fcvt.q.lu[ 	]+a0,a1
> +[ 	]+[0-9a-f]+:[ 	]+26c58553[ 	]+fsgnj.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+26c59553[ 	]+fsgnjn.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+26c5a553[ 	]+fsgnjx.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a6c5a553[ 	]+feq.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a6c59553[ 	]+flt.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a6c58553[ 	]+fle.q[ 	]+a0,a1,a2
> +[ 	]+[0-9a-f]+:[ 	]+a6b61553[ 	]+flt.q[ 	]+a0,a2,a1
> +[ 	]+[0-9a-f]+:[ 	]+a6b60553[ 	]+fle.q[ 	]+a0,a2,a1
> +[ 	]+[0-9a-f]+:[ 	]+26a51553[ 	]+fneg.q[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+26a52553[ 	]+fabs.q[ 	]+a0,a0
> +[ 	]+[0-9a-f]+:[ 	]+e6059553[ 	]+fclass.q[ 	]+a0,a1
> +
> diff --git a/gas/testsuite/gas/riscv/zqinx.s b/gas/testsuite/gas/riscv/zqinx.s
> new file mode 100644
> index 00000000000..797bb1f9ed7
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/zqinx.s
> @@ -0,0 +1,36 @@
> +target:
> +	fadd.q	a0, a1, a2
> +	fsub.q	a0, a1, a2
> +	fmul.q	a0, a1, a2
> +	fdiv.q	a0, a1, a2
> +	fsqrt.q	a0, a0
> +	fmin.q	a0, a1, a2
> +	fmax.q	a0, a1, a2
> +	fmadd.q	a0, a1, a2, a3
> +	fnmadd.q	a0, a1, a2, a3
> +	fmsub.q	a0, a1, a2, a3
> +	fnmsub.q	a0, a1, a2, a3
> +	fcvt.w.q	a0, a1
> +	fcvt.wu.q	a0, a1
> +	fcvt.l.q	a0, a1
> +	fcvt.lu.q	a0, a1
> +	fcvt.s.q	a0, a1
> +	fcvt.d.q	a0, a1
> +	fcvt.q.s	a0, a1
> +	fcvt.q.d	a0, a1
> +	fcvt.q.w	a0, a1
> +	fcvt.q.wu	a0, a1
> +	fcvt.q.l	a0, a1
> +	fcvt.q.lu	a0, a1
> +	fsgnj.q	a0, a1, a2
> +	fsgnjn.q	a0, a1, a2
> +	fsgnjx.q	a0, a1, a2
> +	feq.q	a0, a1, a2
> +	flt.q	a0, a1, a2
> +	fle.q	a0, a1, a2
> +	fgt.q	a0, a1, a2
> +	fge.q	a0, a1, a2
> +	fneg.q  a0, a0
> +	fabs.q	a0, a0
> +	fclass.q	a0, a1
> +


More information about the Binutils mailing list