Commit ef736e5faaf011ca6eed7898d9e83a13cd8b230b

Parents: e1ff8534964d31811181ca97f12a5ee94a073850

From: Moritz Poldrack <git@moritz.sh>
Date: Sun Nov 27 23:26:46 2022 +0700

attempt to get avo to work

		

Stats

go.mod +13/-2
go.sum +43/-2
testdata/benchmarks/asm.go +61/-0

Changeset

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
diff --git a/go.mod b/go.mod
index 2f0f04a489def28e7dcec6d3f56bc5968ed9b255..ee11daf5f50ceeaf1c270fd50f63d26fd98eabf6 100644
--- a/go.mod
+++ b/go.mod
@@ -1,5 +1,16 @@
 module mpldr.codes/yenc
 
-go 1.16
+go 1.17
 
-require github.com/yesuu/simd v0.0.0-20170211141659-3bd2f7eb4d94 // indirect
+require (
+	git.sr.ht/~poldi1405/glog v1.0.0
+	github.com/dustin/go-humanize v1.0.0
+)
+
+require (
+	git.sr.ht/~poldi1405/go-ansi v1.4.1 // indirect
+	github.com/mmcloughlin/avo v0.5.0 // indirect
+	golang.org/x/mod v0.6.0 // indirect
+	golang.org/x/sys v0.1.0 // indirect
+	golang.org/x/tools v0.2.0 // indirect
+)
diff --git a/go.sum b/go.sum
index c3d5144a83b92d3cb9429caf5176e69ff108a494..b1e62865c6e09e562b84b42214d0fef6418e0b45 100644
--- a/go.sum
+++ b/go.sum
@@ -1,2 +1,43 @@
-github.com/yesuu/simd v0.0.0-20170211141659-3bd2f7eb4d94 h1:EpeLHaKDpirS2DHEdn/5KWq88LRrSQ36yMtFBo8yzc0=
-github.com/yesuu/simd v0.0.0-20170211141659-3bd2f7eb4d94/go.mod h1:yp/8QThbBFNKDA0nZKkyLPPZ/o3UwdbsnKH3mVpmJ94=
+git.sr.ht/~poldi1405/glog v1.0.0 h1:nrIhLr7Y3V1mvfmDT59H1fo0cmUumVQHHd3sjp0p62M=
+git.sr.ht/~poldi1405/glog v1.0.0/go.mod h1:1EruLJndk4xogOSzbLIrpbW4bdzB/vA8DX+Rr0z76Vo=
+git.sr.ht/~poldi1405/go-ansi v1.4.1 h1:Lo/Z8/ZUHbVpTGbg2gicvcb1upzhgGOpu7L0hZe3lU0=
+git.sr.ht/~poldi1405/go-ansi v1.4.1/go.mod h1:CUyHf6iVnIVCN0Nv7616s4wxnOF3gFAhFLrsMstyg3Q=
+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/mmcloughlin/avo v0.5.0 h1:nAco9/aI9Lg2kiuROBY6BhCI/z0t5jEvJfjWbL8qXLU=
+github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I=
+golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
+golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE=
+golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
diff --git a/testdata/benchmarks/asm.go b/testdata/benchmarks/asm.go
new file mode 100644
index 0000000000000000000000000000000000000000..3fe5df63fff790a5a4c67efd2621e59f02cfc563
--- /dev/null
+++ b/testdata/benchmarks/asm.go
@@ -0,0 +1,61 @@
+//go:build ignore
+
+package main
+
+import (
+	"fmt"
+
+	. "github.com/mmcloughlin/avo/build"
+	. "github.com/mmcloughlin/avo/operand"
+)
+
+func main() {
+	/*data42 := GLOBL("consts", RODATA|NOPTR)
+	for i := 0; i < 64; i++ {
+		k := byte(42)
+		DATA(i, k)
+	}*/
+
+	TEXT("AssemblerAVX512", NOSPLIT, "func(input *[64]byte) []byte")
+	Doc("yenc encode using AVX512 x86 assembler instructions")
+
+	in := Mem{Base: Load(Param("input"), GP64())}
+
+	b := GP8()
+	MOVB(U8(42), b)
+
+	Doc("create vector with 42 in all slots")
+	mask := ZMM()
+	MOVB(b, mask.AsX())
+	VPBROADCASTB(mask.AsX(), mask)
+
+	VPADDB(in, in)
+
+	returnMask := K()
+
+	for _, i := range []int{0, 10, 13, 61} {
+		Doc(fmt.Sprintf("check if %x-byte is present and mark in mask", i))
+		VPCMPUB(returnMask, in, mask)
+	}
+
+	Doc("zero out escapeChar and set to 61")
+	ADDB(U8(61), b)
+
+	// maskVal := GP8()
+	// outPtr := Load(Param("output").Base(), GP64())
+
+	returnByte := 0 // the byte index of the returnvalue
+	for i := 0; i < 64; i++ {
+		Doc(fmt.Sprintf("adding byte %d to returnvalue", i))
+
+		/*if returnMask.Index(i) == 61 {
+			Store(escapeChar, ReturnIndex(0).Index(returnByte))
+			returnByte++
+		}*/
+		Store(Load(Param("input").Index(i), GP8()), ReturnIndex(0).Index(returnByte))
+		returnByte++
+	}
+	RET()
+
+	Generate()
+}