bug 1244: add strncpy assembler and c
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 8 Jan 2024 12:22:49 +0000 (12:22 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 8 Jan 2024 12:22:54 +0000 (12:22 +0000)
conferences/fosdem2024/fosdem2024_ddffirst/fosdem2024_ddffirst.tex
conferences/fosdem2024/fosdem2024_ddffirst/strncpy.c [new file with mode: 0644]
conferences/fosdem2024/fosdem2024_ddffirst/strncpy.s [new file with mode: 0644]

index fcdccdbc536f910c892fa59aff41f80d22ceaeb2..dcbd7886a3c4370baa9df1e7d6133430112a8a50 100644 (file)
@@ -2,6 +2,8 @@
 \usepackage{beamerthemesplit}
 \usepackage{graphics}
 \usepackage{pstricks}
+\usepackage{pgffor}
+\usepackage{listings}
 
 \graphicspath{{./}}
 
@@ -209,11 +211,20 @@ function op\_cmpi(BA, RA, SI) # cmpi not vector-cmpi!
        \end{semiverbatim}
 
 }
+
 \frame{\frametitle{strncpy}
+
   \begin{itemize}
        \item "TODO
  \end{itemize} 
 }
+
+\frame{\frametitle{strncpy assembler}
+
+\lstinputlisting[language={}]{\strncpy.s}
+
+}
+
 \frame{\frametitle{linked-list walking}        
   \begin{itemize}
        \item "TODO
diff --git a/conferences/fosdem2024/fosdem2024_ddffirst/strncpy.c b/conferences/fosdem2024/fosdem2024_ddffirst/strncpy.c
new file mode 100644 (file)
index 0000000..0c76efa
--- /dev/null
@@ -0,0 +1,4 @@
+for (i = 0; i < n && src[i] != chr(0); i++)
+    dest[i] = src[i];
+for ( ; i < n; i++)
+    dest[i] = chr(0);
diff --git a/conferences/fosdem2024/fosdem2024_ddffirst/strncpy.s b/conferences/fosdem2024/fosdem2024_ddffirst/strncpy.s
new file mode 100644 (file)
index 0000000..6fd30f4
--- /dev/null
@@ -0,0 +1,15 @@
+    mtspr 9, 3  # move r3 to CTR
+    addi 0,0,0  # initialise r0 to zero
+L1: # chr-copy loop starts here:
+    setvl 1,0,64,0,1,1 # VL,r1 = MIN(CTR,MVL=64)
+    # load VL bytes (update r10 addr)
+    sv.lbzu/pi *16, 1(10)    
+    sv.cmpi/ff=eq/vli *0,1,*16,0 # cmp 0, chop VL
+    # store VL bytes (update r12 addr)
+    sv.stbu/pi *16, 1(12)
+    sv.bc/all 0, *2, L1  # stop if cmpi failed
+L2: # zeroing loop starts here:
+    setvl 1,0,64,0,1,1 # VL,r1 = MIN(CTR,MVL=64)
+    # store VL zeros (update r12 addr)
+    sv.stbu/pi 0, 1(12)
+    sv.bc 16, *0, L2 # dec CTR by VL