(no commit message)
authorlkcl <lkcl@web>
Fri, 14 Apr 2023 13:17:40 +0000 (14:17 +0100)
committerIkiWiki <ikiwiki.info>
Fri, 14 Apr 2023 13:17:40 +0000 (14:17 +0100)
simple_v_extension/daxpy_example.mdwn

index b48bae362a915b9afb1995fb68a3fca205e47079..64f3dc9d9839f4464a2146c4e9c6f990bb604a72 100644 (file)
@@ -1,3 +1,4 @@
+```
     # c code
     void daxpy(size_t n, double a, const double x[], double y[])
     {
@@ -6,6 +7,23 @@
      }
     }
 
+    
+    # SVP64 Power ISA version
+    # r5: n
+    # r5: x
+    # r6: y
+    # fp1: a
+    mtctr 5                 # move n to CTR
+    addi r10,r6,0           # copy y-ptr into r10
+.L2
+    setvl MAXVL=32,VL=CTR   # could do more
+    sv.lfdup/els *32,8(6)   # load from x
+    sv.lfdup/els *64,8(7)   # load from y
+    sv.fmadd *64,*64,1,*32  # fmadd
+    stfdup/els *64,8(10)    # store y-copy
+    sv.bc/ctr .L2           # decrement VL by CTR
+    blr                     # return
+
     # SV Version
     # a0 is n, a1 is ptr to x[0], a2 is ptr to y[0], fa0 is a (scalar)
       VBLK.REG[0] = {type: F, isvec: 1, regkey: a3, regidx: a3, elwidth: dflt}
@@ -39,3 +57,4 @@
       c.add    a2, a2, t1     # increment pointer to y by vl*8
       c.bnez   a0, loop       # repeat if n != 0
       c.ret                   # return
+```