KR102629722B1 - 이동 프리픽스 명령어 - Google Patents

이동 프리픽스 명령어 Download PDF

Info

Publication number
KR102629722B1
KR102629722B1 KR1020187012813A KR20187012813A KR102629722B1 KR 102629722 B1 KR102629722 B1 KR 102629722B1 KR 1020187012813 A KR1020187012813 A KR 1020187012813A KR 20187012813 A KR20187012813 A KR 20187012813A KR 102629722 B1 KR102629722 B1 KR 102629722B1
Authority
KR
South Korea
Prior art keywords
instruction
move
register
processing
prefix
Prior art date
Application number
KR1020187012813A
Other languages
English (en)
Other versions
KR20180067583A (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 KR20180067583A publication Critical patent/KR20180067583A/ko
Application granted granted Critical
Publication of KR102629722B1 publication Critical patent/KR102629722B1/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • 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

Abstract

장치(2)는 처리 회로(14)에 의해 처리될 융합된 명령어를 생성하기 위해 데이터 스토어로부터 페치된 2개 이상의 명령어를 융합하기 위한 명령어 퓨징 회로(50)를 갖는다. 이동 프리픽스 명령어가 이동 프리픽스 명령어 및 바로 다음 명령어에 의해 지정된 레지스터들을 비교할 필요없이 바로 다음의 데이터 처리 명령어와 융합될 수 있는 명령어 퓨징 회로(50)에 나타내는 이동 프리픽스 명령어가 제공된다. 이것은 명령어 퓨징 회로(50)가 감소된 하드웨어 및 에너지 비용으로 구현될 수 있게 한다.

Description

이동 프리픽스 명령어
본 기술은 데이터 처리 분야에 관한 것이다.
때때로 처리 회로는 처리 회로가 실행되도록 설계된 명령어 세트 아키텍처의 인코딩된 명령어에서 직접적으로 동등하지 않은 동작을 하드웨어적으로 지원할 수 있다. 예를 들어, 명령어 세트 아키텍처에서 이용 가능한 제한된 인코딩 공간은, 주어진 동작이 실행되고 있는 프로그램에 정의되는 2개 이상의 개별 명령어를 필요로 할 수 있음을 의미할 수 있지만, 처리 장치는 상기 처리 회로에 의해 지원되는 단일 융합된 명령어와 동등한 2개 이상의 명령어들의 그룹이 있다는 것을 검출하고, 만일 그렇다면 상기 융합된 명령어를 상기 처리 회로에 공급하여 실행하는 명령어 퓨징 회로를 가질 수 있다. 그러나, 융합될 수 있는 명령어들의 세트가 존재할 때를 검출하는 그러한 명령어 퓨징 회로는, 회로 면적 및 전력 소비 면에서 상대적으로 비쌀 수 있다. 성능보다 에너지 효율성이 더 중요할 수 있는 많은 로우 엔드 시스템(low end systems)의 경우, 명령어 융합(instruction fusion)의 오버헤드(overhead)가 너무 높을 수 있으므로 명령어 융합의 이점은 종종 그러한 시스템에서 사용할 수 없다.
적어도 몇몇 예는
명령어들에 응답하여 데이터 처리를 수행하는 처리 회로와,
상기 처리 회로에 의해 처리될 융합된 데이터 처리 명령어를 생성하기 위해 데이터 스토어로부터 페치된 이동 프리픽스 명령어 및 바로 다음 명령어를 융합하는 명령어 퓨징 회로를 구비하는 장치를 제공하고,
상기 이동 프리픽스 명령어는 이동 대상 레지스터와 적어도 부분적으로 상기 이동 대상 레지스터에 복사될 데이터 값을 지정하는 이동 소스 레지스터를 식별하고,
상기 이동 프리픽스 명령어의 검출에 응답하여, 상기 명령어 퓨징 회로는 상기 이동 프리픽스 명령어의 상기 이동 대상 레지스터가 상기 바로 다음 명령어에 의해 지정된 레지스터와 동일한 레지스터인지 여부에 관계없이 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할지 여부를 결정하도록 구성되고,
상기 이동 프리픽스 명령어는, 상기 바로 다음 명령어가, 미리 정해진 처리 동작을 적어도 2개의 소스 레지스터에 의해 지정된 적어도 2개의 소스 값에 적용한 결과에 대응하는 결과값으로 대상 레지스터가 설정되는 것이며, 또 상기 대상 레지스터와 상기 적어도 2개의 소스 레지스터 중 하나가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일한, 파괴적인 데이터 처리 명령어가 될 것으로 예상됨을 나타내고,
상기 바로 다음 명령어의 대상 레지스터가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일하지 않은 경우, 상기 이동 프로픽스 명령어와 상기 바로 다음 명령어를 융합하여 생성된 상기 융합된 데이터 처리 명령어는 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어가 독립적으로 실행되는 경우에 생성되는 결과와 상이한 결과를 제공할 수 있다.
적어도 몇몇 예는
처리 회로가 처리하기 위한 데이터 스토어로부터 페치된 명령어들 중에서, 이동 대상 레지스터를 식별하는 이동 프리픽스 명령어 및 상기 이동 대상 레지스터에 적어도 부분적으로 복사될 데이터 값을 지정하는 이동 소스 레지스터를 검출하는 단계와,
상기 처리 회로에 의해 처리될 융합된 데이터 처리 명령어를 생성하기 위해서 상기 이동 프리픽스 명령어를 바로 다음 명령어와 융합할지 여부를 결정하는 단계를 포함하는 데이터 처리 방법을 제공하고,
상기 이동 프리픽스 명령어가 검출될 때, 상기 결정 단계는 상기 이동 프리픽스 명령어의 상기 이동 대상 레지스터가 상기 바로 다음 명령어에 의해 지정된 레지스터와 동일한 레지스터인지 여부에 관계없이 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할지 여부를 결정하고,
상기 이동 프리픽스 명령어는, 상기 바로 다음 명령어가, 미리 정해진 처리 동작을 적어도 2개의 소스 레지스터에 의해 지정된 적어도 2개의 소스 값에 적용한 결과에 대응하는 결과값으로 대상 레지스터가 설정되는 것이며, 또 상기 대상 레지스터와 상기 적어도 2개의 소스 레지스터 중 하나가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일한, 파괴적인 데이터 처리 명령어가 될 것으로 예상됨을 나타내고,
상기 바로 다음 명령어의 대상 레지스터가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일하지 않은 경우, 상기 이동 프로픽스 명령어와 상기 바로 다음 명령어를 융합하여 생성된 상기 융합된 데이터 처리 명령어는 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어가 독립적으로 실행되는 경우에 생성되는 결과와 상이한 결과를 제공할 수 있다.
적어도 몇몇 예는
명령어들에 응답하여 데이터 처리를 수행하기 위한 수단과,
상기 처리 회로에 의해 처리될 융합된 데이터 처리 명령어를 생성하기 위해 데이터 스토어로부터 페치된 이동 프리픽스 명령어와 바로 다음 명령어를 융합하기 위한 수단을 구비하는 장치를 제공하고,
상기 이동 프리픽스 명령어는 이동 대상 레지스터와 상기 이동 대상 레지스터에 적어도 부분적으로 복사될 데이터 값을 지정하는 이동 소스 레지스터를 식별하고,
상기 이동 프리픽스 명령어의 검출에 응답하여, 상기 퓨징 수단은 상기 이동 프리픽스 명령어의 이동 대상 레지스터가 상기 바로 다음 명령어에 의해 지정된 레지스터와 동일한 레지스터인지 여부에 관계없이 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할지 여부를 결정하도록 구성되고,
상기 이동 프리픽스 명령어는, 상기 바로 다음 명령어가, 미리 정해진 처리 동작을 적어도 2개의 소스 레지스터에 의해 지정된 적어도 2개의 소스 값에 적용한 결과에 대응하는 결과값으로 대상 레지스터가 설정되는 것이며, 또 상기 대상 레지스터와 상기 적어도 2개의 소스 레지스터 중 하나가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일한, 파괴적인 데이터 처리 명령어가 될 것으로 예상됨을 나타내고,
상기 바로 다음 명령어의 대상 레지스터가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일하지 않은 경우, 상기 이동 프로픽스 명령어와 상기 바로 다음 명령어를 융합하여 생성된 상기 융합된 데이터 처리 명령어는 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어가 독립적으로 실행되는 경우에 생성되는 결과와 상이한 결과를 제공할 수 있다.
적어도 몇몇 예는 또한 데이터 처리 장치에 의해 실행될 때, 상술한 장치에 대응하는 명령어 실행 환경을 제공하는 가상 머신(virtual machine)을 제공하는, 컴퓨터 판독가능한 기억매체에 기억된 컴퓨터 프로그램를 제공할 수도 있다.
본 기술의 추가적인 국면, 특징 및 이점은 첨부 도면과 관련하여 판독되는, 실시 예에 대한 다음의 설명으로부터 명백해질 것이다 :
도 1은 명령어 퓨징 회로를 갖는 데이터 처리 장치의 일례를 개략적으로 도시한 것이다.
도 2는 이동 프리픽스 명령어가 바로 다음 명령어와 융합될 수 있는 명령어 퓨징 회로에 신호하기 위한 이동 프리픽스 명령어의 사용을 도시한 것이다.
도 3은 논프리픽스(non-prefix) 이동 명령어의 사용을 도시한 것이다.
도 4는 명령어들을 융합할지 여부를 결정하는 방법을 도시한 것이다.
도 5는 3가지 상이한 타입의 이동 프리픽스 명령어 및 바로 다음 명령어와 함께 이들의 사용을 도시한 것이다.
도 6과 도 7은 예외 또는 다른 중단 이벤트를 처리하는 2가지 다른 방법을 도시한 것이다.
도 8은 가상 머신 구현을 도시한 것이다.
본 기술의 구체적인 예를 이하에 설명한다. 본 기술은 이들 예들에 한정되지 않는다는 것을 이해할 것이다.
이동 프리픽스 명령어의 대상 레지스터가 바로 다음 명령어에 의해 지정된 어느 레지스터와 동일한지를 체크할 필요없이 이동 프리픽스 명령어와 그 바로 다음 명령어를 융합하는 것이 안전하다는 것을 명령어 퓨징 회로에 신호하기 위한 바로 다음 명령어 전에 위치될 수 있는 이동 프리픽스(move prefix) 명령어가 제공된다. 이것은 각 명령어의 레지스터들을 비교하기 위한 비교기를 가질 필요가 있는 명령어 퓨징 회로를 피해서, 명령어 융합을 하드웨어적으로 구현하는데 더 저렴하게 함으로써 명령어 융합이 이전에 하드웨어 및 에너지 소비 측면에서 너무 비쌌던 로우 엔드 시스템(lower end systems)에 명령어 융합을 사용할 수 있게 한다.
데이터 처리 명령어들은 구조 명령어 또는 파괴 명령어로서 정의될 수 있다. 구조 명령어는 데이터 처리 명령어의 대상 레지스터와 소스 레지스터를 개별적으로 식별하는 별도의 레지스터 지정자에 대한 공간이 있는 인코딩을 갖는다. 한편, 파괴 명령어의 경우, 인코딩은 대상 레지스터와 소스 레지스터들 중 하나를 식별하는 단일 레지스터 지정자를 가질 수 있다. 구조 명령어의 예는 처리 회로가 연산 Rd = Rs1 + Rs2를 수행하도록 트리거할 수 있는 가산 명령어 ADD Rd, Rs1, Rs2일 수 있다. 파괴적인 연산의 일례는 가산 연산 Rd = Rd + Rs1을 수행하도록 처리 회로를 트리거하는 가산 명령어 ADD Rd, Rs1일 수 있다.
명령어의 구조적인 형태는 모든 입력 오퍼랜드의 이전 값을 유지하기 때문에 유용할 수 있으므로, 여러 명령어가 동일한 입력을 요구하면 이전 구조 명령어와 동일한 소스 레지스터를 계속 참조할 수 있다. 예를 들어, 상기 논의된 구조적인 가산 연산에서, 레지스터 Rs1이 또 다른 명령어에 대해 다시 필요할 경우, 구조적인 형식을 사용하면 가산을 수행하기 전에 레지스터를 조작하기 위한 어떠한 추가 명령어도 요구하지 않고 이 값이 보존되도록 허용한다.
그러나, 일부 명령어 세트 아키텍처에서는, 인코딩 공간이 귀하며 각 소스 오퍼랜드에 대한 레지스터 지정자 외에도 대상 레지스터에 대한 별도의 레지스터 지정자를 수용할 공간이 충분하지 않을 수 있다. 따라서, 일부 명령어 세트 아키텍처는 일부 명령어에 대해 구조적인 인코딩을 제공하지 않으므로, 파괴적인 인코딩은 유일하게 프로그래머 또는 컴파일러가 이용할 수 있는 것일 수 있다. 파괴적인 인코딩은 파괴 명령어의 결과를 소스 레지스터들 중 하나에 기록하는 것에 의해 보다 적은 레지스터 지정자가 명령어에서 인코딩될 필요가 있기 때문에 인코딩 공간을 절약한다. 그럼에도 불구하고, 명령어가 완료된 후에 모든 명령어 입력이 활성 상태(다시 판독됨)로 남아 있다는 것을 데이터 흐름 분석이 나타내면 명령어의 구조적인 형식을 프로그래머나 컴파일러가 사용하기 원한다는 것이 일반적이다. 원하는 연산을 수행하기 위한 구조 명령어가 명령어 세트 아키텍처에서 사용 가능하지 않는 경우, 프로그래머 또는 컴파일러는 파괴 명령어 이전에 레지스터 이동 또는 복사 명령어를 어딘가에 삽입하여 이를 해결할 수 있다.
예를 들어, 다음 벡터 연산에는 아키텍처에서 이용 가능한 구조 명령어가 없을 수 있다.
(1) rd = pg? rs1 + rs2 : 0; // ADD Zd.S, Pg/Z, Zs1.S, Zs2.S에 해당한다.
여기서 rd는 대상 레지스터이고, rs1과 rs2는 소스 레지스터이며, pg는 벡터 레지스터들의 어느 요소들이 요소활성 또는 비활성 요소인지를 식별하는 술어 값(predicate value)이며, 여기서 활성 요소는 소스 레지스터들에서 해당 요소의 합 rs1 + rs2로 설정되고, rd의 비활성 요소들은 0으로 설정된다.
위에 표시된 구조적인 ADD 명령어를 사용할 수 없는 경우, 프로그래머 또는 컴파일러는 대신 별도의 이동 및 파괴적인 추가 명령어를 사용할 수 있다.
(2) rd = pg? rs1 : 0; // MOV Zd.S, Pg/Z, Zs1.S에 해당
rd = pg? rd'+ rs2 : rd; // ADD Zd.S, Pg/M, Zs2.S에 해당
(위에 나타낸 벡터 명령어 구문에서, 술어(predicate)에 대한 접미어 /Z 또는 /M은 제로잉(zeroing) 또는 병합 예측이 사용되는지 여부를 나타낸다. 제로잉 예측(zeroing) predication)의 경우, 결과의 비활성 요소는 0으로 설정되고, 병합 예측(merging predication)의 경우, 비활성 요소는 대상 레지스터 Zd.S의 해당 요소에 이전에 저장되었던 동일한 값을 유지한다).
따라서, 예제(2)의 두 명령어를 사용하면, 레지스터 Zs1.S(rs1)의 콘텐츠를 보존하여 다음 명령어로 판독할 수 있다. 그러나, 디코딩하고 처리해야 하는 부가 명령어를 필요로 하는 경우 성능이 저하될 수 있다.
실제로, 처리 회로의 하드웨어는 비록 구조 명령어가 명령어 세트 아키텍처 내에 제공되지 않더라도 여전히 구조적인 데이터 처리 동작을 지원할 수 있다. 예를 들어, 주어진 명령어 세트 아키텍처는 인코딩 공간에 가장 큰 압력이 있는 명령어들에 대해서만 파괴적인 인코딩을 사용할 수 있고, 명령어에서 인코딩될 더 적은 다른 값을 필요로 하는 다른 타입의 명령어는 별도의 대상 레지스터 지정자에 충분한 공간을 갖는다. 따라서, 명령어 세트 아키텍처에 몇몇 파괴 명령어들이 있더라도, 몇몇 구조 명령어가 있다는 사실은 처리 회로 자체의 하드웨어가 여전히 별도의 소스 및 대상 레지스터 지정자를 수신하기 위한 입력을 갖고 있음을 의미할 수 있으며, 따라서 비교적 적은 수정으로 파괴 명령어가 또한 처리 회로에 발행될 구조적인 동작으로 변형될 수 있다.
따라서, 일부 구현 예들은 실제로 해당 구조적인 데이터 처리 동작을 구현하도록 되어 있는 상기와 같은 이동 명령어 및 다음의 데이터 처리 명령어의 시퀀스가 있는 경우를 인식하기 위한 명령어 퓨징 회로를 제공할 수 있으며, 이러한 시퀀스가 인식될 경우, 명령어 퓨징 회로는 이들을 융합하여 단일의 융합된 데이터 처리 명령어를 생성하여 처리 회로가 구조적인 동작을 수행하도록 트리거할 수 있다. 예를 들어, 처리 회로는 예(2)로부터의 별도의 벡터 MOV 및 ADD 명령어 대신에, 위의 예(1)에 표시된 것처럼 구조적인 벡터 ADD 명령어로 발행될 수 있다.
그러나, 이러한 명령어 융합을 더 어렵게 만드는 여러 가지 문제가 있다. 첫째로, 이동 명령어 및 다음의 데이터 처리 명령어의 쌍이 페이지 경계 또는 캐시 라인 또는 명령어 페치 경계를 가로지르는 경우, 명령어 퓨징 회로는 이동 명령어와 동일한 명령어들의 배치(batch)에서 다음의 데이터 처리 명령어를 만나지 않을 수 있는데, 그것은 명령어는 이동 명령어를 보고 다음의 데이터 처리 명령어를 보는 것 사이에 몇 가지 부가적인 내부 상태를 유지하지 않고 명령어들의 조합을 식별하는 것을 더 어렵게 만들 수 있다. 이러한 부가적인 내부 상태를 유지하면 명령어 퓨징 회로의 하드웨어 오버 헤드가 증가한다.
또한, 명령어와 다음의 데이터 처리 명령어를 융합(fuse)할 수 있게 하기 위해서, 명령어 퓨징 회로는 이동 및 데이터 처리 명령어의 오퍼랜드가 융합될 수 있도록 호환성이 있는지를 검사할 필요가 있을 수 있다. 예를 들어, 명령어 퓨징 회로는, 이동 및 다음의 데이터 처리 명령어의 대상 레지스터들이 동일하고, 그 레지스터를 덮어쓰는 개입(invervening) 명령어가 없으며, 명령어들이 벡터 오퍼랜드의 어떤 데이터 요소가 활성 요소인지 식별하는 술어 레지스터(predicate register)를 지정하는 벡터 명령어들이면, 2개의 명령어에 의해 지정된 술어 레지스터들도 동일하다는 것을 검사할 필요가 있을 수 있다. 이들 검사는 이동 명령어와 다음의 데이터 처리 명령어가 실제로 동등한 구조적인 연산을 구현하기 위한 것이지 독립적인 연산이 아니라는 것을 보장할 것이다. 이러한 모든 검사를 수행하면 명령어 퓨징 회로의 복잡성이 크게 증가할 수 있어 이것은 상대적으로 로우 엔드(low end) 구현에 적합하지 않을 수 있다.
융합과 관련된 또 다른 문제는 융합된 명령어가, 부동 소수점 명령어가 오버플로우(overflow) 또는 언더플로우(underflow) 또는 0으로 나누기와 같은 부동 소수점 예외를 만날 때와 같은, 예외 조건을 트리거할 수 있다는 것이다. 이러한 예외 처리는 융합된 명령어에 대해 더 복잡할 수 있다.
이러한 모든 이유로, 일반적으로 명령어 융합은 성능이 에너지 효율성보다 더 중요한 요건인 비교적 하이 엔드 구현에서 이동 및 데이터 처리 명령어에 대해서만 가능했다. 융합의 이점을 로우 엔드(lower end) 구현에도 사용할 수 있게 하는 것이 바람직하다.
이러한 문제를 해결하기 위해, 이동 프리픽스(move prefix) 명령어와 바로 다음 명령어가 융합될 수 있다는 신호를 보내기 위해 바로 다음 명령어를 프리픽스(prefix)하기 위해 프로그래머 또는 컴파일러가 사용할 수 있는 전용 이동 프리픽스 명령어가 제공된다. 이동 프리픽스 명령어는 적어도 부분적으로 이동 대상 레지스터에 복사될 데이터 값을 지정하는 이동 소스 레지스터 및 이동 대상 레지스터를 식별한다. 이동 프리픽스 명령어가 검출될 때, 명령어 퓨징 회로는 이동 프리픽스 명령어의 이동 대상 레지스터가 바로 다음의 레지스터에 의해 지정된 어떤 레지스터와 동일한 레지스터인지 여부와 무관하게 이동 프리픽스 명령어 및 바로 다음 명령어를 융합할지 여부를 결정할 수 있다.
따라서, 이동 프리픽스 명령어가 제공되었다는 사실은 바로 다음 명령어가 대상 레지스터와 제1 소스 레지스터가 이동 프리픽스 명령어의 이동 대상 레지스터와 동일한 파괴적인 데이터 처리 명령어일 것으로 예상되는 신호이기 때문에, 명령어 퓨징 회로는 이동 프리픽스 명령어와 바로 다음 명령어의 레지스터들을 비교할 필요가 없다. 요약하면, 이동 명령어와 파괴 명령어의 쌍이 구조적인 조작 융합(constructive operation fusion)을 구현하려고 할 때 프로그래머 또는 컴파일러에게 이동 프리픽스 명령어를 선택하는 책임을 부여함으로써, 융합이 가능한 경우를 검출하기 위한 처리 회로에서 더 복잡한 하드웨어를 필요로 하는 것을 회피하여, 전력 소비와 회로 면적을 절약할 수 있다.
도 1은 다수의 파이프라인 스테이지를 포함하는 처리 파이프라인(4)을 구비하는 데이터 처리 장치(2)의 일례를 개략적으로 도시한 것이다. 이 예에서, 파이프라인 스테이지는 데이터 스토어(예를 들어, 명령어 캐시 또는 메모리)로부터 명령어들을 페치하기 위한 페치 스테이지(6), 페치된 명령어들을 디코딩하는 디코드 스테이지, 레지스터 리네이밍(renaming)을 수행하기 위한 리네임 스테이지(10), 및 발행된 명령어들을 실행하기 위한 실행 스테이지(14)를 포함한다. 실행 스테이지(14)는 서로 다른 종류의 명령어들을 실행하기 위한 다수의 실행 유닛, 예를 들면, 스칼라 데이터 처리 명령어들을 실행하기 위한 스칼라 ALU(arithmetic logic unit)(20), 벡터 데이터 처리 명령어들을 실행하기 위한 벡터 ALU(22), 부동 소수점 명령어들(어떤 경우에는 별도의 스칼라 및 벡터 부동 소수점 유닛이 제공될 수 있음)를 실행하기 위한 부동 소수점 유닛(24), 및 레지스터(30)와 데이터 캐시 또는 메모리와 같은 데이터 스토어 사이에서 데이터를 전송하기 위한 로드/저장 명령어들을 실행하기 위한 로드/스토어 유닛(26)을 포함한다. 로드/저장 명령어들에 의해 지정된 가상 어드레스들을 데이터 캐시 또는 메모리 내의 위치를 식별하는 물리적 어드레스로 변환하기 위한 어드레스 변환 데이터를 캐싱하기 위해 변환 룩 어사이드 버퍼(TLB:translation look aside buffer)(32)가 제공될 수 있다.
레지스터(30)는 단일 데이터 요소를 각각 포함하는 스칼라 오퍼랜드를 저장하기 위한 스칼라 레지스터(34), 다수의 데이터 요소를 각각 포함하는 벡터 오퍼랜드를 저장하는 벡터 레지스터(36), 및 벡터 레지스터(36)의 어떤 요소가 활성인지 비활성인지를 식별하는 술어 값(predicate values)을 저장하기 위한 술어 레지스터(38)를 포함한다. 벡터 ALU(22)에 의해 처리된 벡터 명령어에 응답하여, 하나 이상의 벡터 오퍼랜드가 벡터 레지스터(36)로부터 판독될 수 있고, 술어 레지스터(38) 중 하나에 저장된 술어 값은 술어 값으로 나타낸 임의의 활성 데이터 요소에 대하여 주어진 데이터 처리 동작을 수행하도록 벡터 ALU(22)를 제어하여 벡터 레지스터들 중 하나에 다시 기록될 해당 결과 데이터 요소들을 생성하는 반면, 술어로 나타낸 비활성 레인(inactive lanes)에 대응하는 임의의 요소들은 일부 다른 값을 취할 수 있다. 상이한 비활성 레인 처리 모드는 대상 레지스터에서 비활성 레인의 값을 설정하는 방법을 결정하기 위해 정의될 수 있다. 예를 들어, 비활성 결과 데이터 요소는 소정 값(예를 들어, 제로)으로 클리어되거나 대상 레지스터의 해당 요소의 이전 값을 유지할 수 있다. 다른 한편으로, 스칼라 명령어들에 대해서는, 스칼라 ALU(20) 또는 부동 소수점 유닛(24)은 스칼라 레지스터들(34)로부터 데이터 값들을 판독하고, 이들을 처리하여 결과 값을 다시 스칼라 레지스터들(34) 중 하나에 기록할 수 있다.
도 1의 예에서, 파이프라인(4)은 명령어들이 페치 스테이지(6)에 의해 페치된 프로그램 순서와 다른 순서로 명령어들의 실행을 지원하는 비순차(out-of-order) 파이프라인이다. 발행 스테이지(12)는 그들의 오퍼랜드가 이용 가능하게 될 때까지 대기하는 동안 실행될 명령어를 큐잉(queuing)하기 위한 이슈 큐(issue queue)(40)를 갖는다. 명령어의 오퍼랜드가 이용 가능해지면, 프로그램 오더의 이전 명령어가 그 오퍼랜드를 여전히 기다리고 있는 경우에도 실행 스테이지(40)에 의한 실행을 위해 발행될 수 있다. 명령어의 재정렬(reordering)이 가능한 범위를 증가시키기 위해, 리네임 스테이지(10)는 하드웨어적으로 제공된 물리적 레지스터(30)를 식별하는 물리적 레지스터 지정자에 페치된 명령어에 의해 지정된 아키텍처 레지스터 지정자를 매핑하도록 제공된다. 일반적으로 제공된 물리적 레지스터의 수는 명령어 세트 아키텍처에서 이용가능한 아키텍처 레지스터의 수보다 커서, 이들 명령어 간의 의존을 제거할 수 있도록 동일한 아키텍처 레지스터를 지정하는 상이한 명령어들이 상이한 물리적 레지스터에 매핑되게 한다. 이를 통해 더욱 유연하게 명령어의 실행을 재정렬함으로써, 성능을 개선할 수 있다. 리네임 스테이지(10)는 아키텍처 레지스터 지정자와 물리적 레지스터 지정자 간의 매핑을 추적하기 위한 리네임 테이블(42)을 유지한다.
다른 예들은 그들 원래의 프로그램 순서로 프로그램 명령어들이 실행되는 순차(in-order) 파이프라인을 제공할 수 있다는 것을 이해할 것이다. 이 경우, 리네임 스테이지(10)는 생략될 수 있고, 발행 스테이지(12)는 그 오퍼랜드가 이용 가능하고 프로그램 순서에서의 이전 명령어들이 발행되었을 때 주어진 명령어를 발행할 수 있다.
이것은 가능한 파이프라인 아키텍처의 단지 하나의 예이며, 다른 예들은 실행 스테이지(14)에서 상이한 스테이지 또는 상이한 실행 유닛의 조합을 가질 수 있음을 이해할 수 있을 것이다. 예를 들어, 일부 파이프라인은 디코드 스테이지(8)에서 다른 명령어들의 디코딩을 블로킹하는 것을 피하기 위해 이슈 큐(40)가 가득 차면 디코딩된 명령어들이 디스패치(dispatch) 스테이지에서 대기할 수 있도록 디코드 스테이지(8)와 발행 스테이지(12) 사이에 부가적인 디스패치 스테이지를 가질 수 있다.
페치 회로(6)에 의해 데이터 스토어로부터 페치된 명령어들은 "매크로 명령어(macro-instructions)"라고 칭하는 반면, 실행을 위해 실행 스테이지(14)로 전달되는 디코딩된 명령어들은 "마이크로 명령어(micro-instructions)" 또는 "마이크로 연산(micro-operations)"이라고도 칭할 수 있다. 일부 타입의 명령어의 경우, 캐시 또는 메모리로부터 페치된 매크로 명령어와 실행 스테이지(14)에 의해 실행된 마이크로 연산 사이에 일대일 매핑이 있을 수 있다. 그러나, 다른 타입의 명령어의 경우, 복소 명령어는 디코드 스테이지(8)에 의해 다중 마이크로 연산으로 디코딩될 수 있으며, 다중 마이크로 연산은 실행 스테이지(14)에 의한 실행을 위해 별도로 발행될 수 있다. 예를 들어, 다중 로드 명령어는 메모리로부터 상이한 레지스터로 데이터를 로드하기 위한 다수의 개개의 로드 마이크로 연산으로 디코딩될 수 있다.
또한, 2개 이상의 매크로 명령어는 실행될 단일 마이크로 명령어를 생성하도록 융합될 수 있다. 이 예에서, 디코드 스테이지(8)는 명령어 캐시 또는 메모리로부터 페치 스테이지에 의해 페치된 명령어들의 스트림 내에서 검출된 2개 이상의 명령어들의 다양한 그룹들을 융합하기 위한 명령어 퓨징 회로(50)를 가지며, 이러한 그룹이 검출될 때, 이들을 융합하여 단일 융합된 데이터 처리 명령어를 생성하면 처리를 위한 다음 스테이지로 전송될 수 있는 동일한 결과가 제공된다. 이것은 단일 명령어가 일반적으로 두 개 이상의 개별 명령어보다 더 빠르게 실행될 수 있기 때문에 성능을 향상시킨다. 도 1은 명령어 퓨징 회로(50)를 포함하는 디코드 스테이지(8)를 도시하지만, 다른 예에서, 명령어 융합은 디스패치 스테이지 또는 발행 스테이지(12)와 같은 다른 스테이지에서 발생될 수 있다(예를 들어, 디코드 스테이지(8)는 명령어들의 그룹을 별도의 디코딩된 명령어들로 초기에 디코딩할 수 있지만, 발행 스테이지에서의 퓨징 회로는 이들을 단일 마이크로 연산으로 융합할 수 있다). 따라서, 디코딩할 때 명령어 융합이 발생하는 것은 필수적이지는 않다.
명령어 퓨징 회로(50)는 처리 회로(14)로 보내지는 해당 융합된 명령어(융합된 마이크로 연산)에 매핑될 수 있는 융합 가능한 명령어들의 그룹을 검출할 수 있다. 해당 융합된 명령어에 각각 매핑될 수 있는 여러 다른 융합 가능한 그룹이 있을 수도 있다. 그러나, 다음의 예는 이동 프리픽스 명령어 및 바로 다음 명령어를 포함하는 특정 그룹에 초점을 맞출 것이다. 이것은 다른 타입의 명령어를 또한 융합할 수 있는 명령어 퓨징 회로(50)를 배제하지 않는다.
도 2는 명령어 퓨징 회로(50)에 의해 수행된 명령어 융합의 예를 도시한 것이다. 도 2의 상부는 프로그래머 또는 컴파일러가 실제로 사용하기를 원하지만, 장치(2)에 의해 지원되는 명령어 세트 아키텍처에서 이용 가능하지 않은 구조적인 가산 명령어를 도시한 것이다. 구조적인 가산 명령어는 대상 레지스터 Zd, 술어 레지스터 Pg 및 2개의 소스 레지스터 Zs1, Zs2를 지정한다. 구조적인 가산 명령어는 벡터 레지스터 Zs1, Zs2로부터 벡터를 판독하고 두 개의 벡터의 해당 데이터 요소의 각각의 쌍에 대해 일련의 가산 연산을 수행하여 대상 레지스터 Zd에 기록될 대응하는 결과 데이터 요소들을 생성하도록 장치를 제어하기 위한 것이다. 술어 레지스터 Pg에 의해 비활성으로서 식별된 어떤 요소들은 가산과 관계없는 일부 다른 값으로 결과의 해당 데이터 요소를 설정하게 하는 반면, 활성 레인은 소스 벡터의 해당 데이터 요소들의 가산 결과를 취한다.
그러나, 구조적인 가산 명령어는 이용 가능하지 않기 때문에, 프로그래머 또는 컴파일러는 도 2의 중간 부분에 도시된 바와 같이 이동 프리픽스 명령어 및 파괴 가산 명령어를 대신 제공한다. 이동 프리픽스 명령어는 대상 레지스터 Zd 및 소스 레지스터 Zs1을 지정하고, 처리 장치를 트리거하여 이동 대상 레지스터 Zd를 이동 소스 레지스터(Zs1)와 동일하게 설정하기 위한 것이다. 선택적으로, 이동 프리픽스 명령어는, 대상 레지스터 Zd의 어느 데이터 요소가 소스 레지스터 Zs1로부터 해당 요소로 채워지는 활성 요소인지를 제어하기 위해 술어 레지스터 Pg를 지정할 수도 있다. 그러나, 비술어적 이동 프리픽스 명령어(unpredicated move prefix instruction)가 또한 제공될 수 있으며, 이 경우 전체 소스 값은 레지스터 Zs1에서 대상 레지스터 Zd로 복사될 수 있다. 다음의 파괴 가산 명령어는 이동 프리픽스 명령어 및 동일한 술어(predicate) Pg(술어가 이동 프리픽스 명령어에 제공되는 경우)와 동일한 대상 레지스터 Zd를 지정하고, 또한 제2 소스 레지스터 Zs2를 지정한다. 가산 명령어는 레지스터 Zd 및 Zs2에 요소들의 각각의 쌍을 부가하고 각 결과를 대상 레지스터 Zd의 해당 요소에 기록하도록 처리 하드웨어를 제어하기 위한 것이며, 대상 레지스터의 이들 요소에 이전 값을 덮어쓴다. 다시 말하면, 술어 레지스터는 어떤 레인이 활성 및 비활성인지를 제어하고, 어떤 비활성 레인은 가산과 관계없이 설정된다(예를 들면, 그들은 0 또는 대상 레지스터의 이전 값으로 설정될 수 있다).
명령어 퓨징 회로(50)는 이동 프리픽스 명령어 및 파괴 가산 명령어를 포함하는 한 쌍의 명령어를 검출하고 그들을 융합할지 여부를 결정한다. 도 2의 하부에 도시된 바와 같이, 명령어 퓨징 회로(50)는 이러한 명령어들을 융합하지 않기로 결정한 후 융합되지 않은 이동 및 가산 명령어들이 개별적으로 실행하기 위해 파이프라인의 다음 스테이지들에 발행된다. 한편, 명령어들이 융합되면 프로그램이나 컴파일러의 원래 의도와 같이 융합된 구조적인 가산 명령어로 대체된다.
이동 프리픽스(move prefix) 명령어를 다음 명령어와 융합할지 여부의 결정은 어떤 특정 데이터 처리 동작이 다음 명령어에 의해 지정되는지를 포함할 수 있는 다양한 인자들(factors)에 의존할 수 있다. 따라서, 명령어들이 융합되는지 여부는 이동 프리픽스 명령어의 상이한 인스턴스(instances)에 대해 동적으로 변할 수 있다. 도 2의 예에서, 이동 프리픽스 명령어 바로 다음의 명령어는 가산 명령어이지만, 유사하게 이동 프리픽스 명령어는 다른 형태의 산술 명령어(뺄셈, 곱셈, 나눗셈, 제곱근, 곱셈 덧셈(multiply add) 등) 또는 논리 명령어(AND, OR, XOR, NAND 등)과 같은 다른 형태의 데이터 처리 명령어들을 프리픽스할 수 있다. 따라서, 이동 프리픽스 명령어로 프리픽스될 수 있는 상이한 종류의 데이터 처리 명령어의 전체 클래스(class)가 있을 수도 있다. 이동 프리픽스 명령어가 데이터 처리 명령어의 클래스 중의 어느 것인가와 융합될 때, 명령어 퓨징 회로(50)는 바로 다음 명령어의 연산코드(opcode)로부터 해당 융합된 데이터 처리 명령어의 어떤 클래스가 생성되는지를 결정할 수 있다.
일부 구현 예에서, 퓨징 회로(50)는 이동 프리픽스 명령어를 단지 그 클래스 내의 특정 타입의 데이터 처리 명령어에 대한 바로 다음 명령어와 융합할 수 있지만 이들 모두는 아니다. 예를 들어, 부동 소수점 명령어로 상기 언급한 것처럼, 부동 소수점 연산이 0으로 값을 나누려고 때, 또는 부동 소수점 결과가 오버플로우(overflow)되거나 언더플로우(underflow)되거나 부정확할 때와 같이 부동 소수점 예외가 발생할 위험이 있을 수 있다. 융합된 명령어가 실행될 때 이러한 예외 조건을 다루는 복잡성을 피하기 위해, 구현은 수행될 연산이 예를 들어 부동 소수점 연산일 때 바로 다음 명령어와 이동 프리픽스를 융합하는 것을 피할 수 있다.
또한, 이동 프리픽스 명령어 및 다음 명령어가 상이한 캐시 라인에 홀드되거나 어드레스 공간의 상이한 페이지에 명령어 어드레스를 갖는 경우, 명령어 퓨징 회로(50)는 이들을 융합하지 않도록 선택할 수 있는데, 그 이유는 예를 들어 이동 프리픽스 명령어가 디코드 스테이지(8)에서 만난 명령어의 한 블록의 마지막 명령어일 수 있으며 다음 명령어가 다음 블록의 첫 번째 명령어일 것이므로, 이들 두 명령어는 동시에 만나지 않을 수도 있기 때문이다. 하나의 블록의 마지막 명령어에서 이동 프리픽스를 만날 때, 두 명령어를 보는 것 사이의 상태를 유지하는 것을 피하기 위해, 명령어 퓨징 회로(50)는 단순히 그것과 다음 명령어를 융합하지 않도록 결정할 수 있다.
그러나, 융합 여부에 대한 결정은, 바로 다음 명령어가 구조 또는 파괴 명령어인지 여부, 이동 프리픽스 명령어와 바로 다음 명령어의 대상 레지스터들이 동일한지 여부, 이동 프리픽스 명령어와 바로 다음 명령어의 술어 레지스터들이 동일한지 여부, 및 바로 다음 명령어의 소스 레지스터 중 하나가 이동 프리픽스 명령어의 대상 레지스터와 동일한지 여부를 포함하는, 몇 가지의 요인과는 관계가 없다. 프로그래머 또는 컴파일러가 (레지스터들 사이에서 데이터 값을 이동시킬 수 있는 일부 다른 종류의 명령어보다는) 전용 이동 프리픽스 인코딩을 사용하여 이동 프리픽스 명령어를 선택하기를 원한다는 사실은 이동 프리픽스 명령어가 바로 다음의 데이터 처리 명령어와 병합하는 것이 안전하다는 표시이기 때문에, 명령어 퓨징 회로(50)는, 이들 조건의 어느 것이든 체크할 필요가 없다. 이들 모든 조건을 체크하는 필요성을 제거함으로써, 명령어 퓨징 회로(50)는 하드웨어적인 면에서 훨씬 더 효율적일 수 있으므로, 이를 통해 더 간편한 파이프라인 구현을 위해 명령어 융합이 이용 가능해져, 상대적으로 낮은 엔드 시스템(low end system)의 성능을 증가시킬 수 있다.
일부 구현 예에서, 명령어 퓨징 회로(50)는 바로 다음 명령어가 실제로 데이터 처리 명령어인지를 체크하지 않을 수도 있다. 프로그래머 또는 컴파일러는 이동 프리픽스 명령어를 예측 가능한 결과를 제공하기 위해 제한된 세트의 파괴적인 데이터 처리 명령어와 쌍을 이루어야 하지만, 명령어 퓨징 회로(50)는 바로 다음 명령어가 실제로 그 세트의 파괴적인 데이터 처리 명령어들 중의 하나인지를 체크할 필요가 없고, 프로그래머 또는 컴파일러가 로드, 저장 또는 분기 명령어 직전에 이동 프리픽스 명령어를 배치하면, 명령어 퓨징 회로(50)는 여전히 융합된 데이터 처리 명령어를 생성하기 위해 명령어를 융합할 수 있고, 결과는 예측할 수 없을 것이다. 다음 명령어가 융합되어야 하는 허용된 세트의 파괴적인 데이터 처리 명령어들 중 하나인지 여부를 체크하는 필요성을 회피함으로써, 명령어 퓨징 회로(50)의 오버헤드가 감소될 수 있다. 대안적으로, 다른 구현 예들은 로드, 저장, 분기 또는 융합되어서는 안 되는 다른 타입의 명령어가 아니라는 것을 결정하기 위해 바로 다음 명령어의 타입을 체크할 수 있다.
도 2와 대조적으로, 도 3은 도 2에 도시된 이동 프리픽스 명령어와 다르게 인코딩되는 표준 이동 명령어를 포함하는 명령어의 시퀀스를 나타낸다. 프로그래머 또는 컴파일러는, 다음 데이터 처리 동작이 이전의 이동과 관계가 없는 것이므로 명령어의 쌍이 구조적인 동작을 복제하기 위한 것이 아닌 경우 표준 이동 명령어를 선택할 수 있다. 표준 이동 명령어의 경우, 명령어 퓨징 회로(50)는 이동 명령어를 융합을 위한 후보로서 인식하지 않을 수 있고, 다음 데이터 처리 명령어와 별도로 파이프라인의 다음 스테이지들에 의한 처리를 위해 단순히 이동 명령어를 전송할 수 있다.
도 3에 도시된 표준 이동 명령어의 명령어 인코딩은 도 2의 이동 프리픽스 명령어의 명령어 인코딩과 어떤 방식으로든 구별될 수 있다. 그것이 표준 이동 명령어인지 이동 프리픽스 명령어인지 여부를 지정하는 필드를 이동 명령어에 제공하는 것이 가능하다. 그러나, 실제로 이동 프리픽스 명령어는 표준(논프리픽싱(non-prefixing)) 이동 명령어와 완전히 다른 연산 코드(opcode)를 가질 수 있다. 하나의 레지스터에서 다른 레지스터로 데이터 값을 이동시키는 것은, 실제로 두 개의 동일한 오퍼랜드에 대해 논리 OR을 수행하고 그 결과를 레지스터에 배치하는 OR 명령어, 2개의 동일한 오퍼랜드에 대하여 논리 AND 연산을 수행하고 그 결과를 레지스터에 배치하는 AND 명령어, 이동시킬 오퍼랜드에 0을 더하는 ADD 명령어, 또는 그것의 소스 오퍼랜드 중 하나와 동일한 결과를 제공하는 어떤 다른 명령어와 같은, 다른 종류의 명령어들을 사용하여 구현될 수 있다. 따라서, 이동이 사실상 이미 제공된 또 다른 명령어를 사용하여 구현될 수 있는 경우, 전용 이동 명령어에 대한 명령어 세트 아키텍처에서 인코딩 공간을 낭비할 가치가 없는 경우가 종종 있다. 따라서, 실제로 도 3에 도시된 종래의 이동 명령어는 사실상 그 입력 오퍼랜드들 중 하나와 동일한 결과를 제공하는 또 다른 명령어일 수 있으며, 이것은 도 2에 도시된 이동 프리픽스 명령어와는 다른 연산 코드를 가질 수 있다.
몇몇 경우에 있어서, 융합되지 않은 이동 프리픽스 명령어가 실행될 때, 명령어는 실행 스테이지(14)에 발행될 수 있고, 실행 스테이지(14)는 대상 레지스터에 소스 값을 실제로 기록할 수 있다. 그러나, 이동 프리픽스 명령어가 스칼라 명령어, 비술어적 벡터 명령어(unpredicated vector instruction), 또는 술어가 모든 요소를 활성으로서 식별하는 술어적(predicated) 벡터 명령어인 경우, 대상 레지스터의 아키텍처 레지스터 지정자가 이전에 소스 레지스터의 아키텍처 레지스터 지정자에 이전에 매핑된 물리적 레지스터에 지금 매핑되도록 리네임 테이블(42)을 갱신함으로써 간단히 리네임 스테이지(10)에서 이동이 수행될 수 있다. 따라서, 몇몇 타입의 레지스터 이동은 발행 스테이지에서 슬롯이 할당되거나 실행 스테이지(14)에서 어떤 동작이 할당될 필요가 없으며, 간단히 레지스터 리네이밍을 통해 구현될 수 있다.
도 4는 명령어의 융합을 제어하는 방법을 도시한 것이다. 스텝 60에서, 명령어 퓨징 회로(50)는 페치된 명령어가 이동 대상 레지스터(R1), 이동 소스 레지스터(R2) 및 선택적으로 술어 레지스터(P1)를 지정하는 이동 프리픽스 명령어를 포함하는지 여부를 검출한다. 그렇지 않은 경우, 페치된 명령어는 다른 방법으로 처리된다. 이동 프리픽스 명령어가 검출되면, 스텝 62에서, 명령어 퓨징 회로(50)는 이동 프리픽스 명령어의 대상 레지스터(R1)가 바로 다음의 명령에 의해 지정된 레지스터들 중의 어느 하나와 동일한 것인지 여부와 무관하게 이동 프리픽스 명령어를 바로 다음 명령어와 융합할지 여부를 결정한다. 이동 프리픽스 명령어가 검출될 때, 바로 다음 명령어와 항상 융합되는 반면, 다른 경우에는 명령어에 의해 트리거될 특정 타입의 데이터 처리 동작과 같은 다른 요인(예를 들어, 연산이 부동 소수점 연산인지 정수 연산인지 여부, 또는 연산이 나눗셈인지 덧셈인지 여부 등)에 의존할 수 있도록 일부 구현에서는 퓨즈에 대한 결정이 고정될 수 있다. 이 결정은 또한 이동 프리픽스 명령어와 바로 다음 명령어가 주어진 시간에서 처리되는 동일한 명령어 블록 내에 있고, 예를 들어 페이지 경계 또는 캐시 라인 경계에 의해 분리되지 않는지에 의존할 수 있다. 올바르게 사용된다면, 바로 다음 명령어는, 대상 레지스터(R3)가 이동 대상 레지스터(R1)와 동일하고, 소스 레지스터들 중 하나가 대상 레지스터(R3) 자체이며, 술어 레지스터(P2)(지정된 경우)가 이동 프리픽스 명령어의 술어 레지스터(P1)와 동일한, 데이터 처리 동작의 클래스의 하나이어야 한다. 바로 다음 명령어는 또한 적어도 하나의 추가 소스 레지스터(예를 들어, 레지스터(R4))를 지정할 수도 있다.
스텝 64에서는, 이동 프리픽스 명령어와 바로 다음 명령어를 융합할지가 결정된다. 명령어들이 융합되면, 스텝 66에서는, 다음 스테이지로 전달하여 실행하기 위해 구조적인 형태의 융합된 명령어(20)가 생성된다. 융합된 명령어는 이동 프리픽스 명령어에 의해 지정된 이동 대상 레지스터 R1 또는 바로 다음 명령어에 의해 지정된 대상 레지스터 R3과 동일한 결과 레지스터 Rd와, 이동 프리픽스 명령어와 바로 다음 명령어에 의해 지정된 술어 레지스터 P1, P2 중 하나와 동일한 술어 레지스터 Pg와, 이동 프리픽스 명령어의 이동 소스 레지스터 R2 및 바로 다음 명령어의 추가 소스 레지스터 R4와 동일한 적어도 두 개의 오퍼랜드 레지스터 Rs1, Rs2를 지정한다. 일부 타입의 명령어(예를 들어, 곱셈-덧셈)는 2개 이상의 소스 오퍼랜드를 가질 수 있고, 이 경우에, 융합된 명령어의 하나 이상의 소스 오퍼랜드는 원래의 파괴 명령어의 대응하는 소스 레지스터와 동일할 수 있다. 반면에, 스텝 64에서 명령어들을 융합하지 않기로 결정되면 스텝 68에서 별도의 이동 및 처리 명령어들이 파이프라인의 나머지 스테이지들에 의해 개별적으로 처리된다.
도 4에 도시된 융합된 명령어는 스텝 60 및 62에서 도시된 두 개의 개별 이동 및 데이터 처리 명령어의 조합과 동일한 결과를 생성할 것으로 기대된다.
· 바로 다음 명령어는 데이터 처리 명령어이며(로드, 저장 또는 분기와 같은 일부 다른 종류의 명령어가 아니다)
· 이동 프리픽스 명령어와 바로 다음 명령어는 동일한 대상 레지스터(R1 = R3)를 지정하고
· 바로 다음 명령어는 추가 소스 오퍼랜드로서 이동 프리픽스 대상 레지스터(R1)를 사용하지 않으며,
· 이동 프리픽스 명령어와 바로 다음 명령어는 동일한 술어 레지스터(P1 = P2)를 지정하고,
· 바로 다음 명령어는 그것의 소스 및 그것의 대상 레지스터 모두와 동일한 레지스터를 지정하는 파괴 명령어이다.
프로그래머 또는 컴파일러가 이동 프리픽스 명령어를 잘못 사용하여 그것을 다음 중 하나가 적용되는 명령어 직전에 놓는 것이 가능하다.
· 다음 명령어는 대상 레지스터를 소스 오퍼랜드로서 사용하는 파괴적인 데이터 처리 명령어가 아니며,
· 다음 명령어는 이동 프리픽스 명령어와 동일한 대상 레지스터를 지정하지 않으며,
· 다음 명령어는 이동 프리픽스 대상 레지스터를 추가 소스 오퍼랜드로서 사용하고,
· 다음 명령어는 이동 프리픽스 명령어와 동일한 술어 레지스터를 지정하지 않는다(이동 프리픽스 명령어가 술어적(predicated) 명령어인 경우).
명령어 퓨징 회로(50)가 이들 조건을 체크하지 않기 때문에, 명령어 퓨징 회로(15)는 이동 프리픽스 명령어 및 바로 다음 명령어를 융합하여 융합된 명령어를 생성할 수 있으며, 이것은 이동 프리픽스 명령어와 바로 다음 명령어가 독립적으로 실행되었을 경우에 발생하는 결과와 상이한 결과를 제공할 수 있다. 따라서, 이동 프리픽스 명령어가 프로그래머 또는 컴파일러에 의해 올바르게 사용되지 않으면, 융합된 명령어의 동작이 예측할 수 없다. 융합된 명령어(또는 융합된 명령어의 결과를 사용하는 다음 명령어)의 결과는 주어진 하드웨어 구현이 융합을 구현하는 특정 방식에 의존할 수 있다. 예를 들어, 융합된 명령어는 이동 프리픽스 명령어와 바로 다음 명령어의 조합에 의해 실제로 의도된 것과 상이한 소스 레지스터 쌍에 대해 동작할 수도 있거나, 또는 링크될 의도가 전혀 없는 2개의 동작을 결합할 수도 있다. 따라서, 프로그래머나 컴파일러가 이동 프리픽스 명령어를 잘못 사용하면, 버그(bugs)와 잘못된 처리 결과가 발생할 수 있다. 정확한 사용법을 보장하기 위해 프로그래머나 컴파일러는 프로그램 순서로 적용되는 파괴적인 데이터 처리 명령어 바로 앞에, 명령어들을 개입시키지 않고, 이동 프리픽스 명령어를 배치해야 하며, 이동 프리픽스 명령어와 바로 다음 명령어가 동일한 대상 레지스터를 지정하고 (이동 프리픽스 명령어가 술어적(predicated) 경우) 동일한 술어 레지스터를 지정하는 것을 보장하고, 또 바로 다음 명령어가 파괴 명령어라는 것을 보장해야 한다. 이동 프리픽스 명령어는 효율적으로 다음 명령어가 융합될 적절한 파괴 명령어가 될 것이라는 '약속(promise)'이며, 프로그래머나 컴파일러가 이 약속을 어기면 정확한 결과를 기대할 수 없다.
이동 프리픽스 명령어를 사용하여 기록된 코드는 명령어를 융합하기 위한 명령어 퓨징 회로(50)를 갖지 않는 데이터 처리 장치에 의해 여전히 실행될 수 있다. 이러한 구현 예에 있어서, 이동 프리픽스 명령어는 단순히 표준 이동 명령어로서 취급될 수 있고, 이동 소스 레지스터(Zs1)로부터 대상 레지스터(Zd)로 데이터 값을 이동시키도록 실행될 수 있다. 따라서, 명령어 세트 아키텍처에서 이동 프리픽스 명령어를 제공하는 것은 그 아키텍처를 지원하는 모든 하드웨어가 명령어 퓨징 회로(50)를 가져야 한다는 것을 요구하지 않지만, 이동 프리픽스 명령어를 제공함으로써 명령어 융합을 보다 저렴한 비용으로 구현하는 명령어 퓨징 회로(50)를 제공하는 하드웨어 구현을 가능하게 하여, 더 많은 하드웨어 구현이 융합을 제공하는 것을 선택할 가능성을 증가시킨다.
도 5에 도시된 바와 같이, 다수의 데이터 요소를 포함하는 벡터 오퍼랜드에 대해 동작하는 이동 프리픽스 명령어의 벡터 구현에 있어서, 상이한 형태의 이동 프리픽스 명령어가 처리의 비활성 레인을 처리하는 상이한 방식에 대응하여 제공될 수 있다. 도 5의 이 예에서는, 3가지 형태의 명령어가 제공되는데, 즉, 술어 레지스터를 지정하지 않는, 즉 벡터의 모든 요소들이 활성으로 간주되는 비술어적 이동 프리픽스 명령어(unpredicated move prefix instruction); 및 2개의 술어적 형태(predicated forms)의 명령어, 즉 술어 값에 의해 식별된 비활성 레인이 대상 레지스터의 대응하는 요소들에 저장된 이전 값으로 설정되는 병합 이동 프리픽스 명령어와, 대상 레지스터의 비활성 레인이 (0과 같은) 고정 값으로 설정되는 클리어링(clearing) 이동 프리픽스 명령이 제공된다.
도 5의 상부는 독립형의 명령어(다음 데이터 처리 명령어와 융합하지 않음)로서 각 형태의 이동 프리픽스 명령어를 실행한 결과를 나타낸 것이다. 비술어적 이동(unpredicated move)의 경우, 융합된 이동 명령어를 실행하면 소스 레지스터 Zs1로부터의 전체 벡터가 대상 레지스터 Zd에 복사된다. 전술한 바와 같이, 실제로는, 이것은 레지스터 Zd에 대한 구조 지정자가 이제는 소스 레지스터 Zs1에 이전에 매핑된 물리적 레지스터에 매핑되도록 리네임 테이블(42)을 업데이트함으로써 간단히 달성될 수 있다.
병합 이동 프리픽스 명령어의 경우, 대상 레지스터의 활성 레인(이 예에서, 술어 값이 1인 레인 0, 1 및 2)은 소스 레지스터 Zs1로부터의 대응하는 요소 V0, V1, V2와 동일하게 설정되지만, 비활성 레인(예를 들어, 술어 비트(predicate bit) 0의 레인 3)은 대상 레지스터 Zd의 이전 값 D3을 유지한다. 레지스터 리네이밍으로 인해 D3 요소가 원래의 대상 레지스터와 업데이트된 대상 레지스터 사이에서 변경되지 않은 채로 있더라도, 대상 레지스터 Zd의 결과 값이 실제로 이전에 대상 레지스터 Zd에 매핑된 물리적 레지스터와 상이한 물리적 레지스터에 기록될 수 있고 그래서 요소 D3은 여전히 활성 요소 V0, V1, V2에 대한 값과 함께 대상 레지스터에 복사될 필요가 있다.
한편, 클리어링 이동 프리픽스 명령어의 경우, 대상 레지스터 Zd의 비활성 요소는 모두 0으로 설정되고, 활성 요소는 소스 레지스터 Zs1의 해당 요소 V0-V2의 값을 취한다.
도 5의 하부에 도시된 바와 같이, 상이한 타입의 프리픽스 명령어 다음에 병합 예측(merging predication)을 사용하는 데이터 처리 명령어가 오는 경우, 결과는 데이터 처리 명령어의 술어 Pg로 나타낸 활성 레인이 데이터 처리 명령어의 이동 소스 레지스터 Zs1 및 제2 소스 레지스터 Zs2 내의 해당 요소 Vn + Sn의 합에 대응하는 것이다. 한편, 비활성 레인은 데이터 처리 명령어와 결합된 이동 프리픽스 명령어의 타입에 따라 상이한 값을 취한다. 비술어적 이동 프리픽스 명령어의 경우, 비활성 레인은 이동 소스 레지스터 Zs1의 대응하는 요소로부터 값 V3을 취한다. 병합 이동 프리픽스 명령어의 경우, 다음 데이터 처리 명령어의 결과는 원래의 대상 레지스터 Zd로부터의 요소 D3으로 채워진 비활성 레인을 가지며, 클리어링 이동 프리픽스 명령어의 경우, 최종 결과의 비활성 레인은 0으로 설정될 것이다. 이것은 3개의 예 모두는 다음 명령어의 동일한 인코딩을 정확히 사용하는 경우에도 마찬가지다.
따라서, 상이한 비활성 레인 처리 모드에 대해 상이한 형태의 데이터 처리 명령어를 제공할 필요가 없다. 예를 들어, 이전의 이동 프리픽스 명령어가 병합 또는 클리어링 예측(clearing predication)을 사용할지 여부를 선택하기 위해 상이한 형태로 선택될 수 있기 때문에, 클리어링 예측을 허용하는 인코딩을 가산 명령어에 제공할 필요가 없다. 이렇게 하면 데이터 처리 명령어의 인코딩 공간을 절약할 수 있다. 데이터 처리 명령어는 종종 이동 프리픽스 명령어보다 명령어 인코딩으로 표현되는 더 많은 값을 가질 수 있기 때문에, 비활성 레인 처리 모드의 인코딩을 이동 프리픽스 명령어로 시프트하면 데이터 처리 명령어의 보다 효율적인 인코딩이 되는데, 이것은 다른 정보를 인코딩하기 위한 데이터 처리 명령어에서 더 많은 공간을 이용할 수 있게 한다.
따라서, 파괴적인 데이터 처리 명령어(소스 레지스터와 대상 레지스터와 같은 레지스터를 지정함)은 기본적으로 비활성 레인이 대상 레지스터의 해당 값을 유지하는, 병합 비활성 레인 처리 모드를 사용한다고 가정할 수 있다. 상이한 비활성 레인 처리 모드가 데이터 처리 명령어(예를 들어, 제로잉 프리디케이션(zeroing predication))에 요구된다면, 데이터 처리 명령어의 행동은 상이한 타입의 이동 프리픽스 명령어를 명령어에 프리픽스함으로써 수정될 수 있다.
도 5는 비술어적 이동 프리픽스 명령어를 술어적 가산 명령어(predicated add instruction) 이전에 실행하는 예를 도시한 것이지만, 많은 예에서 비술어적 이동 프리픽스 명령어는 비활성 레인을 갖지 않는 비술어적 데이터 처리 명령어와 관련하여 사용될 것이다. 이 경우, 모든 레인은 그들의 결과 요소가 레지스터 Zs1, Zs2의 대응하는 요소 Vn, Sn의 합으로 설정되게 할 수 있다.
또한, 도 5는 이동 프리픽스 및 가산 연산을 개별적으로 수행하는 예를 도시한 것이지만, 이들이 융합될 때 처리 회로(14)는 임의의 방식으로 동등한 결과를 생성할 수 있음을 알 수 있다. 처리 회로가 실제로 두 동작을 차례대로 수행할 필요는 없으며 대상 레지스터 Zd 및 2개의 소스 레지스터 Zs1, Zs2의 입력 값으로부터 직접 적절한 결과 값을 생성할 수 있다.
위에 설명된 것처럼 이동 프리픽스 명령어를 도입할 때 발생하는 한 가지 문제는 실행을 중단시키는 이벤트에 응답하는 방법이다. 중단 이벤트의 예는 예를 들어 예외(exceptions), 인터럽트(interrrupts) 또는 브레이크포인트(breakpoints)일 수 있다. 예를 들어, 명령어가 비정상적인 결과를 생성하거나(예를 들어, 부동 소수점 결과가 범위를 벗어난 경우) 예외가 발생할 수 있고, 또는 외부 장치가, 예를 들어 사용자가 장치에 대한 버튼을 눌렀거나 외부 장치가 메시지를 전송했다는 것을 나타내는, 인터럽트 신호를 어써트(assert)할 때 인터럽트가 트리거될 수 있다. 예외 또는 인터럽트로 인해 처리 회로가 처리를 중단시키고 발생한 이벤트를 처리하기 위한 예외 또는 인터럽트 처리 루틴으로 전환할 수 있다. 처리 루틴이 완료되면, 처리가 이전에 실행된 프로그램으로 다시 전환될 수 있다. 유사하게, 디버깅(debugging)을 위해 브레이크포인트 어드레스가 설정될 수 있고, 명령 어드레스가 브레이크포인트 어드레스와 일치하는 명령어에 처리가 도달할 때, 디버거(debugger)가 다양한 레지스터의 콘텐츠를 검사하고, 메모리 내의 특정 어드레스로부터 데이터 값을 판독하는 것과 같은 몇몇 진단 동작, 또는 처리 회로의 활동을 조사하기 위한 다른 동작을 수행할 수 있도록 처리가 중단될 수 있다.
따라서, 이들 타입의 중단 이벤트에 대해서, 중단 이벤트가 발생할 때 처리가 중단 이벤트의 다음 해결을 리턴하는 리턴 어드레스가 기록될 수 있다. 리턴 어드레스가 상이한 방법으로 기록될 수 있다. 예를 들어, 리턴 어드레스는 레지스터(예를 들어, 링크 레지스터)에 배치되거나, 스택(stack)에 푸시되거나, 몇몇 다른 메커니즘을 사용하여 기록될 수 있다. 도 6 및 도 7에 도시된 바와 같이, 이동 프리픽스 명령어와 데이터 처리 명령어의 쌍에 대해서는, 다음 명령어(융합되지 않은 경우) 또는 융합된 명령어(융합된 경우)의 처리 중에 중단 이벤트가 발생할 때 리턴 어드레스 값이 결정될 수 있는 상이한 방법이 있다.
도 6에 도시된 바와 같이, 하나의 접근법은, 예외가 실제로 다음 명령어에 의해 트리거되었음에도 불구하고, (이 경우에는 예외와 같은) 중단 이벤트가 이동 프리픽스 명령어의 리턴 어드레스 #A1을 레지스터(ELR)에 기록하는 것을 트리거하는 것이다. 도 6의 예에 있어서, 데이터 처리 명령어는 부동 소수점 명령어 FADD이며, 그래서 예외는 부동 소수점 예외일 수 있다. 따라서, 예외 핸들러(handler)가 예외 조건을 해결하기 위해 일단 완료되었으면, 처리는 이동 프리픽스 명령어의 어드레스 #A1로 되돌아가고, 그래서 명령어 퓨징 회로(50)는 이동 프리픽스 명령어를 다음 명령어와 융합할지 여부를 다시 결정할 수 있다. 이 접근법은 그것의 효과가 중단 이벤트 전에 구조적으로 이미 수행된 경우에도 이동 프리픽스 명령어를 반복할 수 있기 때문에, 다음 명령어를 다시 시작하기 전에 어떤 상태든 유지할 필요가 없다.
다른 한편, 도 7에 도시된 바와 같이, 또 다른 접근법은, 중단 이벤트가 이동 프리픽스 명령어의 어드레스 대신에, 다음 명령어의 리턴 어드레스 #A2를 ELR에 기록하는 것을 트리거하기 위한 것일 수 있다. 이 경우, 리턴 어드레스를 설정하는 것 이외에, 처리 회로는 이동 프리픽스 명령어의 대상 레지스터 Zd가 이동 프리픽스 명령어가 실행되면 갖게 되는 동일한 결과로 설정되는 것을 보장할 수 있다. 실제로, 몇몇 경우에 있어서 이동 프리픽스 명령어가 다음 명령어와 융합되지 않은 경우, 이동 프리픽스 명령어가 이미 실행되었을 수도 있으므로, 대상 레지스터 Zd가 이미 정확한 결과를 가질 수 있다. 반면, 이동 프리픽스 명령어가 아직 실행되지 않았거나, 이동 프리픽스 명령어가 다음 명령어와 융합되었을 경우에, 예외가 발생하면, 대상 레지스터 Zd를 정확한 값으로 설정하기 위한 연산이 수행될 수 있어, 나중에 처리가 어드레스 #A2로 되돌아오면, 이동 프리픽스 명령어가 이미 완료된 것처럼 다음 명령어 FADD가 실행될 수 있다. 예를 들어, 이동 프리픽스 명령어가 이동 프리픽스 명령어를 반복함으로써, 또는 이동 프리픽스 명령어가 비술어적인(unpredicated) 경우, 아키텍처 대상 레지스터(Zd)가 소스 아키텍처 레지스터 Zs1에 이전에 매핑된 물리적 레지스터에 지금 매핑하도록 리네임 테이블(42)을 간단히 업데이트함으로써, 이동 프리픽스 명령이 구조적으로 완료되었음을 확신할 수 있다.
일부 시스템은 도 6에 도시된 접근법 또는 도 7에 도시된 접근법에 따라 영구적으로 동작할 수 있다. 그러나, 처리 회로가, 중단 이벤트가 발생했을 때의 현재 상태에 따라, 이동 프리픽스 명령어의 어드레스 #A1 또는 데이터 처리 명령어의 어드레스 #A2로서 리턴 어드레스를 기록하는 유연성을 제공하는 것이 유용할 수 있다. 예를 들어, 리턴 어드레스 값은 이동 프리픽스 명령어와 다음 명령어가 처음으로 만나게 되었을 때 융합되었는지 여부에 의존할 수 있다. 명령어 퓨징 회로(50)가 이들 명령어를 융합했다면, 이동이 아직 완료되지 않았으므로 융합된 명령어에 대해 발생하는 예외, 인터럽트 또는 브레이크포인트(breakpoint)로 인해 리턴 어드레스가 도 6에 나타낸 것과 같이 이동 프리픽스 명령어의 어드레스 #A1로 설정될 수 있다. 이렇게 하면 중단 이벤트의 레졸루션(resolution) 후에 처리가 재개할 때 이동이 효율적으로 (명시적으로 융합되지 않은 이동 명령어를 사용하거나 암시적으로 융합된 명령어의 결과의 생성시에) 수행될 것이다.
다른 한편으로, 명령어의 쌍이 처음으로 융합되지 않은 채로 실행된 경우, 중단 이벤트가 검출될 때까지, 이동 프리픽스 명령어의 이동이 이미 완료되었을 수도 있으므로 도 7에 도시된 접근법이 이동 명령어를 불필요하게 반복하는 것을 피하는데 더 적절할 수 있다. 따라서, 리턴 어드레스를 설정할 때 어드레스 A1과 A2 사이에서 선택하는 능력을 제공함으로써, 이동이 아직 수행되지 않았던 경우에만 도 6에 나타낸 것처럼 이동 프리픽스 명령어를 반복하는 것이 필요하기 때문에 처리 성능이 향상될 수 있다.
요약하면, 바로 다음 명령어로 융합이 가능하다는 것을 신호하는 이동 프리픽스 명령어를 제공함으로써, 프로그램 또는 컴파일러는 명령어 퓨징 회로를 필요로 하지 않고 융합하는 것이 안전하다는 것을 처리 회로에 암시하여 명령어의 쌍의 레지스터들이 일치한지 여부를 결정함으로써, 융합의 오버헤드를 크게 줄일 수 있다. 프로그램 또는 컴파일러가 명령어를 정확하게 사용했다면 바로 다음 명령어는 대상 레지스터와 제1 소스 레지스터를 모두 식별하는 단일 레지스터 지정자를 가진 파괴적인 데이터 처리 명령어가 될 것으로 예상되고, 이동 프리픽스 명령어의 대상 레지스터는 다음 명령어의 대상 레지스터와 동일하다. 이 경우, 퓨징 회로는 이들 명령어를 융합하여 두 오퍼랜드 레지스터 및 결과 레지스터를 개별적으로 식별하는 구조적인 데이터 처리 명령어를 형성할 수 있다.
특히, 구조 명령어는 다음과 같이 지정된 레지스터들로 형성될 수 있고, 구조 명령어의 결과 레지스터는 이동 프리픽스 명령어의 이동 대상 레지스터 또는 바로 다음 명령어의 대상 레지스터 중 하나에 대응할 수 있고, 구조 명령어의 적어도 2개의 오퍼랜드 레지스터는 이동 프리픽스 명령어의 이동 소스 레지스터와 바로 다음의 데이터 처리 명령어의 소스 레지스터 중 하나에 대응하여 설정될 수 있다. 이 접근법으로, 융합된 명령어는, 프로그래머 또는 컴파일러가 바로 다음 명령어가 이동 프리픽스 명령과 동일한 대상 레지스터를 지정하는 파괴적인 데이터 처리 명령어라는 것을 보장하면, 두 이동 프리픽스 및 데이터 처리 명령어를 별도로 실행하는 것과 동일한 결과를 가질 것이다. 벡터 술어(vector predicates)가 사용되면, 융합된 명령어의 술어는 이동 프리픽스 및 바로 다음 명령어들(프로그래머/컴파일러가 명령어를 정확하게 사용한 경우 동일해야 함) 중의 어느 하나의 술어와 동일하게 설정될 수 있다.
이동 프리픽스 명령어에 부가하여, 제1 레지스터로부터 제2 레지스터로 데이터 값을 복사하도록 처리 회로를 제어할 수 있는 적어도 하나의 다른 타입의 명령어가 있을 수도 있다. 예를 들어, 다른 명령어는 위에서 언급한 바와 같이 AND 명령어, OR 명령어, ADD 명령어 또는 전용 MOV 명령어일 수 있고, 또는 소스 오퍼랜드 중 하나와 동일한 결과를 제공하는 어떤 다른 종류의 명령어일 수 있다. 따라서, 일반적으로는 이미 레지스터 이동을 달성할 수 있는 아키텍처에서 명령어가 많이 있을 것이다. 이동 프리픽스 명령어는 이러한 명령어에 더하여 상이한 명령어 인코딩과 함께 제공된다. 다른 명령어들에 의해 이미 제공될 수 있는 레지스터 이동 기능을 제공하는 전용 명령어를 제공하는 것이 유용하다는 것은 놀라운 것처럼 보일 수 있다. 그러나, 이동 프리픽스 명령어에 대한 상이한 명령어 인코딩을 제공함으로써, 프로그래머 또는 컴파일러가 독립적인 이동 동작과는 대조적으로 융합된 구조 명령어를 형성하기 위해 다음의 파괴 명령어를 선행하기 위한 이동을 의도할 때 신호를 보낼 수 있다. 따라서, 이것은 융합에 필요한 다양한 조건이 충족되는 것을 확인하기 위한 처리 회로의 필요성을 제거한다.
이동 프리픽스 명령어는 가산과 같은 특정 타입의 데이터 처리 명령어에 특정될 수 있다. 그러나, 이동 프리픽스 명령어를 상이한 처리 연산에 대응하는 데이터 처리 명령어의 클래스 중 어느 하나와 결합하는 것이 유용할 수 있어, 어느 특정 연산이 바로 다음 명령어에 의해 표현되는지에 관계없이, 일반적으로 이동 프리픽스가 원래의 파괴 명령어와 동일한 처리 연산에 대응하는 융합된 구조 명령어를 형성하기 위해 파괴 명령어와 융합될 수 있다. 예를 들어, 데이터 처리 명령어의 클래스는 덧셈, 뺄셈, 곱셈, 나눗셈, 곱셈 덧셈, 제곱근, 시프트, AND, OR, NOT, NAND, NOR, XOR뿐만 아니라 다양한 부동 소수점 연산 및 인터리브 등과 같은 다른 벡터 연산을 포함하는 다양한 연산을 포함할 수 있다.
이동 프리픽스 명령어와 바로 다음 명령어를 융합할지 여부의 결정은 일부 구현에서는 정적일 수 있다. 따라서, 이동 프리픽스 명령어가 검출될 때, 일부 구현은 어떤 다른 조건에 관계없이 항상 그것을 바로 다음이 명령어와 병합할 수 있다.
그러나, 다른 시스템은 이동 프리픽스 명령어와 바로 다음 명령어 간의 레지스터 비교 외에 적어도 하나의 기준에 의존하는 명령어를 융합할지 여부를 동적으로 결정할 수 있다. 예를 들어, 이들 다른 기준은 어떤 타입의 처리 동작이 바로 다음 명령어에 의해 수행되는지 여부, 이동 프리픽스 명령어와 바로 다음 명령어가 상이한 캐시 라인에 유지되는지 여부, 및 그들이 어드레스 공간의 상이한 페이지에 대응하는지 여부를 포함할 수 있다.
상기 예들은 다수의 데이터 요소들을 포함하는 오퍼랜드들을 사용하여 벡터 처리를 지원하는 벡터 처리 시스템을 논의했다. 그러나, 유사한 이동 프리픽스 명령어는 단일 데이터 요소에 대응하는 스칼라 데이터 값을 처리하는 스칼라 처리 시스템에 도입될 수 있다. 이 경우, 술어 값은 제공되지 않을 것이며 도 5의 상이한 비활성 레인 처리 모드도 제공되지 않을 것이다. 그렇지 않으면, 스칼라 이동 프리픽스 명령어는 상술 한 바와 같이 벡터 실시 예와 동일한 방식으로 스칼라 데이터 처리 명령어를 선행할 수 있다.
전술한 바와 같이, 벡터 오퍼랜드가 처리될 때, 이동 프리픽스 명령어가 매우 유용할 수 있는데, 그 이유는, 융합이 가능할 때 신호를 보내는 것뿐만 아니라, 상이한 비활성 레인 처리 모드에 대응하여 상이한 형태의 이동 프리픽스 명령어가 제공되어, 어떤 방식으로든 다음 명령어의 인코딩을 변경하지 않고 다음의 연산이 수정될 수 있게 하기 때문이다. 이것은 상이한 형태의 예측(predication)에 대응하는 상이한 버전의 데이터 처리 명령어를 제공할 필요가 없기 때문에, 명령어 세트 아키텍처에서 인코딩 공간을 절약한다.
상기 실시 예들은 이동 프리픽스 명령어와 바로 다음 명령어의 융합을 논의한다. 명령어의 쌍은 페치된 명령어에서 단일의 이중 길이 명령어로 보여질 수도 있으며, 그것은 별도의 명령어로 분할될 수 있거나 처리 회로에 의해 처리될 단일 결합 명령어로서 전달될 수 있다. 이것은 상기 논의된 융합 접근법과 완전히 동일하다(명령어 퓨징 회로에 의해 수행되는 실제 연산은 동일할 것인데, 유일한 차이점은 원래의 명령어가 하나 또는 두 개의 명령어로서 보여지는지 여부에 관한 해석 중 하나이다). 따라서, 일부 구현 예에서, 명령어 퓨징 회로의 명령어를 융합할지의 결정은 사실상(이중 길이 명령어의 두 부분 사이의 임의의 레지스터 비교와는 관계없이) 이중 길이 명령어를 분할할지 여부의 결정일 수 있고, 청구항은 이 접근법을 포함한다.
도 8은 사용될 수 있는 가상 머신 구현을 도시한 것이다. 앞서 기술된 실시 예들은 관련된 기술들을 지원하는 특정 처리 하드웨어를 동작시키는 장치 및 방법들에 관하여 본 발명을 구현하지만, 하드웨어 장치들의 소위 가상 머신 구현을 제공하는 것도 가능하다. 이들 가상 머신 구현은 가상 머신 프로그램(510)을 지원하는 호스트 운영 시스템(520)을 작동시키는 호스트 프로세서(530)상에서 실행된다. 일반적으로, 크고 강력한 프로세서는 합리적인 속도로 실행되는 가상 머신 구현을 제공해야 하지만, 그러한 접근법은 호환성 또는 재사용을 위해 또 다른 프로세서에 고유한 코드를 실행하려고 하는 바람이 있는 경우와 같은 특정 상황에서 정당화될 수 있다. 가상 머신 프로그램(510)은 가상 머신 프로그램(510)에 의해 모델링되는 장치인 실제 하드웨어에 의해 제공되는 응용 프로그램 인터페이스와 동일한 응용 프로그램(500)에 응용 프로그램 인터페이스를 제공한다. 따라서, 상술한 메모리 액세스들의 제어를 포함하는 프로그램 명령어들은 가상 머신 하드웨어와의 상호 작용을 모델링하기 위해 가상 머신 프로그램(510)을 사용하여 애플리케이션 프로그램(500) 내에서 실행될 수 있다.
본원에서, "구성된(... to configured)"이라는 단어는 장치의 구성요소가 정의된 동작을 수행할 수 있는 구성을 갖는 것을 의미하는 것으로 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 상호접속의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 처리 장치가 기능을 수행하도록 프로그래밍 될 수 있다. "구성된"은 정의된 동작을 제공하기 위해 장치 구성요소가 어떤 방식으로든 변경되어야 함을 의미하지는 않는다.
본 발명의 예시적인 실시 예가 첨부된 도면을 참조하여 상세하게 설명되었지만, 본 발명은 이들 정확한 실시 예에 한정되지 않으며, 다양한 변경 및 수정이 첨부된 청구 범위에 의해 정의된 것과 같은 본 발명의 범위 및 정신을 일탈하지 않고 본 발명의 당업자에 의해 이루어질 수 있음을 이해해야 한다.

