君正X1000_M200用户手册资料

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/szx940213/article/details/88352660

X1000_M200_MXU-User-Guide

1. 简介
工具链中MXU指令以内嵌汇编的方式提供。MXU有16个32bit 通用寄存器(xr0~xr15),一个32bit控制寄存器(xr16)。使用工具链中的 MXU 宏定义时需要程序员手动选择要使用的 MXU 寄存器。如Q16ADD_AA_WW(xr1,xr2,xr3,xr4),其中 Q16ADD_AA_WW 是内嵌汇编宏,xr1,xr2,xr3,xr4 是寄存器编号。指令的使用请详见附录,寄存器和内嵌汇编宏的定义请详见工具链中的 jzmedia.h (PATH_toolchain/mips-linux-gnu/libc/usr/include/jzmedia.h)。

● 使用 MXU 的内嵌汇编宏需要引用 jzmedia.h

● 使用 MXU 指令,在编译时需要添加“-mmxu” 编译选项。
● 使用 MXU 指令,在反汇编时需要添加“-Mmxu” 选项。

2. 指令使用举例
以 Q16ADD 指令为例

/* test.c */
#include <stdio.h>
#include <jzmedia.h>
void main()
{
short src1 [2] = { 1 , 2 };
short src2 [2] = { 10,20 };
short dst1 [2] ;
short dst2 [2] ;
S32LDD(xr1, src1, 0);
S32LDD(xr2, src2, 0);
/*调用 Q16ADD 指令,其中
EPTN2 :AA(00),表示加加运算,
OPTN2:WW(00),表示高位与高位,低位与低位操作
Operation:
xr4 = {xr1.l+xr2.l, xr1.h+xr2.h};
xr3= {xr1.l+xr2.l, xr1.h+xr2.h};*/
Q16ADD_AA_WW(xr4,xr2,xr1,xr3);
S32STD(xr3, dst1, 0);
S32STD(xr4, dst2, 0);
printf(" dst1[0] is %d, dst1[1] is %d\n", dst1[0], dst2[1]);
printf(" dst2[0] is %d, dst2[1] is %d\n", dst2[0], dst2[1]);
}

编译:
$ mips-linux-gnu-gcc test.c -o test -mmxu
反汇编:
$ mips-linux-gnu-objdump -D test -Mmxu
运行:
$./test
dst1[0] is 11, dst1[1] is 22
dst2[0] is 11, dst2[1] is 22

3. X1000附录
MXU 指令具体含义及使用方法请参考《XBurst_ISA_MXU_PM》,MXU 指令使用列表如下:
注:寄存器名称(xra,xrb,xrc,xrd...)为示例,不代表真实寄存器。

D16MUL_WW(xra,xrb,xrc,xrd);
D16MUL_HW(xra,xrb,xrc,xrd);
D16MUL_LW(xra,xrb,xrc,xrd);
D16MUL_XW(xra,xrb,xrc,xrd);

D16MULF_WW(xra,xrb,xrc);
D16MULF_LW(xra,xrb,xrc);
D16MULF_HW(xra,xrb,xrc);
D16MULF_XW(xra,xrb,xrc);


D16MULE_WW(xra,xrb,xrc,xrd);
D16MULE_LW(xra,xrb,xrc,xrd);
D16MULE_HW(xra,xrb,xrc,xrd);
D16MULE_XW(xra,xrb,xrc,xrd);

D16MAC_AA_WW(xra,xrb,xrc,xrd);
D16MAC_AA_LW(xra,xrb,xrc,xrd);
D16MAC_AA_HW(xra,xrb,xrc,xrd);
D16MAC_AA_XW(xra,xrb,xrc,xrd);

D16MAC_AS_WW(xra,xrb,xrc,xrd);
D16MAC_AS_LW(xra,xrb,xrc,xrd);
D16MAC_AS_HW(xra,xrb,xrc,xrd);
D16MAC_AS_XW(xra,xrb,xrc,xrd);

D16MAC_SA_WW(xra,xrb,xrc,xrd);
D16MAC_SA_LW(xra,xrb,xrc,xrd);
D16MAC_SA_HW(xra,xrb,xrc,xrd);

D16MAC_SA_XW(xra,xrb,xrc,xrd);

D16MAC_SS_WW(xra,xrb,xrc,xrd);
D16MAC_SS_LW(xra,xrb,xrc,xrd);
D16MAC_SS_HW(xra,xrb,xrc,xrd);
D16MAC_SS_XW(xra,xrb,xrc,xrd);

