CN110352404B - 通过基于内联解码的微操作扩展的比较字符串处理 - Google Patents

通过基于内联解码的微操作扩展的比较字符串处理 Download PDF

Info

Publication number
CN110352404B
CN110352404B CN201880015283.3A CN201880015283A CN110352404B CN 110352404 B CN110352404 B CN 110352404B CN 201880015283 A CN201880015283 A CN 201880015283A CN 110352404 B CN110352404 B CN 110352404B
Authority
CN
China
Prior art keywords
data
operations
instruction
sequence
operand
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
Application number
CN201880015283.3A
Other languages
English (en)
Other versions
CN110352404A (zh
Inventor
M·K·克施温德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN110352404A publication Critical patent/CN110352404A/zh
Application granted granted Critical
Publication of CN110352404B publication Critical patent/CN110352404B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

通过基于内联解码的微操作扩展来进行比较字符串处理。执行比较字符串操作的指令被解码。解码提供执行比较字符串操作的操作序列。操作序列包括:将第一组数据加载到指定的存储器边界的第一加载到边界操作,以及加载第二组数据的第二加载到边界操作。第一组数据和第二组数据作为比较字符串操作的一部分加载。

Description

通过基于内联解码的微操作扩展的比较字符串处理
技术领域
一般而言,一个或多个方面涉及计算环境内的处理,尤其涉及促进这种处理。
背景技术
各种字符串操作(例如C字符串操作)具有可变长度终止语义,而与所选择的操作系统无关。因此,期望已知字符串长度的传统字符串操作不是实现此类字符串操作的良好匹配。
为了加速字符串和其它序列的处理,由纽约阿蒙克的国际商业机器公司提供的
Figure BDA0002187693020000011
引入了具有定义的终止符的指令。这些指令包括例如移动字符串(MVST)指令和比较逻辑字符串(CLST)指令。这些指令以硬件或微代码实现。IBM和z/Architecture是国际商业机器公司的商标,其在全球许多司法管辖区注册。
发明内容
从第一方面来看,本发明提供了一种用于促进计算环境内的处理的方法,该计算机程序产品包括:获得将要解码的指令,该指令是执行比较字符串操作;以及解码该指令,该解码提供执行比较字符串操作的操作序列,该操作序列包括:将第一组数据加载到指定的存储器边界的第一加载到边界操作和加载第二组数据的第二加载到边界操作,第一组数据和第二组数据作为比较字符串操作的一部分加载。
从另一方面来看,本发明提供了一种用于促进计算环境内的处理的系统,该计算机系统包括:存储器;以及与存储器通信的处理器,其中,计算机系统被配置为执行方法,所述方法包括:获得将要解码的指令,该指令是执行比较字符串操作;以及解码该指令,该解码提供执行比较字符串操作的操作序列,该操作序列包括:将第一组数据加载到指定的存储器边界的第一加载到边界操作和加载第二组数据的第二加载到边界操作,第一组数据和第二组数据作为比较字符串操作的一部分加载。
从另一方面来看,本发明提供了一种用于促进计算环境内的处理的计算机程序产品,该计算机程序产品包括计算机可读存储介质,其可由处理电路读取并存储由处理电路执行的指令,用于执行用于执行本发明的步骤的方法。
从另一方面来看,本发明提供了一种存储在计算机可读介质上并且可加载到数字计算机的内部存储器中的计算机程序,其包括软件代码部分,当所述程序在计算机上运行时,该软件代码部分用于执行本发明的步骤。
从另一方面来看,本发明提供了一种用于促进计算环境内的处理的计算机程序产品,该计算机程序产品包括计算机可读存储介质,该计算机可读存储介质可由处理电路读取并存储用于由处理电路执行的指令,用于通过本发明的系统执行用于执行本发明的步骤的方法。
通过提供用于促进计算环境内的处理的计算机程序产品,克服了现有技术的缺点并提供了额外的优点。该计算机程序产品包括可由处理电路读取并存储用于执行方法的指令的存储介质。该方法包括,例如,获得将要解码的指令,该指令是执行比较字符串操作。该指令被解码,并且该解码提供执行比较字符串操作的操作序列。该操作序列包括:将第一组数据加载到指定的存储器边界的第一加载到边界操作,以及加载第二组数据的第二加载到边界操作。第一组数据和第二组数据作为比较字符串操作的一部分加载。这有利地使得能够在没有微代码处理的情况下执行比较字符串操作,从而减少等待时间并提高系统性能。通过使用操作序列,循环指令被简化为非循环指令,从而提高了系统性能。
操作序列包括例如执行比较字符串操作的多个操作,并且第一组数据和第二组数据包括要同时比较的一个或多个字符。一个或多个字符在没有跨越一个或多个指定的存储器边界的情况下从存储器加载。通过不跨越指定的存储器边界,消除了检查边界和相关处理,从而提高了系统性能。
作为示例,操作序列的选定操作从该选定操作的架构版本修改。作为示例,该选定操作的架构版本设置条件码,并且修改选定操作以防止设置条件码。
此外,在一个示例中,指令被定义为循环指令,该循环指令重复多次以比较第一组数据和第二组数据,并且解码包括将循环指令扩展为操作序列。操作序列是用于比较第一组数据和第二组数据的非循环序列。有利地,循环被消除了。
在一个实施例中,操作序列包括以下中的一个或多个:用于在第一组数据和第二组数据中的至少一个内查找终止符的查找终止符操作;用于确定在第一组数据和第二组数据中的至少一个中加载的数据量的至少一个计数操作;用于确定第一组数据中加载的数据量,在第二组数据中加载的数据量,或终止符的位置中的最小值的至少一个最小操作;和/或用于向一个或多个位置添加所处理的最小数量的数据单元的计数的一个或多个添加操作。在一个示例中,该至少一个最小操作中的最小操作被配置为基于计算最小值来更新条件码。
在一个示例中,在没有进入微代码处理的情况下执行操作序列。这通过消除与进入和退出微代码处理相关联的处理来提高系统性能。
本文还描述并要求保护与一个或多个方面有关的方法和系统。此外,还描述了与一个或多个方面有关的服务,并且可以在此要求保护该服务。
通过本文描述的技术实现了额外的特征和优点。在此详细描述了其它实施例和方面,并且这些实施例和方面被认为是所要求保护的方面的一部分。
附图说明
在说明书结论处的权利要求中,一个或多个方面作为示例被特别指出并清楚地要求保护。通过以下结合附图的详细描述,一个或多个方面的前述内容和目的、特征和优点是显而易见的,在附图中:
图1A描绘了根据现有技术的计算环境的一个示例,并且其中可以实现本发明的优选实施例;
图1B描绘了根据现有技术的图1A的处理器的进一步细节,并且其中可以实现本发明的优选实施例;
图1C描绘了根据本发明的一个或多个方面使用的指令执行流水线的一个示例的进一步细节;
图2A描绘了结合和使用本发明的一个或多个方面的计算环境的另一个示例;
图2B描绘了图2A中的存储器的进一步细节;
图3描绘了根据本发明的一个方面使用的移动字符串指令的一个示例;
图4A描绘了图3中的移动字符串指令的一种实现方式;
图4B描绘了根据本发明的一个方面的图3中的移动字符串指令的另一实现方式;
图4C描绘了根据本发明的一个方面的图3中的移动字符串指令的另一实现方式;
图5描绘了根据本发明的一个方面使用的矢量加载到块边界指令的一个示例;
图6A描绘了根据本发明的一个方面使用的矢量查找元素不等指令的一个示例;
图6B描绘了根据本发明的一个方面使用的矢量查找元素相等指令的一个示例;
图7描绘了根据本发明的一个方面使用的加载计数到块边界指令的一个示例;
图8描绘了根据本发明的一个方面使用的带长度的矢量存储指令的一个示例;
图9描绘了根据本发明的一个方面使用的比较逻辑字符串指令的一个示例;
图10A描绘了图9中的比较逻辑字符串指令的一种实现方式;
图10B描绘了根据本发明的一个方面的图9中的比较逻辑字符串指令的另一种实现方式;
图10C描绘了根据本发明的一个方面的图9中的比较逻辑字符串指令的另一种实现方式;
图11A描绘了根据本发明的一个方面的移动字符串或比较逻辑字符串指令的另一种实现方式;
图11B描绘了根据本发明的一个方面的移动字符串或比较逻辑字符串指令的又一实现方式;
图11C描绘了根据本发明的一个方面的移动字符串或比较逻辑字符串指令的另一实现方式;
图11D描绘了根据本发明的一个方面的移动字符串或比较逻辑字符串指令的又一实现方式;
图11E描绘了根据本发明的一个方面的移动字符串或比较逻辑字符串指令的另一种实现方式;
图12描绘了根据本发明的一个方面使用的搜索字符串指令的一个示例;
图13A-13E描绘了根据本发明的各方面的图12的搜索字符串指令的实现方式;
图14A-14B描绘了根据本发明的一个方面的促进计算环境内的处理的一个方面的一个示例;
图15描绘了云计算环境的一个实施例;以及
图16描绘了抽象模型层的一个示例。
具体实施方式
根据一个或多个方面,通过提供一个或多个字符串操作的实施方式来促进字符串处理,该一个或多个字符串操作提供灵活性并提高性能。例如,代替在硬件或微代码(包括毫代码或其它此类硬件级代码)中实现字符串操作,字符串操作使用指令破解在直线式代码中内联实现,其中使用内部操作序列来执行指令的字符串操作。该操作序列在没有循环的情况下同时(例如,并行地)对限定数量的字符执行字符串操作以处理该限定数量的字符。
根据本发明的各方面,所实现的指令的示例包括移动字符串(MVST)指令,比较逻辑字符串(CLST)指令和搜索字符串(SRST)指令,其中的每一个在下面描述。还可以根据本发明的一个或多个方面实现其它指令。
参考图1A描述结合和使用本发明的一个或多个方面的计算环境的一个实施例。在一个示例中,计算环境基于由纽约阿蒙克的国际商业机器公司提供的z/体系结构。在2015年3月的IBM公开号为SA22-7832-10的“z/Architecture Principles of Operation(z/体系结构的工作原理)”中描述了z/体系结构的一个实施例。
在另一个示例中,计算环境基于由纽约阿蒙克的国际商业机器公司提供的Power
Figure BDA0002187693020000061
在2015年4月9日的国际商业机器公司的“Power ISA TM Version 2.07B(Power ISA TM版本2.07B)”中描述了Power体系结构的一个实施例。
计算环境还可以基于其它体系结构,包括但不限于
Figure BDA0002187693020000062
x86体系结构。也存在其它示例。英特尔是英特尔公司或其子公司在美国和其它国家的商标或注册商标。
如图1A所示,计算环境100包括例如计算机系统102,该计算机系统例如以通用计算设备的形式示出。计算机系统102可以包括但不限于一个或多个处理器或处理单元104(例如,中央处理单元(CPU)),存储器106(作为示例,被称为主存储器或存储),以及一个或多个输入/输出(I/O)接口108,它们经由一个或多个总线和/或其它连接110而彼此耦接。
总线110表示几种类型的总线结构中的任何一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及处理器或使用多种总线体系结构中的任何总线体系结构的局域总线。作为示例而非限制,这样的体系结构包括工业标准体系结构(ISA),微通道体系结构(MCA),增强型ISA(EISA),视频电子标准协会(VESA)局域总线和外围组件互连(PCI)。
存储器106可以包括例如可以耦接到处理器104的本地高速缓存122的高速缓存120,诸如共享高速缓存。此外,存储器106可以包括一个或多个程序或应用程序130、操作系统132,以及一个或多个计算机可读程序指令134。计算机可读程序指令134可以被配置为实施本发明的各方面的实施例的功能。
计算机系统102也可以经由例如I/O接口108与一个或多个外部设备140、一个或多个网络接口142,和/或一个或多个数据存储设备144通信。示例外部设备包括用户终端、磁带驱动器、指向设备、显示器等。网络接口142使得计算机系统102能够与诸如局域网(LAN),通用广域网(WAN),和/或公共网络(例如,因特网)的一个或多个网络通信,从而提供与其它计算设备或系统的通信。
数据存储设备144可以存储一个或多个程序146、一个或多个计算机可读程序指令148,和/或数据等。计算机可读程序指令可以被配置为实施本发明的各方面的实施例的功能。
计算机系统102可以包括和/或耦接到可移动/不可移动,易失性/非易失性计算机系统存储介质。例如,它可以包括和/或耦接到不可移动的非易失性磁介质(通常称为“硬盘驱动器”),用于从可移动的非易失性磁盘(例如,“软盘”)读取以及写入到可移动的非易失性磁盘(例如,“软盘”)的磁盘驱动器,和/或用于从诸如CD-ROM、DVD-ROM或其它光学介质的可移动的非易失性光盘读取或写入可移动的非易失性光盘的光驱。应理解,可结合计算机系统102使用其它硬件和/或软件组件。示例包括但不限于:微代码,设备驱动器,冗余处理单元,外部磁盘驱动阵列,RAID系统,磁带驱动器和数据备份存储系统等。
计算机系统102可以与众多其它通用或专用计算系统环境或配置一起操作。可适于与计算机系统102一起操作的众所周知的计算系统,环境和/或配置的示例包括但不限于:个人计算机(PC)系统、服务器计算机系统、瘦客户机、厚客户机、手持型或者膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费型电子产品、网络PC、小型计算机系统、大型计算机系统,以及包括上述系统或设备中的任一者的分布式云计算环境等。
参考图1B描述关于处理器104的一个示例的进一步细节。处理器104包括用于执行指令的多个功能组件。这些功能组件包括:例如,用于获取要执行的指令的指令获取组件150;用于解码所获取的指令并用于获得解码指令的操作数的指令解码单元152;用于执行解码的指令的指令执行组件154;在需要的情况下,访问用于指令执行的存储器的存储器访问组件156;以及提供执行指令的结果的写回组件160。根据本发明的一个方面,如下文进一步描述的,这些组件中的一个或多个组件可用于执行一个或多个字符串操作和/或指令,包括但不限于移动字符串,比较字符串,和/或搜索字符串指令166。
在一个实施例中,处理器104还包括由一个或多个功能组件使用的一个或多个寄存器168。处理器104可以包括比本文提供的示例额外的,更少的和/或其它组件。
参考图1C描述关于处理器104的执行流水线的进一步细节。尽管在此描绘和描述了流水线的各种处理阶段,但是应当理解,在不脱离本发明的范围的情况下,可以使用额外的,更少的和/或其它的阶段。
参见图1C,在一个实施例中,从指令队列中获取170指令。可以执行分支预测172和/或解码174指令。可以将解码的指令添加到要一起处理的指令组176。在解码期间,根据本发明的一个方面,可以执行指令破解。在指令破解期间,指令被解码成操作序列,例如多个内部微操作,用于执行所获取的指令的操作,该操作例如是在例如指令集架构(ISA)中定义的架构指令。在一个实施例中,操作序列被配置为在不循环的情况下同时对多个数据单元(例如,字节)进行操作,因此被称为非循环序列,而架构指令被配置为循环操作多个数据单元。作为示例,用于加载一个寄存器和递增索引寄存器的架构加载和更新指令可以被破解为加载操作和单独的添加操作。如果执行了破解,则尽可能将内部操作组合在一起。
将分组的指令提供给映射器178,映射器178确定任何相关性,分配资源并将指令/操作组分派给适当的发出队列。存在用于不同类型的执行单元的一个或多个发出队列,包括例如分支,加载/存储,浮点,定点,矢量等。在发出阶段180期间,向适当的执行单元发出指令/操作。读取182任何寄存器以检索其源,并且在执行阶段184期间执行指令/操作。如所指示的,执行可以用于例如分支,加载(LD)或存储(ST),定点操作(FX),浮点运算(FP),或矢量运算(VX)。在回写阶段186期间将任何结果写入适当的寄存器。随后,指令完成188。如果存在中断或刷新190,则处理可返回到指令获取170。
参考图2A描述了结合和使用一个或多个方面的计算环境的另一个实施例。在该示例中,计算环境200包括:例如,本机中央处理单元(CPU)202、存储器204,以及经由例如一个或多个总线208和/或其它连接而彼此耦接的一个或多个输入/输出设备和/或接口206。作为示例,计算环境200可以包括:由纽约阿蒙克的国际商业机器公司提供的
Figure BDA0002187693020000091
处理器或pSeries服务器;和/或基于国际商业机器公司、英特尔公司或其它公司提供的体系结构的其它机器。IBM,z/Architecture,Power Architecture和PowerPC是国际商业机器公司在全球许多司法管辖区域注册的商标。
本机中央处理单元202包括一个或多个本机寄存器210,诸如,在环境内的处理期间使用的一个或多个通用寄存器和/或一个或多个专用寄存器。这些寄存器包括表示在任何特定时间点的环境状态的信息。
此外,本机中央处理单元202执行存储在存储器204中的指令和代码。在一个特定示例中,中央处理单元执行存储在存储器204中的仿真器代码212。该代码使得在一个体系结构中配置的计算环境能够仿真另一种体系结构。例如,仿真器代码212允许基于不同于z/体系结构之外的体系结构的机器(例如PowerPC处理器、pSeries服务器或其它服务器或处理器)仿真z/体系结构并执行基于z/体系结构开发的软件和指令。
参考图2B描述与仿真器代码212有关的进一步细节。存储在存储器204中的访客指令250包括开发为在不同于本机CPU 202的体系结构的体系结构中执行的软件指令(例如,与机器指令相关)。例如,访客指令250可能已经被设计为在z/体系结构处理器上执行,但是相反地,其在可以是例如英特尔处理器的本机CPU 202上进行仿真。在一个示例中,仿真器代码212包括指令获取例程252,以从存储器204获得一个或多个访客指令250,并且可选地为所获得的指令提供本地缓冲。它还包括指令转换例程254,以确定所获得的访客指令的类型,并将访客指令转换成一个或多个对应的本机指令256。该转换包括:例如,识别将要由访客指令执行的功能,并选择执行该功能的本机指令。
此外,仿真器代码212包括仿真控制例程260以使本机指令被执行。仿真控制例程260可以使本机CPU 202执行仿真一个或多个先前所获得的访客指令的本机指令的例程,并且在这种执行结束时,将控制返回到指令获取例程以仿真下一个访客指令或访客指令组的获得。本机指令256的执行可以包括:将数据从存储器204加载到寄存器中;将数据从寄存器存储回存储器;或执行如由转换例程确定的某种类型的算术或逻辑运算。
每个例程例如以软件实现,该软件存储在存储器中并由本机中央处理单元202执行。在其它示例中,一个或多个例程或操作以固件、硬件、软件或它们的一些组合实现。所仿真处理器的寄存器可使用本机CPU的寄存器210或通过使用存储器204中的位置来仿真。在实施例中,访客指令250、本机指令256和仿真器代码212可驻留在同一存储器中或者可分配在不同的存储器设备中。
如本文中所使用的,固件包括例如处理器的微代码或毫代码。例如,它包括用于实现更高级机器代码的硬件级指令和/或数据结构。在一个实施例中,它包括,例如,通常作为微代码传送的专有代码,其包括特定于底层硬件的可信软件或微代码,并控制对系统硬件的操作系统访问。
已获得,转换并执行的访客指令250例如是本文中描述的移动字符串指令,比较字符串指令或搜索字符串指令。将具有一种体系结构(例如,z/体系结构)的指令从存储器中提取,转换并表示为具有另一种体系结构(例如,PowerPC、pSeries、英特尔等)的本机指令序列256。然后执行这些本机指令。
如上所述,根据本发明的一个方面实现的一个指令是移动字符串(MVST)指令,其示例在z/体系结构中定义。移动字符串指令用于将由通用寄存器R2指定的第二操作数移动到由通用寄存器R1指定的第一操作数位置。移动从左到右进行,直到移动了通用寄存器0中指定的结束字符或移动了CPU确定数量的字节。如果移动了结束字符,则条件码设置为1;如果移动了CPU确定数量的字节,则条件码设置为3。
参见图3,描述了根据z/体系结构定义的移动字符串指令300的一个示例。该指令的该架构版本包括例如操作码(作业码)字段302,其包括用于指定移动字符串操作的操作码,第一寄存器字段(R1)304和第二寄存器字段(R2)306。在一个实施例中,指令的字段是彼此分开并且相互独立的。然而,在另一个实施例中,可以组合多于一个字段。此外,与指令的字段相关联的下标编号表示应用该字段的操作数。例如,具有下标1的任何字段与第一操作数相关联,并且具有下标2的任何字段与第二操作数相关联。
在移动字符串指令的一个示例操作中,第二操作数的全部或部分被放置在第一操作数位置中。操作继续进行,直到达到第二操作数的结束或者已经移动了CPU确定数量的字节,以先发生者为准。在一个示例中,CPU确定的数量是至少一个。结果显示在条件码中。
第一操作数和第二操作数的最左边字节的位置分别由通用寄存器R1和R2的内容指定。
通用寄存器R1和R2中的地址的处理取决于寻址模式。在24位寻址模式中,通用寄存器R1和R2的位位置40-63的内容构成地址,并且忽略位位置0-39的内容。在31位寻址模式中,寄存器的位位置33-63的内容构成地址,并且忽略位位置0-32的内容。在64位寻址模式中,位位置0-63的内容构成地址。
第二操作数的结尾由操作数的最后字节位置中的结束字符指示。用于确定第二操作数结束的结束字符在通用寄存器0的位位置56-63中指定。通用寄存器0的位位置32-55保留用于可能的进一步扩展并且包含零;否则,在一个示例中,识别出规范异常。
一旦移动了第二操作数结束字符或者已经移动了第二操作数中CPU确定数量的字节(以先发生者为准),则操作从左到右进行并且结束。在一个示例中,CPU确定的数量是至少一个。当结束字符位于第二操作数的第一个字节位置时,只移动结束字符。在移动结束字符时,设置条件码1。当移动了第二操作数中不包括结束字符的CPU确定数量的字节时,设置条件码3。无法识别破坏性(destructive)重叠。如果第二操作数在用作目标之后被用作源,则结果是不可预测的。
当设置条件码1时,它指示整个第二操作数已被移动,并且第一操作数中的结束字符的地址被放置在通用寄存器R1中,而通用寄存器R2的内容保持不变。当设置条件码3时,它表示已经移动了CPU确定数量的字节,并且第一和第二操作数中要处理的下一个字节的地址分别放置在通用寄存器R1和R2中。每当在通用寄存器中放置地址时,在24位寻址模式中寄存器的位32-39,或者在31位寻址模式中位32都被设置为零。R1和R2寄存器的位0-31在24位或31位模式下保持不变。
导致条件码3的设置的处理量由CPU基于改善系统性能来确定,并且每次执行指令时可以是不同的量。
例如,对于操作中必然使用的操作数部分,识别第一和第二操作数的访问异常。
移动字符串指令的一个实现使用微代码,其包括昂贵的进入和退出微代码处理。这在图4A中示出。还在图4A中示出围绕指令实现的附加处理,包括例如下面描述的初始化步骤(例如,步骤400)和完成检查(例如,查询410)。
如图4A中所示,在一个实现中,初始化终止符(例如,终止符字符),步骤400。例如,可以将零设置为终止符字符,使得当在被移动的字符串中遇到零时,它指示正在处理的字符串的结尾。其它值也可以用在其它实施方式中。
指令开始处理,其中进入微代码处理,步骤402。这包括,例如,执行输入操作,设置内部寄存器,和/或执行与设置寄存器等有关的一些簿记。MVST复制循环开始,步骤404。该循环在微代码中执行,并包括复制字符串中的每个字符,如上所述。例如,从左到右,每个字符都被复制。复制每个字符后,确定是否已复制字符串中的所有字符或是否已复制CPU确定数量的字符,查询406。如果要继续复制,则采用步骤404继续处理。否则,退出微代码处理,步骤408,终止指令执行。同样,这包括,例如,执行退出操作,管理一个或多个寄存器,和/或执行各种簿记任务。因此,存在与微代码进入和退出处理相关联的成本。
此后,开始检查循环(与MVST处理分开),其中确定是否已复制整个字符串或是否要复制附加字符,查询410。如果要继续复制,则再次进入微代码,步骤402,并且继续复制,步骤404。如果复制完成,则检查循环结束,步骤412。
根据本发明的一个方面,在MVST的另一实现方式中,避免了微代码进入和退出处理,并且消除了上述处理的MVST循环(即,执行移动操作的配置的微代码复制循环)。相反,MVST复制循环被替换为破解或扩展的操作序列,其复制多达预定数量的数据,例如预定数量的字节(例如,16字节)而没有循环(这里称为同时)。因此,MVST的这种实现在本文中称为非循环配置(或者为了方便而称为非循环)。参考图4B进一步描述该MVST处理的非循环版本以及与MVST处理相关联的附加初始化和完成检查。
在一个示例中,扩展的操作序列由指令解码单元提供(例如,生成)并由一个或多个执行单元执行。在一个实施例中,扩展是进行对应于MVST复制循环的直线式(即,非循环)编码,其处理多达预定数量的数据(例如,限定数量的单元),诸如,例如,每个扩展的MVST为16个字节。与MVST的架构定义一致,在执行扩展的指令序列之后,检查条件码,然后可以执行循环(例如,对应于检查循环),直到字符串中的所有字节都已经处理并找到字符串终止符。但是,与架构版本不同,不执行MVST复制循环。此外,根据本发明的一个方面,作为示例,操作序列不加载超过指定的存储器边界,例如页边界或高速缓存行边界。这有助于处理并通过消除对指定边界的检查和与之相关的处理来提高系统性能。这将在下面进一步描述。
参考图4B,在一个实施例中,初始化终止器,步骤450。另外,对应于MVST指令的操作序列由指令解码单元提供,并且经由一个或多个执行单元执行以执行复制,步骤452。在不进入或退出微代码处理的情况下执行该复制。操作序列复制多达预定数量的数据(例如,预定数量的字节(例如,16字节))而不在复制循环中循环。例如,在一个实施方式中,矢量单元用于同时复制多达16个字节。预定数量的数据包括字符串的字节,该字符串(包括终止符字符,假定字符串小于限定的字节数,例如16)多达限定的字节数(例如,16);或者直到指定的存储器边界,例如页边界或高速缓存行边界。
在执行非循环操作序列之后,确定复制是否完成;即,是否存在多于要复制的限定数量(例如,16)的数据,查询454。如果复制未完成,则进入检查循环并继续处理,步骤452。否则,处理结束,步骤456。
在另一示例中,当字符串包括选定的终止符字符(例如零)时,使用移动字符串指令的修改的非循环实现;否则,使用架构微代码实现。这将参考图4C进一步描述。
如图4C所示,初始化终止符,步骤470,并且确定终止符是否是特定值,例如0,查询472。如果初始化的终止符不是选定的终止符值(例如,0),则在一个实施例中,使用微代码实现,步骤474。例如,执行对微代码的内部陷阱以处理非零(或未选择)终止符的情况。使用例如下面描述的CGIT<R0>,0,NE指令来执行内部陷阱。否则,使用修改的非循环实施方式,其使用内部操作序列而不是进入/退出微代码。例如,使用解码单元提供操作序列,并由一个或多个执行单元执行该操作序列以执行复制,步骤476。这是在不进入微代码处理的情况下完成的。操作序列复制多达预定数量的数据(例如,预定数量的字节(例如,16字节))而不在复制循环中循环。预定数量的数据包括字符串的字节,该字符串(包括终止符字符,假设字符串小于限定的字节数,例如16)多达限定的字节数(例如,16);或者直到指定的边界,例如页边界或高速缓存行边界。
在执行非循环操作序列或微代码之后,确定复制是否完成;即,是否存在多于要复制的限定数量(例如,16)的数据,查询478。如果复制未完成,则进入检查循环并继续处理,步骤472。否则,处理结束,步骤480。
如上所示,在一个示例中,为了切换到微代码,一个CGIT(比较并产生内部陷阱)内部操作(iop)被使用。CGIT测试通用寄存器0是否对应于该值,例如0,并且对微代码引发“内部陷阱”。根据一个定义,内部陷阱从流水线刷新CGIT之后的所有后续内部操作和指令,并在一个点处开始执行,该点由标签确定或者由响应于与已执行的CGIT对应的指令操作码的逻辑计算。在一个或多个实施例中,CGIT iop获取指定要比较的操作数的操作数和比较条件。在其它实施例中,iop包括这些操作数的隐含值。在其它实施例中,通过辅助逻辑代替显式操作码来执行测试。在一个实施例中,相对于对应于序列476的iop和围绕MVST指令的指令,iop和辅助逻辑有利地可以并行和无序地执行。
可被用于执行MVST复制的内部操作序列的一个示例在下面进行说明。当要执行MVST指令的非循环版本时,解码单元生成或选择该操作序列。在下面的内部操作中,<R0>,<R1>和<R2>指的是架构寄存器r0,r1,r2或它们重命名的物理变体;eR1,eR2指的是由扩展码序列使用的非循环内部通用寄存器(或它们的物理对应物);eVR1,eVR2指的是由扩展码序列使用的非循环内部矢量寄存器(或它们的物理对应物)。后缀modifiedcc表示对后缀操作的条件码的处理不同于如何处理条件码的架构版本(对应于架构指令的操作的架构版本)。后缀nocc指的是没有条件码,因为没有为架构版本(对应于架构指令的操作的架构版本)中定义的后缀操作设置条件码。后缀nocc_cond指示针对特定条件执行与其相关联的操作,并且未设置条件码,这对于其所属的指令的架构版本也是不同的。
MVST的一个示例操作序列包括:
VLBB<eVR1>,<R1>,<边界>
向eVR1加载多个字节(例如,16)直到选定边界,例如页边界或高速缓存行边界
VFENE_modifiedcc<eVR2>,<eVR1>,<eVR1>
查找终止条件\0
LCBB_nocc<eR1>,<R1>,<边界>
计算由VLBB加载的字节数
MIN_nocc<eR2>,<eR1>,<eVR2>
确定加载的字节(eR1)或终止符字符的位置(eVR2)中的最小值以确定将要传输的总字节数(eR2)
VSTL_nocc<eVR1>,<R2>,L=<eR2>
将在eR2中的所计算数量的字节(即,那些字节的内容)从eVR1存储到由R2指定的地址。
A_nocc<R1>,<eR2>
将存储的字节的数量(即计数)(eR2)添加到寄存器R1
A_nocc_cond<R2>,<eR2>
如果CC标志值是3,则将存储的字节(eR2)的数量(即,计数)加到寄存器R2。如果条件码是3,则该指令将第二操作数寄存器加到第一操作数寄存器。因此,通过使用Add操作,当设置条件码3时,第一和第二操作数中要处理的下一个字节的地址分别放置在通用寄存器R1和R2中。(例如,使用预测指令,无条件添加到临时寄存器中的条件移动等,其它实施例和条件码处理是可能的)。
在一个或多个其它实施例中,可以使用不同的内部操作,和/或内部操作可以被重新排序。在一个或多个实施例中,可以组合多个内部操作,例如,加载计数到边界操作和随后的最小操作可以实现为单个内部操作。还存在其它可能性。
作为示例,非循环操作序列的操作可以具有与其对应的架构指令不同的操作码,或者它们可以具有相同的操作码,但是设置标志以指示要处理非循环版本。其它示例也是可能的。
上述操作中的至少一些操作是矢量操作,其是矢量设施(vector facility)的一部分。例如,矢量设施提供范围从1到16个元素的固定大小矢量。每个矢量包括由矢量运算/指令操作的数据。在一个实施例中,如果矢量由多个元素组成,则每个元素与其它元素并行处理。在完成所有元素的处理之前,不会发生指令完成。
矢量数据例如与其它数据格式一样以从左到右的顺序出现在存储中。编号为0-7的数据格式的位构成存储中最左边(最低编号)字节位置的字节,位8-15构成下一个顺序位置中的字节,以此类推。在另一示例中,矢量数据可以以另一序列(例如从右到左)出现在存储中。
以下提供关于各种的矢量操作的进一步的细节。最初,描述对应于操作的指令的架构定义,例如,如z/体系结构中所定义的。然后,描述对由本发明的一个或多个方面的非循环操作序列实现的架构定义的修改(如果有的话)。
在本文中描述并提供有矢量设施的架构矢量指令中的至少一些包括指定位的字段。该字段(称为寄存器扩展位或RXB)包括针对每个矢量寄存器指定操作数的最高有效位。未由指令指定的寄存器指定的位应被保留并设置为零。
在一个示例中,RXB字段包括四个位(例如,位0-3),并且位定义如下:
0-指令的第一矢量寄存器指定的最高有效位。
1-指令的第二矢量寄存器指定的最高有效位(如果有的话)。
2-指令的第三矢量寄存器指定的最高有效位(如果有的话)。
3-指令的第四矢量寄存器指定的最高有效位(如果有的话)。
取决于寄存器编号,例如,由汇编器将每个位设置为0或1。例如,对于寄存器0-15,该位被设置为0,对于寄存器16-31,该位被设置为1,等。
在一个实施例中,每个RXB位为针对在包括一个或多个矢量寄存器的指令的特定位置的扩展位。例如,在一个或多个矢量指令中,针对位置8-11的扩展位中的RXB的位0,其被分配给例如V1;RXB的位1是针对位置12-15的扩展位,其被分配给例如V2;等。
在进一步的实施例中,RXB字段包括附加位,并且多于一个位被用作针对每个矢量或位置的扩展。
现在将描述上述操作中的每个操作。最初,描述了架构指令,然后描述了对相应操作的任何修改。
参考图5描述矢量加载到块边界(VLBB)指令的一个示例。在一个示例中,矢量加载到块边界指令500的架构版本包括:操作码(作业码)字段502a(例如,位0-7),502b(例如,位40-47),其指示矢量加载到块边界操作;用于指定矢量寄存器(V1)的矢量寄存器字段504(例如,位8-11);索引字段(X2)506(例如,位12-15);基本字段(B2)508(例如,位16-19);位移字段(D2)510(例如,位20-31);掩码字段(M3)512(例如,位32-35);以及RXB字段514(例如,位36-39)。在一个示例中,字段504-514中的每一个是与操作码字段分开且独立的。此外,在一个实施例中,它们是彼此分开并且相互独立的;然而,在其它实施例中,可以组合多于一个字段。在下面描述关于这些字段的使用的进一步信息。
在一个示例中,矢量(V1)字段,与由RXB指定的其对应扩展位一起,指定矢量寄存器。特别地,对于矢量寄存器,使用例如寄存器字段的四位字段指定包含操作数的寄存器,其中添加寄存器扩展位(RXB)作为最高有效位。例如,如果四位字段是0110并且扩展位是0,则五位字段00110指示寄存器编号6。
在一个示例中,通用寄存器的由X2和B2字段指定的内容被加到D2字段的内容,以形成第二操作数地址。在一个示例中,针对矢量加载到块边界指令的位移D2被视为12位无符号整数。
在一个实施例中,M3字段指定用于以信号通知CPU将要加载到的块边界的码。如果指定了保留值,则会识别规范异常。示例码和相应的值如下:
Figure BDA0002187693020000191
在执行矢量加载到块边界指令的一个实施例中,在一个实施例中从左到右进行,从零开始加载第一操作数(在由V1字段加上扩展位指定的寄存器中指定),其带有来自第二操作数的字节的索引字节元素。第二操作数是由第二操作数地址(也称为起始地址)指定的存储器位置。加载从该存储器位置开始并继续到由指令(或处理器)计算的结束地址。如果遇到边界条件,则它是取决于模型的,该模型取决于如何处理第一操作数的其余部分。未加载的字节无法识别访问异常。在一个示例中,未加载的字节是不可预测的。
在架构指令的一个实施例中,起始地址由索引寄存器值(X2)加上基本寄存器值(B2)加上位移(D2)确定;然而,在其它实施例中,它由寄存器值提供;由指令地址加上指令文本指定的偏移量提供;由寄存器值加上位移提供;或者由寄存器值加上索引寄存器值提供;仅作为一些示例。此外,在一个实施例中,指令不包括RXB字段。相反,不使用扩展或以另一种方式提供扩展,例如来自指令外部的控制,或者作为指令的另一个字段的一部分提供。
在VLBB操作的一个实施例中(即,架构指令的非循环配置版本),起始地址由R1而不是X2,B2,D2提供,并且eVR1指示将要加载的寄存器,而不是V1。此外,M3由<边界>代替。该操作将多个字节加载到eVR1中,该多个字节从R1中的地址开始并且在加载终止符字符(例如,0),加载CPU确定数量的字节,或者,在根据本发明的一个方面,达到指定的边界(例如,页边界或高速缓存行边界)时结束。
在一个示例中,如果终止符位于指定开始地址和页边界之间,但是完整的矢量长度(例如,16字节)扩展到下一页,并且满足正常加载将需要从下一个不可访问的页加载(这将导致引发地址转换异常,该地址转换异常不对应于MVST的规范或其它此类指示),则VLBB加载完整的矢量,或直到最多指定(例如,页)的边界(转换边界),以避免任何异常。
在另一示例中,边界可以被设定为小于页边界,例如,高速缓存行或高速缓存块(子行),因为跨越这些边界通常与性能损失相关联。因此,第一次执行将加载到该点,并且后续执行将相对于源操作数访问进行对齐,从而产生更高的性能。(这对于较长的字符串尤其如此,其中后续对齐访问的好处使得在开始时执行较短访问的效率更低)。
根据至少一个实施例,例如,基于所选择的边界预测器,其被配置为确定是否应将边界指定为页边界,高速缓存行,子行或其它边界,例如,基于包括但不限于特定字符串操作(局部预测器)的观察操作数长度或系统中通常使用的字符串长度(全局预测器),或者从相对于源操作数的特定边界执行对齐和不对齐访问观察到的性能优势(再次采用本地或全局预测器),动态地选择边界。其它示例也可用于动态选择边界。
上面所指出的另一个操作是VFENE(矢量查找元素不等),其用于查找终止符字符,诸如空终止符(例如,0)。参考图6A描述了VFENE的架构版本的一个示例。在一个实施例中,该架构指令能够比较用于不等式的多个矢量的数据,以及搜索用于终止符的选定矢量,例如空或零元素(例如,整个元素为零)。
在一个示例中,矢量查找元素不等指令600包括:指示矢量查找元素不等操作的操作码字段602a(例如,位0-7),602b(例如,位40-47);第一矢量寄存器字段604(例如,位8-11),用于指定第一矢量寄存器(V1);第二矢量寄存器字段606(例如,位12-15),用于指定第二矢量寄存器(V2);第三矢量寄存器字段608(例如,位16-19),用于指定第三矢量寄存器(V3);第一掩码字段(M5)610(例如,位24-27);第二掩码字段(M4)612(例如,位32-35);以及RXB字段614(例如,位36-39)。在一个示例中,字段604-614中的每一个是与操作码字段分开且独立的。此外,在一个实施例中,它们是彼此分开并且相互独立的;然而,在其它实施例中,可以组合多于一个字段。下面描述关于这些字段的使用的进一步信息。
具有例如四位(0-3)的M4字段在例如位1-3指定元素大小控制。元素大小控制指定矢量寄存器操作数中元素的大小。在一个示例中,元素大小控制可以指定字节,半字(例如,2个字节)或字(例如,4个字节)。例如,0表示字节;1表示半字;2表示字,也就是全字。如果指定了保留值,则会识别规范异常。
M5字段是,例如,四位字段(位0-3),其包括例如:
零搜索字段(ZS,位2),如果它是1,则第二操作数中的每个元素也与零进行相等性比较。(在另一个示例中,第三操作数或另一个操作数中的每个元素与零进行比较。);以及
条件码设置字段(CS,位3),如果它是0,则不设置条件码并保持条件码不变。如果它是1,则条件码如下所示设置,例如:
0-如果零搜索位为1,则比较在比任何不等比较更低索引的元素中检测两个操作数中的零元素;
1-检测元素不匹配,第二操作数中的元素小于第三操作数中的元素;
2-检测元素不匹配,第二操作数中的元素大于第三操作数中的元素;和
3-比较的所有元素相等,并且如果零搜索位是1,则在第二操作数(或者,在另一个实施例中,其它操作数)中没有找到零元素。
在执行架构的矢量查找元素不等指令的一个实施例中,在一个实施例中从左到右进行,将第二操作数的元素(包括在由V2指定的矢量寄存器及其扩展位中)与第三操作数的相应元素(包括在由V3字段指定的矢量寄存器加上其扩展位中)进行比较,并且可选地与零进行比较。如果两个元素不相等,则将最左边的非相等元素的字节索引放置在第一操作数的指定字节(例如,字节7)中(在由V1及其扩展位指定的寄存器中指定),并且零被存储到第一操作数的所有其它字节。
在一个示例中,所返回的元素(例如,存储在指定字节)的字节索引是不相等的最左边的元素的第一字节的索引。例如,如果元素大小是字节,则返回最左边的不等元素的索引(例如,如果有16个元素(0-15)并且元素6是不相等的,则返回字节索引6)。类似地,如果元素大小是半字,并且有8个元素(0-7),而元素3的字节6或7是不相等的,则返回字节索引6。同样,如果元素大小是全字并且有四个元素(0-3),而元素1的字节4-7中的一个字节是不相等的,则返回字节索引4。
如果在M5字段中的条件码设置位被设置为例如1,则条件码被设置为指示该操作数更大(如果有的话)。也就是说,例如,将例如第二操作数中的字符的二进制整数等效值(equivalent)与第三操作数中的不等字符的二进制整数等效值进行比较,并且基于该比较来设置条件码。如果元素相等,则将等于矢量大小的字节索引(以字节数表示,例如16)放置在第一操作数的指定字节(例如,字节7)中,并且将零置于所有其它字节位置中。如果条件码设置位是1,则设置选定条件码(例如,条件码3)。
如果零搜索位是M5字段中的一个,则还比较第二操作数(或在其它实施例中,第三操作数或另一操作数)中的每个元素与零的相等性(也称为空终止符,字符串的结尾,等)。如果在第二操作数中的任何其它元素被发现不相等之前在第二操作数中发现零元素,则被发现为零的元素的第一个字节的字节索引被存储在第一操作数的(例如,在架构版本的V1中)指定字节中(例如,字节7)。零存储在所有其它字节中,并且设置所选条件码(例如,条件码0)。
在一个实施例中,元素的比较并行地执行。例如,如果被比较的寄存器长度为16个字节,则并行地比较16个字节。在其它实施例中,数据单元可以不是字节,并且并行比较的数量对应于单元大小。此外,在另一实施例中,在运行时提供从左到右或从右到左的矢量的方向。例如,指令访问寄存器,状态控制或指示处理方向(例如从左到右或从右到左)的实体。在一个实施例中,该方向控制不被编码为指令的一部分,而是在运行时提供给指令。
在进一步的实施例中,指令不包括RXB字段。相反,不使用扩展或以另一种方式提供扩展,例如来自指令外部的控制,或者扩展被提供为指令的另一个字段的一部分。
根据本发明的一个方面,用于非循环MVST的架构VFENE指令以及其它指令的版本是修改版本,称为VFENE_modifiedcc,其中条件码(cc)的行为被如下更改。使用VFENE的修改版本,仅搜索终止符字符(例如,0),而不搜索不相等的字符。因此,第二操作数(例如,eVR1)和第三操作数(例如,eVR1)都包括相同的数据,并且比较不产生不相等的字符。此外,不提供RXB,M4和M5,并且当遇到终止字符(例如,\0)时,cc被设置为1;否则,cc被设置为3。
在另一种实施方式中,VFENE可以被实现为包括两个Add指令的处理:VFENE_modifiedcc_updated地址VR1,VR2,R1,R2。
如上所指出的另一操作是LCBB(加载计数到块边界)。参考图7描述了加载计数到块边界指令的架构版本的一个实施例。该指令例如提供从存储器中的指定地址到指定存储器边界的数据字节数的计数(例如,它提供在不跨越指定的存储器边界的情况下在寄存器中加载的字节数)。
在一个示例中,加载计数到块边界指令700包括:操作码字段702a(例如,位0-7),702b(例如,位40-47),其指示加载计数到块边界操作;用于指定通用寄存器(R1)的寄存器字段704(例如,位8-11);索引字段(X2)706(例如,位12-15);基本字段(B2)708(例如,位16-19);位移字段(D2)710(例如,位20-31);掩码字段(M3)1012(例如,位32-35)。在一个示例中,字段704-712中的每一个是与操作码字段分开并且独立的。此外,在一个实施例中,它们是彼此分开并且相互独立的;然而,在其它实施例中,可以组合多于一个字段。下面描述关于这些字段的使用的进一步信息。
在一个示例中,通用寄存器由X2和B2字段指定的内容被添加到D2字段的内容,以形成第二操作数地址。在一个示例中,用于加载计数到块边界指令的位移D2被视为12位无符号整数。第二操作数地址用于指示主存储器中的位置;然而,在该实施例中,它不用于寻址数据。
在一个实施例中,M3字段指定用于以信号通知CPU块边界大小以计算在不跨越存储器边界的情况下将要加载的可能的字节数的码。如果指定了保留值,则在一个示例中识别规范异常。示例码和相应的值如下:
Figure BDA0002187693020000241
在进一步的示例中,指令中不包括边界大小,而是动态地由执行所述指令的处理器来确定。例如,M3字段指定边界的类型(例如,高速缓存行,页等),并且基于处理器的类型和一个或多个特性(例如,处理器的高速缓存行大小;处理器的页大小;等),处理器确定边界。作为示例,基于类型,处理器对边界使用固定大小(例如,处理器的预定义的固定高速缓存行或页大小),或者基于类型,处理器确定边界。例如,如果类型是页边界,则处理器在转换后备缓冲区(TLB)中查找起始地址并从中确定页边界。其它示例也存在。例如,类型可以由指令的另一个字段提供,或者由指令外部的控制提供。
在加载计数到块边界指令的一个实施例的执行中,包含可能从第二操作数位置加载而不跨越指定的数据块边界的字节数(限制在例如要加载的寄存器的大小(例如,16)内)的无符号二进制整数(例如,64位)被放置在第一操作数中指定的通用寄存器中。
从指令的执行得到,可选的条件码被设置,诸如,例如:
0-操作数1是十六
1-
2-
3-操作数1是小于16
在上面的示例指令中,计数从其开始的起始地址由索引寄存器值(X2)加上基本寄存器值(B2)加上位移(D2)来确定;然而,在其它实施例中,仅作为一些示例,它由寄存器值提供;由指令地址加上指令文本指定的偏移量提供;由寄存器值加上位移提供;或者由寄存器值加上索引寄存器值提供。
根据本发明的一个方面,用于非循环MVST的架构LCBB指令以及其它指令的版本是修改版本,被称作LCBB_nocc,其中没有设置条件码,与LCBB的架构版本不同。使用修改版本,X2,B2和D2被R1取代;V1被eR1取代;M3字段被<边界>取代;并且没有设置条件码。该操作计算例如由VLBB加载的字节数。
在MVST的非循环版本(以及其它)中使用的另一操作是带长度的矢量存储操作。因此,参考图8描述带长度的矢量存储(VSTL)指令的架构版本的一个示例。在一个示例中,带长度的矢量存储指令800包括:操作码字段802a(例如,位0-7),802b(例如,位40-47),其指示带长度的矢量存储操作;用于指定矢量寄存器(V1)的寄存器字段804(例如,位8-11);寄存器字段(R3)806(例如,位12-15);基本字段(B2)808(例如,位16-19);位移字段(D2)810(例如,位20-31);和RXB字段812(例如,位32-35)。在一个示例中,字段804-812中的每一个是与操作码字段分开且独立的。此外,在一个实施例中,它们是彼此分开并且相互独立的;然而,在其它实施例中,可以组合多于一个字段。下面描述关于这些字段的使用的进一步信息。
加到该位移的基本寄存器的内容产生值。带长度的矢量存储指令的位移被视为12位无符号整数。
在操作中,在架构版本的一个实施例中,从左到右进行,来自第一操作数的字节被存储在第二操作数位置。由第三操作数指定的通用寄存器包含一个32位无符号整数,其中包含表示将要存储的最高索引字节的值。如果第三操作数包含大于或等于矢量的最高字节索引的值,则存储第一操作数的所有字节。
仅对存储的字节识别访问异常。
根据本发明的一个方面,用于非循环MVST的架构VSTL指令以及其它指令的版本是修改版本,其被称为VSTL_nocc,其中没有设置条件码。在一个实施例中,设置在非循环序列中使用的具有抑制条件码的VSTL的参数,使得B2对应于R2并且D2对应于0;V1被设置为eVR1,R3被设置为eR2。在另一实施例中,未明确指定VSTL的非循环版本的操作数,并且如下设置修改版本的一个或多个操作数:B2和D2被R2取代;V1被eVR1取代;并且R3被L=<eR2>取代。
除了上述操作,还提供其它操作,诸如对应于架构的MIN指令的最小操作,以及对应于架构Add指令的添加操作。如上所述,非循环操作序列的最小操作和第一添加操作是从它们的架构对应版本修改的,因为它们不设置条件码。此外,在至少一个实施例中,非循环序列中使用的最小操作被配备为从矢量寄存器接收至少一个输入操作数来代替整数寄存器。(在另一实施例中,矢量寄存器首先被转移到整数寄存器,并且修改的min操作接收两个整数寄存器输入操作数。)类似地,非循环序列的第二添加运算从其架构对应版本修改,因为它仅当VFENE的条件码为例如3时才执行添加,并且它不设置条件码。
如本文所述,在一个实施例中,提供了移动字符串指令的实现方式,其避免了微代码启动和/或退出的高成本;降低与双循环相关的成本;并且,在一个示例中,利用高性能字符串SIMD(单指令,多数据)设施(例如,矢量设施)。此实现方式使用非循环配置操作序列来执行架构MVST指令的复制循环操作。在一个示例中,对于在许多应用空间中频繁出现的短字符串特别有效。
根据本发明的一个方面,另一种可被实现的指令,是比较逻辑字符串(CLST)指令。比较逻辑字符串指令用于将由通用寄存器R2指定的第二操作数与通用寄存器R1指定的第一操作数位置进行比较。例如,从左到右,逐字节地进行比较,直到比较到不相等的字节,在任一操作数中遇到通用寄存器0中指定的结束字符,或者已比较CPU确定数量的字节。如果两个操作数相等,则条件码被设置为0;如果第一操作数为低,则条件码被设置为1;如果第二操作数为低,则条件码被设置为2;如果已比较CPU确定数量的字节,则条件码被设置为3。如果同时在两个操作数中找到结束字符,则操作数相等。如果仅在一个操作数中找到它,则操作数为低。
参考图9描述如在例如z/体系结构中在结构上定义的比较逻辑字符串指令的一个示例。在一个示例中,比较逻辑字符串指令900包括:操作码(作业码)字段902(例如,位0-15),其包括用于指定比较逻辑字符串操作的操作码;第一寄存器字段(R1)904(例如,位24-27);以及第二寄存器字段(R2)906(例如,位28-31)。在一个实施例中,指令的字段是彼此分开且相互独立的。然而,在另一个实施例中,可以组合多于一个字段。此外,与指令的字段相关联的下标编号表示应用该字段的操作数。例如,具有下标1的任何字段与第一操作数相关联,并且具有下标2的任何字段与第二操作数相关联。
在架构比较逻辑字符串指令的一个实施例的操作中,比较第一操作数与第二操作数,直到比较到不相等的字节,达到任一操作数的结尾,或者已比较CPU确定数量的字节,以先发生者为准。在一个示例中,CPU确定的数量至少为256。结果显示在条件码中。
第一操作数和第二操作数的最左字节的位置分别由通用寄存器R1和R2的内容指定。
对通用寄存器R1和R2中的地址的处理依赖于寻址模式。在24位寻址模式中,通用寄存器R1和R2的位位置40-63的内容构成地址,并且忽略位位置0-39的内容。在31位寻址模式中,寄存器的位位置33-63的内容构成地址,并且忽略位位置0-32的内容。在64位寻址模式中,位位置0-63的内容构成地址。
第一和第二操作数可以具有相同的或不同的长度。操作数的结尾通过操作数的最后一个字节位置中的结束字符表示。用于确定操作数结尾的结束字符在通用寄存器0的位位置56-63中指定。通用寄存器0的位位置32-55被保留以用于可能的未来扩展并且包含零;否则,在一个示例中,识别出规范异常。
操作从左到右,逐字节进行,并且在以下情况下结束:一旦在任一个或两个操作数中遇到结束字符,比较到不包括结束字符的不等字节,或者已比较CPU确定数量的字节,以先发生者为准。在一个示例中,CPU确定的数量至少为256。当在两个操作数中同时遇到结束字符时,包括它在操作数的第一个字节位置时,操作数具有相同的长度并被认为是相等的,并且设置条件码0。当仅在一个操作数中遇到结束字符时,该操作数(较短的操作数)被认为是低的,并且设置条件码1或2。如果第一操作数为低,则设置条件码1;如果第二操作数为低,则设置条件码2。类似地,当比较到不包括结束字符的不相等字节时,如果低字节在第一操作数中,则设置条件码1,或者如果低字节在第二操作数中,则设置条件码2。当已比较CPU确定数量的字节时,设置条件码3。
当设置条件码1或2时,在第一和第二操作数中处理的最后一个字节的地址被分别放置在通用寄存器R1和R2中。也就是说,当设置条件码1时,第一操作数为低,并且第一操作数中的结束字符或第一个不相等字节的地址(无论遇到哪个)放置在通用寄存器R1中,在位置上对应于第一操作数字节的第二操作数字节的地址放置在通用寄存器R2中。当设置条件码2时,第一操作数为高,第二操作数中的结束字符或第一个不相等字节的地址(无论遇到哪个)放置在通用寄存器R2中,在位置上对应第二操作数字节的第一操作数字节的地址放置在通用寄存器R1中。当设置条件码3时,CPU确定数量的字节相等,并且在第一和第二操作数中要处理的下一个字节的地址分别放置在通用寄存器R1和R2中。每当在通用寄存器中放置地址时,在24位寻址模式中寄存器的位32-39,或者在31位寻址模式中寄存器的位32,都设置为零。R1和R2寄存器的位0-31在24位或31位模式下保持不变。
当设置条件码0时,整个操作数相等,并且通用寄存器R1和R2的内容保持不变。
导致条件码3的设置的处理的量由CPU基于提高性能来确定,并且在每次执行指令时它可以是不同的量。
针对操作数中必须在运算中检查的那部分识别针对第一和第二操作数的访问异常。
比较逻辑字符串指令的一种实现方式使用微代码,其中包括微代码处理的昂贵进入和退出。这在图10A中示出。图10A中还示出了围绕指令实现的附加处理,包括例如下面描述的初始化步骤(例如,步骤1000)和完成检查(例如,查询1010)。
如在图10A中所示,在一个实现方式中,初始化终止符,步骤1000。例如,零可被设置为终止符字符,这样在遇到零时,它表示正在处理字符串的结尾。然后,指令开始处理,其中进入微代码处理,步骤1002,以及CLST比较循环开始,步骤1004。该循环在微代码中执行,并包括如上所述的比较字符串中的每个字符。例如,从左到右,比较字符。在比较一对字符之后,确定是否已比较字符串的所有字符或者是否已比较CPU确定的字符串的字符数,查询1006。如果比较继续,则处理继续到步骤1004。否则,退出微代码处理,步骤1008,终止指令执行。
此后,开始检查循环(从CLST处理分开),其中,确定是否已比较字符串中的所有字符,或者是否将要比较额外的字符,查询1010。如果比较继续,则重新进入微代码,步骤1002,并继续比较,步骤1004。如果比较完成,则检查循环结束,步骤1012。
根据本发明的一个方面,在CLST的另一实现方式(在本文中称为非循环版本)中,微代码进入和退出处理,以及上述处理的CLST比较循环被避免。相反,CLST比较循环的比较通过提供破解或扩展的操作序列来执行的,这些操作将比较多达预定数量的数据,例如预定数量的字节(例如,16字节)而无需循环(在此称为同时)。参考图10B进一步描述CLST处理的这种非循环版本。
在一个示例中,扩展的操作序列由指令解码单元提供(例如,生成)以及由一个或多个执行单元执行。在一个实施例中,扩展是对应于CLST比较循环的直线型(即,非循环)编码,其处理多达预定量的数据(例如,限定数量的单元),诸如例如,每个扩展CLST有16个字节。与CLST的架构定义一致,在执行扩展的指令序列之后,检查条件码,然后可以执行循环(例如,对应于检查循环),直到字符串中的所有字节都已处理并查找到了字符串终止符。然而,与架构版本不同,不执行CLST比较循环,并且根据本发明的一个方面,操作序列不经过指定边界加载,诸如例如页边界或高速缓存行边界。这通过消除对指定边界的检查和与之相关联的处理而有助于处理和提高系统性能。这将在下面进一步描述。
参考图10B,在一个实施例中,初始化终止符,步骤1050。此外,对应于CLST指令的操作序列由指令解码单元提供,并且通过一个或多个执行单元执行来执行比较,步骤1052。在不进入或退出微代码处理的情况下执行该比较。操作序列比较多达预定数量的数据(例如,预定数量的字节(例如,16字节))而不在CLST比较循环中循环。例如,在一个实现方式中,矢量单元用于同时比较16个字节。预定数量的数据包括字符串的字节,该字符串(包括终止符字符,假设字符串小于限定的字节数,例如16)多达限定的字节数(例如,16);或者直到指定的边界,诸如例如页边界或高速缓存行边界。
在执行非循环的操作序列之后,确定该比较是否完毕;即,是否存在多于限定字节数量(例如,16)的要比较的数据,查询1054。如果比较未完成,则进入检查循环并继续处理,步骤1052。否则,处理结束,步骤1056。
在进一步的示例中,当字符串包括选定的终止符字符(诸如零)时,使用比较逻辑字符串指令的修改的非循环实现方式;否则,使用架构微代码实现方式。这将参考图10C进一步描述。
如在图10C中示出,初始化终止符,步骤1070,并且确定终止符是否是特定值,例如0,查询1072。如果所初始化的终止符不是选定的终止符值(例如,0),则在一个实施例中使用微代码实现(例如,通过使用CGIT的内部陷阱),步骤1074。否则,使用内部操作序列的修改的非循环实现方式,而不使用进入/退出微代码。例如,使用解码单元提供操作序列,并由一个或多个执行单元执行该操作序列以执行比较,步骤1076。这是在不进入微代码处理的情况下完成的。操作序列比较多达预定数量的数据(例如,预定数量的字节(例如,16字节))而无需在比较循环中循环。预定数量的数据包括字符串的字节,该字符串(包括终止符字符,假设字符串小于限定的字节数,例如16)多达限定的字节数(例如,16);或者直到指定的边界,诸如例如页边界或高速缓存行边界。
在执行非循环操作序列或微代码之后,确定该比较是否完毕;即,是否有多于限定字节数量(例如,16)的数据要比较,查询1078。如果比较未完成,则进入检查循环并继续处理,步骤1072。否则,处理结束,步骤1080。
下面描述可用于执行CLST比较的内部操作序列的一个示例。当将要执行CLST指令的非循环版本时,解码单元生成或选择该操作序列。在下面的内部操作中,<R0>,<R1>和<R2>指的是架构寄存器r0,r1,r2或它们重命名的物理变体;eR1,eR2指的是扩展码序列使用的非循环内部通用寄存器(或它们的物理对应物);eVR1,eVR2指的是扩展码序列使用的非循环内部矢量寄存器(或它们的物理对应物)。后缀modifiedcc表示对后缀操作的条件码的处理不同于如何处理条件码的架构版本(对应于架构指令的架构版本)。后缀nocc指的是没有条件码,因为没有为架构版本中定义的后缀操作设置条件码。后缀nocc_cond指示针对特定条件执行与其相关联的操作,并且未设置条件码,这对于其所属的指令的架构版本也是不同的。
下面描述针对CLST的一个示例操作序列。以上描述了操作的实施例。
VLBB<eVR1>,<R1>,<边界>
向eVR1加载多个字节(例如,16)直到选定边界,例如页边界或高速缓存行边界
VLBB<eVR2>,<R2>,<边界>
向eVR2加载多个字节(例如,16)直到选定边界(例如,页边界或高速缓存行边界);加载2个寄存器用于比较
VFENE_modifiedcc<eVR2>,<eVR1>,<eVR2>
查找终止条件\0
LCBB_nocc<eR1>,<R1>,<边界>
针对第一操作数计算由VLBB加载的字节数
LCBB_nocc<eR2>,<R2>,<边界>
针对第二操作数计算由VLBB加载的字节数
MIN_nocc<eR1>,<eR2>
确定加载的操作数字节的最小计数
MIN_clstcc<eR1>,<eVR2>
确定加载的操作数字节和不匹配或终止符的最小计数,如果没有找到不匹配或终止符,则将条件码设置为3
A_nocc<R1>,<eR1>
将已处理的字节数(eR1)添加到寄存器R1
A_nocc_cond<R2>,<eR1>
将已处理的字节数(eR1)添加到寄存器R2,如果CC标志值是1,2或3。本指令将第二操作数寄存器添加到第一操作数寄存器,如果条件码是1,2或3。(例如,使用预测指令,无条件添加到临时寄存器中的条件移动等,其它实施例和条件码处理是可能的)
在本发明的这一方面,对于非循环CLST,VFENE架构指令被修改,其中下列条件码被设定:0-整个操作数相等,寄存器eVR1和eVR2不变;1-第一操作数为低,通用寄存器eVR1和eVR2采用所处理的最后字节的地址来更新;以及2-第一操作数为高,通用寄存器eVR1和eVR2采用所处理的最后字节的地址来更新。
此外,MIN_clstcc是选择其两个输入操作数中的较小者的修改的最小指令。如果第一输入操作数小于第二操作数,则MIN_clstcc保持条件码不变,如果第二操作数更小,则MIN_clstcc将条件码设置为3。
在另一个实施例中,最小指令被替换为指令序列。在又一个实施例中,提供单个最小指令,其计算<eR1>,<eR2>和<eVR2>的最小值,如果选择第三操作数<eVR2>则将条件码设置为3。其它变化是可能的。
在一个或多个其它实施例中,可以使用不同的内部操作,和/或内部操作可以被重新排序。在一个或多个实施例中,可以组合多个内部操作,例如,加载计数到边界操作和随后的最小操作可以被实现为单个内部操作。存在其它可能性。
作为示例,非循环操作序列的操作可具有与其相应的架构指令不同的操作码,或者它们可以具有相同的操作码,但是设置标志以指示非循环版本将要被处理。其它示例也是可能的。
如本文所述,在一个实施例中,提供了一种比较逻辑字符串指令的实现方式,其避免了微代码启动和/或退出的高成本;降低与双循环相关联的成本;并且,在一个示例中,利用高性能字符串SIMD设施。此实现方式使用非循环配置操作序列来执行架构CLST指令的比较循环操作。在一个示例中,对于在许多应用空间中频繁出现的短字符串特别有效。
在每个上述指令(即,MVST和CLST),以及其它字符串指令的一个或多个实现方式中,终止符字符是0。然而,在一个或多个其它实施例中,可使用任意的终止符字符。该字符可以是任何选定的字符,包括0或任何其它定义的字符。为了支持使用任意字符,终止符字符可以被传送到矢量单元(或另一实施例中的其它单元)并复制。
例如,如图11A所示,在一个实施例中,终止符被初始化为选定值,步骤1100,并转移到一个矢量单元并复制,步骤1102。在一个示例中,矢量复制指令(例如,VREP<eVR0>,<R0>)用于将寄存器R0中的终止符字符复制到例如eVR0的所有位置。然后,该复制的终止符字符可以由MVST,CLST和/或其它字符串指令的非循环配置版本使用。
作为示例,一种内部操作序列由指令解码单元提供(例如,生成)并由一个或多个执行单元执行以执行适当的操作(例如,针对MVST复制,针对CLST比较等)步骤1104。这是在不进入或退出微代码处理的情况下完成的。如上所述,内部操作在多达预定数量的数据(例如,预定数量的字节(例如,16字节))上执行指定操作,而不执行复制/比较循环。在执行操作序列之后,确定操作是否完毕;即,是否有超过预定数量的数据(例如,16个字节)将要处理,查询1106。如果操作未完成,则进入检查循环处理并继续操作,步骤1102。否则,处理结束,步骤1108。
操作序列的一个示例以及额外的初始复制操作包括:
VREP<eVR0>,<R0>
VLBB<eVR1>,<R1>,<边界>
VFEE_modifiedcc<eVR2>,<eVR1>,<eVR0>
LCBB_nocc<eR1>,<R1>,<边界>
MIN_nocc<eR2>,<eR1>,<eVR2>
VSTL_nocc<eVR1>,<R2>,L=<eR2>
A_nocc<R1>,<eR2>
A_nocc_cond<R2>,<eR2>
每个操作如上所述,除了VFEE,其将在下面描述。
在一个示例中,参考图6B,矢量查找元素相等(VFEE)指令650包括:操作码字段652a(例如,位0-7),652b(例如,位40-47),其指示矢量查找元素相等操作;第一矢量寄存器字段654(例如,位8-11),用于指定第一矢量寄存器(V1);第二矢量寄存器字段656(例如,位12-15),用于指定第二矢量寄存器(V2);第三矢量寄存器字段658(例如,位16-19),用于指定第三矢量寄存器(V3);第一掩码字段(M5)660(例如,位24-27);第二掩码字段(M4)662(例如,位32-35);以及RXB字段664(例如,位36-39)。在一个示例中,字段654-664中的每一个是与操作码字段分开且独立的。此外,在一个实施例中,它们是彼此分开并且相互独立的;然而,在其它实施例中,可以组合多于一个字段。在下面描述关于这些字段的使用的进一步信息。
具有例如四位(0-3)的M4字段在例如位1-3指定元素大小控制。元素大小控制指定矢量寄存器操作数中元素的大小。在一个示例中,元素大小控制可以指定字节,半字(例如,2个字节)或字(例如,4个字节)。例如,0表示字节;1表示半字;而2表示字,也就是全字。如果指定了保留值,则会识别规范异常。
M5字段是,例如,四位字段(位0-3),其包括例如:
零搜索字段(ZS,位2),如果是1,则第二操作数的每个元素也与零进行相等性比较。(在另一个示例中,第三操作数或另一个操作数的每个元素与零进行比较。);以及
条件码设置字段(CS,位3),如果是零,则不设置条件码并保持条件码不变。如果是1,则条件码如下所示设置,例如:
0-如果零搜索位为1,则在第二操作数中,在索引小于内容为零的元素的元素中没有相等比较。
1-比较检测到某个元素中第二和第三操作数之间的匹配。如果ZS位为1,则第二操作数中没有零比较。
2-如果ZS位为1,则第二和第三操作数之间存在匹配,其索引与第二操作数中与零的匹配相比更低。
3-没有比较到相等的元素。另外,如果ZS位是1,则没有元素包含零。
在架构的矢量查找元素相等指令的一个实施例的执行中,在一个实施例中,从左至右进行,第二操作数的元素(包括在由V2和其扩展位指定的矢量寄存器中)与第三操作数的相应元素(包括在由V3字段加上其扩展位指定的矢量寄存器中)比较并且可选地与零比较。如果两个元素相等,则将最左边的相等元素的第一个字节的字节索引放置在第一操作数的指定字节(例如,字节7)中(在V1及其扩展位指定的寄存器中指定),并且将零存储到第一操作数的剩余字节。如果没有发现字节相等,或者在零搜索(ZS)位为1的情况下没有字节等于零,则将等于矢量中的字节数的索引存储在第一操作数的字节7中。将零存储在剩余的字节中。
在一个示例中,所返回的元素(例如,存储在指定的字节)的字节索引是相等的最左边元素的第一字节的索引。例如,如果元素大小是字节,则返回最左边相等元素的索引(例如,如果有16个元素(0-15),并且元素6不相等,则返回字节索引6)。类似地,如果元素大小是半字,并且有8个元素(0-7),并且元素3的字节6或7相等,则返回字节索引6。同样,如果元素大小是全字并且有四个元素(0-3),并且元素1的字节4-7中的一个字节相等,则返回字节索引4。
如果在M5字段中设置零搜索位,则在第二操作数(或者在其它实施例中,第三操作数或另一操作数)中的每个元素也比较与零(又名,空终止符,字符串的结尾等)的相等性。如果在第二操作数和第三操作数的任何其它元素相等之前在第二操作数中发现零元素,则发现为零的元素的第一个字节的字节索引(例如,在架构版本的V1中)存储在第一操作数的指定的字节中(例如,字节7)。零存储在所有其它字节中,并且如果条件码设置标志是1,则设置选定条件码(例如,条件码0)。
在一个实施例中,元素的比较并行地执行。例如,如果被比较的寄存器长度为16个字节,则并行地比较16个字节。在其它实施例中,数据单元可以不是字节,并且并行比较的数量对应于单元大小。此外,在另一实施例中,在运行时提供从左到右或从右到左的矢量的方向。例如,指令访问寄存器,状态控制或指示处理方向(例如从左到右或从右到左)的其它实体。在一个实施例中,该方向控制不被编码为指令的一部分,而是在运行时提供给指令。
在进一步的实施例中,指令不包括RXB字段。相反,不使用扩展或以另一种方式提供扩展,例如来自指令外部的控制,或者扩展被提供为指令的另一个字段的一部分。
根据本发明的一个方面,用于非循环指令的架构VFEE指令的版本是一个修改版本,被称为VFEE_modifiedcc,其中,条件码(CC)的行为被改变。采用修改版本,不提供RXB,M4和M5,当遇到终止字符(例如,\0)时,cc设置为1;否则,cc设置为3。
在进一步的实施例中,参考图11B,避免设置eVR0的等待时间。相反,最新的终止符值被高速缓存在选定位置,例如寄存器,例如矢量寄存器。最初,初始化终止符,步骤1110,并且确定高速缓存的矢量终止符是否与初始化的终止符匹配,查询1112。如果它不匹配,则将终止符字符传送到矢量单元并复制,步骤1114,如上所述。在一个示例中,比较矢量到标量指令用于比较终止符字符,并且如果需要,分支到VREP指令以复制终止符(例如,CVSJ<R0>,<eVR0>,EQ,cached_ok;如果它是指定的已复制标量,则是矢量寄存器的比较矢量到标量复制和跳转-跳过初始化;cached_ok在操作序列中位于VLBB处)。此后,或者如果高速缓存的矢量终止符确实匹配,则如上所述,处理继续进行内部操作序列,用于在没有架构版本的复制/比较循环的情况下,执行所选操作(例如,复制,比较或其它操作),步骤1116。确定复制/比较(或其它)操作是否完毕,查询1118。如果是,则处理结束,步骤1119;否则,进入检查循环处理,并且处理继续到查询1112。
在又一个实施例中,参考图11C,初始化终止符,步骤1120,并且确定高速缓存的矢量终止符是否匹配初始化的终止符,查询1122。如果它不匹配,则微代码用于执行复制或比较操作(或其它操作),步骤1124。但是,如果高速缓存的矢量终止符与初始化的终止符匹配,则使用内部操作序列来执行所选操作(例如,复制,比较,或者其它操作),而没有如上所述的架构版本的复制/比较循环,步骤1126。
在执行操作序列或微代码之后,确定复制/比较(或其它)操作是否完成,查询1128。如果是这样,则处理结束,步骤1130;否则,进入检查循环处理,并且处理继续到查询1122。
在又进一步的实施例中,参考图11D,初始化终止符,步骤1140,并且确定高速缓存的终止符是否等于初始化的终止符,查询1142。该测试可以相对于步骤1148的内部操作并行和/或无序地执行。如果高速缓存的终止符不正确,则对应于步骤1148的所解码的内部操作序列从微处理器的流水线刷新,并且字符串指令(例如,MVST,CLST,或其它指令)被重新解码成转移为微代码的序列,步骤1144,并且使用微代码执行指令(例如,MVST,CLST或其它指令),步骤1146。然而,如果高速缓存的终止符字符是正确的,则如上所述,内部操作序列用于执行所选操作(例如,复制,比较或其它操作),而没有架构版本的复制/比较循环,步骤1148。此后,或微代码处理之后,确定所选操作是否完成,查询1150。如果是,则处理结束,步骤1152;否则,进入检查循环处理,并且处理继续到查询1142。
在又进一步的实施例中,参考图11E,进行推测性(speculative)解码。最初,初始化终止符,步骤1160,并且确定终止符的高速缓存版本是否与初始化的终止符相同,查询1162。该测试可以相对于步骤1168的内部操作并行地和/或无序地执行。如果高速缓存的版本不正确,则刷新对应于步骤1168的已解码的内部操作序列,并且以替换形式重新解码字符串指令(例如,MVST,CLST或其它指令),该替换形式更新示例寄存器中的高速缓存终止符,例如,eVR0,步骤1164。用于高速缓存终止符的寄存器或其它位置中的终止符字符再次被初始化为通用寄存器0的值,步骤1166。在一个示例中,VREP指令用于复制终止符字符。在重新初始化终止符之后,或者如果推测性解码的高速缓存版本是正确的,则使用内部操作序列来执行所选操作(例如,复制,比较或其它操作),步骤1168。此后,确定所选操作是否完成,查询1170。如果是,则处理结束,步骤1172;否则,进入检查循环处理并且处理继续到查询1162。
除了上述以外,内联内部操作扩展可以用于执行其它操作,包括但不限于,指针终止的字符搜索。例如,搜索字符串(SRST)指令用于在搜索循环(类似于上述复制/比较循环)中搜索指定字符(称为搜索字符)。根据本发明的一个方面,该指令(和类似指令)使用操作序列来实现,以在不进入/退出微代码的情况下在非循环配置中执行搜索,从而避免使用微代码的高成本,并且减少了与双循环相关联的成本。本发明的一个或多个方面利用了高性能字符串SIMD设施。
参考图12来描述按照z/体系结构定义的搜索字符串指令的一个示例。在一个示例中,架构的搜索字符串指令1200包括:操作码字段1202(例如,位0-15),其包括指定搜索字符串操作的操作码(作业码);第一寄存器字段(R1)1204(例如,位24-27);和第二寄存器(R2)字段1206(例如,位28-31)。在一个实施例中,指令的字段是彼此分开且相互独立的。然而,在另一个实施例中,可以组合多于一个字段。此外,与指令的字段相关联的下标编号表示应用该字段的操作数。例如,具有下标1的任何字段与第一操作数相关联,并且具有下标2的任何字段与第二操作数相关联。
在搜索字符串架构指令的操作中,第二操作数被搜索,直到指定字符被发现,达到第二操作数的结尾,如由R1所指定,或CPU确定数量的字节都被搜索过,以先发生者为准。CPU确定的数量例如至少为256。结果在条件码中指示。
第二操作数的第一个字节的位置由通用寄存器R2的内容指定。第二操作数之后的第一个字节的位置由通用寄存器R1的内容指定。
在通用寄存器R1和R2中的地址的处理依赖于寻址模式。在24位寻址模式中,通用寄存器R1和R2的位位置40-63的内容构成地址,并且忽略位位置0-39的内容。在31位寻址模式中,寄存器的位位置33-63的内容构成地址,并且忽略位位置0-32的内容。在64位寻址模式中,位位置0-63的内容构成地址。
在访问寄存器模式中,借助于访问寄存器R2来指定包含所述第二操作数的地址空间。访问寄存器R1的内容被忽略。
针对其发生搜索的字符例如在通用寄存器0的位位置56-63中指定。在一个示例中,通用寄存器0的位位置32-55被保留用于可能的未来扩展,并且将包含零;否则,识别规范异常。
一旦在第二操作数中找到指定字符,要检查的下一个第二操作数字节的地址等于通用寄存器R1中的地址,或者CPU确定数量的第二操作数字节已检查(以先发生者为准),则操作例如从左到右进行。CPU确定的数量例如至少为256。当查找到指定字符时,设置条件码1。当将要检查的下一个第二操作数字节的地址等于通用寄存器R1中的地址时,设置条件码2。当检查了CPU确定数量的第二操作数字节时,设置条件码3。当已经检查了CPU确定数量的第二操作数字节并且下一个第二操作数字节的地址在通用寄存器R1中时,是否设置了条件码2或3是不可预测的。
当设置条件码1时,在第二操作数中找到的指定字符的地址被放置在通用寄存器R1中,并且通用寄存器R2中的内容保持不变。当设置条件码3时,在第二操作数中将要处理的下一个字节的地址被放置在通用寄存器R2中,并且通用寄存器R1的内容保持不变。当设置条件码2时,通用寄存器R1和R2的内容保持不变。每当地址放置在通用寄存器中时,在24位寻址模式中寄存器的位32-39或在31位寻址模式中位32被设置为零。R1和R2寄存器的位0-31在24位或31位模式下保持不变。
当在通用寄存器R1中的地址等于在通用寄存器R2中的地址时,条件码2被立即设置,并且访问异常不被识别。当在通用寄存器R1中的地址小于在通用寄存器R2中的地址时,如果操作数从存储器顶部绕回到位置0,则可以设置条件码2。
导致条件码3的设置的处理的量由CPU在提高系统性能的基础上确定,并且它在每次执行指令时可以是不同的量。
针对第二操作数的访问异常仅对于操作数中必须被检查的部分识别。
根据本发明的一个方面,如图13A所示,在一个实施例中,使用非循环操作的序列,而不是微代码和搜索循环。
例如,如图13A所示,在一个实施例中,搜索字符被初始化为选定值,步骤1300,并转移到矢量单元并被复制,步骤1302。在一个示例中,矢量复制指令(例如,VREP<eVR0>,<R0>)用于将寄存器R0中的搜索字符复制到例如eVR0的所有位置。然后,该复制的搜索字符可以由SRST的非循环配置版本和/或其它字符串指令使用。
由指令解码单元提供(例如,生成)内部操作序列并由一个或多个执行单元执行适当的操作(例如,搜索SRST等),步骤1304。这在没有进入或退出微代码处理的情况下完成。如本文所述,内部操作在多达预定量的数据(例如,预定数量的字节(例如,16字节))上执行指定操作而不执行搜索循环。在执行操作序列之后,确定操作是否完毕;即,是否有超过预定数量的数据(例如,16字节)将要处理,查询1306。如果操作未完成,则进入检查循环处理并继续操作,步骤1302。否则,处理结束,步骤1308。
执行SRST的操作序列以及额外的初始复制操作的一个示例包括:
VREP<eVR1>,<R0>
所搜索的字符
+-VLBB<eVR2>,<R2>,<边界>
向eVR2加载多个字节(例如,16)直到选定边界,例如页边界或高速缓存行边界
VFEE_modifiedcc<eVR1>,<eVR1>,<eVR2>
查找搜索字符
LCBB_nocc<eR2>,<R2>,<边界>
计算VLBB加载的字节数
MIN_nocc<eR1>,<eR2>,<eVR1>
确定加载字节(eR1)或搜索终止符字符(eVR1)的位置中的最小值,以确定总字节数(eR1)
A_nocc<eR1>,<R2>,<eR1>
将处理的字节数添加到<R2>
UPDATE_srstcc<R2>,<eR1>,<R1>
如果<eR1>小于<R1>,则采用<eR1>的值更新<R2>,否则将条件码设置为2。
在进一步的实施例中,参考图13B,避免设置eVR0的等待时间。相反,最近的搜索字符值被高速缓存在选定位置,例如寄存器,诸如矢量寄存器。首先,初始化搜索字符,步骤1310,并且确定高速缓存的矢量搜索字符是否与初始化的搜索字符匹配,查询1312。如果它不匹配,则如上所述,搜索字符被传送到矢量单元并且被复制,步骤1314。在一个示例中,比较矢量到标量指令用于比较搜索字符,并且如果需要,分支到VREP指令以复制搜索字符(例如,CVSJ<R0>,<eVR0>,EQ,cached_ok;如果它是指定的复制标量,则是矢量寄存器的比较矢量到标量复制和跳转-跳过初始化;cached_ok在操作序列中位于VLBB处)。此后,或者如果高速缓存的矢量搜索字符确实匹配,则如上所述,处理继续进行内部操作序列,用于在没有架构版本的搜索循环的情况下执行所选操作(例如,搜索或其它操作),步骤1316。确定搜索(或其它)操作是否完成,查询1318。如果是,则处理结束,步骤1319;否则,进入检查循环处理,处理继续到查询1312。
在又一个实施例中,参考图13C,初始化搜索字符,步骤1320,并且确定高速缓存的矢量搜索字符是否匹配初始化的搜索字符,查询1322。如果它不匹配,则微代码用于执行搜索操作(或其它操作),步骤1324。然而,如果高速缓存的矢量搜索字符确实与初始化的搜索字符匹配,则如上所述,在没有架构版本的搜索循环的情况下使用内部操作序列来执行所选操作(例如,搜索或其它操作),步骤1326。
执行操作序列或微代码之后,确定搜索(或其它)操作是否完成,查询1328。如果是这样,则处理结束,步骤1330;否则,进入检查循环处理,并且处理继续到查询1322。
在又进一步的实施例中,参考图13D,初始化搜索字符,步骤1340,并且确定高速缓存的搜索字符是否等于初始化的搜索字符,查询1342。该测试可以相对于步骤1348的内部操作并行和/或无序地执行。如果高速缓存的搜索字符不正确,则从微处理器流水线刷新对应于步骤1348的解码内部操作序列,并且字符串指令(例如,SRST或其它指令)被重新解码成转移到微代码的序列,步骤1344,并且使用微代码执行指令(例如,SRST或其它指令),步骤1346。但是,如果高速缓存的搜索字符是正确的,则如上所述,内部操作序列用于在没有架构版本的搜索循环的情况下执行所选操作(例如,搜索或其它操作),步骤1348。此后,或者在微代码处理之后,确定所选操作是否完毕,查询1350。如果是,则处理结束,步骤1352;否则,进入检查循环处理,并且处理继续到查询1342。
在又进一步的实施例中,参考图13E,执行推测性解码。最初,初始化搜索字符,步骤1360,并且确定搜索字符的高速缓存版本是否与初始化的搜索字符相同,查询1362。该测试可以相对于步骤1368的内部操作并行和/或无序地执行。如果高速缓存的版本不正确,则刷新对应于步骤1368的解码内部操作序列,并且以替换形式对字符串指令(例如,SRST或其它指令)进行重新解码,该替换形式更新示例寄存器(例如,eVR0)中的高速缓存的搜索字符,步骤1364。用于高速缓存搜索字符的寄存器或其它位置中的搜索字符被再次初始化为通用寄存器0的值,步骤1366。在一个示例中,VREP指令用于复制搜索字符。在重新初始化搜索字符之后,或者如果推测性解码的高速缓存版本是正确的,则使用内部操作序列来执行所选操作(例如,搜索或其它操作),步骤1368。此后,确定所选操作是否完毕,查询1370。如果是,则处理结束,步骤1372;否则,进入检查循环处理,并且处理继续到查询1362。
在另一个实施例中,代替针对选定字符执行测试和推测性恢复(例如,刷新并重新解码),提供了一种指示符,其指定在上次发行SRST指令之后R0是否已改变。其它实施例也是可能的。
此外,在根据该实施例,指示符在通用寄存器0被修改时更新,使得高速缓存的字符不再对应于选定字符。在另一实施例中,当更新通用寄存器0以指示所选字符的高速缓存版本是否对应于通用寄存器0时,执行通用寄存器0的更新值的比较。虽然已经参考SRST描述了这些方面,但是这些方面也可以结合其它指令来实践,这些指令例如包括但不限于,关于可能的终止符字符的管理的MVST和CLST指令。
虽然在上面描述了各种实施例,可以在不脱离本发明的范围的情况下作出修改。例如,尽管条件码被设置为特定值,但是在其它实施例中,它们可以被设置为其它值。其它变化也是可能的。
此外,在上述指令中,作为CPU确定量执行的处理量由CPU基于改善系统性能来确定。在一个实施例中,该量是可以在操作中有效操作的字节数,例如,对应于寄存器(诸如,在其中可以并行执行处理的矢量寄存器)的长度。在另一个实施例中,该量是可以在没有循环的情况下有效地操作的字节数。其它示例也存在。
在另一个实施例中,除矢量单元以外的其它处理单元用于实现根据本发明的一个方面的操作序列。
以上描述的是,可以使用非循环操作序列在没有微代码的情况下实现架构指令的示例。例如,架构循环指令被扩展为非循环序列,从而消除了复制/比较/搜索循环并使用终止符校验(例如,终止符字符)作为修改定义中的主循环结构(检查循环)。在各种示例中,复制的终止符字符或搜索字符被存储在矢量寄存器中;和/或复制的终止符字符或搜索字符在跨越指令调用的隐藏的(架构上不可见的)矢量寄存器中。此外,作为示例,测试可以是推测性测试,并且扩展序列还包括验证所推测的终止符字符或搜索字符。作为示例,可以通过无序执行或通过不同的并行数据路径与处理并行地执行测试。此外,在另一个示例中,其中恢复包括对有序检查点的刷新,可以在扩展的操作序列中或在微代码中执行恢复。在又一示例中,在先前已经将隐藏矢量寄存器设置为R0的复制副本的情况下,通过测试指示符来验证终止符或测试字符,以确定在上次调用指令(例如,MVST,CLST,SRST)之后架构寄存器R0是否已经改变。许多其它变体是可能的。
本发明的一个或多个方面密不可分地关联于计算机技术并促进计算机内的处理,提高其性能。参考图14A-14B描述当涉及本发明的一个或多个方面时促进计算环境内的处理的一个实施例的进一步细节。
参考图14A,首先,获得将要解码的指令(1400)。该指令用于执行比较字符串操作(1402)。对指令进行解码(1404),并且该解码提供执行比较字符串操作的操作序列(1406)。操作序列包括将第一组数据加载到指定的存储器边界的第一加载到边界操作,和加载第二组数据的第二加载到边界操作(1408),第一组数据和第二组数据作为比较字符串操作的一部分加载(1410)。
操作序列包括执行比较字符串操作的多个操作,并且第一组数据和第二组数据包括将要同时比较的一个或多个字符(1412)。一个或多个字符在没有跨越一个或多个指定的存储器边界的情况下从存储器加载(1414)。
在一个示例中,操作序列的选定操作从选定操作的架构版本修改(1416)。在一个示例中,选定操作的架构版本设置条件码,并且修改选定操作以防止设置条件码(1418)。
参考图14B,在一个实施例中,指令被定义为循环指令,该循环指令重复多次以比较第一组数据和第二组数据(1420),并且所述解码包括将循环指令扩展为操作序列(1422)。操作序列是用于比较第一组数据和第二组数据的非循环序列(1424)。
在一个示例中,操作序列还包括:用于在第一组数据和第二组数据中的至少一个内查找终止符的查找终止符操作(1426)。
此外,在一个示例中,操作序列包括例如用于确定在第一组数据和第二组数据中的至少一个中加载的数据量的至少一个计数操作(1428)。
操作序列还包括,例如,用于确定在第一组数据中加载的数据量,在第二组数据中加载的数据量,或者终止符的位置中的最小值的至少一个最小操作(1430)。
在一个示例中,所述至少一个最小操作中的最小操作被配置为基于计算最小值来更新条件码(1432)。
此外,在一个示例中,操作序列包括用于向一个或多个位置添加所处理的最小数量的数据单元的计数的一个或多个添加操作(1434)。
例如,在没有进入微代码处理的情况下,执行操作序列(1436)。
在不脱离本发明的范围的情况下许多变型是可能的。应当注意,本文描述了许多方面和特征,并且除非另外不一致,否则每个方面或特征可以与任何其它方面或特征组合。
一个或多个方面可涉及云计算。
首先应当理解,尽管本公开包括关于云计算的详细描述,但其中记载的技术方案的实现却不限于云计算环境,而是能够结合现在已知或以后开发的任何其它类型的计算环境而实现。
云计算是一种服务交付模式,用于对共享的可配置计算资源池进行方便、按需的网络访问。可配置计算资源是能够以最小的管理成本或与服务提供者进行最少的交互就能快速部署和释放的资源,例如可以是网络、网络带宽、服务器、处理、存储器、存储、应用、虚拟机和服务。这种云模式可以包括至少五个特征、至少三个服务模型和至少四个部署模型。
特征包括:
按需自助式服务:云的消费者在无需与服务提供者进行人为交互的情况下能够单方面自动地按需部署诸如服务器时间和网络存储等的计算能力。
广泛的网络接入:计算能力可以通过标准机制在网络上获取,这种标准机制促进了通过不同种类的瘦客户机平台或厚客户机平台(例如移动电话、膝上型电脑、个人数字助理PDA)对云的使用。
资源池:提供者的计算资源被归入资源池并通过多租户(multi-tenant)模式服务于多重消费者,其中按需将不同的实体资源和虚拟资源动态地分配和再分配。一般情况下,消费者不能控制或甚至并不知晓所提供的资源的确切位置,但可以在较高抽象程度上指定位置(例如国家、州或数据中心),因此具有位置无关性。
迅速弹性:能够迅速、有弹性地(有时是自动地)部署计算能力,以实现快速扩展,并且能迅速释放来快速缩小。在消费者看来,用于部署的可用计算能力往往显得是无限的,并能在任意时候都能获取任意数量的计算能力。
可测量的服务:云系统通过利用适于服务类型(例如存储、处理、带宽和活跃用户帐号)的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,为服务提供者和消费者双方提供透明度。
服务模型如下:
软件即服务(SaaS):向消费者提供的能力是使用提供者在云基础架构上运行的应用。可以通过诸如网络浏览器的瘦客户机接口(例如基于网络的电子邮件)从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、乃至单个应用能力等的底层云基础架构。
平台即服务(PaaS):向消费者提供的能力是在云基础架构上部署消费者创建或获得的应用,这些应用利用提供者支持的程序设计语言和工具创建。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。
基础架构即服务(IaaS):向消费者提供的能力是消费者能够在其中部署并运行包括操作系统和应用的任意软件的处理、存储、网络和其它基础计算资源。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和其部署的应用具有控制权,对选择的网络组件(例如主机防火墙)可能具有有限的控制权。
部署模型如下:
私有云:云基础架构单独为某个组织运行。云基础架构可以由该组织或第三方管理并且可以存在于该组织内部或外部。
共同体云:云基础架构被若干组织共享并支持有共同利害关系(例如任务使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理并且可以存在于该共同体内部或外部。
公共云:云基础架构向公众或大型产业群提供并由出售云服务的组织拥有。
混合云:云基础架构由两个或更多部署模型的云(私有云、共同体云或公共云)组成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如用于云之间的负载平衡的云突发流量分担技术)绑定在一起。
云计算环境是面向服务的,特点集中在无状态性、低耦接性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础架构。
现在参考图15,其中显示了示例性的云计算环境50。如图所示,云计算环境50包括云计算消费者使用的本地计算设备可以与其相通信的一个或者多个云计算节点10,本地计算设备例如可以是个人数字助理(PDA)或移动电话54A,台式电脑54B、笔记本电脑54C和/或汽车计算机系统54N。云计算节点10之间可以相互通信。可以在包括但不限于如上所述的私有云、共同体云、公共云或混合云或者它们的组合的一个或者多个网络中将云计算节点10进行物理或虚拟分组(图中未显示)。这样,云的消费者无需在本地计算设备上维护资源就能请求云计算环境50提供的基础架构即服务(IaaS)、平台即服务(PaaS)和/或软件即服务(SaaS)。应当理解,图15显示的各类计算设备54A-N仅仅是示意性的,云计算节点10以及云计算环境50可以与任意类型网络上和/或网络可寻址连接的任意类型的计算设备(例如使用网络浏览器)通信。
现在参考图16,其中显示了云计算环境50(图15)提供的一组功能抽象层。首先应当理解,图16所示的组件、层以及功能都仅仅是示意性的,本发明的实施例不限于此。如16所示,提供下列层和对应功能:
硬件和软件层60包括硬件和软件组件。硬件组件的示例包括主机61;基于RISC(精简指令集计算机)架构的服务器62;服务器63;刀片服务器64;存储设备65;在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。
虚拟化层70提供抽象层,从该抽象层可以提供以下虚拟实体的示例:虚拟服务器71;虚拟存储器72;虚拟网络73,包括虚拟专用网络;虚拟应用程序和操作系统74;和虚拟客户端75。
在一个示例中,管理层80可以提供下述功能:资源供应功能81:提供用于在云计算环境中执行任务的计算资源和其它资源的动态获取;计量和定价功能82:在云计算环境内对资源的使用进行成本跟踪,并为此提供帐单和发票。在一个示例中,该资源可以包括应用软件许可。安全功能:为云的消费者和任务提供身份认证,为数据和其它资源提供保护。用户门户功能83:为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能84:提供云计算资源的分配和管理,以满足必需的服务水平。服务水平协议(SLA)计划和履行功能85:为根据SLA预测的对云计算资源未来需求提供预先安排和供应。
工作负载层90提供云计算环境可能实现的功能的示例。在该层中,可提供的工作负载或功能的示例包括:地图绘制与导航91;软件开发及生命周期管理92;虚拟教室的教学提供93;数据分析处理94;交易处理95;以及指令处理96。
本发明可以是任何可能的技术细节集成级别的系统,方法和/或计算机程序产品。该计算机程序产品可以包括计算机可读存储介质(或介质),其上具有计算机可读程序指令,用于使处理器执行本发明的各方面。
计算机可读存储介质可以是有形设备,其可以保留和存储指令以供指令执行设备使用。计算机可读存储介质可以是例如但不限于电子存储设备,磁存储设备,光存储设备,电磁存储设备,半导体存储设备或前述的任何合适组合。计算机可读存储介质的更具体示例的非详尽列表包括以下内容:便携式计算机磁盘,硬盘,随机存取存储器(RAM),只读存储器(ROM),可擦除可编程读取器-仅存储器(EPROM或闪存),静态随机存取存储器(SRAM),便携式光盘只读存储器(CD-ROM),数字通用光盘(DVD),存储器棒,软盘,机械编码装置,例如在其上记录有指令的凹槽中的穿孔卡或凸起结构,以及前述的任何合适的组合。这里使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其它自由传播的电磁波,通过波导或其它传输介质传播的电磁波(例如,通过的光脉冲)光纤电缆)或通过电线传输的电信号。
这里描述的计算机可读程序指令可以经由网络(例如,因特网,局域网,广域网和网络)从计算机可读存储介质或外部计算机或外部存储设备下载到相应的计算/处理设备。/或无线网络。网络可以包括铜传输电缆,光传输光纤,无线传输,路由器,防火墙,交换机,网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
用于执行本发明的操作的计算机可读程序指令可以是汇编指令,指令集架构(ISA)指令,机器指令,机器相关指令,微代码,固件指令,状态设置数据,用于集成电路的配置数据,或者以一种或多种编程语言的任意组合编写的源代码或目标代码,包括诸如Smalltalk,C++等的面向对象的编程语言,以及诸如“C”编程语言或类似编程的过程编程语言。语言。计算机可读程序指令可以完全在用户的计算机上,部分在用户的计算机上,作为独立的软件包,部分地在用户的计算机上,部分地在远程计算机上或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络连接到用户的计算机,包括局域网(LAN)或广域网(WAN),或者可以连接到外部计算机(用于例如,通过互联网使用互联网服务提供商)。在一些实施例中,包括例如可编程逻辑电路,现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来个性化来执行计算机可读程序指令。电子电路,以执行本发明的各方面。
这里参考根据本发明实施例的方法,装置(系统)和计算机程序产品的流程图和/或框图来描述本发明的各方面。将理解,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可以由计算机可读程序指令实现。
这些计算机可读程序指令可以被提供给通用计算机,专用计算机或其它可编程数据处理装置的处理器以产生机器,使得指令通过计算机的处理器或其它可编程数据处理执行。装置,创建用于实现流程图和/或框图块中指定的功能/动作的装置。这些计算机可读程序指令还可以存储在能够指引计算机,可编程数据处理设备的计算机可读存储介质,和/或其它设备以特定方式起作用,使得计算机可读存储MEDI微米存储有指令在其中包括小号制造包括实现在流程图和/或框图的一个或多个块中指定的功能/动作的方面指令的制品。
计算机可读程序指令还可以被加载到计算机,其它可编程数据处理装置或其它设备上,以使得在计算机,其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,例如在计算机,其它可编程装置或其它设备上执行的指令实现在流程图和/或框图块中指定的功能/动作。
附图中的流程图和框图显示了根据本发明的各种实施例的系统,方法和计算机程序产品的可能实现的架构,功能和操作。在这方面,流程图或框图中的每个框可以表示模块,段或指令的一部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方式中,块中提到的功能可以不按图中所示的顺序发生。例如,连续示出的两个方框实际上可以基本上同时执行,或者这些方框有时可以以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图图示的每个框以及框图和/或流程图图示中的框的组合可以由执行特定功能或动作的专用基于硬件的系统来实现。执行专用硬件和计算机指令的组合。
除了上述之外,可以由提供客户环境管理的服务提供商提供,提供,部署,管理,服务等一个或多个方面。例如,服务提供商可以创建,维护,支持等计算机代码和/或为一个或多个客户执行一个或多个方面的计算机基础设施。作为回报,作为示例,服务提供商可以根据订阅和/或费用协议从客户接收付款。附加地或替代地,服务提供商可以从向一个或多个第三方销售广告内容接收付款。
在一个方面,可以部署应用程序以执行一个或多个实施例。作为一个示例,应用程序的部署包括提供可操作以执行一个或多个实施例的计算机基础结构。
作为另一方面,可以部署计算基础设施,包括将计算机可读代码集成到计算系统中,其中与计算系统结合的代码能够执行一个或多个实施例。
作为又一方面,可以提供一种用于集成计算基础设施的过程,包括将计算机可读代码集成到计算机系统中。该计算机系统包括计算机可读介质,其中该计算机介质包括一个或多个实施例。与计算机系统结合的代码能够执行一个或多个实施例。
尽管上面描述了各种实施例,但这些仅是示例。例如,其它架构的计算环境可用于合并和使用一个或多个实施例。此外,可以使用不同的指令,指令格式,指令字段和/或指令值。许多变化都是可能的。
此外,其它类型的计算环境可以受益并被使用。作为示例,适用于存储和/或执行程序代码的数据处理系统是可用的,其包括通过系统总线直接或间接耦接到存储器元件的至少两个处理器。存储器元件包括例如在程序代码的实际执行期间使用的本地存储器,大容量存储器和高速缓冲存储器,其提供至少一些程序代码的临时存储,以便减少必须从大容量存储器检索代码的次数。执行期间。
输入/输出或I/O设备(包括但不限于键盘,显示器,指示设备,DASD,磁带,CD,DVD,拇指驱动器和其它存储介质等)可以直接连接到系统或通过介入I/O控制器。网络适配器也可以耦接到系统,以使数据处理系统能够通过中间私有或公共网络耦接到其它数据处理系统或远程打印机或存储设备。调制解调器,电缆调制解调器和以太网卡只是可用类型的网络适配器中的一小部分。
这里使用的术语仅用于描述特定实施例的目的,而不是限制性的。如这里所使用的,单数形式“一”,“一个”和“该”旨在也包括复数形式,除非上下文另有明确说明。将进一步理解,当在本说明书中使用时,术语“包括”和/或“包含”指定所述特征,整数,步骤,操作,元件和/或组件的存在,但不排除存在或者添加一个或多个其它特征,整数,步骤,操作,元素,组件和/或组。
以下权利要求中的所有装置或步骤加功能元件的相应结构,材料,动作和等同物(如果有的话)旨在包括用于结合具体要求保护的其它要求保护的元件执行功能的任何结构,材料或动作。已经出于说明和描述的目的给出了一个或多个实施例的描述,但是并不旨在穷举或限制于所公开的形式。许多修改和变化对于本领域普通技术人员来说是显而易见的。选择和描述实施例是为了最好地解释各个方面和实际应用,并且使本领域普通技术人员能够理解具有适合于预期的特定用途的各种修改的各种实施例。

