cubefs

Форк
0
126 строк · 2.6 Кб
1
//+build !noasm
2
//+build !appengine
3
//+build !gccgo
4

5
// Copyright 2015, Klaus Post, see LICENSE for details.
6
// Copyright 2018, Minio, Inc.
7

8
#include "textflag.h"
9

10
#define LOW       R3
11
#define HIGH      R4
12
#define IN        R5
13
#define LEN       R6
14
#define OUT       R7
15
#define CONSTANTS R8
16
#define OFFSET    R9
17
#define OFFSET1   R10
18
#define OFFSET2   R11
19

20
#define X6        VS34
21
#define X6_       V2
22
#define X7        VS35
23
#define X7_       V3
24
#define MSG       VS36
25
#define MSG_      V4
26
#define MSG_HI    VS37
27
#define MSG_HI_   V5
28
#define RESULT    VS38
29
#define RESULT_   V6
30
#define ROTATE    VS39
31
#define ROTATE_   V7
32
#define MASK      VS40
33
#define MASK_     V8
34
#define FLIP      VS41
35
#define FLIP_     V9
36

37
// func galMulPpc(low, high, in, out []byte)
38
TEXT ·galMulPpc(SB), NOFRAME|NOSPLIT, $0-96
39
	MOVD low+0(FP), LOW
40
	MOVD high+24(FP), HIGH
41
	MOVD in+48(FP), IN
42
	MOVD in_len+56(FP), LEN
43
	MOVD out+72(FP), OUT
44

45
	MOVD $16, OFFSET1
46
	MOVD $32, OFFSET2
47

48
	MOVD   $·constants(SB), CONSTANTS
49
	LXVD2X (CONSTANTS)(R0), ROTATE
50
	LXVD2X (CONSTANTS)(OFFSET1), MASK
51
	LXVD2X (CONSTANTS)(OFFSET2), FLIP
52

53
	LXVD2X (LOW)(R0), X6
54
	LXVD2X (HIGH)(R0), X7
55
	VPERM  X6_, V31, FLIP_, X6_
56
	VPERM  X7_, V31, FLIP_, X7_
57

58
	MOVD $0, OFFSET
59

60
loop:
61
	LXVD2X (IN)(OFFSET), MSG
62

63
	VSRB  MSG_, ROTATE_, MSG_HI_
64
	VAND  MSG_, MASK_, MSG_
65
	VPERM X6_, V31, MSG_, MSG_
66
	VPERM X7_, V31, MSG_HI_, MSG_HI_
67

68
	VXOR MSG_, MSG_HI_, MSG_
69

70
	STXVD2X MSG, (OUT)(OFFSET)
71

72
	ADD $16, OFFSET, OFFSET
73
	CMP LEN, OFFSET
74
	BGT loop
75
	RET
76

77
// func galMulPpcXorlow, high, in, out []byte)
78
TEXT ·galMulPpcXor(SB), NOFRAME|NOSPLIT, $0-96
79
	MOVD low+0(FP), LOW
80
	MOVD high+24(FP), HIGH
81
	MOVD in+48(FP), IN
82
	MOVD in_len+56(FP), LEN
83
	MOVD out+72(FP), OUT
84

85
	MOVD $16, OFFSET1
86
	MOVD $32, OFFSET2
87

88
	MOVD   $·constants(SB), CONSTANTS
89
	LXVD2X (CONSTANTS)(R0), ROTATE
90
	LXVD2X (CONSTANTS)(OFFSET1), MASK
91
	LXVD2X (CONSTANTS)(OFFSET2), FLIP
92

93
	LXVD2X (LOW)(R0), X6
94
	LXVD2X (HIGH)(R0), X7
95
	VPERM  X6_, V31, FLIP_, X6_
96
	VPERM  X7_, V31, FLIP_, X7_
97

98
	MOVD $0, OFFSET
99

100
loopXor:
101
	LXVD2X (IN)(OFFSET), MSG
102
	LXVD2X (OUT)(OFFSET), RESULT
103

104
	VSRB  MSG_, ROTATE_, MSG_HI_
105
	VAND  MSG_, MASK_, MSG_
106
	VPERM X6_, V31, MSG_, MSG_
107
	VPERM X7_, V31, MSG_HI_, MSG_HI_
108

109
	VXOR MSG_, MSG_HI_, MSG_
110
	VXOR MSG_, RESULT_, RESULT_
111

112
	STXVD2X RESULT, (OUT)(OFFSET)
113

114
	ADD $16, OFFSET, OFFSET
115
	CMP LEN, OFFSET
116
	BGT loopXor
117
	RET
118

119
DATA ·constants+0x0(SB)/8, $0x0404040404040404
120
DATA ·constants+0x8(SB)/8, $0x0404040404040404
121
DATA ·constants+0x10(SB)/8, $0x0f0f0f0f0f0f0f0f
122
DATA ·constants+0x18(SB)/8, $0x0f0f0f0f0f0f0f0f
123
DATA ·constants+0x20(SB)/8, $0x0706050403020100
124
DATA ·constants+0x28(SB)/8, $0x0f0e0d0c0b0a0908
125

126
GLOBL ·constants(SB), 8, $48
127

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.