| Index: third_party/libjpeg_turbo/jchuff.c
 | 
| ===================================================================
 | 
| --- third_party/libjpeg_turbo/jchuff.c	(revision 95020)
 | 
| +++ third_party/libjpeg_turbo/jchuff.c	(working copy)
 | 
| @@ -2,6 +2,7 @@
 | 
|   * jchuff.c
 | 
|   *
 | 
|   * Copyright (C) 1991-1997, Thomas G. Lane.
 | 
| + * Copyright (C) 2009-2011, D. R. Commander.
 | 
|   * This file is part of the Independent JPEG Group's software.
 | 
|   * For conditions of distribution and use, see the accompanying README file.
 | 
|   *
 | 
| @@ -14,34 +15,20 @@
 | 
|   * permanent JPEG objects only upon successful completion of an MCU.
 | 
|   */
 | 
|  
 | 
| -/* Modifications:
 | 
| - * Copyright (C)2007 Sun Microsystems, Inc.
 | 
| - * Copyright (C)2009 D. R. Commander
 | 
| - *
 | 
| - * This library is free software and may be redistributed and/or modified under
 | 
| - * the terms of the wxWindows Library License, Version 3.1 or (at your option)
 | 
| - * any later version.  The full license is in the LICENSE.txt file included
 | 
| - * with this distribution.
 | 
| - *
 | 
| - * This library is distributed in the hope that it will be useful,
 | 
| - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
| - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
| - * wxWindows Library License for more details.
 | 
| - */
 | 
| -
 | 
|  #define JPEG_INTERNALS
 | 
|  #include "jinclude.h"
 | 
|  #include "jpeglib.h"
 | 
|  #include "jchuff.h"		/* Declarations shared with jcphuff.c */
 | 
|  #include <limits.h>
 | 
|  
 | 
| -static unsigned char jpeg_first_bit_table[65536];
 | 
| -int jpeg_first_bit_table_init=0;
 | 
| +static unsigned char jpeg_nbits_table[65536];
 | 
| +static int jpeg_nbits_table_init = 0;
 | 
|  
 | 
|  #ifndef min
 | 
|   #define min(a,b) ((a)<(b)?(a):(b))
 | 
|  #endif
 | 
|  
 | 
| +
 | 
|  /* Expanded entropy encoder object for Huffman encoding.
 | 
|   *
 | 
|   * The savable_state subrecord contains fields that change within an MCU,
 | 
| @@ -181,7 +168,6 @@
 | 
|    }
 | 
|  
 | 
|    /* Initialize bit buffer to empty */
 | 
| -
 | 
|    entropy->saved.put_buffer = 0;
 | 
|    entropy->saved.put_bits = 0;
 | 
|  
 | 
| @@ -285,13 +271,13 @@
 | 
|      dtbl->ehufsi[i] = huffsize[p];
 | 
|    }
 | 
|  
 | 
