shithub: mc

Download patch

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