Claims (23)

1.一种用于促进计算环境内的处理的计算机实现的方法,计算机程序产品包括:
获得将要解码的指令,所述指令是执行比较字符串操作;以及
解码所述指令,所述解码提供执行所述比较字符串操作的操作序列,所述操作序列包括:将第一组数据加载到指定的存储器边界的第一加载到边界操作,和加载第二组数据的第二加载到边界操作,所述第一组数据和所述第二组数据作为所述比较字符串操作的一部分加载,其中,所述操作序列的选定操作从所述选定操作的架构版本修改。
2.根据权利要求1所述的方法,其中,所述操作序列包括:执行所述比较字符串操作的多个操作,并且所述第一组数据和所述第二组数据包括将要同时比较的一个或多个字符,所述一个或多个字符在没有跨越一个或多个指定的存储器边界的情况下从存储器中加载。
3.根据权利要求1所述的方法,其中,所述选定操作的所述架构版本设置条件码,并且其中,修改所述选定操作以防止设置所述条件码。
4.根据权利要求1至3中任一项所述的方法,其中,所述指令被定义为循环指令,所述循环指令重复多次以比较所述第一组数据和所述第二组数据,并且其中,所述解码包括:将所述循环指令扩展为所述操作序列,所述操作序列是用于比较所述第一组数据和所述第二组数据的非循环序列。
5.根据权利要求1至3中任一项所述的方法,其中,所述操作序列还包括:用于在所述第一组数据和所述第二组数据中的至少一个内查找终止符的查找终止符操作。
6.根据权利要求5所述的方法,其中,所述操作序列还包括:用于确定在所述第一组数据和所述第二组数据中的至少一个中加载的数据量的至少一个计数操作。
7.根据权利要求6所述的方法,其中,所述操作序列还包括:用于确定在所述第一组数据中加载的数据量、在所述第二组数据中加载的数据量、或者所述终止符的位置中的最小值的至少一个最小操作。
8.根据权利要求7所述的方法,其中,所述至少一个最小操作中的最小操作被配置为基于计算所述最小值来更新条件码。
9.根据权利要求8所述的方法,其中,所述操作序列还包括:用于向一个或多个位置添加所处理的最小数量的数据单元的计数的一个或多个添加操作。
10.根据权利要求1至3中任一项所述的方法,其中,在没有进入微代码处理的情况下,执行所述操作序列。
11.一种用于促进计算环境内的处理的计算机系统,所述计算机系统包括:
存储器;以及
与所述存储器通信的处理器,其中,所述计算机系统被配置为执行方法,所述方法包括:
获得将要解码的指令,所述指令是执行比较字符串操作;以及
解码所述指令,所述解码提供执行所述比较字符串操作的操作序列,所述操作序列包括:将第一组数据加载到指定的存储器边界的第一加载到边界操作,和加载第二组数据的第二加载到边界操作,所述第一组数据和所述第二组数据作为比较字符串操作的一部分加载,其中,所述操作序列的选定操作从所述选定操作的架构版本修改。
12.根据权利要求11所述的计算机系统,其中,所述操作序列包括:执行所述比较字符串操作的多个操作,并且所述第一组数据和所述第二组数据包括将要同时比较的一个或多个字符,所述一个或多个字符在没有跨越一个或多个指定的存储器边界的情况下从存储器中加载。
13.根据权利要求11所述的计算机系统,其中,所述选定操作的所述架构版本设置条件码,并且其中,修改所述选定操作以防止设置所述条件码。
14.根据权利要求11至13中任一项所述的计算机系统,其中,所述指令被定义为循环指令,所述循环指令重复多次以比较所述第一组数据和所述第二组数据,并且其中,所述解码包括:将所述循环指令扩展为所述操作序列,所述操作序列是用于比较所述第一组数据和所述第二组数据的非循环序列。
15.根据权利要求11至13中任一项所述的计算机系统,其中,所述操作序列还包括:用于在所述第一组数据和所述第二组数据中的至少一个内查找终止符的查找终止符操作。
16.根据权利要求15所述的计算机系统,其中,所述操作序列还包括:用于确定在所述第一组数据和所述第二组数据中的至少一个中加载的数据量的至少一个计数操作。
17.根据权利要求16所述的计算机系统,其中,所述操作序列还包括:用于确定在所述第一组数据中加载的数据量、在所述第二组数据中加载的数据量、或所述终止符的位置中的最小值的至少一个最小操作。
18.根据权利要求17所述的计算机系统,其中,所述至少一个最小操作中的最小操作被配置为基于计算所述最小值来更新条件码。
19.根据权利要求18所述的计算机系统,其中,所述操作序列还包括:用于向一个或多个位置添加所处理的最小数量的数据单元的计数的一个或多个添加操作。
20.根据权利要求11至13中任一项所述的计算机系统,其中,在没有进入微代码处理的情况下,执行所述操作序列。
21.一种用于促进计算环境内的处理的计算机程序产品,所述计算机程序产品包括:
一种计算机可读存储介质,其可由处理电路读取并存储用于由所述处理电路执行的指令,用于执行根据权利要求1至10中任一项所述的方法。
22.一种计算机程序,其存储在计算机可读介质上并且可加载到数字计算机的内部存储器中,其包括软件代码部分,当所述程序在计算机上运行时,所述软件代码部分用于执行根据权利要求1至10中任一项所述的方法。
23.一种计算机程序,其存储在计算机可读介质上并加载到根据权利要求11至20中任一项所述的系统的内部存储器中,其包括软件代码部分,当所述程序在所述系统上运行时,所述软件代码部分用于执行根据权利要求1至10中任一项所述的方法。
CN201880015283.3A 2017-03-03 2018-02-22 通过基于内联解码的微操作扩展的比较字符串处理 Active CN110352404B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/449,087 US10564965B2 (en) 2017-03-03 2017-03-03 Compare string processing via inline decode-based micro-operations expansion
US15/449,087 2017-03-03
PCT/IB2018/051098 WO2018158663A1 (en) 2017-03-03 2018-02-22 Compare string processing via inline decode-based micro-operations expansion