D16MACF_AA_WW(xra,xrb,xrc,xrd);
D16MACF_AA_LW(xra,xrb,xrc,xrd);
D16MACF_AA_HW(xra,xrb,xrc,xrd);
D16MACF_AA_XW(xra,xrb,xrc,xrd);

D16MACF_AS_WW(xra,xrb,xrc,xrd);
D16MACF_AS_LW(xra,xrb,xrc,xrd);
D16MACF_AS_HW(xra,xrb,xrc,xrd);
D16MACF_AS_XW(xra,xrb,xrc,xrd);

D16MACF_SA_WW(xra,xrb,xrc,xrd);
D16MACF_SA_LW(xra,xrb,xrc,xrd);
D16MACF_SA_HW(xra,xrb,xrc,xrd);
D16MACF_SA_XW(xra,xrb,xrc,xrd);

D16MACF_SS_WW(xra,xrb,xrc,xrd);
D16MACF_SS_LW(xra,xrb,xrc,xrd);
D16MACF_SS_HW(xra,xrb,xrc,xrd);
D16MACF_SS_XW(xra,xrb,xrc,xrd);

D16MADL_AA_WW(xra,xrb,xrc,xrd);
D16MADL_AA_LW(xra,xrb,xrc,xrd);
D16MADL_AA_HW(xra,xrb,xrc,xrd);
D16MADL_AA_XW(xra,xrb,xrc,xrd);

D16MADL_AS_WW(xra,xrb,xrc,xrd);
D16MADL_AS_LW(xra,xrb,xrc,xrd);
D16MADL_AS_HW(xra,xrb,xrc,xrd);
D16MADL_AS_XW(xra,xrb,xrc,xrd);

D16MADL_SA_WW(xra,xrb,xrc,xrd);
D16MADL_SA_LW(xra,xrb,xrc,xrd);
D16MADL_SA_HW(xra,xrb,xrc,xrd);
D16MADL_SA_XW(xra,xrb,xrc,xrd);

D16MADL_SS_WW(xra,xrb,xrc,xrd);
D16MADL_SS_LW(xra,xrb,xrc,xrd);

D16MADL_SS_HW(xra,xrb,xrc,xrd);
D16MADL_SS_XW(xra,xrb,xrc,xrd);

S16MAD_A_HH(xra,xrb,xrc,xrd);
S16MAD_A_LL(xra,xrb,xrc,xrd);
S16MAD_A_HL(xra,xrb,xrc,xrd);
S16MAD_A_LH(xra,xrb,xrc,xrd);

S16MAD_S_HH(xra,xrb,xrc,xrd);
S16MAD_S_LL(xra,xrb,xrc,xrd);
S16MAD_S_HL(xra,xrb,xrc,xrd);
S16MAD_S_LH(xra,xrb,xrc,xrd);

Q16ADD_AA_WW(xra,xrb,xrc,xrd);
Q16ADD_AA_LW(xra,xrb,xrc,xrd);
Q16ADD_AA_HW(xra,xrb,xrc,xrd);
Q16ADD_AA_XW(xra,xrb,xrc,xrd);

Q16ADD_AS_WW(xra,xrb,xrc,xrd);
Q16ADD_AS_LW(xra,xrb,xrc,xrd);
Q16ADD_AS_HW(xra,xrb,xrc,xrd);
Q16ADD_AS_XW(xra,xrb,xrc,xrd);

Q16ADD_SA_WW(xra,xrb,xrc,xrd);
Q16ADD_SA_LW(xra,xrb,xrc,xrd);
Q16ADD_SA_HW(xra,xrb,xrc,xrd);
Q16ADD_SA_XW(xra,xrb,xrc,xrd);

Q16ADD_SS_WW(xra,xrb,xrc,xrd);
Q16ADD_SS_LW(xra,xrb,xrc,xrd);
Q16ADD_SS_HW(xra,xrb,xrc,xrd);
Q16ADD_SS_XW(xra,xrb,xrc,xrd);

D16MACE_AA_WW(xra,xrb,xrc,xrd);
D16MACE_AA_LW(xra,xrb,xrc,xrd);
D16MACE_AA_HW(xra,xrb,xrc,xrd);
D16MACE_AA_XW(xra,xrb,xrc,xrd);

D16MACE_AS_WW(xra,xrb,xrc,xrd);
D16MACE_AS_LW(xra,xrb,xrc,xrd);
D16MACE_AS_HW(xra,xrb,xrc,xrd);
D16MACE_AS_XW(xra,xrb,xrc,xrd);

·····················

猜你喜欢

转载自blog.csdn.net/szx940213/article/details/88352660