Browse Source

wscript: Test for __builtin_assume_aligned which is new in GCC 4.7.

tags/non-daw-v1.2.0
Jonathan Moore Liles 10 years ago
parent
commit
ff41fb9f81
2 changed files with 22 additions and 12 deletions
  1. +18
    -12
      nonlib/dsp.C
  2. +4
    -0
      wscript

+ 18
- 12
nonlib/dsp.C View File

@@ -25,6 +25,12 @@

static const int ALIGNMENT = 16;

#ifdef HAS_BUILTIN_ASSUME_ALIGNED
#define assume_aligned(x) __builtin_assume_aligned(x,ALIGNMENT)
#else
#define assume_aligned(x) (x)
#endif

sample_t *
buffer_alloc ( nframes_t size )
{
@@ -38,7 +44,7 @@ buffer_alloc ( nframes_t size )
void
buffer_apply_gain ( sample_t * __restrict__ buf, nframes_t nframes, float g )
{
sample_t * buf_ = (sample_t*) __builtin_assume_aligned(buf,ALIGNMENT);
sample_t * buf_ = (sample_t*) assume_aligned(buf);
if ( g != 1.0f )
while ( nframes-- )
@@ -56,8 +62,8 @@ buffer_apply_gain_unaligned ( sample_t * __restrict__ buf, nframes_t nframes, fl
void
buffer_apply_gain_buffer ( sample_t * __restrict__ buf, const sample_t * __restrict__ gainbuf, nframes_t nframes )
{
sample_t * buf_ = (sample_t*) __builtin_assume_aligned(buf,ALIGNMENT);
const sample_t * gainbuf_ = (const sample_t*) __builtin_assume_aligned(gainbuf,ALIGNMENT);
sample_t * buf_ = (sample_t*) assume_aligned(buf);
const sample_t * gainbuf_ = (const sample_t*) assume_aligned(gainbuf);

while ( nframes-- )
*(buf_++) *= *(gainbuf_++);
@@ -66,9 +72,9 @@ buffer_apply_gain_buffer ( sample_t * __restrict__ buf, const sample_t * __restr
void
buffer_copy_and_apply_gain_buffer ( sample_t * __restrict__ dst, const sample_t * __restrict__ src, const sample_t * __restrict__ gainbuf, nframes_t nframes )
{
sample_t * dst_ = (sample_t*) __builtin_assume_aligned(dst,ALIGNMENT);
const sample_t * src_ = (const sample_t*) __builtin_assume_aligned(src,ALIGNMENT);
const sample_t * gainbuf_ = (const sample_t*) __builtin_assume_aligned(gainbuf,ALIGNMENT);
sample_t * dst_ = (sample_t*) assume_aligned(dst);
const sample_t * src_ = (const sample_t*) assume_aligned(src);
const sample_t * gainbuf_ = (const sample_t*) assume_aligned(gainbuf);
while ( nframes-- )
*(dst_++) = *(src_++) * *(gainbuf_++);
@@ -77,8 +83,8 @@ buffer_copy_and_apply_gain_buffer ( sample_t * __restrict__ dst, const sample_t
void
buffer_mix ( sample_t * __restrict__ dst, const sample_t * __restrict__ src, nframes_t nframes )
{
sample_t * dst_ = (sample_t*) __builtin_assume_aligned(dst,ALIGNMENT);
const sample_t * src_ = (const sample_t*) __builtin_assume_aligned(src,ALIGNMENT);
sample_t * dst_ = (sample_t*) assume_aligned(dst);
const sample_t * src_ = (const sample_t*) assume_aligned(src);

while ( nframes-- )
*(dst_++) += *(src_++);
@@ -87,8 +93,8 @@ buffer_mix ( sample_t * __restrict__ dst, const sample_t * __restrict__ src, nfr
void
buffer_mix_with_gain ( sample_t * __restrict__ dst, const sample_t * __restrict__ src, nframes_t nframes, float g )
{
sample_t * dst_ = (sample_t*) __builtin_assume_aligned(dst,ALIGNMENT);
const sample_t * src_ = (const sample_t*) __builtin_assume_aligned(src,ALIGNMENT);
sample_t * dst_ = (sample_t*) assume_aligned(dst);
const sample_t * src_ = (const sample_t*) assume_aligned(src);
while ( nframes-- )
*(dst_++) += *(src_++) * g;
@@ -152,7 +158,7 @@ buffer_is_digital_black ( sample_t *buf, nframes_t nframes )
float
buffer_get_peak ( const sample_t * __restrict__ buf, nframes_t nframes )
{
const sample_t * buf_ = (const sample_t*) __builtin_assume_aligned(buf,ALIGNMENT);
const sample_t * buf_ = (const sample_t*) assume_aligned(buf);

float p = 0.0f;
@@ -191,7 +197,7 @@ Value_Smoothing_Filter::sample_rate ( nframes_t n )
bool
Value_Smoothing_Filter::apply( sample_t * __restrict__ dst, nframes_t nframes, float gt )
{
sample_t * dst_ = (sample_t*) __builtin_assume_aligned(dst,ALIGNMENT);
sample_t * dst_ = (sample_t*) assume_aligned(dst);
const float a = 0.07f;
const float b = 1 + a;


+ 4
- 0
wscript View File

@@ -63,6 +63,10 @@ def configure(conf):
conf.check_cfg(package='liblo', uselib_store='LIBLO',args="--cflags --libs",
atleast_version='0.26', mandatory=True)

conf.check_cc(msg='Checking for compiler pointer alignment hints',
uselib_store='HAS_BUILTIN_ASSUME_ALIGNED',
fragment='int main ( char**argv, int argc ) { const char *s = (const char*)__builtin_assume_aligned( 0, 16 ); return 0; }',
execute=False, mandatory=False)
###

for i in common:


Loading…
Cancel
Save