Claims (30)

  1. 명령어들에 응답하여 데이터 처리를 수행하는 처리 회로와,
    상기 처리 회로에 의해 처리될 융합된 데이터 처리 명령어를 생성하기 위해 데이터 스토어로부터 페치된 이동 프리픽스 명령어 및 바로 다음 명령어를 융합하는 명령어 퓨징 회로를 구비하고,
    상기 이동 프리픽스 명령어는 이동 대상 레지스터와, 이동 대상 레지스터에 적어도 부분적으로 복사될 데이터 값을 지정하는 이동 소스 레지스터를 식별하고,
    상기 이동 프리픽스 명령어의 검출에 응답하여, 상기 명령어 퓨징 회로는 상기 이동 프리픽스 명령어의 이동 대상 레지스터가 상기 바로 다음 명령어에 의해 지정된 레지스터와 동일한 레지스터인지 여부에 관계없이 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할지 여부를 결정하도록 구성되고,
    상기 이동 프리픽스 명령어는, 상기 바로 다음 명령어가, 미리 정해진 처리 동작을 적어도 2개의 소스 레지스터에 의해 지정된 적어도 2개의 소스 값에 적용한 결과에 대응하는 결과값으로 대상 레지스터가 설정되는 것이며, 또 상기 대상 레지스터와 상기 적어도 2개의 소스 레지스터 중 하나가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일한, 파괴적인 데이터 처리 명령어가 될 것으로 예상됨을 나타내고,
    상기 바로 다음 명령어의 대상 레지스터가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일하지 않은 경우, 상기 이동 프로픽스 명령어와 상기 바로 다음 명령어를 융합하여 생성된 상기 융합된 데이터 처리 명령어는 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어가 독립적으로 실행되는 경우에 생성되는 결과와 상이한 결과를 제공할 수 있는 장치.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 파괴적인 데이터 처리 명령어는 대상 레지스터와 상기 적어도 2개의 소스 레지스터 중 하나를 모두 식별하는 단일 레지스터 지정자를 포함하는 명령어 인코딩을 갖는 장치.
  4. 제 1 항 또는 제 3 항에 있어서,
    상기 융합된 데이터 처리 명령어는, 적어도 2개의 오퍼랜드 레지스터와, 처리 동작을 상기 적어도 2개의 오퍼랜드 레지스터에 의해 지정된 값들에 적용한 결과에 대응하는 결과 값으로 설정되는 결과 레지스터를, 개별적으로 식별하는 구조적인 데이터 처리 명령어를 포함하는 장치.
  5. 제 4 항에 있어서,
    상기 명령어 퓨징 회로는,
    상기 이동 프리픽스 명령어의 이동 대상 레지스터 및 상기 바로 다음 명령어의 대상 레지스터 중 하나에 대응하는 상기 결과 레지스터와,
    상기 이동 프리픽스 명령어의 이동 소스 레지스터 및 상기 바로 다음 명령어의 적어도 하나의 소스 레지스터에 대응하는 상기 적어도 2개의 오퍼랜드 레지스터로
    상기 구조적인 데이터 처리 명령어를 생성하도록 구성되는 장치
  6. 제 1 항 또는 제 3 항에 있어서,
    상기 이동 프리픽스 명령어는 제1 레지스터로부터 제2 레지스터로 데이터 값을 복사하도록 상기 처리 회로를 제어하기 위한 적어도 하나의 다른 타입의 명령어와 상이한 명령어 인코딩을 갖는 장치.
  7. 제 1 항 또는 제 3 항에 있어서,
    상기 명령어 퓨징 회로는, 상기 이동 프리픽스 명령어와 바로 다음 명령어를, 상기 바로 다음 명령어가 수행될 상이한 타입의 처리 동작에 대응하는 데이터 처리 명령어들의 클래스 중 하나인 경우, 융합하도록 구성되는 장치.
  8. 제 1 항 또는 제 3 항에 있어서,
    상기 이동 프리픽스 명령어의 검출에 응답하여, 상기 명령어 퓨징 회로는 상기 이동 프리픽스 명령어의 이동 대상 레지스터가 상기 바로 다음 명령어에 의해 지정된 레지스터와 동일한 레지스터인지 여부 이외의 적어도 하나의 기준(criterion)에 의존해서 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할지의 여부를 결정하도록 구성되는 장치.
  9. 제 8 항에 있어서,
    상기 적어도 하나의 기준은,
    상기 바로 다음 명령어가 적어도 2개의 소스 값에 대해 주어진 처리 동작을 수행하도록 상기 처리 회로를 제어하기 위한 데이터 처리 명령어인 경우, 어느 타입의 처리 동작이 상기 바로 다음 명령어에 대한 주어진 처리 동작인지와,
    상기 이동 프리픽스 명령어와 상기 바로 다음 명령어가 상이한 캐시 라인들에 홀드되는지 여부와,
    상기 이동 프리픽스 명령어와 상기 바로 다음 명령어가 어드레스 공간의 상이한 페이지들에 대응하는지 여부
    중 적어도 하나를 포함하는 장치.
  10. 제 1 항 또는 제 3 항에 있어서,
    상기 이동 프리픽스 명령어 및 상기 바로 다음 명령어는 단일 데이터 요소를 포함하는 스칼라 데이터 값들을 처리하기 위한 스칼라 명령어들을 포함하는 장치.
  11. 제 1 항 또는 제 3 항에 있어서,
    상기 이동 프리픽스 명령어 및 상기 바로 다음 명령어는 복수의 데이터 요소를 포함하는 벡터 데이터 값들을 처리하기 위한 벡터 명령어들을 포함하는 장치.
  12. 제 11 항에 있어서,
    상기 바로 다음 명령어가, 적어도 2개의 소스 값에 대해 주어진 처리 동작을 수행하여 결과 값을 생성하도록 상기 처리 회로를 제어하기 위한 데이터 처리 명령어인 경우, 상기 바로 다음 명령어는, 결과 값의 어느 데이터 요소들이 적어도 2개의 소스 값의 해당 데이터 요소들에 의존하는 값으로 설정되는 활성 요소들인지 또는 적어도 2개의 소스 값에 의존하지 않는 값으로 설정되는 비활성 요소인지를 나타내는 술어 값(predicate value)을 식별하는 장치.
  13. 제 12 항에 있어서,
    상기 명령어 퓨징 회로는 상기 이동 프리픽스 명령어가 상기 바로 다음 명령어와 동일한 술어 값을 식별하는지 여부에 관계없이 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할지 여부를 결정하도록 구성되는 장치.
  14. 제 12 항에 있어서,
    상기 이동 프리픽스 명령어는 복수의 타입의 이동 프리픽스 명령어 중 하나를 포함하고,
    상기 명령어 퓨징 회로가 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할 때, 상기 명령어 퓨징 회로는 어느 타입의 이동 프리픽스 명령어가 상기 바로 다음 명령어와 융합되었는지에 의존하여 선택된 비활성 레인 처리 모드에 따라 결과 값의 비활성 요소를 결정하도록 상기 처리 회로를 제어하기 위한 융합된 데이터 처리 명령어를 생성하도록 구성되는 장치.
  15. 제 14 항에 있어서,
    상기 명령어 퓨징 회로는 상기 바로 다음 명령어의 인코딩에 관계없이 선택된 상기 비활성 레인 처리 모드로 결과 값의 비활성 요소들을 결정하도록 상기 처리 회로를 제어하기 위한 융합된 데이터 처리 명령어를 생성하도록 구성되는 장치.
  16. 제 14 항에 있어서,
    상기 이동 프리픽스 명령어가 비술어적(unpredicated) 타입의 이동 프리픽스 명령어인 경우, 상기 명령어 퓨징 회로는 이동 소스 레지스터의 해당 요소들의 값들로 결과 값의 비활성 요소들을 결정하도록 상기 처리 회로를 제어하기 위한 융합된 데이터 처리 명령어를 생성하도록 구성되는 장치.
  17. 제 16 항에 있어서,
    상기 이동 프리픽스 명령어가 비술어적 타입의 이동 프리픽스 명령어이고, 상기 명령어 퓨징 회로가 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합하지 않는다고 결정하는 경우, 상기 처리 회로는 상기 이동 프리픽스 명령어에 응답하여 이동 소스 레지스터로부터 이동 대상 레지스터로 전체 데이터 값을 복사하는 장치.
  18. 제 14 항에 있어서,
    상기 이동 프리픽스 명령어가 병합(merging) 타입의 이동 프리픽스 명령어인 경우, 상기 명령어 퓨징 회로는 이동 대상 레지스터의 해당 요소들의 이전 값들에 의존하는 값들로 결과 값의 비활성 요소들을 결정하도록 상기 처리 회로를 제어하기 위한 융합된 데이터 처리 명령어를 생성하도록 구성되는 장치.
  19. 제 18 항에 있어서,
    상기 병합 타입의 이동 프리픽스 명령어는 이동 대상 레지스터의 어느 요소들이 활성 요소들인지 비활성 요소들인지를 식별하는 이동 술어 값을 지정하고,
    상기 이동 프리픽스 명령어가 상기 병합 타입의 이동 프리픽스 명령어이고 상기 명령어 퓨징 회로가 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합하지 않는다고 결정하는 경우, 상기 처리 회로는 상기 이동 프리픽스 명령어에 응답하여 이동 대상 레지스터의 활성 요소들을 이동 소스 레지스터의 해당 요소들의 값들로 설정하고 이동 대상 레지스터의 비활성 요소들에 대한 이전 값들을 유지하는 장치.
  20. 제 14 항에 있어서,
    상기 이동 프리픽스 명령어가 클리어링(clearing) 타입의 이동 프리픽스 명령어인 경우, 상기 명령어 퓨징 회로는 미리 결정된 값으로 클리어된 값들로 결과 값의 비활성 요소들을 결정하도록 상기 처리 회로를 제어하기 위한 융합된 데이터 처리 명령어를 생성하도록 구성되는 장치.
  21. 제 20 항에 있어서,
    상기 클리어링 타입의 이동 프리픽스 명령어는 이동 대상 레지스터의 어느 요소들이 활성 요소들인지 비활성 요소들인지를 식별하는 이동 술어 값을 지정하고,
    상기 이동 프리픽스 명령어가 상기 클리어링 타입의 이동 프리픽스 명령어이며, 상기 명령어 퓨징 회로가 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합하지 않는다고 결정하는 경우, 상기 처리 회로는 상기 이동 프리픽스 명령어에 응답하여 이동 대상 레지스터의 활성 요소들을 이동 소스 레지스터의 해당 요소들의 값들로 설정하고 이동 대상 레지스터의 비활성 요소들을 미리 정한 값으로 클리어하는 장치.
  22. 제 12 항에 있어서,
    상기 처리 회로는 대상 레지스터 및 소스 레지스터 모두와 동일한 레지스터를 식별하는 융합되지 않은 데이터 처리 명령어에 응답하여 상기 동일한 레지스터의 해당 요소들의 이전 값들에 의존하는 값들로 설정된 비활성 요소들로 결과 값을 생성하는 장치.
  23. 제 1 항 또는 제 3 항에 있어서,
    상기 바로 다음 명령어 또는 융합된 데이터 처리 명령어에 의해 트리거된 중단 이벤트(halting event)에 응답하여, 상기 처리 회로는 중단 이벤트의 레졸루션(resolution) 후에 처리를 재개하기 위한 리턴 어드레스로서, 상기 이동 프리픽스 명령어의 어드레스를 기록하도록 구성되는 장치.
  24. 제 1 항 또는 제 3 항에 있어서,
    상기 바로 다음 명령어 또는 융합된 데이터 처리 명령어에 의해 트리거된 중단 이벤트에 응답하여, 상기 처리 회로는, 중단 이벤트의 레졸루션 후에 처리를 재개하기 위한 리턴 어드레스로서, 상기 바로 다음 명령어의 어드레스를 기록하도록 구성되고, 이동 대상 레지스터의 데이터가 상기 이동 프리픽스 명령어를 실행한 결과와 동일한지 확인하는 장치.
  25. 제 1 항 또는 제 3 항에 있어서,
    상기 바로 다음 명령어 또는 융합된 데이터 처리 명령어에 의해 트리거된 중단 이벤트에 응답하여, 상기 처리 회로는, 중단 이벤트의 레졸루션 후에 처리를 재개하기 위한 리턴 어드레스로서, 상기 명령어 퓨징 회로가 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합했는지 여부에 의존해서 상기 이동 프리픽스 명령어의 어드레스 또는 상기 바로 다음 명령어의 어드레스를 기록할지 여부를 선택하도록 구성되는 장치.
  26. 제 25 항에 있어서,
    상기 명령어 퓨징 회로가 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합했을 경우에는, 상기 처리 회로는 상기 이동 프리픽스 명령어의 어드레스를 리턴 어드레스로서 기록하도록 구성되고, 상기 명령어 퓨징 회로가 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합하지 않았을 경우에는, 상기 처리 회로는 리턴 어드레스로서 상기 바로 다음 명령어의 어드레스를 기록하도록 구성되는 장치.
  27. 제 23 항에 있어서,
    상기 중단 이벤트는,
    예외 이벤트,
    인터럽트, 및
    브레이크포인트 중 하나를 포함하는 장치.
  28. 처리 회로가 처리하기 위한 데이터 스토어로부터 페치된 명령어들 중에서, 이동 대상 레지스터 및 이동 대상 레지스터에 적어도 부분적으로 복사될 데이터 값을 지정하는 이동 소스 레지스터를 식별하는 이동 프리픽스 명령어를 검출하는 단계와,
    상기 처리 회로에 의해 처리될 융합된 데이터 처리 명령어를 생성하기 위해서 상기 이동 프리픽스 명령어와 바로 다음 명령어를 융합할지 여부를 결정하는 단계를 포함하고,
    상기 이동 프리픽스 명령어가 검출되는 경우, 상기 결정하는 단계는 상기 이동 프리픽스 명령어의 이동 대상 레지스터가 상기 바로 다음 명령어에 의해 지정된 레지스터와 동일한 레지스터인지 여부에 관계없이 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할지 여부를 결정하고,
    상기 이동 프리픽스 명령어는, 상기 바로 다음 명령어가, 미리 정해진 처리 동작을 적어도 2개의 소스 레지스터에 의해 지정된 적어도 2개의 소스 값에 적용한 결과에 대응하는 결과값으로 대상 레지스터가 설정되는 것이며, 또 상기 대상 레지스터와 상기 적어도 2개의 소스 레지스터 중 하나가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일한, 파괴적인 데이터 처리 명령어가 될 것으로 예상됨을 나타내고,
    상기 바로 다음 명령어의 대상 레지스터가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일하지 않은 경우, 상기 이동 프로픽스 명령어와 상기 바로 다음 명령어를 융합하여 생성된 상기 융합된 데이터 처리 명령어는 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어가 독립적으로 실행되는 경우에 생성되는 결과와 상이한 결과를 제공할 수 있는 데이터 처리 방법.
  29. 명령어들에 응답하여 데이터 처리를 수행하기 위한 수단과,
    처리 회로에 의해 처리될 융합된 데이터 처리 명령어를 생성하기 위해 데이터 스토어로부터 페치된 이동 프리픽스 명령어와 바로 다음 명령어를 융합하기 위한 수단을 구비하고,
    상기 이동 프리픽스 명령어는 이동 대상 레지스터 및 이동 대상 레지스터에 적어도 부분적으로 복사될 데이터 값을 지정하는 이동 소스 레지스터를 식별하고,
    상기 이동 프리픽스 명령어의 검출에 응답하여, 상기 융합하기 위한 수단은 상기 이동 프리픽스 명령어의 이동 대상 레지스터가 상기 바로 다음 명령어에 의해 지정된 레지스터와 동일한 레지스터인지 여부에 관계없이 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어를 융합할지 여부를 결정하도록 구성되고,
    상기 이동 프리픽스 명령어는, 상기 바로 다음 명령어가, 미리 정해진 처리 동작을 적어도 2개의 소스 레지스터에 의해 지정된 적어도 2개의 소스 값에 적용한 결과에 대응하는 결과값으로 대상 레지스터가 설정되는 것이며, 또 상기 대상 레지스터와 상기 적어도 2개의 소스 레지스터 중 하나가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일한, 파괴적인 데이터 처리 명령어가 될 것으로 예상됨을 나타내고,
    상기 바로 다음 명령어의 대상 레지스터가 상기 이동 프리픽스 명령어의 이동 대상 레지스터와 동일하지 않은 경우, 상기 이동 프로픽스 명령어와 상기 바로 다음 명령어를 융합하여 생성된 상기 융합된 데이터 처리 명령어는 상기 이동 프리픽스 명령어와 상기 바로 다음 명령어가 독립적으로 실행되는 경우에 생성되는 결과와 상이한 결과를 제공할 수 있는 장치.
  30. 데이터 처리 장치에 의해 실행될 때, 청구항 1 또는 3의 장치에 대응하는 명령어 실행 환경을 제공하는 가상 머신을 제공하는, 컴퓨터 판독 가능한 기억매체에 기억된 컴퓨터 프로그램.
