Example #1
0
void*
memalign_alloc_aligned(size_t size) {
#if defined(__x86_64__) || defined(__LP64) || defined(__IA64__) || defined(_M_X64) || defined(_WIN64)
  return memalign_alloc(64, size);
#elif defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(GEKKO)
  return memalign_alloc(32, size);
#else
  return memalign_alloc(32, size);
#endif
}
Example #2
0
static void *resampler_sinc_new(const struct resampler_config *config,
                                double bandwidth_mod, resampler_simd_mask_t mask)
{
    double cutoff;
    size_t phase_elems, elems;
    rarch_sinc_resampler_t *re = (rarch_sinc_resampler_t*)
                                 calloc(1, sizeof(*re));

    if (!re)
        return NULL;

    (void)config;

    re->taps = TAPS;
    cutoff   = CUTOFF;

    /* Downsampling, must lower cutoff, and extend number of
     * taps accordingly to keep same stopband attenuation. */
    if (bandwidth_mod < 1.0)
    {
        cutoff *= bandwidth_mod;
        re->taps = (unsigned)ceil(re->taps / bandwidth_mod);
    }

    /* Be SIMD-friendly. */
#if (defined(__AVX__) && ENABLE_AVX) || (defined(__ARM_NEON__))
    re->taps     = (re->taps + 7) & ~7;
#else
    re->taps     = (re->taps + 3) & ~3;
#endif

    phase_elems  = (1 << PHASE_BITS) * re->taps;
#if SINC_COEFF_LERP
    phase_elems *= 2;
#endif
    elems        = phase_elems + 4 * re->taps;

    re->main_buffer = (float*)memalign_alloc(128, sizeof(float) * elems);
    if (!re->main_buffer)
        goto error;

    re->phase_table = re->main_buffer;
    re->buffer_l    = re->main_buffer + phase_elems;
    re->buffer_r    = re->buffer_l + 2 * re->taps;

    init_sinc_table(re, cutoff, re->phase_table,
                    1 << PHASE_BITS, re->taps, SINC_COEFF_LERP);

#if defined(__ARM_NEON__)
    process_sinc_func = mask & RESAMPLER_SIMD_NEON
                        ? process_sinc_neon : process_sinc_C;
#endif

    return re;

error:
    resampler_sinc_free(re);
    return NULL;
}