Android 6 ti dsp,TI DSP TMS320C66x学习笔记之内联指令(c6x.h中文注释)(六)

本文详细介绍了TI DSP TMS320C66x系列处理器中c6x.h头文件内定义的内联指令,包括浮点类型转换、位操作、算术运算、逻辑运算、比较和移动等,并提供了相应的示例,对于理解及高效使用TI DSP进行数值计算和处理具有指导意义。
摘要由CSDN通过智能技术生成

/*****************************************************************************/

/* C6X.H v7.4.12 */

/*****************************************************************************/

#include "vect.h"

typedef double __float2_t;//__float2_t双精度浮点型

#define _lltof2 _lltod

#define _f2toll _dtoll //将一个__float2_t解释成一个long long

#define _ftof2 _ftod

#define _hif2 _hif

#define _lof2 _lof

#define _f2tol _dtol //将一个__float2_t解释成一个__int40

#define _ltof2 _ltod

#define _amem8_f2 _amemd8 //加载和存储8bytes,指针必须8byte对齐,必须包含c6x.h

#define _amem8_f2_const _amemd8_const //加载8bytes,指针必须8byte对齐,必须包含c6x.h

#define _mem8_f2 _memd8 //从内存里加载一个64位值

#define _mem8_f2_const _memd8_const

#define _fdmv_f2 _fdmv

#define _hif2_128 _hid128

#define _lof2_128 _lod128

#define _f2to128 _dto128

#define _fdmvd_f2 _fdmvd

/*从src2里提取csta和cstb指定的区域且符号扩展到32位。提取出的区域先符号左移再右移。*/

int _ext (int src2, unsigned csta, unsigned cstb);

int _extr (int src2, int src1);//同上,区别左右移的位数由src1的低10位指定

unsigned _extu (unsigned src2, unsigned csta, unsigned cstb);//同上上,区别最后是0扩展到32位

unsigned _extur (unsigned src2, int src1);//同上,区别左右移的位数由src1的低10位指定

/*通过cstb和csta指定需要置1的首位和尾位*/

unsigned _set (unsigned src, unsigned csta, unsigned cstb);

unsigned _setr (unsigned src2, int src1);//将src2中指定位置1,置1的首位和末位有src1的低10位指定

/*通过cstb和csta指定需要清0的首位和尾位*/

unsigned _clr (unsigned src, unsigned csta, unsigned cstb);

unsigned _clrr (unsigned src2, int src1);//将src2中指定位清0,清0的首位和末位有src1的低10位指定

/*将src1和src2相加,且饱和其结果*/

int _sadd (int, int);

__int40_t _lsadd (int, __int40_t);

/*从src1中减去src2并饱和结果*/

int _ssub (int src1, int src2);

__int40_t _lssub (int, __int40_t);

/*将一个40bit的long转换成一个32bit的有符号int,如有需要,对结果进行饱和*/

int _sat (__int40_t);

/*将src2左移src1位,结果饱和在32位*/

int _sshl (int src2, unsigned src1);

/*把src1的高、低16位和src2的高、低16位分别相加,放入结果的高、低16位*/

int _add2 (int, int);

int _sub2 (int, int);/*把src1的高、低16位减去src2的高、低16位,放入结果的高、低16位*/

/*有条件减和左移(常用于除法)*/

unsigned _subc (unsigned, unsigned);

/*搜索src2里面的1或0,1或0是由src1的LSB决定的,返回比特位变换的位数*/

unsigned _lmbd (unsigned src1, unsigned src2);

/*返回src的绝对值*/

int _abs (int src);

__int40_t _labs (__int40_t src);

/*返回src的冗余的符号比特位的个数,bit31是符号位,例如bit31往低位走,01b返回0,001b返回1,0001b返回2,00001b返回3*/

unsigned _norm (int);

unsigned _lnorm (__int40_t);

//16 LSBs * 16 LSBs

int _mpy (int src1, int src2);/*src1和src2相乘,操作数默认为有符号*/

int _mpyus (unsigned src1, int src2);/*无符号src1和有符号src2相乘,S是用来确定哪个是有符号数(S)哪个是无符号数(U)*/

int _mpysu (int, unsigned);

unsigned _mpyu (unsigned, unsigned);

//16 MSBs * 16 MSBs

int _mpyh (int, int);

int _mpyhus (unsigned, int);

int _mpyhsu (int, unsigned);

unsigned _mpyhu (unsigned, unsigned);

//16 MSBs * 16 LSBs

int _mpyhl (int, int);

int _mpyhuls (unsigned, int);

int _mpyhslu (int, unsigned);

//16 LSBs * 16 MSBs

int _mpylh (int, int);

int _mpyluhs (unsigned, int);

int _mpylshu (int, unsigned);

unsigned _mpylhu (unsigned, unsigned);

//与上面的乘法指令区别在何处

/*把src1的低16位和src2的低16位相乘,之后左移一位*/

int _smpy (int src1, int src2);

int _smpyhl (int, int);//高16位 * 低16位

int _smpylh (int, int);//低16位 * 高16位

int _smpyh (int, int);//把src1的高16位和src2的高16位相乘

/*将src1和src2中的2对16位有符号数相乘,然后左移1位,再进行饱和*/

long long _smpy2ll (int, int);

/*32位有符号数乘以32位有符号数,64位的结果左移1位然后饱和,然后将之后的结果的高32位写入dst*/

int _smpy32 (int, int);

/*返回double寄存器的高32位(奇数位寄存器)作为int型*/

unsigned _hi(double);

/*返回double寄存器的高32位(奇数位寄存器)作为float型*/

float _hif(double);

/*返回long long寄存器的高32位(奇数位寄存器)作为int型*/

unsigned _hill(long long);

/*返回double寄存器的低32位(偶数位寄存器)作为int型*/

unsigned _lo(double);

/*返回double寄存器的低32位(偶数位寄存器)作为float型*/

float _lof(double);

/*返回long long寄存器的低32位(偶数位寄存器)作为int型*/

unsigned _loll(long long);

/*创建一个新的double寄存器来保存2个unsigned int的值,其中src2是高(奇数)寄存器,src1是低(偶数)寄存器*/

double _itod(unsigned, unsigned);

/*创建一个新的double寄存器来保存2个float的值,其中src2是高(奇数)寄存器,src1是低(偶数)寄存器*/

double _ftod(float, float);

/*创建一个新的long long寄存器来保存2个unsigned int的值,其中src2是高(奇数)寄存器,src1是低(偶数)寄存器*/

long long _itoll(unsigned src2, unsigned src1);

/*注意不是变换,是直接将寄存器中的值解释成整型或者浮点型*/

float _itof(unsigned); /* 将一个int寄存器重新解释成一个float型 */

unsigned _ftoi(f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值