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
|
diff --git a/testdata/benchmarks/yenc.go b/testdata/benchmarks/yenc.go
index b08af7225c4db65693ad41f25b319bbc7bd6ae33..00f613b3c9c93a842272f97eb5a181438c16e2ec 100644
--- a/testdata/benchmarks/yenc.go
+++ b/testdata/benchmarks/yenc.go
@@ -1,5 +1,19 @@
package yenc
+// #include <stdlib.h>
+// void yenc(unsigned char **arr) {
+// (*arr)[1] += 42;
+// switch((*arr)[1]) {
+// case 0x00:
+// case 0x0A:
+// case 0x0D:
+// case 0x3D:
+// (*arr)[0] = 0x3D;
+// (*arr)[1] += 0x40;
+// }
+// }
+import "C"
+
import (
"unsafe"
@@ -124,3 +138,14 @@ 0x2a,
0x2a,
0x2a,
}
+
+func CYEnc(input *[2]byte) {
+ cb := C.CBytes([]byte{0, (*input)[1]})
+ defer C.free(cb)
+
+ C.yenc((**C.uchar)(cb))
+
+ done := C.GoBytes(cb, 2)
+ input[0] = done[0]
+ input[1] = done[1]
+}
diff --git a/testdata/benchmarks/yenc_test.go b/testdata/benchmarks/yenc_test.go
index 8cceb3b9a4d24749ab1e53893891d1cc45105bc6..ff87e968eb1a076b548f2a34a7cc05d85a7a7484 100644
--- a/testdata/benchmarks/yenc_test.go
+++ b/testdata/benchmarks/yenc_test.go
@@ -29,6 +29,7 @@ name string
fn func(*[2]byte)
}{
{"naive-pointer", YEncPtr},
+ {"cgo", CYEnc},
}
for _, enc := range encoderPtr {
t.Run(enc.name, func(t *testing.T) {
@@ -99,6 +100,7 @@ name string
fn func(*[2]byte)
}{
{"naive-pointer", YEncPtr},
+ {"cgo", CYEnc},
}
for _, enc := range encoderPtr {
b.Run(enc.name, func(b *testing.B) {
|