一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

向量移位方法、处理器及电子设备与流程

2022-04-09 02:42:45 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别是涉及一种向量移位方法、处理器及电子设备。


背景技术:

2.随着多媒体应用的发展,处理器越来越多的计算任务都来自于数字图像处理领域,基于图像的应用成为服务器、桌面计算机、个人移动设备也即嵌入式设备中不可忽视的工作负载。针对数字图像处理软件的实际情况,对指令系统架构进行更新,在处理器中加入对应用中常用操作的指令支持,是处理器发展的一个主要方向,同时也是处理器针对特定应用提升性能的简单且有效的方法,因此越来越多的处理器中增加了单指令多数据流(single instruction multiple data,simd)结构,以支持规则数据集合上的同种操作。
3.目前,simd处理器中普遍引入了移位指令,不同的移位指令能够满足不同的需求,而在现有技术方案中,在实现特定功能的向量移位操作时,需要多条指令实现一系列的操作,操作方式较为复杂,且降低了特定功能的执行效率。


技术实现要素:

4.本技术提供了一种向量移位方法、处理器及电子设备,以解决现有技术中需要多条指令实现向量位移操作,操作方式较为复杂,降低了特定功能的执行效率的问题。
5.为了解决上述问题,本技术公开了一种向量移位方法,所述方法包括:
6.接收指令,所述指令包括:寄存器标识和移位参数;其中,所述寄存器标识包括源寄存器标识和目的寄存器标识;所述源寄存器标识用于表征源寄存器,所述源寄存器为存储执行向量移位操作时被操作的源元素的寄存器;所述目的寄存器标识用于表征目的寄存器,所述目的寄存器为存储执行所述向量移位操作后得到的目标元素的寄存器;所述移位参数用于指示对所述源元素执行向量移位操作时所依据的规则;
7.执行所述指令,以根据所述移位参数对从所述源寄存器获取的源元素执行向量移位操作,并获取所述向量移位操作后的目标元素;
8.将所述目标元素写入所述目的寄存器。
9.为了解决上述问题,本技术公开了一种处理器,包括:
10.多个向量寄存器,所述多个向量寄存器包括源寄存器与目的寄存器,源寄存器用于存储数据元素;
11.指令译码单元,用于译码向量移位指令;其中,所述向量移位指令包括:寄存器标识和移位参数,所述寄存器标识包括:源寄存器标识和目的寄存器标识,所述源寄存器标识用于表征源寄存器,所述目的寄存器标识用于表征目的寄存器;
12.执行单元,响应于所述向量移位指令,根据所述移位参数对从所述源寄存器获取的源元素执行向量移位操作,获取所述向量移位操作后的目标元素,并将所述目标元素写入所述目的寄存器。
13.为了解决上述问题,本技术公开了一种电子设备,包括有存储器,以及一个或者一
个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行上述一个或多个所述的向量移位方法。
14.与现有技术相比,本技术包括以下优点:
15.本技术实施例提供的向量移位方法、处理器及电子设备,通过在向量移位指令中添加寄存器标识和移位参数,通过寄存器标识指示存储执行向量移位操作时被操作的源元素的寄存器,以及存储执行向量移位操作后得到的目标元素的寄存器,并通过移位参数指示对源元素执行向量移位操作时所依据的规则,从而能够通过一条指令,即可实现特定功能的向量移位操作,无需通过多条指令实现特定功能的向量移位操作,操作方式简单,且提高了特定功能的执行效率。
附图说明
16.图1是根据本技术实施例一的一种向量移位方法的步骤流程图;
17.图2是根据本技术实施例的一种目标元素获取方法的步骤流程图;
18.图3是根据本技术实施例的一种移位运算结果获取方法的步骤流程图;
19.图4是根据本技术实施例的一种目标元素存储方法的步骤流程图;
20.图5是根据本技术实施例二的一种向量移位方法的步骤流程图;
21.图6是根据本技术实施例三的一种向量移位方法的步骤流程图;
22.图7是根据本技术实施例四的一种向量移位方法的步骤流程图;
23.图8是根据本技术实施例五的一种处理器的结构框图;
24.图9是根据本技术实施例六的一种电子设备的结构框图。
具体实施方式
25.为使本技术的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本技术作进一步详细的说明。
26.应当理解,本技术中说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,例如能够根据本技术实施例图示或描述中给出那些以外的顺序实施。
27.虽然下面的实施例是参照一种处理器来描述的,但是其他实施例适用于其他类型的集成电路和逻辑设备。可以更容易地将本技术的上述技术和教导应用于其他类型的电路或半导体设备,它们会因更高的流水线吞吐率和改进的性能而受益。本技术的实施例适用于执行数据操纵的任何处理器或机器。但是,本技术不限于执行256位、128位、64位、32位或16位数据操作的处理器或机器,而是适用于在其中需要操作组合型数据的任何处理器和机器。
28.在下面的描述中,为了解释的目的,给出了大量具体细节,以提供对本技术的透彻理解。然而,本领域内的技术人员应该认识到这些具体细节对实时本技术来说并不是必需的。在其它情况下,没有详细地给出一些公知的电学结构和电路,以免不必要地混淆本技术。另外,下面的描述提供了多个示例,并且附图示出了各种示例以用于说明。然而,这些示例不应当被理解成限制性的,因为它们只是用来提供本技术的一些示例,而不是用来提供
对本技术的所有可能实现的穷举。
29.虽然下面的例子描述了在执行单元的上下文中的指令处理和分发,但是本技术的其他实施例可以以软件的形式被实现。在一个实施例中,本技术的方法表现为机器可执行指令。所述指令可以被用于使得用这些指令编程的通用或专用处理器执行本技术的步骤。本技术可被作为计算机程序产品或软件来提供,所述产品或软件可包括机器或计算机可读介质,及其上存储有可用来对计算机(或其他电子设备)编程以执行根据本技术的处理器的指令。或者,本技术的步骤可以由包含用于执行所述步骤的硬布线逻辑的专用硬件组件,或由被编程的计算机组件和定制硬件组件的任何组合来执行。这些软件可以存储在系统中的存储器内。
30.本技术实施例提供的向量移位方法,其执行主体可以是cpu(central processing unit,中央处理器)。
31.实施例一
32.参照图1,示出了本技术实施例一的一种向量移位方法的步骤流程图,向量移位过程包括以下步骤:
33.步骤101:接收指令,所述指令包括:寄存器标识和移位参数。
34.本技术实施例中,指令是指用于执行向量移位操作的指令,且该指令为供处理器执行的指令;指令包括寄存器标识和移位参数。所述寄存器标识包括源寄存器标识和目的寄存器标识;所述源寄存器标识用于表征源寄存器,所述源寄存器为存储执行向量移位操作时被操作的源元素的寄存器;所述目的寄存器标识用于表征目的寄存器,所述目的寄存器为存储执行所述向量移位操作后得到的目标元素的寄存器;所述移位参数用于指示对所述源元素执行向量移位操作时所依据的规则。
35.可选地,源寄存器的数量可以为一个,也可以为两个,即源元素来源于一个或两个寄存器,具体地,对于源寄存器的数量可以根据业务需求而设置,本技术实施例对此不加以限制。
36.可选地,对接收的指令进行译码,获取该指令中包含的移位参数;该移位参数用于指示对源元素执行向量移位操作时所依据的规则,在本示例中,移位参数可以包括移位量和操作码等参数。可选地,操作码为通过二进制方式表示的代码,或者操作码为可以转换为二进制代码的标识符。
37.在对指令进行译码后,执行步骤102。
38.步骤102:执行所述指令,以根据所述移位参数对从所述源寄存器获取的源元素执行向量移位操作,并获取所述向量移位操作后的目标元素。
39.本技术实施例中,在cpu接收到用于执行向量移位操作的指令之后,可以由cpu执行该指令,以根据移位参数对从源寄存器内获取的源元素执行向量移位操作,并获取到向量移位操作后的目标元素。
40.在获取到执行向量移位操作后的目标元素之后,执行步骤103。
41.步骤103:将所述目标元素写入所述目的寄存器。
42.本技术实施例中,在获取到向量移位操作后的目标元素之后,可以将目标元素写入目的寄存器。
43.可选地,可以根据移位参数确定移位量和移位运算规则,并根据移位量和移位运
算规则执行向量移位操作,具体地,可以结合下述具体实现方式进行详细描述。
44.参照图2,示出了本技术实施例提供的一种目标元素获取方法的步骤流程图,该目标元素获取过程包括以下步骤:
45.步骤201:根据所述移位参数,确定移位量和移位运算规则;其中,所述执行向量移位操作的源元素为至少一个。
46.本技术实施例中,源寄存器的数量可以为一个,也可以为多个,目的寄存器的数量为一个,源寄存器标识与目的寄存器标识相同或不相同;源元素的数据类型为半字、字、双字、四字中的任一种。移位量可以用于指示执行向量移位运算时被操作源元素的移位位数;移位量来自于立即数或者移位量寄存器,立即数为移位参数中的由操作码定义的参数,立即数的取值可以参考源元素的数据类型,数据类型由上述操作码定义,移位量寄存器为用于存储移位量的寄存器;当移位量来自于移位量寄存器时,移位量为一组数据,如移位量可以通过包含不同位表达针对不同源元素的移位情况。移位运算规则是指对源元素要执行的一种或多种运算。
47.在根据移位参数确定出移位量和移位运算规则之后,执行步骤202。
48.步骤202:根据所述移位量和所述移位运算规则,对所述源寄存器中的源元素执行相应的移位运算,生成移位运算结果。
49.本技术实施例中,移位运算规则是指用于对源寄存器内的元素进行移位操作方法和/或约束条件。
50.在根据移位量和移位运算规则对源寄存器中的源元素执行相应的移位运算生成移位运算结果之后,执行步骤203。
51.步骤203:将所述移位运算结果确定为目标元素。
52.本技术实施例中,在移位参数中可以包括操作码,该操作码可以用于指示从源寄存器内选取源元素,以及目标元素在目的寄存器中的存储方式,具体地向量移位运算过程可以结合下述实现方式进行详细描述。
53.参照图3,示出了本技术实施例提供的一种移位运算结果生成方法的步骤流程图,该移位运算结果生成过程包括以下步骤:
54.步骤301:根据所述操作码,从所述源寄存器中选取执行所述向量移位运算的源元素,并将选取的所述源元素确定为被操作数。
55.本技术实施例中,移位参数可以包括移位量和操作码。移位量可以用于指示执行向量移位运算时被操作源元素的移位位数。操作码可以用于表征对源寄存器中源元素和目的寄存器中目标元素所执行的移位运算规则。
56.可选地,所述指令格式为“操作码目的寄存器,源寄存器,移位量”。示例性地,所述指令可以表示为“[x]vssr.{b.h/h.w/w.d/d.q/bu.h/hu.w/wu.d/du.q}vd/xd,vj/xj,ui”;其中,[x]vssr表示操作码中的指令名称,[x]为可选项,根据寄存器的类型确定,{b.h/h.w/w.d/d.q/bu.h/hu.w/wu.d/du.q}中“.”之前部分表示操作码中目标元素的数据类型,“.”之后部分表示操作码中源元素的数据类型,b表示字节,h表示半字,w表示字,d表示双字,q表示四字,u表示无符号;vd/xd表示目的寄存器,vj/xj表示源寄存器,同时,vd/xd还可以同时表示源寄存器,vj和vd为位数相同的寄存器,xj和xd为位数相同的寄存器;ui表示立即数,即立即数即为移位量。示例性地,所述指令还可以表示为“[x]vssr.{b.h/h.w/w.d/d.q/
bu.h/hu.w/wu.d/du.q}vd/xd,vj/xj,vk/xk”;其中,[x]vssr、{b.h/h.w/w.d/d.q/bu.h/hu.w/wu.d/du.q}、vd/xd和vj/xj表示的含义同上一示例,vk/xk表示移位量寄存器。
[0057]
在根据操作码从源寄存器中选取执行向量移位元素的源元素并将选取的源元素确定为被操作数之后,执行步骤302。
[0058]
步骤302:根据所述操作码,对所述被操作数执行相应的移位运算,生成移位运算结果。
[0059]
本技术实施例中,在确定被操作数之后,可以根据操作码对被操作数执行相应的移位运算,以生成移位运算结果,该移位运算结果中包含的元素即为目标元素。
[0060]
在生成移位运算结果之后,执行步骤401。
[0061]
参照图4,示出了本技术实施例提供的一种目标元素存储方法的步骤流程图,该目标元素存储过程包括以下步骤:
[0062]
步骤401:根据所述操作码,确定所述目标元素在所述目的寄存器中的存储方式。
[0063]
在本技术实施例中,存储方式是指将目标元素存储至目的寄存器的规则。可选地,存储方式主要表示目标元素存储至目的寄存器的位置规则;示例性地,存储方式可以包括将目标元素中的高半部分数据存储至目的寄存器该目标元素所在位置的高半部分,或者,将目标元素中的低半部分数据存储至目的寄存器该目标元素所在位置的低半部分,或者,将目标元素中指定范围数据存储至目的寄存器该目标元素所在位置的指定地址范围内。
[0064]
在根据操作码确定出目标元素在目的寄存器中的存储方式之后,执行步骤402。
[0065]
步骤402:按照所述存储方式,将所述目标元素存储至所述目的寄存器中。
[0066]
本技术实施例中,在获取到移位运算结果之后,可以将移位运算结果确定为目标元素,在根据操作码确定出目标元素在目的寄存器中的存储方式之后,可以将目标元素存储至目的寄存器中。
[0067]
现有技术中,若于实现向量移位操作,需要根据向量移位需求,通过多条指令实现向量移位;向量移位需求根据实际应用确定。例如,向量移位需求为针对两个向量寄存器中被操作数右移截断至半宽,那么至少需要两条右移指令、两条截断指令和一条饱和至半宽指令才能实现该向量移位需求。本技术实施例中,实现了包含移位参数的指令,不同的移位参数能够实现不同移位需求,进而采用一条移位指令能够实现多种向量移位需求有效降低了系统开销,提高了特定功能向量移位的执行效率。
[0068]
下面通过实施例二至实施例四详细描述不同操作码和不同移位量情况下的向量移位指令实现过程。
[0069]
实施例二
[0070]
本技术实施例中,操作码可以为第一类型向量操作码,源寄存器包括第一源寄存器和第二源寄存器;可以通过第一类型向量操作码从源寄存器内获取源元素,并对源元素执行向量移位操作,如图5所示,向量移位指令的处理方式可以包括:
[0071]
步骤501:接收指令,所述指令包括:寄存器标识和移位参数。
[0072]
本技术实施例中,指令的含义和指令包含的参数如实施例一所述,在此不再赘述。
[0073]
可选地,源寄存器的数量为两个,即源元素来自两个不同的寄存器;当所述源寄存器数量为多个时,所有所述源寄存器中每一个源寄存器标识均与所述目的寄存器标识不同;或者,当所述源寄存器数量为多个时,所有所述源寄存器中存在一个源寄存器标识与所
述目的寄存器标识相同。
[0074]
可选地,对接收的指令进行译码,获取该指令中包含的移位参数;该移位参数用于指示对源元素执行向量移位操作时所依据的规则,在本示例中,移位参数可以包括移位量和操作码等参数。
[0075]
步骤502:根据所述移位参数,确定移位量和移位运算规则。
[0076]
本技术实施例中,所述执行向量移位操作的源元素为至少一个,所述移位量为立即数,所述移位运算规则为操作码,所述操作码为第一类型向量操作码;所述立即数为大于等于0的正整数。
[0077]
可选地,所述第一类型向量操作码为通过二进制方式表示的代码,或者操作码为可以转换为二进制代码的标识符。指令格式为“操作码目的寄存器,源寄存器,移位量”。当所述操作码为第一类型向量操作码时,在具体实现中,指令可以表示为“vssr
第一类型
.{b.h/h.w/w.d/d.q/bu.h/hu.w/wu.d/du.q}vd,vj,ui
第一类型”;vssr
第一类型
为第一类型向量操作码中的指令名称,{b.h/h.w/w.d/d.q/bu.h/hu.w/wu.d/du.q}为第一类型操作码中用于指示源元素和目标元素的数据类型的参数,b表示字节,h表示半字,w表示字,d表示双字,q表示四字,u表示无符号;vd同时表示目的寄存器和源寄存器,vj表示源寄存器;ui
第一类型
表示当操作码为第一类型向量操作码时,指令中包含的立即数。示例性地,vssr
第一类型1
.b.h为可以转换为二进制形式的第一类型向量操作码,如将vssr
第一类型1
.b.h转换为011100110101000001二进制形式的第一类型向量操作码。
[0078]
进一步地,ui
第一类型
由操作码定义,ui
第一类型
的取值可以参考源元素和目标元素的数据类型;该ui
第一类型
为处于预设范围内(即为ui
第一类型
∈[最小值,最大值])的参数,即ui
第一类型
的最小值根据源元素和目标元素的数据类型来确定,ui
第一类型
的最大值为无穷大。示例性地,当第一类型向量操作码为vssr
第一类型1
.b.h时,ui
第一类型
最小值为ui4;当第一类型向量操作码为vssr
第一类型1
.h.w时,ui
第一类型
最小值为ui5;当第一类型向量操作码为vssr
第一类型1
.w.d时,ui
第一类型
最小值为ui6;当第一类型向量操作码为vssr
第一类型1
.d.q时,ui
第一类型
最小值为ui7;当第一类型向量操作码为vssr
第一类型1
.bu.h时,ui
第一类型
最小值为ui4;当第一类型向量操作码为vssr
第一类型1
.hu.w时,ui
第一类型
最小值为ui5;当第一类型向量操作码为vssr
第一类型1
.wu.d时,ui
第一类型
最小值为ui6;当第一类型向量操作码为vssr
第一类型1
.du.q时,ui
第一类型
最小值为ui7。由此可见,当源元素数据类型为半字,且目标元素数据类型为字节时,ui
第一类型
∈[ui4,无穷大];当源元素数据类型为字,且目标元素数据类型为半字时,ui
第一类型
∈[ui5,无穷大];当源元素数据类型为双字,且目标元素数据类型为字时,ui
第一类型
∈[ui6,无穷大];当源元素数据类型为四字,且目标元素数据类型为双字时,ui
第一类型
∈[ui7,无穷大];其中,该目标元素可以为无符号数,也可以为有符号数。
[0079]
在根据移位参数确定出移位量和移位运算规则之后,执行步骤503。
[0080]
步骤503:根据所述第一类型向量操作码,将第一源寄存器中的所有源元素确定为一被操作数,将第二源寄存器中的所有源元素确定为另一被操作数。
[0081]
本技术实施例中,根据所述第一类型向量操作码,可以将第一源寄存器中的全部元素作为源元素,或者将第一源寄存器中的部分元素作为源元素;也可以将第二源寄存器中的全部元素作为源元素,或者将第二源寄存器中的部分元素作为源元素。示例性地,第一源寄存器为寄存器vd,第二源寄存器为寄存器vj,可以将第一寄存器vd中的所有元素确定
为源元素,同时将第二寄存器vj中的元素确定为源元素,并将第一源寄存器中所有的源元素确定为一被操作数,同时,将第二源寄存器中所有的源元素确定为另一被操作数。
[0082]
可选地,分别从第一源寄存器和第二源寄存器中选取的源元素数据类型相同,且源元素的数据类型为半字、字、双字、四字中的任一种。
[0083]
在根据第一类型向量操作码,将所述第一源寄存器中得到的源元素所述第二源寄存器确定为被操作数;之后,执行步骤504。
[0084]
步骤504:根据所述第一类型向量操作码,将所述第一源元素和所述第二源元素拼接后,生成第一拼接向量。
[0085]
本技术实施例中,将第一源寄存器中的被操作数和第二源寄存器中的被操作数左右拼接后,生成第一拼接向量;其中,第一源寄存器中的被操作数和第二源寄存器中的被操作数进行左右拼接的位置设置,根据指令中源寄存器标识的位置确定,即当第一源寄存器标识为指令中紧随第一类型向量操作码的源寄存器标识,第二源寄存器标识为指令中位于第一源寄存器标识之后的源寄存器标识时,第一源寄存器中的被操作数位于左侧,第二源寄存器中的被操作数位于右侧,生成第一拼接向量;当第二源寄存器标识为指令中紧随第一类型向量操作码的源寄存器标识,第一源寄存器标识为指令中位于第一源寄存器标识之后的源寄存器标识时,第二源寄存器中的被操作数位于左侧,第一源寄存器中的被操作数位于右侧,生成第一拼接向量。示例性地,当指令格式为“第一类型向量操作码vd,vj,立即数”时,表示第一源寄存器为vd,第二源寄存器为vj,目的寄存器为vd,那么第一源寄存器中的所有源元素整体视为一被操作数,记为被操作数
vd
,第二源寄存器中的所有源操作数整体被视为另一被操作数,记为被操作数数
vj
,第一拼接向量为“被操作数
vd
被操作数
vj”。
[0086]
可选地,第一源寄存器中的被操作数和第二源寄存器中的被操作数还可以元素为单位进行交叉拼接,生成第一拼接向量;其中,在交叉拼接时,在源寄存器中位置信息相同的源元素为一组进行交叉,不同组在第一拼接向量中的位置根据源元素的地址从高到低依次排列;不同寄存器中每两个元素为一组进行拼接时的左右位置设置,根据指令中源寄存器标识的位置确定,此处与上例相同,在此不再赘述。
[0087]
示例性地,第一源寄存器中的被操作数包括“源元素1(位置信息为a)、源元素2(位置信息为b)和源元素3(位置信息为c)”,第二源寄存器中的被操作数为“源元素4(位置信息为a)、源元素5(位置信息为b)和源元素6(位置信息为c)”,假设第一源元素所对应的源寄存器标识位于指令中左侧的位置,第二源元素所对应的源寄存器标识位于指令中右侧的位置,左侧和右侧为两个源寄存器位置标识的相对位置;将两个被操作数进行左右拼接得到的结果可以为“源元素1源元素2源元素3源元素4源元素5源元素6”;或者,将位置信息同为a的源元素1和源元素4视为一组进行交叉拼接,将位置信息同为b的源元素2和源元素5视为一组进行交叉拼接,将位置信息同为c的源元素3和源元素6视为一组进行交叉拼接,最终得到的第一拼接向量为“源元素1源元素4源元素2源元素5源元素3源元素6”。
[0088]
可选地,若第一为n位,第二源寄存器中的被操作数为n位,则第一拼接向量为2n位;n为大于0的正整数。第一源寄存器中的被操作数的位数可以根据第一源寄存器中包含的元素与该元素数据类型对应的比特位确定;第二源寄存器中的被操作数的位数可以根据第二源寄存器中包含的元素与该元素数据类型对应的比特位确定。
[0089]
在生成第一拼接向量之后,执行步骤505。
[0090]
步骤505:根据所述立即数,对所述第一拼接向量中每个源元素均进行移位舍入饱和至半宽操作,生成第一初始移位运算结果。
[0091]
本技术实施例中,第一拼接向量中包含多个元素(源元素);根据立即数,对第一拼接向量中每个元素均进行移位舍入饱和至半宽操作,移位量即为立即数,以生成第一初始移位运算结果;其中,移位操作为右移操作;所述移位操作包括逻辑移位和算术移位;饱和至半宽表示对被处理数据,按照其数据位宽减半后的二进制数据所能表达的取值范围进行数值饱和处理,处理后的数据与处理前的宽度相关;可选地,处理后的数据仍保留与处理前的宽度的倍数(如1/2)。
[0092]
可选地,对所述第一拼接向量中每个源元素均进行移位,每个元素的移位量相同,均为立即数。示例性地,如果第一拼接向量包含元素1、元素2和元素3,移位量为ui4,那么对第一拼接向量进行移位即为分别对元素1移位ui4位,对元素2移位ui4位,对元素3移位ui4位;元素包含多个位,对元素进行右移即为将元素中每一位向右移动预设位,舍弃元素中右移出的位数,并在元素中左侧空余的位置上设置指定值;其中,该预设位和指定值都是根据具体情况设置的值。
[0093]
可选地,对第一拼接向量中每个源元素均进行移位舍入操作包含四种舍入情况:向偶舍入、向零舍入、向上舍入和向下舍入。较佳地,对第一拼接向量进行移位舍入操作为,对第一拼接向量进行移位向上舍入操作。
[0094]
可选地,针对任意一元素x,其位数为2n,移位量为sa,对该元素x执行逻辑右移舍入饱和至半宽操作,包括:
[0095]
第一步,根据移位量,得到运算结果a;具体来说,当移位量为0时,得到的运算结果a即为元素x;当移位量为大于0的整数时,设置中间运算结果,该中间运算结果的低位为元素x的自sa位至第2n-1位数据、剩余sa位的高位均为0,该中间运算结果的位数为2n;将中间运算结果与元素x的sa-1位进行相加,得到运算结果a。其中,n为大于0的正整数,sa为立即数。
[0096]
第二步,获取运算结果的值,将该值和指定数据进行比较,根据比较结果得到最终运算结果。具体来说,比较运算结果a的值和2
n-1
的大小,若运算结果a大于2
n-1
,则最终运算结果为n位均为1的数据;否则,最终运算结果为运算结果a的第0位至第n-1位。元素x为有符号向量或者无符号向量。
[0097]
可选地,针对任意一元素x,其位数为2n,移位量为sa,对该元素x执行算术右移舍入饱和至半宽操作,包括:
[0098]
第一步,根据移位量,得到运算结果a;具体来说,当移位量为0时,得到的运算结果a即为元素x;当移位量为大于0的整数时,设置中间运算结果,该中间运算结果的低位为元素x的自sa位至第2n-1位数据、剩余sa位的高位均为元素x中2n-1位的数据,该中间运算结果的位数为2n;将中间运算结果a与元素x的sa-1位进行相加,得到运算结果a。其中,n为大于0的正整数,sa为立即数。
[0099]
第二步,获取运算结果的值,将该值和指定数据进行比较,根据比较结果得到最终运算结果。具体来说,分别比较运算结果a的值和2
n-1
的大小,以及运算结果a的值和-2
n-1
的大小;若运算结果a大于2
n-1
,则最终运算结果为最高位为0,其余低位为1,最终运算结果的位数为n;若运算结果a小于-2
n-1
,则最终运算结果为最高位为1,其余低位为0,最终运算结
果的位数为n;若运算结果a小于2
n-1
且大于-2
n-1
,则最终运算结果为运算结果a的第0位至第n-1位,最终运算结果的位数为n。
[0100]
其中,上述对舍入后数据饱和至半宽包括对舍入后数据有符号饱和至半宽和对舍入后数据无符号饱和至半宽。
[0101]
结合本技术实施例,上述示例中的最终运算结果即为本技术实施例中的第一初始移位运算结果中的元素,运算结果a即为本技术实施例中的第一拼接向量中的元素。
[0102]
在根据立即数将第一拼接向量进行移位舍入饱和至半宽操作生成第一初始移位运算结果之后,执行步骤506。
[0103]
步骤506:对所述第一初始移位运算结果执行取位操作,生成移位运算结果。
[0104]
本技术实施例中,所述取位操作包括对所述第一初始移位运算结果中包含的每个元素均取连续低半部分数据,对所述第一初始移位运算结果中包含的每个元素均取连续高半部分数据,对所述第一初始移位运算结果中包含的每个元素均取中间连续指定位元素数据,对所述第一初始移位运算结果中包含的每个元素均取非连续指定位数据中的任意一种。
[0105]
在对第一初始移位运算结果执行取位操作生成移位运算结果之后,执行步骤507。
[0106]
步骤507:将所述移位运算结果中的元素作为目标元素,依次写入所述目的寄存器中。
[0107]
本技术实施例中,目标元素的数据类型根据源元素的数据类型确定;可选地,目标元素的数据类型所对应比特位数为源元素数据类型所对应比特位数的一半。示例性地,当源元素的数据类型为半字时,目标元素的数据类型为字节;当源元素的数据类型为字时,目标元素的数据类型为半字;当源元素的数据类型为双字时,目标元素的数据类型为字;当源元素的数据类型为四字时,目标元素的数据类型为双字。源元素可以为有符号数据,也可以为无符号数据。
[0108]
可选地,在确定目标元素之后,将目标元素依次写入目的寄存器的方式,包括:确定每个目标元素在第一初始移位运算结果中的位置信息;将目标元素依次写入目的寄存器中与该目标元素对应的位置信息相匹配的位置。其中,该位置信息表示元素在第一初始移位运算结果中的顺序;将目标元素依次写入目的寄存器中与该目标元素对应的位置信息相匹配的位置,即为,将目标元素从高位到低位依次写入目的寄存器中第n/2-1位至第0位的位置,或者将目标元素从低位到高位依次写入目的寄存器中第0位至第n/2-1的位置。
[0109]
结合本技术实施例中根据第一类型向量操作码获取目标元素的过程,第一类型向量操作码还可以包括四种(即第一向量操作码、第二向量操作码、第三向量操作码和第四第一类型向量操作码),以分别指示不同的向量移位操作,具体地,可以结合下述四种具体实现方式进行详细描述。
[0110]
在本技术的第一种具体实现方式中,所述第一类型向量操作码为第一向量操作码,具体地处理方式可以包括:
[0111]
子步骤a1:根据所述立即数,对所述第一拼接向量中每个源元素均进行逻辑右移舍入有符号饱和至半宽操作,生成第一初始移位运算结果。
[0112]
本技术实施例中,第一类型向量操作码可以为第一向量操作码,该第一向量操作码可以用于指示对第一拼接向量进行逻辑右移舍入有符号饱和至半宽操作;所述第一拼接
向量为2n位,n为大于0的正整数,较佳地,n为128位。
[0113]
可选地,逻辑右移是指不考虑符号位的元素移动方式,即元素每右移一位,最高位补一位0即可。有符号饱和是指针对16位的数按照8位的数有符号值的范围(-128到 127)进行饱和。半宽是指位宽段的一半。针对任意一向量,执行逻辑右移有符号饱和至半宽操作的过程前文已经描述,在此不再赘述。
[0114]
当第一类型向量操作码为第一向量操作码时,可以根据立即数对第一拼接向量中每个源元素均进行逻辑右移舍入有符号饱和至半宽操作,以生成第一初始移位运算结果。
[0115]
子步骤a2:分别选取所述第一初始移位运算结果包含的每个元素中连续低半部分数据,将选取操作后的所述元素确定为移位运算结果。
[0116]
本技术实施例中,在生成第一初始移位运算结果之后,可以分别选取第一初始移位运算结果包含的每个元素中连续低半部分数据,并将选取操作后的连续低半部分元素确定为移位运算结果。
[0117]
可选地,当第一源寄存器中包含的第一源元素和第二源元素均为n/2位,第二源寄存器中包含的第三源元素和第四源元素为n/2位时,第一初始移位运算结果为n位,则移位运算结果即为第一初始移位运算结果自第0位至第n/2-1位所表示的数据。
[0118]
进一步地,对移位运算结果中每个目标元素分别取低半部分,依次写入目的寄存器中每个目标元素分别对应的存储位置。示例性地,第一源寄存器为向量寄存器vd,第二源寄存器为向量寄存器vj,向量寄存器vd中包含第一源元素和第二源元素,向量寄存器vj包含第三源元素和第四源元素,第一源元素、第二源元素、第三源元素和第四源元素的位数均为n/2,通过向量移位指令可以将第一源元素和第二源元素左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个源元素进行逻辑右移舍入有符号饱和至半宽操作,移位量来自于立即数,针对第一源元素的移位结果取低半部分元素作为一目标元素、针对第二源元素的移位结果取低半部分元素作为一目标元素、针对第三源元素的移位结果取低半部分元素作为一目标元素、针对第四源元素的移位结果取低半部分元素作为一目标元素依次写入向量寄存器vd中。
[0119]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0120]
在本技术的第二种具体实现方式中,所述第一类型向量操作码为第二向量操作码,具体地处理方式可以包括:
[0121]
子步骤b1:根据所述立即数,对所述第一拼接向量中每个源元素均进行算术右移舍入有符号饱和至半宽操作,生成第一初始移位运算结果。
[0122]
本技术实施例中,第一类型向量操作码可以为第二向量操作码,第二向量操作码可以用于指示对第一拼接向量进行算术右移舍入有符号饱和至半宽操作;所述第一拼接向量为2n位,n为大于0的正整数,较佳地,n为128位。
[0123]
可选地,算术右移是指需要考虑符号位的元素移动方式,即元素每右移一位,若符号位为1,则在左边最高位补1,否则,在左边最高位补0。有符号饱和和半宽含义与前文描述相同,在此不再赘述。针对任意一向量,执行算术右移有符号饱和至半宽操作的过程前文已经描述,在此不再赘述。
[0124]
当第一类型向量操作码为第三向量操作码时,可以根据立即数对第一拼接向量中
每个源元素均进行算术右移舍入有符号饱和至半宽操作,以生成第一初始移位运算结果。
[0125]
在根据立即数将第一拼接向量进行算术右移舍入有符号饱和至半宽操作生成第一初始移位运算结果之后,执行子步骤b2。
[0126]
子步骤b2:分别选取所述第一初始移位运算结果包含的每个元素中连续低半部分数据,将选取操作后的所述元素确定为移位运算结果。
[0127]
本技术实施例中,在生成第一初始移位运算结果之后,可以分别选取第一初始移位运算结果包含的每个元素中连续低半部分数据,并将选取操作后的连续低半部分元素确定为移位运算结果。
[0128]
可选地,当第一源寄存器中包含的第一源元素和第二源元素均为n/2位,第二源寄存器中包含的第三源元素和第四源元素均为n/2位时,第一初始移位运算结果为n位,则移位运算结果即为第一初始移位运算结果自第0位至第n/2-1位所表示的数据。
[0129]
进一步地,对移位运算结果中每个目标元素分别取低半部分,依次写入目的寄存器中每个目标元素分别对应的存储位置。示例性地,第一源寄存器为向量寄存器vd,第二源寄存器为向量寄存器vj,向量寄存器vd中包含第一源元素和第二源元素,向量寄存器vj包含第三源元素和第四源元素,第一源元素、第二源元素、第三源元素和第四源元素的位数均为n/2,通过向量移位指令可以将第一源元素和第二源元素左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个源元素进行算术右移舍入有符号饱和至半宽操作,移位量来自于立即数,针对第一源元素的移位结果取低半部分元素作为一目标元素、针对第二源元素的移位结果取低半部分元素作为一目标元素、针对第三源元素的移位结果取低半部分元素作为一目标元素、针对第四源元素的移位结果取低半部分元素作为一目标元素依次写入向量寄存器vd中。
[0130]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0131]
在本技术的第三种具体实现方式中,所述第一类型向量操作码为第三向量操作码,具体地处理方式可以包括:
[0132]
子步骤c1:根据所述立即数,对所述第一拼接向量中每个源元素均进行逻辑右移舍入无符号饱和至半宽操作,生成第一初始移位运算结果。
[0133]
本技术实施例中,第一类型向量操作码可以为第三向量操作码,第三向量操作码可以用于指示将第一拼接向量进行逻辑右移舍入无符号饱和至半宽操作;所述第一拼接向量为2n位,n为大于0的正整数,较佳地,n为128位。
[0134]
可选地,舍入无符号饱和是指针对16位的数按照8位的数有符号值的范围(0~255)进行饱和。逻辑右移和饱和至半宽含义与前文描述相同,在此不再赘述。针对任意一向量,执行逻辑右移无符号饱和至半宽操作的过程前文已经描述,在此不再赘述。
[0135]
当第一类型向量操作码为第三向量操作码时,可以根据立即数对第一拼接向量中每个源元素均进行逻辑右移舍入无符号饱和至半宽操作,以生成第一初始移位运算结果。
[0136]
在根据立即数将第一拼接向量进行逻辑右移舍入无符号饱和至半宽操作生成第一初始移位运算结果之后,执行子步骤c2。
[0137]
子步骤c2:分别选取所述第一初始移位运算结果包含的每个元素中连续低半部分数据,将选取操作后的所述元素确定为移位运算结果。
[0138]
本技术实施例中,在生成第一初始移位运算结果之后,可以分别选取第一初始移位运算结果包含的每个元素中连续低半部分数据,并将选取操作后的连续低半部分元素确定为移位运算结果。
[0139]
可选地,当第一源寄存器中包含的第一源元素和第二源元素均为n/2位,第二源寄存器中包含的第三源元素和第四源元素均为n/2位时,第一初始移位运算结果为n位,则移位运算结果即为第一初始移位运算结果自第0位至第n/2-1位所表示的数据。
[0140]
进一步地,对移位运算结果中每个目标元素分别取低半部分,依次写入目的寄存器中每个目标元素分别对应的存储位置。示例性地,第一源寄存器为向量寄存器vd,第二源寄存器为向量寄存器vj,向量寄存器vd中包含第一源元素和第二源元素,向量寄存器vj包含第三源元素和第四源元素,第一源元素、第二源元素、第三源元素和第四源元素的位数均为n/2,通过向量移位指令可以将第一源元素和第二源元素左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个源元素进行逻辑右移舍入无符号饱和至半宽操作,移位量来自于立即数,针对第一源元素的移位结果取低半部分元素作为一目标元素、针对第二源元素的移位结果取低半部分元素作为一目标元素、针对第三源元素的移位结果取低半部分元素作为一目标元素、针对第四源元素的移位结果取低半部分元素作为一目标元素依次写入向量寄存器vd中。
[0141]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0142]
在本技术的第四种具体实现方式中,所述第一类型向量操作码为第四第一类型向量操作码,具体地处理方式可以包括:
[0143]
子步骤d1:根据所述立即数,对所述第一拼接向量中每个源元素均进行算术右移舍入无符号饱和至半宽操作,生成第一初始移位运算结果。
[0144]
本技术实施例中,第一类型向量操作码可以为第四第一类型向量操作码,第四第一类型向量操作码可以用于指示对第一拼接向量进行算术右移舍入无符号饱和至半宽操作;所述第一拼接向量为2n位,n为大于0的正整数,较佳地,n为128位。
[0145]
可选地,算术右移、舍入、半宽含义与前文描述相同,在此不再赘述。逻辑右移和饱和至半宽含义与前文描述相同,在此不再赘述。针对任意一向量,执行算术右移无符号饱和至半宽操作的过程前文已经描述,在此不再赘述。
[0146]
当第一类型向量操作码为第四第一类型向量操作码时,可以根据立即数对第一拼接向量中每个源元素均进行算术右移舍入无符号饱和至半宽操作,以生成第一初始移位运算结果。
[0147]
在根据立即数将第一拼接向量进行算术右移舍入无符号饱和至半宽操作生成第一初始移位运算结果之后,执行子步骤d2。
[0148]
子步骤d2:分别选取所述第一初始移位运算结果包含的每个元素中连续低半部分数据,将选取操作后的所述元素确定为移位运算结果。
[0149]
本技术实施例中,在生成第一初始移位运算结果之后,可以选取第一初始移位运算结果包含的每个元素中连续低半部分数据,并将选取操作后的连续低半部分元素确定为移位运算结果。
[0150]
可选地,当第一源寄存器中包含的第一源元素和第二源元素均为n/2位,第二源寄
存器中包含的第三源元素和第四源元素均为n/2位时,第一初始移位运算结果为n位,则移位运算结果即为第一初始移位运算结果自第0位至第n/2-1位所表示的数据。
[0151]
进一步地,对移位运算结果中每个目标元素分别取低半部分,依次写入目的寄存器中每个目标元素分别对应的存储位置。示例性地,第一源寄存器为向量寄存器vd,第二源寄存器为向量寄存器vj,向量寄存器vd中包含第一源元素和第二源元素,向量寄存器vj包含第三源元素和第四源元素,第一源元素、第二源元素、第三源元素和第四源元素的位数均为n/2,通过向量移位指令可以将第一源元素和第二源元素左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个源元素进行算术右移舍入无符号饱和至半宽操作,移位量来自于立即数,针对第一源元素的移位结果取低半部分元素作为一目标元素、针对第二源元素的移位结果取低半部分元素作为一目标元素、针对第三源元素的移位结果取低半部分元素作为一目标元素、针对第四源元素的移位结果取低半部分元素作为一目标元素依次写入向量寄存器vd中。
[0152]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0153]
采用本技术技术方案,通过执行包含第一向量操作码和立即数的指令,实现了两个源元素的逻辑移位舍入有符号饱和至半宽等一系列操作;通过执行包含第二向量操作码和立即数的指令,实现了两个源元素的算术移位舍入有符号饱和至半宽等一系列操作;通过执行包含第三向量操作码和立即数的指令,实现了两个源元素的逻辑移位舍入无符号饱和至半宽等一系列操作;通过执行包含第四第一类型向量操作码和立即数的指令,实现了两个源元素的算术移位舍入无符号饱和至半宽等一系列操作。因而,采用本发明技术方案,能够通过不同的移位参数实现不同的移位需求,进而采用一条移位指令能够实现多种向量移位需求有效降低了系统开销,提高了特定功能向量移位的执行效率。
[0154]
实施例三
[0155]
本技术实施例中,操作码可以为第二类型向量操作码,源寄存器包括第一源寄存器和第二源寄存器;该第二类型向量操作码可以用于指示分别在第一源寄存器和第二源寄存器中执行选取操作,并执行相应的向量移位操作,如图6所示,向量移位指令的处理方法可以包括:
[0156]
步骤601:接收指令,所述指令包括:寄存器标识和移位参数。
[0157]
本技术实施例中,指令的含义和指令包含的参数如实施例一和实施例二所述,在此不再赘述。
[0158]
可选地,源寄存器的数量为两个,即源元素来自两个不同的寄存器;当所述源寄存器数量为多个时,所有所述源寄存器中每一个源寄存器标识均与所述目的寄存器标识不同;或者,当所述源寄存器数量为多个时,所有所述源寄存器中存在一个源寄存器标识与所述目的寄存器标识相同。相较于实施例二来讲,本技术实施例中源寄存器和目的寄存器的位数均为实施例二中所述源寄存器和目的寄存器位数的2倍;示例性地,若本技术实施例中源寄存器的位数为256位,则实施例二中源寄存器的位数为128位。
[0159]
可选地,对接收的指令进行译码,获取该指令中包含的移位参数;该移位参数用于指示对源元素执行向量移位操作时所依据的规则,在本示例中,移位参数可以包括移位量和操作码等参数。
[0160]
步骤602:根据所述移位参数,确定移位量和移位运算规则。
[0161]
本技术实施例中,所述执行向量移位操作的源元素为至少一个,所述移位量为立即数,所述移位运算规则为操作码,所述操作码为第二类型向量操作码;所述立即数为大于等于0的正整数。
[0162]
可选地,所述第二类型向量操作码为通过二进制方式表示的代码,或者操作码为可以转换为二进制代码的标识符。指令格式为“操作码目的寄存器,源寄存器,移位量”。当所述操作码为第二类型向量操作码时,在具体实现中,指令可以表示为“xvssr
第二类型
.{b.h/h.w/w.d/d.q/bu.h/hu.w/wu.d/du.q}xd,xj,ui
第二类型”;xvssr
第二类型
为第二类型向量操作码中的指令名称,{b.h/h.w/w.d/d.q/bu.h/hu.w/wu.d/du.q}为第二操作码中用于指示源元素和目标元素的数据类型的参数,b表示字节,h表示半字,w表示字,d表示双字,q表示四字;u表示无符号;xd同时表示目的寄存器和源寄存器,xj表示源寄存器;ui
第二类型
表示当操作码为第二类型向量操作码时,指令中包含的立即数。示例性地,xvssr
第二类型1
.b.h为可以转换为二进制形式的第二类型向量操作码,如将xvssr
第二类型1
.b.h转换为011101110101000001二进制形式的第二类型向量操作码。
[0163]
进一步地,ui
第二类型
为根据源元素和目标元素的数据类型来定义的参数;该ui
第二类型
的取值范围,取值方式均与实施例二中ui
第一类型
相同,在此不再赘述。
[0164]
在根据移位参数确定出移位量和移位运算规则之后,执行步骤603。
[0165]
步骤603:根据所述第二类型向量操作码,分别在第一源寄存器和第二源寄存器中执行选取操作,得到第一被操作数和第二被操作数。
[0166]
本技术实施例中,根据所述第二类型向量操作码,在第一源寄存器执行选取操作,得到第一被操作数,以及在第二源寄存器中执行选取操作,得到第二被操作数;其中,第一被操作数和第二被操作数数据类型相同,且第一被操作数中源元素和第二被操作数中元素的数据类型为半字、字、双字、四字中的任一种。
[0167]
可选地,所述选取操作包括对所述第一源寄存器和第二源寄存器中每个元素均选取连续低半部分数据、对所述第一源寄存器和第二源寄存器中每个元素均选取连续高半部分数据、对所述第一源寄存器和第二源寄存器中每个元素均选取中间连续指定位数据、对所述第一源寄存器寄存器和第二源寄存器中每个元素均选取非连续指定位数据中的任意一种。
[0168]
可选地,对第一源寄存器和对第二源寄存器执行的选取操作相同。示例性地,例如,对第一源寄存器执行选取操作即为分别从第一源寄存器包含的每个元素中选取连续低半部分数据,同时对第二源寄存器执行选取操作即为分别对第二源寄存器包含的每个元素中选取连续低半部分元素;又如,对第一源寄存器执行选取操作即为分别从第一源寄存器包含的每个元素中选取连续高半部分元素,同时分别对第二源寄存器执行选取操作即为对第二源寄存器包含的每个元素中选取连续高半部分元素;再如,分别对第一源寄存器执行选取操作即为从第一源寄存器包含的每个元素中选取连续中间指定位元素,同时分别对第二源寄存器包含的每个元素中执行选取操作即为对第二源寄存器选取连续中间指定位元素;还如,分别对第一源寄存器执行选取操作即为从第一源寄存器包含的每个元素中选取非连续指定位元素,同时分别对第二源寄存器执行选取操作即为对第二源寄存器包含的每个元素中选取非连续指定位元素。
[0169]
在根据第二类型向量操作码分别在第一源寄存器和第二源寄存器中执行选取操作,得到第一被操作数和第二被操作数之后,执行步骤604。
[0170]
步骤604:将所述第一源寄存器中除所述第一被操作数之外的数据确定为第三被操作数,将所述第二源寄存器中除所述第二被操作数之外的数据确定为第四被操作数。
[0171]
本技术实施例中,第三被操作数和第四被操作数数据类型与第一被操作数和第二被操作数相同,且第三被操作数中源元素和第四被操作数中元素的数据类型为半字、字、双字、四字中的任一种。
[0172]
可选地,将第一源寄存器中除第一被操作数之外的数据确定为第三被操作数,并将第二源寄存器中除第二被操作数之外的数据确定为第四被操作数。示例性地,当第一被操作数为第一源寄存器包含的每个元素中连续低半部分的数据时,第三被操作数为第一源寄存器包含的每个元素中连续高半部分的数据;同理,第二被操作数为第一源寄存器每个元素中连续低半部分的元素,第四被操作数为第一源寄存器包含的每个元素中连续高半部分的元素。
[0173]
在得到第一被操作数、第二被操作数、第三被操作数和第四被操作数之后,执行步骤605。
[0174]
步骤605:将所述第一被操作数和第二被操作数进行拼接后,生成第二拼接向量,以及将第三被操作数和第四被操作数进行拼接后,生成第三拼接向量。
[0175]
本技术实施例中,将第一被操作数和第二被操作数左右拼接后,生成第二拼接向量;其中,第一被操作数和第二被操作数进行左右拼接的位置设置,根据指令中源寄存器标识的位置确定,即当第一源寄存器标识为指令中紧随第二类型向量操作码的源寄存器标识,第二源寄存器标识为指令中位于第一源寄存器标识之后的源寄存器标识时,由于第一被操作数来自第一源寄存器,第二被操作数来自第二源寄存器,因而第一被操作数位于左侧,第二被操作数位于右侧,生成第二拼接向量;当第二源寄存器标识为指令中紧随第二类型向量操作码的源寄存器标识,第一源寄存器标识为指令中位于第一源寄存器标识之后的源寄存器标识时,由于第一被操作数来自第一源寄存器,第二被操作数来自第二源寄存器,因而第二被操作数位于左侧,第一被操作数位于右侧,生成第二拼接向量。示例性地,当指令格式为“第二类型向量操作码vd,vj,立即数”时,表示第一源寄存器为vd,第二源寄存器为vj,目的寄存器为vd,那么第一被操作数来自vd(记为第一被操作数
vd
),第二源元素来自vj(记为第二被操作数
vj
),第二拼接向量为“第一被操作数
vd
第二被操作数
vj”;同理,当指令格式为“第二类型向量操作码vd,vj,立即数”时,表示第二源寄存器为vd,第一源寄存器为vj,目的寄存器为vd,那么第二被操作数来自vd(记为第二源元素
vd
),第一被操作数来自vj(记为第一源元素
vj
),第二拼接向量为“第一被操作数
vj
第二被操作数
vd”。关于第三被操作数和第四被操作数生成第三拼接向量的方式与上述第一被操作数和第二被操作数生成第二拼接向量的方式相同,在此不再赘述。
[0176]
可选地,第一被操作数和第二被操作数还可以以元素为单位进行交叉拼接,生成第二拼接向量,其中,在交叉拼接时,在源寄存器中地址相同的源元素为一组进行交叉,不同组在第二拼接向量中的位置根据源元素的地址从高到低依次排列;分别来自两个不同寄存器中一个元素为一组进行拼接时的左右位置设置,根据指令中源寄存器标识的位置确定,此处与上例相同,在此不再赘述。示例性地,第一被操作数包括“源元素1(地址为a)、源
元素2(地址为b)和源元素3(地址为c)”,第二被操作数为“源元素4(地址为a)、源元素5(地址为b)和源元素6(地址为c)”,将地址同为a的源元素1和源元素4视为一组进行交叉拼接,将地址同为b的源元素2和源元素5视为一组进行交叉拼接,将地址同为c的源元素3和源元素6视为一组进行交叉拼接,假设第一源元素所对应的源寄存器标识位于指令中左侧的位置,第二源元素所对应的源寄存器标识位于指令中右侧的位置,最终得到的第二拼接向量为“源元素1源元素4源元素2源元素5源元素3源元素6”。关于第三被操作数和第四被操作数生成第三拼接向量的方式与该第一被操作数和第二被操作数生成第二拼接向量的方式相同,在此不再赘述。
[0177]
可选地,若第一被操作数总位数为n位,第二被操作数总位数为n位,则第二拼接向量为2n位;同理,若第三被操作数总位数为n位,第四被操作数总位数为n位,则第三拼接向量为2n位;n为大于0的正整数。第一被操作数的总位数可以根据其包含的各个元素与该元素数据类型对应的比特位确定;第二被操作数的总位数可以根据其包含的各个元素与该元素数据类型对应的比特位确定。
[0178]
在得到第二拼接向量和第三拼接向量之后,执行步骤606。
[0179]
步骤606:根据所述立即数,对所述第二拼接向量中每个元素均进行移位舍入饱和至半宽操作,生成第二初始移位运算结果;并根据所述立即数,对所述第三拼接向量中每个元素均进行移位舍入饱和至半宽操作,生成第三初始移位运算结果。
[0180]
本技术实施例中,第二拼接向量中包含多个元素;根据立即数,将第二拼接向量进行移位舍入饱和至半宽操作,即为,将第二拼接向量中的每个元素均执行移位舍入饱和至半宽操作,移位量即为立即数,以生成第二初始移位运算结果;同理,第三拼接向量中包含多个元素;根据立即数,将第三拼接向量进行移位舍入饱和至半宽操作,即为,将第三拼接向量中的每个元素均执行移位舍入饱和至半宽操作,移位量即为立即数,以生成第三初始移位运算结果。其中,移位操作为右移操作;所述移位操作包括逻辑移位和算术移位。
[0181]
可选地,将所述第二拼接向量进行移位,包括:对第二拼接向量中每一个元素进行移位操作,移位量即为立即数,即每个元素移位量相同,均为立即数。示例性地,如果第二拼接向量包含元素1、元素2和元素3,移位量为ui4,那么对第一拼接向量进行移位即为分别对元素1移位ui4位,对元素2移位ui4位,对元素3移位ui4位。
[0182]
可选地,将所述第三拼接向量进行移位,包括:对第三拼接向量中每一个元素进行移位操作,移位量即为立即数,即每个元素移位量相同,均为立即数。示例性地,如果第三拼接向量包含元素4、元素5和元素6,移位量为ui4,那么对第三拼接向量进行移位即为分别对元素4移位ui4位,对元素5移位ui4位,对元素6移位ui4位。
[0183]
可选地,对第二拼接向量/第三拼接向量进行移位舍入操作包含四种舍入情况:向偶舍入、向零舍入、向上舍入和向下舍入。较佳地,对第二拼接向量/第三拼接向量进行移位舍入操作为,对第二拼接向量/第三拼接向量进行移位向上舍入操作。
[0184]
针对第二拼接向量/第三拼接向量进行逻辑右移舍入饱和至半宽操作的方法与实施例二中描述的方式相同,在此不再赘述;同理,针对第二拼接向量/第三拼接向量进行算术右移舍入饱和至半宽操作的方法与实施例二中描述的方式相同,在此不再赘述。
[0185]
在生成第二初始移位运算结果和第三初始移位运算结果之后,执行步骤607。
[0186]
步骤607:对所述第二初始移位运算结果执行取位操作,生成第一移位运算结果;
以及,对所述第三初始移位运算结果执行取位操作,生成第二移位运算结果。
[0187]
本技术实施例中,所述执行取位操作包括对所述第二初始移位运算结果中包含的每个元素和所述第三初始移位运算结果中包含的每个元素均取连续低半部分数据、对所述第二初始移位运算结果中包含的每个元素和所述第三初始移位运算结果中包含的每个元素均取连续高半部分数据、对所述第二初始移位运算结果中包含的每个元素和所述第三初始移位运算结果中包含的每个元素均取中间连续指定位数据、对所述第二初始移位运算结果中包含的每个元素和所述第三初始移位运算结果中包含的每个元素均取非连续指定位数据中的任意一种。
[0188]
在生成第一移位运算结果和第二移位运算结果之后,执行步骤608和步骤609。
[0189]
步骤608:根据所述第一移位运算结果的取位操作位置,将所述第一移位运算结果写入所述目的寄存器相应的存储位置。
[0190]
步骤609:根据所述第二移位运算结果的取位操作位置,将所述第二移位运算结果写入所述目的寄存器相应的存储位置。
[0191]
本技术实施例中,将第一移位运算结果和第二移位运算结果中的元素作为目标元素,写入目的寄存器相应的存储位置。
[0192]
可选地,目标元素的数据类型根据源元素的数据类型确定;可选地,目标元素的数据类型所对应比特位数为源元素数据类型所对应比特位数的一半。示例性地,当源元素的数据类型为半字时,目标元素的数据类型为字节;当源元素的数据类型为字时,目标元素的数据类型为半字;当源元素的数据类型为双字时,目标元素的数据类型为字;当源元素的数据类型为四字时,目标元素的数据类型为双字。源元素可以为有符号数据,也可以为无符号数据。
[0193]
可选地,在确定目标元素之后,将目标元素依次写入目的寄存器的方式,包括:确定每个目标元素在第二移位运算结果和第三移位运算结果中的位置信息;将目标元素依次写入目的寄存器中与该目标元素对应的位置信息相匹配的位置。其中,该位置信息表示元素在第二移位运算结果和第三移位运算结果中的顺序;将目标元素依次写入目的寄存器中与该目标元素对应的位置信息相匹配的位置,即为,确定每个目标元素在目的寄存器中的存储位置;针对每个目标元素,将来自第二移位运算结果的目标元素存储至该目标元素所在存储位置的高半部分,将来自第三移位运算结果的目标元素存储至该目标元素所在存储位置的低半部分;或者,针对每个目标元素,将来自第二移位运算结果的目标元素存储至该目标元素所在存储位置的低半部分,将来自第三移位运算结果的目标元素存储至该目标元素所在存储位置的高半部分。
[0194]
结合本技术实施例中根据第二类型向量操作码获取目标元素的过程,第二类型向量操作码可以包括:第五向量操作码、第六向量操作码、第七向量操作码和第八向量操作码,以分别指示不同的向量移位操作,具体地,可以结合下述具体实现方式进行详细描述。
[0195]
本技术实施例的第一种具体实现方式中,所述第二类型向量操作码为第五向量操作码,所述第一被操作数为所述第一源寄存器中每个元素的连续低半部分数据;所述第二被操作数为所述第二源寄存器中每个元素的连续低半部分数据;所述第三被操作数为第一源寄存器中每个元素的连续高半部分数据;所述第四被操作数为第二源寄存器中每个元素的连续高半部分数据,具体地处理方式可以包括:
[0196]
子步骤e1:根据所述立即数,对所述第二拼接向量中每个元素均进行逻辑右移舍入有符号饱和至半宽操作,生成第二初始移位运算结果;以及根据所述立即数,对所述第三拼接向量中每个元素均进行逻辑右移舍入有符号饱和至半宽操作,生成第三初始移位运算结果。
[0197]
本技术实施例中,第二类型向量操作码可以为第五向量操作码,该第五向量操作码可以用于指示对第二拼接向量执行逻辑右移舍入有符号饱和至半宽操作和每个元素中数据选取操作,以及用于指示对第三拼接向量执行逻辑右移舍入有符号饱和至半宽操作和每个元素中数据选取操作;所述第二拼接向量和第三拼接向量均为2n位,n为大于0的正整数,较佳地,n为128位。逻辑右移、舍入、半宽、有符号饱和的定义与实施例二相同,逻辑右移舍入有符号饱和至半宽操作的过程与实施例二相同,在此不再赘述。
[0198]
在生成第二初始移位运算结果和第三初始移位运算结果之后,执行子步骤e2。
[0199]
子步骤e2:分别选取所述第二初始移位运算结果包含的每个元素中连续低半部分数据,将选取的所述数据确定为第一移位运算结果;并分别选取所述第三初始移位运算结果包含的每个元素中连续高半部分数据,将选取的所述数据确定为第二移位运算结果。
[0200]
本技术实施例中,根据所述第一移位运算结果中包含的数据确定至少一个第一目标元素,根据所述第二移位运算结果中包含的元素确定至少一个第二目标元素。
[0201]
在得到第一移位运算结果和第二移位运算结果之后,执行子步骤e3和子步骤e4。
[0202]
子步骤e3:将所述第一移位运算结果中包含的每个第一目标元素,分别写入所述目的寄存器中每个第一目标元素所在位置的低半部分。
[0203]
子步骤e4:将所述第二移位运算结果中包含的每个第二目标元素,分别写入所述目的寄存器中每个第二目标元素所在位置的高半部分。
[0204]
可选地,当第一被操作数的总位数为n位,第二被操作数的总位数为n位时,第二初始移位运算结果为n位,则第二移位运算结果即为第二初始移位运算结果自第0位至第n/2-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xd,第二源寄存器为向量寄存器xj,将xd中每个元素的低半部分数据作为第一被操作数,将xj中每个元素的低半部分数据作为第二被操作数,通过向量移位指令可以将第一被操作数和第二被操作数左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个元素进行逻辑右移舍入有符号饱和至半宽操作,移位量来自于立即数,对第一初始移位运算结果中包含的每个元素均取低半部分后,将每个取低半部分操作后的元素作为第一目标元素,分别写入向量寄存器xd中每个第一目标元素所在位置的低半部分中。其中,第一被操作数中源元素和第二被操作数中源元素的数据类型为半字、字、双字、四字任一种情况,第一被操作数中源元素和第二被操作数中源元素数据类型相同;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字、双字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0205]
可选地,当第三被操作数的总位数为n位,第四被操作数的总位数为n位时,第三初始移位运算结果为n位,则第三移位运算结果即为第三初始移位运算结果自第n/2位至第n-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xd,第二源寄存器为向量寄存器xj,将xd中每个元素的高半部分数据作为第三被操作数,将xj中每个元素的高半部分数据作为第四被操作数,通过向量移位指令可以将第三被操作数和第四被操作数左右拼接在一
起形成一个2n(2n=256)位向量,分别对该向量中每个元素进行逻辑右移舍入有符号饱和至半宽操作,移位量来自于立即数,对第二初始移位运算结果中包含的每个元素均取高半部分后,将每个取高半部分操作后的元素作为第二目标元素,分别写入向量寄存器xd中每个第二目标元素所在位置的高半部分中。其中,第三被操作数中源元素和第四被操作数中源元素的数据类型为半字、字、双字、四字任一种情况,第三被操作数中源元素和第四被操作数中源元素数据类型相同;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字、双字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0206]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0207]
本技术实施例的第二种具体实现方式中,所述第二类型向量操作码为第六向量操作码;所述第一被操作数为所述第一源寄存器中每个元素的连续低半部分数据;所述第二被操作数为所述第二源寄存器中每个元素的连续高半部分数据;所述第三被操作数为第一源寄存器中每个元素的连续高半部分数据;所述第四被操作数为第二源寄存器中每个元素的连续高半部分数据;具体地处理方式可以包括:
[0208]
子步骤f1:根据所述立即数,对所述第二拼接向量中每个元素均进行算术右移舍入有符号饱和至半宽操作,生成第二初始移位运算结果;以及根据所述立即数,对所述第三拼接向量中每个元素均进行算术右移舍入有符号饱和至半宽操作,生成第三初始移位运算结果。
[0209]
本技术实施例中,第二类型向量操作码可以为第六向量操作码,该第六向量操作码可以用于指示第二拼接向量执行算术右移舍入有符号饱和至半宽操作和每个元素中数据选取操作,以及用于指示第三拼接向量执行算术右移舍入有符号饱和至半宽操作和元素选取操作;所述第二拼接向量和第三拼接向量均为2n位,n为大于0的正整数,较佳地,n为128位。算术右移、舍入、半宽、有符号饱和的定义与实施例二相同,算术右移舍入有符号饱和至半宽操作的过程与实施例二相同,在此不再赘述。
[0210]
在生成第二初始移位运算结果和第三初始移位运算结果之后,执行子步骤f2。
[0211]
子步骤f2:分别选取所述第二初始移位运算结果包含的每个元素中连续低半部分数据,将选取的所述数据确定为第一移位运算结果;并选取所述第三初始移位运算结果包含的每个元素中连续高半部分数据,将选取的所述数据确定为第二移位运算结果。
[0212]
本技术实施例中,根据所述第一移位运算结果中包含的数据确定至少一个第一目标元素,根据所述第二移位运算结果中包含的元素确定至少一个第二目标元素。
[0213]
在得到第一移位运算结果和第二移位运算结果之后,执行子步骤f3和子步骤f4。
[0214]
子步骤f3将所述第一移位运算结果中包含的每个第一目标元素,分别写入所述目的寄存器中每个第一目标元素所在位置的低半部分。
[0215]
子步骤f4:将所述第二移位运算结果中包含的每个第二目标元素,分别写入所述目的寄存器中每个第二目标元素所在位置的高半部分。
[0216]
可选地,当第一被操作数的总位数为n位,第二被操作数的总位数为n位时,第二初始移位运算结果为n位,则第二移位运算结果即为第二初始移位运算结果自第0位至第n/2-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xd,第二源寄存器为向量寄存器
xj,将xd中每个元素的低半部分数据作为第一被操作数,将xj中每个元素的低半部分数据作为第二被操作数,通过向量移位指令可以将第一被操作数和第二被操作数左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个元素进行算术右移舍入有符号饱和至半宽操作,移位量来自于立即数,对第一初始移位运算结果中包含的每个元素均取低半部分后,将每个取低半部分操作后的元素作为第一目标元素,分别写入向量寄存器xd中每个第一目标元素所在位置的低半部分中。其中,第一被操作数中源元素和第二被操作数中源元素的数据类型为半字、字、双字、四字任一种情况,第一被操作数中源元素和第二被操作数中源元素数据类型相同;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字、双字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0217]
可选地,当第三被操作数的总位数为n位,第四被操作数的总位数为n位时,第三初始移位运算结果为n位,则第三移位运算结果即为第三初始移位运算结果自第n/2位至第n-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xd,第二源寄存器为向量寄存器xj,将xd中每个元素的高半部分数据作为第三被操作数,将xj中每个元素的高半部分数据作为第四被操作数,通过向量移位指令可以将第三被操作数和第四被操作数左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个元素进行算术右移舍入有符号饱和至半宽操作,移位量来自于立即数,对第二初始移位运算结果中包含的每个元素均取高半部分后,将每个取高半部分操作后的元素作为第二目标元素,分别写入向量寄存器xd中每个第二目标元素所在位置的高半部分中。其中,第三被操作数中源元素和第四被操作数中源元素的数据类型为半字、字、双字、四字任一种情况,第三被操作数中源元素和第四被操作数中源元素数据类型相同;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字、双字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0218]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0219]
本技术实施例的第三种具体实现方式中,所述第二类型向量操作码为第七向量操作码;所述第一被操作数为所述第一源寄存器中每个元素的连续低半部分数据;所述第二被操作数为所述第二源寄存器中每个元素的连续低半部分数据;所述第三被操作数为第一源寄存器中每个元素的连续高半部分数据;所述第四被操作数为第二源寄存器中每个元素的连续高半部分数据;具体地处理方式可以包括:
[0220]
子步骤g1:根据所述立即数,对所述第二拼接向量中每个元素均进行逻辑右移舍入无符号饱和至半宽操作,生成第二初始移位运算结果;以及,根据所述立即数,对所述第三拼接向量中每个元素均进行逻辑右移舍入无符号饱和至半宽操作,生成第三初始移位运算结果
[0221]
本技术实施例中,第二类型向量操作码可以为第七向量操作码,该第七向量操作码可以用于指示对第二拼接向量执行逻辑右移舍入无符号饱和至半宽操作和每个元素中数据选取操作,以及用于指示对第三拼接向量执行逻辑右移舍入无符号饱和至半宽操作和每个元素中数据选取操作;所述第二拼接向量和第三拼接向量均为2n位,n为大于0的正整数,较佳地,n为128位。逻辑右移、舍入、半宽的定义与实施例二相同,逻辑右移舍入无符号
饱和至半宽操作的过程与实施例二相同,在此不再赘述。
[0222]
在生成第二初始移位运算结果和第三初始移位运算结果之后,执行子步骤g2。
[0223]
子步骤g2:分别选取所述第二初始移位运算结果包含的每个元素中连续低半部分数据,将选取的所述数据确定为第一移位运算结果;并选取所述第三初始移位运算结果包含的每个元素中连续高半部分数据,将选取的所述数据确定为第二移位运算结果。
[0224]
本技术实施例中,根据所述第一移位运算结果中包含的数据确定至少一个第一目标元素,根据所述第二移位运算结果中包含的元素确定至少一个第二目标元素。
[0225]
在确定出第一移位运算结果和第二移位运算结果之后,执行子步骤g3和子步骤g4。
[0226]
子步骤g3:将所述第一移位运算结果中包含的每个第一目标元素,分别写入所述目的寄存器中每个第一目标元素所在位置的低半部分。
[0227]
子步骤g4:将所述第二移位运算结果中包含的每个第二目标元素,分别写入所述目的寄存器中每个第二目标元素所在位置的高半部分。
[0228]
可选地,当第一被操作数的总位数为n位,第二被操作数的总位数为n位时,第二初始移位运算结果为n位,则第二移位运算结果即为第二初始移位运算结果自第0位至第n/2-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xd,第二源寄存器为向量寄存器xj,将xd中每个元素的低半部分数据作为第一被操作数,将xj中每个元素的低半部分数据作为第二被操作数,通过向量移位指令可以将第一被操作数和第二被操作数左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个元素进行逻辑右移舍入无符号饱和至半宽操作,移位量来自于立即数,对第一初始移位运算结果中包含的每个元素均取低半部分后,将每个取低半部分操作后的元素作为第一目标元素,分别依次写入向量寄存器xd中每个第一目标元素所在位置的低半部分中。其中,第一被操作数中源元素和第二被操作数中源元素的数据类型为半字、字、双字、四字任一种情况,第一被操作数中源元素和第二被操作数中源元素数据类型相同;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字、双字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0229]
可选地,当第三被操作数的总位数为n位,第四被操作数的总位数为n位时,第三初始移位运算结果为n位,则第三移位运算结果即为第三初始移位运算结果自第n/2位至第n-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xd,第二源寄存器为向量寄存器xj,将xd中每个元素的高半部分数据作为第三被操作数,将xj中每个元素的高半部分数据作为第四被操作数,通过向量移位指令可以将第三被操作数和第四被操作数左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个元素进行逻辑右移舍入无符号饱和至半宽操作,移位量来自于立即数,对第二初始移位运算结果中包含的每个元素均取高半部分后,将每个取高半部分操作后的元素作为第二目标元素,分别写入向量寄存器xd中每个第二目标元素所在位置的高半部分中。其中,第三被操作数中源元素和第四被操作数中源元素的数据类型为半字、字、双字、四字任一种情况,第三被操作数中源元素和第四被操作数中源元素数据类型相同;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字、双字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0230]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0231]
本技术实施例的第四种具体实现方式中,所述第二类型向量操作码为第八向量操作码;所述第一被操作数为所述第一源寄存器中每个元素的连续低半部分数据;所述第二被操作数为所述第二源寄存器中每个元素的连续低半部分数据;所述第三被操作数为第一源寄存器中每个元素的连续高半部分数据;所述第四被操作数为第二源寄存器中每个元素的连续高半部分数据;具体地处理方式可以包括:
[0232]
子步骤h1:根据所述立即数,对所述第二拼接向量中诶个元素均进行算术右移舍入无符号饱和至半宽操作,生成第二初始移位运算结果;根据所述立即数,对所述第三拼接向量中每个元素均进行算术右移舍入无符号饱和至半宽操作,生成第三初始移位运算结果。
[0233]
本技术实施例中,第二类型向量操作码可以为第八向量操作码。该第八向量操作码可以用于指示第二拼接向量执行算术右移舍入无符号饱和至半宽操作和每个元素中数据选取选取操作,以及用于指示第三拼接向量执行算术右移舍入无符号饱和至半宽操作和每个元素中数据选取选取操作;所述第二拼接向量和第三拼接向量为2n位,n为大于0的正整数,较佳地,n为128位。算术右移、舍入、半宽的定义与实施例二相同,算术右移舍入无符号饱和至半宽操作的过程与实施例二相同,在此不再赘述。
[0234]
在生成第二初始移位运算结果和第三初始移位运算结果之后,执行子步骤h2。
[0235]
子步骤h2:分别选取所述第二初始移位运算结果包含的每个元素中连续低半部分数据,将选取的所述数据确定为第一移位运算结果;并分别选取所述第三初始移位运算结果包含的每个元素中连续高半部分数据,将选取的所述数据确定为第二移位运算结果。
[0236]
本技术实施例中,根据所述第一移位运算结果中包含的数据确定至少一个第一目标元素,根据所述第二移位运算结果中包含的元素确定至少一个第二目标元素。
[0237]
在得到第一移位运算结果和第二移位运算结果之后,执行子步骤h3和子步骤h4。
[0238]
子步骤h3:将所述第一移位运算结果中包含的每个第一目标元素,分别写入所述目的寄存器中每个第一目标元素所在位置的低半部分。
[0239]
子步骤h4:将所述第二移位运算结果中包含的每个第二目标元素,分别写入所述目的寄存器中每个第二目标元素所在位置的高半部分。
[0240]
可选地,当第一被操作数的总位数为n位,第二被操作数的总位数为n位时,第二初始移位运算结果为n位,则第二移位运算结果即为第二初始移位运算结果自第0位至第n/2-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xd,第二源寄存器为向量寄存器xj,将xd中每个元素的低半部分数据作为第一被操作数,将xj中每个元素的低半部分数据作为第二被操作数,通过向量移位指令可以将第一被操作数和第二被操作数左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个元素进行算术右移舍入无符号饱和至半宽操作,移位量来自于立即数,对第一初始移位运算结果中包含的每个元素均取低半部分后,将每个取低半部分操作后的元素作为第一目标元素,分别写入向量寄存器xd中每个第一目标元素所在位置的低半部分中。其中,第一被操作数中源元素和第二被操作数中源元素的数据类型为半字、字、双字、四字任一种情况,第一被操作数中源元素和第二被操作数中源元素数据类型相同;对应于上述源元素的数据类型,写入向量寄存器xd中目标元
素的数据类型为字节、半字、字、双字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0241]
可选地,当第三被操作数的总位数为n位,第四被操作数的总位数为n位时,第三初始移位运算结果为n位,则第三移位运算结果即为第三初始移位运算结果自第n/2位至第n-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xd,第二源寄存器为向量寄存器xj,将xd中每个元素的高半部分数据作为第三被操作数,将xj中每个元素的高半部分数据作为第四被操作数,通过向量移位指令可以将第三被操作数和第四被操作数左右拼接在一起形成一个2n(2n=256)位向量,分别对该向量中每个元素进行算术右移舍入无符号饱和至半宽操作,移位量来自于立即数,对第二初始移位运算结果中包含的每个元素均取高半部分后,将每个取高部分操作后的元素作为第二目标元素,分别写入向量寄存器xd中每个第二目标元素所在位置的高半部分中。其中,第三被操作数中源元素和第四被操作数中源元素的数据类型为半字、字、双字、四字任一种情况,第三被操作数中源元素和第四被操作数中源元素数据类型相同;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字、双字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0242]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0243]
采用本技术技术方案,通过执行包含第五向量操作码和立即数的指令,实现了两个宽位源元素的逻辑移位舍入有符号饱和至半宽等一系列操作;通过执行包含第六向量操作码和立即数的指令,实现了两个宽位源元素的算术移位舍入有符号饱和至半宽等一系列操作;通过执行包含第七向量操作码和立即数的指令,实现了两个宽位源元素的逻辑移位舍入无符号饱和至半宽等一系列操作;通过执行包含第八向量操作码和立即数的指令,实现了两个宽位源元素的算术移位舍入无符号饱和至半宽等一系列操作。因而,采用本发明技术方案,能够通过不同的移位参数实现不同的移位需求,进而采用一条移位指令能够实现多种向量移位需求有效降低了系统开销,提高了特定功能向量移位的执行效率。
[0244]
实施例四
[0245]
本技术实施例中,所述操作码为第三类型向量操作码,所述源寄存器为第一源寄存器,该第二类型向量操作码可以用于指示分别在第一源寄存器中执行选取操作,并执行相应的向量移位操作,如图7所示,向量移位指令的处理方法可以包括:
[0246]
步骤701:接收指令,所述指令包括:寄存器标识和移位参数。
[0247]
本技术实施例中,指令的含义和指令包含的参数如实施例一至实施例三所述,在此不再赘述。
[0248]
可选地,源寄存器的数量为一个,即所有源元素来自同一个源寄存器;目的寄存器的数量为一个;源寄存器和目的寄存器相同或不同。较佳地,第一源寄存器的位数为128位或256位。
[0249]
可选地,对接收的指令进行译码,获取该指令中包含的移位参数;该移位参数用于指示对源元素执行向量移位操作时所依据的规则,在本示例中,移位参数可以包括移位量和操作码等参数。
[0250]
步骤702:根据所述移位参数,确定移位量和移位运算规则。
[0251]
本技术实施例中,所述执行向量移位操作的源元素为至少一个;所述移位量来自移位量寄存器,所述移位运算规则为操作码,所述操作码为第三类型向量操作码;所述移位量寄存器中包含的每个元素移位量为大于等于0的正整数。
[0252]
可选地,所述第三类型向量操作码为通过二进制方式表示的代码,或者操作码为可以转换为二进制代码的标识符。指令格式为“操作码目的寄存器,源寄存器,移位量”。当所述操作码为第三类型向量操作码时,在具体实现中,指令表示为“[x]vssr
第三类型
.{b.h/h.w/w.d/bu.h/hu.w/wu.d}vd/xd,vj/xj,vk
第三类型
/xk
第三类型”;[x]vssr
第三类型
为第三类型向量操作码中的指令名称,{b.h/h.w/w.d/bu.h/hu.w/wu.d}为第二操作码中用于指示源元素和目标元素的数据类型的参数,b表示字节,h表示半字,w表示字,d表示双字;vd/xd同时表示目的寄存器和源寄存器,vj/xj表示源寄存器;vk
第三类型
/vk
第三类型
表示当操作码为第三类型向量操作码时,指令中包含的移位量寄存器标识,该移位量寄存器包含的二进制为一个数组,数组中包含的参数数量和目标元素的数量相同,且数据中包含的参数相同或不同。示例性地,vssr
第三类型1
.b.h为可以转换为二进制形式的第三类型向量操作码,如将vssr
第三类型1
.b.h转换为01110001000000001二进制形式的第三类型向量操作码。
[0253]
在根据移位参数确定出移位量和移位运算规则之后,执行步骤703。
[0254]
步骤703:根据所述第三类型向量操作码,在所述第一源寄存器中执行选取操作,得到第五被操作数。
[0255]
本技术实施例中,所述选取操作包括对所述第一源寄存器中每个元素均选取连续低半部分元素、对所述第一源寄存器中每个元素均选取连续高半部分元素、对所述第一源寄存器中每个元素均选取中间连续指定位元素、对所述第一寄存器中每个元素均选取非连续指定位元素的任意一种。其中,第五被操作数中源元素的数据类型为半字、字、双字中的任一种。
[0256]
可选地,第一源寄存器中包括2n位数据,该2n位数据可以对应多个半字元素、字元素、或者双字元素;在所述第一源寄存器中执行选取操作,得到第五被操作数,包括:将所述第一源寄存器中每m位数据为一组数据组,每个数据组包含至少一个源元素;并将所有数据组所对应的所有源元素确定为第五被操作数;其中,m和n均为大于0的正整数,m≤n;源元素和数据的对应关系,根据源元素的数据类型和数据比特位之间的转换关系确定。
[0257]
可选地,不同的数据组之间不存在地址相同的数据,或者,不同的数据组之间存在部分地址相同的数据;其中,所述地址为第一源寄存器中数据在该第一源寄存器中的位置信息,在该第一源寄存器中,每个数据的地址唯一标识。
[0258]
较佳地,n为m的倍数。示例性地,n=128,m=128,第一源寄存器包括256位数据,则将第一源寄存器中数据每128位为一组,共划分为两组(第一数据组和第二数据组),第一数据组为第一源寄存器中第0~127位数据,第二数据组为第一源寄存器中第128~255位数据,第一数据组和第二数据组之间无地址相同的数据;若源元素的数据类型为半字,则第一数据组包含8个半字源元素;若源元素的数据类型为字,则第一数据组包含4个字源元素;若源元素的数据类型为双字,则第一数据组包含2个双字源元素。
[0259]
在根据第三类型向量操作码对第一源寄存器执行选取操作得到第五被操作数之后,执行步骤704。
[0260]
步骤704:根据所述第三类型向量操作码和所述移位量,对所述第五被操作数进行
移位舍入饱和至半宽操作,生成第四初始移位运算结果。
[0261]
本技术实施例中,移位量来自移位量寄存器,该移位量寄存器中存储的内容可以为一组数据,该组数据包含多个移位值,每个移位值分别针对第五被操作数中每个源元素,不同源元素的移位值可以相同,也可以不同,移位值的数量与第五被操作数的源元素数量相同;或者,移位值的数量与第四初始移位运算结果相同。
[0262]
可选地,当移位值的数量与第五被操作数的源元素数量相同时,每一个移位值对应第五被操作数中的一个源元素,第五被操作数中的每个源元素,根据移位量,进行移位舍入饱和至半宽操作,生成第四初始移位运算结果。示例性地,第五被操纵数中包括源元素1、源元素2、源元素3和源元素4,移位量寄存器中包含四个移位值(移位值1、移位值2、移位值3和移位值4),源元素1对应的移位量为移位值1,源元素2对应的移位量为移位值2,源元素3对应的移位量为移位值3,源元素4对应的移位量为移位值4,则源元素1根据移位值1进行移位,源元素2根据移位值2进行移位,源元素3根据移位值3进行移位,源元素4根据移位值4进行移位。
[0263]
可选地,当移位值的数量与第四初始移位运算结果相同时,根据移位值的数量,对第五被操作数划分为多组元素组,使元素组数量与移位值的数量相同,即每一个移位值对应一个元素组,第五被操作数中的每个源元素,根据其所在元素组对应的移位量,进行移位舍入饱和至半宽操作,生成第四初始移位运算结果。示例性地,第五被操纵数中包括源元素1、源元素2、源元素3和源元素4,移位量寄存器中包含四个移位值(移位值1和移位值2),源元素1和源元素2组成第一元素组,第一元素组对应的移位量为移位值1,源元素3和源元素4组成第二元素组,第二元素组对应的移位量为移位值2,则源元素1和源元素2根据移位值1进行移位,源元素3和源元素4根据移位值2进行移位。
[0264]
在生成第四初始移位运算结果之后,执行步骤705。
[0265]
步骤705:对所述第四初始移位运算结果执行取位操作,生成移位运算结果。
[0266]
本技术实施例中,所述取位操作包括对所述第四初始移位运算结果取连续低半部分元素、对所述第四初始移位运算结果取连续高半部分元素、对所述第四初始移位运算结果中取中间连续指定位元素、对所述第四初始移位运算结果中取非连续指定位元素中的任意一种。
[0267]
在生成移位运算结果之后,执行步骤706。
[0268]
步骤706:将所述移位运算结果中的数据,依次写入所述目的寄存器中的相应位置。
[0269]
本技术实施例中,在生成移位运算结果之后,可以确定移位运算结果中的每个数据分别对应的目标元素,将每个数据依次写入目的寄存器中每个目标元素存储位置。
[0270]
可选地,目标元素的数据类型根据源元素的数据类型确定;可选地,目标元素的数据类型所对应比特位数为源元素数据类型所对应比特位数的一半。示例性地,当源元素的数据类型为半字时,目标元素的数据类型为字节;当源元素的数据类型为字时,目标元素的数据类型为半字;当源元素的数据类型为双字时,目标元素的数据类型为字。源元素可以为有符号数据,也可以为无符号数据。
[0271]
可选地,在确定目标元素之后,将目标元素依次写入目的寄存器的方式,包括:确定每个目标元素在移位运算结果的位置信息;将目标元素依次写入目的寄存器中与该目标
元素对应的位置信息相匹配的位置。其中,该位置信息表示元素在移位运算结果中的顺序;将目标元素依次写入目的寄存器中与该目标元素对应的位置信息相匹配的位置,即为,将目标元素从高位到低位依次写入目的寄存器中第n/2-1位至第0位的位置,或者将目标元素从低位到高位依次写入目的寄存器中第0位至第n/2-1的位置。
[0272]
在将移位运算结果中的元素作为目标元素依次写入目的寄存器中之后,执行步骤707。
[0273]
步骤707:根据所述第三类型向量操作码,设置所述目的寄存器中未写入所述数据位置的值。
[0274]
在将移位运算结果中的数据依次写入目的寄存器中相应位置之后,可以根据第三类型向量操作码,设置目的寄存器中未写入数据位置的值。
[0275]
结合本技术实施例中根据第三类型向量操作码获取目标元素的过程,第三类型向量操作码可以包括第九向量操作码、第十向量操作码、第十一向量操作码和第十二向量操作码,以分别指示不同的向量移位操作。具体地,可以结合下述具体实现方式进行详细描述。
[0276]
在本技术实施例的第一种具体实现方式中,所述第三类型向量操作码为第九向量操作码,所述第五被操作数为所述第一源寄存器中任意连续的源元素,具体地处理方法可以包括:
[0277]
子步骤k1:根据所述移位量,将所述第五被操作数进行逻辑右移舍入有符号饱和至半宽操作,生成第四初始移位运算结果。
[0278]
本技术实施例中,在得到第九向量操作码之后,可以根据移位量将第五被操作数包含的每个元素进行逻辑右移舍入有符号饱和至半宽操作,以生成第四初始移位运算结果;其中,移位量来自移位量寄存器。
[0279]
可选地,第一源寄存器中包括2n位数据,该2n位数据可以对应多个半字元素、字元素、或者双字元素;在所述第一源寄存器中执行选取操作,得到第五被操作数,包括:将所述第一源寄存器中每m位数据为一组数据组,并将每个数据组所对应的所有源元素确定为第五被操作数。根据所述移位量,将所述第五被操作数包含的每个元素进行逻辑右移舍入有符号饱和至半宽操作,生成第四初始移位运算结果,包括:确定第五被操作数中每个源元素对应于移位量寄存器中的移位值,分别根据每个源元素对应的移位值,对每个源元素执行逻辑右移舍入有符号饱和至半宽操作,得到第四初始移位运算结果。
[0280]
进一步地,逻辑右移、舍入、半宽、有符号饱和的定义与实施例二相同,逻辑右移舍入有符号饱和至半宽操作的过程与实施例二相同,在此不再赘述。
[0281]
在生成第四初始移位运算结果之后,执行子步骤k2。
[0282]
子步骤k2:分别选取所述第四初始移位运算结果中包含每个元素的连续低半部分数据,将选取操作后的元素确定为移位运算结果。
[0283]
本技术实施例中,在生成第四初始移位运算结果之后,可以分别选取第四初始移位运算结果中每个元素的连续低半部分数据,并将选取操作后每个元素的连续低半部分数据确定为移位运算结果。
[0284]
在得到移位运算结果之后,执行子步骤k3。
[0285]
子步骤k3:根据预设值对目的寄存器中的存储位置进行划分,生成多个存储区。
[0286]
本技术实施例中,预设值是指用于对向量寄存器内的存储位置进行划分的值,预设值即为目标元素占据的数据比特位宽,对于预设值的具体数值可以根据业务需求而定,本技术实施例对此不加以限制。较佳地,该预设值为一个值,根据该预设值划分的每个存储区大小相同(每个存储区存储的数据比特位宽相同)。
[0287]
在生成多个存储区之后,执行子步骤k4。
[0288]
子步骤k4:将所述移位运算结果中的数据,依次写入每个存储区的低半部分。
[0289]
本技术实施例中,当第五被操作数为m位时,第四初始移位运算结果为m/2位,则移位运算结果为第四初始移位运算结果中自第0位至第m/4-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xj,第一源寄存器为2m,将xj中每m位对应的源元素作为第五被操作数,通过向量移位指令可以将第五被操作数包含的每m位中各个源元素进行逻辑右移舍入有符号饱和至半宽操作,得到第四初始移位运算结果;移位量来自于移位量寄存器;第四初始移位运算结果中对每个元素取低半部分作为每个目标元素的低半部分依次写入向量寄存器xd的每m位目标元素的低半部分中,且该每m位中每个目标元素的高半部分数据置0。其中,第五被操作数中源元素的数据类型为半字、字、双字任一种情况;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0290]
在将移位运算结果中的数据依次写入每个存储区的低半部分之后,执行子步骤k5。
[0291]
子步骤k5:分别将每个存储区中未写入数据位置的值置零。
[0292]
本技术实施例中,在将移位运算结果作中的元素为目标元素依次写入每个存储区的低半部分之后,可以分别将每个存储区中未写入目标元素位置的值置零。
[0293]
示例性地,第一源寄存器为vj/xj,第三类型向量操作码为第九向量操作码,则执行向量移位指令,即为,对第一源寄存器vj/xj中每128位中每个源元素进行逻辑右移舍入有符号饱和至半宽操作,将移位结果中每个元素取低半部分依次写入目的寄存器vd/xd中每128位每个目标元素的低半部分,目的寄存器的每128位中每个目标元素的高半部分置0;每个元素的移位量来自移位量寄存器vk/xk,源元素的数据类型为半字、字、双字中的任一种。
[0294]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0295]
本技术实施例的第二种具体实现方式中,所述第三类型向量操作码为第十向量操作码,所述第五被操作数为所述第一源寄存器中任意连续的源元素,具体地处理方式可以包括:
[0296]
子步骤m1:根据所述移位量,将所述第五被操作数进行算术右移舍入有符号饱和至半宽操作,生成第四初始移位运算结果。
[0297]
本技术实施例中,在得到第十向量操作码之后,可以根据移位量将第五被操作数包含的每个元素进行算术右移舍入有符号饱和至半宽操作,以生成第四初始移位运算结果;其中,移位量来自移位量寄存器。
[0298]
可选地,第一源寄存器中包括2n位数据,该2n位数据可以对应多个半字元素、字元素、或者双字元素;在所述第一源寄存器中执行选取操作,得到第五被操作数,包括:将所述
第一源寄存器中每m位数据为一组数据组,并将每个数据组所对应的所有源元素确定为第五被操作数。根据所述移位量,将所述第五被操作数包含的每个元素进行算术右移舍入有符号饱和至半宽操作,生成第四初始移位运算结果,包括:确定第五被操作数中每个源元素对应于移位量寄存器中的移位值,分别根据每个源元素对应的移位值,对每个源元素执行算术右移舍入有符号饱和至半宽操作,得到第四初始移位运算结果。
[0299]
进一步地,算术右移、舍入、半宽、有符号饱和的定义与实施例二相同,算术右移舍入有符号饱和至半宽操作的过程与实施例二相同,在此不再赘述。
[0300]
在生成第四初始移位运算结果之后,执行子步骤m2。
[0301]
子步骤m2:分别选取所述第四初始移位运算结果中包含每个元素的连续低半部分数据,将选取操作后的元素确定为移位运算结果。
[0302]
本技术实施例中,在生成第四初始移位运算结果之后,可以从第四初始移位运算结果中分别选取每个元素的连续低半部分数据,并将选取操作后每个元素的连续低半部分数据确定为移位运算结果。
[0303]
在得到移位运算结果之后,执行子步骤m3。
[0304]
子步骤m3:根据预设值对目的寄存器中的存储位置进行划分,生成多个存储区。
[0305]
本技术实施例中,预设值是指用于对目的寄存器中的存储位置进行区域划分的数值,预设值即为目标元素占据的数据比特位宽,对于预设值的具体数值可以根据业务需求而定,本技术实施例对此不加以限制。较佳地,该预设值为一个值,根据该预设值划分的每个存储区大小相同(每个存储区存储的数据比特位宽相同)。
[0306]
在根据预设值对目的寄存器中的存储位置进行划分生成多个存储区之后,执行子步骤m4。
[0307]
子步骤m4:将所述移位运算结果中的数据,依次写入每个存储区的低半部分。
[0308]
本技术实施例中,在生成多个存储区以及得到移位运算结果之后,可以将移位运算结果中的元素作为目标元素,依次写入每个存储区的低半部分。
[0309]
可选地,当第五被操作数为m位时,第四初始移位运算结果为m/2位,则移位运算结果为第四初始移位运算结果中自第0位至第m/4-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xj,第一源寄存器为2m,将xj中每m位对应的源元素作为第五被操作数,通过向量移位指令可以将第五被操作数包含的每m位中各个源元素进行算术右移舍入有符号饱和至半宽操作,得到第四初始移位运算结果;移位量来自于移位量寄存器;第四初始移位运算结果中对每个元素取低半部分作为每个目标元素依次写入向量寄存器xd的每m位的每个目标元素的低半部分中,且该每m位中每个目标元素的高半部分数据置0。其中,第五被操作数中源元素的数据类型为半字、字、双字任一种情况;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0310]
在将移位运算结果中的数据依次写入每个存储区的低半部分之后,执行子步骤子步骤m5。
[0311]
子步骤m5:分别将每个存储区中未写入所述数据位置的值置零。
[0312]
本技术实施例中,在将移位运算结果中的元素作为目标元素依次写入每个存储区的低半部分之后,可以分别将每个存储区中未写入目标元素位置的值置为0。
[0313]
示例性地,第一源寄存器为vj/xj,第三类型向量操作码为第九向量操作码,则执行向量移位指令,即为,对第一源寄存器vj/xj中每128位中每个源元素进行算术右移舍入有符号饱和至半宽操作,将移位结果中每个元素取低半部分依次写入目的寄存器vd/xd中每128位每个目标元素的低半部分,目的寄存器的每128位中每个目标元素的高半部分置0;每个元素的移位量来自移位量寄存器vk/xk,源元素的数据类型为半字、字、双字中的任一种。
[0314]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0315]
在本技术实施例的第三种具体实现方式中,所述第三类型向量操作码为第十一向量操作码,所述第五被操作数为所述第一源寄存器中任意连续的源元素;具体地处理方式可以包括:
[0316]
子步骤n1:根据所述移位量,将所述第五被操作数进行逻辑右移舍入无符号饱和至半宽操作,生成第四初始移位运算结果。
[0317]
在本技术实施例中,在得到第十一向量操作码之后,可以根据移位量将第五被操作数包含的每个元素进行逻辑右移舍入无符号饱和至半宽操作,以生成第四初始移位运算结果;其中,移位量来自移位量寄存器。
[0318]
可选地,第一源寄存器中包括2n位数据,该2n位数据可以对应多个半字元素、字元素、或者双字元素;在所述第一源寄存器中执行选取操作,得到第五被操作数,包括:将所述第一源寄存器中每m位数据为一组数据组,并将每个数据组所对应的所有源元素确定为第五被操作数。根据所述移位量,将所述第五被操作数包含的每个元素进行逻辑右移舍入无符号饱和至半宽操作,生成第四初始移位运算结果,包括:确定第五被操作数中每个源元素对应于移位量寄存器中的移位值,分别根据每个源元素对应的移位值,对每个源元素执行逻辑右移舍入无符号饱和至半宽操作,得到第四初始移位运算结果。
[0319]
进一步地,逻辑右移、舍入、半宽的定义与实施例二相同,逻辑右移舍入无符号饱和至半宽操作的过程与实施例二相同,在此不再赘述。
[0320]
在根据移位量将第五被操作数进行逻辑右移舍入无符号饱和至半宽操作生成第四初始移位运算结果之后,执行子步骤n2。
[0321]
子步骤n2:分别选取所述第四初始移位运算结果中包含每个元素的连续低半部分数据,将选取操作后的元素确定为移位运算结果。
[0322]
本技术实施例中,在生成第四初始移位运算结果之后,可以从第四初始移位运算结果中分别选取每个元素的连续低半部分数据,并将选取每个元素的连续低半部分数据确定为移位运算结果。
[0323]
在得到移位运算结果之后,执行子步骤n3。
[0324]
子步骤n3:根据预设值对目的寄存器中的存储位置进行划分,生成多个存储区。
[0325]
本技术实施例中,预设值是指用于对目的寄存器中的存储位置进行区域划分的值,预设值即为目标元素占据的数据比特位宽,对于预设值的具体数值可以根据业务需求而定,本技术实施例对此不加以限制。较佳地,该预设值为一个值,根据该预设值划分的每个存储区大小相同(每个存储区存储的数据比特位宽相同)。
[0326]
在生成多个存储区之后,执行子步骤n4。
[0327]
子步骤n4:将所述移位运算结果中的数据,依次写入每个存储区的低半部分。
[0328]
本技术实施例中,在生成多个存储区,且得到移位运算结果之后,可以将移位运算结果中的元素作为目标元素,依次写入每个存储区的低半部分。
[0329]
可选地,当第五被操作数为m位时,第四初始移位运算结果为m/2位,则移位运算结果为第四初始移位运算结果中自第0位至第m/4-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xj,第一源寄存器为2m,将xj中每m位对应的源元素作为第五被操作数,通过向量移位指令可以将第五被操作数包含的每m位中各个源元素进行逻辑右移舍入无符号饱和至半宽操作,得到第四初始移位运算结果;移位量来自于移位量寄存器;第四初始移位运算结果中对每个元素取低半部分作为每个目标元素依次写入向量寄存器xd的每m位的每个目标元素的低半部分中,且该每m位中每个目标元素的高半部分数据置0。其中,第五被操作数中源元素的数据类型为半字、字、双字任一种情况;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0330]
在将移位运算结果中的数据依次写入每个存储区的低半部分之后,执行子步骤n5。
[0331]
子步骤n5:分别将每个存储区中未写入所述数据位置的值置零。
[0332]
在将移位运算结果中的元素作为目标元素依次写入每个存储区的低半部分之后,可以分别将每个存储区中未写入目标元素位置的值置零。
[0333]
示例性地,第一源寄存器为vj/xj,第三类型向量操作码为第九向量操作码,则执行向量移位指令,即为,对第一源寄存器vj/xj中每128位中每个源元素进行逻辑右移舍入无符号饱和至半宽操作,将移位结果中每个元素取低半部分依次写入目的寄存器vd/xd中每128位每个目标元素的低半部分,目的寄存器的每128位中每个目标元素的高半部分置0;每个元素的移位量来自移位量寄存器vk/xk,源元素的数据类型为半字、字、双字中的任一种。
[0334]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0335]
在本技术的第四种具体实现方式中,所述第三类型向量操作码为第十二向量操作码,所述第五被操作数为所述第一源寄存器中任意连续的源元素;具体地处理方式可以包括:
[0336]
子步骤s1:根据所述移位量,将所述第五被操作数进行算术右移舍入无符号饱和至半宽操作,生成第四初始移位运算结果。
[0337]
在本技术实施例中,在得到第十二向量操作码之后,可以根据移位量将第五被操作数包含的每个元素进行算术右移舍入无符号饱和至半宽操作,以生成第四初始移位运算结果;其中,移位量来自移位量寄存器。
[0338]
在生成第四初始移位运算结果之后,执行子步骤s2。
[0339]
子步骤s2:分别选取所述第四初始移位运算结果中包含每个元素的连续低半部分数据,将选取操作后的元素确定为移位运算结果。
[0340]
本技术实施例中,在生成第四初始移位运算结果之后,可以选取第四初始移位运算结果中分别选取每个元素的连续低半部分瞬狙,并将选取每个元素的连续低半部分数据
确定为移位运算结果。
[0341]
可选地,第一源寄存器中包括2n位数据,该2n位数据可以对应多个半字元素、字元素、或者双字元素;在所述第一源寄存器中执行选取操作,得到第五被操作数,包括:将所述第一源寄存器中每m位数据为一组数据组,并将每个数据组所对应的所有源元素确定为第五被操作数。根据所述移位量,将所述第五被操作数进行算术右移舍入无符号饱和至半宽操作,生成第四初始移位运算结果,包括:确定第五被操作数中每个源元素对应于移位量寄存器中的移位值,分别根据每个源元素对应的移位值,对每个源元素执行算术右移舍入无符号饱和至半宽操作,得到第四初始移位运算结果。
[0342]
进一步地,算术右移、舍入、半宽、有符号饱和的定义与实施例二相同,算术右移舍入无符号饱和至半宽操作的过程与实施例二相同,在此不再赘述。
[0343]
在得到移位运算结果之后,执行子步骤s3。
[0344]
子步骤s3:根据预设值对目的寄存器中的存储位置进行划分,生成多个存储区。
[0345]
本技术实施例中,预设值是指用于对目的寄存器中的存储位置进行区域划分的数值,预设值即为目标元素占据的数据比特位宽,对于预设值的具体数值可以根据业务需求而定,本技术实施例对此不加以限制。较佳地,该预设值为一个值,即根据该预设值划分的每个存储区大小相同(每个存储区存储的数据比特位宽相同)。
[0346]
在生成多个存储区之后,执行子步骤s4。
[0347]
子步骤s4:将所述移位运算结果中的数据,依次写入每个存储区的低半部分。
[0348]
本技术实施例中,在生成多个存储区,且得到移位运算结果之后,可以将移位运算结果中的元素作为目标元素依次写入每个存储区的低半部分。
[0349]
可选地,当第五被操作数为m位时,第四初始移位运算结果为m/2位,则移位运算结果为第四初始移位运算结果中自第0位至第m/4-1位所表示的数据。示例性地,第一源寄存器为向量寄存器xj,第一源寄存器为2m,将xj中每m位对应的源元素作为第五被操作数,通过向量移位指令可以将第五被操作数包含的每m位中各个源元素进行算术右移舍入无符号饱和至半宽操作,得到第四初始移位运算结果;移位量来自于移位量寄存器;第四初始移位运算结果中对每个元素取低半部分作为每个目标元素依次写入向量寄存器xd的每m位的每个目标元素低半部分中,且该每m位中每个目标元素的高半部分数据置0。其中,第五被操作数中源元素的数据类型为半字、字、双字任一种情况;对应于上述源元素的数据类型,写入向量寄存器xd中目标元素的数据类型为字节、半字、字,关于源元素数据类型和目标元素数据类型之前的对应关系在前文中已经描述,在此不再赘述。
[0350]
在将移位运算结果中的数据依次写入每个存储区的低半部分之后,执行子步骤s5。
[0351]
子步骤s5:分别将每个存储区中未写入所述数据位置的值置零。
[0352]
在将移位运算结果中的元素作为目标元素依次写入每个存储区的低半部分之后,可以分别将每个存储区中未写入目标元素位置的值置为0。
[0353]
可以理解地,上述示例仅是为了更好地理解本技术实施例的技术方案而列举的示例,不作为对本技术实施例的唯一限制。
[0354]
采用本技术技术方案,通过执行包含第九向量操作码和移位量的指令,实现了两个源元素的逻辑移位舍入有符号饱和至半宽等一系列操作;通过执行包含第十向量操作码
和移位量的指令,移位量来自寄存器,实现了两个源元素的算术移位舍入有符号饱和至半宽等一系列操作;通过执行包含第十一向量操作码和移位量的指令,实现了两个源元素的逻辑移位舍入无符号饱和至半宽等一系列操作;通过执行包含第十二向量操作码和移位量的指令,实现了两个源元素的算术移位舍入无符号饱和至半宽等一系列操作。因而,采用本发明技术方案,能够通过不同的移位参数实现不同的移位需求,进而采用一条移位指令能够实现多种向量移位需求有效降低了系统开销,提高了特定功能向量移位的执行效率。
[0355]
实施例五
[0356]
参照图8,示出了本技术实施例二的一种处理器的结构框图。
[0357]
如图8所示,处理器可以包括:
[0358]
多个向量寄存器,所述多个向量寄存器包括源寄存器81与目的寄存器82,源寄存器用于存储执行向量移位操作时被操作的源元素;
[0359]
指令译码单元83,用于译码向量移位指令;其中,所述向量移位指令包括:寄存器标识和移位参数,所述寄存器标识包括:源寄存器标识和目的寄存器标识,所述源寄存器标识用于表征源寄存器81,所述目的寄存器标识用于表征目的寄存器82;
[0360]
执行单元84,响应于所述向量移位指令,根据所述移位参数对从所述源寄存器81获取的源元素执行向量移位操作,获取所述向量移位操作后的目标元素,并将所述目标元素写入所述目的寄存器82。
[0361]
优选地,所述执行单元84,根据所述移位参数,确定移位量和移位运算规则;其中,所述执行向量移位操作的源元素为至少一个;根据所述移位量和所述移位运算规则,对所述源寄存器中的源元素执行相应的移位运算,生成移位运算结果;将所述移位运算结果确定为目标元素。
[0362]
优选地,所述移位参数包括移位量和操作码;所述移位量用于指示执行所述向量移位运算时被操作源元素的移位位数;所述操作码用于表征对所述源寄存器中源元素和目的寄存器中目标元素所执行的移位运算规则;
[0363]
所述执行单元84,根据所述操作码,从所述源寄存器中选取执行所述向量移位运算的源元素,并将选取的所述源元素确定为被操作数;以及根据所述操作码,对所述被操作数执行相应的移位运算,生成移位运算结果;根据所述操作码,确定所述目标元素在所述目的寄存器中的存储方式;按照所述存储方式,将所述目标元素存储至所述目的寄存器中。
[0364]
优选地,所述移位量为立即数;所述源寄存器包括第一源寄存器和第二源寄存器。
[0365]
优选地,所述操作码为第一类型向量操作码;
[0366]
所述执行单元84,根据所述第一类型向量操作码,将第一源寄存器中的所有源元素确定为一被操作数,并将第二源寄存器中的所有源元素确定为被操作数;
[0367]
根据所述第一类型向量操作码,将所述第一源寄存器中的被操作数和所述第二源寄存器中的被操作数拼接后,生成第一拼接向量;
[0368]
根据所述立即数,对所述第一拼接向量中每个源元素均进行移位舍入饱和至半宽操作,生成第一初始移位运算结果;
[0369]
对所述第一初始移位运算结果执行取位操作,生成移位运算结果;其中,所述取位操作包括对所述第一初始移位运算结果中包含的每个元素均取连续低半部分数据,对所述第一初始移位运算结果中包含的每个元素均取连续高半部分数据,对所述第一初始移位运
算结果中包含的每个元素均取中间连续指定位元素数据,对所述第一初始移位运算结果中包含的每个元素均取非连续指定位数据中的任意一种。
[0370]
优选地,所述第一类型向量操作码为第一向量操作码;
[0371]
所述执行单元84,根据所述立即数,对所述第一拼接向量中每个源元素进行逻辑右移舍入有符号饱和至半宽操作,生成第一初始移位运算结果;
[0372]
分别选取所述第一初始移位运算结果包含的每个元素中连续低半部分数据,将选取操作后的所述元素确定为移位运算结果。
[0373]
优选地,所述第一类型向量操作码为第二向量操作码;
[0374]
所述执行单元84,根据所述立即数,对所述第一拼接向量中每个源元素均进行算术右移舍入有符号饱和至半宽操作,生成第一初始移位运算结果;
[0375]
分别选取所述第一初始移位运算结果包含的每个元素中连续低半部分数据,将选取操作后的所述元素确定为移位运算结果。
[0376]
优选地,所述第一类型向量操作码为第三向量操作码;
[0377]
所述执行单元84,根据所述立即数,对所述第一拼接向量中每个源元素均进行逻辑右移舍入无符号饱和至半宽操作,生成第一初始移位运算结果;
[0378]
分别选取所述第一初始移位运算结果包含的每个元素中连续低半部分数据,将选取操作后的所述元素确定为移位运算结果。
[0379]
优选地,所述第一类型向量操作码为第四向量操作码;
[0380]
所述执行单元84,根据所述立即数,对所述第一拼接向量中每个源元素进行算术右移舍入无符号饱和至半宽操作,生成第一初始移位运算结果;
[0381]
分别选取所述第一初始移位运算结果包含的每个元素中连续低半部分数据,将选取操作后的所述元素确定为移位运算结果。
[0382]
优选地,所述操作码为第二类型向量操作码;
[0383]
所述执行单元84,根据所述第二类型向量操作码,分别在第一源寄存器和第二源寄存器中执行选取操作,得到第一被操作数和第二被操作数;其中,所述选取操作包括对所述第一源寄存器和第二源寄存器中每个元素均选取连续低半部分数据、对所述第一源寄存器和第二源寄存器中每个元素均选取连续高半部分数据、对所述第一源寄存器和第二源寄存器中每个元素均选取中间连续指定位数据、对所述第一源寄存器寄存器和第二源寄存器中每个元素均选取非连续指定位数据中的任意一种;并
[0384]
将所述第一源寄存器中除所述第一被操作数之外的数据确定为第三被操作数,将所述第二源寄存器中除所述第二被操作数之外的数据确定为第四被操作数;
[0385]
将所述第一被操作数和第二被操作数进行拼接后,生成第二拼接向量,以及将第三被操作数和第四被操作数进行拼接后,生成第三拼接向量;其中,所述第二拼接向量和所述第三拼接向量中包含元素的数据类型均为半字、字、双字、四字中的任一种;
[0386]
根据所述立即数,对所述第二拼接向量中每个元素均进行移位舍入饱和至半宽操作,生成第二初始移位运算结果;并根据所述立即数,对所述第三拼接向量中每个元素均进行移位舍入饱和至半宽操作,生成第三初始移位运算结果;
[0387]
对所述第二初始移位运算结果执行取位操作,生成第一移位运算结果;以及,对所述第三初始移位运算结果执行取位操作,生成第二移位运算结果;其中,所述执行取位操作
包括对所述第二初始移位运算结果中包含的每个元素和所述第三初始移位运算结果中包含的每个元素均取连续低半部分数据、对所述第二初始移位运算结果中包含的每个元素和所述第三初始移位运算结果中包含的每个元素均取连续高半部分数据、对所述第二初始移位运算结果中包含的每个元素和所述第三初始移位运算结果中包含的每个元素均取中间连续指定位数据、对所述第二初始移位运算结果中包含的每个元素和所述第三初始移位运算结果中包含的每个元素均取非连续指定位数据中的任意一种;
[0388]
根据所述第一移位运算结果的取位操作位置,将所述第一移位运算结果写入所述目的寄存器相应的存储位置;并
[0389]
根据所述第二移位运算结果的取位操作位置,将所述第二移位运算结果写入所述目的寄存器相应的存储位置。
[0390]
优选地,所述第二类型向量操作码为第五向量操作码;所述第一被操作数为所述第一源寄存器中每个元素连续低半部分组成的数据;所述第二被操作数为所述第二源寄存器中每个元素连续低半部分组成的数据;所述第三被操作数为第一源寄存器中每个元素连续高半部分组成的数据;所述第四被操作数为第二源寄存器中每个元素连续高半部分组成的数据;
[0391]
所述执行单元84,根据所述立即数,对所述第二拼接向量中每个元素均进行逻辑右移舍入有符号饱和至半宽操作,生成第二初始移位运算结果;以及根据所述立即数,对所述第三拼接向量中每个元素均进行逻辑右移舍入有符号饱和至半宽操作,生成第三初始移位运算结果;
[0392]
分别选取所述第二初始移位运算结果中包含的每个元素的连续低半部分数据,将选取的所述数据确定为第一移位运算结果;并分别选取所述第三初始移位运算结果中包含的每个元素的连续高半部分数据,将选取的所述数据确定为第二移位运算结果;其中,根据所述第一移位运算结果中包含的数据确定至少一个第一目标元素,根据所述第二移位运算结果中包含的元素确定至少一个第二目标元素;
[0393]
将所述第一移位运算结果中包含的每个第一目标元素,分别写入所述目的寄存器中每个第一目标元素所在位置的低半部分;
[0394]
将所述第二移位运算结果中包含的每个第二目标元素,分别写入所述目的寄存器中每个第二目标元素所在位置的高半部分。
[0395]
优选地,所述第二类型向量操作码为第六向量操作码;所述第一被操作数为所述第一源寄存器中每个元素连续低半部分组成的数据;所述第二被操作数为所述第二源寄存器中每个元素连续低半部分组成的数据;所述第三被操作数为第一源寄存器中每个元素连续高半部分组成的数据;所述第四被操作数为第二源寄存器中每个元素连续高半部分组成的元素;
[0396]
所述执行单元,根据所述立即数,将所述第二拼接向量中每个元素均进行算术右移舍入有符号饱和至半宽操作,生成第二初始移位运算结果;以及根据所述立即数,将所述第三拼接向量中每个元素均进行算术右移舍入有符号饱和至半宽操作,生成第三初始移位运算结果;
[0397]
分别选取所述第二初始移位运算结果中包含的每个元素的连续低半部分数据,将选取的所述数据确定为第一移位运算结果;并分别选取所述第三初始移位运算结果中包含
的每个元素的连续高半部分数据,将选取的所述数据确定为第二移位运算结果;其中,根据所述第一移位运算结果中包含的数据确定至少一个第一目标元素,根据所述第二移位运算结果中包含的元素确定至少一个第二目标元素;
[0398]
将所述第一移位运算结果中包含的每个第二目标元素,分别写入所述目的寄存器中每个第二目标元素所在位置的低半部分;
[0399]
将所述第二移位运算结果中包含的每个第一目标元素,分别写入所述目的寄存器中每个第一目标元素所在位置的高半部分。
[0400]
优选地,所述第二类型向量操作码为第七向量操作码;所述第一被操作数为所述第一源寄存器中每个元素连续低半部分组成的数据;所述第二被操作数为所述第二源寄存器中每个元素连续低半部分组成的数据;所述第三被操作数为第一源寄存器中每个元素连续高半部分组成的数据;所述第四被操作数为第二源寄存器中每个元素连续高半部分组成的数据;
[0401]
所述执行单元84,根据所述立即数,对所述第二拼接向量中每个元素均进行逻辑右移舍入无符号饱和至半宽操作,生成第二初始移位运算结果;以及
[0402]
根据所述立即数,对所述第三拼接向量中每个元素均进行逻辑右移舍入无符号饱和至半宽操作,生成第三初始移位运算结果;
[0403]
分别选取所述第二初始移位运算结果中包含的每个元素的连续低半部分数据,将选取的所述数据确定为第一移位运算结果;并分别选取所述第三初始移位运算结果中包含的每个元素的连续高半部分数据,将选取的所述数据确定为第二移位运算结果;其中,根据所述第一移位运算结果中包含的数据确定至少一个第一目标元素,根据所述第二移位运算结果中包含的元素确定至少一个第二目标元素;
[0404]
将所述第一移位运算结果中包含的每个第一目标元素,分别写入所述目的寄存器中每个第一目标元素所在位置的低半部分;
[0405]
将所述第二移位运算结果中包含的每个第二目标元素,分别写入所述目的寄存器中每个第二目标元素所在位置的高半部分。
[0406]
优选地,所述第二类型向量操作码为第八向量操作码;所述第一被操作数为所述第一源寄存器中每个元素连续低半部分组成的数据;所述第二被操作数为所述第二源寄存器中每个元素连续低半部分组成的数据;所述第三被操作数为第一源寄存器中每个元素连续高半部分组成的数据;所述第四被操作数为第二源寄存器中每个元素连续高半部分组成的数据;
[0407]
所述执行单元84,根据所述立即数,对所述第二拼接向量中每个元素均进行算术右移舍入无符号饱和至半宽操作,生成第二初始移位运算结果;以及
[0408]
根据所述立即数,对所述第三拼接向量中每个元素均进行算术右移舍入无符号饱和至半宽操作,生成第三初始移位运算结果;
[0409]
分别选取所述第二初始移位运算结果中包含的每个元素的连续低半部分数据,将选取的所述数据确定为第一移位运算结果;并分别选取所述第三初始移位运算结果中包含的每个元素的连续高半部分数据,将选取的所述数据确定为第二移位运算结果;;其中,根据所述第一移位运算结果中包含的数据确定至少一个第一目标元素,根据所述第二移位运算结果中包含的元素确定至少一个第二目标元素;
[0410]
将所述第一移位运算结果中包含的每个第一目标元素,分别写入所述目的寄存器中每个第一目标元素所在位置的低半部分;
[0411]
将所述第二移位运算结果中包含的每个第二目标元素,分别写入所述目的寄存器中每个第二目标元素所在位置的高半部分。
[0412]
优选地,所述指令还包括移位量寄存器标识,所述移位量寄存器标识用于表征移位量寄存器,所述移位量寄存器为存储移位量的寄存器。
[0413]
优选地,所述操作码为第三类型向量操作码;所述源寄存器包括第一源寄存器;
[0414]
所述执行单元,根据所述第三类型向量操作码,在所述第一源寄存器中执行选取操作,得到第五被操作数;其中,所述选取操作包括对所述第一源寄存器中每个元素均选取连续低半部分数据、对所述第一源寄存器中每个元素均选取连续高半部分数据、对所述第一源寄存器中每个元素均选取中间连续指定位数据、对所述第一源寄存器中每个元素均选取非连续指定位数据的任意一种;
[0415]
根据所述第三类型向量操作码和所述移位量,对所述第五被操作数进行移位舍入饱和至半宽操作,生成第四初始移位运算结果;
[0416]
对所述第四初始移位运算结果执行取位操作,生成移位运算结果;其中,所述取位操作包括分别对所述第四初始移位运算结果包含的每个元素中取连续低半部分数据、分别对所述第四初始移位运算结果包含的每个元素中取连续高半部分数据、分别对所述第四初始移位运算结果包含的每个元素中取中间连续指定位数据、分别对所述第四初始移位运算结果包含的每个元素中取非连续指定位数据中的任意一种;
[0417]
将所述移位运算结果中的数据,依次写入所述目的寄存器中的相应位置;并
[0418]
根据所述第三类型向量操作码,设置所述目的寄存器中未写入所述数据位置的值。
[0419]
优选地,所述第三类型向量操作码为第九向量操作码,所述第五被操作数为所述第一源寄存器中任意连续的源元素;
[0420]
所述执行单元84,根据所述移位量,对所述第五被操作数包含的每个元素均进行逻辑右移舍入有符号饱和至半宽操作,生成第四初始移位运算结果;
[0421]
分别选取所述第四初始移位运算结果中包含每个元素的连续低半部分元素,将选取操作后的元素确定为移位运算结果;
[0422]
根据预设值对目的寄存器中的存储位置进行划分,并确定每个目标元素的存储区;
[0423]
将所述移位运算结果中的数据,依次写入每个存储区的低半部分;并
[0424]
分别将每个存储区中未写入所述数据位置的值置零。
[0425]
优选地,所述第三类型向量操作码为第十向量操作码,所述第五被操作数为所述第一源寄存器中任意连续的源元素;
[0426]
所述执行单元84,根据所述移位量,对所述第五被操作数包含的每个元素均进行算术右移舍入有符号饱和至半宽操作,生成第四初始移位运算结果;
[0427]
分别选取所述第四初始移位运算结果中包含每个元素的连续低半部分元素,将选取操作后的元素确定为移位运算结果;
[0428]
根据预设值对目的寄存器中的存储位置进行划分,确定每个目标元素的存储区;
[0429]
将所述移位运算结果中的数据,依次写入每个存储区的低半部分;并
[0430]
分别将每个存储区中未写入所述数据位置的值置零。
[0431]
优选地,根据权利要求16所述的方法,其特征在于,所述第三类型向量操作码为第十一向量操作码,所述第五被操作数为所述第一源寄存器中任意连续的源元素;
[0432]
所述执行单元84,根据所述移位量,对所述第五被操作数包含的每个元素均进行逻辑右移舍入无符号饱和至半宽操作,生成第四初始移位运算结果;
[0433]
选取所述第四初始移位运算结果中包含的每个元素的连续低半部分元素,将选取操作后的元素确定为移位运算结果;
[0434]
根据预设值对目的寄存器中的存储位置进行划分,确定每个目标元素的存储区;
[0435]
将所述移位运算结果中的数据,依次写入每个存储区的低半部分;并
[0436]
分别将每个存储区中未写入所述数据位置的值置零。
[0437]
优选地,所述第三类型向量操作码为第十二向量操作码,所述第五被操作数为所述第一源寄存器中任意连续的源元素;
[0438]
所述执行单元84,根据所述移位量,对所述第五被操作数包含的每个元素均进行算术右移舍入无符号饱和至半宽操作,生成第四初始移位运算结果;
[0439]
分别选取所述第四初始移位运算结果中包含每个元素的连续低半部分元素,将选取操作后的元素确定为移位运算结果;
[0440]
根据预设值对目的寄存器中的存储位置进行划分,去顶每个目标元素的存储区;
[0441]
将所述移位运算结果中的数据,依次写入每个存储区的低半部分;并
[0442]
分别将每个存储区中未写入所述数据位置的值置零。
[0443]
优选地,所述源寄存器数量为一个或多个,所述目的寄存器数量为一个;所述源寄存器标识与所述目的寄存器标识相同或不同。
[0444]
优选地,所述源寄存器数量为多个,所述目的寄存器数量为一个;
[0445]
所有所述源寄存器中每一个源寄存器标识均与所述目的寄存器标识不同;或者,所有所述源寄存器中存在一个源寄存器标识与所述目的寄存器标识相同。
[0446]
实施例六
[0447]
参照图9,示出了本技术实施例五的一种用于执行向量移位操作的电子设备的结构示意图。
[0448]
如图9所示,电子设备可以包括以下一个或多个组件:处理组件902,存储器904,电源组件906,多媒体组件908,音频组件910,输入/输出(i/o)的接口912,传感器组件914,以及通信组件916。
[0449]
处理组件902通常控制电子设备的整体操作,诸如与显示,数据通信,相机操作和记录操作相关联的操作。处理元件302可以包括一个或多个处理器920来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件902可以包括一个或多个模块,便于处理组件902和其他组件之间的交互。例如,处理部件902可以包括多媒体模块,以方便多媒体组件908和处理组件902之间的交互。
[0450]
存储器904被配置为存储各种类型的数据以支持在电子设备的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器904可以由任何类型的易失性或非易失性存储设备或者它们的
组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
[0451]
电源组件906为电子设备的各种组件提供电力。电源组件906可以包括电源管理系统,一个或多个电源,及其他与为终端900生成、管理和分配电力相关联的组件。
[0452]
多媒体组件908包括在所述电子设备和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件508包括一个前置摄像头和/或后置摄像头。当电子设备处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
[0453]
音频组件910被配置为输出和/或输入音频信号。例如,音频组件910包括一个麦克风(mic),当终端处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器904或经由通信组件916发送。在一些实施例中,音频组件910还包括一个扬声器,用于输出音频信号。
[0454]
i/o接口912为处理组件902和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
[0455]
传感器组件914包括一个或多个传感器,用于为电子设备900提供各个方面的状态评估。例如,传感器组件914可以检测到电子设备900的打开/关闭状态,组件的相对定位,例如所述组件为终端的显示器和小键盘,传感器组件914还可以检测终端或终端一个组件的位置改变,用户与电子设备接触的存在或不存在,电子设备方位或加速/减速和电子设备的温度变化。传感器组件914可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件914还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件914还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
[0456]
通信组件916被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如wifi,2g或3g,或它们的组合。在一个示例性实施例中,通信部件916经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信部件916还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
[0457]
在示例性实施例中,电子设备可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述向量移位方法。
[0458]
本技术实施例的电子设备用于实现前述多个方法实施例中相应的使用指令执行向量移位的方法,并且具有相应的方法实施的有益效果,在此不再赘述。
[0459]
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0460]
以上对本技术所提供的一种向量移位方法、处理器、电子设备及可读存储介质进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
[0461]
在此提供的算法和显示不与任何特定计算机、电子系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本技术也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本技术的内容,并且上面对特定语言所做的描述是为了披露本技术的最佳实施方式。
[0462]
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本技术的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0463]
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本技术的示例性实施例的描述中,本技术的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本技术要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本技术的单独实施例。
[0464]
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0465]
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本技术的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0466]
本技术的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本技术实施例的浏览器客户端设备中的一
些或者全部部件的一些或者全部功能。本技术还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本技术的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0467]
应该注意的是上述实施例对本技术进行说明而不是对本技术进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本技术可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献