cubefs
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)
38TEXT ·galMulPpc(SB), NOFRAME|NOSPLIT, $0-96
39MOVD low+0(FP), LOW
40MOVD high+24(FP), HIGH
41MOVD in+48(FP), IN
42MOVD in_len+56(FP), LEN
43MOVD out+72(FP), OUT
44
45MOVD $16, OFFSET1
46MOVD $32, OFFSET2
47
48MOVD $·constants(SB), CONSTANTS
49LXVD2X (CONSTANTS)(R0), ROTATE
50LXVD2X (CONSTANTS)(OFFSET1), MASK
51LXVD2X (CONSTANTS)(OFFSET2), FLIP
52
53LXVD2X (LOW)(R0), X6
54LXVD2X (HIGH)(R0), X7
55VPERM X6_, V31, FLIP_, X6_
56VPERM X7_, V31, FLIP_, X7_
57
58MOVD $0, OFFSET
59
60loop:
61LXVD2X (IN)(OFFSET), MSG
62
63VSRB MSG_, ROTATE_, MSG_HI_
64VAND MSG_, MASK_, MSG_
65VPERM X6_, V31, MSG_, MSG_
66VPERM X7_, V31, MSG_HI_, MSG_HI_
67
68VXOR MSG_, MSG_HI_, MSG_
69
70STXVD2X MSG, (OUT)(OFFSET)
71
72ADD $16, OFFSET, OFFSET
73CMP LEN, OFFSET
74BGT loop
75RET
76
77// func galMulPpcXorlow, high, in, out []byte)
78TEXT ·galMulPpcXor(SB), NOFRAME|NOSPLIT, $0-96
79MOVD low+0(FP), LOW
80MOVD high+24(FP), HIGH
81MOVD in+48(FP), IN
82MOVD in_len+56(FP), LEN
83MOVD out+72(FP), OUT
84
85MOVD $16, OFFSET1
86MOVD $32, OFFSET2
87
88MOVD $·constants(SB), CONSTANTS
89LXVD2X (CONSTANTS)(R0), ROTATE
90LXVD2X (CONSTANTS)(OFFSET1), MASK
91LXVD2X (CONSTANTS)(OFFSET2), FLIP
92
93LXVD2X (LOW)(R0), X6
94LXVD2X (HIGH)(R0), X7
95VPERM X6_, V31, FLIP_, X6_
96VPERM X7_, V31, FLIP_, X7_
97
98MOVD $0, OFFSET
99
100loopXor:
101LXVD2X (IN)(OFFSET), MSG
102LXVD2X (OUT)(OFFSET), RESULT
103
104VSRB MSG_, ROTATE_, MSG_HI_
105VAND MSG_, MASK_, MSG_
106VPERM X6_, V31, MSG_, MSG_
107VPERM X7_, V31, MSG_HI_, MSG_HI_
108
109VXOR MSG_, MSG_HI_, MSG_
110VXOR MSG_, RESULT_, RESULT_
111
112STXVD2X RESULT, (OUT)(OFFSET)
113
114ADD $16, OFFSET, OFFSET
115CMP LEN, OFFSET
116BGT loopXor
117RET
118
119DATA ·constants+0x0(SB)/8, $0x0404040404040404
120DATA ·constants+0x8(SB)/8, $0x0404040404040404
121DATA ·constants+0x10(SB)/8, $0x0f0f0f0f0f0f0f0f
122DATA ·constants+0x18(SB)/8, $0x0f0f0f0f0f0f0f0f
123DATA ·constants+0x20(SB)/8, $0x0706050403020100
124DATA ·constants+0x28(SB)/8, $0x0f0e0d0c0b0a0908
125
126GLOBL ·constants(SB), 8, $48
127