CN101911015B - 通过处理器指令减少对计算机体系结构依赖性的方法及装置 - Google Patents
通过处理器指令减少对计算机体系结构依赖性的方法及装置 Download PDFInfo
- Publication number
- CN101911015B CN101911015B CN200980101991.XA CN200980101991A CN101911015B CN 101911015 B CN101911015 B CN 101911015B CN 200980101991 A CN200980101991 A CN 200980101991A CN 101911015 B CN101911015 B CN 101911015B
- Authority
- CN
- China
- Prior art keywords
- register
- operand
- instruction
- field
- selected portion
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/342—Extension of operand address space
Abstract
在操作计算机的方法中,取出并执行具有T位的旋转然后运算指令,其中,将第一寄存器中的第一操作数旋转一定量,并对旋转后第一操作数的所选部分和第二寄存器的第二操作数进行布尔运算。如果T位是‘0’,将布尔运算结果的所选部分插入第二寄存器的第二操作数的相应位中。如果T位是‘1’,除了插入的位之外,不同于经旋转的第一操作数的所选部分的其它位被保存在第二寄存器中。
Description
技术领域
本发明涉及计算机系统,尤其涉及计算机系统处理器指令功能。
背景技术
商标是国际商用机器公司(InternationalBusinessMachinesCorporation,Armonk,NewYork,U.S.A.)的注册商标。S/390、Z900和z990以及其它产品名称可能是国际商用机器公司或其它公司的注册商标或产品名称。
从20世纪60年代的称为系统360的机器开始直到现在,IBM已经开发出一种特殊体系结构,由于其对计算系统的本质特性,该特殊体系结构被称为“大型机(mainframe)”,其操作原理通过描述可以根据已经由IBM发明人员发明的指令的“大型机”实现执行的,并由于它们对改善“大型机”所代表的计算机器的状态的重要贡献,可以通过包括在如多年来所述的IBM的PrinciplesofOperation(操作原理)中,作为重要贡献采用的指令,阐述了机器的体系结构。2007年4月发布的z/ArchitecturePrinciplesofOperation的第六版作为SA22-7832-05已经成为标准发布参考文献,并且已并入IBM的大型机服务器中。这里通过引用全部并入发布序号为SA22-7832-05的IBMZ/ArchitecturePrinciplesofOperation。
参照图1A,其中描绘了现有技术主计算机系统50的代表性部件。在计算机系统中也可以应用部件的其它安排,它们在本领域是众所周知的。代表性主计算机50包括与主存(计算机存储器2)通信的一个或多个CPU1,以及与存储设备11和与其它计算机或SAN等通信的网络10的I/O接口。CPU1遵从具有结构化指令集和结构化功能的体系结构。CPU1可以具有将程序地址(虚地址)变换成存储器的实地址的动态地址转换器(DAT)3。DAT通常包括用于高速缓存这些转换、使得以后对计算机存储器2的块的访问不要求延迟地址转换的转换旁视缓冲器(TranslationLookasideBuffer,TLB)7。通常,将高速缓冲存储器9应用在计算机存储器2与处理器1之间。高速缓冲存储器9可以是分等级的,具有可用于多于一个CPU的大的高速缓冲存储器、和在大的高速缓冲存储器与每个CPU之间的更小更快的(低级)高速缓冲存储器。在一些实现方式中,低级高速缓冲存储器被分割以便提供独立的低级高速缓冲存储器来用于指令取出和数据访问。在一个实施例中,由指令取出单元4经由高速缓冲存储器9从存储器2中取出指令。在指令解码单元6中将指令解码,并调度(在一些实施例中,与其它指令一起)给指令执行单元8。通常,采用几个执行单元8,例如算术运算单元、浮点执行单元、和分支指令执行单元。指令被执行单元执行,如有需要,从指令规定的寄存器或存储器中访问操作数。如果要从存储器2访问(装载或存储)操作数,装载存储单元5通常在正被执行的指令的控制下管理访问。可以在硬件电路中或在内部微码(固件)中或通过两者的组合执行这些指令。
在图1B中,提供了现有技术仿真主计算机系统21的一个例子,它模仿了主体系结构的主计算机系统50。在仿真主计算机系统21中,主处理器(CPU)1是仿真主处理器(或虚拟主处理器),包括具有与主计算机50的处理器1不同的本机指令集体系结构的仿真处理器27。仿真主计算机系统21具有仿真处理器27可访问的存储器22。在示范性实施例中,存储器27被划分成主计算机存储器2的部分和仿真例程23的部分。按照主计算机体系结构,主计算机存储器2可用于仿真主计算机21的程序。仿真处理器27执行与仿真处理器1的体系结构不同的体系结构的结构化指令集的本机指令(该本机指令是从仿真例程存储器23中获取的),并可以通过应用在排序和访问/解码(Sequence&Access/Decode)例程中获得的一条或多条指令,从主计算机存储器2中的程序中访问要执行的主指令,排序和访问/解码例程可以解码受到访问以确定本机指令执行例程的主指令,以便模仿受到访问的主指令的功能。为主计算机系统50体系结构定义的其它工具可以通过结构化工具(ArchitectedFacilities)例程来仿真,包括像例如通用寄存器、控制寄存器、动态地址转换器和I/O子系统支持、和处理器高速缓冲存储器那样的工具。仿真例程也可以利用在仿真处理器27(诸如通用寄存器和虚地址的动态转换器)中可用的功能,以改善仿真例程的性能。也可以配备特殊硬件和卸载引擎,以帮助处理器27仿真主计算机50的功能。
在大型机中,编程人员,当前通常是“C”编程人员经常通过编译器应用程序使用结构化机器指令。这些存储在存储媒体中的指令可以在z/ArchitectureIBM服务器中本机执行,或可替代地,在执行其它体系结构的机器中执行。可以在现有的和将来的IBM大型机服务器中和在IBM的其它机器(例如,服务器和服务器)上模仿它们。可以在使用AMDTM、和SunMicrosystems等制造的硬件的多种机器上运行Linux的机器中执行它们。除了在Z/Architecture下的那种硬件上执行之外,也可以使用Linux,以及使用Hercules、UMX、FSI(FundamentalSoftware公司)或PlatformSolutions公司(PSI)的仿真的机器,其中,一般说来,在仿真模式下执行。在仿真模式下,本机处理器执行仿真软件,以模仿仿真处理器的体系结构。
本机处理器27通常执行包括固件或本机操作系统的仿真软件23,以便进行仿真处理器的仿真。仿真软件23负责取出和执行仿真处理器体系结构的指令。仿真软件23使仿真程序计数器持续跟踪指令边界。仿真软件23可以一次取出一条或多条仿真机器指令,并将一条或多条仿真机器指令转换成供本机处理器27执行的相应一组本机机器指令。可以高速缓存这些转换指令,以便可以完成较快转换。不管怎样,仿真软件必须遵守仿真处理器体系结构的体系结构规则,以便保证为仿真处理器编写的操作系统和应用程序正确工作。而且,仿真软件必须提供通过仿真处理器1的体系结构识别的资源,包括但不局限于控制寄存器、通用寄存器、浮点寄存器、包括例如段表和页表的动态地址转换功能、中断机制、上下文切换机制、当日时间(TOD)时钟和与I/O子系统的结构化接口,以便可以在具有仿真软件的本机处理器上运行设计成运行在仿真处理器上的操作系统或应用程序。
解码正受到模仿的特定指令,并调用子例程来执行各个指令的功能。模仿仿真处理器1的功能的仿真软件功能23在例如“C”例程或驱动器,或如在本领域技术人员在理解了优选实施例的描述之后所认识到的范围内的为特定硬件提供驱动器的一些其它方法中实现。各种软件和硬件仿真专利,包括但不局限于,US5551013:Beausoleil等人的有关“用于硬件仿真的多处理器”;US6009261:Scalzi等人的“在目标处理器上仿真不兼容指令的存储目标例程的预处理”;US5574873:Davidian等人的“解码客指令以直接访问仿真客指令的仿真例程”;US6308255:Gorishek等人的“用于允许在系统中运行非本机代码的协处理器支持的对称多处理总线和芯片集”;US6463582:Lethin等人的“用于体系结构仿真的动态优化目标代码转换器和动态优化目标代码转换方法”;和US5790825:EricTraut的“通过主指令的动态重新编译在主计算机上仿真客指令的方法”等,例示了为本领域技术人员可获得的目标机器实现为不同机器结构化的指令格式的仿真的多种已知方式,以及上面引用的那些专利使用的那些商用软件技术。
发明内容
取出并执行具有T位(Tbit)的旋转然后运算(rotatethenoperate)指令,其中,将第一寄存器中的第一操作数旋转一定量,并对旋转后的第一操作数的所选部分和第二寄存器的第二操作数进行布尔(Boolean)运算。如果T位是‘0’,将布尔运算结果的所选部分插入第二寄存器的第二操作数的相应位中,第二寄存器的其余(未被选择)位保持不变。设置指示结果中的所选位是否是零的条件码。如果T位是‘1’,不修改第二寄存器,只根据布尔运算结果的所选部分设置条件码。
本发明试图提供与现有体系结构相容的新指令功能,该新指令功能减弱对例如通用寄存器的体系结构资源的依赖性、改善应用新指令的软件版本的功能和性能。
附图说明
在本说明书结束处的权利要求书中具体指出和明确要求保护本发明所涉及的主题。从如下结合附图的详细描述中可明显看出本发明的上述和其它目标、特征、和优点,在附图中:
图1A是描绘现有技术的示范性主计算机系统的图形;
图1B是描绘现有技术的示范性仿真主计算机系统的图形;
图1C是描绘现有技术的示范性计算机系统的图形;
图2是描绘现有技术的示范性计算机网络的图形;
图3是描述现有技术的计算机系统的元件的图形;
图4A-4C描绘了现有技术的计算机系统的详细元件;
图5A-5F描绘了计算机系统的机器指令格式;
图6描述了按照本发明一个实施例的指令的示范性格式;
图7描述了按照本发明一个实施例的示范性中间字段(immediatefield);以及
图8描绘了本发明一个实施例的功能的示范性流程图。
具体实施方式
在一个实施例中,本发明可以通过软件(有时指许可内部码、固件、微码、毫码、皮码等,其中任何一种都与本发明相容)来实施。参照图1A,系统50的也称为CPU(中央处理单元)1的处理器通常从像CD-ROM驱动器、磁带驱动器或硬盘驱动器那样的永久存储媒体7中访问具体实施本发明的软件程序代码。软件程序代码可以具体实施在像软盘、硬盘驱动器或CD-ROM那样的供数据处理系统使用的多种已知媒体的任何一种上。代码可以分布在这样的媒体上,或可以从计算机存储器2分配给用户或在网络10上从一个计算机系统的存储设备分配给其它计算机系统,供这样的其它系统的用户使用。
可替代地,程序代码可以具体实施在存储器2中,由处理器1使用处理器总线来访问。这样的程序代码包括控制各种计算机部件的功能和交互的操作系统、和一个或多个应用程序。程序代码通常从高密存储媒体11逐页转换到适用于供处理器1处理的高速存储器2中。将软件程序代码具体实施在存储器中、物理媒体上、和/或经由网络分配软件代码的技术和方法是众所周知的,本文不作进一步讨论。当创建和存储在有形媒体(包括但不局限于,电子存储模块(RAM)、闪速存储器、光盘(CD)、DVD、磁带等)上时,程序代码往往被称为“计算机程序产品”。计算机程序产品通常可被最好在计算机系统中的处理电路读取,以便被该处理电路执行。
图1C例示了可以实施本发明的代表性工作站或服务器硬件系统。图1C的系统100包括像个人计算机、工作站或服务器那样的代表性计算机系统101,包括可选外围设备。工作站101包括一个或多个处理器106、和用于依照已知技术连接处理器106和系统101的其它部件并允许它们之间的通信的总线。总线将处理器106与存储器105和永久存储装置107连接,永久存储装置107可以包括例如硬盘驱动器(包括例如磁性媒体、CD、DVD和闪速存储器的任何一种)或磁带驱动器。系统101还可以包括用户接口适配器,用户接口适配器经由总线将微处理器106与像键盘104、鼠标103、打印机/扫描仪110和/或其它接口设备那样的一个或多个接口设备连接,其它接口设备可以是像触敏屏幕、数字输入板等那样的任何用户接口设备。总线还经由显示适配器将像LCD屏幕或监视器那样的显示设备102与微处理器106连接。
系统101可以通过能够与网络109通信(108)的网络适配器与其它计算机或计算机的网络通信。示范性网络适配器是通信信道、令牌环、以太网或调制解调器。可替代地,工作站101可以使用像CDPD(蜂窝式数字分组数据)卡那样的无线接口进行通信。工作站101可以与局域网(LAN)或广域网(WAN)中的这种其它计算机相关联,或工作站101可以是与另一台计算机的客户机/服务器结构中的客户机,等等。所有这些配置,以及适当通信硬件和软件,在技术上都是已知的。
图2例示了可以实施本发明的数据处理网络200。数据处理网络200可以包括像无线网络和有线网络那样的多个单独网络,其中每一个都可以包括多个单独工作站101,201,202,203,204。另外,本领域技术人员将理解,可以包括一个或多个LAN,其中每个LAN可以包括与主处理器耦合的多个智能工作站。
仍然参照图2,该网络还可以包括像网关计算机(客户端服务器206)或应用服务器(可以访问数据中心库并且也可以直接从工作站205访问的远程服务器208)的大型计算机或服务器。网关计算机206用作每个网络207的入口点。当将一种联网协议与另一种联网协议连接时需要网关。网关206最好可以通过通信链路与另一个网络(例如,因特网207)耦合。也可以使用通信链路直接将网关206与一个或多个工作站101,201,202,203,204耦合。网关计算机可以利用可从IBM公司获得的IBMeServerTM、服务器实现。
系统101的处理器106通常从像CD-ROM驱动器或硬盘驱动器那样的永久存储媒体107中访问具体实施本发明的软件编程代码。软件编程代码可以具体实施在像软盘、硬盘驱动器或CD-ROM那样的供数据处理系统使用的多种已知媒体的任何一种上。代码可以分布在这样的媒体上,或可以从存储器分配给用户210,211或在网络上从一个计算机系统的存储设备分配给其它计算机系统,供这样的其它系统的用户使用。
可替代地,编程代码111可以具体实施在存储器105中,由处理器106使用处理器总线来访问。这样的编程代码包括控制各种计算机部件的功能和交互的操作系统、和一个或多个应用程序112。程序代码通常从高密存储媒体107逐页转换到适用于供处理器106处理的高速存储器105中。将软件编程代码具体实施在存储器中、物理媒体上、和/或经由网络分配软件代码的技术和方法是众所周知的,本文不作进一步讨论。当创建和存储在有形媒体(包括但不局限于电子存储模块(RAM)、闪速存储器、光盘(CD)、DVD、磁带等)上时,程序代码往往被称为“计算机程序产品”。计算机程序产品通常可被最好在计算机系统中的处理电路读取,以便被该处理电路执行。
最容易用于处理器的高速缓冲存储器(通常比处理器的其它高速缓冲存储器更快并更小)是最低(L1或第一级)高速缓冲存储器,而主存(主存储器)是最高级高速缓冲存储器(如果有3级,则为L3)。最低级高速缓冲存储器常常划分成保存要执行的机器指令的指令高速缓冲存储器(I-高速缓冲存储器)和保存数据操作数的数据高速缓冲存储器(D-高速缓冲存储器)。
参照图3,其中为处理器106描绘了一个示范性处理器实施例。通常,将一个或多个级别的高速缓冲存储器303应用于缓冲存储块,以便改善处理器性能。高速缓冲存储器303是保存很可能被使用的存储器数据的高速缓存行的高速缓冲器。典型的高速缓存行是64,128或256个字节的存储器数据。常常将单独的高速缓冲存储器应用于高速缓存指令而不是高速缓存数据。高速缓存一致性(存储器与高速缓冲存储器中的行的副本的同步)往往通过在本领域众所周知的各种“窥探”算法来提供。处理器系统的主存105往往被称为高速缓冲存储器。在具有4个级别的高速缓冲存储器303的处理器系统中,主存105有时被称为第5级(L5)高速缓冲存储器,因为它通常较快,并且只保存可用于计算机系统的非易失性存储设备(DASD、磁带等)的一部分。主存105“高速缓存”通过操作系统逐页存入主存105中和从主存105取出的数据页。
程序计数器(指令计数器)311跟踪要执行的当前指令的地址。z/Architecture处理器中的程序计数器是64个位,并可以截成31或24个位,以支持现有寻址极限。程序计数器通常具体实施在计算机的PSW(程序状态字)中,以便在上下文切换期间持续下去。因此,具有程序计数器值的正在运行中的程序可以例如被操作系统中断(从程序环境上下文切换到操作系统环境)。程序的PSW在程序不活动的时候保持程序计数器值,而在操作系统正在执行的时候使用操作系统的程序计数器(在PSW中)。通常,使程序计数器递增等于当前指令的字节数的量。RISC(精简指令集计算)指令通常是固定长度,而CISC(复杂指令集计算)指令通常是可变长度。IBMz/Architecture的指令是具有2,4或6字节的长度的CISC指令。程序计数器311通过例如上下文切换操作或分支指令的分支采取操作来修改。在上下文切换操作中,将当前程序计数器值与有关正被执行的程序的其它状态信息(例如条件码)一起保存在程序状态字(PSW)中,并装载指向要执行的新程序模块的指令的新程序计数器值。执行分支采取操作以便通过将分支指令的结果装载到程序计数器311中来允许程序作出判定或在程序内循环。
通常,指令取出单元305被用来代表处理器106取出指令。取出单元取出“下面的顺序指令”,分支采取指令的目标指令,或在上下文切换之后的程序的第一指令。现代指令取出单元经常采用预取(prefetch)技术来根据可能使用预取的指令的可能性推测性地预取指令。例如,取出单元可以取出包括下一条顺序指令和进一步顺序指令的附加字节的16字节指令。
然后,由处理器106执行取出的指令。在一个实施例中,将取出的指令传递给取出单元的调度单元306。调度单元解码指令,并将有关解码的指令的信息转发给适当单元307,308,310。执行单元307通常从指令取出单元305接收有关解码的算术指令的信息,并按照指令的操作码对操作数进行算术运算。最好从存储器105、结构化寄存器309或从正在执行的指令的中间字段将操作数提供给执行单元307。执行结果,当被存储时,被存储在存储器105、寄存器309中或存储在其它机器硬件(例如控制寄存器、PSW寄存器等)中。
处理器106通常具有执行指令的功能的一个或多个执行单元307,308,310。参照图4A,执行单元307可以通过接口逻辑407与结构化通用寄存器309、解码/调度单元306、装载存储单元310和其它的处理器单元401通信。执行单元307可以采用几个寄存器电路403,404,405来保存算术逻辑单元(ALU)402将运算的信息。ALU进行诸如相加、相减、相乘和相除的算术运算,以及诸如与、或和异或(xor)的逻辑功能、旋转和移位。最好,ALU支持设计相关的专门运算。其它电路可以提供包括例如条件码和恢复支持逻辑的其它结构化工具409。通常,将ALU运算的结果保存在输出寄存器电路406中,输出寄存器电路406可以将结果转发给多种其它处理功能。存在处理器单元的许多种安排,本说明书只打算提供对一个实施例的代表性理解。
ADD指令将在例如具有算术和逻辑功能的执行单元307中执行,而浮点指令将在例如具有专门浮点能力的浮点执行单元中执行。最好,执行单元通过对操作数执行操作码定义的功能来对通过指令识别的操作数进行运算。例如,执行单元307可以对在由指令的寄存器字段识别的两个寄存器309中找到的操作数执行ADD指令。
执行单元307对两个操作数进行算术相加,并将结果存储在第三操作数中,其中第三操作数可以是第三寄存器或两个源寄存器之一。执行单元最好利用能够执行诸如移位、旋转、与、或和XOR的多种逻辑功能,以及包括相加、相减、相乘、相除的任何一种的多种代数功能的算术逻辑单元(ALU)402。一些ALU402是为标量运算设计的,而另一些是为浮点设计的。取决于体系结构,数据可以是大端(其中最低有效字节处在最高字节地址上)或小端(其中最低有效字节处在最低字节地址上)。IBMz/Architecture是大端方式。取决于体系结构,带符号字段可以是符号和幅度、1的补码或2的补码。2的补数的有利之处在于ALU无需设计相减能力,因为在2的补码中负值或正值只需在ALU内相加。数字通常以简写方式描述,其中12位字段定义4,096字节块的地址,通常描述成,例如,4KB(千字节)块。
参照图4B,通常将执行分支指令的分支指令信息发送给分支单元308,分支单元308经常采用像分支历史表432那样的分支预测算法,以便在其它条件操作完成之前预测分支的后果。当前分支指令的目标将在条件操作完成之前取出并推测性地执行。当条件操作完成时,根据条件操作的条件和推测的后果,完成或放弃推测性地执行的分支指令。典型分支指令可以测试条件码,如果条件码满足分支指令的分支要求,分支到目标地址,目标地址可以根据包括例如在指令的寄存器字段或中间字段中找到的数字的几个数字计算。分支单元308可以应用具有多个输入寄存器电路427,428,429和输出寄存器电路430的ALU426。分支单元308可以与例如通用寄存器309、解码调度单元306或其它电路425通信。
一组指令的执行可以因多种原因而中断,包括例如操作系统启动的上下文切换、引起上下文切换的程序例外或错误、引起上下文切换的I/O中断信号或多个程序的多线程活动(在多线程环境下)。最好,上下文切换动作保存有关当前正在执行的程序的状态信息,然后装载有关正在调用的另一个程序的状态信息。状态信息可以保存在例如硬件寄存器或存储器中。状态信息最好包括指向要执行的下一条指令的程序计数器值、条件码、存储器转换信息和结构化寄存器内容。上下文切换活动可以由单独或组合的硬件电路、应用程序、操作系统程序或固件代码(微码、皮码或许可内部码(LIC))实施。
处理器按照指令定义的方法访问操作数。指令可以使用指令的一部分的值提供中间操作数,可以提供明确地指向通用寄存器或专用寄存器(例如,浮点寄存器)的一个或多个寄存器字段。指令可以将由操作码字段识别的隐含寄存器用作操作数。指令可以利用操作数的存储位置(location)。操作数的存储位置可以由寄存器、中间字段、或寄存器和中间字段的组合来提供,像z/Architecture长位移工具所示范的那样,其中指令定义加在一起提供,例如,存储器中的操作数的地址的基址寄存器、变址寄存器和中间字段(位移字段)。除非另外指出,本文的位置通常意味着主存储器(主存)中的位置。
参照图4C,处理器使用装载/存储单元310访问存储设备。装载/存储单元310可以通过获取存储器303中的目标操作数的地址并将操作数装载在寄存器309或另一个存储器303位置中进行装载操作,或可以通过获取存储器303中的目标操作数的地址并将从寄存器309或另一个存储器303位置中获取的数据存储在存储器303中的目标操作数位置中进行存储操作。装载/存储单元310可以是推测性的,并且可以按相对于指令顺序失序(out-of-outer)的顺序访问存储器,但是,装载/存储单元310必须对程序保持依次执行指令的外观。装载/存储单元310可以与通用寄存器309、解码/调度单元306、高速缓冲存储器/存储器接口303或其它元件455通信,并包括各种寄存器电路、ALU458和控制逻辑463,以便计算存储地址和提供保持操作依次执行的流水线排序。一些操作可能是失序的,但如在本领域众所周知的那样,装载/存储单元提供使失序操作在程序看来是依次执行的功能。
优选地,应用程序“看到”的地址常常被称为“虚地址”。虚地址有时被称为“逻辑地址”和“有效地址”。这些虚地址是虚拟的,因为要通过多种动态地址转换器(DAT)312的技术之一将它们重定向到物理存储位置,这些技术包括但不局限于,简单地将偏移值加在虚地址的前头、经由一个或多个转换表转换虚地址,该转换表最好至少包括单独或组合的段表和页表,优选地,该段表具有指向页表的条目。在z/Architecture中,提供包括区域第一表、区域第二表、区域第三表、段表和可选页表的转换分层结构。地址转换的性能通常利用转换旁视缓冲器(TLB)来改善,该转换旁视缓冲器(TLB)包括将虚地址映射到相关物理存储位置的条目。该条目是在DAT312使用转换表转换虚地址的时候创建的。然后,对虚地址的随后使用可以利用快速TLB的条目,而不是慢速顺序转换表访问。TLB内容可以通过包括LRU(最近最少使用)的多种替换算法来管理。
在处理器是多处理器系统的处理器的情况下,每个处理器有责任使像I/O、高速缓冲存储器、TLB和存储器那样的共享资源保持互锁以便得到一致性。通常,在保持高速缓存一致性时会利用“窥探”技术。在窥探环境下,每个高速缓存行可以被标记为处在共享状态、排他状态、改变状态、和无效状态等的任何一种下,以便有助于共享。
I/O单元304向处理器提供附连在包括例如磁带、盘、打印机、显示器、和网络的外围设备上的手段。I/O单元往往通过软件驱动器提供给计算机程序。在像来自IBM的z/Series那样的大型机中,通道适配器和开放系统适配器是大型机的提供操作系统与外围设备之间的通信的I/O单元。
来自z/Architecture操作原理的如下描述将描述计算机系统的体系结构概况。
存储设备:
计算机系统包括主存中的信息,以及寻址、保护、和引用和变化记录。寻址的一些方面包括地址的格式、地址空间的概念、地址的各种类型以及将一种类型的地址转换成另一种类型的地址的方式。一些主存包括永久指定的存储位置。主存向系统提供数据的可直接寻址快速访问存储。数据和程序两者都必须在可以处理它们之前(从输入设备)装载到主存中。
主存可以包括有时叫做高速缓冲存储器的一个或多个更小、更快访问缓冲存储设备。高速缓冲存储器通常在物理上与CPU或I/O处理器相关联。物理结构除了性能方面之外的效果和不同存储媒体的使用一般是程序观察不到的。
可以为指令和为数据操作数保持单独的高速缓冲存储器。高速缓冲存储器内的信息以相连字节的形式保持在叫做高速缓存块或高速缓存行(或简称为行)的完整边界上。一种模型可以提供返回以字节为单位的高速缓存行大小的EXTRACTCACHEATTRIBUTE指令。一种模型还可以提供影响从存储设备到数据或指令高速缓冲存储器的预取、或数据从高速缓冲存储器中的释放的PREFETCHDATA和PREFETCHDATARELATIVELONG指令。
将存储设备看作水平长位串。对于大多数操作,对存储设备的访问按从左到右的顺序继续下去。将位串细分成八个位的单元。一个八位单元叫做一个字节,它是所有信息格式的基本构建块。存储设备中的每个字节位置通过唯一非负整数标识,该唯一非负整数是那个字节位置的地址,或简单地说,字节地址。相邻字节位置具有相继地址,从左边的0开始,按从左到右的顺序继续下去。地址是无符号二进制整数,具有24,31,或64个位。
一次一个字节或一组字节地在存储设备与CPU或通道子系统之间传输信息。除非另有规定,存储设备中的一组字节通过该组的最左边字节寻址。该组中字节的数量由要执行的操作暗示或明确规定。当用在CPU操作中时,将一组字节叫做一个字段。在每组字节内,按从左到右的顺序将位编号。最左边的位有时被称为“高阶”位,而最右边的位被称为“低阶”位。但是,位号码不是存储地址。只能寻址字节。为了对存储设备中的字节的各个位进行运算,必需访问整个字节。从左到右将字节中的位编号成0到7。地址中的位对于24位地址,可以编号成8-31或40-63,或对于31位地址可以编号成1-31或33-63;对于64位地址,将它们编号成0-63。在多个字节的任何其它固定长度格式内,从0开始对构成格式的位相继编号。为了检测错误,和优选地为了校正,可以与每个字节一起或与一组字节一起发送一个或多个校验位。这样的校验位由机器自动生成,而不能通过程序直接控制。存储容量用字节数表达。当通过指令的操作码暗示存储-操作数字段的长度时,认为字段具有固定长度,它可以是1、2、4、8或16个字节。对于一些指令,可以暗示更长的字段。当存储-操作数字段的长度不是被暗示,而是明确阐述时,认为字段具有可变长度。可变长度操作数在长度上可以按一个字节的增量变化。当将信息放置在存储设备中时,即使到存储设备的物理路径的宽度可能大于正在被存储的字段的长度,也只取代包括在指定字段中的那些字节位置的内容。
某些信息单元必须位于存储设备中的完整边界上。对于信息单元来说,当边界的存储地址是以字节为单位的单元长度的倍数时,它被视为是完整的。对完整边界上2,4,8和16个字节的字段给予特殊名称。半字(halfword)是两字节边界上的一组两个相继字节,并且是指令的基本构建块。字(word)是四字节边界上的一组四个相继字节。双字(doubleword)是八字节边界上的一组八个相继字节。四字(quadword)是16-字节边界上的一组16个相继字节。当存储地址指定半字、字、双字、和四字时,地址的二进制表示分别包括一个、二个、三个、或四个最右零位。指令必须在两字节完整边界上。大多数指令的存储操作数没有边界对齐要求。
在为指令和数据操作数实现单独的高速缓冲存储器的模型上,与存储设备是否改变了随后取出的指令无关,如果程序存储到随后从中取出指令的高速缓存行中,可能经历严重延迟。
指令:
通常,CPU的操作受存储设备中按存储地址的升序依次、每次一条、从左到右执行的指令控制。顺序操作的改变可能由分支、LOADPSW、中断、SIGNALPROCESSOR命令、或人工介入引起。
最好,指令包括两个主要部分:
·操作码(opcode),规定要进行的操作;和
·可选地,对参与的操作数的指定。
z/Architecture的指令格式显示在图5A-5F中。指令可以简单地提供操作码501,或操作码和包括中间操作数或定位寄存器或存储器中的操作数的寄存器说明符的多种字段。操作码可以向硬件指示要使用像一个或多个特定通用寄存器(GPR)那样的隐含资源(操作数等)。操作数可以按三个类别分组:位于寄存器中的操作数、中间操作数、和存储设备中的操作数。操作数可以明确或隐含指定。寄存器操作数可以位于通用、浮点、访问、或控制寄存器中,寄存器的类型由操作码来标识。包括操作数的寄存器通过用指令中叫做R字段的四位字段标识寄存器来规定。对于一些指令,操作数位于隐含指定寄存器中,该寄存器通过操作码来暗示。中间操作数包括在指令内,包括中间操作数的8位、16位或32位字段叫做I字段。存储设备中的操作数可以具有隐含长度;通过位掩码来规定;通过叫做L字段的四位或八位长度规范来规定;或具有通过通用寄存器的内容规定的长度。存储设备中的操作数的地址通过将通用寄存器的内容用作地址的一部分的格式来规定。这使得可以:
使用缩写记号来规定完整地址;
使用将通用寄存器应用于操作数的指令来执行地址操作;
通过程序手段修改地址而无需变更指令流;以及
直接使用从其它程序接收的地址来进行与数据区的位置无关的操作。
用于引用存储设备的地址包括在由指令中的R字段指定的寄存器中,或从指令中分别由B、X、和D字段规定的基址、变址、和位移中计算出来。当CPU处在访问寄存器模式下时,除了用于规定地址之外,B或R字段可以指定访问寄存器。为了描述指令的执行,最好将操作数指定成第一和第二操作数,在一些情况下,指定成第三和第四操作数。一般说来,两个操作数参与到指令执行中,其结果取代第一操作数。
指令在长度上是一个、两个或三个半字,并且必须位于存储设备中半字边界上。参照描绘指令格式的图5A-5F,每个指令为25种基本格式之一:E501、I502、RI503504、RIE505551552553554、RIL506507、RIS555、RR510、RRE511、RRF512513514、RRS、RS516517、RSI520、RSL521、RSY522523、RX524、RXE525、RXF526、RXY527、S530、SI531、SIL556、SIY532、SS533534535536537、SSE541和SSF542,还存在RRF的三种变体,RI、RIL、RS、和RSY的两种变体,和RIE和SS的五种变体。
一般地说,格式名指参与操作的操作数的类别和有关字段的一些细节:
·RIS表示寄存器-和-中间操作和存储设备操作。
·RRS表示寄存器-和-寄存器操作、和存储设备操作。
·RIL表示具有16位中间字段的寄存器-和-中间操作。
在I、RR、RS、RSI、RX、SI、和SS格式中,指令的第一个字节包括操作码。在E、RRE、RRF、S、SIL、和SSE格式中,指令的前两个字节包括操作码,除了对于S格式中的一些指令来说操作码只处在第一字节中。在RI和RIL格式中,操作码处在指令的第一字节和位位置(bitposition)12-15中。在RIE、RIS、RRS、RSL、RSY、RXE、RXF、RXY、和SIY格式中,操作码处在指令的第一字节和第六字节中。操作码的第一或唯一字节的前两个位按如下规定指令的长度和格式:
在RR、RRE、RRF、RRR、RX、RXE、RXF、RXY、RS、RSY、RSI、RI、RIE、和RIL格式中,由R1字段指定的寄存器的内容叫做第一操作数。包括第一操作数的寄存器有时被称为“第一操作数位置”,并且有时被称为“寄存器R1”。在RR、RRE、RRF、和RRR格式中,R2字段指定包括第二操作数的寄存器,并且R2字段可以指定与R1相同的寄存器。在RRF、RXF、RS、RSY、RSI、和RIE格式中,R3字段的使用取决于指令。而在RS和RSY格式中,R3字段可以为规定掩码的M3字段。R字段指定一般指令中的通用或访问寄存器、控制指令中的通用寄存器、和浮点指令中的浮点寄存器或通用寄存器。对于通用和控制寄存器,取决于指令,寄存器操作数处在64位寄存器的位位置32-63中或占据整个寄存器。
在I格式中,指令的八位中间数据字段,即,I字段的内容直接用作操作数。在SI格式中,指令的八位中间数据字段,即,I2字段的内容直接用作第二操作数。B1和D1字段规定长度是一个字节的第一操作数。在SIY格式中,操作数是相同的,除了使用DH1和DL1字段而不是D1字段之外。在用于指令ADDHALFWORDIMMEDIATE、COMPAREHALFWORDIMMEDIATE、LOADHALFWORDIMMEDIATE、和MULTIPLYHALFWORDIMMEDIATE的RI格式中,指令的16位I2字段的内容直接用作带符号二进制整数,而取决于指令,R1字段规定长度是32位或64位的第一操作数。对于指令TESTUNDERMASK(TMHH、TMHL、TMLH、TMLL),I2字段的内容用作掩码,而R1字段规定长度是64位的第一操作数。
对于指令INSERTIMMEDIATE、ANDIMMEDIATE、ORIMME-DIATE、和LOADLOGICALIMMEDIATE,I2字段的内容用作无符号二进制整数或逻辑值,而R1字段规定长度是64位的第一操作数。对于在RI和RSI格式中的相对分支指令,16位I2字段的内容用作指定半字的数量的带符号二进制整数。当加到分支指令的地址上时,这个数量规定分支地址。对于在RIL格式中的相对分支指令,I2字段是32位,并以相同方式使用。
对于在RI和RSI格式下的相对分支指令,16位I2字段的内容用作指定半字的数量的带符号二进制整数。当加到分支指令的地址上时,这个数量规定分支地址。对于在RIL格式下的相对分支指令,I2字段是32位,并以相同方式使用。对于RIE-格式指令COMPAREIMMEDIATEANDBRANCHRELATIVE和COMPARELOGICALIMMEDIATEANDBRANCHRELATIVE,8位I2字段的内容直接用作第二操作数。对于RIE-格式指令COMPAREIMMEDIATEANDBRANCH、COMPAREIMMEDIATEANDTRAP、COMPARELOGICALIMMEDIATEANDBRANCH、和COMPARELOGICALIMMEDIATEANDTRAP,16位I2字段的内容直接用作第二操作数。对于RIE-格式指令COMPAREANDBRANCHRELATIVE、COMPAREIMMEDIATEANDBRANCHRELATIVE、COMPARELOGICALANDBRANCHRELATIVE、和COMPARELOGICALIMMEDIATEANDBRANCHRELATIVE,16位I4字段的内容用作指定加到指令的地址上以形成分支地址的半字的数量的带符号二进制整数。
对于RIL-格式指令ADDIMMEDIATE、ADDLOGICALIMMEDIATE、ADDLOGICALWITHSIGNEDIMMEDIATE、COMPAREIMME-DIATE、COMPARELOGICALIMMEDIATE、LOADIMMEDIATE、和MULTIPLYSINGLEIMMEDIATE,32位I2字段的内容直接用作第二操作数。
对于RIS-格式指令,8位I2字段的内容直接用作第二操作数。在SIL格式下,16位I2字段的内容直接用作第二操作数。如下所述,B1和D1字段规定第一操作数。
在RSL、SI、SIL、SSE、和大多数SS格式下,将由B1字段指定的通用寄存器的内容加到D1字段的内容上以形成第一操作数地址。在RS、RSY、S、SIY、SS、和SSE格式下,将由B2字段指定的通用寄存器的内容加到D2字段或DH2和DL2字段的内容上以形成第二操作数地址。在RX、RXE、RXF、和RXY格式下,将由X2和B2字段指定的通用寄存器的内容加到D2字段或DH2和DL2字段的内容上以形成第二操作数地址。在RIS和RRS格式下,和在一种SS格式下,将由B4字段指定的通用寄存器的内容加到D4字段的内容上以形成第四操作数地址。
在具有单个8位长度字段的SS格式中,对于指令AND(NC)、EXCLUSIVEOR(XC)、MOVE(MVC)、MOVENUMERICS、MOVEZONES、和OR(OC),L规定在由第一操作数地址指定的字节的右边的附加操作数字节的数量。因此,第一操作数的以字节为单位的长度是1-256,对应于0-255的L中的长度代码。存储结果取代第一操作数,而不会存储在由该地址和长度规定的字段之外。在这种格式下,第二操作数具有与第一操作数相同的长度。存在应用于EDIT、EDITANDMARK、PACKASCII、PACKUNICODE、TRANSLATE、TRANSLATEANDTEST、UNPACKASCII、和UNPACKUNICODE的前面定义的变体。
在具有两个长度字段的SS格式下,和在RSL格式下,L1规定在由第一操作数地址指定的字节的右边的附加操作数字节的数量。因此,第一操作数的以字节为单位的长度是1-16,对应于0-15的L1中的长度代码。类似地,L2规定在由第二操作数地址指定的位置的右边的附加操作数字节的数量。所得结果取代第一操作数,而不会存储在由该地址和长度规定的字段之外。如果第一操作数比第二操作数长,在左边用零扩展第二操作数直到第一操作数的长度。这种扩展不修改存储设备中的第二操作数。在具有两个R字段的SS格式下,如MOVETOPRIMARY、MOVETOSECONDARY、和MOVEWITHKEY指令所使用的那样,由R1字段规定的通用寄存器的内容是叫做实长的32位无符号值。两个操作数都具有叫做有效长度的长度。有效长度等于实长或256,取两者之较小者。指令将条件码设置成有助于将循环编程为移动由实长规定的字节总数。具有两个R字段的SS格式也用于为LOADMULTIPLEDISJOINT指令规定寄存器的范围和两个存储操作数,和为PERFORMLOCKEDOPERATION指令规定一个或两个寄存器和一个或两个存储操作数。
B1、B2、X2或B4字段的任何一个中的零指示缺乏相应地址成分。对于缺乏的成分,不管通用寄存器0的内容如何,将零用于通知中间和中。零位移没有特别意义。
当前PSW的位31和32是寻址模式位。位31是扩展寻址模式位,而位32是基本寻址模式位。这些位控制通过地址生成产生的有效地址的大小。当当前PSW的位31和32两者都是零时,CPU处在24位寻址模式下,生成24位指令和操作数有效地址。当当前PSW的位31是零而位32是一时,CPU处于31位寻址模式,并且生成31位指令和操作数有效地址。当当前PSW的位31和32均为一时,CPU处在64位寻址模式下,生成64位指令和操作数有效地址。CPU执行指令牵涉到生成指令和操作数的地址。
当从由当前PSW指定的位置中取出指令时,将指令地址增加指令中的字节的数量,并执行指令。然后使用指令地址的新值重复相同步骤,以取出序列中的下一个指令。在24位寻址模式下,指令地址环绕,位于指令地址0上的半字接在位于指令地址224-2上的半字后面。因此,在24位寻址模式下,作为更新指令地址的结果,PSW位位置104的任何进行输出丢失。在31位或64位寻址模式下,指令地址类似地环绕,位于指令地址0上的半字分别接在位于指令地址231-2或264-2上的半字后面。分别是PSW位位置97或64的进位输出丢失。
引用存储设备的操作数地址从中间值中导出,中间值包括在由指令中的R字段指定的寄存器中,或从如下三个二进制数之和中计算出来:基址、变址、和位移。基址(B)是包括在程序用指令中叫做B字段的4位字段指定的通用寄存器中的64位数。基址可以用作独立寻址每个程序和数据区的手段。在阵列型计算中,它可以指定阵列的位置,而在记录型处理中,它可以标识记录。基址为寻址整个存储设备提供了保证。基址还可以用于变址。
变址(X)是包括在程序用指令中叫做X字段的4位字段指定的通用寄存器中的64位数。它只包括在通过RX-、RXE-、和RXY-格式指令指定的地址中。RX-、RXE-、RXF-和RXY-格式指令允许双重变址;也就是说,变址可以用于提供阵列内的元素的地址。
位移(D)是包括在指令中叫做D字段的字段中的12位或20位数。12位的位移是无符号的,并且允许由基址指定的位置之外的最多达4,095个字节的相对寻址。20位的位移是带符号的,并且允许基址位置之外的最多达524,287个字节的相对寻址或者其之前的最多达524,288个字节的相对寻址。在阵列型计算中,位移可以用于规定与一个元素相关联的许多项目中的一个。在记录的处理中,位移可以用于标识记录内的项目。12位的位移处在某些格式的指令的位位置20-31中。在一些格式的指令中,第二个12位的位移也处在该指令中,但处在位位置36-47中。
20位的位移只处在RSY、RXY或SIY格式的指令中。在这些指令中,D字段由位位置20-31中的DL(低)字段和位位置32-39中的DH(高)字段组成。当安装了长位移工具时,位移的数值通过将DH字段的内容附在DL字段的内容的左侧上形成。当未安装长位移工具时,位移的数值通过将八个零位附在DL字段的内容的左侧上形成,忽略DH字段的内容。
在形成中间和时,将基址和变址当作64位二进制整数来对待。将12位的位移当作12位无符号二进制整数来对待,并将52个零位附在左侧。将20位的位移当作20位带符号二进制整数来对待,并将等于符号位的44个位附在左侧。将这三个数相加成64位二进制数,忽略溢出。该和总是64位长,并用作中间值来形成所生成的地址。将中间值的位编号成0-63。B1、B2、X2或B4字段任何一个中的零指示缺乏相应地址成分。对于缺乏的成分,不管通用寄存器0的内容如何,将零用于形成中间和。零位移没有特别意义。
当指令描述规定由R字段指定的通用寄存器的内容被用于寻址存储设备中的操作数时,将寄存器内容用作64位中间值。
指令可以指定相同通用寄存器用于地址计算和作为操作数的位置。地址计算在通过操作改变寄存器(如果有的话)之前完成。除非在单个的指令定义中另外指出,生成的操作数地址指定存储设备中操作数的最左边字节。
生成的操作数地址总是64位长,这些位被编号成0-63。从中间值中获取所生成的地址的方式取决于当前寻址模式。在24位寻址模式下,忽略中间值的位0-39,强迫所生成的地址的位0-39为零,并且中间值的位40-63变成所生成地址的位40-63。在31位寻址模式下,忽略中间值的位0-32,强迫所生成地址的位0-32为零,并且中间值的位33-63变成所生成地址的位33-63。在64位寻址模式下,使中间值的位0-63变成所生成地址的位0-63。负值可以用在变址和基址寄存器中。在31位寻址模式下忽略这些值的位0-32,而在24位寻址模式下忽略位0-39。
对于分支指令,进行分支时要执行的下一条指令的地址叫做分支地址。取决于分支指令,指令格式可以是RR、RRE、RX、RXY、RS、RSY、RSI、RI、RIE、或RIL。在RS、RSY、RX、和RXY格式下,分支地址通过基址、位移规定,而在RX和RXY格式下,通过变址规定。在这些格式下,中间值的生成遵循与操作数地址中间值的生成相同的规则。在RR和RRE格式下,由R2字段指定的通用寄存器的内容用作形成分支地址的中间值。通用寄存器0不能被指定成包括分支地址。R2字段中的零值使指令无分支地执行。
相对分支指令具有RSI、RI、RIE、和RIL格式。在用于相对分支指令的RSI、RI、和RIE格式下,将I2字段的内容当作指定半字数量的16位带符号二进制整数来对待。在RIL格式下,将I2字段的内容当作指定半字数量的32位带符号二进制整数来对待。分支地址是将I2字段指定的半字数量与相对分支指令的地址相加的结果。
在RSI、RI、RIE、或RIL格式下的相对分支指令的64位中间值是两个加数之和,忽略从位位置0的溢出。在RSI、RI、或RIE格式下,第一加数是I2字段的内容加上附在右侧的一个零位和附在左侧的等于内容的符号位的47个位,除了对于COMPAREANDBRANCHRELATIVE、COMPAREIMMEDIATEANDBRANCHRELATIVE、COMPARELOGICALANDBRANCHRELATIVE和COMPARELOGICALIMMEDIATEANDBRANCHRELATIVE,第一加数是I4字段的内容,加上如上面针对I2字段所述那样附上的位。在RIL格式下,第一加数是I2字段的内容加上附在右侧的一个零位和附在左侧的等于内容的符号位的31个位。在所有格式下,第二加数是分支指令的64位地址。分支指令的地址是PSW中被更新用来寻址下一个顺序指令之前的指令地址,或如果使用EXECUTE,它是EXECUTE指令的目标的地址。如果在24位或31位寻址模式下使用EXECUTE,分支指令的地址是分别将40或33个零附在左侧的目标地址。
分支地址总是64位长,这些位被编号为0-63。分支地址取代当前PSW的位64-127。从中间值中获取分支地址的方式取决于寻址模式。对于改变寻址模式的那些分支指令,使用新寻址模式。在24位寻址模式下,忽略中间值的位0-39,使分支地址的位0-39为0,并且中间值的位40-63变成分支地址的位40-63。在31位寻址模式下,忽略中间值的位0-32,使分支地址的位0-32为0,并且中间值的位33-63变成分支地址的位40-63。在64位寻址模式下,使中间值的位0-63变成分支地址的位0-63。
对于几条分支指令,分支取决于满足规定条件。当条件未得到满足时,不进行分支,继续执行正常顺序指令,并且不使用分支地址。当进行分支时,分支地址的位0-63取代当前PSW的位64-127。分支地址不被用于作为分支操作的一部分来访问存储设备。由异常分支地址引起的规定例外和由在分支位置上取出指令引起的访问例外不被认为是分支操作的一部分,而被认为是与在分支位置上执行指令相关联的例外。
像BRANCHANDSAVE那样的分支指令可以指定相同通用寄存器用于分支地址计算和作为操作数的位置。分支地址计算在进行其余操作之前完成。
在第4章“控制”中所述的程序状态字(PSW)包括适当执行程序所需的信息。PSW用于控制指令排序,以及保存和指示与当前正在执行的程序相关的CPU的状态。活动或正在进行控制的PSW被叫做当前PSW。分支指令执行做出判定、循环控制、和子例程链接的功能。分支指令通过将新指令地址引入当前PSW中来影响指令排序。具有16位I2字段的相对分支指令允许不使用基址寄存器而分支到相对于分支指令的位置偏移了最多达+64K-2个字节或-64K个字节的位置。具有32位I2字段的相对分支指令允许不使用基址寄存器而分支到相对于分支指令的位置偏移了最多达+4G-2个字节或-4G个字节的位置。
用于做出判定的工具由BRANCHONCONDITION、BRANCHRELATIVEONCONDITION、和BRANCHRELATIVEONCONDITIONLONG提供。这些指令检查反映大多数算术运算、逻辑运算、和I/O操作的结果的条件码。由两个位组成的条件码提供四种可能条件码设置:0,1,2,和4。
任何设置的特定含义取决于设置条件码的操作。例如,条件码反映诸如零、非零、第一操作数大、相等、溢出、和子通道忙的条件。一旦设置,条件码就保持不变,直到被引起设置不同条件码的指令修改。
循环控制可以使用BRANCHONCONDITION、BRANCHRELATIVEONCONDITION、和BRANCHRELATIVEONCONDITIONLONG来进行,以测试地址算术运算和计数操作的后果。对于算术运算和测试的一些特别频繁的组合,提供BRANCHONCOUNT、BRANCHONINDEXHIGH、和BRANCHONINDEXLOWOREQUAL,并且还提供这些指令的相对分支等效物。这些分支,当被专门化时,提高了这些任务的性能。
当不需要改变寻址模式时,子例程链接通过BRANCHANDLINK和BRANCHANDSAVE指令来提供(这种对BRANCHANDSAVE的讨论也可以应用于BRANCHRELATIVEANDSAVE和BRANCHRELATIVEANDSAVELONG)。这些指令均不仅允许引入新指令地址,而且允许保存返回地址和相关信息。返回地址是存储设备中接在分支指令之后的指令的地址,除了返回地址是接在具有作为其目标的分支指令的EXECUTE指令之后的指令的地址。
BRANCHANDLINK和BRANCHANDSAVE两者都具有R1字段。它们通过取决于指令的字段形成分支地址。将指令的操作总结如下:在24位寻址模式下,两条指令都将返回地址放置在通用寄存器R1的位位置40-63中,并且使该寄存器的位0-31保持不变。BRANCHANDLINK将该指令的指令长度代码以及来自当前PSW的条件码和程序掩码放置在通用寄存器R1的位位置32-39中。BRANCHANDSAVE将零放置在那些位位置中。
·在31位寻址模式下,两条指令都将返回地址放置在通用寄存器R1的位位置33-63并将一放置在位位置32中,并且使该寄存器的位0-31保持不变。
·在64位寻址模式下,两条指令都将返回地址放置在通用寄存器R1的位位置0-63中。
在任何寻址模式下,两条指令都在当前寻址模式的控制下生成分支地址。这些指令将分支地址的位0-63放置在PSW的位位置64-127中。在RR格式下,如果指令的R2字段为零,则两条指令都不进行分支。
可以看出,在24位或31位寻址模式下,BRANCHANDSAVE将基本寻址模式位,即PSW的位32放置在通用寄存器R1的位位置32中。在31位寻址模式下,BRANCHANDLINK这样做。指令BRANCHANDSAVEANDSETMODE和BRANCHANDSETMODE用在在链接期间要求改变寻址模式的时候。这些指令具有R1和R2字段。将这些指令的操作总结如下:
·BRANCHANDSAVEANDSETMODE与BRANCHANDSAVE相同地设置通用寄存器R1的内容。另外,该指令将扩展寻址模式位,即,PSW的位31放置在该寄存器的位位置63中。
·如果R1非零,BRANCHANDSETMODE按如下执行。在24位或31位寻址模式下,它将PSW的位32放置在通用寄存器R1的位位置32中,使该寄存器的位0-31和33-63保持不变。注意,如果寄存器包括指令地址,寄存器的位63应该是零。在64位寻址模式下,该指令将PSW的位31(一)放置在通用寄存器R1的位位置63中,使该寄存器的位0-62保持不变。
·当R2非零时,两个指令都设置寻址模式,并按如下进行分支。将通用寄存器R2的位63放置在PSW的位位置31中。如果位63是零,将该寄存器的位32放置在PSW的位位置32中。如果位63是一,将PSW的位32设置成一。然后,在新寻址模式的控制下,除了将寄存器的位63当作零来对待之外,从寄存器的内容中生成分支地址。该指令将分支地址的位0-63放置在PSW的位位置64-127中。通用寄存器R2的位63保持不变,因此,一旦进入到调用程序时可以是一。如果R2与R1相同,所指定通用寄存器中的结果如为R1寄存器规定的那样。
中断(上下文切换):
作为配置外、配置内、或CPU本身内的条件的结果,中断机制允许CPU改变它的状态。为了允许对高优先级的条件的快速响应和对条件类型的立即识别,将中断条件分组成六个类别:外部、输入/输出、机器校验、程序、重新开始、和监督例程调用。
中断在于将当前PSW存储成旧PSW,存储标识中断原因的信息,并取出新PSW。处理如新PSW所规定的那样恢复。因中断而存储的旧PSW通常包括如果未发生中断则接着要执行的指令的地址,因此允许恢复中断程序。对于程序和监督例程调用中断,存储的信息还包括标识最后执行指令的长度的代码,因此允许程序对中断的原因做出响应。在正常响应是重新执行引起中断的指令的一些程序条件的情况下,指令地址直接标识最后执行的指令。
除了重新开始之外,中断只能发生在CPU处在工作状态下的时候。重新开始中断可以发生在CPU处在停止状态或工作状态下。
将任何访问例外识别成执行与例外相关联的指令的一部分。当CPU试图从不可用位置预取或检测一些其它访问例外条件时,不识别访问例外,但分支指令或中断改变指令顺序,以便不执行指令。由于指令取出,每条指令可以使访问例外被识别出来。另外,与指令执行相关联的访问中断可能因访问存储设备中的操作数而发生。当没有遇到例外而不能取出第一指令半字时,指示由取出指令引起的访问例外。当指令的第一半字不具有访问例外时,可以按照由指令的前两个位规定的指令长度为附加半字指示访问例外;但是,当可以不访问指令的第二或第三半字而进行操作时,是否为未使用部分指示访问例外是无法预料的。
除了在单个的指令描述中另外指出之外,如下的规则应用于与访问操作数位置相关联的例外。对于取出型操作数,只对操作数的完成操作所需的那个部分必须指示访问例外。是否为取出型操作数的并非完成操作所需的那些部分指示访问例外是无法预料的。
对于存储型操作数,即使不使用操作数的不可访问部分也能完成操作,也为整个操作数识别访问例外。在存储型操作数的值被定义成无法预料的状况下,是否指示访问例外是无法预料的。每当对操作数位置的访问可能使访问例外被识别出来时,使词语“access”包括在指令的描述中程序例外的列表中。这个条目还指示哪个操作数可以使例外被识别出来,和根据对那个操作数位置的取出访问还是存储访问来识别例外。只对操作数的为每个特定指令定义的部分识别访问例外。
当CPU试图执行带有无效操作码的指令时,识别出操作例外。该操作码可能未被指定,或者带有该操作码的指令可能未被安装在CPU上。操作被抑制。指令长度代码是1,2,或3。操作例外通过0001(十六进制)(或如果指示同时发生PER事件,0081十六进制)的程序中断码来指示。
一些模型可能提供未描述在本公开文本中的指令,例如为了辅助或作为特定或定制特征的一部分而提供的那些指令。因此,未描述在本公开文本中的操作码不一定使操作例外被识别出来。而且,这些指令可以使操作模式被建立,要不然可能改变机器以便影响随后指令的执行。为了避免引起这样的操作,应该只有当希望与操作码相关联的特定功能时才执行带有未描述在本公开文本中的操作码的指令。
当如下的任何一条为真时,识别出规定例外:
1.将一引入PSW的未指定的位位置(即,位位置0,2-4,24-30,或33-63的任何一个)中。将此作为早期PSW规定例外来管理。
2.将一引入PSW的位位置12中。将此作为早期PSW规定例外来管理。
3.PSW在如下方式的任何一种中无效:a.PSW的位31是一而位32是零;b.PSW的位31和32是零,指示24位寻址模式,而PSW的位64-103非全零;和c.PSW的位31是零而位32是一,指示31位寻址模式,并且PSW的位64-96非全零。将此作为早期PSW规定例外来管理。
4.PSW包括奇指令地址。
5.操作数地址在要求指定完整边界的指令中未指定这样的完整边界。
6.奇数通用寄存器被要求指定偶数寄存器的指令的R字段指定。
7.为扩展操作数指定了除0,1,4,5,8,9,12或13之外的其它浮点寄存器。
8.十进制算术中的乘数或除数超过15位并带符号。
9.在十进制乘法或除法中第一操作数字段的长度小于或等于第二操作数字段的长度。
10.试图执行CIPHERMESSAGE、CIPHERMESSAGEWITHCHAINING、COMPUTEINTERMEDIATEMESSAGEDIGEST、COMPUTELASTMESSAGEDIGEST或COMPUTEMESSAGEAUTHENTICATIONCODE,以及通用寄存器0的位57-63中的功能码包括未指定或未安装功能码。
11.试图执行CIPHERMESSAGE或CIPHERMESSAGEWITHCHAINING,以及R1或R2字段指定奇数寄存器或通用寄存器0。
12.试图执行CIPHERMESSAGE、CIPHERMESSAGEWITHCHAINING、COMPUTEINTERMEDIATEMESSAGEDIGEST或COMPUTEMESSAGEAUTHENTICATIONCODE,以及第二操作数长度不是指定功能的数据块大小的倍数。这种规定例外条件不适用于查询功能。
13.试图执行COMPAREANDFORMCODEWORD,以及通用寄存器1,2和3最初未包括偶数值。
32.试图执行COMPAREANDSWAPANDSTORE,以及存在如下条件的任何一条:
·功能码规定了未指定值;
·存储特性规定了未指定值;
·功能码是0,以及在字边界上未指定第一操作数;
·功能码是1,以及在双字边界上未指定第一操作数;和
·在与存储值的大小相对应的完整边界上未指定第二操作数。
33.试图执行COMPARELOGICALLONGUNICODE或MOVELONGUNICODE,以及通用寄存器R1+1或R3+1的内容未规定偶数个字节。
34.试图执行COMPARELOGICALSTRING、MOVESTRING或SEARCHSTRING,以及通用寄存器0的位32-55非全零。
35.试图执行COMPRESSIONCALL,以及通用寄存器0的位48-51具有二进制值0000和0110-1111的任何一个。
36.试图执行COMPUTEINTERMEDIATEMESSAGEDIGEST、COMPUTELASTMESSAGEDIGEST、或COMPUTEMESSAGEAUTHENTICATIONCODE,以及如下的任何一条为真:
·R2字段指定奇数寄存器或通用寄存器0;和
·通用寄存器0的位56非零。
37.试图执行CONVERTHFPTOBFP、CONVERTTOFIXED(BFP或HFP)、或LOADFPINTEGER(BFP),以及M3字段未指定有效修改符。
38.试图执行DIVIDETOINTEGER,以及M4字段未指定有效修改符。
39.试图执行EXECUTE,以及目标地址是奇数。
40.试图执行EXTRACTSTACKEDSTATE,以及通用寄存器R2的位位置56-63中的代码在未安装ASN-and-LX-reuse工具时大于4,而在安装该工具时大于5。
41.试图执行FINDLEFTMOSTONE,以及R1字段指定奇数寄存器。
42.试图执行INVALIDATEDATTABLEENTRY,以及通用寄存器R2的位44-51非全零。
43.试图执行LOADFPC,以及与FPC寄存器中的未受支持位相对应的第二操作数的一个或多个位是一。
44.试图执行LOADPAGE-TABLE-ENTRYADDRESS,以及指令的M4字段包括除了二进制0000-1010之外的任何值。
45.试图执行LOADPSW,以及第二操作数地址中的双字的位12是零。这是依赖于是否识别这种例外的模型。
46.试图执行MONITORCALL,以及指令的位位置8-11不包括零。
47.试图执行MOVEPAGE,以及通用寄存器0的位位置48-51不包括零或该寄存器的位52和53两者都是一。
48.试图执行PACKASCII,以及L2字段大于31。
49.试图执行PACKUNICODE,以及L2字段大于63或是偶数。
50.试图执行PERFORMFLOATINGPOINTOPERATION,通用寄存器0的位32是零,以及位33-63中的一个或多个字段无效或指定了未安装的功能。
51.试图执行PERFORMLOCKEDOPERATION,以及如下的任何一条为真:·T位,即,通用寄存器0的位55是零,以及该寄存器的位56-63中的功能码无效;·通用寄存器0的位32-54非全零;·在访问寄存器模式下,对于使包括ALET的参数列表得到使用的功能码,R3字段是零。
52.试图执行PERFORMTIMINGFACILITYFUNCTION,以及如下的任何一条为真:·通用寄存器0的位56非零;·通用寄存器0的位57-63规定了未指定或未安装的功能码。
53.试图执行PROGRAMTRANSFER或PROGRAMTRANSFERWITHINSTANCE,以及如下的所有为真:·PSW中的扩展寻址模式位是零;·在由指令的R2字段指定的通用寄存器中,基本寻址模式位,即位32是零;·同一寄存器中指令地址的位33-39非全零。
54.试图执行RESUMEPROGRAM,以及如下的任何一条为真:
·第二操作数中的PSW字段的位31、32、和64-127不适合放置在当前PSW中。如果如下的任何一条为真,识别出例外:位31和32两者都是零以及位64-103非全零;位31和32分别是零和一,以及位64-96非全零;位31和32分别是一和零;位127是一;以及
·参数列表的位0-12非全零。
55.试图执行SEARCHSTRINGUNICODE,以及通用寄存器0的位32-47非全零。
56.试图执行SETADDRESSSPACECONTROL或SETADDRESSSPACECONTROLFAST,以及第二操作数地址的位52和53非全零。
57.试图执行SETADDRESSINGMODE(SAM24),以及PSW中未更新指令地址的位0-39、和该PSW的位64-103非全零。
58.试图执行SETADDRESSINGMODE(SAM31),以及PSW中未更新指令地址的位0-32、和该PSW的位64-96非全零。
59.试图执行SETCLOCKPROGRAMMABLEFIELD,以及通用寄存器0的位32-47非全零。
60.试图执行SETFPC,以及与FPC寄存器中的未受支持位相对应的第一操作数的一个或多个位是一。
61.试图执行STORESYSTEMINFORMATION,通用寄存器0中的功能码有效,以及如下的任何一条为真:·通用寄存器0的位36-55和通用寄存器1的位32-47非全零;·第二操作数地址在4K字节边界上未对齐。
62.试图执行TRANSLATETWOTOONE或TRANSLATETWOTOTWO,以及通用寄存器R1+1中的长度未规定偶数个字节。
63.试图执行UNPACKASCII,以及L1字段大于31。
64.试图执行UNPACKUNICODE,以及L2字段大于63或是偶数。
65.试图执行UPDATETREE,以及通用寄存器4和5的初始内容在24位或31位寻址模式下不是8的倍数,或在64位寻址模式下不是16的倍数。通过旧PSW标识的指令的执行受到抑制。但是,对于早期PSW规定例外(原因1-3),完成引入新PSW的操作,但此后马上发生中断。最好,指令长度代码(ILC)是1,2或3,指示引起例外的指令的长度。当指令地址是奇数时(在第6-33页上,原因4),ILC是1,2还是3是无法预料的。当由于早期PSW规定例外(原因1-3)而识别出例外,并且该例外由LOADPSW、LOADPSWEXTENDED、PROGRAMRETURN、或中断引入时,ILC是0。当该例外由SETADDRESSINGMODE(SAM24,SAM31)引入时,ILC是1,或如果SETADDRESSINGMODE是EXECUTE的目标,它是2。当该例外由SETSYSTEMMASK或由STORETHENORSYSTEMMASK引入时,ILC是2。
程序中断用于报告在程序执行期间发生的例外和事件。程序中断使旧PSW存储在实位置336-351上,并使新PSW从实位置464-479被取出。中断的原因通过中断码标识。将中断码放置在实位置142-143上,将指令长度代码放置在实位置141上的字节的位位置5和6上,将其余位设置成零,并将这些零存储在实位置140上。对于一些原因,将标识中断原因的附加信息存储在实位置144-183上。如果安装了PER-3工具,那么,作为程序中断动作的一部分,将中断事件地址寄存器的内容放置在实存储位置272-279上。除了PER事件和秘密操作例外之外,引起中断的条件通过放置在中断码的最右边七个位的位置中的编码值指示。一次只能指示一个条件。将中断码的位0-7设置成零。PER事件通过将中断码的位8设置成一来指示。当这是唯一条件时,位0-7和9-15也被设置成零。当与另一个程序中断条件同时指示PER事件时,位8是一,位0-7和9-15针对其它条件来设置。秘密操作例外通过0119hex(或如果也指示PER事件,通过0199hex)的中断码来指示。
当存在相应屏蔽位时,只有当屏蔽位是一时才能发生程序中断。PSW中的程序掩码控制四种例外,FPC寄存器的IEEE掩码控制IEEE例外,控制寄存器0中的位33控制SETSYSTEMMASK是否引起特殊操作例外,控制寄存器8中的位48-63控制由监视事件引起的中断,以及一个体系的掩码控制由PER事件引起的中断。当任何控制屏蔽位是零时,忽略条件;条件不保持挂起。
当用于程序中断的新PSW具有PSW格式错误或在指令取出的过程中使例外被识别出来时,可能出现一连串程序中断。
被指示成程序例外的一些条件也可以通过通道子系统来识别,在该情况下,在子通道状态字或扩展状态字中指示例外。
当数据例外引起程序中断时,将数据例外代码(DXC)存储在位置147上,并将零存储在位置144-146上。DXC区分各种类型的数据例外条件。当AFP寄存器(附加浮点寄存器)控制位,即,控制寄存器0的位45是一时,也将DXC放置在浮点控制(FPC)寄存器的DXC字段中。当报告任何其它程序例外时,FPC寄存器的DXC字段保持不变。DXC是指示数据例外的特定原因的8位代码。
DXC2和3相互排斥,并具有比任何其它DXC更高的优先级。因此,例如,DXC2(BFP指令)优先于任何IEEE例外;而DXC3(DFP指令)优先于任何IEEE例外或仿真IEEE例外。作为另一个例子,如果存在有关DXC3(DFP指令)和DXC1(AFP寄存器)这两者的条件,报告DXC3。当规定例外和AFP寄存器数据例外两者都适用时,报告哪一个是无法预料的。
当CPU试图引用在配置中不可用的主存位置时,识别出寻址例外。当主存位置未被设置时,当存储单元未在配置中时,或当存储单元断电时,该位置在该配置中不可用。指定在配置中不可用的存储位置的地址被认为是无效的。当指令的地址无效时,抑制该操作。类似地,当EXECUTE的目标指令的地址无效时,抑制该操作。此外,当在访问表格或表格项目期间遇到寻址例外时,抑制操作的单元。规则应用的表格和表格项目是可调度单元控制表、基本ASN第二表项目、和访问列表、区域第一表、区域第二表、区域第三表、段表、页表、链接表、链接第一表、链接第二表、项目表、ANS第一表、ASN第二表、授权表、链接堆栈、和跟踪表中的项目。在动态地址转换的隐含引用和与LOADPAGE-TABLE-ENTRYADDRESS、LOADREALADDRESS、STOREREALADDRESS、和TESTPROTECTION的执行相联系的引用两者中,当引用区域第一表、区域第二表、区域第三表、段表、和页表遇到寻址例外时,它们将导致抑制。类似地,当在隐含地或作为LOADPAGE-TABLE-ENTRYADDRESS、LOADREALADDRESS、STOREREALADDRESS、TESTACCESS、或TESTPROTECTION的一部分进行的访问寄存器转换中遇到它们时,访问可调度单元控制表、基本ASN第二表项目、访问列表、ASN第二表、或授权表的寻址例外将导致抑制。除了执行受到抑制的一些特定指令之外,对于可以转换但指定不可用位置的操作数地址,终止操作。对于终止,可能只有结果字段发生变化。在这种背景下,术语“结果字段”包括条件码、寄存器、和被提供和指定成通过指令改变的任何存储位置。
参照图8,当取出(801)并执行包括旋转然后异或(XOR)所选位指令602、旋转然后或(OR)所选位指令603或旋转然后与(AND)所选位指令601的旋转然后运算指令(图6)的任何一条时,将第二操作数(从由指令的R2字段规定的寄存器802中获取(803))向左旋转在第五操作数I5,即,包括旋转量的中间字段(图7)701中规定的位数。从操作数的最左边的位位置移出的每个位重新进入操作数的最右边的位位置中。取决于指令,将经旋转的第二操作数的所选位(805)与第一操作数的相应位进行逻辑AND运算,XOR运算,或OR运算(806),如果T位是0(807),则逻辑运算的结果取代第一操作数的所选位(808)。如果T位是1,则不改变第一操作数。结果用条件码指示。第二操作数在通用寄存器R2中保持不变。
I3字段的位2-7(指令的位18-23)(701)包括规定第一操作数中和旋转之后的第二操作数中所选位范围的开始位的位置的无符号二进制整数。
I4字段的位2-7(指令的位26-31)(701)包括规定所选位范围的结束位的位置(包括在其中)的无符号二进制整数。当结束位的位置小于开始位的位置时,位范围从位63环绕到位0。I5字段的位2-7(指令的位34-39)包括规定第二操作数向左旋转的位数的无符号二进制整数。
I3字段的位0(指令的位16)(701)包括测试结果控制(T)。当T位是零时,逻辑运算的结果取代第一操作数的所选位,而第一操作数的其余位不变。当T位是一时,整个第一操作数都不变。
与T位的设置无关,根据逻辑运算的结果设置条件码。只将所选位范围用于确定条件码。
图7示出了刚才所述的指令的中间字段。
I3字段的位1和I4字段的位0-1(指令的位17和位24-25)被保留,应该包括零;否则,程序将来可能无法兼容地工作。忽略I5字段的位0-1(指令的位32-33)。
作为执行旋转然后运算指令的结果,将条件码设置如下:
0所选位为零
1所选位为非零
如果未安装一般指令扩展工具,则发出运算程序例外信号。
尽管I5字段的位2-7被定义成包括规定第二操作数向左旋转的位数的无符号二进制整数,但也可以编码有效规定向右旋量的负值。
在汇编语言语法中,包括旋转量的I5操作数被认为是可选的。当未对I5字段编码时,则暗示旋转量为零。
下例例示了ROTATETHENEXCLUSIVEORSELECTEDBITS的使用,以确定一页的存储保护关键字的访问控制位是否与PSW中的关键字匹配。在本例中,只设置了条件码;结果未放置在第一操作数寄存器中。
LAY9,BLOCK指向存储块;
IVSK14,9将关键字插入位56-63中;
EPSW4,0提取PSW关键字(位40-43);
RXSBG4,14,128+40,43,16比较关键字。
一旦完成,如果PSW关键字与通过通用寄存器9寻址的页的存储关键字中的访问控制位匹配,将把条件码设置成零。如果关键字不匹配,将设置条件码1。
下例例示了ROTATETHENORSELECTEDBITS的使用,以旋转和组合通用寄存器6和8的所选位。
LG6,=X′004C487040CF4600′
LG8,=X′C07FAF37FC968280′
ROSBG6,8,8,54,32
一旦完成,设置条件码1,以及通用寄存器6如下:
GR6:00DECAF0C0FFEE00
注意,只对寄存器的位8-54进行OR运算;不修改通用寄存器6的位0-7和55-63。
上文可用于理解一个计算机系统实施例的术语和结构。本发明不局限于z/Architecture或本文提供的描述。本发明可以根据本文的教导有利地应用于其它计算机制造者的其它计算机体系结构。
虽然本文已经对本发明的优选实施例进行了例示和描述,但应该明白,本发明不局限于本文所述的确切结构,而是有权涵盖在如所附权利要求书限定的本发明范围内的所有改变和修改。
Claims (12)
1.一种用于操作计算机的方法,包括:
取出程序中的旋转然后运算指令,所述旋转然后运算指令是为计算机体系结构定义的,所述旋转然后运算指令包括操作码字段、第一寄存器字段(R2)、第二寄存器字段(R1)、和T位,其中,所述第一寄存器字段规定多个通用寄存器之一,其中所述第二寄存器字段规定多个通用寄存器之一;
执行所述旋转然后运算指令,包括:
从由所述第一寄存器字段规定的第一寄存器中获取第一操作数;
将所述第一操作数旋转一定旋转量以产生经旋转的值,其中,所述旋转有效地将位向更高阶位置移动,并且有效地将位从高阶位位置移出到低阶位位置中;
选择经旋转的值的一部分;
从由所述第二寄存器字段规定的第二寄存器中获取第二操作数;
对所选部分和所述第二操作数的相应位执行布尔运算,产生与所选部分相对应的结果,所述布尔运算由所述旋转然后运算指令规定;
响应于所述T位为零,将所述结果保存在所述第二寄存器中的所述第二操作数的第二操作数部分中,并继续到下一条指令以便执行,所述第二操作数部分对应于所选部分的位位置,其中,所述保存操作在所述第二寄存器中不改变除了所述第二操作数部分之外的所述第二寄存器的所有其它位;以及
设置指示所述结果中的所选部分的位是否是零的条件码。
2.按照权利要求1所述的方法,其中,所述旋转然后运算指令进一步包括第一中间字段(I3)、第二中间字段(I4)和第三中间字段(I5),所述第一中间字段(I3)包括指示要选择的部分的开始位位置的第一值,所述第二中间字段(I4)包括指示要选择的部分的结束位位置的第二值,以及所述第三中间字段(I5)具有所述旋转量,所述方法包括:
使用所述第一值和第二值来选择所述经旋转的值的所述部分;
响应于所述经旋转的值的所选部分为零,设置指示所述经旋转的值的所选部分为零的条件码;以及
响应于所述经旋转的值的所选部分不为零,设置指示所述经旋转的值的所选部分不为零的条件码。
3.按照权利要求2所述的方法,包括响应于所述T位为1,所述执行不改变所述第二寄存器的所述第二操作数。
4.按照权利要求3所述的方法,其中,所述操作码包括第一操作码部分和第二操作码部分,所述第二操作码部分规定包括如下的布尔运算:
响应于所述第二操作码部分规定OR,对所选部分和所述第二操作数的相应位进行OR运算;
响应于所述第二操作码部分规定AND,对所选部分和所述第二操作数的相应位进行AND运算;以及
响应于所述第二操作码部分规定异或(XOR),对所选部分和所述第二操作数的相应位进行XOR运算。
5.按照权利要求4所述的方法,其中,所述旋转然后运算指令由位0-47组成,其中所述第一操作码部分由位0-7组成,而所述第二操作码部分由位40-47组成。
6.按照权利要求5所述的方法,其中,所述第一寄存器字段由位8-11组成,所述第二寄存器字段由位12-15组成,所述T位是位16,所述第一中间字段由位17-23组成,所述第二中间字段由位24-31组成,所述旋转量由位34-39组成。
7.一种用于操作计算机的系统,包括:
用于取出程序中的旋转然后运算指令的装置,所述旋转然后运算指令是为计算机体系结构定义的,所述旋转然后运算指令包括操作码字段、第一寄存器字段(R2)、第二寄存器字段(R1)、和T位,其中,所述第一寄存器字段规定多个通用寄存器之一,其中所述第二寄存器字段规定多个通用寄存器之一;
用于执行所述旋转然后运算指令的装置,用于:
从由所述第一寄存器字段规定的第一寄存器中获取第一操作数;
将所述第一操作数旋转一定旋转量以产生经旋转的值,其中,所述旋转有效地将位向更高阶位置移动,并且有效地将位从高阶位位置移出到低阶位位置中;
选择经旋转的值的一部分;
从由所述第二寄存器字段规定的第二寄存器中获取第二操作数;
对所选部分和所述第二操作数的相应位执行布尔运算,产生与所选部分相对应的结果,所述布尔运算由所述旋转然后运算指令规定;
响应于所述T位为零,将所述结果保存在所述第二寄存器中的所述第二操作数的第二操作数部分中,并继续到下一条指令以便执行,所述第二操作数部分对应于所选部分的位位置,其中,所述保存操作在所述第二寄存器中不改变除了所述第二操作数部分之外的所述第二寄存器的所有其它位;以及
用于设置指示所述结果中的所选部分的位是否是零的条件码的装置。
8.按照权利要求7所述的系统,其中,所述旋转然后运算指令进一步包括第一中间字段(I3)、第二中间字段(I4)和第三中间字段(I5),所述第一中间字段(I3)包括指示要选择的部分的开始位位置的第一值,所述第二中间字段(I4)包括指示要选择的部分的结束位位置的第二值,以及所述第三中间字段(I5)具有所述旋转量,所述用于执行所述旋转然后运算指令的装置进一步用于:
使用所述第一值和第二值来选择所述经旋转的值的所述部分;
响应于所述经旋转的值的所选部分为零,设置指示所述经旋转的值的所选部分为零的条件码;以及
响应于所述经旋转的值的所选部分不为零,设置指示所述经旋转的值的所选部分不为零的条件码。
9.按照权利要求8所述的系统,所述用于执行所述旋转然后运算指令的装置进一步用于响应于所述T位为1,所述执行不改变所述第二寄存器的所述第二操作数。
10.按照权利要求9所述的系统,其中,所述操作码包括第一操作码部分和第二操作码部分,所述第二操作码部分规定包括如下的布尔运算:
响应于所述第二操作码部分规定OR,对所选部分和所述第二操作数的相应位进行OR运算;
响应于所述第二操作码部分规定AND,对所选部分和所述第二操作数的相应位进行AND运算;以及
响应于所述第二操作码部分规定异或(XOR),对所选部分和所述第二操作数的相应位进行XOR运算。
11.按照权利要求10所述的系统,其中,所述旋转然后运算指令由位0-47组成,其中所述第一操作码部分由位0-7组成,而所述第二操作码部分由位40-47组成。
12.按照权利要求11所述的系统,其中,所述第一寄存器字段由位8-11组成,所述第二寄存器字段由位12-15组成,所述T位是位16,所述第一中间字段由位17-23组成,所述第二中间字段由位24-31组成,所述旋转量由位34-39组成。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/972,679 | 2008-01-11 | ||
US11/972,679 US7895419B2 (en) | 2008-01-11 | 2008-01-11 | Rotate then operate on selected bits facility and instructions therefore |
PCT/EP2009/050109 WO2009087162A2 (en) | 2008-01-11 | 2009-01-07 | Rotate then operate on selected bits facility and instructions therefore |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101911015A CN101911015A (zh) | 2010-12-08 |
CN101911015B true CN101911015B (zh) | 2016-01-20 |
Family
ID=40561736
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980101991.XA Active CN101911015B (zh) | 2008-01-11 | 2009-01-07 | 通过处理器指令减少对计算机体系结构依赖性的方法及装置 |
Country Status (6)
Country | Link |
---|---|
US (3) | US7895419B2 (zh) |
EP (1) | EP2243076A2 (zh) |
JP (1) | JP5357181B2 (zh) |
KR (1) | KR101231556B1 (zh) |
CN (1) | CN101911015B (zh) |
WO (1) | WO2009087162A2 (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7895419B2 (en) * | 2008-01-11 | 2011-02-22 | International Business Machines Corporation | Rotate then operate on selected bits facility and instructions therefore |
US9026424B1 (en) * | 2008-10-27 | 2015-05-05 | Juniper Networks, Inc. | Emulation of multiple instruction sets |
US8473567B2 (en) * | 2010-03-29 | 2013-06-25 | Intel Corporation | Generating a packet including multiple operation codes |
US9361109B2 (en) * | 2010-05-24 | 2016-06-07 | Qualcomm Incorporated | System and method to evaluate a data value as an instruction |
GB2485774A (en) * | 2010-11-23 | 2012-05-30 | Advanced Risc Mach Ltd | Processor instruction to extract a bit field from one operand and insert it into another with an option to sign or zero extend the field |
US8683261B2 (en) * | 2011-07-20 | 2014-03-25 | International Business Machines Corporation | Out of order millicode control operation |
WO2013101232A1 (en) | 2011-12-30 | 2013-07-04 | Intel Corporation | Packed rotate processors, methods, systems, and instructions |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
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 |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9128698B2 (en) * | 2012-09-28 | 2015-09-08 | Intel Corporation | Systems, apparatuses, and methods for performing rotate and XOR in response to a single instruction |
US8874933B2 (en) * | 2012-09-28 | 2014-10-28 | Intel Corporation | Instruction set for SHA1 round processing on 128-bit data paths |
US8953785B2 (en) * | 2012-09-28 | 2015-02-10 | Intel Corporation | Instruction set for SKEIN256 SHA3 algorithm on a 128-bit processor |
US9665368B2 (en) * | 2012-09-28 | 2017-05-30 | Intel Corporation | Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register |
US20150052330A1 (en) * | 2013-08-14 | 2015-02-19 | Qualcomm Incorporated | Vector arithmetic reduction |
US20150186137A1 (en) * | 2013-12-27 | 2015-07-02 | Tal Uliel | Systems, apparatuses, and methods for vector bit test |
US9639671B2 (en) * | 2014-05-27 | 2017-05-02 | Assured Information Security, Inc. | Secure execution of encrypted program instructions |
US9317719B2 (en) * | 2014-09-04 | 2016-04-19 | Intel Corporation | SM3 hash algorithm acceleration processors, methods, systems, and instructions |
CN105522826B (zh) * | 2014-10-16 | 2017-06-23 | 珠海艾派克微电子有限公司 | 校验值产生方法、耗材芯片和包括该耗材芯片的耗材盒 |
GB2573121B (en) * | 2018-04-24 | 2020-09-30 | Subsea 7 Norway As | Injecting fluid into a hydrocarbon production line or processing system |
EP3874364A4 (en) * | 2018-10-29 | 2022-08-03 | Cryptography Research, Inc. | TIME CONSTANT SAFE CONVERSION FROM ARITHMETIC TO BOOLEAN MASK |
CN112905528A (zh) * | 2021-02-09 | 2021-06-04 | 深圳市众芯诺科技有限公司 | 基于物联网的智能家居芯片 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1226324A (zh) * | 1996-09-23 | 1999-08-18 | Arm有限公司 | 数据处理系统寄存器控制 |
Family Cites Families (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3825895A (en) | 1973-05-14 | 1974-07-23 | Amdahl Corp | Operand comparator |
US3982229A (en) * | 1975-01-08 | 1976-09-21 | Bell Telephone Laboratories, Incorporated | Combinational logic arrangement |
US4713750A (en) | 1983-03-31 | 1987-12-15 | Fairchild Camera & Instrument Corporation | Microprocessor with compact mapped programmable logic array |
US4569016A (en) * | 1983-06-30 | 1986-02-04 | International Business Machines Corporation | Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system |
US4578750A (en) | 1983-08-24 | 1986-03-25 | Amdahl Corporation | Code determination using half-adder based operand comparator |
US4785393A (en) | 1984-07-09 | 1988-11-15 | Advanced Micro Devices, Inc. | 32-Bit extended function arithmetic-logic unit on a single chip |
US5113523A (en) | 1985-05-06 | 1992-05-12 | Ncube Corporation | High performance computer system |
JPS6382513A (ja) | 1986-09-26 | 1988-04-13 | Toshiba Corp | バレルシフタ |
US5859994A (en) | 1992-08-10 | 1999-01-12 | Intel Corporation | Apparatus and method for modifying instruction length decoding in a computer processor |
WO1994027215A1 (en) | 1993-05-07 | 1994-11-24 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
US6067613A (en) | 1993-11-30 | 2000-05-23 | Texas Instruments Incorporated | Rotation register for orthogonal data transformation |
US5487159A (en) * | 1993-12-23 | 1996-01-23 | Unisys Corporation | System for processing shift, mask, and merge operations in one instruction |
US5781457A (en) * | 1994-03-08 | 1998-07-14 | Exponential Technology, Inc. | Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU |
US5751614A (en) * | 1994-03-08 | 1998-05-12 | Exponential Technology, Inc. | Sign-extension merge/mask, rotate/shift, and boolean operations executed in a vectored mux on an ALU |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
US5748950A (en) | 1994-09-20 | 1998-05-05 | Intel Corporation | Method and apparatus for providing an optimized compare-and-branch instruction |
EP0730220A3 (en) | 1995-03-03 | 1997-01-08 | Hal Computer Systems Inc | Method and device for quickly executing branch instructions |
US5732242A (en) | 1995-03-24 | 1998-03-24 | Silicon Graphics, Inc. | Consistently specifying way destinations through prefetching hints |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
US5822606A (en) * | 1996-01-11 | 1998-10-13 | Morton; Steven G. | DSP having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word |
GB2317469B (en) | 1996-09-23 | 2001-02-21 | Advanced Risc Mach Ltd | Data processing system register control |
JP3790607B2 (ja) | 1997-06-16 | 2006-06-28 | 松下電器産業株式会社 | Vliwプロセッサ |
US6223256B1 (en) | 1997-07-22 | 2001-04-24 | Hewlett-Packard Company | Computer cache memory with classes and dynamic selection of replacement algorithms |
US6263420B1 (en) * | 1997-09-17 | 2001-07-17 | Sony Corporation | Digital signal processor particularly suited for decoding digital audio |
US6112293A (en) | 1997-11-17 | 2000-08-29 | Advanced Micro Devices, Inc. | Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6446197B1 (en) | 1999-10-01 | 2002-09-03 | Hitachi, Ltd. | Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions |
US6763327B1 (en) | 2000-02-17 | 2004-07-13 | Tensilica, Inc. | Abstraction of configurable processor functionality for operating systems portability |
US6738895B1 (en) | 2000-08-31 | 2004-05-18 | Micron Technology, Inc. | Method and system for substantially registerless processing |
US20030037085A1 (en) | 2001-08-20 | 2003-02-20 | Sandbote Sam B. | Field processing unit |
US7165101B2 (en) | 2001-12-03 | 2007-01-16 | Sun Microsystems, Inc. | Transparent optimization of network traffic in distributed systems |
US7493480B2 (en) | 2002-07-18 | 2009-02-17 | International Business Machines Corporation | Method and apparatus for prefetching branch history information |
US8335810B2 (en) | 2006-01-31 | 2012-12-18 | Qualcomm Incorporated | Register-based shifts for a unidirectional rotator |
US20090182982A1 (en) | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Rotate Then Insert Selected Bits Facility and Instructions Therefore |
US7895419B2 (en) * | 2008-01-11 | 2011-02-22 | International Business Machines Corporation | Rotate then operate on selected bits facility and instructions therefore |
-
2008
- 2008-01-11 US US11/972,679 patent/US7895419B2/en active Active
-
2009
- 2009-01-07 KR KR1020107015044A patent/KR101231556B1/ko active IP Right Grant
- 2009-01-07 WO PCT/EP2009/050109 patent/WO2009087162A2/en active Application Filing
- 2009-01-07 JP JP2010541776A patent/JP5357181B2/ja active Active
- 2009-01-07 EP EP20090701244 patent/EP2243076A2/en not_active Ceased
- 2009-01-07 CN CN200980101991.XA patent/CN101911015B/zh active Active
-
2010
- 2010-07-21 US US12/840,707 patent/US8838943B2/en active Active
-
2014
- 2014-09-12 US US14/484,323 patent/US9135004B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1226324A (zh) * | 1996-09-23 | 1999-08-18 | Arm有限公司 | 数据处理系统寄存器控制 |
Also Published As
Publication number | Publication date |
---|---|
US20100299506A1 (en) | 2010-11-25 |
CN101911015A (zh) | 2010-12-08 |
KR20100113076A (ko) | 2010-10-20 |
US20150006860A1 (en) | 2015-01-01 |
EP2243076A2 (en) | 2010-10-27 |
JP2011509476A (ja) | 2011-03-24 |
US8838943B2 (en) | 2014-09-16 |
US9135004B2 (en) | 2015-09-15 |
US7895419B2 (en) | 2011-02-22 |
WO2009087162A2 (en) | 2009-07-16 |
KR101231556B1 (ko) | 2013-02-08 |
US20090182981A1 (en) | 2009-07-16 |
WO2009087162A3 (en) | 2009-09-24 |
JP5357181B2 (ja) | 2013-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101911015B (zh) | 通过处理器指令减少对计算机体系结构依赖性的方法及装置 | |
CN102754069B (zh) | 用于处理加载/存储分离指令的方法和系统 | |
CN101911013B (zh) | 计算机系统和操作计算机的方法 | |
US9250904B2 (en) | Modify and execute sequential instruction facility and instructions therefor | |
US10963391B2 (en) | Extract target cache attribute facility and instruction therefor | |
RU2562430C2 (ru) | Увеличение числа доступных для команд регистров общего назначения | |
WO2009087158A2 (en) | Compare and branch facility and instruction therefore | |
JP2011509475A5 (zh) | ||
US20090182988A1 (en) | Compare Relative Long Facility and Instructions Therefore | |
CN101911016B (zh) | 计算机系统和操作计算机的方法 | |
US20090182985A1 (en) | Move Facility and Instructions Therefore | |
KR20100106436A (ko) | 선택된 비트를 회전 후 삽입하는 기능 및 그 기능을 위한 명령어 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |