mirror of
https://github.com/fumiama/unibase2n.git
synced 2026-06-10 11:40:25 +08:00
add amd64 asm ver enc16blk1
This commit is contained in:
66
encode_amd64.s
Normal file
66
encode_amd64.s
Normal file
@@ -0,0 +1,66 @@
|
||||
//go:build amd64
|
||||
// +build amd64
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
// enc16blk1(mask uint16, in, out []byte)
|
||||
// for bit 1 (actual enc128blk1)
|
||||
TEXT ·enc16blk1(SB), NOSPLIT, $0-56
|
||||
// create mask
|
||||
MOVQ ·mask+0(FP), BX
|
||||
ANDQ $0xffff, BX
|
||||
BSWAPQ BX
|
||||
MOVQ BX, AX
|
||||
SHRQ $16, AX
|
||||
ORQ AX, BX
|
||||
SHRQ $16, AX
|
||||
ORQ AX, BX
|
||||
SHRQ $16, AX
|
||||
ORQ AX, BX
|
||||
// load source addr
|
||||
MOVQ ·in+8(FP), SI
|
||||
// load source len
|
||||
MOVQ ·inlen+16(FP), CX
|
||||
// load dest addr
|
||||
MOVQ ·out+32(FP), DI
|
||||
// go forward
|
||||
CLD
|
||||
lop:
|
||||
LODSB
|
||||
// 8 -> 64
|
||||
XORQ DX, DX
|
||||
SHLB $1, AX
|
||||
SETCS DX
|
||||
SHLQ $16, DX
|
||||
SHLB $1, AX
|
||||
SETCS DX
|
||||
SHLQ $16, DX
|
||||
SHLB $1, AX
|
||||
SETCS DX
|
||||
SHLQ $16, DX
|
||||
SHLB $1, AX
|
||||
SETCS DX
|
||||
// add mask
|
||||
MOVQ AX, R8
|
||||
LEAQ 0(DX)(BX*1), AX
|
||||
BSWAPQ AX
|
||||
STOSQ
|
||||
// 8 -> 64
|
||||
XORQ AX, AX
|
||||
SHLB $1, R8
|
||||
SETCS AX
|
||||
SHLQ $16, AX
|
||||
SHLB $1, R8
|
||||
SETCS AX
|
||||
SHLQ $16, AX
|
||||
SHLB $1, R8
|
||||
SETCS AX
|
||||
SHLQ $16, AX
|
||||
SHLB $1, R8
|
||||
SETCS AX
|
||||
// add mask
|
||||
ADDQ BX, AX
|
||||
BSWAPQ AX
|
||||
STOSQ
|
||||
LOOP lop
|
||||
RET
|
||||
Reference in New Issue
Block a user