| -  if(!jpeg_first_bit_table_init) {
 | 
| +  if(!jpeg_nbits_table_init) {
 | 
|      for(i = 0; i < 65536; i++) {
 | 
| -      int bit = 0, val = i;
 | 
| -      while (val) {val >>= 1;  bit++;}
 | 
| -      jpeg_first_bit_table[i] = bit;
 | 
| +      int nbits = 0, temp = i;
 | 
| +      while (temp) {temp >>= 1;  nbits++;}
 | 
| +      jpeg_nbits_table[i] = nbits;
 | 
|      }
 | 
| -    jpeg_first_bit_table_init = 1;
 | 
| +    jpeg_nbits_table_init = 1;
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -325,170 +311,123 @@
 | 
|  
 | 
|  /* Outputting bits to the file */
 | 
|  
 | 
| -/* Only the right 24 bits of put_buffer are used; the valid bits are
 | 
| - * left-justified in this part.  At most 16 bits can be passed to emit_bits
 | 
| - * in one call, and we never retain more than 7 bits in put_buffer
 | 
| - * between calls, so 24 bits are sufficient.
 | 
| +/* These macros perform the same task as the emit_bits() function in the
 | 
| + * original libjpeg code.  In addition to reducing overhead by explicitly
 | 
| + * inlining the code, additional performance is achieved by taking into
 | 
| + * account the size of the bit buffer and waiting until it is almost full
 | 
| + * before emptying it.  This mostly benefits 64-bit platforms, since 6
 | 
| + * bytes can be stored in a 64-bit bit buffer before it has to be emptied.
 | 
|   */
 | 
|  
 | 
| -/***************************************************************/
 | 
| -
 | 
| -#define EMIT_BYTE() {                                           \
 | 
| -  if (0xFF == (*buffer++ =  (unsigned char)(put_buffer >> (put_bits -= 8))))  \
 | 
| -    *buffer++ = 0;                                              \
 | 
| +#define EMIT_BYTE() { \
 | 
| +  JOCTET c; \
 | 
| +  put_bits -= 8; \
 | 
| +  c = (JOCTET)GETJOCTET(put_buffer >> put_bits); \
 | 
| +  *buffer++ = c; \
 | 
| +  if (c == 0xFF)  /* need to stuff a zero byte? */ \
 | 
| +    *buffer++ = 0; \
 | 
|   }
 | 
|  
 | 
| -/***************************************************************/
 | 
| +#define PUT_BITS(code, size) { \
 | 
| +  put_bits += size; \
 | 
| +  put_buffer = (put_buffer << size) | code; \
 | 
| +}
 | 
|  
 | 
| -#define DUMP_BITS_(code, size) {                                \
 | 
| -  put_bits += size;                                             \
 | 
| -  put_buffer = (put_buffer << size) | code;                     \
 | 
| -  if (put_bits > 7)                                             \
 | 
| -    while(put_bits > 7)                                         \
 | 
| -      EMIT_BYTE()                                               \
 | 
| - }
 | 
| -
 | 
| -/***************************************************************/
 | 
| -
 | 
| -#define CHECKBUF15() {                                          \
 | 
| -  if (put_bits > 15) {                                          \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -  }                                                             \
 | 
| +#define CHECKBUF15() { \
 | 
| +  if (put_bits > 15) { \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +  } \
 | 
|  }
 | 
|  
 | 
| -#define CHECKBUF47() {                                          \
 | 
| -  if (put_bits > 47) {                                          \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -  }                                                             \
 | 
| +#define CHECKBUF31() { \
 | 
| +  if (put_bits > 31) { \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +  } \
 | 
|  }
 | 
|  
 | 
| -#define CHECKBUF31() {                                          \
 | 
| -  if (put_bits > 31) {                                          \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -    EMIT_BYTE()                                                 \
 | 
| -  }                                                             \
 | 
| +#define CHECKBUF47() { \
 | 
| +  if (put_bits > 47) { \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +    EMIT_BYTE() \
 | 
| +  } \
 | 
|  }
 | 
|  
 | 
| -/***************************************************************/
 | 
| -
 | 
| -#define DUMP_BITS_NOCHECK(code, size) {                         \
 | 
| -  put_bits += size;                                             \
 | 
| -  put_buffer = (put_buffer << size) | code;                     \
 | 
| - }
 | 
| -
 | 
|  #if __WORDSIZE==64 || defined(_WIN64)
 | 
|  
 | 
| -#define DUMP_BITS(code, size) {                                 \
 | 
| -  CHECKBUF47()                                                  \
 | 
| -  put_bits += size;                                             \
 | 
| -  put_buffer = (put_buffer << size) | code;                     \
 | 
| +#define EMIT_BITS(code, size) { \
 | 
| +  CHECKBUF47() \
 | 
| +  PUT_BITS(code, size) \
 | 
| +}
 | 
| +
 | 
| +#define EMIT_CODE(code, size) { \
 | 
| +  temp2 &= (((INT32) 1)<<nbits) - 1; \
 | 
| +  CHECKBUF31() \
 | 
| +  PUT_BITS(code, size) \
 | 
| +  PUT_BITS(temp2, nbits) \
 | 
|   }
 | 
|  
 | 
|  #else
 | 
|  
 | 
| -#define DUMP_BITS(code, size) {                                 \
 | 
| -  put_bits += size;                                             \
 | 
| -  put_buffer = (put_buffer << size) | code;                     \
 | 
