--- /dev/null
+#*****************************************************************************
+# fma.S
+#-----------------------------------------------------------------------------
+#
+# Test fma instruction in a vf block.
+#
+
+#include "riscv_test.h"
+#include "test_macros.h"
+
+RVTEST_RV64UV
+RVTEST_CODE_BEGIN
+
+ vsetcfg 3,16
+ li a3,2048
+ vsetvl a3,a3
+
+ la a4,src
+ fld f0,0(a4)
+ fld f1,8(a4)
+ fmv.x.d s0,f0
+ fmv.x.d s1,f1
+ vmsv vx1,s0
+ vmsv vx2,s1
+ lui a0,%hi(vtcode)
+ vf %lo(vtcode)(a0)
+
+ li a7,0
+ li a6,400
+wait:
+ addi a7,a7,1
+ bne a7,a6,wait
+
+ fadd.d f0,f0,f1
+ fmv.x.d s2,f0
+
+ la a5,dest
+ vfsd vf0,a5
+ fence
+
+ la s3,result
+ ld s4,0(s3)
+ li TESTNUM,2
+ bne s2,s4,fail
+
+# verify 1st fadd
+ li a2,0
+loop1:
+ ld a0,0(a5)
+ addi TESTNUM,a2,3
+ bne a0,s4,fail
+ addi a5,a5,8
+ addi a2,a2,1
+ bne a2,a3,loop1
+
+# verify 2nd fmadd
+ la a5,dest
+ vfsd vf2,a5
+ fence
+ ld s4,8(s3)
+
+ li a2,0
+loop2:
+ ld a0,0(a5)
+ addi TESTNUM,a2,3
+ bne a0,s4,fail
+ addi a5,a5,8
+ addi a2,a2,1
+ bne a2,a3,loop2
+
+# verify 3rd fmul
+ la a5,dest
+ vfsd vf5,a5
+ fence
+ ld s4,16(s3)
+
+ li a2,0
+loop3:
+ ld a0,0(a5)
+ addi TESTNUM,a2,3
+ bne a0,s4,fail
+ addi a5,a5,8
+ addi a2,a2,1
+ bne a2,a3,loop3
+
+# verify 4th fmul
+ la a5,dest
+ vfsd vf8,a5
+ fence
+ ld s4,24(s3)
+
+ li a2,0
+loop4:
+ ld a0,0(a5)
+ addi TESTNUM,a2,3
+ bne a0,s4,fail
+ addi a5,a5,8
+ addi a2,a2,1
+ bne a2,a3,loop4
+
+# verify 5th fmadd
+ la a5,dest
+ vfsd vf9,a5
+ fence
+ ld s4,32(s3)
+
+ li a2,0
+loop5:
+ ld a0,0(a5)
+ addi TESTNUM,a2,3
+ bne a0,s4,fail
+ addi a5,a5,8
+ addi a2,a2,1
+ bne a2,a3,loop5
+
+# verify 6th fnmadd
+ la a5,dest
+ vfsd vf11,a5
+ fence
+ ld s4,40(s3)
+
+ li a2,0
+loop6:
+ ld a0,0(a5)
+ addi TESTNUM,a2,3
+ bne a0,s4,fail
+ addi a5,a5,8
+ addi a2,a2,1
+ bne a2,a3,loop6
+
+ j pass
+
+vtcode:
+ fmv.d.x f0,x1
+ fmv.d.x f1,x2
+ fmv.d.x f2,x1
+ fmv.d.x f3,x2
+ fmv.d.x f4,x1
+ fmv.d.x f5,x2
+ fmv.d.x f6,x1
+ fmv.d.x f7,x2
+ fmv.d.x f8,x1
+ fmv.d.x f9,x2
+ fmv.d.x f10,x1
+ fmv.d.x f11,x2
+ fmv.d.x f12,x1
+ fmv.d.x f13,x2
+ fmv.d.x f14,x1
+ fmv.d.x f15,x2
+ fadd.d f0,f0,f1
+ fmadd.d f2,f2,f3,f4
+ fmul.d f5,f5,f6
+ fmul.d f8,f5,f7
+ fmadd.d f9,f9,f10,f9
+ fnmadd.d f11,f12,f13,f14
+ stop
+
+ TEST_PASSFAIL
+
+RVTEST_CODE_END
+
+ .data
+RVTEST_DATA_BEGIN
+
+ TEST_DATA
+
+src:
+ .double 1.0
+ .double 2.0
+result:
+ .double 3.0
+ .double 3.0
+ .double 2.0
+ .double 4.0
+ .double 4.0
+ .double -3.0
+dest:
+ .skip 16384
+
+RVTEST_DATA_END