1*638691a0SAndroid Build Coastguard Worker /* IA-32 SSE version of peakval 2*638691a0SAndroid Build Coastguard Worker * Copyright 2004 Phil Karn, KA9Q 3*638691a0SAndroid Build Coastguard Worker */ 4*638691a0SAndroid Build Coastguard Worker 5*638691a0SAndroid Build Coastguard Worker #include <stdlib.h> 6*638691a0SAndroid Build Coastguard Worker #include "fec.h" 7*638691a0SAndroid Build Coastguard Worker 8*638691a0SAndroid Build Coastguard Worker int peakval_sse_assist(signed short *,int); 9*638691a0SAndroid Build Coastguard Worker peakval_sse(signed short * b,int cnt)10*638691a0SAndroid Build Coastguard Workerint peakval_sse(signed short *b,int cnt){ 11*638691a0SAndroid Build Coastguard Worker int peak = 0; 12*638691a0SAndroid Build Coastguard Worker int a; 13*638691a0SAndroid Build Coastguard Worker 14*638691a0SAndroid Build Coastguard Worker while(((int)b & 7) != 0 && cnt != 0){ 15*638691a0SAndroid Build Coastguard Worker a = abs(*b); 16*638691a0SAndroid Build Coastguard Worker if(a > peak) 17*638691a0SAndroid Build Coastguard Worker peak = a; 18*638691a0SAndroid Build Coastguard Worker b++; 19*638691a0SAndroid Build Coastguard Worker cnt--; 20*638691a0SAndroid Build Coastguard Worker } 21*638691a0SAndroid Build Coastguard Worker a = peakval_sse_assist(b,cnt); 22*638691a0SAndroid Build Coastguard Worker if(a > peak) 23*638691a0SAndroid Build Coastguard Worker peak = a; 24*638691a0SAndroid Build Coastguard Worker b += cnt & ~3; 25*638691a0SAndroid Build Coastguard Worker cnt &= 3; 26*638691a0SAndroid Build Coastguard Worker 27*638691a0SAndroid Build Coastguard Worker while(cnt != 0){ 28*638691a0SAndroid Build Coastguard Worker a = abs(*b); 29*638691a0SAndroid Build Coastguard Worker if(a > peak) 30*638691a0SAndroid Build Coastguard Worker peak = a; 31*638691a0SAndroid Build Coastguard Worker b++; 32*638691a0SAndroid Build Coastguard Worker cnt--; 33*638691a0SAndroid Build Coastguard Worker } 34*638691a0SAndroid Build Coastguard Worker return peak; 35*638691a0SAndroid Build Coastguard Worker } 36