CN110221807B - 数据移位方法、装置、设备及计算机可读存储介质 - Google Patents
数据移位方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110221807B CN110221807B CN201910493204.6A CN201910493204A CN110221807B CN 110221807 B CN110221807 B CN 110221807B CN 201910493204 A CN201910493204 A CN 201910493204A CN 110221807 B CN110221807 B CN 110221807B
- Authority
- CN
- China
- Prior art keywords
- data
- shifting
- temporary register
- shift
- source data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
Abstract
本发明实施例提供一种数据移位方法、装置、设备及计算机可读存储介质,该方法包括:接收字节移位宏指令,其中,所述字节移位宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据存入与所述临时寄存器标识对应的临时寄存器中,根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果;将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。本发明实施例能够有效简化按字节对数据进行移位的实现代码,降低代码的冗余度,降低维护成本。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数据移位方法、装置、设备及计算机可读存储介质。
背景技术
现有处理器可以支持多媒体指令,多媒体指令例如有64位多媒体指令、128位多媒体指令、256位多媒体指令等等。多媒体指令能够实现单指令多数据流操作,一次可以计算多组数据的运算,这非常适合数据密集型运算场合,例如图形图像处理场合等。在处理器处理数据的过程中,需要对数据进行移位处理。
现有技术中,在对数据移位的时候,可以采用多条指令对数据进行处理以实现移位,例如采用半字移位指令和字移位指令完成数据移位。
然而现有技术中,由于对数据按字节移位需要多条指令来实现,导致在使用多媒体指令进行性能优化的时候,例如优化图形图像的编解码库函数,在进行数据按字节移位时,采用多条指令进行填充处理以实现移位;进而造成大量冗余代码,且代码可读性差,不易维护,维护成本较高。
发明内容
本发明实施例提供一种数据移位方法、装置、设备及计算机可读存储介质,以解决目前对数据按字节移位需要多条指令来实现,造成大量冗余代码,且代码可读性差,不易维护的问题。
第一方面,本发明实施例提供一种数据移位方法,包括:
接收字节移位宏指令,其中,所述字节移位宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,所述源数据包含至少一个由八位字节数据组成的数据单元;
根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据存入与所述临时寄存器标识对应的临时寄存器中,其中,所述临时寄存器包括至少一个用于存储十六位字节数据的存储单元,所述源数据中的数据单元与所述临时寄存器中的存储单元一一对应;
根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果;
根据所述目标寄存器标识,确定与所述目标寄存器标识对应的目标寄存器,并将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。
在一种可能的实施方式中,所述字节移位宏指令包括字节右移宏指令;
所述将所述源数据存入与所述临时寄存器标识对应的临时寄存器中包括:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的高位;
所述根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果包括:
将所述临时寄存器中的所有数据向右移动第一位数,其中,所述第一位数为所述移位位数与八相加得到的和值;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
在一种可能的实施方式中,所述字节右移宏指令为算术右移宏指令或者逻辑右移宏指令;
若所述字节右移宏指令为算术右移宏指令,则所述将所述临时寄存器中的所有数据向右移动第一位数包括:
调用算术右移指令将所述临时寄存器中的所有数据向右移动所述第一位数;
若所述字节右移宏指令为逻辑右移宏指令,则所述将所述临时寄存器中的所有数据向右移动第一位数包括:
调用逻辑右移指令将所述临时寄存器中的所有数据向右移动所述第一位数。
在一种可能的实施方式中,所述字节移位宏指令包括逻辑左移宏指令;
所述将所述源数据存入与所述临时寄存器标识对应的临时寄存器中包括:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的低位;
所述根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果包括:
将所述临时寄存器中的所有数据向左移动第二位数,其中,所述第二位数为所述移位位数与八相加得到的和值;
将所述向左移动第二位数后的临时寄存器中的所有数据向右移动八位;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
在一种可能的实施方式中,所述源数据包含八个数据单元;所述临时寄存器为两个,每个临时存储器包含四个存储单元。
第二方面,本发明实施例提供一种数据移位装置,包括:
接收模块,用于接收字节移位宏指令,其中,所述字节移位宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,所述源数据包含至少一个由八位字节数据组成的数据单元;
第一存储模块,用于根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据存入与所述临时寄存器标识对应的临时寄存器中,其中,所述临时寄存器包括至少一个用于存储十六位字节数据的存储单元,所述源数据中的数据单元与所述临时寄存器中的存储单元一一对应;
移位模块,用于根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果;
第二存储模块,用于根据所述目标寄存器标识,确定与所述目标寄存器标识对应的目标寄存器,并将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。
在一种可能的实施方式中,所述字节移位宏指令为字节右移宏指令;所述第一存储模块用于:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的高位;
所述移位模块用于:
将所述临时寄存器中的所有数据向右移动第一位数,其中,所述第一位数为所述移位位数与八相加得到的和值;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
在一种可能的实施方式中,所述字节移位宏指令包括逻辑左移宏指令;所述第一存储模块用于:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的低位;
所述移位模块用于:
将所述临时寄存器中的所有数据向左移动第二位数,其中,所述第二位数为所述移位位数与八相加得到的和值;
将所述向左移动第二位数后的临时寄存器中的所有数据向右移动八位;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
第三方面,本发明实施例提供一种数据移位设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的实施方式所述的数据移位方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的实施方式所述的数据移位方法。
本实施例提供的数据移位方法、装置、设备及计算机可读存储介质,通过接收字节移位宏指令,将包含至少一个由八位字节数据组成的数据单元的源数据存入到临时存储器中,临时存储器包括至少一个用于存储十六位字节数据的存储单元,源数据中的数据单元与临时寄存器中的存储单元一一对应,然后对临时存储器中的所有数据进行移位处理,从移位处理后的临时寄存器的数据中提取源数据移位结果,将源数据移位结果存入目标寄存器中,通过将八位字节数据的数据单元存入到十六位字节数据的存储单元后,对十六位字节数据的存储单元进行整体移位,再从中提取出八位字节数据的移位结果,从而实现数据按字节移位。本发明实施例通过字节移位宏指令实现按字节对数据进行移位,能够有效简化对数据按字节进行移位的实现代码,降低代码的冗余度,提升代码的可读性,降低维护成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的数据移位方法的流程示意图;
图2为本发明又一实施例提供的数据移位方法的流程示意图;
图3为本发明实施例提供的通过字节右移宏指令对源数据进行移位的过程示意图;
图4为本发明另一实施例提供的数据移位方法的流程示意图;
图5为本发明实施例提供的通过逻辑左移宏指令对源数据进行移位的过程示意图;
图6为本发明一实施例提供的数据移位装置的结构示意图;
图7为本发明一实施例提供的数据移位设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现有处理器的多媒体指令中包含半字移位指令和字移位指令,但是没有直接实现按字节移位的指令,需要对数据进行按字节移位的场合每处都需要填充多条指令来实现,这样一方面会造成大量冗余代码,另一方面不同的用户可能会选择不同的方式去实现,从而造成代码可读性差,且不易维护。本发明实施例适用于对数据进行按字节移位的场景,通过字节移位宏指令实现数据按字节进行移位,从而降低代码的冗余度,提升代码的可读性,降低维护成本。
图1为本发明一实施例提供的数据移位方法的流程示意图。如图1所示,该方法包括:
S101、接收字节移位宏指令,其中,所述字节移位宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,所述源数据包含至少一个由八位字节数据组成的数据单元。
在本实施例中,源数据为需要按字节进行移位的数据。源数据可以包括一个或多个数据单元,每个数据单元由八位字节的数据组成。字节移动宏指令为用于指示对源数据各个数据单元中的数据按字节进行移位的宏指令。移位位数用于表征源数据各个数据单元中的数据所需要移动的位数。
临时寄存器标识为临时寄存器的标识。临时寄存器标识与临时寄存器一一对应。一个临时寄存器的临时寄存器标识可以为该临时寄存器的地址、该临时寄存器的名称或指向该临时寄存器的指针向量等,在此不作限定。临时寄存器用于存储对源数据各个数据单元中的数据按字节移位过程中产生的需要临时存放的数据。
目标寄存器标识为目标寄存器的标识。目标寄存器标识与目标寄存器一一对应。一个目标寄存器的目标寄存器标识可以为该目标寄存器的地址、该目标寄存器的名称或指向该目标寄存器的指针向量等,在此不作限定。目标寄存器用于存储对源数据各个数据单元中的数据按字节移位后生成的结果数据。
S102、根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据存入与所述临时寄存器标识对应的临时寄存器中,其中,所述临时寄存器包括至少一个用于存储十六位字节数据的存储单元,所述源数据中的数据单元与所述临时寄存器中的存储单元一一对应。
在本实施例中,可以根据临时寄存器标识,确定与该临时寄存器标识对应的临时寄存器,然后将源数据保存到该临时寄存器中。临时寄存器可以包括一个或多个存储单元,每个存储单元用于存储一个十六位字节的数据。源数据中的数据单元与临时寄存器中的存储单元一一对应。可以将源数据中的一个数据单元的数据存入到该临时寄存器中与该数据单元对应的存储单元中。
S103、根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果。
在本实施例中,临时寄存器各存储单元中的八位字节存储空间用于保存源数据中数据单元的数据,其余八位字节存储空间没有存储源数据,其余八位字节的存储空间可以存储预置的指定数据或者未进行预置的任意数据,在此不作限定。
源数据移位结果为对源数据按字节移位后得到的结果。可以根据移位位数对临时寄存器中的所有存储单元的数据进行移位处理,然后从移位处理后的临时寄存器各个存储单元中提取出需要的数据组成源数据移位结果。
S104、根据所述目标寄存器标识,确定与所述目标寄存器标识对应的目标寄存器,并将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。
在本实施例中,可以根据目标寄存器标识,确定与该目标寄存器标识对应的目标寄存器,并将源数据移位结果存入该目标寄存器中。
本发明实施例通过接收字节移位宏指令,将包含至少一个由八位字节数据组成的数据单元的源数据存入到临时存储器中,临时存储器包括至少一个用于存储十六位字节数据的存储单元,源数据中的数据单元与临时寄存器中的存储单元一一对应,然后对临时存储器中的所有数据进行移位处理,从移位处理后的临时寄存器的数据中提取源数据移位结果,将源数据移位结果存入目标寄存器中,通过将八位字节数据的数据单元存入到十六位字节数据的存储单元后,对十六位字节数据的存储单元进行整体移位,再从中提取出八位字节数据的移位结果,从而实现数据按字节移位。本发明实施例通过字节移位宏指令实现按字节对数据进行移位,能够有效简化对数据按字节进行移位的实现代码,降低代码的冗余度,提升代码的可读性,降低维护成本。
图2为本发明又一实施例提供的数据移位方法的流程示意图。在本实施例中,字节移位宏指令包括字节右移宏指令,字节右移宏指令用于指示对源数据向右移动指定的位数的宏指令。如图2所示,所述方法包括:
S201、接收字节右移宏指令,其中,所述字节右移宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,所述源数据包含至少一个由八位字节数据组成的数据单元。
在本实施例中,S201与图1实施例中的S101类似,此处不再赘述。
可选地,所述源数据包含八个数据单元;所述临时寄存器为两个,每个临时存储器包含四个存储单元。
在本实施例中,源数据包含数据单元的个数可以根据处理器支持的多媒体指令位数来确定。例如,对于支持64位多媒体指令的处理器,字节移位宏指令为64位,源数据可以包含8个数据单元,每个数据单元包含8位字节的数据,临时寄存器可以为两个,每个临时存储器包含4个存储单元。对于128位多媒体指令的处理器,字节移位宏指令为128位,源数据可以包含16个数据单元,每个数据单元包含8位字节的数据,临时寄存器可以为4个,每个临时存储器包含4个存储单元。源数据中的数据单元个数及临时寄存器中的存储单元个数可以根据实际需求确定,在此不作限定。
为便于说明,下面以字节右移宏指令为64位为例进行说明,但不作为限定。其中,字节右移宏指令可以包括算术右移宏指令和逻辑右移宏指令。算术右移宏指令可以表示为:
PSRAB_MMI fr_src,fr_shift,fr_t0,fr_t1,fr_dst
逻辑右移宏指令可以表示为:
PSRLB_MMI fr_src,fr_shift,fr_t0,fr_t1,fr_dst
其中,上述指令中的参数均为64位浮点寄存器。fr_src中存储8个8位字节数据作为需要移位的源数据。fr_shift中存储要移位的位数,其中可以设置fr_shift中最低7位有效,将源数据要移动的位数保存到fr_shift中的最低7位。fr_t0和fr_t1是两个临时寄存器,fr_dst是用于存放源数据移位之后结果的寄存器,可以和fr_src一致。
S202、根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的高位,其中,所述临时寄存器包括至少一个用于存储十六位字节数据的存储单元,所述源数据中的数据单元与所述临时寄存器中的存储单元一一对应。
在本实施例中,临时寄存器中每个存储单元包括高位和低位,其中高位和低位均为8位字节的存储空间。对源数据向右移动可以将源数据的各个数据单元的数据分别存入到临时寄存器中与之对应的存储单元的高位。
图3为本发明实施例提供的通过字节右移宏指令对源数据进行移位的过程示意图。图3(a)为本发明实施例提供的执行字节右移宏指令时将源数据存入临时寄存器的示意图。图3(a)中,以64位字节右移宏指令为例,S0至S7为8个数据单元,将S0至S3存入fr_t0中四个存储单元的高位,将S4至S7存入fr_t1中四个存储单元的高位,fr_t0中四个存储单元和fr_t1中四个存储单元的低位为*,*表示随机值,*取决于临时寄存器的值,无需初始化,对移位结果不会有影响。
作为本发明的一个实施示例,对于MIPS(Microprocessor without interlockedpipelined stages,无内部互锁流水级的微处理器)架构处理器,可以通过调用punpcklbh指令和punpckhbh指令将寄存器fr_src中的源数据打包存入临时寄存器fr_t0和fr_t1。对于其他处理器,可以调用类似的指令实现,在此不作限定。
S203、将所述临时寄存器中的所有数据向右移动第一位数,其中,所述第一位数为所述移位位数与八相加得到的和值。
在本实施例中,可以将移位位数加八计算得到和值,将该和值作为第一位数,将临时寄存器中的所有数据都向右移动该第一位数。
可选地,所述字节右移宏指令为算术右移宏指令或者逻辑右移宏指令;
若所述字节右移宏指令为算术右移宏指令,则所述将所述临时寄存器中的所有数据向右移动第一位数包括:
调用算术右移指令将所述临时寄存器中的所有数据向右移动所述第一位数;
若所述字节右移宏指令为逻辑右移宏指令,则所述将所述临时寄存器中的所有数据向右移动第一位数包括:
调用逻辑右移指令将所述临时寄存器中的所有数据向右移动所述第一位数。
在本实施例中,字节右移宏指令可以为算术右移宏指令或者逻辑右移宏指令。当字节右移宏指令为算术右移宏指令时,可以调用算术右移指令将临时寄存器中的所有数据向右移动第一位数;当字节右移宏指令为逻辑右移宏指令时,可以调用逻辑右移指令将临时寄存器中的所有数据向右移动第一位数。
图3(b)为本发明实施例提供的执行算术右移宏指令时将源数据的所有数据向右移动第一位数的示意图。如图3(b)所示,sign是算术右移过程中的填充的符号位,Sn’表示Sn算术右移fr_shift位之后的结果。例如S0’表示S0算术右移fr_shift位之后的结果,假设S0为11010111,fr_shift中存储的移动位数为3,则S0’为11111011。
图3(c)为本发明实施例提供的处理器执行逻辑右移宏指令时将源数据的所有数据向右移动第一位数的示意图。如图3(c)所示,zero是逻辑右移过程中的填充的0,Sn’表示Sn逻辑右移fr_shift位之后的结果,例如S0’表示S0逻辑右移fr_shift位之后的结果,假设S0为11010111,fr_shift中存储的移动位数为3,则S0’为00011011。
作为本发明的一个实施示例,若处理器为MIPS架构处理器,对于算术右移宏指令,可以调用psrah指令分别对fr_t0和fr_t1进行16位半字算术右移fr_shift+8位;对于逻辑右移宏指令,可以调用psrlh指令分别对fr_t0和fr_t1进行16位半字算术右移fr_shift+8位。
S204、提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
在本实施例中,从临时寄存器各个存储单元中提取出存储在低位的数据,将提取出的数据作为源数据移位结果。
S205、根据所述目标寄存器标识,确定与所述目标寄存器标识对应的目标寄存器,并将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。
在本实施例中,S205与图1实施例中的S104类似,此处不再赘述。
图3(d)为本发明实施例提供的执行算术右移宏指令时提取源数据移位结果并将源数据移位结果存入到目标寄存器的示意图。图3(e)为本发明实施例提供的执行逻辑右移宏指令时提取源数据移位结果并将源数据移位结果存入到目标寄存器的示意图。如图3(d)和3(e)所示,将fr_t0和fr_t1的低8位上的数据打包存入目标寄存器fr_dst。
作为本发明的一个实施示例,对于MIPS架构处理器,可以调用packsshb指令将fr_t0和fr_t1的低8位打包存入目标寄存器fr_dst。
本实施例通过将源数据的各个数据单元存入临时寄存器中对应存储单元的高位,然后将临时寄存器中的所有数据向右移动第一位数,提取临时寄存器各个存储单元中低位的数据作为源数据移位结果,能够实现对源数据按字节右移。本实施例对源数据按字节进行右移的方式,能够在对源数据进行算术右移时,确保补位的符号位是由源数据的高位来决定,而不是临时寄存器中随机值的高位来决定,从而保证对源数据算术右移的正确性。
图4为本发明另一实施例提供的数据移位方法的流程示意图。在本实施例中,所述字节移位宏指令包括逻辑左移宏指令,逻辑左移宏指令为用于指示对源数据按指定的位数进行逻辑左移的宏指令。如图4所示,所述方法包括:
S401、接收逻辑左移宏指令,其中,所述逻辑左移宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,所述源数据包含至少一个由八位字节数据组成的数据单元。
在本实施例中,S401与图1实施例中的S101类似,此处不再赘述。
S402、根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的低位,其中,所述临时寄存器包括至少一个用于存储十六位字节数据的存储单元,所述源数据中的数据单元与所述临时寄存器中的存储单元一一对应。
在本实施例中,临时寄存器中每个存储单元包括高位和低位,其中高位和低位均为8位字节的存储空间。对源数据进行逻辑左移处理可以将源数据的各个数据单元的数据分别存入到临时寄存器中与之对应的存储单元的低位。
为便于说明,下面以逻辑左移宏指令为64位为例进行说明,但不作为限定。逻辑左移宏指令可以表示为:
PSLLB_MMI fr_src,fr_shift,fr_t0,fr_t1,fr_dst
其中,上述指令中的参数均为64位浮点寄存器。fr_src中存储8个8位字节数据作为需要移位的源数据。fr_shift中存储要移位的位数,其中可以设置fr_shift中最低7位有效,将源数据要移动的位数保存到fr_shift中的最低7位。fr_t0和fr_t1是两个临时寄存器,fr_dst是用于存放源数据移位之后结果的寄存器,可以和fr_src一致。
图5为本发明实施例提供的通过逻辑左移宏指令对源数据进行移位的过程示意图。图5(a)为本发明实施例提供的执行逻辑左移宏指令时将源数据存入临时寄存器的示意图。图5(a)中,以64位逻辑左移宏指令为例,S0至S7为8个数据单元,将S0至S3存入fr_t0中四个存储单元的低位,将S4至S7存入fr_t1中四个存储单元的低位,fr_t0中四个存储单元和fr_t1中四个存储单元的高位为*表示随机值,*取决于临时寄存器的值,无需初始化,对移位结果不会有影响。
作为本发明的一个实施示例,对于MIPS架构处理器,可以通过调用punpcklbh指令和punpckhbh指令将寄存器fr_src中的源数据打包存入临时寄存器fr_t0和fr_t1。对于其他处理器,可以调用类似的指令实现,在此不作限定。
S403、将所述临时寄存器中的所有数据向左移动第二位数,其中,所述第二位数为所述移位位数与八相加得到的和值。
在本实施例中,可以将移位位数加八计算得到和值,将该和值作为第二位数,将临时寄存器中的所有数据都逻辑左移该第二位数。
图5(b)为本发明实施例提供的执行逻辑左移宏指令时将临时寄存器中的所有数据向左移动第二位数的示意图。如图5(b)所示,zero是逻辑左移过程中的填充的0,Sn’表示Sn逻辑左移fr_shift位之后的结果。例如S0’表示S0逻辑左移fr_shift位之后的结果,假设S0为11010111,fr_shift中存储的移动位数为3,则S0’为10111000。
作为本发明的一个实施示例,对于MIPS架构处理器,可以调用psllh指令分别对fr_t0和fr_t1进行16位半字逻辑左移fr_shift+8位。
S404、将所述向左移动第二位数后的临时寄存器中的所有数据向右移动八位。
在本实施例中,在将临时寄存器中的所有数据向左移动第二位数后,再将临时寄存器中的所有数据向右移动八位。
图5(c)为本发明实施例提供的执行逻辑左移宏指令时将临时寄存器中的所有数据向右移动八位的示意图。如5(c)所示,移位后Sn’由fr_t0中存储单元的高位移动低位。
作为本发明的一个实施示例,对于MIPS架构处理器,可以调用调用psrlh指令分别对fr_t0和fr_t1进行16位半字逻辑右移8位。
S405、提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
在本实施例中,从临时寄存器各个存储单元中提取出存储在低位的数据,将提取出的数据作为源数据移位结果。
S406、根据所述目标寄存器标识,确定与所述目标寄存器标识对应的目标寄存器,并将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。
在本实施例中,S406与图1实施例中的S104类似,此处不再赘述。
图5(d)为本发明实施例提供的执行逻辑左移宏指令时提取源数据移位结果并将源数据移位结果存入到目标寄存器的示意图。如图5(d)所示,将fr_t0和fr_t1的低8位上的数据打包存入目标寄存器fr_dst。
作为本发明的一个实施示例,对于MIPS架构处理器,可以调用packsshb指令将fr_t0和fr_t1的低8位打包存入目标寄存器fr_dst。
本实施例通过将源数据的各个数据单元存入临时寄存器中对应存储单元的低位,然后先将临时寄存器中的所有数据向左移动第二位数,再向右移动八位,提取临时寄存器各个存储单元中低位的数据作为源数据移位结果,能够实现对源数据按字节的逻辑左移。
本发明实施例适用于采用多媒体指令进行数据优化过程中需要完成8字节数据移位的场合,以解决由于没有直接完成8字节数据移位的指令造成代码冗余以及性能优化效果不佳等问题。通过本发明实施例可以实现类似单条指令的操作方式来实现8字节数据移位操作,从而让优化代码更简洁易读和高效。本发明实施例提供宏指令来实现8字节数据移位功能,在利用多媒体指令开发过程中使用上述宏指令来简化8字节数据移位操作,能够帮助简化使用多媒体指令进行性能优化的代码开发工作。
本发明实施例通过接收字节移位宏指令,将包含至少一个由八位字节数据组成的数据单元的源数据存入到临时存储器中,临时存储器包括至少一个用于存储十六位字节数据的存储单元,源数据中的数据单元与临时寄存器中的存储单元一一对应,然后对临时存储器中的所有数据进行移位处理,从移位处理后的临时寄存器的数据中提取源数据移位结果,将源数据移位结果存入目标寄存器中,通过将八位字节数据的数据单元存入到十六位字节数据的存储单元后,对十六位字节数据的存储单元进行整体移位,再从中提取出八位字节数据的移位结果,从而实现数据按字节移位。本发明实施例通过字节移位宏指令实现按字节对数据进行移位,能够有效简化对数据按字节进行移位的实现代码,降低代码的冗余度,提升代码的可读性,降低维护成本。
图6为本发明一实施例提供的数据移位装置的结构示意图。如图6所示,该数据移位装置60包括:接收模块601、第一存储模块602、移位模块603及第二存储模块604。
接收模块601,用于接收字节移位宏指令,其中,所述字节移位宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,所述源数据包含至少一个由八位字节数据组成的数据单元。
第一存储模块602,用于根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据存入与所述临时寄存器标识对应的临时寄存器中,其中,所述临时寄存器包括至少一个用于存储十六位字节数据的存储单元,所述源数据中的数据单元与所述临时寄存器中的存储单元一一对应。
移位模块603,用于根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果。
第二存储模块604,用于根据所述目标寄存器标识,确定与所述目标寄存器标识对应的目标寄存器,并将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。
本发明实施例通过接收字节移位宏指令,将包含至少一个由八位字节数据组成的数据单元的源数据存入到临时存储器中,临时存储器包括至少一个用于存储十六位字节数据的存储单元,源数据中的数据单元与临时寄存器中的存储单元一一对应,然后对临时存储器中的所有数据进行移位处理,从移位处理后的临时寄存器的数据中提取源数据移位结果,将源数据移位结果存入目标寄存器中,通过将八位字节数据的数据单元存入到十六位字节数据的存储单元后,对十六位字节数据的存储单元进行整体移位,再从中提取出八位字节数据的移位结果,从而实现数据按字节移位。本发明实施例通过字节移位宏指令实现按字节对数据进行移位,能够有效简化对数据按字节进行移位的实现代码,降低代码的冗余度,提升代码的可读性,降低维护成本。
可选地,所述字节移位宏指令包括字节右移宏指令;所述第一存储模块602用于:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的高位。
所述移位模块603用于:
将所述临时寄存器中的所有数据向右移动第一位数,其中,所述第一位数为所述移位位数与八相加得到的和值;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
可选地,所述字节右移宏指令为算术右移宏指令或者逻辑右移宏指令;所述移位模块603用于:
若所述字节右移宏指令为算术右移宏指令,则调用算术右移指令将所述临时寄存器中的所有数据向右移动所述第一位数;
若所述字节右移宏指令为逻辑右移宏指令,则调用逻辑右移指令将所述临时寄存器中的所有数据向右移动所述第一位数。
可选地,所述字节移位宏指令包括逻辑左移宏指令;所述第一存储模块602用于:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的低位。
所述移位模块603用于:
将所述临时寄存器中的所有数据向左移动第二位数,其中,所述第二位数为所述移位位数与八相加得到的和值;
将所述向左移动第二位数后的临时寄存器中的所有数据向右移动八位;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
可选地,所述源数据包含八个数据单元;所述临时寄存器为两个,每个临时存储器包含四个存储单元。
本发明实施例提供的数据移位装置,可用于执行上述的方法实施例,其实现原理和技术效果类似,本实施例此处不再赘述。
图7为本发明一实施例提供的数据移位设备的硬件结构示意图。如图7所示,本实施例提供的数据移位设备70包括:至少一个处理器701和存储器702。该数据移位设备70还包括通信部件703。其中,处理器701、存储器702以及通信部件703通过总线704连接。
在具体实现过程中,至少一个处理器701执行所述存储器702存储的计算机执行指令,使得至少一个处理器701执行如上的数据移位方法。
处理器701的具体实现过程可参见上述方法实施例,其实现原理和技术效果类似,本实施例此处不再赘述。
在上述的图7所示的实施例中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上的数据移位方法。
上述的计算机可读存储介质,上述可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。可读存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(Application Specific IntegratedCircuits,简称:ASIC)中。当然,处理器和可读存储介质也可以作为分立组件存在于设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种数据移位方法,其特征在于,包括:
接收字节移位宏指令,其中,所述字节移位宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,所述源数据包含至少一个由八位字节数据组成的数据单元;
根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据存入与所述临时寄存器标识对应的临时寄存器中,其中,所述临时寄存器包括至少一个用于存储十六位字节数据的存储单元,所述源数据中的数据单元与所述临时寄存器中的存储单元一一对应;
根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果;
根据所述目标寄存器标识,确定与所述目标寄存器标识对应的目标寄存器,并将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。
2.根据权利要求1所述的方法,其特征在于,所述字节移位宏指令包括字节右移宏指令;
所述将所述源数据存入与所述临时寄存器标识对应的临时寄存器中包括:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的高位;
所述根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果包括:
将所述临时寄存器中的所有数据向右移动第一位数,其中,所述第一位数为所述移位位数与八相加得到的和值;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
3.根据权利要求2所述的方法,其特征在于,所述字节右移宏指令为算术右移宏指令或者逻辑右移宏指令;
若所述字节右移宏指令为算术右移宏指令,则所述将所述临时寄存器中的所有数据向右移动第一位数包括:
调用算术右移指令将所述临时寄存器中的所有数据向右移动所述第一位数;
若所述字节右移宏指令为逻辑右移宏指令,则所述将所述临时寄存器中的所有数据向右移动第一位数包括:
调用逻辑右移指令将所述临时寄存器中的所有数据向右移动所述第一位数。
4.根据权利要求1所述的方法,其特征在于,所述字节移位宏指令包括逻辑左移宏指令;
所述将所述源数据存入与所述临时寄存器标识对应的临时寄存器中包括:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的低位;
所述根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果包括:
将所述临时寄存器中的所有数据向左移动第二位数,其中,所述第二位数为所述移位位数与八相加得到的和值;
将所述向左移动第二位数后的临时寄存器中的所有数据向右移动八位;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
5.根据权利要求1所述的方法,其特征在于,所述源数据包含八个数据单元;所述临时寄存器为两个,每个临时存储器包含四个存储单元。
6.一种数据移位装置,其特征在于,包括:
接收模块,用于接收字节移位宏指令,其中,所述字节移位宏指令包含待移位的源数据、移位位数、临时寄存器标识及目标寄存器标识,所述源数据包含至少一个由八位字节数据组成的数据单元;
第一存储模块,用于根据所述临时寄存器标识,确定与所述临时寄存器标识对应的临时寄存器,并将所述源数据存入与所述临时寄存器标识对应的临时寄存器中,其中,所述临时寄存器包括至少一个用于存储十六位字节数据的存储单元,所述源数据中的数据单元与所述临时寄存器中的存储单元一一对应;
移位模块,用于根据所述移位位数对所述临时寄存器中的所有数据进行移位处理,并从经过所述移位处理后的临时寄存器的数据中提取源数据移位结果;
第二存储模块,用于根据所述目标寄存器标识,确定与所述目标寄存器标识对应的目标寄存器,并将所述源数据移位结果存入与所述目标寄存器标识对应的目标寄存器中。
7.根据权利要求6所述的装置,其特征在于,所述字节移位宏指令为字节右移宏指令;所述第一存储模块用于:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的高位;
所述移位模块用于:
将所述临时寄存器中的所有数据向右移动第一位数,其中,所述第一位数为所述移位位数与八相加得到的和值;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
8.根据权利要求6所述的装置,其特征在于,所述字节移位宏指令包括逻辑左移宏指令;所述第一存储模块用于:
将所述源数据的各个数据单元存入所述临时寄存器中对应存储单元的低位;
所述移位模块用于:
将所述临时寄存器中的所有数据向左移动第二位数,其中,所述第二位数为所述移位位数与八相加得到的和值;
将所述向左移动第二位数后的临时寄存器中的所有数据向右移动八位;
提取所述临时寄存器各个存储单元中低位的数据作为所述源数据移位结果。
9.一种数据移位设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至5任一项所述的数据移位方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至5任一项所述的数据移位方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910493204.6A CN110221807B (zh) | 2019-06-06 | 2019-06-06 | 数据移位方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910493204.6A CN110221807B (zh) | 2019-06-06 | 2019-06-06 | 数据移位方法、装置、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110221807A CN110221807A (zh) | 2019-09-10 |
CN110221807B true CN110221807B (zh) | 2021-08-03 |
Family
ID=67816040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910493204.6A Active CN110221807B (zh) | 2019-06-06 | 2019-06-06 | 数据移位方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110221807B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110888601B (zh) * | 2019-11-14 | 2023-05-19 | 中国电子科技集团公司第五十四研究所 | 一种基于ram ip核的移位寄存器实现方法 |
CN114296798A (zh) * | 2021-12-10 | 2022-04-08 | 龙芯中科技术股份有限公司 | 向量移位方法、处理器及电子设备 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1217077A (zh) * | 1996-03-05 | 1999-05-19 | 英特尔公司 | 执行与多媒体信息一起使用的逆余弦变换函数的计算机系统 |
US6687724B1 (en) * | 1999-05-07 | 2004-02-03 | Sony Corporation | Information processor |
CN1497432A (zh) * | 2002-10-22 | 2004-05-19 | 智权第一公司 | 微处理器标记寄存器屏蔽移入弹出装置和方法 |
CN1522401A (zh) * | 2001-10-29 | 2004-08-18 | ض� | 数据并行右移合并的方法与装置 |
CN103077004A (zh) * | 2013-01-10 | 2013-05-01 | 浙江大学 | 支持多种数据类型的单指令多数据移位装置 |
CN103383639A (zh) * | 1995-08-31 | 2013-11-06 | 英特尔公司 | 控制移位分组数据的位校正的装置 |
CN103890857A (zh) * | 2011-10-27 | 2014-06-25 | 惠普发展公司,有限责任合伙企业 | 采用环形寄存器的可移位的存储器 |
CN104679478A (zh) * | 2009-12-17 | 2015-06-03 | 英特尔公司 | 用于在单个指令中执行移位和异或运算的方法和装置 |
CN109802824A (zh) * | 2018-12-03 | 2019-05-24 | 大唐微电子技术有限公司 | 一种移位处理的方法、装置、计算机存储介质及终端 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1103467C (zh) * | 1994-10-13 | 2003-03-19 | 北京南思达科技发展有限公司 | 宏指令集对称式并行体系结构微处理器 |
US7818356B2 (en) * | 2001-10-29 | 2010-10-19 | Intel Corporation | Bitstream buffer manipulation with a SIMD merge instruction |
WO2013095513A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Packed data operation mask shift processors, methods, systems, and instructions |
US9405539B2 (en) * | 2013-07-31 | 2016-08-02 | Intel Corporation | Providing vector sub-byte decompression functionality |
-
2019
- 2019-06-06 CN CN201910493204.6A patent/CN110221807B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103383639A (zh) * | 1995-08-31 | 2013-11-06 | 英特尔公司 | 控制移位分组数据的位校正的装置 |
CN1217077A (zh) * | 1996-03-05 | 1999-05-19 | 英特尔公司 | 执行与多媒体信息一起使用的逆余弦变换函数的计算机系统 |
US6687724B1 (en) * | 1999-05-07 | 2004-02-03 | Sony Corporation | Information processor |
CN1522401A (zh) * | 2001-10-29 | 2004-08-18 | ض� | 数据并行右移合并的方法与装置 |
CN1497432A (zh) * | 2002-10-22 | 2004-05-19 | 智权第一公司 | 微处理器标记寄存器屏蔽移入弹出装置和方法 |
CN104679478A (zh) * | 2009-12-17 | 2015-06-03 | 英特尔公司 | 用于在单个指令中执行移位和异或运算的方法和装置 |
CN103890857A (zh) * | 2011-10-27 | 2014-06-25 | 惠普发展公司,有限责任合伙企业 | 采用环形寄存器的可移位的存储器 |
CN103077004A (zh) * | 2013-01-10 | 2013-05-01 | 浙江大学 | 支持多种数据类型的单指令多数据移位装置 |
CN109802824A (zh) * | 2018-12-03 | 2019-05-24 | 大唐微电子技术有限公司 | 一种移位处理的方法、装置、计算机存储介质及终端 |
Non-Patent Citations (2)
Title |
---|
Lihong Gu等.Optimization of RealVideo Decoder on Godson Microprocessor.《2010 WASE International Conference on Information Engineering》.2010, * |
seagate_xx.龙芯2E体系结构之多媒体指令.《百度文库在线公开:https://wenku.baidu.com/view/2306cca20029bd64783e2cd1.html》.2010,1-63. * |
Also Published As
Publication number | Publication date |
---|---|
CN110221807A (zh) | 2019-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210026634A1 (en) | Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register | |
US6725356B2 (en) | System with wide operand architecture, and method | |
US6643765B1 (en) | Programmable processor with group floating point operations | |
US4361868A (en) | Device for increasing the length of a logic computer address | |
JP3649470B2 (ja) | データ処理装置 | |
CA2735354C (en) | Programmable processor and method with wide operations | |
US7921263B2 (en) | System and method for performing masked store operations in a processor | |
US20050257032A1 (en) | Accessing a test condition | |
CN110221807B (zh) | 数据移位方法、装置、设备及计算机可读存储介质 | |
US6647484B1 (en) | Transpose address mode in general purpose DSP processor | |
EP1105792B1 (en) | System with wide operand architecture, and method | |
JPH10187661A (ja) | コンピュータにおけるスカラ値をベクトルに記入する方法 | |
US20100241834A1 (en) | Method of encoding using instruction field overloading | |
JPH0145649B2 (zh) | ||
US7861071B2 (en) | Conditional branch instruction capable of testing a plurality of indicators in a predicate register | |
US11061675B2 (en) | Vector cross-compare count and sequence instructions | |
US5638312A (en) | Method and apparatus for generating a zero bit status flag in a microprocessor | |
CN111443948B (zh) | 指令执行方法、处理器和电子设备 | |
JP2002529847A (ja) | ビットfifoを有するディジタル信号プロセッサ | |
CN109756231B (zh) | 循环移位处理装置及方法 | |
JP2748957B2 (ja) | データ処理装置 | |
US5142630A (en) | System for calculating branch destination address based upon address mode bit in operand before executing an instruction which changes the address mode and branching | |
US11182458B2 (en) | Three-dimensional lane predication for matrix operations | |
US6625717B2 (en) | Single cycle linear address calculation for relative branch addressing | |
WO2020210602A1 (en) | Method and apparatus for processing data splicing instruction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |