From e0a2247a07ea97d25c116aaa93c31efd6d8d356a Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Sun, 29 Jul 2018 03:15:14 +0200 Subject: [PATCH] Revert "temporarily disable asm code" This reverts commit 6e28b4f91d31faa89c4f96c575a83d42c34c3937. --- transport/internet/kcp/xor.go | 2 ++ transport/internet/kcp/xor_amd64.go | 4 +++ transport/internet/kcp/xor_amd64.s | 47 +++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 transport/internet/kcp/xor_amd64.go create mode 100644 transport/internet/kcp/xor_amd64.s diff --git a/transport/internet/kcp/xor.go b/transport/internet/kcp/xor.go index b9f39f2b..6de9d295 100644 --- a/transport/internet/kcp/xor.go +++ b/transport/internet/kcp/xor.go @@ -1,3 +1,5 @@ +// +build !amd64 + package kcp // xorfwd performs XOR forwards in words, x[i] ^= x[i-4], i from 0 to len diff --git a/transport/internet/kcp/xor_amd64.go b/transport/internet/kcp/xor_amd64.go new file mode 100644 index 00000000..40d6a1be --- /dev/null +++ b/transport/internet/kcp/xor_amd64.go @@ -0,0 +1,4 @@ +package kcp + +func xorfwd(x []byte) +func xorbkd(x []byte) diff --git a/transport/internet/kcp/xor_amd64.s b/transport/internet/kcp/xor_amd64.s new file mode 100644 index 00000000..0c2759d7 --- /dev/null +++ b/transport/internet/kcp/xor_amd64.s @@ -0,0 +1,47 @@ +#include "textflag.h" + +// func xorfwd(x []byte) +TEXT ·xorfwd(SB),NOSPLIT,$0 + MOVQ x+0(FP), SI // x[i] + MOVQ x_len+8(FP), CX // x.len + MOVQ x+0(FP), DI + ADDQ $4, DI // x[i+4] + SUBQ $4, CX +xorfwdloop: + MOVL (SI), AX + XORL AX, (DI) + ADDQ $4, SI + ADDQ $4, DI + SUBQ $4, CX + + CMPL CX, $0 + JE xorfwddone + + JMP xorfwdloop +xorfwddone: + RET + +// func xorbkd(x []byte) +TEXT ·xorbkd(SB),NOSPLIT,$0 + MOVQ x+0(FP), SI + MOVQ x_len+8(FP), CX // x.len + MOVQ x+0(FP), DI + ADDQ CX, SI // x[-8] + SUBQ $8, SI + ADDQ CX, DI // x[-4] + SUBQ $4, DI + SUBQ $4, CX +xorbkdloop: + MOVL (SI), AX + XORL AX, (DI) + SUBQ $4, SI + SUBQ $4, DI + SUBQ $4, CX + + CMPL CX, $0 + JE xorbkddone + + JMP xorbkdloop + +xorbkddone: + RET