| -  CHECKBUF15()                                                  \
 | 
| - }
 | 
| +#define EMIT_BITS(code, size) { \
 | 
| +  PUT_BITS(code, size) \
 | 
| +  CHECKBUF15() \
 | 
| +}
 | 
|  
 | 
| -#endif
 | 
| -
 | 
| -/***************************************************************/
 | 
| -
 | 
| -#define DUMP_SINGLE_VALUE(ht, codevalue) { \
 | 
| -  size = ht->ehufsi[codevalue];            \
 | 
| -  code = ht->ehufco[codevalue];            \
 | 
| -                                           \
 | 
| -  DUMP_BITS(code, size)                    \
 | 
| +#define EMIT_CODE(code, size) { \
 | 
| +  temp2 &= (((INT32) 1)<<nbits) - 1; \
 | 
| +  PUT_BITS(code, size) \
 | 
| +  CHECKBUF15() \
 | 
| +  PUT_BITS(temp2, nbits) \
 | 
| +  CHECKBUF15() \
 | 
|   }
 | 
|  
 | 
| -/***************************************************************/
 | 
| -
 | 
| -#define DUMP_VALUE_SLOW(ht, codevalue, t, nbits) { \
 | 
| -  size = ht->ehufsi[codevalue];               \
 | 
| -  code = ht->ehufco[codevalue];               \
 | 
| -  t &= ~(-1 << nbits);                        \
 | 
| -  DUMP_BITS_NOCHECK(code, size)               \
 | 
| -  CHECKBUF15()                                \
 | 
| -  DUMP_BITS_NOCHECK(t, nbits)                 \
 | 
| -  CHECKBUF15()                                \
 | 
| - }
 | 
| -
 | 
| -int _max=0;
 | 
| -
 | 
| -#if __WORDSIZE==64 || defined(_WIN64)
 | 
| -
 | 
| -#define DUMP_VALUE(ht, codevalue, t, nbits) { \
 | 
| -  size = ht->ehufsi[codevalue];               \
 | 
| -  code = ht->ehufco[codevalue];               \
 | 
| -  t &= ~(-1 << nbits);                        \
 | 
| -  CHECKBUF31()                                \
 | 
| -  DUMP_BITS_NOCHECK(code, size)               \
 | 
| -  DUMP_BITS_NOCHECK(t, nbits)                 \
 | 
| - }
 | 
| -
 | 
| -#else
 | 
| -
 | 
| -#define DUMP_VALUE(ht, codevalue, t, nbits) { \
 | 
| -  size = ht->ehufsi[codevalue];               \
 | 
| -  code = ht->ehufco[codevalue];               \
 | 
| -  t &= ~(-1 << nbits);                        \
 | 
| -  DUMP_BITS_NOCHECK(code, size)               \
 | 
| -  CHECKBUF15()                                \
 | 
| -  DUMP_BITS_NOCHECK(t, nbits)                 \
 | 
| -  CHECKBUF15()                                \
 | 
| - }
 | 
| -
 | 
|  #endif
 | 
|  
 | 
| -/***************************************************************/
 | 
|  
 | 
|  #define BUFSIZE (DCTSIZE2 * 2)
 | 
|  
 | 
| -#define LOAD_BUFFER() {                                           \
 | 
| -  if (state->free_in_buffer < BUFSIZE) {                          \
 | 
| -    localbuf = 1;                                                 \
 | 
| -    buffer = _buffer;                                             \
 | 
| -  }                                                               \
 | 
| -  else buffer = state->next_output_byte;                          \
 | 
| +#define LOAD_BUFFER() { \
 | 
| +  if (state->free_in_buffer < BUFSIZE) { \
 | 
| +    localbuf = 1; \
 | 
| +    buffer = _buffer; \
 | 
| +  } \
 | 
| +  else buffer = state->next_output_byte; \
 | 
|   }
 | 
|  
 | 
| -#define STORE_BUFFER() {                                          \
 | 
