KR20180104652A - 제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 명령의 인코딩 - Google Patents

제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 명령의 인코딩 Download PDF

Info

Publication number
KR20180104652A
KR20180104652A KR1020187023246A KR20187023246A KR20180104652A KR 20180104652 A KR20180104652 A KR 20180104652A KR 1020187023246 A KR1020187023246 A KR 1020187023246A KR 20187023246 A KR20187023246 A KR 20187023246A KR 20180104652 A KR20180104652 A KR 20180104652A
Authority
KR
South Korea
Prior art keywords
instructions
architecture
instruction
register
architecture register
Prior art date
Application number
KR1020187023246A
Other languages
English (en)
Other versions
KR102560426B1 (ko
Inventor
시몬 호시
요른 니스타드
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20180104652A publication Critical patent/KR20180104652A/ko
Application granted granted Critical
Publication of KR102560426B1 publication Critical patent/KR102560426B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30156Special purpose encoding of instructions, e.g. Gray coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 명령들을 더욱 효율적으로 인코딩하기 위한 다양한 인코딩 방식이 설명된다. 제 1 실시예에서는, 제 1 아키텍처 레지스터 번호를 제 2 아키텍처 레지스터 번호보다 크게 제한함으로써, 다른 연산을 인코딩하는데 사용하기 위해 인코딩을 확보한다. 제 2 실시예에서는, 제 1 및 제 2 아키텍처 레지스터 번호가 임의의 값을 취할 수 있지만, 제 1 및 제 2 아키텍처 레지스터 번호의 비교에 따라 제 1 종류의 처리 연산 및 제 2 종류의 처리 연산 중에서 한 개가 선택된다.

Description

제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 명령의 인코딩
본 발명은 데이터 처리 분야에 관한 것이다.
데이터 처리장치는 정해진 명령 세트 아키텍처(ISA)에 따라 인코드된 명령을 실행하도록 구성된 처리회로를 갖는다. 명령은 정해진 수의 비트들을 사용하여 표시되고, 이들 비트들이 디코드되어 어떤 처리 연산이 행해져야 하는지와 처리 연산중에 어떤 레지스터를 사용해야 하는지를 식별한다. 지원하는 것이 이론적으로 바람직한 다양한 종류의 처리 연산이 존재하지만, 각각의 명령에 대한 처리 파이프라인을 따라 명령들을 추가적인 비트들이 실행될 필요가 있어, 더 복잡한 디코딩 회로가 필요하고, 명령들의 크기에 따라 프로그램을 메모리에 기억하는데 필요한 메모리 공간이 늘어날 것이기 때문에, 추가적인 연산을 수용하기 위해 각 명령의 비트들의 수를 증가시키는 것은 ISA에 따라 명령을 실행하는 처리장치의 회로 면적 및 소비전력을 증가시키는 경향이 있기 때문에, ISA 설계는 도전적일 수 있다. 한편, 회로 면적과 에너지를 절감하기 위해, 명령 내부의 비트들의 수를 특정한 수로 제한할 수 있지만, 이것은 어떤 연산이 ISA에 의해 지원되는지에 대한 절충을 필요로 할 수 있다.
적어도 일부 실시예는,
데이터 값들을 기억하는 복수의 레지스터와,
명령들에 응답하여 처리 연산을 행하는 처리회로를 구비하고,
제 1 및 제 2 아키텍처 레지스터 번호들을 식별하는 제 1 클래스의 명령들 중에서 한 개에 응답하여, 상기 처리회로가 상기 제 1 및 제 2 아키텍처 레지스터 번호들에 대응하는 제 1 및 제 2 레지스터를 사용하여 대응하는 처리 연산을 행하도록 구성되고,
상기 제 1 클래스의 명령들의 명령들은 상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 크도록 제한하는 명령 인코딩을 갖는 장치를 제공한다.
적어도 일부 실시예는,
명령들에 응답하여 처리 연산을 행하도록 처리회로를 제어하는 단계를 포함하고,
제 1 및 제 2 아키텍처 레지스터 번호들을 식별하는 제 1 클래스의 명령들 중에서 한 개에 응답하여, 상기 처리회로가 상기 제 1 및 제 2 아키텍처 레지스터 번호들에 대응하는 제 1 및 제 2 레지스터를 사용하여 대응하는 처리 연산을 행하도록 제어되고,
상기 제 1 클래스의 명령들의 명령들은 상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 크도록 제한하는 명령 인코딩을 갖는 데이터 처리방법을 제공한다.
적어도 일부 실시예는,
데이터 값들을 기억하는 복수의 레지스터와,
명령들에 응답하여 처리 연산을 행하는 처리회로를 구비하고,
제 1 및 제 2 아키텍처 레지스터 번호들을 식별하는 명령 인코딩을 갖는 명령에 응답하여, 상기 처리회로는, 상기 제 1 및 제 2 아키텍처 레지스터 번호들의 비교에 따라, 상기 제 1 및 제 2 아키텍처 레지스터 번호들에 대응하는 레지스터들을 사용하여 제 1 종류의 처리 연산을 행할 것인지 제 2 종류의 처리 연산을 행할 것인지를 선택하도록 구성된, 장치를 제공한다.
적어도 일부 실시예는,
제 1 및 제 2 아키텍처 레지스터 번호들을 식별하는 명령 인코딩을 갖는 명령에 응답하여, 상기 제 1 및 제 2 아키텍처 레지스터 번호들을 비교하는 단계와,
상기 제 1 및 제 2 아키텍처 레지스터 번호들의 비교에 따라, 상기 제 1 및 제 2 아키텍처 레지스터 번호들에 대응하는 레지스터들을 사용하여 제 1 종류의 처리 연산을 행할 것인지 제 2 종류의 처리 연산을 행할 것인지를 선택하는 단계를 포함하는 데이터 처리방법을 제공한다.
전술한 장치들 중에서 어느 한 개에 대응하는 가상머신 실행환경을 제공하도록 컴퓨터를 제어하기 위한 컴퓨터 프로그램을 기억한 컴퓨터 판독가능한 기억매체가 제공된다. 기억매체는 비일시적인 기억매체이다.
본 발명의 또 다른 발명내용, 특징 및 이점은 다음의 첨부도면을 참조하여 주어지는 이하의 실시예의 상세한 설명으로부터 명확해질 것이다.
이하, 다음의 첨부도면을 참조하여 본 발명의 실시예를 설명한다.
도 1은 명령을 처리하는 처리 파이프라인을 갖는 데이터 처리장치의 일례를 개략적으로 나타낸 것이다.
도 2는 모든 값들을 취하는 제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 명령 인코딩의 일례를 나타내 것이다.
도 3은 제 1 아키텍처 레지스터 번호가 제 2 아키텍처 레지스터 번호보다 크도록 제한되는 제 1 클래스의 명령들과 단일 소스 아키텍처 레지스터 번호를 인코딩하는 제 2 클래스의 명령들을 제공하는 명령 인코딩의 일례를 나타낸 것이다.
도 4a 및 도 4b는 도 3에 도시된 제 1 클래스의 명령들의 제 1 및 제 2 레지스터 필드들의 2가지 가능한 인코딩을 나타낸 것이다.
도 5는 도 3에 도시된 것과 같이 인코딩된 명령들을 디코딩하는 디코드 스테이지의 일례를 나타낸 것이다.
도 6a는 도 4a의 인코딩 방식에 따라 제 1 및 제 2 레지스터 필드를 디코딩하는 회로의 제 1 예를 나타낸 것이다.
도 6b는 디코딩 회로의 제 2 예를 나타낸 것이다.
도 7은 명령을 처리하는 방법을 나타낸 것이다.
도 8은 제 1 및 제 2 아키텍처 레지스터 번호를 비교하는 레지스터 비교기를 구비한 명령 디코딩 회로의 제 2 예를 나타낸 것이다.
도 9는 비교 명령의 인코딩 일례를 나타낸 것이다.
도 10은 명령을 처리하는 방법을 나타낸 것이다.
도 11은 사용되는 가상머신 구현예를 나타낸 것이다.
이하에서 일부 구체적인 실시예를 나타낸다. 이때, 본 발명은 이들 실시예에 한정되지 않는다.
처리회로는 제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 일부 명령을 지원한다. 이와 같은 명령에 응답하여, 처리회로는 제 1 및 제 2 아키텍처 레지스터 번호에 대응하는 제 1 및 제 2 레지스터를 사용하여 대응하는 처리 연산을 행한다. 통상적인 ISA는 정해진 수의 아키텍처 레지스터를 지정하고, 이들 아키텍처 레지스터들 모두가 어떤 조합으로 제 1 및 제 2 아키텍처 레지스터 번호들로 지정될 수 있도록 명령을 인코딩한다.
그러나, 본 발명자들은, 어떤 레지스터들이 제 1 및 제 2 아키텍처 레지스터 번호로 참조될 것인지 전환하는 것이 다른 결과를 제공하지 않기 때문에, 이와 같은 접근방법에 약간의 쓸데없는 중복이 존재한다는 것을 인식하였다. 예를 들어, 레지스터 R1 및 R2에 기억된 값들을 가산하는 가상 명령은 레지스터 R2 및 R1에 있는 값들을 가산하는 가상 명령과 같은 결과를 제공한다. 따라서, 통상의 ISA는 정해진 처리 연산에 대해 정해진 양의 레지스터들의 두가지 순서를 별개로 인코딩함에 있어서 상당한 양의 명령 인코딩 공간을 전부 사용할 수 있다. 본 발명은 이와 같은 쓸데없는 중복을 활용하여 더욱 효율적인 명령의 인코딩을 제공할 수 있는 기술을 제공한다.
제 1 예에서는, 제 1 아키텍처 레지스터 번호를 제 2 아키텍처 레지스터 번호보다 크게 제한하는 명령 인코딩을 갖는 제 1 클래스의 명령들이 제공된다. 제 1 아키텍처 레지스터 번호가 제 2 아키텍처 레지스터 번호 이하가 되는 옵션을 제거함으로써, 아키텍처 레지스터들의 유효한 조합들의 수가 줄어들고, 이것은 다른 처리 연산을 전송하기 위해 사용하기 위한 일부 명령 인코딩을 확보할 수 있다. 아키텍처 레지스터들의 모든 조합이 지정될 수 있는 경우에 비해, 제 1 아키텍처 레지스터 번호를 제 2 아키텍처 레지스터 번호보다 크게 제한함으로써, 유효한 레지스터 쌍 인코딩들의 수가 절반 이상 줄어들 수 있어, 한 개 더 적은 비트를 사용하여 이것들을 식별할 수 있다. 이와 같은 구성은, 전체적으로 더 적은 수의 비트를 사용하여 명령들이 인코딩될 수 있도록 하여, 명령을 실행하는 처리장치의 에너지와 전력을 절감하거나, 추가적인 비트가 행해질 처리 연산을 인코딩하기 위해 이용가능하게 될 것이므로, 정해진 수의 비트들이 더 넓은 범위의 다양한 처리 연산을 표시하도록 허용하여 부가 기능을 지원할 수 있다.
간략을 위해, 제 1 아키텍처 레지스터 번호를 이하에서는 Rx로 부르고, 제 2 아키텍처 레지스터 번호를 Ry로 부르며, 이때 Rx>Ry이다.
장치는 명령에 응답하여 처리회로에 의해 액세스될 수 있는 하드웨어에 설치된 물리 레지스터를 갖는다. 일부 실시예에서, 아키텍처 레지스터 번호 Rx, Ry는 사용할 물리 레지스터를 식별해도 된다. 이 경우에, Rx>Ry인 제약은 처리할 데이터를 어떤 물리 레지스터가 기억할지를 제한한다. 그러나, 다른 실시예는, 명령에 의해 지정된 아키텍처 레지스터 번호들이 하드웨어에 설치된 다른 물리 레지스터들에 매핑되는 레지스터 재명명(renaming)을 지원한다. 이 경우에, 명령 인코딩이 Rx>Ry를 요구하지만, 레지스터 재명명 회로가 여전히 지정된 아키텍처 레지스터 번호들을 이용가능한 물리 레지스터에 매핑할 자유를 갖기 때문에, 이것이 어떤 식으로도 물리 레지스터들의 선택을 제한할 필요가 없다. 이때, 명령 인코딩이 Rx>Ry가 되도록 아키텍처 레지스터 번호들을 제한하지만, 대응하는 레지스터들에 기억되는 데이터에는 제약이 존재하지 않는데 Rx 및 Ry에 기억된 데이터는 임의의 값을 가져도 된다.
처리회로는, Rx가 Ry보다 크도록 제한되는 명령 인코딩에 따라 제 1 클래스의 명령들을 디코드하는 디코딩 회로를 갖는다.
제 1 클래스의 명령들의 적어도 일부에 대해, 제 1 및 제 2 아키텍처 레지스터 번호들 Rx, Ry는, 대응하는 명령에 응답하여 처리할 피연산자 값들을 기억하는 레지스터들을 식별하는 소스 아키텍처 레지스터 번호들이다(예를 들어, 산술 또는 논리 명령은 Rx>Ry인 아키텍처 레지스터들에 의해 식별된 그 자신의 소스 피연산자들을 갖는다. 명령은 연산의 결과가 기록되는 목적지 레지스터를 더 지정해도 된다. 목적지 레지스터의 선택은 제한되지 않으므로, 소스 아키텍처 레지스터들 Rx, Ry의 선택에 무관하게, 임의의 아키텍처 레지스터가 목적지 아키텍처 레지스터로 선택될 수 있다.
한편, 제 1 클래스의 명령들 중에서 다른 명령들에 대해서는, 제 1 및 제 2 아키텍처 레지스터 번호들 Rx, Ry 중에서 한 개 또는 모두가 결과값이 기록되는 목적지 레지스터를 식별한다. 예를 들어, 로드 멀티플(load multiple) 명령은 Rx>Ry인 인코딩을 사용하여 메모리로부터 값이 로드될 2개의 목적지 레지스터 Rx, Ry를 지정할 수도 있다.
일 실시예에서, 제 1 클래스의 명령들은, 대응하는 처리 연산이 가환(commutative) 연산인 적어도 한 개의 가환 명령을 포함한다. 가환 연산은 정해진 세트의 피연산자들에 적용될 때 피연산자들이 입력되는 순서에 무관하게 동일한 결과를 제공하는 연산이다(예를 들어, A≠B이더라도 f(A, B)=f(B, A)인 함수 f(m, n)). 예를 들어, 2_3=3+2이므로 가산은 가환 연산이다. 가환 연산의 다른 예로는 승산, 절대차와, AND, OR 및 XOR 등의 일부의 비트 단위의 논리 연산을 들 수 있다. 가환 연산에 대해, Rx>Ry인 인코딩 이외에 Rx<Ry인 인코딩을 허용하는 것은, 입력된 피연산자들의 순서에 무관하게 동일한 결과가 생성될 것이기 때문에 완전히 쓸데없는 중복이 될 것이다. 따라서, 이와 같은 연산에 대해서는 Rx<Ry인 인코딩의 손실이 ISA에 의해 제공된 기능에 영향을 미치지 않는다. 컴파일러는 예를 들어 ADD R2, R3 대신에 간단히 명령 인코딩 ADD R3, R2를 선택한다.
일부 가환 연산에 대해, 2개의 동일한 피연산자들에 대해 이 연산을 적용하는 것이 여전히 흥미로울 것으로, Rx=Ry인 인코딩을 제외하는 것은 기능을 어느 정도 제한한다. 그러나, 일부 종류의 연산에 대해서는, 이 연산을 2개의 동일한 입력에 적용하는 것과 동일한 결과를 제공하게 되는 ISA에 의해 지원된 또 다른 연산이 이미 존재한다(예를 들어, Rx+Rx는 Rx*2 또는 1 비트 위치만큼의 좌측 자리옮김과 동등하므로, 두 개의 소스 레지스터들이 동일하게 되는 것을 허용하는 가산 연산이 필수적인 것은 아닐 수 있다).
또한, 2개의 동일한 입력에 대해 적용된 특정한 가환 연산이 명령 세트 아키텍처의 다른 것에서 같은 값을 갖지 않더라도, 동일한 피연산자 값이 2개의 다른 아키텍처 레지스터 Rx, Ry에 기록될 수도 있으므로, 대응하는 가환 명령이 Rx>Ry로 여전히 실행될 수 있다.
또한, 정해진 가환 연산에 대해 이 연산을 2개의 동일한 피연산자들에 적용하는 것이 너무 자주 사용될 것 같아 이것을 ISA에서 명시적으로 지원하는 것이 바람직하거나, 또는 2개의 다른 레지스터를 사용하여 동일한 결과를 기억하는 것과 관련된 부가된 레지스터 압박을 회피하는 것이 바람직한 경우에는, 이 특정한 가환 연산을 동일한 입력들을 사용하여 행하기 위해 (예를 들어, 이와 다른 옵코드를 갖는) 두 번째 명령 종류가 명령 세트 인코딩 공간 내부의 다른 것에서 구현될 수도 있다. 예를 들어, Rx>Ry인 인코딩을 사용한 승산 명령 MUL Rx, Ry 이외에, MUL Rx, Rx를 실행하여 레지스터 Rx에 있는 값을 제공하는 제곱 명령에 대해 추가적인 인코딩이 할당될 수도 있다. 일반적으로, Rx=Ry일 때 이 연산을 행하는 것이 흥미로운 가환 연산의 수는 지원되는 가환 연산들의 총 수보다 적으므로, 연산들 중에서 몇 개가 Rx>Ry 및 Rx=Ry에 대해 각각 정의된 별개의 인코딩을 갖더라도, 전반적으로 필요한 명령 인코딩의 총 수가 줄어들 수 있다.
제 1 클래스의 명령들은 대응하는 처리 연산이 비가환 연산인 적어도 한 개의 비가환 명령을 더 포함한다. 비가환 연산은 피연산자들이 모두 같지 않을 때 피연산자들의 순서를 바꾸는 것이 다른 결과값을 생성하는 연산이다(예를 들어, A≠B일 때 f(A,B)≠f(B,A)인 함수 f(m,n)). 예를 들어, 4-1은 1-4와 같지 않기 때문에 감산은 비가환 연산이다. 비가환 연산의 다른 예로는 제산과 시프트 연산을 들 수 있다(예를 들어, 피연산자 B에 의해 지정된 비트 위치들의 수만큼 피연산자 A를 자리옮김하는 것은 일반적으로 피연산자 A에 의해 지정된 비트 위치들의 수만큼 피연산자 B를 자리옮김하는 것과 동일한 결과를 제공하지 않는다).
Rx>Ry를 제한하는 명령 인코딩은, Rx<Ry를 허용하는 것이 다른 결과를 생성할 것이므로 이것을 허용하는 것이 여전히 흥미로울 것이기 때문에, 비가환 명령을 위해 바람직하지 않을 것으로 예상할 수도 있다. 그러나, 명령 세트 아키텍처가 정해진 비가환 연산에 대해서만 Rx>Ry를 허용하더라도, 입력값들이 이전 명령들에 의해 다른 순서로 아키텍처 레지스터에 기록될 수도 있으므로, 아키텍처 레지스터 번호들 Rx, Ry에서의 제약에도 불구하고 비가환 연산이 여전히 올바른 순서로 올바른 값들에 적용될 수 있다. 예를 들어, 비가환 연산이 적용될 피연산자들을 발생하는 이전의 명령들의 목적지 레지스터들은, 비가환 연산에 대한 첫 번째 피연산자가 두 번째 피연산자에 대해 사용된 레지스터보다 더 높은 아키텍처 레지스터 번호를 갖는 레지스터 내부에 있도록 선택될 수도 있다. 이와 달리, 피연산자들이 제약 Rx>Ry를 준수하는 적절한 레지스터들 내부에 있고 비가환 연산 명령이 올바른 순서로 피연산자들을 사용하여 실행될 수 있도록 보장하기 위해, 비가환 명령 이전에 레지스터 이동 명령을 실행하여 한 개의 레지스터로부터 다른 레지스터로 데이터 값을 이동할 수도 있다.
그러나, 추가적인 이동 명령을 실행하거나 비가환 연산에 대한 피연산자들을 기억할 수 있는 레지스터들을 제한하는 것은 성능에 영향을 미칠 수도 있다. 이것을 방지하고 컴파일러 설계를 단순화하기 위해, 제 1 클래스의 명령들은 동일한 종류의 비가환 연산에 대응하는 적어도 한쌍의 상보적인 비가환 명령들을 포함한다. 각 쌍에 대해, 이 쌍 중에서 한 개의 명령은 이 쌍의 나머지 명령과 다른 순서로 제 1 및 제 2 피연산자들을 사용한 비가환 연산을 행하도록 처리회로를 제어한다. 예를 들어, 상보적인 쌍의 감산 명령들이 제공되는데, 예를 들어, SUB Rx,Ry는 Rx-Ry에 대응하고 SUBR Rx,Ry는 Ry-Rx에 대응한다. 비가환 연산의 비반전된 버전과 반전된 버전 모두를 별개의 명령들로 포함시킴으로써, 컴파일러는 모든 아키텍처 레지스터들 내부에 비반전 연산들의 피연산자를 배치할 수 있는 완전한 자유를 갖는다.
이것은 먼저 아키텍처 레지스터 번호 인코딩 Rx, Ry을 제한하는 목적으로부터 벗어난다고 예상할 수도 있다. 그러나, 중복 부분을 레지스터 지정 필드 이외의 명령의 다른 부분으로 이동시킴으로써, 인코딩 공간의 중복 부분들을 인접한 한 개의 부분으로 합칠 수 있어 이들 연산의 디코딩 및/또는 다른 연산을 위해 이와 같은 중복 부분을 환원하는 것을 더 간단하게 할 수 있기 때문에, 이와 같이 아키텍처 레지스터를 인코딩하는 것이 여전히 이점이 있다.
상보적인 비가환 명령들의 쌍은 다양한 방식으로 구별될 수 있다. 일부 경우에, 명령들의 쌍은 다른 옵코드를 가질 수 있다. 일부 경우에, 상보적인 쌍의 비가환 명령들의 옵코드들이 1 비트가 다른 것을 제외하고는 동일할 수 있는데, 이와 같은 접근방법은, 다른 비트가 레지스터들의 순서를 반전시키는 활성 로직(active logic)에 사용될 수 있기 때문에 디코딩 회로를 단순화할 수 있다. 이와 달리, 명령들의 쌍은 동일한 옵코드를 갖지만, 비가환 연산을 사용하여 피연산자들이 처리되는 순서를 지정하는 추가적인 비트필드를 가질 수도 있다.
이와 달리, Rx>Ry인 제 1 클래스의 명령들 이외에, Rx가 Ry보다 적도록 제한되는 추가적인 클래스의 명령들이 존재할 수도 있으며, 제 1 및 추가적인 클래스들 각각에 있는 한 개의 명령이 동일한 비가환 연산에 할당되지만(에를 들어, 옵코드의 1 비트가 Rx 및 Ry의 디코딩된 값들이 반전되는지 아닌지를 선택하여, Rx 및 Ry 중에서 어느 것이 더 큰지를 유효하게 역전시킬 수도 있다), 가환 연산은 제 1 클래스 또는 추가적인 클래스의 어느 한 개에 할당된 단일 명령만을 갖는다.
제 1 클래스의 명령들은, 제 1 아키텍처 레지스터 번호 Rx 및 제 2 아키텍처 레지스터 번호 Ry 사이의 연속된 범위에 있는 아키텍처 레지스터 번호들에 대응하는 복수의 레지스터를 사용하여 처리 연산을 행하도록 처리회로를 제어하는 적어도 한 개의 레지스터 범위 지정 명령을 포함한다. 예를 들어, 레지스터 범위 지정 명령은, 레지스터들과 메모리 내부의 대응하는 어드레스들 사이에서 데이터를 전달하는 로드 또는 스토어 멀티플 명령이거나, 레지스터들과 스택 사이에서 데이터를 전달하는 푸시 또는 팝 명령일 수 있다. 레지스터 범위 지정 명령에 대해서는, 올림 차순과 내림 차순 모두에서 범위를 인코딩할 수 있는 것에 상당한 이점이 존재하지 않으므로, Rx>Ry가 되도록 레지스터 인코딩을 제한함으로써, 일부의 명령 인코딩을 다른 연산을 인코딩하는데 이용가능하게 할 수 있어, ISA의 전체 인코딩을 더욱 효율적으로 할 수 있다. 이때, 레지스터 재명명을 지원하는 시스템에서는, 아키텍처 레지스터 번호들이 레지스터 범위 지정 명령에 의해 연속된 범위로서 식별되기는 하지만, 각각의 아키텍처 레지스터 번호가 물리 레지스터 파일 내부의 별개의 물리 레지스터들에 매핑될 수 있기 때문에, 대응하는 물리 레지스터 번호들이 연속된 범위에 있을 필요는 없다.
제 1 및 제 2 아키텍처 레지스터 번호들 Rx, Ry는 제 1 클래스의 명령들의 명령 인코딩에서 명시적으로 식별되지 않아도 된다. 따라서, 장치는 제 1 클래스의 명령들의 명령 인코딩을 디코딩하여 제 1 및 제 2 아키텍처 레지스터 번호들 Rx, Ry를 식별하는 레지스터 디코딩 회로를 구비한다. 일부 경우에, 레지스터 디코딩 회로는 명령 그 자체를 디코딩하는 명령 디코더의 일부일 수 있으므로, 명령 디코더가 명령의 옵코드를 디코딩하여 어떤 처리 연산을 행해야 할지 식별하고 명령의 레지스터 식별 비트들을 디코딩하여 실제 아키텍처 레지스터 번호들 Rx, Ry를 식별한다. 다른 경우에, 레지스터 디코딩 회로는 명령 디코더와 별개로 설치될 수도 있다. 예를 들어, 명령 디코더가 먼저 옵코드를 디코드할 수 있으며, 그후 레지스터 재명명 스테이지 또는 발행 스테이지 등의 다음 스테이지에서, 아키텍처 레지스터 번호들 Rx, Ry가 디코드될 수도 있다. 그러나, 일반적으로 제 1 및 제 2 아키텍처 레지스터 번호들 Rx, Ry가 더 일찍 식별될 수 있을수록, 동일한 아키텍처 레지스터를 지정하는 명령들 사이의 위험요인을 더 빨리 식별할 수 있으므로, 레지스터 디코딩 회로를 가능한한 일찍, 예를 들어 명령 디코딩 스테이지에서 설치하는 것이 유리할 수 있다.
일부 경우에, 아키텍처 레지스터 번호들 Rx, Ry의 인코딩은, 중간값, 제어 플래그 또는 다른 파라미터 등의 명령의 적어도 한 개의 추가적인 파리미터의 인코딩과 결합될 수도 있다. 이 경우에, 명령의 공통된 비트필드(또는 다수의 비트필드들)를 디코딩하여 Rx, Ry와 추가적인 파라미터를 식별할 수 있으며, Rx>Ry인 레지스터 쌍들에만 비트필드(들)의 유효한 인코딩이 할당된다. 이와 같이 레지스터 번호들 Rx, Ry의 인코딩과 추가적인 파라미터의 인코딩을 결합하는 것은, 레지스터와 추가적인 파라미터에 대해 별개의 필드들이 제공되는 경우보다 명령이 더욱 효율적으로 인코딩될 수 있게 한다.
다른 실시예에서는, 제 1 클래스의 명령들의 명령 인코딩의 일부 비트들이 특별히 제 1 및 제 2 아키텍처 레지스터 번호들 Rx, Ry를 식별하기 위해 할당되고, 명령의 다른 파라미터들이 명령의 다른 필드들에서 별개로 식별된다. 이 경우에, 2N개의 아키텍처 레지스터를 제공하는 ISA에 대해, 제 1 클래스의 명령들에서는, 제 1 및 제 2 아키텍처 레지스터 번호들 Rx, Ry가 명령 인코딩의 2N-1개의 비트들을 사용하여 표시된다. 예를 들어, 아키텍처가 16 또는 32개의 레지스터를 제공하면, Rx 및 Ry는 각각 7 또는 9 비트를 사용하여 표시될 수 있다. 이에 반해, 명령 인코딩이 아키텍처 레지스터 번호들 Rx, Ry의 자유로운 선택을 허용한다면, 2N 비트가 필요할 것이다. 따라서, 레지스터 지정 필드에 1 비트를 절감함으로써, 명령 폭이 줄어들 수 있도록 하거나, 다른 연산의 인코딩시에 사용하기 위해 명령의 다른 부분에 있는 인코딩 공간을 확보한다.
2N개의 아키텍처 레지스터가 존재하고 Rx 및 Ry가 2N-1의 레지스터 식별 비트를 사용하여 표시될 때, Rx>Ry인 Rx 및 Ry의 조합의 수가 2N2N-1/2가 되어, 레지스터 식별 비트들의 2N-1개의 여분의 값을 남기며, 이것은 다른 목적으로 사용될 수 있다. 이들 여분의 인코딩의 일부를 사용하여 명령 옵코드 또는 명령 인코딩의 다른 부분들이 제 1 클래스의 명령들과 다르게 해석될 수 있는 제 2 클래스의 명령들을 표시할 수 있으므로, 다른 연산들을 인코딩하기 위해 다른 옵코드들이 자유롭게 사용될 수 있다.
에를 들어, 제 2 클래스의 명령들은, 한 개의 입력 피연산자만을 필요로 하여 한 개의 소스 아키텍처 레지스터 번호만을 지정할 필요가 있는 명령들을 포함한다. 예를 들어, 이와 같은 단일 입력 명령들은, 지정된 레지스터의 비트들의 순서를 역전시키거나, 또는 특정한 레지스터에 기억된 데이터 값 내부의 선두 제로들의 수를 계수하는 명령을 포함한다. 떠한, 2개의 동일한 입력에 연산을 적용하는 것이 흥미로운 전술한 가환 연산이 존재해도 된다(예를 들어, 전술한 제곱 명령). 이와 같은 명령은 레지스터 식별 비트들의 여분의 비트 패턴들의 일부를 사용하여 인코딩됨으로써, 이들 단일 입력 연산을 위해 다른 옵코드들을 전부 사용할 필요성을 없앨 수 있다.
여분의 비트 패턴들의 수가 모든 가능한 아키텍처 레지스터들을 단일 입력 연산의 단일 소스 레지스터로서 식별하는데 충분하지 않을 수도 있으므로, 제 2 클래스의 명령들에 대해, 제 1 클래스의 명령들의 옵코드 필드의 비트가, 적어도 레지스터 식별 비트들의 서브셋과 함께, 단일 소스 레지스터를 식별한다. 따라서, 제 2 클래스의 명령들의 옵코드가 사실상 1 비트 더 짧으므로, 제 1 클래스의 명령들보다 제 2 클래스의 명령들에서 더 적은 수의 명령들이 존재한다.
제 1 클래스의 명령들에 대해, 주어진 비트들의 패턴에서 Rx와 Ry를 인코드하는데 사용될 수 있는 다양한 인코딩 방식이 존재한다. 가장 일반적으로는, 레지스터 식별 비트들의 각각의 가능한 비트 패턴이 Rx>Ry인 정해진 쌍의 레지스터들 Rx, Ry에 임의로 매핑되고, 전술한 제 2 클래스의 명령들을 위해 사용될 수 있는 일부 비트 패턴 여분을 남긴다. 그러나, 일부 인코딩 방식은 다른 것보다 복잡한 디코딩 회로를 필요로 할 수 있다.
특히 효율적인 인코딩은, Ry의 최상위 비트가 0일 때에는 Rx에 의존하고 Ry의 최상위 비트가 1일 때에는 Rx의 모든 비트들의 반전 결과에 의존하는 제 1 레지스터 필드 A와, Ry의 최상위 비트 이외의 Ry의 나머지 비트들에 의존하는 값을 갖는 제 2 레지스터 필드 B를 제공하는 것이다. 이것은 A 및 B의 비교에 따라 A 필드의 콘텐츠를 선택적으로 플립(flip)함으로써 디코드되어, Rx 및 Ry가 비교적 작은 회로로 디코드될 수 있다.
일 실시예에서, 제 2 레지스터 필드 B는 Rx의 대응하는 비트들과 Ry의 나머지 비트들의 비트 단위의 배타적 OR(XOR)의 결과에 따른 값을 갖는다. 먼저, 제 2 클래스의 명령들을 위해 재사용된 여분의 비트 패턴들이, 제 2 레지스터 필드 B의 모든 비트들이 제로이고 제 1 레지스터 필드 A의 최상위 비트도 제로인 인코딩 내부에 합쳐져, 제 2 클래스의 명령들의 디코딩을 더 간단하게 한다. 또한, 디코드 로직은 다른 인코딩을 디코딩하는 로직에 비해 비교적 간단하고 빠르다.
또 다른 실시예에서, 제 2 레지스터 필드 B는, Ry의 최상위 비트가 0일 때에는 Ry의 나머지 비트들에 의존하고 Ry의 최상위 비트가 1일 때에는 Ry의 나머지 비트들의 반전 결과에 의존하는 값을 갖는다. 이와 같은 접근방법에 의해, 여분의 인코딩은 B의 대응하는 비트들과 동일한 A의 최하위 비트들을 갖는다.
아키텍처 레지스터 번호 인코딩에서 중복을 이용하는 또 다른 기술은, 어떤 아키텍처 레지스터들이 Rx 및 Ry로서 지정될 것인지의 자유로운 선택을 허용하지만, Rx 및 Ry의 비교로부터 일부 추가적인 정보를 유도하는 것이다. 예를 들어, 처리회로는 Rx 및 Ry의 비교에 근거하여 Rx, Ry에 대응하는 레지스터들을 이용하여 제 1 종류의 처리 연산을 행할 것인지 제 2 종류의 처리 연산을 행할 것인지 선택한다. 일반적으로, 제 1 및 제 2 종류의 처리 연산은 입력값들의 적어도 일부 조합에 대해 다른 결과를 발생하는 처리 연산이어도 된다. 따라서, 전술한 것과 같이 레지스터 인코딩을 제한하는 것 대신에, 레지스터 인코딩이 이용가능한 아키텍처 레지스터 번호들 중에서 어느 것으로부터 선택될 수 있지만, 아키텍처 레지스터 번호들을 비교함으로써, 적어도 한 개의 추가 정보가 유도될 수 있으며, 그후 이것은, 명령 인코딩의 나머지 부분들이 동일하더라도, 처리회로에 의해 이와 다른 종류들의 처리 연산이 행해질 수 있도록 명령이 디코드되는 방법에 영향을 미칠 수 있다. 마찬가지로, 이것은 이 추가 정보를 식별하기 위해 인코딩의 다른 비트를 제공할 필요성을 없애, 더 짧은 명령을 허용하거나, 다른 목적을 위해 인코딩의 추가 비트를 확보함으로써 정해진 수의 명령 비트들을 사용하여 증가된 기능이 지원될 수 있게 할 수 있다.
일부 명령에 대해, Rx>Ry일 때, 처리회로가 제 1 종류의 처리 연산을 행하고, Rx<Ry일 때, 처리회로가 제 2 종류의 처리 연산을 행한다. 따라서, 피연산자들이 인코딩되는 순서는 사실상 처리 연산의 종류를 선택하기 위한 옵코드의 추가적인 비트를 제공한다.
이와 같은 접근방법은 제 1 및 제 2 종류의 처리 연산이 서로 다른 가환 연산일 때 특히 유용하다. 전술한 것과 같이, 가환 연산에 대해서는, 가산 연산이 정해진 쌍의 레지스터들에 적용될 때, 이들 레지스터들 중에서 어느 것이 제 1 피연산자 또는 제 2 피연산자로서 지정되는지에 무관하게 결과가 동일해진다. 따라서, 정해진 명령 옵코드에 대해 레지스터들이 지정되는 순서를 사용하여 다른 정보를 전달하여도 된다. 일부 경우에 가환 연산들은 완전히 다를 수 있다. 예를 들어, 제 1 종류의 처리 연산이 가산이고 제 2 종류의 처리 연산이 XOR일 수 있다. 다른 경우에, 제 2 및 제 2 종류의 처리 연산이 기본적으로 동일한 종류의 산술 또는 논리 연산에 해당하지만, 제 2 종류의 처리 연산이 제 1 종류의 수정된 버전이어도 된다(예를 들어, 제 2 종류의 연산이 제 1 종류의 연산의 결과의 절대 크기를 반환한다).
Rx 및 Ry의 자유로운 선택이 존재하고 Rx>Ry 및 Ry<Rx가 각각 제 1 및 제 2 처리 연산에 대응하면, Rx가 Ry와 동일한 일부 인코딩이 존재할 것이다. 이것들은 다음과 같이 다양한 다른 방법으로 처리될 수 있다:
· 일부 명령에 대해, Rx=Ry일 때 처리회로는 제 1 종류의 처리 연산 또는 제 2 종류의 처리 연산을 선택한다. 예를 들어, 제 1 종류의 처리 연산은 Rx≥Ry일 때 선택되고 제 2 종류의 처리 연산은 Rx<Ry일 때 선택될 수 있다. Rx=Ry일 때 이 두가지 종류의 연산들의 인코딩이 의미가 통하지 않는 일부 종류의 처리 연산이 존재한다. 예를 들어, 제 1 종류의 연산이 감산이고, 제 2 종류의 연산이 감산의 결과의 절대 크기를 발생하는 경우, Rx=Ry일 때 이들 모든 연산이 0의 결과값을 발생하게 되므로, Rx=Ry일 때 2가지 종류의 연산에 대해 별개의 인코딩을 제공함에 있어서 값이 존재하지 않게 될 것이고, 그 대신에 Rx=Ry일 때 이것은 제 1 종류의 연산이 선택되게 한다.
· 이와 달리, 일부 명령에 대해서는 Rx=Ry일 때 제 3 종류의 처리 연산이 행해진다. 따라서, Rx=Ry일 때의 인코딩이 Rx>Ry 또는 Rx<Ry일 때의 연산과 전혀 다른 연산을 발생할 수 있다.
· 또 다른 접근방법은, 특정한 명령에 대해, Rx=Ry일 때의 인코딩이 단순히 어떤 종류의 처리 연산에도 대응하지 않는 무효 인코딩이 되는 것이다. 이와 같은 인코딩과 마주치면, 명령 디코더는 미정의 명령을 발생하거나 명령을 NOP로서 취급한다.
ISA의 모든 명령이 Rx=Ry일 때의 경우를 처리하기 위해 동일한 접근방법을 사용할 필요는 없다. 주어진 ISA는 이들 접근방법들 중에서 한 개를 이용하는 일부 명령과 다른 접근방법을 이용하는 다른 명령을 갖는다.
다른 명령에 대해서는, 제 1 종류의 처리 연산이 Rx와 Ry가 다를 때 행해질 수 있으며, 제 2 종류의 처리 연산이 Rx가 Ry와 같을 때 행해질 수 있다. 이것은 제 1 종류의 처리 연산이 비가환 연산일 때 특히 유용하다. 비가환 연산에 대해서는, 피연산자들의 순서가 역전될 때 비가환 연산이 다른 결과를 발생할 것이기 때문에, 정해진 레지스터 쌍이 인코드될 수 있는 가능한 순서가 흥미로울 수 있다. 그러나, 일부 비가환 연산에 대해서는, 모든 피연산자들이 동일할 때, 결과가 흥미롭지 않거나 대안이 되는 연산을 사용하여 생성될 수도 있다. 예를 들어, BIC 연산(Rx AND(NOT Ry))에 대해, Rx=Ry일 때 결과값은 항상 0이므로, NIC의 인코딩 대신에, Rx=Ry일 때의 연산은, 이와 다른 제 2 종류의 처리 연산, 예를 들어, 레지스터 Rx에 있는 데이터 값의 모든 비트를 반전하기 위한 비트 반전 연산을 발생할 수도 있다. Rx=Ry일 때 결과값이 흥미롭지 않은 비가환 연산의 다른 예는, 정수 감산(Rx-Ry가 항상 0), 제산(Rx/Ry가 항상 1) 또는 ORM(ORN B는 A OR(NOT B)와 동등하므로, Rx ORN Rx는 항상 모두가 1인 비트 패턴, 즉 0xffff... 또는 -1이다)이다.
장치는, 제 1 및 제 2 아키텍처 레지스터 번호들 Rx, Ry를 비교하는 레지스터 번호 비교회로와, 명령의 옵코드와 상기 레지스터 번호 비교회로에 의해 행해진 비교 결과에 근거하여 행하려는 처리 연산의 종류를 식별하는 디코딩 회로를 갖는다. 예를 들어, 옵코드가 레지스터 비교로부터 유도된 추가적인 옵코드 비트에 의해 보완될 수 있으며, 이 추가적인 옵코드 비트는 옵코드와 함께 디코드되어 레지스터를 사용하여 행해질 필요한 처리 연산을 식별할 수 있다. 이것은 명시적인 명령 인코딩에 있어서 이 추가적인 옵코드 비트를 표시할 필요성을 없앤다.
Rx>Ry 및 Rx<Ry일 때 각각 서로 다른 연산들을 행하는 것이 유용한 명령의 일례는 비교 명령이며, 이 비교 명령에 대해, 제 1 종류의 처리 연산은 제 1 및 제 2 피연산자가 동일한지 여부의 판정을 포함하고, 제 2 종류의 처리 연산은 제 1 및 제 2 피연산자가 동일하지 않은지 여부의 판정을 포함한다. 동일 및 동일하지 않은지의 비교는 가환적이기 때문에, Rx>Ry 및 Rx<Ry 모두를 표시 가능하게 할 필요는 없으므로, 이것들은 동일 조건 또는 동일하지 않는 조건이 사용될 것인지를 나타내는 레지스터 번호들의 상대적인 순서를 갖는 공통된 인코딩을 이용하여 표현될 수 있다. Rx=Ry일 때의 인코딩은 동일 및 동일하지 않는 조건을 더 이상 구별할 수 없지만, 주어진 값이 그 자신과 같은지 같지 않은지의 비교는 보통 다른 연산을 사용하여 평가될 수 있다.
특히, 비교 명령은 비교 조건 필드를 갖는다. 비교 조건 필드가 제 1 값을 가질 때, 처리회로는 Rx>Ry이면 제 1 및 제 2 피연산자가 동일한지 판정하고, Rx<Ry이면 제 1 및 제 2 피연산자가 동일하지 않은지 판정한다. 비교 조건 필드가 제 2 값을 가질 때, 처리회로는, Rx>Ry 또는 Rx<Ry에 무관하게, (i) 제 1 피연산자가 제 2 피연산자보다 큰지 여부와, (ii) 제 1 피연산자가 제 2 피연산자 이하인지 여부 중에서 한 개를 판정한다. 비교 조건 필드가 제 3 값을 가지면, 처리회로는, Rx>Ry 또는 Rx<Ry에 무관하게, (i) 제 1 피연산자가 제 2 피연산자 이상인지 여부와, (ii) 제 1 피연산자가 제 2 피연산자보다 작은지 여부 중에서 한 개를 판정하도록 구성된다. 이와 같은 접근방법을 사용하여, 보통 예측되는 3비트 필드가 아니라, 2비트 필드가 6가지 다른 비교 조건(작다(<), 크다(>), 이하이다(≤), 이상이다(≥), 같다(==) 및 같지 않다(!=))을 표시하는데 충분하다. 이것은, 모든 비교 조건이 비교 조건 필드의 전용 인코딩을 갖지는 않더라도, 피연산자들이 반대의 순서로 지정된 다른 비교 조건들 중에서 한 개를 이용하여 동등한 결과를 적용할 수 있기 때문에 가능하다(예를 들어, Rx>Ry는 Ry≤Rx와 동등하다). 비교 결과 필드의 인코딩도 여분으로 남겨져 필요한 경우에 다른 연산을 전송하는데 사용된다.
전술한 모든 실시예들에 대해, 이 기술이 가상머신 실행 환경에서도 사용될 수 있다. 가상머신은 비일시적인 기억매체일 수 있는 컴퓨터 판독가능한 기억매체에 기억된 컴퓨터 프로그램으로서 설치된다. 그 자신이 명령 디코딩을 갖지 않는 컴퓨터 또는 전술한 것과 같이 인코딩된 명령을 처리하는 처리회로에 의해 실행될 때, 가상머신 프로그램은 이 인코딩에 따라 명령을 해석하고, 처리회로를 제어하여 대응하는 연산을 행한다. 예를 들어, 가상머신 프로그램은 명령을 호스트 컴퓨터의 처리회로에 의해 지원되는 원시 명령에 매핑한다. 이와 같은 구성은 전술한 인코딩 기술을 지원하는 다른 플랫폼을 위해 작성된 코드가 그 자신이 이들 기술을 지원하지 않는 컴퓨터 상에서 실행될 수 있도록 한다.
도 1은 명령에 응답하여 데이터 처리를 행하는 처리 파이프라인(4)을 포함하는 데이터 처리장치(2)의 일례를 개략적으로 나타낸 것이다. 파이프라인(4)은, 처리할 명령들을 명령 캐시(8)에서 페치하는 페치 스테이지(6)와, 페치된 명령을 디코드하는 디코드 스테이지(10)와, 레지스터 재명명을 행하여 디코드된 명령에 의해 지정된 아키텍처 레지스터 명시자를 하드웨어로 설치된 물리 레지스터(14)를 식별하는 물리 레지스터 명시자에 매핑하는 레지스터 재명명 스테이지(12)와, 명령의 피연산자들이 이용가능하게 되는 동안 실행을 기다리는 명령을 대기열로 만들고 피연산자가 이용가능해질 때 실행하기 위한 명령을 발행하는 발행 스테이지(16)와, 발행된 명령을 실행하는 실행 스테이지(18)를 포함하는 다수의 파이프라인 스테이지들을 구비한다. 발행 스테이지(16)는, 명령들이 명령 페치(8)로부터 페치 스테이지(6)에 의해 페치되었던 프로그램 순서와 동일한 순서로 명령이 실행되는 순차 파이프라인, 또는 프로그램 순서와 다른 순서로 실행하기 위해 명령들의 비순차 발행을 허용하는 비순차 파이프라인일 수 있다.
실행 스테이지(18)는, 산술 또는 논리 명령을 실행하는 산술/논리 유닛(ALU), 부동소수점 명령을 실행하는 부동소수점(FP) 유닛과, 메모리 시스템에서 데이터를 로드하기 위한 로드 명령 또는 메모리 시스템에 데이터를 기억하는 스토어 명령을 실행하는 로드/스토어 유닛 등의 다양한 종류의 명령을 처리하는 다수의 실행 유닛을 구비한다. 도 1에 도시된 것과 같이, 메모리 시스템은, 명령 캐시(8), 레벨 1(L1) 데이터 캐시(26), 레벨 2(L2) 캐시(28) 및 메인 메모리(30)를 구비한다. 본 실시예에서, L2 캐시(28)는 공유 명령/데이터 캐시로서 사용되지만, 별개의 L2 명령 및 데이터 캐시들이 설치될 수도 있다. 또한, 2개보다 많은 레벨의 캐시가 존재할 수도 있다는 것은 자명하다.
도 1은 단지 개략적인 것으로 간략을 위해 처리장치(2)의 모든 가능한 구성요소를 나타내지 않으므로, 장치(2)는 다른 구성요소를 포함할 수도 있다. 도 1에 도시된 파이프라인(4) 내부의 특정한 파이프라인 스테이지들의 배치는 단지 일례이며, 다른 종류의 파이프라인 스테이지가 설치될 수도 있다. 도 1은 실행 스테이지(18)가 레지스터(14)로부터 데이터 값을 판독하고 데이터 값을 다시 레지스터(14)에 기록하는 예를 나타내었지만, 다른 실시예에서는 명령이 발행 스테이지(16)에 계류되고 있는 동안 명령들의 소스 레지스터로부터 데이터가 판독될 수도 있다. 또한, 명령의 결과를 다시 레지스터(14)에 기록하기 위해 실행 스테이지의 뒤에 별개의 후기록 스테이지를 설치하는 것이 가능하다. 또한, 일부 파이프라인(4)은, 발행 스테이지(16)가 채워지더라도 명령이 재명명 스테이지(12)를 벗어날 수 있도록 버퍼를 제공하기 위해 재명명 스테이지(12)와 발행 스테이지(16) 사이에 별개의 배정(dispatch) 스테이지를 가져도 된다. 도 1에는 레지스터 재명명 스테이지(12)를 포함하는 파이프라인의 일례를 나타내었지만, 이것은 옵션이며 다른 파이프라인은 재명명 스테이지(12)를 생략해도 된다. 예를 들어, 원래의 프로그램 순서로 명령을 처리하는 순차 파이프라인은 재명명 스테이지(12)가 필요하지 않아도 된다. 재명명 스테이지(12)가 설치되지 않으면, 디코드된 명령에 의해 지정된 아키텍처 레지스터가 이들 명령에 응답하여 액세스할 물리 레지스터(14)를 식별한다.
디코드 스테이지(10)는 특정한 명령 세트 아키텍처(ISA)에 따라 명령을 디코드한다. 각각의 명령은 특정한 수의 비트를 갖고 ISA는 이들 비트가 해석되는 방법을 정의한다. 일반적으로, 처리회로(4)에 의해 지원되는 다양한 다른 처리 연산이 존재한다. 이해를 쉽게 하기 위해, 이하의 실시예는, 제한된 서브셋의 연산들, 예를 들어, 가산, 감산(SUB), AND, OR, 승산(MUL), 제산(DIV), 비트 역전(BITREV, 주어진 값의 모든 비트를 역전시키는 연산, 예를 들어, 0001의 비트를 역전시키면 1000을 제공한다)과 선두 제로 계수(count leading zero: CLZ, 예를 들어, 값 0011의 선두 제로 계수값은 2이다)에 초점을 맞춘다. 이때, 실제적으로는, 대부분의 ISA는 시프트, 스택이나 유사한 데이터 구조로부터 데이터를 푸시 또는 팝하기 위한 푸시 또는 팝 연산, 로드 또는 스토어 연산, 분기 연산 등의 다른 종류의 연산을 정의한다는 것은 자명하다. 이하의 실시예는 간략을 위해 단순화된다. 또한, 이하의 실시예는, 아키텍처가 명령에 응답하여 액세스가능한 16개의 아키텍처 레지스터를 정의하는 것으로 가정한다. 이때, 다른 아키텍처는 다른 수, 예를 들어, 32개의 레지스터를 정의할 수도 있다는. 이때, 이것은 하드웨어로 설치된 물리 레지스터(14)의 수를 제한하지 않는다. 레지스터 재명명이 지원되면, 물리 레지스터 파일은 아키텍처에서 정의된 아키텍처 레지스터보다 많은 수의 물리 레지스트를 가져된다.
도 2에 도시된 것과 같이, 전술한 연산들의 서브셋은 15비트를 사용하여 표시될 수 있는데, 4비트는 명령의 결과값이 기록되는 목적지 아키텍처 레지스터 Rd를 나타내고, 3비튼 행해질 연산의 종류를 식별하는 명령 옵코드 OPC를 나타내고, 4비트는 제 1 소스 아키텍처 레지스터 Rx를 나타내고, 4비트는 제 2 소스 아키텍처 레지스터 Ry를 나타낸다. ADD, SUB, AND, OR, MUL 및 DIV 명령은 모두 레지스터 Rx, Ry에 기억된 피연산자에 대해 대응하는 처리 연산을 행하기 위해 소스 레지스터 Rx 및 Ry를 필요로 하고 처리 파이프라인(4)을 제어하는 2 소스 명령이며, 결과값은 아키텍처 레지스터 R에 기록된다. BITREV 및 CLZ 명령은 1개의 소스 레지스터 Rx만을 필요로 하며, 이 경우에 Ry에 대응하는 비트필드는 무시된다. 이때, 도 2에 도시된 15개의 명령 비트는 단지 전체 인코딩 공간의 일부만을 나타낸다. 예를 들어, 명령은 15보다 큰 비트를 가져도 되고, 이 경우에 명령의 나머지 비트들은 도 2에 도시된 15비트가 도 2의 인코딩에 도시된 것과 해석되어야 하는지 또는 시프트 또는 로드/스토어 명령 등의 다른 명령을 위해 다른 방식으로 해석되어야 하는지 지정한다.
16개의 아키텍처 레지스터가 존재하고 소스 및 목적지 레지스터 Rx, Ry가 각각 4 비트로 표시되므로, 소스 레지스터 및 목적지 레지스터의 각각으로서 어떤 아키텍처 레지스터가 사용될지의 자유로운 선택이 존재한다. 그러나, 이와 같은 방식은, 예를 들어, 정해진 쌍의 아키텍처 레지스터들(예를 들어, R1 및 R2)에 적용될 때 ADD 명령이 R1 및 R2 중에서 어느 것이 제 1 소스 피연산자 Rx로서 지정되고 어느 것이 제 2 소스 피연산자 Ry로서 지정되는지에 무관하게 동일한 결과를 제공하기 때문에, 일부의 중복을 포함한다. 마찬가지로, AND, OR 및 MUL 명령은 소스 피연산자들 Rx 및 Ry의 순서의 역전이 결과값을 변경하지 않는 가환 명령이다.
이에 반해, 도 3은 전술한 연산들의 서브셋을 나타내기 위한 또 다른 인코딩을 나타낸 것으로, 도 3의 좌측 부분에 도시된 제 1 클래스의 명령들에 대해, 제 2 및 제 2 소스 아키텍처 레지스터들 Rx, Ry가 Rx를 Ry보다 크게 제한하는 인코딩을 사용하여 표시된다. 목적지 아키텍처 레지스터 Rd 및 옵코드 OPC는 여전히 각각 4비트 및 3비트 필드를 사용하여 표시된다.
도 3의 제 1 클래스의 명령들에서, 2개의 소스 아키텍처 레지스터 Rx, Ry는 모두 도 2의 8비트가 아니라 7비트를 포함하는 2개의 필드 A, B를 사용하여 표시된다. Rx 및 Ry에 근거하여 필드들 A 및 B를 인코딩하는 2가지 예는 도 4a 및 도 4b에 대해 이하에서 설명하지만, 일반적으로 후술하는 것과 같이 Rx>Ry인 인코딩 방식을 사용하여 Rx, Ry를 재인코딩함으로써, 1비트를 절감하고 일부 기능을 희생한다. 레지스터는 그 자신에 가산되어가 그 자신과 승산될 수 없으며, 단일 옵코드에서 DIV 또는 SUB에 대해 모든 고유한 케이스를 인코딩할 수 없다. ADD의 손실된 기능은 여전히 시프트에 의해 행해질 수 있다(피연산자를 1 비트 위치만큼 좌측 자리옮김하는 것은 피연산자를 그 자신에 가산하는 것과 동등하다).
Rx/Ry 코딩 방식은 본 실시예에서는 A, B 필드에 대해 8개의 미사용된 코드포인트를 갖는다. 이것들은 도 3의 우측 부분에 제 2 클래스의 명령들로 나타낸 것과 같이, 단일 입력 명령들에 대해 별개의 옵코드 공간을 전송하는데 사용된다. 한 개의 추가 비트가 단일의 미처리된 소스 레지스터를 완전히 지정하기 위해 필요하고, 이 비트 S는 옵코드 인코딩으로부터 취해져, 단일 입력 연산에 대한 2 비트 옵코드 공간과 2 입력 연산에 대한 별개의 3비트 옵코드 공간을 남긴다. BITREV 및 CLZ은 그것의 단일 입력을 제곱하는 MUL의 변종과 함께 이와 같은 1 입력 옵코드 공간에 놓인다. 이것은 2 입력 옵코드 공간에 2개의 슬롯을 개방하고, 이것들은 SUB 및 DIV의 반전된 변종에 의해 사용되어, 이들 연산에 대한 Rx>Ry 및 Rx<Ry 피연산 케이스가 인코딩될 수 있다.
더 실제적인 구현예에서는, 옵코드들의 리스트가 더 길어질 것이며, 이것들이 자유롭게 움직이는 것에 있어서 더 큰 유연성을 제공하게 된다. 이것은 시프트를 포함하고, 이 경우에는 이것들이 반전된 버전도 필요로 하며, 레지스터에 의해 시프트된 상수(constant-shifted-by-register) 형태의 명령의 가능성을 제시한다. 중간 상수에 의해 지정된 비트수만큼의 레지스터 피연산자의 시프트를 지원하는 시프트 명령이 지원되면, 명령의 반전된 형태는 레지스터 피연산자에 의해 지정된 비트 위치들의 수만큼 중간 상수를 시프트할 수 있어, 예를 들어 마스크 생성에 유용할 수 있다.
도 3은 16개의 아키텍처 레지스터가 존재하는 예를 나타낸 것이지만, 더욱 일반적으로는 2N개의 레지스터가 존재하면, Rx>Ry를 제한하는 것은 Rx 및 Ry의 2N2N-1/2개의 유효한 조합이 존재한다는 것을 의미하며, 이것은 2N-1 비트로 인코드되어 2N-1개의 미사용된 값을 남길 수 있다. 여기에서 제한된 코딩 방식을 사용하여, 이들 미사용된 값을 사용하여 별개의 1입력 피연산자 공간을 전송할 수 있지만, 이와 달리 A 및 B 필드의 여분의 인코딩을 사용하는 제 2 클래스의 명령들을 사용하여 다른 종류의 연산이 표시될 수도 있다. 추가적인 역전-피연산자 옵코드들의 수가 충분히 작으면, 옵코드 필드를 더 크게 할 필요가 없으며, 전체적인 코딩 방식이 원시적인(naive) 방식보다 1 비트 작아진다. 그러나, 일반적으로 비가환 연산에 대해 역전된 옵코드들을 가산한 후에, 옵코드 필드가 1 비트만큼 늘어나 어떤 것도 절감되지 않는 것으로 판명될 수도 있지만, 이 경우에 이익은 미사용된 옵코드 공간의 통합으로, 디코딩을 단순화하고 장래의 확장이 복잡해지지 않도록 하는 것이다.
도 4a 및 도 4b는 도 3에 도시된 명령 인코딩의 A 및 B 필드에 대한 2가지 예시적인 인코딩을 나타낸 것이다. 도 4a에서, X가 항상 T보다 클 때 2개의 N비트 아키텍처 레지스터 지정자 Rx, Ry가 다음과 같이 인코딩된다:
2개의 소스 레지스터 Rx, Ry를 요구하는 2 입력 연산에 대해:
Figure pct00001
1 입력 연산에 대해 단일 소스 레지스터 Rx를 인코딩하기 위해:
Figure pct00002
이 표기법에서,
·v<b>는 값 v의 비트 b를 의미하는데, 예를 들어, y<N-1>은 값 y로부터의 비트 N-1을 나타낸다.
· v<b:a>는 값 v의 비트 a 내지 b의 범위를 의미한다(이때, b는 관례대로 a보다 크다), 예를 들어, x<N-2:0>은 값 x의 비트 0 내지 N-2를 의미한다.
· EOR은 배타적 OR(XOR)를 의미한다.
· Replicate()는 괄호 () 내부의 인수의 비트들을 반복함으로써 형성되는 전체 폭 값을 의미한다. 따라서, Replicate(y<N-1>)은 y의 비트 N-1(이것은 y의 최상위 비트이다)와 모두 같은 N 비트들을 포함한다. 유효하게, y의 최상위 비트가 1이면 A=x이고 y의 최상위 비트가 0이면 A=invert(x)이다.
· 콜론(:)은 최상위 비트가 먼저인 연접(concatenation)을 나타낸다. 따라서, binary_opcode가 101이면, B는 00이고, A는 10이고 d는 1001이고, binary_opcode:B:A:d의 결과는 값 10100101001이 될 것이다.
도 4a는 이와 같은 인코딩을 사용할 때 각 쌍의 Rx 및 Ry에 대한 A 및 B의 가능한 값을 나타낸 것이다. 이때, 테이블 내의 어둡게 음영이 칠해진 항목들에 나타낸 Rx 및 Ry의 조합은 Ry>Rx를 갖기 때문에 무효이고, 십자로 표시된 항목들은 Rx=Ry이기 때문에 무효이다. 테이블의 대칭으로부터, Rx를 Ry보다 크게 제한함으로써, 가능한 조합들의 수를 전체 수의 절반보다 적은 수로 줄이며, 이것이 1 비트가 절약될 수 있는 이유이다. 또한, 1 입력 연산을 위해 재사용될 수 있는 도 4a의 저면에 도시된 여분의 인코딩이 존재한다. 이 예에서, 여분의 인코딩은 B-000 및 A=0???를 갖는다(여기에서 ?는 0 또는 1이고, 이들 비트는 추가적인 옵코드 비트 S와 함께 BITREV, CRZ 또는 제곱 MUL 명령 등의 단일 입력 연산들 중에서 한 개에 대한 단일 소스 레지스터 Rx를 식별한다).
이때, 정해진 쌍의 아키텍처 레지스터 지정자들을 인코딩하여 A 및 B를 생성하는 것은 도 1의 장치(2) 그 자체에 의해 행해지지 않지만, 실행할 명령을 소스 코드 또는 컴파일된 코드에 근거하여 생성할 때 컴파일러 또는 어셈블러에 의해 행해질 것이다.
A 및 B를 디코드하여 아키텍처 레지스터 지정자 Rx, Ry를 식별하는 디코딩 회로가 파이프라인(2)의 일부 지점에서 설치된다. 레지스터 디코딩이 임의의 스테이지에(예를 들어, 레지스터 재명명에서) 설치될 수 있지만, 더 일찍 아키텍처 레지스터 번호가 식별될수록, 위험요인 검출을 더 일찍 행할 수 있다. 따라서, 레지스터 디코딩이 디코더 스테이지(10)에서 발생하는 것이 바람직하다.
도 5는 명령을 디코드하는 디코드 스테이지(10)의 일부의 일례를 나타낸 것이다. 도 5에 도시된 것과 같이, 디코드 스테이지는 옵코드 디코더(40)와 레지스터 디코더(42)를 구비한다. 목적지 레지스터 지정자 Rd는 명령 인코딩에서 명시적으로 식별될 때 변경되지 않은 채 디코드 스테이지(10)를 통과한다. 레지스터 디코더(42)는 추가적인 옵코드 비트 S와 함께 명령의 A 및 B 필드를 수신하고, 이것들을 디코드하여 제 1 및 제 2 소스 아키텍처 레지스터 Rx 및 Ry를 식별한다. 또한, 레지스터 디코더(42)는 A 및 B 필드로부터 현재의 명령이 단일 입력 명령들(제 2 클래스의 명령들) 중에서 한 개인지 아닌지 식별하고, 한 개인지 아닌지의 표시를 옵코드 디코더(40)에 제공한다. 옵코드 디코더(40)는 명령이 제 1 클래스 또는 제 2 클래스의 명령들 중에서 한 개인지 아닌지에 따라 명령의 옵코드를 디코드하고, 디코드된 명령을 식별하는 정해진 수의 비트들을 출력한다. 디코드된 명령은 파이프라인의 후속 스테이지들을 제어하여 명령, 예를 들어, 실행 스테이지(80) 내부의 다수의 기능 유닛들 중에서 어느 것이 명령을 처리해야 할지 선택하기 위한 신호를 적절히 처리하기 위해 필요한 임의의 수의 비트를 출력한다.
도 4a에 나타낸 인코딩을 사용할 때, 레지스터 디코더(42)는 다음 연산을 사용하여 A 및 B 필드와 추가적인 옵코드 비트 S를 디코드한다:
Figure pct00003
"이진" 플래그를 사용하여, 옵코드 디코더(40)에게 옵코드가 이진 옵코드(제 1 클래스 연산) 또는 1진(unary) 옵코드(제 2 클래스 연산)로 해석되어야 하는지를 전송할 수 있다.
이것은 비교적 복잡한 일련의 연산인 것처럼 보이지만, 회로로 이것을 판정하는 로직은 전술한 수식에 의해 함축된 것보다 사실상 훨씬 간단하다. A 및 tmp_y의 값이 반전되었는지 여부에 영향을 미치는 값 "flip"을 결정하기 위해, B의 첫 번째 비제로 스캔을 사용하여 A로부터의 어떤 비트가 A가 A XOR B보다 큰지 아닌지 결정하는지 선택할 수 있다. 도 6a는 A 및 B를 디코딩하여 Rx, Ry를 식별하는 회로의 일례를 나타낸 것이다. 이 회로는 B의 각각의 비트들을 A의 대응하는 비트들과 XOR하는 일련의 배타적 OR 게이트들(50)을 구비한다(이들 게이트(50)는 전술한 수식에서 "tmp_y"의 값을 유효하게 결정한다. 이 회로는 출력이 OR 게이트들(54)에 의해 결합되는 일련의 NOR 게이트들(52)을 더 구비한다. OR 게이트(54)의 출력은 위에서 나타낸 파라미터 "flip"을 나타낸다. NOR 게이트 52-0은 입력으로서 추가적인 옵코드 비트 S의 반전된 버전, B 필드의 3개의 비트와 A 비트의 최상위 비트를 수신하고 그것의 출력은 S=1, B=000 및 A의 최상위 비트가 0인 경우에만 1이 된다. NOR 게이트 52-1은 입력으로서 B의 최상위 2개의 비트, A의 최상위 비트, B의 최하위 비트의 반전된 버전 및 A의 최하위 비트를 수신하고, B=001 및 A=0??0(마찬가지로 ?로 나타낸 모든 비트는 0이거나 1일 수 있다)인 경우에 그것의 출력이 1이다. NOR 게이트 52-2는 입력으로서 B의 최상위 비트, A의 최상위 비트, B의 두 번째 비트의 반전된 부분과 A의 두 번째 최하위 비트를 수신하고, B=01? 및 A=0?0?인 경우에 그것의 출력이 1이 된다. 마지막으로, NOR 게이트 5203은 입력으로서 A의 상위 2개의 비트와 B의 최상의 비트의 반전된 버전을 수신하고, B=1?? 및 A=00??인 경우에 그것의 출력이 1이 된다. NOR 게이트들(52)의 어느 것이 1을 출력하면, OR 게이트(54)에 의해 발생될 때 "flip"=1이다. "flip"이 1과 같을 때, A 필드가 XOR 게이트 56에 의해 반전되어 제 1 소스 레지스터 지정자 Rx를 발생한다. 또한, "flip"이 1과 같을 때, Ry의 최상위 비트가 1이며 Ry의 나머지 3 비트는 XOR 게이트들(50)에 의해 생성된 tmp_y의 대응하는 비트들의 출력을 반전하여 XOR 비트들(58)에 의해 형성된다. 이와 달리, "flip"이 0과 같으면, Rx=A, Ry=0의 최상위 비트, Ry의 나머지 비트들이 B의 대응하는 비트들과 같다.
도 6b는 인코딩 로직의 두 번째 예를 나타낸 것이다. 이 예에서는, OR 게이트(54)와 XOR 게이트 56, 58 사이의 경로 위에 추가적인 XOR 게이트 55가 설치된다. XOR 게이트 55는 그것의 두 번째 입력으로서 옵코드의 선택된 비트(예를 들어, 최하위 비트)를 수신한다. 이와 같은 디코드 로직을 사용하여, 옵코드는 옵코드 번호에 의해 두 번째 옵코드마다 Rx>Ry 조건을 반전하여 사실상 Rx<Ry가 되도록 하는 특성을 갖고(XOR 게이트 55는 사실상 최종 Rx, Ry 결과의 모든 비트를 반전한다), 이것은 2개의 다른 옵코드 슬롯들에 대해 한 개의 비가환 연산을 할당하는 것을 가능하게 하여, 모든 피연산자 순서가 가능해진다. 게이트 55에 의해 반전이 적용되는 반전된 비가환 명령들 중에서 한 개에 대해 Rx, Ry의 정해진 값을 인코딩할 때, 위에서 나타낸 인코딩 처리를 적용하기 전에 Rx, Ry의 해당한 반전을 행하여, Rx 및 Ry의 올바른 값이 반환되도록 보장해야만 한다. 따라서, 동일한 비가환 연산에 대응하지만 서로 다른 피연산자 순서를 갖는 상보적인 명령들의 쌍이 1 비트만 다른 옵코드를 사용하여 유효하게 표시되어, 단지 한 개의 추가적인 게이트 55를 사용하여 비교적 간단한 디코딩을 허용한다. 이에 반해, 가환 연산에 대해서는, 단지 한 개의 옵코드 슬롯에 할당되고, 단지 1 비트만 다른 인접한 옵코드들의 쌍은 완전히 다른 가환 연산에 해당한다. 이때, 도 6b에서는, 간략을 기하기 위해 도 6a의 NOR 게이트 52-0을 생략하지만(에를 들어, 이것은 1 입력 연산에 대해 A, B의 여분의 인코딩 공간을 재사용하지 않는 예일 수 있다), 다른 예에서는 NOR 게이트 52-0이 설치될 수도 있다.
도 4b는 사용될 수 있는 A 및 B 필드의 두 번째 예시적인 인코딩을 나타낸 것이다. 마찬가지로, Rx는 Ry보다 크게 제한된다. 이 경우에, 0 내지 2N-1의 범위를 갖는 주어진 값 Rx, Ry와 Rx>Ry의 제약에 대해, A와 B는 다음과 같이 인코드된다:
Figure pct00004
이와 같은 Ry의 제한된 값으로 인해, B가 항상 2N-1보다 작은 것으로 밝혀지므로, 1 비트가 제거되게 할 수 있다는 것을 관찰할 수 있다.
도 4b는 이와 같은 인코딩 방식으로 이용가능한 다양한 인코딩을 나타낸 테이블이다. 마찬가지로, 일부 여분의 인코딩이 존재하지만, 이때에는 이것들이 A의 최상위 비트가 제로이고 A의 나머지 비트들이 N의 대응하는 비트들과 같은 값들이다. 따라서, 여분 인코딩이 도 4a와 다르지만, 옵코드의 다른 해석을 사용한 별개의 제 2 클래스의 명령들이 정의되도록 허용하며, 이것은 레지스터 필드 A, B의 특정한 값에 의해 제 1 클래스와 구별된다. 이들 여분의 인코딩에 대해, 도 3에 도시된 단일 소스 레지스터 Rx가 B의 3 비트(이것은 A의 하위 3비트와 동일하다)와 추가적인 옵코드 비트 S를 사용하여 식별되고, 이 단일 레지스터 Rx를 사용하여 행해지는 연산은 옵코드 필드의 나머지 2 비트에 의해 식별된다.
도 4b에 도시된 방식으로 인코딩할 때 제 1 클래스의 명령들에 대해 A 및 B를 디코딩하기 위해, 다음과 같은 로직을 이용할 수 있다:
Figure pct00005
이와 같은 접근방법은 B>=A가 다수의 XNOR 게이트들을 필요로 하는지 여부를 결정하기 위한 B 및 A의 디지털 비교로 인해 약간 더 깊은 디코드 로직을 필요로 한다. 제 2 클래스의 명령들에 대해, 비교기는 A의 하위 3비트가 B의 대응하는 비트와 같은지를 판정하고, 같으면 디코딩없이 Rx가 S 및 B로부터 직접 결정될 수 있다.
Rx>Ry인 Rx 및 Ry의 특정한 조합의 A 및 B 필드의 잠재적인 값에 대한 다른 더 임의적인 매핑이 선택될 수도 있다. 일반적으로, 어떤 특정한 쌍의 레지스터들이 A 및 B 필드의 각각의 다른 인코딩에 의해 표시될지는 중요하지 않지만, 도 4a 및 도 4b에 도시된 예는 필요한 디코드 로직의 양을 줄이는데 특히 유리하며, 도 4a는 도 6에 도시된 비교적 얕은 로직을 필요로 하고 여분의 인코딩을 B가 000이고 A의 최상의 비트도 0인 인코딩 공간의 공통된 부분에 통합하기 때문에 특히 효율적이다.
도 7은 명령을 처리하는 방법을 나타낸 것이다. 스텝 100에서, 디코더는 (예를 들어, A, B가 여분의 인코딩들 중에서 한 개를 갖지 않는 경우) 현재의 명령이 제 1 클래스의 명령들 중에서 한 개인지 여부를 판정한다. 명령이 제 1 클래스이면, 스텝 102에서 레지스터 필드 A 및 B를 디코드하여 Rx>Ry인 명령을 위해 사용할 아키텍처 레지스터 번호 Rx, Ry를 결정한다. 스텝 104에서, 디코드 스테이지(10)는 명령의 옵코드를 디코드한다. 스텝 106에서, 파이프라인의 후속 스테이지들은 식별된 아키텍처 레지스터 Rx 및 Ry에 대응하는 레지스터들을 사용하여 명령을 처리한다. 이때, 이들은 재명명 스테이지(12)에 의해 재매핑될 때 다른 물리 레지스터 번호를 갖는 물리 레지스터이어도 된다. Rx>Ry인 동안, 물리 레지스터들이 사용되는 제약이 존재하지 않는다.
한편, 명령이 제 1 클래스의 명령들 중에서 한 개가 아닌 경우에, 스텝 110에서 명령이 제 2 클래스의 명령들에 속하는지 판정한다. 속하지 않는 경우에는, 명령이 다른 방식으로 처리된다. 명령이 제 2 클래스에 속하는지 결정하기 위해, 이것은 A 및 B 필드가 전술한 여분의 인코딩들 중에서 한 개를 갖는지 여부로부터 식별될 수 있다. 명령이 제 2 클래스에 속하면, 스텝 112에서, 추가적인 옵코드 비트 S와 A 및 B 필드의 비트들의 서브셋(예를 들어, A 필드의 하위 3 비트)을 디코드하여 단일 소스 레지스터의 아키텍처 레지스터 번호 Rx를 판정한다. 스텝 114에서, 명령의 옵코드가 1진 옵코드 디코딩 방식에 따라 디코드된다. 스텝 116에서 후속의 파이프라인 스테이지들이 명령을 처리하여 아키텍처 레지스터 번호 Rx에 대응하는 단일 레지스터를 사용한 옵코드에 의해 표시된 연산의 종류를 행한다.
상기한 예에서, 표시된 레지스터들 Rx, Ry는 대응하는 처리 연산에 대한 소스 피연산자를 포함하는 소스 레지스터이다. 그러나, 목적지 레지스터 또는 다른 종류의 레지스터를 인코딩하기 위해 이 인코딩 방식을 사용하는 것도 가능하다. 예를 들어, 일부 명령은 시작 레지스터에서 시작하고 종료 레지스터로 끝나는 아키텍처 레지스터의 리스트를 식별하고, 처리회로를 제어하여 시작 및 종료 레지스터들 사이의 아키텍처 번호를 갖는 아키텍처 레지스터들의 연속된 블록을 이용하여 정해진 연산을 행한다. 예를 들어, 로드 멀티플 명령이 다수의 어드레스로부터의 데이터 값을 연속된 블록의 아키텍처 레지스터 번호들에 대응하는 레지스터들 내부에 로드하거나, 스토어 멀티플 명령이 지정된 레지스터들로부터 메모리 내부의 대응하는 어드레스들에 데이터를 기억한다. 또한, 일부 스택 명령(푸시 또는 팝 명령)이 다양한 레지스터들로부터 스택에 데이터를 보존하거나 스택으로부터 레지스터에 데이터를 복원한다. 이 경우에, 레지스터들의 리스트를 정의하는 시작 및 종료 아키텍처 레지스터들도 전술한 것과 유사한 방식을 사용하여 인코딩될 수 있다. 제 2 클래스의 명령들이 제 1 클래스 내부의 레지스터 필드들의 여분의 인코딩들의 일부를 사용하여 표시되는 제 1 클래스의 명령들과 제 2 클래스의 명령들의 정의는, 제 1 클래스가 다중 레지스터 리스트를 제공하고 제 2 클래스가 단지 단일 레지스터만을 제공할 때, 리스트의 성분들 사이의 다양한 잠재적인 상호작용을 서술하기 위해 제 2 클래스보다 제 1 클래스의 명령들이 더 많은 옵코드를 이용가능한 것이 유용할 수 있기 때문에, 이와 같은 리스트 기반의 명령에 대해서도 유용하다.
도 8은 레지스터 인코딩 Rx, Ry에서 중복을 이용하는 또 다른 예를 나타낸 것이다. 이 예에서, 명령들은 명령에서 명시적으로 식별된 Rx 및 Ry를 사용하여 인코딩될 수 있으며, Rx 및 Ry의 임의의 조합이 허용된다. 예를 들어, 이것은 도 2에 나타낸 인코딩을 사용해도 된다. 그러나, 도 8에 도시된 것과 같이, 디코드 스테이지(10)는 Rx 및 Ry를 비교하여 옵코드 디코더(154)에 주어져 Rx 및 Ry 중 어느 것이 더 큰지를 표시하는 비교 결과 신호(152)를 발생하는 레지스터 비교기(150)를 구비한다. 옵코드 디코더(154)는 신호 152에 의해 표시된 비교 결과에 따라 다양한 방법으로 명령의 옵코드를 디코드하여, Rx 및 Ry 중 어느 것이 더 큰지에 따라 동일한 옵코드로부터 다른 디코드된 명령들(156)이 발생된다. 기본적으로, Rx 및 Ry의 상대적인 순서는 옵코드를 보완할 수 있는 적어도 1 비트의 추가적인 정보를 제공하여, 옵코드 필드 그 자체가 1 비트 더 작아지거나 옵코드의 정해진 수의 비트들을 사용하여 더 큰 수의 다른 연산들이 지원될 수 있다. 이때, 일부 경구에, 비교 신호(152)로부터의 추가적인 정보는 옵코드의 확장이 아니라 별개의 플래그로 생각될 수도 있다.
이것은 다양하게 이용될 수 있다. 일부 경우에, 명령의 Rx>Ry 및 Rx<Ry 형태로 표시되는 연산은 기본적으로 동일한 종류의 연산에 대응하지만, 이 연산이 비교 결과에 근거하여 약간 수정된다. 이것의 일례는, 결과에 영향을 미치는 산술(예를 들어, 승산) 명령에 대한 "절대" 수정자(modifier)를 유도하는 것일 수 있다. 이 경우에, Rx<Ry 케이스는 "결과의 양의 절대값을 취하지 않는다"를 의미하고, Rx>Ry 케이스는 "절대값을 취한다"를 의미할 것이다. Rx==Ry 케이스는, 그 자신으로 곱한 어떤 수도 여하튼 양이 되어 절대 플래그가 필요하지 않기 때문에, "취하지 않는다" 케이스에 속한다. 따라서, Rx<=Ry인 경우에 '절대' 플래그를 클리어로 정의하고, Rx>Ry인 경우에 세트로 정의할 수 있다. 따라서, Rx 및 Ry의 상대적인 순서를 사용함으로써, 명령 내부의 절대 플래그를 인코드할 필요가 없다.
이와 달리, Rx>Ry 및 Rx<Ry일 때 행해지는 연산은 완전히 다를 수도 있다. 일반적으로, 연산 필드로부터 1 비트를 취하면, 이것은 Rx 및 Ry 레지스터의 순서로 보완될 수 있으므로, 옵코드 필드를 해석하기 위한 기본적으로 3가지 다른 기술이 존재하는데, 즉 Rx>Ry에 대한 옵코드 세트 0, Rx<Ry에 대한 옵코드 세트 1 및 Rx=Ry에 대한 옵코드 세트 2가 존재한다(세트 2는 전술한 종류에 대한 단일 입력 옵코드이다). (비교기(105)에 의해 제공된 비교가 Ry보다 크게 Rx를 제한하는 인코딩에 대해 도시된 도 6보다 더 많은 회로를 필요로 하기 때문에) 이와 같은 접근방법이 더 깊은 테스트 로직을 필요로 하지만, 레지스터 피연산자가 보이기 전에 디코드가 필요하지 않으므로, 파이프라인의 피연산자 전달 로직을 더 일찍 활성화시키는데 도움이 되어 서로 다른 명령들 사이의 위험요소를 더 일찍 검출될 수 잇게 한다는 이점을 갖는다. 어떤 특정한 연산들이 단일의 옵코드 인코딩으로 결합될 것인지는 명령 세트 디자이너에 의해 임의로 선택될 수 있다.
예를 들어, AND, OR 및 MOV 연산이 한 개의 옵코드 포인트로 결합될 수도 있다. Rx가 Ry보다 작으면, 옵코드를 AND 연산으로 취급하여 Rx AND Ry를 반환한다. Rx가 Ry보다 크면, 옵코드를 OR 연산으로 취급하여 Rx OR Ry를 반환한다. Rx 및 Ry가 같으면, 모든 경우에 결과가 MOV 연산과 동등하여 이 경우를 MOV로 부를 수 있기 때문에, 무엇을 행할지가 문제가 되지 않는다. 그후, 적어도 절반이 Rx==Ry 케이스를 처리할 필요가 없는 가환 연산 전체를 취하고, 이것들을 공유된 옵코드 번호들로 짝을 이룬다. 예를 들어, SUB가 어떤 순서에서도 인수를 받아들일 필요가 없으므로, ADD와 SUB를 짝을 만들 수 없지만, Rx+Rx가 Rx*2를 제공하고 Rx EOR Rx가 제로를 제공하기 때문에 ADD와 EOR의 쌍을 만들 수 있으며, EOR를 사용하지 않고 제로 결과를 얻는 다른 방법이 존재하므로(예를 들어, Rx-Rx), 이 경우를 취급할 필요가 없다(Rx*2도 1 자릿수만큼의 좌측 자리옮김과 동등하므로 중복이 될 수도 있다).
도 9는 도 8에 도시된 접근방법을 사용하는 명령의 또 다른 예를 나타낸 것이다. 도 9는 아키텍처 레지스터 Rx 및 Ry에 있는 2개의 소스 피연산자들에 어떤 비교 조건이 적용될 것인지를 조건 필드(cond)가 식별하는 비교 명령을 나타낸 것이다. 이것은 가환성을 갖지 않지만, 피연산자의 순서를 바꾸어 동등한 연산을 얻도록 연산을 변경할 수 있다.
가상의 CMP 명령을 갖는다면, 2개의 입력 Rx 및 Ry를 비교할 수 있는 6가지의 기본적인 방법, 즉 작다(<), 크다(>), 이하이다(<=), 이상이다(>=), 같다(==) 및 같지 않다(!=)가 존재한다. 이들 6가지 연산은 (Nx+Ny+3)의 전체 비트 계수값에 대해, 인코딩하기 위한 3 비트와, 2개의 레지스터 색인 Rx 및 Ry에 대한 비트들을 필요로 하는데, 이때 Nx 및 Ny는 각각 Rx 및 Ry를 지정하는데 사용되는 비트의 수이다. 교환 및 등가를 이용하여, 이것들을 더욱 효율적으로 인코드할 수 있다.
(Nx+Ny) 비트로 인코드된 Rx 및 Ry의 자유로운 선택을 갖는 것으로 가정한다. 실제로는 6개가 아니라 3가지의 연산에 대한 선택이 필요하다.
CMP(Rx, Ry)는 CMP(Rx>=Ry)와 동등하므로, 이들 2개의 연산 중에서 한 개만 인코딩할 필요가 있다.
CMP(Rx<=Ry)는 CMP(Rx>Ry)와 동등하므로, 마찬가지로 1개의 선택만 인코딩할 수 있다.
CMP(Rx==Ry)와 CMP(Rx!=Ry)는 가환성을 가지므로, 한 개의 연산값으로 Rx<Ry인지 Rx>Ry인지에 근거하여 올바른 연산을 선택할 수 있다.
그러나, 이 마지막 경우에, Rx==Ry이면, 같다는 연산을 같지 않다는 연산과 구별할 수 없다. 그러나, 이것들은 사소한 경우이기 때문에, 이것들을 동일한 답을 제공하는 다른 연산으로 변환할 수 있다. 따라서,
CMP(Rx==Rx)는 CMP(Rx<=Rx)와 마찬가지로 항상 참이므로, 이것을 대신에 인코드한다.
CMP(Rx!=Rx)는 CMP(Rx<Rx)와 마찬가지로 항상 참이므로, 이것을 대신에 인코드한다.
이들 조합은 전체 (Nx+Ny+2) 비트에 대해 단지 2 비트를 사용하여 비교 연산을 인코드할 수 있도록 한다.
이때, 이와 같은 비교 명령에 대해, 2개의 별개의 비교, 즉 어떤 종류의 비교 조건이 사용되고 있는지 식별하기 위해 레지스터 지정자들 Rx, Ry를 비교하기 위한 한 개와, 선택된 비교 조건에 따라 레지스터 내부에 기억된 실제 데이터 값들을 비교하기 위해 파이프라인에서 나중에 행해지는 또 다른 비교를 행할 것이다.
도 10은 제 2 예를 사용하여 인코드된 명령들을 처리하는 방법을 나타낸 것이다. 스텝 200에서, 명령이 수신되고 레지스터 필드들 Rx 및 Ry가 레지스터 비교기(150)에 의해 비교된다. Rx가 Ry보다 크면, 스텝 202에서 옵코드 디코더(154)는 디코드된 명령(156)을 발생하여 후속의 파이프라인 스테이지들을 제어하여 아키텍처 레지스터들 Rx 및 Ry에 대응하는 레지스터들을 사용하여 제 1 종류의 처리 연산을 행한다. 한편, Rx가 Ry보다 작으면, 스텝 204에서, 옵코드 디코더(154)가 옵코드를 디코드하여 파이프라인의 나머지를 제어하여 Rx 및 Ry에 대응하는 레지스터들을 사용하여 제 2 종류의 처리 연산을 행하는 디코드된 명령(156)을 발생한다. 이 제 2 종류의 처리 연산은 제 1 종류의 처리 연산과 같지만, (결과의 절대 크기를 취하는 것과 같이) 일부가 수정되거나, 완전히 다른 연산일 수 있다. Rx=Ry일 때, 디코더가 스텝 202 내지 204 중 한 개로 진행하여 처리 파이프라인을 제어하여 제 1 또는 제 2 종류의 처리 연산을 행하거나, 또는 스텝 206에서 Rx에 대응하는 단일 레지스터를 사용하여 행해진 제 3 종류의 처리 연산에 대응하는 디코드된 명령이 발생될 수 있다. 또 다른 대안은, Rx=Ry 인코딩에 대한 일부 명령이 무효가 되는 것으로, 이 경우에는 미정의된 명령하에서 디코드된 명령이 발생되지 않고 예외가 발생될 수 있다. Rx=Ry에 대해 취해진 이 접근방법은 옵코드마다 변동할 수도 있다.
이와 달리, 일부 명령에 대해서는, Rx>Ry 또는 Rx<Ry에 대해 제 1 종류의 연산이 선택되고, Rx=Ry일 때 제 2 종류의 연산이 선택된다. 예를 들어, 감산 명령은 Rx>Ry인지 Rx<Ry인지에 따라 다른 결과를 발생하지만, Rx=Ry일 때의 결과는 항상 0이며, 다른 연산에 의해 발생될 수 있으므로, Rx=Ry인 SUB 옵코드에 대한 인코딩은 다른 연산, 예를 들어, 단일 입력 피연산자를 위해 재사용된다. Rx=Ry일 때의 결과가 흥미롭지 않은 다른 비가환 연산, 예를 들어, BIC, DIV, ORN 등에 대해 유사한 접근방법이 취해져도 된다.
도 11은 사용될 수 있는 가상머신 구현예를 나타낸 것이다. 전술한 실시예는 해당 기술을 지원하는 특정한 처리 하드웨어를 작동하기 위한 장치 및 방법에 관해 본 발명을 구현하지만, 하드웨어 장치의 소위 가상머신 구현을 제공하는 것도 가능하다. 이들 가상머신 구현은 가상머신 프로그램(310)을 지원하는 호스트 운영체계(320)를 실행하는 호스트 프로세서(330) 상에서 실행된다. 일반적으로, 합당한 속도에서 실행되는 가상머신 구현을 제공하기 위해서는 크고 강력한 프로세서가 필요하지만, 이와 같은 접근방법은, 호환성이나 재사용 이유로 인해 다른 프로세서에 대해 네이티브한 코드를 실행하려는 요구가 있을 때 등과 같은, 특정한 상황에서 정당화된다. 가상머신 프로그램(310)은 응용 프로그램(또는 운영체계)(300)을 실행하여 실제 하드웨어 장치에 의한 프로그램의 실행에 의해 주어지는 것과 동일한 결과를 제공할 수 있다. 따라서, 전술한 메모리 액세스의 제어를 포함하는 프로그램 명령은 가상머신 프로그램(310)을 사용하여 응용 프로그램(300) 내에서 실행되어도 된다.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다. 예를 들면, 종속항들의 특징들의 다양한 조합이 독립항들의 특징과 행해질 수도 있다.

Claims (30)

  1. 데이터 값들을 기억하는 복수의 레지스터와,
    명령들에 응답하여 처리 연산을 행하는 처리회로를 구비하고,
    제 1 및 제 2 아키텍처 레지스터 번호들을 식별하는 제 1 클래스의 명령들 중에서 한 개에 응답하여, 상기 처리회로가 상기 제 1 및 제 2 아키텍처 레지스터 번호들에 대응하는 제 1 및 제 2 레지스터를 사용하여 대응하는 처리 연산을 행하도록 구성되고,
    상기 제 1 클래스의 명령들의 명령들은 상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 크도록 제한하는 명령 인코딩을 갖는 장치.
  2. 제 1항에 있어서,
    상기 제 1 클래스의 명령들은 대응하는 처리 연산이 가환 연산인 적어도 한 개의 가환 명령을 포함하는 장치.
  3. 제 1항 또는 제 2항에 있어서,
    상기 제 1 클래스의 명령들은 대응하는 처리 연산이 비가환 연산인 적어도 한 개의 비가환 명령을 포함하는 장치.
  4. 제 1항 내지 제 3항 중 어느 한 항에 있어서,
    상기 제 1 클래스의 명령들은 상기 제 1 및 제 2 레지스터에 기억된 제 1 및 제 2 피연산자에 적용된 동일한 종류의 비가환 연산에 대응하는 적어도 한 쌍의 상보적인 비가환 명령들을 포함하고, 이 쌍의 한 개의 명령은 이 쌍의 나머지 명령과 다른 순서로 상기 제 1 및 제 2 피연산자를 사용한 비가환 연산을 행하도록 상기 처리회로를 제어하기 위한 것인 장치.
  5. 제 1항 내지 제 4항 중 어느 한 항에 있어서,
    상기 제 1 클래스의 명령들은, 상기 처리회로를 제어하여 상기 제 1 아키텍처 레지스터 번호 및 상기 제 2아키텍처 레지스터 번호 사이의 연속된 범위에 있는 아키텍처 레지스터 번호들에 대응하는 복수의 레지스터를 사용하여 처리 연산을 행하기 위한 적어도 한 개의 레지스터 범위 지정 명령을 포함하는 장치.
  6. 제 1항 내지 제 5항 중 어느 한 항에 있어서,
    상기 제 1 클래스의 명령들의 명령 인코딩을 디코드하여 상기 제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 레지스터 디코딩 회로를 구비한 장치.
  7. 제 1항 내지 제 6항 중 어느 한 항에 있어서,
    상기 처리회로는 2N개의 아키텍처 레지스터들을 제공하는 명령 세트 아키텍처에 따라 명령들을 처리하도록 구성되고, 상기 제 1 클래스의 명령들에서는, 상기 제 1 및 제 2 아키텍처 레지스터 번호가 2N-1 비트의 상기 명령 인코딩을 사용하여 표시되는 장치.
  8. 제 1항 내지 제 7항 중 어느 한 항에 있어서,
    상기 제 1 클래스의 명령들의 상기 명령 인코딩은, 옵코드 필드와, 복수의 레지스터 식별 비트들의 복수의 여분의 비트 패턴들이 상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 큰 상기 제 1 및 제 2 아키텍처 레지스터 번호들의 유효한 조합에 대응하지 않는 소정의 인코딩 방식에 따라 상기 제 1 및 제 2 아키텍처 레지스터 번호들을 표시하는 상기 복수의 레지스터 식별 비트들을 포함하고,
    명령 세트 아키텍처는, 상기 옵코드 필드와, 상기 복수의 레지스터 식별 비트들이 상기 여분의 비트 패턴들 중에서 한 개를 갖는 상기 복수의 레지스터 식별 비트들을 포함하는 명령 인코딩을 갖는 제 2 클래스의 명령들을 포함하고,
    상기 제 2 클래스의 명령들 중에서 한 개에 응답하여, 상기 처리회로는 이 명령의 옵코드 필드를 상기 제 1 클래스의 명령들 중에서 한 개의 동일한 옵코드 필드와 다르게 해석하도록 구성된 장치.
  9. 제 8항에 있어서,
    상기 제 2 클래스의 명령들은, 단일의 소스 아키텍처 레지스터 번호에 의해 식별된 레지스터를 사용하여 대응하는 처리 연산을 행하도록 상기 처리회로를 제어하기 위해 상기 단일의 소스 아키텍처 레지스터 번호를 식별하는 적어도 한 개의 명령을 포함하는 장치.
  10. 제 9항에 있어서,
    상기 단일의 소스 아키텍처 레지스터 번호는 상기 레지스터 식별 비트들의 서브셋과 상기 옵코드 필드의 한 개의 비트를 사용하여 상기 제 2 클래스의 상기 적어도 한 개의 명령의 명령 인코딩에서 표시되는 장치.
  11. 제 1항 내지 제 10항 중 어느 한 항에 있어서,
    상기 제 1 클래스의 명령들의 명령 인코딩은,
    상기 제 2 아키텍처 레지스터 번호의 최상위 비트가 0일 때에는 상기 제 1 아키텍처 레지스터 번호에 의존하고 상기 제 2 아키텍처 레지스터 번호의 최상위 비트가 1일 때에는 상기 제 1 아키텍처 레지스터 번호의 모든 비트들의 반전 결과에 의존하는 제 1 레지스터 필드와,
    상기 제 2 아키텍처 레지스터 번호의 상기 최상위 비트 이외의 상기 제 2 아키텍처 레지스터 번호의 나머지 비트들에 의존하는 값을 갖는 제 2 레지스터 필드를 포함하는 장치.
  12. 제 11항에 있어서,
    상기 제 2 레지스터 필드는, 상기 제 2 아키텍처 레지스터 번호의 상기 나머지 비트들과 상기 제 1 아키텍처 레지스터 번호의 대응하는 비트들의 비트 단위의 배타적 OR의 결과에 의존하는 값을 갖는 장치.
  13. 제 11항에 있어서,
    상기 제 2 레지스터 필드는, 상기 제 2 아키텍처 레지스터 번호의 상기 최상위 비트가 0일 때에는 상기 제 2 아키텍처 레지스터 번호의 상기 나머지 비트들에 의존하고 상기 제 2 아키텍처 레지스터 번호의 상기 최상의 비트가 1일 때에는 상기 제 2 아키텍처 레지스터 번호의 상기 나머지 비트들의 반전 결과에 의존하는 값을 갖는 장치.
  14. 명령들에 응답하여 처리 연산을 행하도록 처리회로를 제어하는 단계를 포함하고,
    제 1 및 제 2 아키텍처 레지스터 번호들을 식별하는 제 1 클래스의 명령들 중에서 한 개에 응답하여, 상기 처리회로가 상기 제 1 및 제 2 아키텍처 레지스터 번호들에 대응하는 제 1 및 제 2 레지스터를 사용하여 대응하는 처리 연산을 행하도록 제어되고,
    상기 제 1 클래스의 명령들의 명령들은 상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 크도록 제한하는 명령 인코딩을 갖는 데이터 처리방법.
  15. 제 1항 내지 제 13항 중 어느 한 항에 기재된 장치에 대응하는 가상머신 실행 환경을 제공하도록 컴퓨터를 제어하기 위한 컴퓨터 프로그램을 기억한 컴퓨터 판독가능한 기억매체.
  16. 데이터 값들을 기억하는 복수의 레지스터와,
    명령들에 응답하여 처리 연산을 행하는 처리회로를 구비하고,
    제 1 및 제 2 아키텍처 레지스터 번호들을 식별하는 명령 인코딩을 갖는 명령에 응답하여, 상기 처리회로는, 상기 제 1 및 제 2 아키텍처 레지스터 번호들의 비교에 따라, 상기 제 1 및 제 2 아키텍처 레지스터 번호들에 대응하는 레지스터들을 사용하여 제 1 종류의 처리 연산을 행할 것인지 제 2 종류의 처리 연산을 행할 것인지를 선택하도록 구성된, 장치.
  17. 제 16항에 있어서,
    상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 클 때, 상기 처리회로는 상기 제 1 종류의 처리 연산을 행하도록 구성되고,
    상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 작을 때, 상기 처리회로는 상기 제 2 종류의 처리 연산을 행하도록 구성된 장치.
  18. 제 17항에 있어서,
    상기 제 1 종류의 처리 연산과 상기 제 2 종류의 처리 연산은 서로 다른 가환 연산인 장치.
  19. 제 17항 또는 제 18항에 있어서,
    상기 제 1 종류의 처리 연산과 상기 제 2 종류의 처리 연산 중에서 한 개는 상기 제 1 및 제 2 아키텍처 레지스터 번호에 대응하는 레지스터들에 기억된 제 1 및 제 2 피연산자에 대해 행해진 처리 연산을 포함하고,
    상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호와 같을 때, 상기 처리회로는 동일한 데이터 값을 포함하는 상기 제 1 및 제 2 피연산자들을 사용하여 상기 제 1 종류의 처리 연산과 상기 제 2 종류의 처리 연산 중에서 상기 한 개를 행하도록 구성된 장치.
  20. 제 17항 또는 제 18항에 있어서,
    상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호와 같을 때, 상기 처리회로는 상기 제 1 및 제 2 아키텍처 레지스터 번호에 대응하는 레지스터를 사용하여 제 3 종류의 처리 연산을 행하도록 구성된 장치.
  21. 제 16항에 있어서,
    상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호와 다를 때, 상기 처리회로는 상기 제 1 종류의 처리 연산을 행하도록 구성되고,
    상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호와 같을 때, 상기 처리회로는 상기 제 2 종류의 처리 연산을 행하도록 구성된 장치.
  22. 제 21항에 있어서,
    상기 제 1 종류의 처리 연산은 비가환 연산인 장치.
  23. 제 16항 내지 제 22항 중 어느 한 항에 있어서,
    상기 제 1 및 제 2 아키텍처 레지스터 번호를 비교하는 레지스터 번호 비교회로와,
    명령의 옵코드와 상기 제 1 및 제 2 아키텍처 레지스터 번호의 비교 결과에 따라 행해진 처리 연산의 종류를 식별하는 디코딩 회로를 구비한 장치.
  24. 제 23항에 있어서,
    상기 레지스터 번호 비교회로는 상기 비교 결과에 따라 적어도 한 개의 추가적인 옵코드 비트를 발생하도록 구성되고, 상기 디코딩 회로는 상기 옵코드와 상기 적어도 한 개의 추가적인 옵코드 비트를 디코드하여 행해질 처리 연산의 종류를 식별하도록 구성된 장치.
  25. 제 17항 내지 제 20항 중 어느 한 항에 있어서,
    상기 제 2 종류의 처리 연산은, 상기 제 1 및 제 2 아키텍처 레지스터 번호에 대응하는 레지스터들에 기억된 제 1 및 제 2 피연산자에 대한 상기 제 1 종류의 처리 연산을 행한 결과와 동등한 값을 발생하는 것과, 상기 제 1 종류의 처리 연산의 결과의 절대 크기를 결정하는 것을 포함하는 장치.
  26. 제 17항 내지 제 20항 중 어느 한 항에 있어서,
    명령은 상기 제 1 및 제 2 아키텍처 레지스터 번호에 대응하는 레지스터들에 기억된 제 1 및 제 2 피연산자를 비교하는 비교 명령을 포함하고, 상기 제 1 종류의 처리 연산은 상기 제 1 및 제 2 피연산자 같은지의 판정을 포함하고, 상기 제 2 종류의 처리 연산은 상기 제 1 및 제 2 피연산자가 같지 않은지의 판정을 포함하는 장치.
  27. 제 17항 내지 제 20항 중 어느 한 항에 있어서,
    명령은 상기 제 1 및 제 2 아키텍처 레지스터 번호에 대응하는 레지스터들에 기억된 제 1 및 제 2 피연산자를 비교하는 비교 명령을 포함하고, 상기 비교 명령은 비교 조건 필드를 포함하고,
    상기 비교 조건 필드가 제 1 값을 가질 때, 상기 처리회로는 상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 클 때에는 상기 제 1 및 제 2 피연산자가 동일한지를 판정하고, 상기 제 1 아키텍처 레지스터 번호가 상기 제 2 아키텍처 레지스터 번호보다 작을 때에는 상기 제 1 및 제 2 피연산자가 같지 않은지 판정하도록 구성되고,
    상기 비교 조건 필드가 제 2 값을 가질 때, 상기 처리회로는, 상기 제 1 및 제 2 아키텍처 레지스터 번호의 비교에 무관하게, (i) 상기 제 1 피연산자가 상기 제 2 피연산자보다 큰지, 및 (ii) 상기 제 1 피연산자가 상기 제 2 피연산자 이하인지 중에서 한 개를 판정하도록 구성되고,
    상기 비교 조건 필드가 제 3 값을 가질 때, 상기 처리회로는, 상기 제 1 및 제 2 아키텍처 레지스터 번호의 비교에 무관하게, (i) 상기 제 1 피연산자가 상기 제 2 피연산자 이상인지, 및 (ii) 상기 제 1 피연산자가 상기 제 2 피연산자보다 작은지 중에서 한 개를 판정하도록 구성된 장치.
  28. 제 27항에 있어서,
    상기 비교 조건 필드는 2비트 필드를 포함하는 장치.
  29. 제 1 및 제 2 아키텍처 레지스터 번호들을 식별하는 명령 인코딩을 갖는 명령에 응답하여, 상기 제 1 및 제 2 아키텍처 레지스터 번호들을 비교하는 단계와,
    상기 제 1 및 제 2 아키텍처 레지스터 번호들의 비교에 따라, 상기 제 1 및 제 2 아키텍처 레지스터 번호들에 대응하는 레지스터들을 사용하여 제 1 종류의 처리 연산을 행할 것인지 제 2 종류의 처리 연산을 행할 것인지를 선택하는 단계를 포함하는 데이터 처리방법.
  30. 제 16항 내지 제 28항 중 어느 한 항에 기재된 장치에 대응하는 가상머신 실행 환경을 제공하도록 컴퓨터를 제어하기 위한 컴퓨터 프로그램을 기억한 컴퓨터 판독가능한 기억매체.
KR1020187023246A 2016-01-22 2016-05-25 제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 명령의 인코딩 KR102560426B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/003,828 US10331449B2 (en) 2016-01-22 2016-01-22 Encoding instructions identifying first and second architectural register numbers
US15/003,828 2016-01-22
PCT/GB2016/051503 WO2017125700A1 (en) 2016-01-22 2016-05-25 Encoding instructions identifying first and second architectural register numbers

Publications (2)

Publication Number Publication Date
KR20180104652A true KR20180104652A (ko) 2018-09-21
KR102560426B1 KR102560426B1 (ko) 2023-07-27

Family

ID=56116465

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187023246A KR102560426B1 (ko) 2016-01-22 2016-05-25 제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 명령의 인코딩

Country Status (7)

Country Link
US (1) US10331449B2 (ko)
EP (1) EP3405863B1 (ko)
JP (1) JP6803390B2 (ko)
KR (1) KR102560426B1 (ko)
CN (1) CN108463801B (ko)
IL (1) IL260142B (ko)
WO (1) WO2017125700A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111443948B (zh) * 2020-03-30 2022-09-09 龙芯中科技术股份有限公司 指令执行方法、处理器和电子设备
CN113608785A (zh) * 2021-08-23 2021-11-05 北京奕斯伟计算技术有限公司 处理器核、处理器及指令处理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US20070186210A1 (en) * 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US20150178076A1 (en) * 2013-12-20 2015-06-25 Imagination Technologies Limited Processor with virtualized instruction set architecture & methods

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282633B1 (en) * 1998-11-13 2001-08-28 Tensilica, Inc. High data density RISC processor
US6957321B2 (en) 2002-06-19 2005-10-18 Intel Corporation Instruction set extension using operand bearing NOP instructions
US7596680B2 (en) 2003-09-15 2009-09-29 International Business Machines Corporation System and method for encoding and decoding architecture registers
US7263577B2 (en) * 2005-03-03 2007-08-28 Qualcomm Incorporated Power saving methods and apparatus to selectively enable comparators in a CAM renaming register file based on known processor state
US20070038984A1 (en) * 2005-08-12 2007-02-15 Gschwind Michael K Methods for generating code for an architecture encoding an extended register specification
US20110296140A1 (en) 2010-05-25 2011-12-01 National Chung Cheng University RISC processor register expansion method
US9405548B2 (en) * 2011-12-07 2016-08-02 International Business Machines Corporation Prioritizing instructions based on the number of delay cycles
CN105573962B (zh) * 2013-03-15 2018-10-16 甲骨文国际公司 单指令多数据处理器与相关方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US20070186210A1 (en) * 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US20150178076A1 (en) * 2013-12-20 2015-06-25 Imagination Technologies Limited Processor with virtualized instruction set architecture & methods

Also Published As

Publication number Publication date
US20170212758A1 (en) 2017-07-27
WO2017125700A1 (en) 2017-07-27
US10331449B2 (en) 2019-06-25
JP6803390B2 (ja) 2020-12-23
IL260142B (en) 2020-06-30
EP3405863A1 (en) 2018-11-28
CN108463801B (zh) 2023-03-07
IL260142A (en) 2018-07-31
JP2019503010A (ja) 2019-01-31
CN108463801A (zh) 2018-08-28
EP3405863B1 (en) 2020-08-12
KR102560426B1 (ko) 2023-07-27

Similar Documents

Publication Publication Date Title
RU2656730C2 (ru) Процессоры, способы, системы и команды для сложения трех операндов-источников с плавающей запятой
JP4511461B2 (ja) データ処理システムでの処理動作マスキング
US5721927A (en) Method for verifying contiquity of a binary translated block of instructions by attaching a compare and/or branch instruction to predecessor block of instructions
US9575753B2 (en) SIMD compare instruction using permute logic for distributed register files
CN101539850B (zh) 单精度浮点数据存储方法和处理器
KR20130100900A (ko) 조건부 비교 명령
EP1267257A2 (en) Conditional execution per data path slice
US11307855B2 (en) Register-provided-opcode instruction
KR102508075B1 (ko) 인덱스 및 즉치로 벡터 치환을 수행하기 위한 방법 및 장치
CN107851013B (zh) 数据处理装置和方法
KR20110055629A (ko) 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공
US20130151822A1 (en) Efficient Enqueuing of Values in SIMD Engines with Permute Unit
CN115686633A (zh) 用于实现链式区块操作的系统和方法
JP2018500657A (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
EP1267258A2 (en) Setting up predicates in a processor with multiple data paths
JP2017538213A (ja) アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置
RU2583744C2 (ru) Устройство и способ связывания операций в памяти
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
KR101016257B1 (ko) 프로세서 및 정보 처리 장치
US7146491B2 (en) Apparatus and method for generating constant values
IL124905A (en) Processor that supports code size reduction
US11830547B2 (en) Reduced instruction set processor based on memristor
KR102560426B1 (ko) 제 1 및 제 2 아키텍처 레지스터 번호를 식별하는 명령의 인코딩
US6886091B1 (en) Replacing VLIW operation with equivalent operation requiring fewer issue slots
WO2005036384A2 (en) Instruction encoding for vliw processors

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant