idiv - , sdiv, udiv - Cortex-A. Cortex-A ID_ISAR0 cp15 [27:24].
unsigned int ISAR0;
int idiv;
__asm ("mrc 15, 0, %0, c0, c2, 0" :"=r" (ISAR0));
#ifdef __thumb2__
idiv = (ISAR0 & 0xf000000UL) ? 1 : 0;
#else
idiv = (ISAR0 & 0xf000000UL) == 0x2000000UL ? 1 : 0;
#endif
[27:24] 0001, thumb2 udiv sdiv. [27:24] 0010, .
gcc flags -march=armv7-a .. , ALL , , gcc .
,
gcc -march=armv7-a -o general.o -c general.c
gcc -mcpu=cortex-a15 -D_USE_IDIV_=1 -o fast_idiv.o -c fast_div.c
, . , ,
#include "fir_template.def"
#ifdef _USE_IDIV_
#define _FUNC(x) idiv_ ## x
#else
#define _FUNC(x) x
#endif
int _FUNC(fir8)(FILTER8 *filter, SAMPLE *data,)
{
....
}
, Cortex-a15, -mcpu. , IF, ( armv7-a), CPU, , .
: (general.c fast_idiv.c) API. /proc/cpuinfo , idiv. LD_LIBRARY_PATH ( dlopen()) . , .