Publications (2)

Publication Number Publication Date
CN110352404A CN110352404A (zh) 2019-10-18
CN110352404B true CN110352404B (zh) 2023-04-28

Family

ID=63357334

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880015283.3A Active CN110352404B (zh) 2017-03-03 2018-02-22 通过基于内联解码的微操作扩展的比较字符串处理

Country Status (6)

Country Link
US (1) US10564965B2 (zh)
JP (1) JP7241689B2 (zh)
CN (1) CN110352404B (zh)
DE (1) DE112018001124T5 (zh)
GB (1) GB2574567B (zh)
WO (1) WO2018158663A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10620956B2 (en) 2017-03-03 2020-04-14 International Business Machines Corporation Search string processing via inline decode-based micro-operations expansion
US10564967B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Move string processing via inline decode-based micro-operations expansion
US10789069B2 (en) 2017-03-03 2020-09-29 International Business Machines Corporation Dynamically selecting version of instruction to be executed
US10324716B2 (en) 2017-03-03 2019-06-18 International Business Machines Corporation Selecting processing based on expected value of selected character
US10613862B2 (en) 2017-03-03 2020-04-07 International Business Machines Corporation String sequence operations with arbitrary terminators
US11029953B2 (en) * 2019-06-26 2021-06-08 Intel Corporation Branch prediction unit in service of short microcode flows
CN112631729A (zh) * 2020-12-28 2021-04-09 杭州趣链科技有限公司 智能合约的部署方法、执行方法、装置及终端设备
CN114356647B (zh) * 2022-03-18 2022-06-21 天津德科智控股份有限公司 一种eps系统数据编码及存储方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5692146A (en) * 1995-05-26 1997-11-25 National Semiconductor Corporation Method of implementing fast 486TM microprocessor compatible string operations
US5696956A (en) * 1995-11-08 1997-12-09 Digital Equipment Corporation Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents
WO2002037264A2 (en) * 2000-11-06 2002-05-10 Broadcom Corporation Reconfigurable processing system and method
CN101278260A (zh) * 2005-06-07 2008-10-01 Vm软件股份有限公司 使软件程序免于弱点和攻击的约束注入系统
CN102298515A (zh) * 2010-06-22 2011-12-28 国际商业机器公司 执行对两个操作数的操作并随后存储原始值的方法和系统
CN104169870A (zh) * 2012-03-15 2014-11-26 国际商业机器公司 将具有终止字符的字符数据从一个存储器位置复制到另一个存储器位置
CN104169869A (zh) * 2012-03-15 2014-11-26 国际商业机器公司 比较具有终止字符的字符数据集
CN104185839A (zh) * 2012-03-15 2014-12-03 国际商业机器公司 将数据载入直到动态确定的存储器边界的方法
CN104205067A (zh) * 2012-03-15 2014-12-10 国际商业机器公司 将数据载入直到由指令所指示的指定存储器边界的指令

