все попорядку не мешая в кашу
1. иструкции FPU
Код
VABS
VADD
VCMP
VCMPE
VCVT
VCVT
VCVTR
VCVTB
VCVTT
VDIV
VFMA
VFNMA
VFMS
VFNMS
VLDM
VLDR
VLMA
VLMS
VMOV
VMRS
VMSR
VMUL
VNEG
VNMLA
VNMLS
VNMUL
VPOP
VPUSH
VSQRT
VSTR
VSUB
c ними нет никаких танцев с бубеном вокруг костра (в первом приближении). чтобы все работало нужно воткнуть компиллеру
-mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumbдалее пишем код с операндами типа float - и забываем - компиллер как та женщина которая отдала все что у нее было.... выдаст все что сможет.
ЗАМЕЧАНИЕ. тонкий момент возникает только с инструкцией VSQRT и VABS так как им соответствуют не операции над оперндами а функции libc. из этого положения выкручиваемя следующим финтом:
Цитата
inline float vsqrt (float value)
{
float result ;
asm volatile ( "vsqrt.f32 %0, %1 \r\n"
: "=w" (result) : "w" (value) );
return (result) ;
}
inline float vabs (float value)
{
float result ;
asm volatile ( "vabs.f32 %0, %1 \r\n"
: "=w" (result) : "w" (value) );
return (result) ;
}
c FPU фисе.... тут как раз проще чем с DSP
2. инструкции DSP
Цитата
SADD8
QADD8/
SHADD8
UADD8
UQADD8
UHADD8
SSUB8
QSUB8
SHSUB8
USUB8
UQSUB8
UHSUB8
SADD16
QADD16
SHADD16
UADD16
UQADD16
UHADD16
SSUB16
QSUB16
SHSUB16
USUB16
UQSUB16
UHSUB16
SASX
QASX
SHASX
UASX
UQASX
UHASX
SSAX
QSAX
SHSAX
USAX
UQSAX
UHSAX
USAD8
USADA8
SSAT16
USAT16
UXTB16
SXTB16
UXTAB16
SXTAB16
SMUAD
SMUADX
SMLAD
SMLADX
_SMLALD
SMLALDX
SMUSD
SMUSDX
SMLSD
SMLSDX
SMLSLD
SMLSLDX
SEL
QADD
QSUB
PKHBT
PKHTB
важно понимать - автоматом компиллер может вставлять интрукции из тех которые он знает только (в первом приближении) оперциях над известными ему типами оперндов. если компиллер их незнает(этих типов) но есть инструкции по их обработке то используются библиотечные вызовы (это уровень выше компиллера)
таким образом DSP инструкции моглибы быть автоматом генерится но типов ( uint4x8_t или uint2x16_t и тд ) то нет! все DSP инструкции работаютс со стандарнтыми типами uint32_t а вот что подразумевается - два 2*16 или 4*8 это уже становится понятно только когда вы этот операнд оправляете на обработку той или иной инструкции. вопрос - что делать?
ответ - все просто - как упомянуто коллегами выше в фале core_cm4_simd.h обявлены inline функции SIMD, Вы должны только приготовит данные и вызвать нужную функцию, компиилер в коде тупо метнет по регистрам данные и вставит инструкцию. это что и требовалось.
3, опять про SIMD .... если до сих пор чето непонятно как это использовать то рекомендую повтыкать в файлы из DSP_Lib которые тамже в дистре для CM4 идут - там есть такие важные и полезные вещи как фильты матрицы и вяка разно, причем как правило есть варианты на плавучке , так и на целых - тоесть как раз SIMD (используются вызовы функций из core_cm4_simd.h)
надеюсь ответил так же содержательно как и кратко.
Цитата(Flexz @ Oct 6 2012, 17:58)

на CodeSourcery gcc мне не удалось ничего с hard скопмилить - валится на линковке.
сочувствую.... и Вам и CodeSourcery, а какая там версия нынче?