| -  if (localbuf) {                                                 \
 | 
| -    bytes = buffer - _buffer;                                     \
 | 
| -    buffer = _buffer;                                             \
 | 
| -    while (bytes > 0) {                                           \
 | 
| -      bytestocopy = min(bytes, state->free_in_buffer);            \
 | 
| -      MEMCOPY(state->next_output_byte, buffer, bytestocopy);      \
 | 
| -      state->next_output_byte += bytestocopy;                     \
 | 
| -      buffer += bytestocopy;                                      \
 | 
| -      state->free_in_buffer -= bytestocopy;                       \
 | 
| -      if (state->free_in_buffer == 0)                             \
 | 
| -        if (! dump_buffer(state)) return FALSE;                   \
 | 
| -      bytes -= bytestocopy;                                       \
 | 
| -    }                                                             \
 | 
| -  }                                                               \
 | 
| -  else {                                                          \
 | 
| -    state->free_in_buffer -= (buffer - state->next_output_byte);  \
 | 
| -    state->next_output_byte = buffer;                             \
 | 
| -  }                                                               \
 | 
| +#define STORE_BUFFER() { \
 | 
| +  if (localbuf) { \
 | 
| +    bytes = buffer - _buffer; \
 | 
| +    buffer = _buffer; \
 | 
| +    while (bytes > 0) { \
 | 
| +      bytestocopy = min(bytes, state->free_in_buffer); \
 | 
| +      MEMCOPY(state->next_output_byte, buffer, bytestocopy); \
 | 
| +      state->next_output_byte += bytestocopy; \
 | 
| +      buffer += bytestocopy; \
 | 
| +      state->free_in_buffer -= bytestocopy; \
 | 
| +      if (state->free_in_buffer == 0) \
 | 
| +        if (! dump_buffer(state)) return FALSE; \
 | 
| +      bytes -= bytestocopy; \
 | 
| +    } \
 | 
| +  } \
 | 
| +  else { \
 | 
| +    state->free_in_buffer -= (buffer - state->next_output_byte); \
 | 
| +    state->next_output_byte = buffer; \
 | 
| +  } \
 | 
|   }
 | 
|  
 | 
| -/***************************************************************/
 | 
|  
 | 
|  LOCAL(boolean)
 | 
|  flush_bits (working_state * state)
 | 
|  {
 | 
| -  unsigned char _buffer[BUFSIZE], *buffer;
 | 
| +  JOCTET _buffer[BUFSIZE], *buffer;
 | 
|    size_t put_buffer;  int put_bits;
 | 
|    size_t bytes, bytestocopy;  int localbuf = 0;
 | 
|  
 | 
| @@ -496,7 +435,9 @@
 | 
|    put_bits = state->cur.put_bits;
 | 
|    LOAD_BUFFER()
 | 
|  
 | 
| -  DUMP_BITS_(0x7F, 7)
 | 
| +  /* fill any partial byte with ones */
 | 
| +  PUT_BITS(0x7F, 7)
 | 
| +  while (put_bits >= 8) EMIT_BYTE()
 | 
|  
 | 
|    state->cur.put_buffer = 0;	/* and reset bit-buffer to empty */
 | 
|    state->cur.put_bits = 0;
 | 
| @@ -505,16 +446,17 @@
 | 
|    return TRUE;
 | 
|  }
 | 
|  
 | 
| +
 | 
|  /* Encode a single block's worth of coefficients */
 | 
|  
 | 
|  LOCAL(boolean)
 | 
|  encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val,
 | 
|  		  c_derived_tbl *dctbl, c_derived_tbl *actbl)
 | 
