diff --git a/av1/encoder/x86/error_intrin_avx2.c b/av1/encoder/x86/error_intrin_avx2.c
index 57725d1..f180c94 100644
--- a/av1/encoder/x86/error_intrin_avx2.c
+++ b/av1/encoder/x86/error_intrin_avx2.c
@@ -29,9 +29,9 @@
   }
 }
 
-static INLINE void av1_block_error_num_coeff16_avx2(const int16_t *coeff,
-                                                    const int16_t *dqcoeff,
-                                                    __m256i *sse_256) {
+static INLINE void av1_block_error_block_size16_avx2(const int16_t *coeff,
+                                                     const int16_t *dqcoeff,
+                                                     __m256i *sse_256) {
   const __m256i _coeff = _mm256_loadu_si256((const __m256i *)coeff);
   const __m256i _dqcoeff = _mm256_loadu_si256((const __m256i *)dqcoeff);
   // d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15
@@ -44,9 +44,9 @@
   *sse_256 = _mm256_unpacklo_epi32(error_hi, _mm256_setzero_si256());
 }
 
-static INLINE void av1_block_error_num_coeff32_avx2(const int16_t *coeff,
-                                                    const int16_t *dqcoeff,
-                                                    __m256i *sse_256) {
+static INLINE void av1_block_error_block_size32_avx2(const int16_t *coeff,
+                                                     const int16_t *dqcoeff,
+                                                     __m256i *sse_256) {
   const __m256i zero = _mm256_setzero_si256();
   const __m256i _coeff_0 = _mm256_loadu_si256((const __m256i *)coeff);
   const __m256i _dqcoeff_0 = _mm256_loadu_si256((const __m256i *)dqcoeff);
@@ -71,12 +71,12 @@
   *sse_256 = _mm256_add_epi64(*sse_256, sum_temp_0);
 }
 
-static INLINE void av1_block_error_num_coeff64_avx2(const int16_t *coeff,
-                                                    const int16_t *dqcoeff,
-                                                    __m256i *sse_256,
-                                                    intptr_t num_coeff) {
+static INLINE void av1_block_error_block_size64_avx2(const int16_t *coeff,
+                                                     const int16_t *dqcoeff,
+                                                     __m256i *sse_256,
+                                                     intptr_t block_size) {
   const __m256i zero = _mm256_setzero_si256();
-  for (int i = 0; i < num_coeff; i += 64) {
+  for (int i = 0; i < block_size; i += 64) {
     // Load 64 elements for coeff and dqcoeff.
     const __m256i _coeff_0 = _mm256_loadu_si256((const __m256i *)coeff);
     const __m256i _dqcoeff_0 = _mm256_loadu_si256((const __m256i *)dqcoeff);
@@ -126,17 +126,17 @@
 }
 
 int64_t av1_block_error_lp_avx2(const int16_t *coeff, const int16_t *dqcoeff,
-                                intptr_t num_coeff) {
-  assert(num_coeff % 16 == 0);
+                                intptr_t block_size) {
+  assert(block_size % 16 == 0);
   __m256i sse_256 = _mm256_setzero_si256();
   int64_t sse;
 
-  if (num_coeff == 16)
-    av1_block_error_num_coeff16_avx2(coeff, dqcoeff, &sse_256);
-  else if (num_coeff == 32)
-    av1_block_error_num_coeff32_avx2(coeff, dqcoeff, &sse_256);
+  if (block_size == 16)
+    av1_block_error_block_size16_avx2(coeff, dqcoeff, &sse_256);
+  else if (block_size == 32)
+    av1_block_error_block_size32_avx2(coeff, dqcoeff, &sse_256);
   else
-    av1_block_error_num_coeff64_avx2(coeff, dqcoeff, &sse_256, num_coeff);
+    av1_block_error_block_size64_avx2(coeff, dqcoeff, &sse_256, block_size);
 
   // Save the higher 64 bit of each 128 bit lane.
   const __m256i sse_hi = _mm256_srli_si256(sse_256, 8);
