gmsm/internal/subtle/xor_riscv64.s

64 lines
975 B
ArmAsm
Raw Normal View History

2024-09-02 13:13:16 +08:00
// Copyright 2024 Sun Yimin. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
//go:build !purego
#include "textflag.h"
// func xorBytes(dst, a, b *byte, n int)
TEXT ·xorBytes(SB), NOSPLIT|NOFRAME, $0
MOV dst+0(FP), X5
MOV a+8(FP), X6
MOV b+16(FP), X7
MOV n+24(FP), X8
MOV $8, X9
BLTU X8, X9, tail
loop:
MOV (X6), X10
MOV (X7), X11
XOR X10, X11, X10
MOV X10, (X5)
ADD $8, X5
ADD $8, X6
ADD $8, X7
SUB $8, X8
BGEU X8, X9, loop
tail:
BEQZ X8, done
MOV $4, X9
BLTU X8, X9, less_than4
MOVWU (X6), X10
MOVWU (X7), X11
XOR X10, X11, X10
MOVW X10, (X5)
ADD $4, X5
ADD $4, X6
ADD $4, X7
SUB $4, X8
less_than4:
MOV $2, X9
BLTU X8, X9, less_than2
MOVHU (X6), X10
MOVHU (X7), X11
XOR X10, X11, X10
2024-09-02 13:18:08 +08:00
MOVH X10, (X5)
2024-09-02 13:13:16 +08:00
ADD $2, X5
ADD $2, X6
ADD $2, X7
SUB $2, X8
less_than2:
BEQZ X8, done
MOVBU (X6), X10
MOVBU (X7), X11
XOR X10, X11, X10
2024-09-02 13:18:08 +08:00
MOVB X10, (X5)
2024-09-02 13:13:16 +08:00
done:
RET