ref: 340bad4b919afbeed75da577a18e4e9d760b54c0
parent: a065812f7718a33b09cb653949436dc1ab544756
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Sep 20 03:41:24 EDT 2015
Add memops for Plan 9
--- a/lib/std/bld.sub
+++ b/lib/std/bld.sub
@@ -67,6 +67,7 @@
memops.myr
memops-impl.myr
memops-impl+posixy-x64.s
+ memops-impl+plan9-x64.s
# platform specific files
env+plan9.myr
--- /dev/null
+++ b/lib/std/memops-impl+plan9-x64.s
@@ -1,0 +1,44 @@
+/*
+std.memblit : (dst : byte#, src : byte#, len : std.size -> void)
+std.memfill : (dst : byte#, val : byte, len : std.size -> void)
+*/
+TEXT std$memblit+0(SB),$0
+ CMPQ DI,SI
+ JZ .done
+ JG .fwdcpy
+ MOVQ SI,AX
+ SUBQ DI,AX
+ CMPQ AX,CX
+ JG .revcpy
+.fwdcpy:
+ MOVQ DX,CX
+ SHRQ $3,CX
+ REP; MOVSQ
+ MOVQ DX,CX
+ ANDQ $7,CX
+ REP; MOVSB
+ JMP .done
+.revcpy:
+ STD
+ MOVQ DX,CX
+ LEAQ -1(DX)(SI*1),SI
+ LEAQ -1(DX)(DI*1),DI
+ REP; MOVSB
+ CLD
+.done:
+ RET
+
+TEXT std$memfill+0(SB),$0
+ /* generate 8 bytes of fill */
+ MOVBQZX SI,BX
+ MOVQ $0x101010101010101,AX
+ IMULQ BX,AX
+
+ /* and fill */
+ MOVQ DX,CX
+ SHRQ $3,CX
+ REP; STOSQ
+ MOVQ DX,CX
+ ANDQ $7,CX
+ REP; STOSB
+ RET