Skip to content

Commit 321fbe4

Browse files
authored
[perf] Do not make compiler life harder (#164)
1 parent 557a7af commit 321fbe4

File tree

1 file changed

+20
-22
lines changed

1 file changed

+20
-22
lines changed

src/bufferutil.c

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,23 @@ napi_value Mask(napi_env env, napi_callback_info info) {
5959
// Apply 64 bit mask in 8 byte chunks.
6060
//
6161
uint32_t loop = length / 8;
62-
uint64_t *pMask8 = (uint64_t *)maskAlignedArray;
63-
64-
while (loop--) {
65-
uint64_t *pFrom8 = (uint64_t *)source;
66-
uint64_t *pTo8 = (uint64_t *)destination;
67-
*pTo8 = *pFrom8 ^ *pMask8;
68-
source += 8;
69-
destination += 8;
62+
uint64_t mask8 = ((uint64_t *)maskAlignedArray)[0];
63+
uint64_t *pFrom8 = (uint64_t *)source;
64+
uint64_t *pTo8 = (uint64_t *)destination;
65+
66+
for (uint32_t i = 0; i < loop; i++) {
67+
pTo8[i] = pFrom8[i] ^ mask8;
7068
}
7169

7270
//
7371
// Apply mask to remaining data.
7472
//
75-
uint8_t *pmaskAlignedArray = maskAlignedArray;
76-
7773
length %= 8;
78-
while (length--) {
79-
*destination++ = *source++ ^ *pmaskAlignedArray++;
74+
source += 8 * loop;
75+
destination += 8 * loop;
76+
77+
for (uint32_t i = 0; i < length; i++) {
78+
destination[i] = source[i] ^ maskAlignedArray[i];
8079
}
8180

8281
return NULL;
@@ -91,8 +90,8 @@ napi_value Unmask(napi_env env, napi_callback_info info) {
9190
assert(status == napi_ok);
9291

9392
uint8_t *source;
94-
size_t length;
9593
uint8_t *mask;
94+
size_t length;
9695

9796
status = napi_get_buffer_info(env, argv[0], (void **)&source, &length);
9897
assert(status == napi_ok);
@@ -127,22 +126,21 @@ napi_value Unmask(napi_env env, napi_callback_info info) {
127126
// Apply 64 bit mask in 8 byte chunks.
128127
//
129128
uint32_t loop = length / 8;
130-
uint64_t *pMask8 = (uint64_t *)maskAlignedArray;
129+
uint64_t mask8 = ((uint64_t *)maskAlignedArray)[0];
130+
uint64_t *pSource8 = (uint64_t *)source;
131131

132-
while (loop--) {
133-
uint64_t *pSource8 = (uint64_t *)source;
134-
*pSource8 ^= *pMask8;
135-
source += 8;
132+
for (uint32_t i = 0; i < loop; i++) {
133+
pSource8[i] ^= mask8;
136134
}
137135

138136
//
139137
// Apply mask to remaining data.
140138
//
141-
uint8_t *pmaskAlignedArray = maskAlignedArray;
142-
143139
length %= 8;
144-
while (length--) {
145-
*source++ ^= *pmaskAlignedArray++;
140+
source += 8 * loop;
141+
142+
for (uint32_t i = 0; i < length; i++) {
143+
source[i] ^= maskAlignedArray[i];
146144
}
147145

148146
return NULL;

0 commit comments

Comments
 (0)