Family Cites Families (66)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0786875B2 (ja) 1984-05-25 1995-09-20 株式会社日立製作所 ベクトル処理装置
JP3317985B2 (ja) * 1991-11-20 2002-08-26 喜三郎 中澤 擬似ベクトルプロセッサ
US5465374A (en) * 1993-01-12 1995-11-07 International Business Machines Corporation Processor for processing data string by byte-by-byte
AU7108994A (en) 1993-06-14 1995-01-03 Apple Computer, Inc. Method and apparatus for finding a termination character within a variable length character string or a processor
DE4334294C1 (de) * 1993-10-08 1995-04-20 Ibm Prozessor für Zeichenketten variabler Länge
US5781750A (en) * 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
US5680572A (en) * 1994-02-28 1997-10-21 Intel Corporation Cache memory system having data and tag arrays and multi-purpose buffer assembly with multiple line buffers
US5644755A (en) 1995-02-24 1997-07-01 Compaq Computer Corporation Processor with virtual system mode
GB9509987D0 (en) 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
US5926642A (en) 1995-10-06 1999-07-20 Advanced Micro Devices, Inc. RISC86 instruction set
US5752015A (en) * 1996-03-29 1998-05-12 Integrated Device Technology, Inc. Method and apparatus for repetitive execution of string instructions without branch or loop microinstructions
US5822602A (en) 1996-07-23 1998-10-13 S3 Incorporated Pipelined processor for executing repeated string instructions by halting dispatch after comparision to pipeline capacity
US5931940A (en) * 1997-01-23 1999-08-03 Unisys Corporation Testing and string instructions for data stored on memory byte boundaries in a word oriented machine
US5898865A (en) 1997-06-12 1999-04-27 Advanced Micro Devices, Inc. Apparatus and method for predicting an end of loop for string instructions
US6788303B2 (en) 2001-02-27 2004-09-07 3Dlabs Inc., Ltd Vector instruction set
US6931517B1 (en) 2001-10-23 2005-08-16 Ip-First, Llc Pop-compare micro instruction for repeat string operations
US20030084253A1 (en) 2001-10-31 2003-05-01 Johnson David J.C. Identification of stale entries in a computer cache
US20030120900A1 (en) 2001-12-20 2003-06-26 Stotzer Eric J. Apparatus and method for a software pipeline loop procedure in a digital signal processor
JP4077252B2 (ja) 2002-06-28 2008-04-16 富士通株式会社 コンパイラプログラムおよびコンパイル処理方法
US20040230775A1 (en) * 2003-05-12 2004-11-18 International Business Machines Corporation Computer instructions for optimum performance of C-language string functions
JP4129981B2 (ja) 2004-04-02 2008-08-06 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、コンパイラプログラム、記録媒体、制御方法、及び中央処理装置
US7366885B1 (en) 2004-06-02 2008-04-29 Advanced Micro Devices, Inc. Method for optimizing loop control of microcoded instructions
US8549501B2 (en) 2004-06-07 2013-10-01 International Business Machines Corporation Framework for generating mixed-mode operations in loop-level simdization
US7395531B2 (en) * 2004-06-07 2008-07-01 International Business Machines Corporation Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements
US7676797B2 (en) 2005-01-31 2010-03-09 Computer Associates Think, Inc. System and method for managing long names in an application programming interface
US7822615B2 (en) 2005-06-27 2010-10-26 Ab Initio Technology Llc Translating expressions in a computing environment
US7840954B2 (en) * 2005-11-29 2010-11-23 International Business Machines Corporation Compilation for a SIMD RISC processor
US7454585B2 (en) * 2005-12-22 2008-11-18 International Business Machines Corporation Efficient and flexible memory copy operation
US20080040345A1 (en) 2006-08-07 2008-02-14 International Characters, Inc. Method and Apparatus for String Search Using Parallel Bit Streams
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US8166279B2 (en) 2007-05-03 2012-04-24 International Business Machines Corporation Method for predictive decoding of a load tagged pointer instruction
US7991987B2 (en) 2007-05-10 2011-08-02 Intel Corporation Comparing text strings
US7761672B2 (en) 2007-06-28 2010-07-20 Advanced Micro Devices, Inc. Data movement and initialization aggregation
US7937574B2 (en) 2007-07-17 2011-05-03 Advanced Micro Devices, Inc. Precise counter hardware for microcode loops
US8095777B2 (en) 2007-11-01 2012-01-10 International Business Machines Corporation Structure for predictive decoding
US20090182988A1 (en) 2008-01-11 2009-07-16 International Business Machines Corporation Compare Relative Long Facility and Instructions Therefore
US9280480B2 (en) 2008-01-11 2016-03-08 International Business Machines Corporation Extract target cache attribute facility and instruction therefor
KR20100126690A (ko) 2008-02-18 2010-12-02 샌드브리지 테크놀로지스, 인코포레이티드 널-종료 문자열 동작을 가속화하는 방법
CN101593179B (zh) 2008-05-26 2011-08-10 国际商业机器公司 文档搜索方法和装置及文档处理器
US7802078B2 (en) 2008-09-09 2010-09-21 Via Technologies, Inc. REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat
US8392693B2 (en) * 2009-08-28 2013-03-05 Via Technologies, Inc. Fast REP STOS using grabline operations
US8938605B2 (en) 2010-03-05 2015-01-20 International Business Machines Corporation Instruction cracking based on machine state
GB2480285A (en) 2010-05-11 2011-11-16 Advanced Risc Mach Ltd Conditional compare instruction which sets a condition code when it is not executed
US9009447B2 (en) 2011-07-18 2015-04-14 Oracle International Corporation Acceleration of string comparisons using vector instructions
JP5779077B2 (ja) 2011-11-22 2015-09-16 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation プログラムの生成を支援する装置及び方法
US9459864B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Vector string range compare
US9454367B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Finding the length of a set of character data having a termination character
US9311101B2 (en) 2012-06-15 2016-04-12 International Business Machines Corporation Intra-instructional transaction abort handling
US20150378674A1 (en) * 2012-09-15 2015-12-31 John W. Ogilvie Converting numeric-character strings to binary numbers
US9710276B2 (en) 2012-11-09 2017-07-18 Advanced Micro Devices, Inc. Execution of instruction loops using an instruction buffer
US9268572B2 (en) 2012-12-11 2016-02-23 International Business Machines Corporation Modify and execute next sequential instruction facility and instructions therefor
US9501276B2 (en) 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US10241793B2 (en) 2013-03-15 2019-03-26 Analog Devices Global Paralleizing loops in the presence of possible memory aliases
US9703562B2 (en) * 2013-03-16 2017-07-11 Intel Corporation Instruction emulation processors, methods, and systems
JP6160259B2 (ja) 2013-05-30 2017-07-12 富士通株式会社 文字列探索方法、文字列探索装置および文字列探索プログラム
US10423413B2 (en) * 2013-07-09 2019-09-24 Texas Instruments Incorporated Vector load and duplicate operations
US8902087B1 (en) 2013-08-27 2014-12-02 International Business Machines Corporation Data decompression utilizing pre-expanded dictionaries during decompression
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
CN107873015B (zh) * 2015-06-01 2021-12-24 加州理工学院 具有新的cit-13拓扑结构的晶体锗硅酸盐材料及其制备方法
CN106469186A (zh) 2016-08-29 2017-03-01 北京像素软件科技股份有限公司 一种字符串比较的方法及装置
US10564967B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Move string processing via inline decode-based micro-operations expansion
US10789069B2 (en) 2017-03-03 2020-09-29 International Business Machines Corporation Dynamically selecting version of instruction to be executed
US10255068B2 (en) 2017-03-03 2019-04-09 International Business Machines Corporation Dynamically selecting a memory boundary to be used in performing operations
US10620956B2 (en) 2017-03-03 2020-04-14 International Business Machines Corporation Search string processing via inline decode-based micro-operations expansion
US10613862B2 (en) 2017-03-03 2020-04-07 International Business Machines Corporation String sequence operations with arbitrary terminators
US10324716B2 (en) 2017-03-03 2019-06-18 International Business Machines Corporation Selecting processing based on expected value of selected character

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5692146A (en) * 1995-05-26 1997-11-25 National Semiconductor Corporation Method of implementing fast 486TM microprocessor compatible string operations
US5696956A (en) * 1995-11-08 1997-12-09 Digital Equipment Corporation Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents
WO2002037264A2 (en) * 2000-11-06 2002-05-10 Broadcom Corporation Reconfigurable processing system and method
CN101278260A (zh) * 2005-06-07 2008-10-01 Vm软件股份有限公司 使软件程序免于弱点和攻击的约束注入系统
CN102298515A (zh) * 2010-06-22 2011-12-28 国际商业机器公司 执行对两个操作数的操作并随后存储原始值的方法和系统
CN104169870A (zh) * 2012-03-15 2014-11-26 国际商业机器公司 将具有终止字符的字符数据从一个存储器位置复制到另一个存储器位置
CN104169869A (zh) * 2012-03-15 2014-11-26 国际商业机器公司 比较具有终止字符的字符数据集
CN104185839A (zh) * 2012-03-15 2014-12-03 国际商业机器公司 将数据载入直到动态确定的存储器边界的方法
CN104205067A (zh) * 2012-03-15 2014-12-10 国际商业机器公司 将数据载入直到由指令所指示的指定存储器边界的指令

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
ARM反编译中指令解码器的设计与实现;殷文建等;《计算机工程与设计》;20100916;全文 *

