CN102077195A - 具有紧凑指令集架构的微处理器 - Google Patents
具有紧凑指令集架构的微处理器 Download PDFInfo
- Publication number
- CN102077195A CN102077195A CN200980124104.0A CN200980124104A CN102077195A CN 102077195 A CN102077195 A CN 102077195A CN 200980124104 A CN200980124104 A CN 200980124104A CN 102077195 A CN102077195 A CN 102077195A
- Authority
- CN
- China
- Prior art keywords
- instruction
- isa
- address
- bit
- register
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims description 27
- 238000003860 storage Methods 0.000 claims description 26
- 238000006073 displacement reaction Methods 0.000 claims description 5
- 238000002120 advanced silicon etching Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 61
- 230000008569 process Effects 0.000 description 21
- 238000013519 translation Methods 0.000 description 10
- 230000006399 behavior Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000007667 floating Methods 0.000 description 6
- 238000007726 management method Methods 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 2
- 238000013404 process transfer Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- 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/3001—Arithmetic instructions
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- 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/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- 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
-
- 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/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- 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/3017—Runtime instruction translation, e.g. macros
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
-
- 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/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Abstract
一种重新编码的指令集架构(ISA)提供了较小位宽的指令或者较小和较大位宽的指令的组合,以提高指令执行效率和减小代码足印。该ISA可以从具有较大位宽的指令的传统ISA重新编码而得到,并且可以用于统一一个或更多个ISA扩展(诸如,应用专用ASE)。重新编码的ISA维持与从其得到该重新编码的ISA的ISA的汇编级兼容性。此外,重新编码的ISA可以具有新的和不同类型的另外的指令。
Description
相关申请的交叉引用
本专利申请要求在2008年5月8日提交的题为“Compact Instruction Set Architecture”的美国临时专利申请No.61/051,642的优先权,其整体内容通过引用合并于此。
技术领域
本发明的实施例通常涉及微处理器。更具体地,本发明的实施例涉及微处理器的指令集架构。
背景技术
存在对经济的、高性能的微处理器的扩大的需要,特别是对于诸如微控制器应用的深嵌入式应用。结果,微处理器的客户需要能够快速地和有效地集成到产品中的高效的解决方案。此外,设计人员和微处理器的客户持续要求更低的功耗,并且近来关注于环境友好的微处理器支持的装置。
一种用于实现这些要求的方法是将现有的指令集(在这里也称为指令集架构(ISA))修改为具有较小的“代码足印”(code footprint)的新指令集。较小的代码足印通常转换为每个执行的任务的较低的功耗。较小的指令大小还可以导致更高的性能。关于该提高的效率的一个原因在于用于取出较小的指令的需要较低数量的存储器访问。通过使新ISA基于从具有较大位宽的ISA得到的较小位宽的指令和较大位宽的指令的组合,可以得到另外的益处。
发明内容
本发明的实施例涉及对将与微处理器一同使用的指令集架构重新编码,以及由此得到的新指令。根据一实施例,较大位宽的指令集被重新编码为较小位宽的指令集或者具有较小位宽的指令和较大位宽的指令的组合的指令集。在实施例中,较小位宽的指令集保持与从中得到该较小位宽的指令集的较大位宽的指令集的汇编级兼容性,并且添加具有不同类型的指令。此外,新的较小位宽的指令集或者组合的较小和较大位宽的指令集较之从其重新编码得到该较小位宽的指令集的较大位宽的指令集,可以是更高效的并且具有更高的性能。
在一实施例中,若干个新的较小位宽的指令被添加到该新指令集,包括:紧凑的等于零情况下的分支(Compact Branch on Equal to Zero,BEQZC)、紧凑的不等于零情况下的分支(Compact Branch on not Equal to Zero,BNEZC)、跳转和链接交换(Jump and Link Exchange,JALX)、紧凑的跳转寄存器(Compact Jump Register,JRC)、加载寄存器对(Load Register Pair,LRP)、加载多个字(Load Word Multiple,LWM)、存储寄存器对(Store Register Pair,SRP)和存储多个字(Store Word Multiple,SWM)。
附图说明
参照附图描述本发明的实施例。在附图中,相同的附图标记可以表示相同的或者功能相似的元件。其中元件首次出现的附图通常由相应的附图标记中的最左侧的数位表示。
图1是根据本发明的实施例的ISA的32位指令的格式的示意图。
图2是根据本发明的实施例的ISA的16位指令的格式的示意图。
图3A是图示根据本发明的实施例的紧凑的等于零情况下的分支(BEQZC)指令的格式的示意图。
图3B是图示根据本发明的实施例的微处理器中的BEQZC指令的操作的流程图。
图3C是图示根据本发明的实施例的紧凑的不等于零情况下的分支(BNEZC)指令的格式的示意图。
图3D是图示根据本发明的实施例的微处理器中的BNEZC指令的操作的流程图。
图3E是示出根据本发明的实施例的跳转和链接交换(JALX)指令的格式的示意图。
图3F是图示根据本发明的实施例的微处理器中的JALX指令的操作的流程图。
图3G是示出JALX指令的第二实施例的格式的示意图。
图3H是图示根据第二实施例的JALX指令的操作的流程图。
图3I是示出根据本发明的实施例的紧凑的跳转寄存器(JRC)指令的格式的示意图。
图3J是图示根据一实施例的微处理器中的JRC指令的操作的流程图。
图3K是示出根据本发明的实施例的加载寄存器对(LRP)指令的格式的示意图。
图3L是图示根据实施例的LRP指令的操作的流程图。在步骤430中,获得了寄存器(rt)、寄存器(base)和偏移(offset)。
图3M是示出根据本发明的实施例的加载多个字(LWM)指令的格式的示意图。
图3N是图示根据实施例的微处理器中的LWM指令的操作的流程图。
图3O是示出根据本发明的实施例的存储寄存器对(SRP)指令的格式的示意图。
图3P是图示根据一实施例的SRP指令的操作的流程图。
图3Q是示出根据本发明的实施例的存储多个字(SWM)指令的格式的示意图。
图3R是图示根据一实施例的SWM指令的操作的流程图。
图4是根据本发明的实施例的处理器核的示意图。
具体实施方式
尽管这里参照关于特定应用的说明性实施例描述了本发明,但是应当理解,本发明不限于此。本领域技术人员根据这里提供的教导将认识到本发明的范围中的另外的修改、应用和实施例以及其中本发明将具有显著效用的另外的领域。以下章节描述了根据本发明的实施例的指令集架构。
I.概述
II.重新编码的架构
a.汇编级兼容性
b.特殊事件ISA模式选择
III.新类型的指令
a.重新编码的分支和跳转指令
b.基于统计分析的编码的字段
c.延迟时隙(Delay Slots)
IV.指令格式
a.原理(principle)操作码组织
b.主操作码
V.重新编码的指令
a.从32位指令重新编码的新的16位指令
b.从传统(legacy)32位指令重新编码的新的32位指令
c.16位用户定义指令(UDI)
d.ASE的统一
e.新的ISA指令
VI.示例性处理器核
VII.结论
I.概述
这里描述的实施例涉及包括将在微处理器上执行的指令的ISA和能够在其上执行ISA的指令的微处理器。这里描述的一些实施例涉及从将较大位宽的ISA重新编码为组合的较小和较大位宽的ISA得到的ISA。在一个实施例中,较大位宽的ISA是可获得自Mountain View,California的MIPS,INC.的MIPS32,重新编码的较小位宽的ISA是也可获得自MIPS,INC.的MicroMIPS 16位指令集,并且重新编码的较大位宽的ISA是也可获得自MIPS,INC.的MicroMIPS 32位指令集。
在另一实施例中,较大位宽的架构可以被重新编码为具有相同位宽的改进的架构或者相同位宽的指令和较小位宽的指令的组合。在一个实施例中,重新编码的较大位宽的指令集按如下方式被编码为相同大小位宽的ISA:与具有这里讨论的类型的重新编码的较小位宽的指令集兼容和互补。重新编码的较大位宽的指令集的实施例可以被称为“增强的”,并且可以包含下文所讨论的允许新指令集以并行模式实现的各种特征,其中在处理器上均可以利用这两个指令集。这里描述的重新编码的指令集还以独立模式工作,其中每次仅有一个指令集是有效的。
II.重新编码的架构
a.汇编级兼容性
这里描述的实施例在从较大位宽的ISA重新编码到较小位宽的ISA或者组合位宽的ISA之后保持汇编级兼容性。为了实现此,在一个实施例中,重新编码后的汇编语言指令集易记码(mnemonics)与其所得自的指令相同。维持汇编级兼容性允许通过使用较小位宽的ISA的汇编源代码对使用较大位宽的ISA的指令集汇编源代码进行编译。换言之,以本发明的新ISA实施例为目标的汇编器也能够对从其得到本发明的实施例的传统ISA进行汇编。
在一实施例中,汇编器确定使用哪个ISA处理特定的指令。例如,为了区分不同位宽的ISA的指令,在一实施例中,利用对应于不同大小的后缀对操作码易记码进行扩展。例如,在一个实施例中,将后缀“16”或“32”置于指令的末端处在第一个“.”(如果存在一个的话)之前,以区别16位和32位的编码的指令。例如,在一个实施例中,“ADD16”指的是ADD指令的16位版本,而“ADD32”指的是ADD指令的32位版本。如本领域的技术人员将知晓的,可以使用其他后缀。
其他实施例不使用指令大小的后缀指定。在这些实施例中,可以省略位宽后缀。在一实施例中,汇编器将查看命令的寄存器和立即数字段中的值,并且判定较大还是较小位宽的命令是适当的。取决于汇编器的设置,在处理特定指令时汇编器可以自动地选择最小的可用指令大小。
b.特殊事件ISA模式选择
在另一实施例中,在如下环境之一中发生ISA选择:异常、中断和通电事件。在该实施例中,正在处置特殊事件的处置器指定ISA。例如,对于通电,通电处置器可以指定ISA。同样地,中断或异常处置器可以指定ISA。
III.新类型的指令
下面描述具有新ISA指令的实施例,以及具有重新编码的指令的实施例。使用了若干个一般原理来开发这些指令,并且下面对这些进行了解释。
a.重新编码的分支和跳转指令
在一个实施例中,重新编码的较小位宽的ISA支持较小的分支目标地址,提供了增强的灵活性。例如,在一个实施例中,被重新编码为16位分支指令的32位分支指令支持16位对齐的分支目标地址。
在另一示例中,由于32位的重新编码的分支指令的偏移字段大小保持与传统的32位的重新编码的指令相同,因此分支范围可以较小。在另外的实施例中,跳转指令J、JAL和JALX通过支持32位对齐的目标地址来支持整个跳转范围。
b.基于统计分析的编码的字段
如这里使用的术语“立即数字段”在本领域中是公知的。在实施例中,立即数字段可以包括分支的地址偏移字段、加载/存储指令、和目标字段。在实施例中,指令编码中的立即数字段宽度和位置取决于指令。在一实施例中,指令的立即数字段被分为若干个字段,其不需要是相邻的。
在一实施例中,针对ISA指令和宏使用特定的寄存器和立即数值可以传达比其他值更高级别的性能。这里描述的多个实施例使用该原理来增强指令的性能。例如,为了实现该性能,在一个实施例中,执行ISA的使用时段上的寄存器和立即数字段中使用的值的统计频率的分析。基于该分析,实施例对值进行编码以将最高性能的寄存器和立即数值链接到如通过上文的统计分析确定的最常使用的值,而不是使用未修改的寄存器或者立即数值。
为了协助如这里描述的ISA的重新编码,由于可以从编码中省略某些较不常见的值,因此上文的编码方法还可以允许减少寄存器和立即数字段的所需要的大小。例如,编码的寄存器和立即数值可以被编码为比原始值短的位宽,例如“1001”可以被编码为“10”。在将较大位宽的指令集重新编码为较小位宽的ISA时,可以从新表中省略较不频繁使用的值。
c.延迟时隙
在流水线架构中,延迟时隙由在不影响前一指令的情况下执行的指令填充,例如位置紧接分支指令之后的单个指令。即使前一分支被采用,延迟时隙指令仍将执行。延迟时隙可以提高效率,但是并非对所有应用都是高效的。例如,对于某些应用(例如,高性能应用),不使用延迟时隙对使得到的代码较小的影响很小(如果存在的话)。有时,尝试填充延迟时隙的编译器不能找到有用的指令。在这些情况中,无操作(NOP)指令被置于延迟时隙中,其可以添加到程序的足印并且降低性能效率。
这里描述的实施例为开发人员提供了何时使用延迟时隙的选择。通过该选择,开发人员可以选择如何最佳地使用延迟时隙以便使所期望的结果最大化,例如代码大小、性能效率和开发的容易度。在一实施例中,这里描述的某些指令具有两种版本,示例性指令是分支的跳转指令。这些指令具有带延迟时隙的一个版本和不带延迟时隙的一个版本。在一实施例中,在对指令编码时,由软件来选择使用哪个版本。在另一实施例中,由开发人员来选择使用哪个版本(如关于上文描述的ADD16或ADD32的选择)。在又一实施例中,由汇编器自动地选择使用哪个版本(如上文所述)。这些实施例中的该特征也可以有助于维持与传统硬件处理器的兼容性。
在另一实施例中,延迟时隙的大小是固定的。这里的实施例牵涉具有两种指令大小(例如,16位和32位)的指令集。固定宽度的延迟时隙允许设计人员定义延迟时隙指令,使得该大小将总是为某一大小,例如较大位宽的时隙或者较短位宽的时隙。该延迟时隙选择允许设计人员广泛地追求不同的开发目标。为了使代码足印最小,可以选择均匀地较小位宽的延迟时隙。然而,这可能导致较高的不能填充较小的时隙的可能性。相反,为了使延迟时隙的潜在的性能益处最大化,可以选择较大位宽的时隙。然而,该选择可能增加代码足印。
在一实施例中,在对指令编码时,设计人员可以将延迟时隙宽度选择为较大位宽或较小位宽。这与这里描述的允许手动选择指令位宽(ADD16或ADD32)的实施例相似。如关于上文所述的固定位宽的选择,该延迟时隙选择允许设计人员追求不同的开发目标。然而,通过该方法,可以针对每个命令而非系统整体进行位宽选择。
如本领域的技术人员将意识到的,上文所述的关于延迟时隙的方法可以应用于能够使用延迟时隙的任何指令。
IV.指令格式
在一实施例中,新ISA包括具有至少两种不同位宽的指令。例如,根据一实施例的ISA包括具有16位和32位宽度的指令。尽管这里描述的新ISA的实施例描述了按互补方式操作的两个指令集,但是这里的教导将应用于任何数目的ISA指令集。
在一实施例中,指令具有操作码,其包括主操作码并且在一些情况下包括次操作码。主操作码具有固定宽度,而次操作码具有取决于指令的宽度,包括足够大到访问整个寄存器组的宽度。例如,在一个实施例中,MOVE指令具有5位的次操作码,并且可以到达整个寄存器组。例如,在一个实施例中,编码包括16位和32位宽的指令,它们均具有在指令编码中右对齐的6位主操作码,在其之后是可变宽度的次操作码。
对于较大位宽和较小位宽的指令集,主操作码是相同的。例如,在一个实施例中,编码包括16位和32位宽的指令,它们均具有在指令编码中右对齐的6位主操作码,在其之后是可变宽度的次操作码。
a.原理操作码组织
图1是根据一实施例的32位的重新编码的指令的格式110的示意图。指令格式110的实施例可以具有零、一个、或更多个左对齐寄存器字段120,在其之后是可选的立即数字段130。在一个实施例中,32位的重新编码的指令具有5位宽的寄存器字段120。其他可选的指令专用字段140可以位于立即数字段130和操作码字段之间。在示例性实施例中,指令可以具有0至4个左对齐的寄存器字段120,在其之后是可选的立即数字段130。其他可选的指令专用字段140位于立即数字段130和操作码字段150或160之间。如上文所述,操作码字段包括主操作码160并且在一些情况下包括次操作码150。
图2是根据一实施例的16位指令200的格式210的示意图。指令格式210的实施例可以具有零、一个、或更多个寄存器字段220。在一个实施例中,16位指令使用3位寄存器220,并且使用指令专用的寄存器编码。指令专用的寄存器编码涉及关于特定指令的从寄存器空间的特定部分到16位指令中的3位寄存器的映射。
在一实施例中,16位指令可以使用较大位宽的寄存器220,包括足够大到访问整个寄存器组的宽度。例如,在一个实施例中,16位MOVE指令具有若干5位寄存器字段。使用5位寄存器字段允许16位MOVE指令访问具有32个寄存器的寄存器组中的任何寄存器。在一实施例中,16位指令可以进一步包括一个或更多个立即数字段230。其他可选的指令专用字段240可以位于操作码260或250的左侧。在示例性实施例中,16位指令可以具有0至1个左对齐的寄存器字段220。操作码字段包括主操作码260,并且在一些情况中次操作码250呈现在任何其他字段240右侧。
b.主操作码
表1提供了根据一实施例的用于ISA的指令格式的列表。如从表1可见,示例性ISA中的指令具有16或32位。表1中呈现的指令格式的命名法基于用于该指令格式的寄存器字段的数目和立即数字段的大小。就是说,指令名称具有格式R<x>I<y>。其中<x>是指令格式中的寄存器的数目,而<y>是立即数字段的大小。例如,基于格式R2I16的指令具有两个寄存器字段和16位立即数字段。
表1:指令集格式
V.重新编码的指令
在一实施例中,根据实施例,新指令作为ISA的一部分被添加到重新编码的传统指令。这些新指令被设计用于减小代码大小。表2至5说明了根据一实施例的ISA的重新编码的指令的格式。表2和3提供了根据一实施例被重新编码为ISA中的16位指令的传统ISA的32位指令的指令格式。在一实施例中,将哪些传统32位ISA指令重新编码为16位新ISA指令的选择是基于用于确定较频繁使用的指令的传统代码的统计分析的。表2和3中提供了这些指令的示例性集合。表3提供了上文所述的指令专用的寄存器编码或者立即数字段大小编码的示例。表4提供了根据一实施例的从传统ISA中的32位指令重新编码的新ISA中的32位指令的指令格式。表5提供了根据一实施例的32位用户定义指令(UDI)的指令格式。
表2至5按照从最高有效位开始的顺序提供了根据一实施例的示例性ISA重新编码的格式,其定义了寄存器字段、立即数字段、其他字段、空字段、次操作码字段直到主操作码字段。如上文所述,大部分32位的重新编码的指令具有5比特宽的寄存器字段。在一实施例中,5比特宽的寄存器字段使用线性编码(r0=’00000’,r1=’00001’等)。16位宽度的指令可以具有不同大小的寄存器字段,例如3比特和5比特宽的寄存器字段。表2至5中提供了根据一实施例的16位指令的寄存器字段宽度。“其他字段”由各个列定义,并且这些字段在指令编码中的顺序由表格中的顺序定义。
a.从32位指令的重新编码的新的16位指令
如上文所讨论的,在这里描述的实施例中,较大位宽的ISA可以被重新编码为较小位宽的ISA或者组合的较小和较大位宽的ISA。在一个实施例中,为了使得较大的ISA能够被重新编码为较小的ISA,较小位宽的ISA指令具有较小的寄存器字段和立即数字段。在一个实施例中,如上文所述,该减小可以通过对频繁使用的寄存器和立即数值进行编码来实现。
在一个实施例中,ISA使用增强的32位指令集和较窄的重新编码的16位指令集。重新编码的16位指令具有较小的寄存器字段和立即数字段,并且大小的减小是通过对频繁使用的寄存器和立即数值进行编码来实现的。
例如,在下表2中列出的针对频繁使用的传统指令的重新编码被示出为具有与频繁使用的寄存器和立即数值对应的较小的寄存器字段和立即数字段。
表2:从32位指令重新编码得到的16位的指令
表3:从32位指令重新编码得到的16位的指令
如上文所述,在一实施例中,由于指令MOVE是非常频繁使用的指令,因此MOVE指令支持完整的5位无限制寄存器字段以便于到达所有可用的寄存器,以及使效率最大化。
在一实施例中,存在加载字(LW)和存储字(SW)指令的两种变体。一种变体隐性地使用状态寄存器428中的SP寄存器(参见图4)以允许较大的偏移字段。偏移字段中的值在被加到基地址之前左移2。
在一实施例中,存在ADDIU指令的两种变体。ADDIU指令的第一种变体具有较大的立即数字段以及仅一个寄存器字段。在ADDIU指令的第一种变体中,寄存器字段表示源以及目的地。ADDIU指令的第二种变体具有较小的立即数字段,但是具有两个寄存器字段。
16位指令有时可能导致未对齐。为了解决在特定情况中的该未对齐以及使指令在32位边界上对齐,在这里描述的实施例中提供了16位NOP指令。16位NOP指令也可以减小代码大小。
由于在示例性实施例中,NOP指令被实现为宏,因此NOP指令未在表中示出。例如,在一个实施例中,16位NOP指令被实现为“MOVE 16 r0,r0”。
在一实施例中,当未能填充JR之后的跳转延迟时隙时,紧凑的指令JRC比JR指令优选。由于JRC指令可以与延迟时隙中具有NOP的JR一样快地执行,因此如果延迟时隙能够被填充,则应使用JR指令。
此外,在一实施例中,断点指令BREAK和SDBBP包括16位变体。这允许在不覆写超过单个的指令的情况下将断点插入在任何指令地址处。
b.从传统32位指令的重新编码得到的新的32位指令
在新ISA的实施例中,传统的32位指令被重新编码为新的32位指令。在下表4中提供了示例性的这种重新编码。
表4:从传统的32位指令重新编码得到的32位指令
表4:从传统的32位指令重新编码得到的32位指令(续)
表4:从传统的32位指令重新编码得到的32位指令(续)
表4:从传统的32位指令重新编码得到的32位指令(续)
表4:从传统的32位指令重新编码得到的32位指令(续)
c.16位用户定义指令(UDI)
在一实施例中,较小位宽的重新编码的ISA允许用户定义指令(UDI)。UDI允许设计人员添加他们自己的指令。表5提供了UDI的示例性格式。在一个实施例中,有16个UDI指令可供设计人员使用。
表5:UDI空间-32位
d.ASE的统一
在一些情况中,通过扩展(诸如应用专用扩展(ASE)),使ISA扩大或者向其提供另外的特征。由于这些扩展提供了新的指令,因此它们通常需要使用至少一个另外的解码器来处理扩展指令。然而,这些另外的解码器通常需要另外的芯片面积。根据本发明的实施例的将一个ISA重新编码为另一ISA允许在记录ISA时集成各种扩展的指令。结果,对于集成的新ISA,仅需要单个解码器。
例如,在一个实施例中,传统的MIPS32 ASE指令(例如,MIPS32、MIPS-3D ASE、MIPS DSP ASE、MIPS MT ASE、SmartMIPS ASE,不包括MEPS16e)被统一以映射到组合有32位ISA的16位ISA。统一的ISA的益处在于不需要专用的解码器。
表6至9提供了根据一实施例的来自4个示例性ASE的指令的示例性重新编码的格式
表6:从第一32位ISA ASE重新编码得到的32位的指令
表7:从第二32位ISA ASE重新编码得到的32位的指令
表7:从第二32位ISA ASE重新编码得到的32位的指令(续)
表7:从第二32位ISA ASE重新编码得到的32位的指令(续)
表8:从第三32位ISA ASE重新编码得到的32位的指令
表9:从第32位ISA ASE重新编码得到的32位的指令
e.新的ISA指令
如上文所述,在根据一实施例在新ISA中提供了若干个新指令。表10中概述了一个实施例的新指令和它们的格式。
表10:新指令-32位
图3A至R是描述表10中概述的指令的格式和操作的流程图。下面的章节提供了关于每个指令的示例性实施侧的格式、目的、描述、限制、操作、异常和编程注释。
图3A是图示根据本发明实施例的紧凑的等于零情况下的分支(BEQZC)指令的格式的示意图。对于编写代码,BEQZC指令的格式是“BEQZC rs,offset”,其中rs是通用寄存器并且offset是立即数值偏移。BEQZC指令的目的是测试GPR。如果GPR的值是零(0),则处理器执行PC相对条件分支。就是说,如果(GPR[rs]=0),则分支到有效目标地址。
图3B是图示根据一实施例的微处理器中的BEQZC指令的操作的流程图。在步骤302中,获得寄存器(rs)和偏移。在步骤304中,使偏移左移一位。在步骤306中,如果必要,对偏移进行符号扩展。在步骤308中,将偏移加到分支之后的指令的地址以形成目标地址。在步骤310中,如果GPR rs的内容等于零,则在步骤312中,程序分支到目标地址而没有延迟时隙指令,否则指令处理在步骤313中结束。
描述以上操作的伪代码被提供如下:
I:tgt_offset←符号_扩展(偏移||0)
条件←(GPR[rs]=0GPRLEN)
If条件then
PC←(PC+4)+tgt_offset
endif
在一实施例中,如果BEQZC指令被置于分支或跳转的延迟时隙中,则处理器操作是不可预测的。在一实施例中,BEQZC不具有限制或异常。在一实施例中,BEQZC不具有延迟时隙。
图3C是图示根据本发明实施例的紧凑的不等于零情况下的分支(BNEZC)指令的格式的示意图。对于编写代码,BNEZC指令的格式是“BNEZC rs,offset”,其中rs是通用寄存器并且offset是立即数值偏移。BNEZC指令的目的是测试GPR。如果GPR的值不是零(0),则处理器执行PC相对条件分支。就是说,如果(GPR[rs]≠0),则分支。
图3D是图示根据一实施例的微处理器中的BNEZC指令的操作的流程图。在步骤314中,获得寄存器(rs)和偏移。在步骤316中,随后使偏移左移一位,并且在步骤318中,如果必要,对偏移操作数进行符号扩展。在步骤320中,将偏移加到分支之后的指令的地址以形成目标地址。在步骤322中,如果GPR rs的内容不等于零,则在步骤324中,程序分支到目标地址而没有延迟时隙指令,否则指令处理在步骤325中结束。
描述以上操作的伪代码被提供如下:
I:tgt_offset←符号_扩展(偏移||0)
条件←(GPR[rs]≠0GPRLEN)
If条件then
PC←(PC+4)+tgt_offset
endif
在一实施例中,如果BNEZC指令被置于分支或跳转的延迟时隙中,则处理器操作是不可预测的。BNEZC不具有限制或异常。在一实施例中,BNEZC不具有延迟时隙。
图3E是示出根据本发明实施例的跳转和链接交换(JALX)指令的格式的示意图。对于编写代码,JALX指令的格式是“JALXtarget”,其中“target”(目标)是在计算指令的有效目标地址时将使用的字段。JALX指令的目的在于执行进程调用以及改变ISA模式,例如从较小位宽的指令集变为较大位宽的指令集。
图3F是图示根据一实施例的微处理器中的JALX指令的操作的流程图。在步骤326中,获得目标字段。在步骤328中,确定返回链接地址作为分支之后的下一指令的地址,其中执行过程在从进程调用返回时继续进行。在步骤330中,将返回地址链接置于GPR 31中。任何GPR可用于存储该返回地址链接,只要其不会干扰软件执行。在步骤331中,存储在GPR 31的位0中的值被设置到ISA模式位的当前值。在一实施例中,设置GPR 31的位0包括将ISA模式位的值联接到分支之后的下一指令的地址的高31位。
在一实施例中,JALX指令是PC区域分支,而非PC相对分支。就是说,有效目标地址是如下确定的“当前”256MB对齐区域。在步骤332中,通过使目标字段左移2位,获得有效目标地址的低位28位。在一实施例中,该移位是通过将2个零联接到目标字段值而完成的。有效目标地址的剩余的高位是分支之后的第二指令(而非分支自身)的地址的相应的位。在步骤336中,连同使ISA模式位反转(toggle)一起执行对于有效目标地址的跳转。该操作结束于步骤338。
在一实施例中,JALX指令没有限制并且不具有异常。在一实施例中,通过将有符号的相对偏移加到PC的值,形成了有效目标地址。然而,如果所有程序代码地址将适合在256MB边界上对齐的256MB区域,则有利的是,通过联接PC和经移位的26位目标字段来形成跳转目标地址而非通过添加有符号的偏移来形成跳转目标地址。使用联接的PC和26位目标地址允许从区域中的任何位置跳转到区域中的任何位置,而这是有符号的相对偏移所不允许的。
描述以上操作的伪代码被提供如下:
I:GPR[31]←(PC+8)GPRLEN-1..1||ISA模式
I+1:PC←PCGPRLEN-1..28||目标||02
ISA模式←(非ISA模式)
图3G是示出JALX指令的第二实施例的格式的示意图。根据本发明实施例的JALX 32位模式指令。对于编写代码,JALX 32位指令的格式是“JALX instr_index”,其中instr_index是在计算指令的有效目标地址时将使用的字段。JALX 32位指令的目的在于执行进程调用以及改变ISA模式,例如从较大位宽的指令集变为较小位宽的指令集。
图3H是图示根据第二实施例的JALX指令的操作的流程图。在步骤340中,获得instr_index字段。在步骤342中,确定返回链接地址作为分支之后的下一指令的地址,其中执行过程在从进程调用返回时继续进行。在步骤344中,将返回地址链接置于GPR 31中。任何GPR可用于存储返回地址链接,只要其不会干扰软件执行。在步骤345中,存储在GPR 31的位0中的值被设置到ISA模式位的当前值。在一实施例中,设置GPR 31的位0包括将ISA模式位的值联接到分支之后的下一指令的地址的高31位。
在一实施例中,JALX指令是PC区域分支,而非PC相对分支。就是说,有效目标地址是如下确定的“当前”256MB对齐的区域。在步骤346中,通过使instr_index字段左移2位,确定有效目标地址。在一实施例中,该移位是通过将2个零联接到目标字段值而完成的。有效目标地址的剩余的高位是分支之后的第二指令(而非分支自身)的地址的相应的位。在步骤350中,执行延迟时隙中的指令。在步骤352中,连同使ISA模式位反转一起执行对于有效目标地址的跳转。该操作结束于步骤354。
在一实施例中,JALX指令的第二实施例没有限制并且不具有异常。在一实施例中,通过将有符号的相对偏移加到PC的值,形成了有效目标地址。然而,如果所有程序代码地址将适合在256MB边界上对齐的256MB区域,则有利的是,通过联接PC和经移位的26位目标字段来形成跳转目标地址而非通过添加有符号的偏移来形成跳转目标地址。使用联接的PC和26位目标地址允许从区域中的任何位置跳转到区域中的任何位置,而这是有符号的相对偏移所不允许的。
在一实施例中,JALX指令的第二实施例仅支持32位对齐的分支目标地址。在一实施例中,如果分支、跳转、ERET、DERET或WAIT指令被置于分支或跳转的延迟时隙中,则处理器操作是不可预测的。在一实施例中,JALX 32位指令不具有异常。
描述以上操作的伪代码被提供如下:
I:GPR[31]←(PC+8)||ISA模式
I+1:PC←PCGPRLEN-1..28||instr_index||02
ISA模式←(非ISA模式)
图3I是示出根据本发明实施例的紧凑的跳转寄存器(JRC)指令的格式的示意图。对于编写代码,JRC指令的格式是JRC rs,其中rs是通用寄存器。JRC指令的目的在于执行对于寄存器中的指令地址的分支。就是说,PC←GPR[rs]。
图3J是图示根据一实施例的微处理器中的JRC指令的操作的流程图。在步骤356中,获得寄存器(rs)。在步骤358中,程序无条件地跳转到GPR rs中指定的地址,并且ISA模式位被设置为GPR rs的位0中的值。在一实施例中,不存在延迟时隙指令。该操作结束于步骤360。
在一实施例中,目标地址的位0总是零(0)。因此,当源寄存器的位0是一(1)时,未发生地址异常。在一实施例中,GPR rs中的有效目标地址必须是32位对齐的。如果GPR rs的位0是零并且GPR rs的位1是一,则当随后取出(fetch)跳转目标作为指令时,发生地址错误异常。JRC指令不具有异常。
描述以上操作的伪代码被提供如下:
I:PC←GPR[rs]GPRLEN-1..1||0
ISA模式←GPR[rs]0
图3K是示出根据本发明一实施例的加载寄存器对(LRP)指令的格式的示意图。在一实施例中,LRP指令的目的在于从存储器加载两个连续的字。就是说,GPR[rt],GPR[rt+1]←memory[GPR[base]+offset]。对于编写代码,LRP指令的格式是“LRP rt,offset(base)”,其中rt是目标寄存器对的第一寄存器,base是保存基地址的寄存器,偏移(offset)将被加到该基地址以确定从其获得要加载的数据的存储器中的有效地址,并且offset(偏移)是立即数值。
图3L是图示根据一实施例的LRP指令的操作的流程图。在步骤368中,获得寄存器(rt)、寄存器(base)和偏移。在步骤369中,GPR(base)被加到偏移以形成有效地址。在步骤370中,加载32位对齐的有效地址所指定的存储器位置的内容。在步骤371中,如果必要,将加载的字符号扩展到GPR寄存器的宽度。在步骤372中,将第一取回(retrieve)的字存储在GPR rt中。在步骤373中,通过将GPR(base)加到偏移+4,确定要存储的第二字的有效地址。在步骤374中,取回新确定的有效地址所指定的存储器位置的内容作为第二加载的字。在步骤375中,如果必要,将第二加载的字符号扩展到GPR寄存器的宽度。在376中,将第二存储器字存储在GPR(rt+1)中。该操作结束于步骤377。
在一实施例中,有效地址必须是32位对齐的。如果地址的两个最低有效位中的任一个不是零,则发生地址错误异常。在一实施例中,如果rt等于GPR 31,则指令的行为在架构上是未定义的。如果base和rt是相同的,则LRP指令的行为在架构上也是未定义的。如果在执行期间中断或异常使操作中止,则这允许LRP操作重新开始。在一实施例中,如果该指令被置于跳转或分支的延迟时隙中,则该指令的行为在架构上也是未定义的。在一实施例中,LRP异常是:TLB重填、TLB无效、总线错误、地址错误、和监视。
描述以上操作的伪代码被提供如下:
vAddr 4←符号_扩展(偏移)+GPR[base]
if vAddr1...0≠02then
信号异常(地址错误)
endif
(pAddr,CCA)←地址转译(vAddr,数据,加载)
memword←加载存储器(CCA,字,pAddr,vAddr,数据)
GPR[rt]←memword
vAddr←符号_扩展(偏移)+GPR[base]+4
(pAddr,CCA)←地址转译(vAddr,数据,加载)
memword←加载存储器(CCA,字,pAddr,vAddr,数据)
GPR[rt+1]←memword
在一实施例中,LRP指令可以执行可变次数的周期,并且可以执行可变次数的针对存储器的存储。此外,在一实施例中,对从执行期间所取的任何异常的返回执行操作序列的完全重新开始。
图3M是示出根据本发明一实施例的加载多个字(LWM)指令的格式的示意图。对于编写代码,LWM指令的格式是“LWM reglist,(base)”,其中reglist是其中每个位对应于不同寄存器的位字段。在另一实施例中,reglist是编码的位字段,其每个编码值映射到可用的寄存器的子集。在这样的实施例中,reglist字段可以少于18位。在又一实施例中,reglist标识包含其中每个位对应于不同寄存器的位字段的寄存器。再次地,在这样的实施例中,reglist字段可以少于18位。LWM指令的目的是从存储器加载连续字的序列。就是说,GPR[reglist[m]]......GPR[reglist[n]]←memory[GPR[base ]]......memory[GPR[base]+4*(n-m)]。
图3N是图示根据一实施例的微处理器中的LWM指令的操作的流程图。在步骤380中,获得寄存器列表(reglist)。在步骤381中,使用GPR(base)的内容形成有效地址。在步骤382中,取出32位对齐的有效地址所指定的存储器位置的内容。在步骤383中,如果必要,将取回的字符号扩展到GPR寄存器的宽度。在步骤384中,将结果存储在与reglist中所标识的下一寄存器对应的GPR中。在步骤385中,将有效地址更新到要从存储器加载的下一个字。在步骤386中,对于reglist中所标识的每个寄存器值,重复步骤382至385。该操作在步骤387中结束。
在一实施例中,有效地址必须是32位对齐的。如果地址的两个最低有效位中的任一个不是零,则发生地址错误异常。如果base被包括在reglist中,则LWM指令的行为在架构上是未定义的。如果base被包括在reglist中,则LWM指令的行为在架构上也是未定义的,如果在执行期间中断或异常使操作中止,则这允许操作重新开始。如果该指令被置于跳转或分支的延迟时隙中,则该指令的行为在架构上也是未定义的。
描述以上操作的伪代码被提供如下:
vAddr 4←GPR[base]
if vAddr1...0≠02then
信号异常(地址错误)
endif
j←1
for i←m to n
if(reglist[i]≠0)
(pAddr,CCA)←地址转译(vAddr,数据,加载)
memword←加载存储器(CCA,字,pAddr,vAddr,数据)
GPR[reglist[i]]←memword
vAddr←GPR[base]+4*j++
endif
endfor
在一实施例中,LWM异常是:TLB重填、TLB无效、总线错误、地址错误、和监视。在一实施例中,LWM指令可以执行可变次数的周期,并且可以执行可变次数的针对存储器的存储。在一实施例中,对从执行期间所取的任何异常返回执行操作序列的完全重新开始。
图3O是示出根据本发明一实施例的存储寄存器对(SRP)指令的格式的示意图。在一实施例中,SRP指令的目的在于将两个连续的字存储到存储器。就是说,memory[GPR[base]+offset]←GPR[rt],GPR[rt+1]。对于编写代码,SRP指令的格式是“SRP rt,offset(base)”,其中rt是源寄存器对的第一寄存器,base是保存基地址的寄存器,偏移(offset)将被加到该基地址以确定要存储数据的存储器中的有效地址,并且offset是立即数值。
图3P是图示根据一实施例的SRP指令的操作的流程图。在步骤387中,获得寄存器(rt)、寄存器(base)和偏移。在步骤388中,GPR(base)被加到偏移以形成有效地址。在步骤390中,从GPR(rt)获得第一最低有效32位存储器字。在步骤392中,将所获得的第一存储器字存储在存储器中的由对齐的有效地址指定的位置。在步骤394中,将有效地址更新为GPR(base)+偏移+4以对其中要存储数据的下一存储器位置进行寻址。根据需要对偏移值进行符号扩展。在步骤396中,从GPR(rt+1)获得第二最低有效32位存储器字。在步骤398中,将所获得的第二存储器字存储在存储器中的由更新的对齐的有效地址指定的位置。该操作结束于步骤399。
实施例中的一个限制是,有效地址必须是32位对齐的。如果地址的两个最低有效位中的任一个不是零,则发生地址错误异常。在一实施例中,如果该指令被置于跳转或分支的延迟时隙中,则该指令的行为在架构上是未定义的。
在一实施例中,SRP指令可以执行可变次数的周期,并且可以执行可变次数的针对存储器的存储。此外,在一实施例中,对在从执行期间所取的任何异常的返回执行操作序列的完全重新开始。在一实施例中,SRP异常是TLB重填、TLB无效、TLB被修改、地址错误、监视。
描述以上操作的伪代码被提供如下:
vAddr 4←符号_扩展(偏移)+GPR[base]
if vAddr1...0≠02then
信号异常(地址错误)
endif
(pAddr,CCA)←地址转译(vAddr,数据,存储)
数据字←GPR[rt]
存储存储器(CCA,字,pAddr,vAddr,数据)
vAddr←符号_扩展(偏移)+GPR[base]+4
(pAddr,CCA)←地址转译(vAddr,数据,存储)
数据字←GPR[rt+1]
存储存储器(CCA,字,数据字,pAddr,vAddr,数据)
图3Q是示出根据本发明一实施例的存储多个字(SWM)指令的格式的示意图。对于编写代码,SWM指令的格式是“SWM reglist(base)”,其中reglist是其中每个位对应于不同寄存器的位字段。在另一实施例中,reglist是编码的位字段,其每个编码的值映射到可用的寄存器的子集。在这样的实施例中,reglist字段可以少于18位。在又一实施例中,reglist标识包含其中每个位对应于不同寄存器的位字段的寄存器。再次地,在这样的实施例中,reglist字段可以少于18位。SWM指令的目的是将连续字的序列存储到存储器。就是说,memory[GPR[base ]]......memory[GPR[base]+4*(n-m)]←GPR[reglist[m]]......GPR[reglist[n]]。
图3R是图示根据一实施例的SWM指令的操作的流程图。在步骤380a中,获得寄存器列表(reglist)。在步骤381a中,使用GPR(base)的内容形成有效地址。在步骤382a中,获得reglist所标识的下一GPR的最低有效32位字。在步骤383a中,将所获得的数据存储在存储器中的对应于有效地址的地址处。在步骤384a中,有效地址被更新到下一地址以将数据写入存储器。在步骤385a中,对于reglist中标识的每个寄存器,重复步骤382a至384a。
在一实施例中,对SWM指令的限制是有效地址必须是32位对齐的。如果地址的两个最低有效位中的任一个不是零,则发生地址错误异常。在一实施例中,如果该指令被置于跳转或分支的延迟时隙中,则该指令的行为在架构上是未定义的。在一实施例中,SWM指令执行可变次数的周期,并且执行可变次数的针对存储器的存储。对从执行期间发生的任何异常的返回执行操作序列的完全重新开始。在一实施例中,对于SWM的异常是TLB重填、TLB无效、TLB被修改、地址错误、监视。
描述以上操作的伪代码被提供如下:
vAddr←GPR[base]
if vAddr1...0≠02then
信号异常(地址错误)
endif
j←1
for i←m to n
if(reglist[i]≠0)
(pAddr,CCA)←地址转译(vAddr,数据,存储)
数据字←GPR[reglist[i]]
存储存储器(CCA,字,pAddr,vAddr,数据)
vAddr←GPR[base]+4*j++
endif
endfor
VI.示例性处理器核
图4是根据本发明一实施例的示例性处理器核400的示意图,其用于实现根据本发明实施例的ISA。处理器核400是示例性处理器,其是说明性的而非限制性的。本领域的技术人员将认识到用于与根据本发明实施例的ISA一起使用的许多的处理器实现方案。
如图4中所示,处理器核400包括执行单元402、取出单元404、浮点单元406、加载/存储单元408、存储器管理单元(MMU)410、指令缓存412、数据高速缓存414、总线接口单元416、乘法/除法单元(MDU)420、协处理器422、通用寄存器424、便笺存储器(scratch pad)430和核扩展单元434。尽管处理器核400在这里被描述为包括若干个分开的部件,但是这些部件中的许多部件是可选的部件并且将不会在本发明的每个实施例中都存在,或者是例如可以组合的部件,从而两个部件的功能驻留在单个部件中。可以添加另外的部件。因此,图4中示出的单独的部件是说明性的,而不是对本发明的限制。
执行单元402优选实现具有单周期算术逻辑单元运算(例如,逻辑、移位、加、减等)的加载-存储(RISC)架构。执行单元402与取出单元404、浮点单元406、加载/存储单元408、乘法-除法单元420、协处理器422、通用寄存器424和核扩展单元434接口连接。
取出单元404负责向执行单元402提供指令。在一个实施例中,取出单元404包括用于指令高速缓存412的控制逻辑、用于记录压缩格式指令、动态分支预测的记录器、以及用于使取出单元404的操作从执行单元402解除耦合的指令缓存器。取出单元404与执行单元402、存储器管理单元410、指令高速缓存412和总线接口单元416接口连接。
浮点单元406与执行单元402接口连接并且进行非整数数据的运算。浮点单元406包括浮点寄存器418。在一个实施例中,浮点寄存器418可以位于浮点单元406外部。浮点寄存器418可以是用于浮点单元406所执行的浮点运算的32位或64位寄存器。典型的浮点运算是算术运算,诸如加法和乘法,并且也可以包括指数或三角计算。
加载/存储单元408负责数据加载和存储,并且包括数据高速缓存控制逻辑。加载/存储单元408与数据高速缓存414和便笺存储器430和/或填充缓存器(未示出)接口连接。加载/存储单元408还与存储器管理单元410和总线接口单元416接口连接。
存储器管理单元410将虚拟地址转译为用于存储器访问的物理地址。在一个实施例中,存储器管理单元410包括转译后备缓存器(translation lookaside buffer,TLB)并且可以包括分开的指令TLB和分开的数据TLB。存储器管理单元410与取出单元404和加载/存储单元408接口连接。
指令高速缓存412是被组织为多路设置关联或直接关联高速缓存(诸如,例如2路设置关联高速缓存、4路设置关联高速缓存、8路设置关联高速缓存等)的片上存储器阵列。指令高速缓存412优选被虚拟地索引并且物理地标注标签,由此允许虚拟-物理地址转译与缓存访问并行地进行。在一个实施例中,除了物理地址位之外,标签还包括有效位和可选的奇偶位。指令高速缓存412与取出单元404接口连接。
数据高速缓存414也是片上存储器阵列。数据高速缓存414优选被虚拟地索引并且物理地标注标签。在一个实施例中,除了物理地址位之外,标签还包括有效位和可选的奇偶位。数据高速缓存414与加载/存储单元408接口连接。
总线接口单元416控制处理器核400的外部接口信号。在一实施例中,总线接口单元416包括折叠式写入缓存器(collapsing write buffer),其用于合并直写事务和聚集来自未被高速缓存的存储的写入。
乘法/除法单元420执行处理器核400的乘法和除法运算。在一个实施例中,乘法/除法单元420优选地包括流水线乘法器、累加寄存器(累加器)426以及乘法和除法状态机,以及执行例如乘法、乘加和除法功能所需的所有控制逻辑。如图4中所示,乘法/除法单元420与执行单元402接口连接。累加器426用于存储乘法/除法单元420执行的算术运算的结果。
协处理器422执行处理器核400的各种开销功能。在一个实施例中,协处理器422负责虚拟到物理地址转译、实现高速缓存协议、异常处置、操作模式选择、和使能/禁止中断功能。协处理器422与执行单元402接口连接。协处理器422包括状态寄存器428和通用存储器438。状态寄存器428通常用于保存由协处理器422使用的变量。状态寄存器428还可以包括用于保存通常用于处理器核400的状态信息的寄存器。例如,状态寄存器428可以包括状态寄存器。通用存储器438可以用于保存临时值(诸如在计算期间生成的系数)。在一个实施例中,通用存储器438具有寄存器文件的形式。
通用寄存器424典型地是用于标量整数运算和地址计算的32位或64位寄存器。在一个实施例中,通用寄存器424是执行单元424的一部分。可选地,可以包括一个或多个另外的寄存器文件组,诸如影子(shadow)寄存器文件组,以使例如中断和/或异常处理期间的内容切换开销最小。
便笺存储器430是向加载/存储单元408存储或提供数据的存储器。在处理器400运行的同时,可以预先配置或者编程地配置便笺存储器的一个或更多个专用地址区域。地址区域是可以例如由基地址和区域大小指定的连续地址范围。当使用基地址和区域大小时,基地址指定地址区域的起点,并且例如区域大小被加到基地址以指定地址区域的终点。典型地,一旦指定了便笺存储器的地址区域,则从便笺存储器中取回与所指定的地址区域对应的所有数据。
用户定义指令(UDI)单元434允许针对具体应用定制处理器核400。UDI 434允许用户定义和添加他们自己的可以对存储在例如通用寄存器424中的数据进行操作的指令。UDI 434允许用户添加新的功能,同时维持与行业标准架构的兼容性。UDI 434包括UDI存储器436,其可以用于存储用户添加的指令和在计算期间生成的变量。在一个实施例中,UDI存储器436具有寄存器文件的形式。
VI.结论
发明内容和摘要章节可以阐述如发明人所构思的本发明的一个或更多个示例性实施例,但非所有的示例性实施例,并且因此,并非意在以任何方式限制本发明和权利要求。
上文已经在图示指定的功能及其之间的关系的实现方案的功能构造模块的帮助下描述了实施例。出于描述便利起见,任意地定义了这些功能构造模块的边界。可以定义替代的边界,只要所指定的功能及其关系被适当地执行。
前面的具体实施例的描述将全面地展现本发明的一般性地特质,从而在不偏离本发明的一般性概念的情况下,本领域的技术人员可以通过应用本领域内的知识,在不进行不合理的实验的情况下容易地修改这些具体实施例和/或使其适于各种应用。因此,基于这里呈现的教导和指引,这些调整和修改应在所公开的实施例的等同物的含义和范围内。将理解,这里的习语或术语出于描述而非限制的目的,使得本领域的技术人员根据所述教导和指引解释本说明书的术语或习语。
本发明的范围不应限于任何上述示例性实施例,而是应仅根据权利要求及其等同物来限定。
Claims (3)
1.一种处理器,包括:
执行单元:
多个通用寄存器,耦合到所述执行单元;
其中,如果一通用寄存器等于零,则将信号提供给所述执行单元以将分支指令解析到目标地址,所述目标地址与等于加到偏移的所述分支指令的存储器地址的值对应,该偏移已经被移位预定的位数并且被符号扩展。
2.根据权利要求1所述的处理器,其中所述分支指令不具有延迟时隙指令。
3.一种用于在处理器上执行紧凑的等于零情况下的分支指令的方法,所述方法包括:
向所述处理器提供指示紧凑的等于零情况下的分支指令的操作码;
接收rs值和偏移值;
使所述偏移值移位预定的位数;
扩展所述偏移值的符号;
通过将所述偏移值加到所述指令的存储器地址来形成目标地址;
检查GPR地址的内容,所述GPR地址对应于所述rs值;以及
如果所检查的GPR内容等于零,
则分支到所述目标地址,而没有延迟时隙指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US5164208P | 2008-05-08 | 2008-05-08 | |
US61/051,642 | 2008-05-08 | ||
PCT/US2009/002893 WO2009137108A1 (en) | 2008-05-08 | 2009-05-08 | Microprocessor with compact instruction set architecture |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102077195A true CN102077195A (zh) | 2011-05-25 |
Family
ID=41264900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980124104.0A Pending CN102077195A (zh) | 2008-05-08 | 2009-05-08 | 具有紧凑指令集架构的微处理器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20090282220A1 (zh) |
CN (1) | CN102077195A (zh) |
WO (1) | WO2009137108A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104185839A (zh) * | 2012-03-15 | 2014-12-03 | 国际商业机器公司 | 将数据载入直到动态确定的存储器边界的方法 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100312991A1 (en) * | 2008-05-08 | 2010-12-09 | Mips Technologies, Inc. | Microprocessor with Compact Instruction Set Architecture |
GB2478733B (en) | 2010-03-15 | 2013-08-14 | Advanced Risc Mach Ltd | Apparatus and method for handling exception events |
US8589665B2 (en) | 2010-05-27 | 2013-11-19 | International Business Machines Corporation | Instruction set architecture extensions for performing power versus performance tradeoffs |
CN102831908A (zh) * | 2011-06-14 | 2012-12-19 | 上海三旗通信科技股份有限公司 | Mtk平台下中星微协处理器外部声音回传的控制和播放 |
US10055227B2 (en) * | 2012-02-07 | 2018-08-21 | Qualcomm Incorporated | Using the least significant bits of a called function's address to switch processor modes |
US9436474B2 (en) * | 2012-07-27 | 2016-09-06 | Microsoft Technology Licensing, Llc | Lock free streaming of executable code data |
GB2537357A (en) * | 2015-04-09 | 2016-10-19 | Imagination Tech Ltd | Cache operation in a multi-threaded processor |
GB2565338B (en) | 2017-08-10 | 2020-06-03 | Mips Tech Llc | Fault detecting and fault tolerant multi-threaded processors |
US11645178B2 (en) | 2018-07-27 | 2023-05-09 | MIPS Tech, LLC | Fail-safe semi-autonomous or autonomous vehicle processor array redundancy which permits an agent to perform a function based on comparing valid output from sets of redundant processors |
US20220237008A1 (en) * | 2021-01-22 | 2022-07-28 | Seagate Technology Llc | Embedded computation instruction set optimization |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2045773A1 (en) * | 1990-06-29 | 1991-12-30 | Compaq Computer Corporation | Byte-compare operation for high-performance processor |
CA2045791A1 (en) * | 1990-06-29 | 1991-12-30 | Richard Lee Sites | Branch performance in high speed processor |
CA2045790A1 (en) * | 1990-06-29 | 1991-12-30 | Richard Lee Sites | Branch prediction in high-performance processor |
JPH08506955A (ja) * | 1993-12-17 | 1996-07-23 | フィリップス エレクトロニクス ネムローゼ フェン ノートシャップ | 再帰フィルタユニットを具えるフィルタ装置、フィルタ処理方法及びこのフィルタ装置を具える送信システム |
US5598546A (en) * | 1994-08-31 | 1997-01-28 | Exponential Technology, Inc. | Dual-architecture super-scalar pipeline |
US5673321A (en) * | 1995-06-29 | 1997-09-30 | Hewlett-Packard Company | Efficient selection and mixing of multiple sub-word items packed into two or more computer words |
US5752069A (en) * | 1995-08-31 | 1998-05-12 | Advanced Micro Devices, Inc. | Superscalar microprocessor employing away prediction structure |
US5867681A (en) * | 1996-05-23 | 1999-02-02 | Lsi Logic Corporation | Microprocessor having register dependent immediate decompression |
US5819058A (en) * | 1997-02-28 | 1998-10-06 | Vm Labs, Inc. | Instruction compression and decompression system and method for a processor |
US6101592A (en) * | 1998-12-18 | 2000-08-08 | Billions Of Operations Per Second, Inc. | Methods and apparatus for scalable instruction set architecture with dynamic compact instructions |
EP0942357A3 (en) * | 1998-03-11 | 2000-03-22 | Matsushita Electric Industrial Co., Ltd. | Data processor compatible with a plurality of instruction formats |
JPH11338710A (ja) * | 1998-05-28 | 1999-12-10 | Toshiba Corp | 複数種の命令セットを持つプロセッサのためのコンパイル方法ならびに装置および同方法がプログラムされ記録される記録媒体 |
US6110225A (en) * | 1998-07-10 | 2000-08-29 | Agilent Technologies | Inverse assembler with reduced signal requirements using a trace listing |
US6862563B1 (en) * | 1998-10-14 | 2005-03-01 | Arc International | Method and apparatus for managing the configuration and functionality of a semiconductor design |
US6338132B1 (en) * | 1998-12-30 | 2002-01-08 | Intel Corporation | System and method for storing immediate data |
US6233674B1 (en) * | 1999-01-29 | 2001-05-15 | International Business Machines Corporation | Method and system for scope-based compression of register and literal encoding in a reduced instruction set computer (RISC) |
US6408382B1 (en) * | 1999-10-21 | 2002-06-18 | Bops, Inc. | Methods and apparatus for abbreviated instruction sets adaptable to configurable processor architecture |
WO2001069376A2 (en) * | 2000-03-15 | 2001-09-20 | Arc International Plc | Method and apparatus for processor code optimization using code compression |
US6865664B2 (en) * | 2000-12-13 | 2005-03-08 | Conexant Systems, Inc. | Methods, systems, and computer program products for compressing a computer program based on a compression criterion and executing the compressed program |
TW536684B (en) * | 2001-06-20 | 2003-06-11 | Sunplus Technology Co Ltd | Micro-controller architecture capable of increasing the code density by changeable instruction format |
JP3729759B2 (ja) * | 2001-08-07 | 2005-12-21 | 株式会社ルネサステクノロジ | 圧縮された命令コードを読み出すマイクロコントローラ、命令コードを圧縮して格納するプログラムメモリ |
KR20040097212A (ko) * | 2002-03-27 | 2004-11-17 | 소니 가부시끼 가이샤 | 연산 처리 장치, 그 구축 방법, 연산 처리 시스템 및 연산처리 방법 |
US7665078B2 (en) * | 2003-08-21 | 2010-02-16 | Gateway, Inc. | Huffman-L compiler optimized for cell-based computers or other computers having reconfigurable instruction sets |
GB2414308B (en) * | 2004-05-17 | 2007-08-15 | Advanced Risc Mach Ltd | Program instruction compression |
US7818550B2 (en) * | 2007-07-23 | 2010-10-19 | International Business Machines Corporation | Method and apparatus for dynamically fusing instructions at execution time in a processor of an information handling system |
US7836285B2 (en) * | 2007-08-08 | 2010-11-16 | Analog Devices, Inc. | Implementation of variable length instruction encoding using alias addressing |
US20100312991A1 (en) * | 2008-05-08 | 2010-12-09 | Mips Technologies, Inc. | Microprocessor with Compact Instruction Set Architecture |
-
2009
- 2009-05-08 WO PCT/US2009/002893 patent/WO2009137108A1/en active Application Filing
- 2009-05-08 US US12/463,330 patent/US20090282220A1/en not_active Abandoned
- 2009-05-08 CN CN200980124104.0A patent/CN102077195A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104185839A (zh) * | 2012-03-15 | 2014-12-03 | 国际商业机器公司 | 将数据载入直到动态确定的存储器边界的方法 |
CN104185839B (zh) * | 2012-03-15 | 2017-06-06 | 国际商业机器公司 | 将数据载入寄存器的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2009137108A1 (en) | 2009-11-12 |
US20090282220A1 (en) | 2009-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102077195A (zh) | 具有紧凑指令集架构的微处理器 | |
US7343482B2 (en) | Program subgraph identification | |
US7318143B2 (en) | Reuseable configuration data | |
KR100589744B1 (ko) | 구성가능한 프로세서를 설계하기 위한 자동화된 프로세서생성 시스템 및 방법 | |
US8893079B2 (en) | Methods for generating code for an architecture encoding an extended register specification | |
US5958048A (en) | Architectural support for software pipelining of nested loops | |
US8166281B2 (en) | Implementing instruction set architectures with non-contiguous register file specifiers | |
US7493474B1 (en) | Methods and apparatus for transforming, loading, and executing super-set instructions | |
JP4283131B2 (ja) | プロセッサ及びコンパイル方法 | |
US20060095721A1 (en) | Tightly coupled accelerator | |
EP2024815B1 (en) | Methods and apparatus for implementing polymorphic branch predictors | |
US6061780A (en) | Execution unit chaining for single cycle extract instruction having one serial shift left and one serial shift right execution units | |
US5983336A (en) | Method and apparatus for packing and unpacking wide instruction word using pointers and masks to shift word syllables to designated execution units groups | |
CN102200905A (zh) | 具有紧凑指令集架构的微处理器 | |
US5812809A (en) | Data processing system capable of execution of plural instructions in parallel | |
CN101495959A (zh) | 组合微处理器内的多个寄存器单元的方法和系统 | |
WO2003098379A2 (en) | Method and apparatus for adding advanced instructions in an extensible processor architecture | |
US20060010304A1 (en) | Systems for loading unaligned words and methods of operating the same | |
US20190065205A1 (en) | Variable length instruction processor system and method | |
EP1261914B1 (en) | Processing architecture having an array bounds check capability | |
US6292845B1 (en) | Processing unit having independent execution units for parallel execution of instructions of different category with instructions having specific bits indicating instruction size and category respectively | |
US7003651B2 (en) | Program counter (PC) relative addressing mode with fast displacement | |
EP0206653A2 (en) | Method and means for loading and storing data in a reduced instruction set computer | |
US7577824B2 (en) | Methods and apparatus for storing expanded width instructions in a VLIW memory for deferred execution | |
US6408380B1 (en) | Execution of an instruction to load two independently selected registers in a single cycle |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1157899 Country of ref document: HK |
|
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110525 |
|
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1157899 Country of ref document: HK |