KR1020187012813A 2015-10-14 2016-09-14 이동 프리픽스 명령어 KR102629722B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1518156.3A GB2543304B (en) 2015-10-14 2015-10-14 Move prefix instruction
GB1518156.3 2015-10-14
PCT/GB2016/052838 WO2017064456A1 (en) 2015-10-14 2016-09-14 Move prefix instruction

Publications (2)

Publication Number Publication Date
KR20180067583A KR20180067583A (ko) 2018-06-20
KR102629722B1 true KR102629722B1 (ko) 2024-01-26

Family

ID=55131012

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187012813A KR102629722B1 (ko) 2015-10-14 2016-09-14 이동 프리픽스 명령어

Country Status (9)

Country Link
US (1) US10795675B2 (ko)
EP (1) EP3362889B1 (ko)
JP (1) JP6807383B2 (ko)
KR (1) KR102629722B1 (ko)
CN (1) CN108139908B (ko)
GB (1) GB2543304B (ko)
IL (1) IL258035B (ko)
TW (1) TWI740844B (ko)
WO (1) WO2017064456A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10061580B2 (en) 2016-02-25 2018-08-28 International Business Machines Corporation Implementing a received add program counter immediate shift (ADDPCIS) instruction using a micro-coded or cracked sequence
US10684856B2 (en) * 2017-07-11 2020-06-16 International Business Machines Corporation Converting multiple instructions into a single combined instruction with an extension opcode
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US11150908B2 (en) * 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
JP7183657B2 (ja) * 2018-09-21 2022-12-06 日本電気株式会社 プロセッサ、情報処理方法、プログラム
US11036510B2 (en) * 2018-10-11 2021-06-15 Arm Limited Processing merging predicated instruction with timing permitting previous value of destination register to be unavailable when the merging predicated instruction is at a given pipeline stage at which a processing result is determined
CN111414199B (zh) * 2020-04-03 2022-11-08 中国人民解放军国防科技大学 一种指令融合的实现方法及装置
US11119777B1 (en) 2020-04-22 2021-09-14 International Business Machines Corporation Extended prefix including routing bit for extended instruction format

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110264891A1 (en) * 2010-04-27 2011-10-27 Via Technologies, Inc. Microprocessor that fuses mov/alu/jcc instructions
US20140164741A1 (en) * 2012-12-11 2014-06-12 International Business Machines Corporation Modify and Execute Next Sequential Instruction Facility and Instructions Therefore
GB2521019A (en) * 2014-05-27 2015-06-10 Imagination Tech Ltd Decoding instructions that are modified by one or more other instructions

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5303358A (en) * 1990-01-26 1994-04-12 Apple Computer, Inc. Prefix instruction for modification of a subsequent instruction
TW334546B (en) * 1996-03-18 1998-06-21 Hitachi Ltd Data processor
US20050138330A1 (en) * 2003-12-23 2005-06-23 Maxim Integrated Products, Inc. MAXQ microcontroller
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
US7958181B2 (en) * 2006-09-21 2011-06-07 Intel Corporation Method and apparatus for performing logical compare operations
CN101957743B (zh) * 2010-10-12 2012-08-29 中国电子科技集团公司第三十八研究所 并行数字信号处理器
EP2508979B1 (en) * 2011-04-07 2018-10-10 VIA Technologies, Inc. Efficient conditional alu instruction in read-port limited register file microprocessor
US9128701B2 (en) * 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US9329869B2 (en) * 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
US9195466B2 (en) 2012-05-16 2015-11-24 Qualcomm Incorporated Fusing conditional write instructions having opposite conditions in instruction processing circuits, and related processor systems, methods, and computer-readable media
US9477476B2 (en) 2012-11-27 2016-10-25 Qualcomm Incorporated Fusing immediate value, write-based instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
DE112012007063B4 (de) * 2012-12-26 2022-12-15 Intel Corp. Zusammenfügen von benachbarten Sammel-/Streuoperationen
US9672037B2 (en) * 2013-01-23 2017-06-06 Apple Inc. Arithmetic branch fusion
US9886277B2 (en) * 2013-03-15 2018-02-06 Intel Corporation Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources
US10394568B2 (en) * 2015-09-30 2019-08-27 International Business Machines Corporation Exception handling for applications with prefix instructions
US20170090922A1 (en) * 2015-09-30 2017-03-30 Futurewei Technologies, Inc. Efficient Instruction Pair for Central Processing Unit (CPU) Instruction Design

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110264891A1 (en) * 2010-04-27 2011-10-27 Via Technologies, Inc. Microprocessor that fuses mov/alu/jcc instructions
US20140164741A1 (en) * 2012-12-11 2014-06-12 International Business Machines Corporation Modify and Execute Next Sequential Instruction Facility and Instructions Therefore
GB2521019A (en) * 2014-05-27 2015-06-10 Imagination Tech Ltd Decoding instructions that are modified by one or more other instructions

Also Published As

Publication number Publication date
EP3362889B1 (en) 2021-04-21
JP6807383B2 (ja) 2021-01-06
US20180267798A1 (en) 2018-09-20
CN108139908A (zh) 2018-06-08
EP3362889A1 (en) 2018-08-22
US10795675B2 (en) 2020-10-06
TWI740844B (zh) 2021-10-01
IL258035A (en) 2018-05-31
GB2543304A (en) 2017-04-19
TW201723809A (zh) 2017-07-01
CN108139908B (zh) 2022-07-12
KR20180067583A (ko) 2018-06-20
JP2018534671A (ja) 2018-11-22
IL258035B (en) 2021-05-31
GB201518156D0 (en) 2015-11-25
GB2543304B (en) 2020-10-28
WO2017064456A1 (en) 2017-04-20

Similar Documents

Publication Publication Date Title
KR102629722B1 (ko) 이동 프리픽스 명령어
US8386754B2 (en) Renaming wide register source operand with plural short register source operands for select instructions to detect dependency fast with existing mechanism
US20160055004A1 (en) Method and apparatus for non-speculative fetch and execution of control-dependent blocks
CN108780397B (zh) 程序循环控制
US10599428B2 (en) Relaxed execution of overlapping mixed-scalar-vector instructions
US20120260061A1 (en) Data processing apparatus and method for performing vector operations
JP5217431B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP2019509576A (ja) 分岐命令
GB2563116B (en) Apparatus and method for determining a recovery point from which to resume instruction execution following handling of unexpected change in instruction flow
KR102307581B1 (ko) 레지스터 복구 분기 명령
US9213547B2 (en) Processor and method for processing instructions using at least one processing pipeline
US20030084272A1 (en) Handling problematic events in a data processing apparatus
KR102379886B1 (ko) 벡터 명령 처리
JPH1049373A (ja) パイプライン・デジタル・プロセッサにおいて多重で高精度の事象を操作する方法と装置
JPS623341A (ja) 条件付制御方法

Legal Events

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