diff options
| author | Keith Packard <keithp@keithp.com> | 2013-05-22 14:38:19 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-08-25 22:24:01 -0700 | 
| commit | f7602ae566a5cbf2d2cbb1d68bad7e2d1177a33a (patch) | |
| tree | 380bb509a93af2428d524d4c86fc1c88bef07ee9 /src/core/ao_int64.c | |
| parent | 3114baef45803250a2e5cdd2ee4a9171f2045b0c (diff) | |
altos: Make 64x16 mul a bit faster
the unsigned 32x32 multiply really does work, just use it
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/core/ao_int64.c')
| -rw-r--r-- | src/core/ao_int64.c | 11 | 
1 files changed, 3 insertions, 8 deletions
| diff --git a/src/core/ao_int64.c b/src/core/ao_int64.c index 1fe717dc..8e3caa24 100644 --- a/src/core/ao_int64.c +++ b/src/core/ao_int64.c @@ -86,11 +86,11 @@ void ao_mul64(ao_int64_t *r, int32_t a, int32_t b) {  	if (a < 0) {  		a = -a; -		negative = 1; +		negative = ~0;  	}  	if (b < 0) {  		b = -b; -		negative = !negative; +		negative = ~negative;  	}  	ao_umul64(r, a, b);  	if (negative) @@ -98,12 +98,7 @@ void ao_mul64(ao_int64_t *r, int32_t a, int32_t b) {  }  void ao_umul64_16(ao_int64_t *r, ao_int64_t *a, uint16_t b) { -	uint32_t	low = a->low; -	ao_umul64(r, (uint32_t) low >> 1, (uint32_t) b << 1); -	if (low & 1) { -		if ((uint32_t) (r->low += b) < (uint32_t) b) -			r->high++; -	} +	ao_umul64(r, a->low, b);  	r->high += a->high * b;  } | 
