Skip to content

Commit 5ddfabc

Browse files
author
Kaloyan Chehlarski
committed
FIXUP: Legalize SSE/NEON intrinsics
The convolver_neon.cc file contains several usages of illegal binary operators that somehow work for Clang (but not MSVC). Task-number: QTBUG-129970 Change-Id: I5b6fc18914b5edd09ae6ec54822092f0f0bf8a44 Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/605963 Reviewed-by: Allan Sandfeld Jensen <[email protected]>
1 parent b7c46a2 commit 5ddfabc

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

chromium/skia/ext/convolver_neon.cc

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ void ConvolveHorizontally_Neon(const unsigned char* src_data,
7171
int remainder = filter_length & 3;
7272
if (remainder) {
7373
int remainder_offset = (filter_offset + filter_length - remainder) * 4;
74-
accum +=
75-
AccumRemainder(src_data + remainder_offset, filter_values, remainder);
74+
accum = vaddq_s32(accum,
75+
AccumRemainder(src_data + remainder_offset, filter_values, remainder));
7676
}
7777

7878
// Bring this value back in range. All of the filter scaling factors
@@ -128,10 +128,10 @@ void Convolve4RowsHorizontally_Neon(const unsigned char* src_data[4],
128128
return accum;
129129
};
130130

131-
accum0 += iteration(src_data[0] + start);
132-
accum1 += iteration(src_data[1] + start);
133-
accum2 += iteration(src_data[2] + start);
134-
accum3 += iteration(src_data[3] + start);
131+
accum0 = vaddq_s32(accum0, iteration(src_data[0] + start));
132+
accum1 = vaddq_s32(accum1, iteration(src_data[1] + start));
133+
accum2 = vaddq_s32(accum2, iteration(src_data[2] + start));
134+
accum3 = vaddq_s32(accum3, iteration(src_data[3] + start));
135135

136136
start += 16;
137137
filter_values += 4;
@@ -140,14 +140,14 @@ void Convolve4RowsHorizontally_Neon(const unsigned char* src_data[4],
140140
int remainder = filter_length & 3;
141141
if (remainder) {
142142
int remainder_offset = (filter_offset + filter_length - remainder) * 4;
143-
accum0 += AccumRemainder(src_data[0] + remainder_offset, filter_values,
144-
remainder);
145-
accum1 += AccumRemainder(src_data[1] + remainder_offset, filter_values,
146-
remainder);
147-
accum2 += AccumRemainder(src_data[2] + remainder_offset, filter_values,
148-
remainder);
149-
accum3 += AccumRemainder(src_data[3] + remainder_offset, filter_values,
150-
remainder);
143+
accum0 = vaddq_s32(accum0, AccumRemainder(src_data[0] + remainder_offset, filter_values,
144+
remainder));
145+
accum1 = vaddq_s32(accum1, AccumRemainder(src_data[1] + remainder_offset, filter_values,
146+
remainder));
147+
accum2 = vaddq_s32(accum2, AccumRemainder(src_data[2] + remainder_offset, filter_values,
148+
remainder));
149+
accum3 = vaddq_s32(accum3, AccumRemainder(src_data[3] + remainder_offset, filter_values,
150+
remainder));
151151
}
152152

153153
auto pack_result = [](int32x4_t accum) {
@@ -252,8 +252,8 @@ void ConvolveVertically_Neon(const ConvolutionFilter1D::Fixed* filter_values,
252252
accum8 = vmaxq_u8(b, accum8);
253253
} else {
254254
// Set value of alpha channels to 0xFF.
255-
accum8 = vreinterpretq_u8_u32(vreinterpretq_u32_u8(accum8) |
256-
vdupq_n_u32(0xFF000000));
255+
accum8 = vreinterpretq_u8_u32(vorrq_u8(vreinterpretq_u32_u8(accum8),
256+
vdupq_n_u32(0xFF000000)));
257257
}
258258

259259
// Store the convolution result (16 bytes) and advance the pixel pointers.
@@ -313,8 +313,8 @@ void ConvolveVertically_Neon(const ConvolutionFilter1D::Fixed* filter_values,
313313
accum8 = vmaxq_u8(b, accum8);
314314
} else {
315315
// Set value of alpha channels to 0xFF.
316-
accum8 = vreinterpretq_u8_u32(vreinterpretq_u32_u8(accum8) |
317-
vdupq_n_u32(0xFF000000));
316+
accum8 = vreinterpretq_u8_u32(vorrq_u8(vreinterpretq_u32_u8(accum8),
317+
vdupq_n_u32(0xFF000000)));
318318
}
319319

320320
switch (remainder) {

0 commit comments

Comments
 (0)