add DAXPY example
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 26 Jun 2019 11:16:29 +0000 (12:16 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Wed, 26 Jun 2019 11:16:29 +0000 (12:16 +0100)
simple_v_extension/appendix.mdwn
simple_v_extension/daxpy_example.mdwn [new file with mode: 0644]

index 55e1cd58636757dff9fb9ea611a8e64b9386ef4d..d817cc722395a242f5072b5d741ffffa9c585ed4 100644 (file)
@@ -1587,3 +1587,7 @@ RVV version:
         add a3, a3, a2        # Add index of zero byte
         sub a0, a3, a0        # Subtract start address+bump
         ret 
+
+## DAXPY
+
+[[!inline raw="yes" pages="simple_v_extension/daxpy_example" ]]
diff --git a/simple_v_extension/daxpy_example.mdwn b/simple_v_extension/daxpy_example.mdwn
new file mode 100644 (file)
index 0000000..587d935
--- /dev/null
@@ -0,0 +1,15 @@
+    # a0 is n, a1 is ptr to x[0], a2 is ptr to y[0], fa0 is a
+     VBLK.REG[0] = {type: F, regkey: a3, regidx: a3, elwidth: dflt}
+     VBLK.REG[1] = {type: F, regkey: a7, regidx: a7, elwidth: dflt}
+     VBLK.MVL = 4
+    loop:
+     setvl  t0, a0          # vl = t0 = min(a0, MVL))
+     ld     a3, a1          # load 4 registers a3-6 from x
+     slli   t1, t0, 3       # t1 = vl * 8 (in bytes)
+     ld     a7, a2          # load 4 registers a7-10 from y
+     add    a1, a1, t1      # increment pointer to x by vl*8
+     fmadd  a7, a3, fa0, a7 # v1 += v0 * fa0 (y = a * x + y)
+     sub    a0, a0, t0      # n -= vl (t0)
+     st     a7, a2          # store 4 registers a7-10 to y
+     add    a2, a2, t1      # increment pointer to y by vl*8
+     bnez   a0, loop        # repeat if n != 0