|  {
 | 
| -  int temp, temp2;
 | 
| +  int temp, temp2, temp3;
 | 
|    int nbits;
 | 
| -  int r, sflag, size, code;
 | 
| -  unsigned char _buffer[BUFSIZE], *buffer;
 | 
| +  int r, code, size;
 | 
| +  JOCTET _buffer[BUFSIZE], *buffer;
 | 
|    size_t put_buffer;  int put_bits;
 | 
|    int code_0xf0 = actbl->ehufco[0xf0], size_0xf0 = actbl->ehufsi[0xf0];
 | 
|    size_t bytes, bytestocopy;  int localbuf = 0;
 | 
| @@ -527,50 +469,88 @@
 | 
|    
 | 
|    temp = temp2 = block[0] - last_dc_val;
 | 
|  
 | 
| -  sflag = temp >> 31;
 | 
| -  temp -= ((temp + temp) & sflag);
 | 
| -  temp2 += sflag;
 | 
| -  nbits = jpeg_first_bit_table[temp];
 | 
| -  DUMP_VALUE_SLOW(dctbl, nbits, temp2, nbits)
 | 
| + /* This is a well-known technique for obtaining the absolute value without a
 | 
| +  * branch.  It is derived from an assembly language technique presented in
 | 
| +  * "How to Optimize for the Pentium Processors", Copyright (c) 1996, 1997 by
 | 
| +  * Agner Fog.
 | 
| +  */
 | 
| +  temp3 = temp >> (CHAR_BIT * sizeof(int) - 1);
 | 
| +  temp ^= temp3;
 | 
| +  temp -= temp3;
 | 
|  
 | 
| +  /* For a negative input, want temp2 = bitwise complement of abs(input) */
 | 
| +  /* This code assumes we are on a two's complement machine */
 | 
| +  temp2 += temp3;
 | 
| +
 | 
| +  /* Find the number of bits needed for the magnitude of the coefficient */
 | 
| +  nbits = jpeg_nbits_table[temp];
 | 
| +
 | 
| +  /* Emit the Huffman-coded symbol for the number of bits */
 | 
| +  code = dctbl->ehufco[nbits];
 | 
| +  size = dctbl->ehufsi[nbits];
 | 
| +  PUT_BITS(code, size)
 | 
| +  CHECKBUF15()
 | 
| +
 | 
| +  /* Mask off any extra bits in code */
 | 
| +  temp2 &= (((INT32) 1)<<nbits) - 1;
 | 
| +
 | 
| +  /* Emit that number of bits of the value, if positive, */
 | 
| +  /* or the complement of its magnitude, if negative. */
 | 
| +  PUT_BITS(temp2, nbits)
 | 
| +  CHECKBUF15()
 | 
| +
 | 
|    /* Encode the AC coefficients per section F.1.2.2 */
 | 
|    
 | 
|    r = 0;			/* r = run length of zeros */
 | 
|  
 | 
| -#define innerloop(order) {  \
 | 
| -  temp2  = *(JCOEF*)((unsigned char*)block + order);  \
 | 
| -  if(temp2 == 0) r++;  \
 | 
| -  else {  \
 | 
| -    temp = (JCOEF)temp2;  \
 | 
| -    sflag = temp >> 31;  \
 | 
| -    temp = (temp ^ sflag) - sflag;  \
 | 
| -    temp2 += sflag;  \
 | 
| -    nbits = jpeg_first_bit_table[temp];  \
 | 
| -    for(; r > 15; r -= 16) DUMP_BITS(code_0xf0, size_0xf0)  \
 | 
| -    sflag = (r << 4) + nbits;  \
 | 
| -    DUMP_VALUE(actbl, sflag, temp2, nbits)  \
 | 
| +/* Manually unroll the k loop to eliminate the counter variable.  This
 | 
| + * improves performance greatly on systems with a limited number of
 | 
| + * registers (such as x86.)
 | 
| + */
 | 
| +#define kloop(jpeg_natural_order_of_k) {  \
 | 
| +  if ((temp = block[jpeg_natural_order_of_k]) == 0) { \
 | 
| +    r++; \
 | 
| +  } else { \
 | 
| +    temp2 = temp; \
 | 
| +    /* Branch-less absolute value, bitwise complement, etc., same as above */ \
 | 
| +    temp3 = temp >> (CHAR_BIT * sizeof(int) - 1); \
 | 
| +    temp ^= temp3; \
 | 
| +    temp -= temp3; \
 | 
| +    temp2 += temp3; \
 | 
| +    nbits = jpeg_nbits_table[temp]; \
 | 
| +    /* if run length > 15, must emit special run-length-16 codes (0xF0) */ \
 | 
| +    while (r > 15) { \
 | 
| +      EMIT_BITS(code_0xf0, size_0xf0) \
 | 
| +      r -= 16; \
 | 
| +    } \
 | 
| +    /* Emit Huffman symbol for run length / number of bits */ \
 | 
| +    temp3 = (r << 4) + nbits;  \
 | 
| +    code = actbl->ehufco[temp3]; \
 | 
| +    size = actbl->ehufsi[temp3]; \
 | 
| +    EMIT_CODE(code, size) \
 | 
|      r = 0;  \
 | 
| -  }}
 | 
| +  } \
 | 