Also Published As

Publication number Publication date
DE112018001124T5 (de) 2019-11-21
GB2574567A (en) 2019-12-11
GB201914117D0 (en) 2019-11-13
JP7241689B2 (ja) 2023-03-17
GB2574567B (en) 2020-05-27
CN110352404A (zh) 2019-10-18
JP2020509493A (ja) 2020-03-26
US10564965B2 (en) 2020-02-18
US20180253301A1 (en) 2018-09-06
WO2018158663A1 (en) 2018-09-07

Similar Documents

Publication Publication Date Title
CN110352404B (zh) 通过基于内联解码的微操作扩展的比较字符串处理
US11138127B2 (en) Initializing a data structure for use in predicting table of contents pointer values
US10747532B2 (en) Selecting processing based on expected value of selected character
US10564967B2 (en) Move string processing via inline decode-based micro-operations expansion
US10789069B2 (en) Dynamically selecting version of instruction to be executed
US10725918B2 (en) Table of contents cache entry having a pointer for a range of addresses
US10255068B2 (en) Dynamically selecting a memory boundary to be used in performing operations
US10831457B2 (en) Code generation relating to providing table of contents pointer values
US11061576B2 (en) Read-only table of contents register
US10884930B2 (en) Set table of contents (TOC) register instruction
US10613862B2 (en) String sequence operations with arbitrary terminators
US10713050B2 (en) Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
KR102527963B1 (ko) 범용 프로세서를 위한 정렬 및 병합 명령
US10620956B2 (en) Search string processing via inline decode-based micro-operations expansion

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