#ifndef COSMOPOLITAN_DSP_CORE_C1331_H_
#define COSMOPOLITAN_DSP_CORE_C1331_H_
#if !(__ASSEMBLER__ + __LINKER__ + 0)

/**
 * Byte sized kernel for resampling memory in half.
 *
 * @define (1*ð + 3*ð + 3*ð + 1*ð) / (1 + 3 + 3 + 1)
 * @see C161() afterward for superior sin(ð¥)/ð¥
 * @limit [0,255] â [0..2,044] â [0..255]
 */
forceinline pureconst artificial unsigned char C1331(unsigned char al,
                                                     unsigned char bl,
                                                     unsigned char cl,
                                                     unsigned char dl) {
  short ax, bx;
  bx = bl;
  bx += cl;
  bx *= 3;
  ax = al;
  ax += dl;
  ax += bx;
  ax += 4;
  ax >>= 3;
  al = ax;
  return al;
}

#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_DSP_CORE_C1331_H_ */