| +}
 | 
|  
 | 
| -  innerloop(2*1);   innerloop(2*8);   innerloop(2*16);  innerloop(2*9);
 | 
| -  innerloop(2*2);   innerloop(2*3);   innerloop(2*10);  innerloop(2*17);
 | 
| -  innerloop(2*24);  innerloop(2*32);  innerloop(2*25);  innerloop(2*18);
 | 
| -  innerloop(2*11);  innerloop(2*4);   innerloop(2*5);   innerloop(2*12);
 | 
| -  innerloop(2*19);  innerloop(2*26);  innerloop(2*33);  innerloop(2*40);
 | 
| -  innerloop(2*48);  innerloop(2*41);  innerloop(2*34);  innerloop(2*27);
 | 
| -  innerloop(2*20);  innerloop(2*13);  innerloop(2*6);   innerloop(2*7);
 | 
| -  innerloop(2*14);  innerloop(2*21);  innerloop(2*28);  innerloop(2*35);
 | 
| -  innerloop(2*42);  innerloop(2*49);  innerloop(2*56);  innerloop(2*57);
 | 
| -  innerloop(2*50);  innerloop(2*43);  innerloop(2*36);  innerloop(2*29);
 | 
| -  innerloop(2*22);  innerloop(2*15);  innerloop(2*23);  innerloop(2*30);
 | 
| -  innerloop(2*37);  innerloop(2*44);  innerloop(2*51);  innerloop(2*58);
 | 
| -  innerloop(2*59);  innerloop(2*52);  innerloop(2*45);  innerloop(2*38);
 | 
| -  innerloop(2*31);  innerloop(2*39);  innerloop(2*46);  innerloop(2*53);
 | 
| -  innerloop(2*60);  innerloop(2*61);  innerloop(2*54);  innerloop(2*47);
 | 
| -  innerloop(2*55);  innerloop(2*62);  innerloop(2*63);
 | 
| +  /* One iteration for each value in jpeg_natural_order[] */
 | 
| +  kloop(1);   kloop(8);   kloop(16);  kloop(9);   kloop(2);   kloop(3);
 | 
| +  kloop(10);  kloop(17);  kloop(24);  kloop(32);  kloop(25);  kloop(18);
 | 
| +  kloop(11);  kloop(4);   kloop(5);   kloop(12);  kloop(19);  kloop(26);
 | 
| +  kloop(33);  kloop(40);  kloop(48);  kloop(41);  kloop(34);  kloop(27);
 | 
| +  kloop(20);  kloop(13);  kloop(6);   kloop(7);   kloop(14);  kloop(21);
 | 
| +  kloop(28);  kloop(35);  kloop(42);  kloop(49);  kloop(56);  kloop(57);
 | 
| +  kloop(50);  kloop(43);  kloop(36);  kloop(29);  kloop(22);  kloop(15);
 | 
| +  kloop(23);  kloop(30);  kloop(37);  kloop(44);  kloop(51);  kloop(58);
 | 
| +  kloop(59);  kloop(52);  kloop(45);  kloop(38);  kloop(31);  kloop(39);
 | 
| +  kloop(46);  kloop(53);  kloop(60);  kloop(61);  kloop(54);  kloop(47);
 | 
| +  kloop(55);  kloop(62);  kloop(63);
 | 
|  
 | 
|    /* If the last coef(s) were zero, emit an end-of-block code */
 | 
| -  if (r > 0) DUMP_SINGLE_VALUE(actbl, 0x0)
 | 
| +  if (r > 0) {
 | 
| +    code = actbl->ehufco[0];
 | 
| +    size = actbl->ehufsi[0];
 | 
| +    EMIT_BITS(code, size)
 | 
| +  }
 | 
|  
 | 
|    state->cur.put_buffer = put_buffer;
 | 
|    state->cur.put_bits = put_bits;
 | 
| 
 |