KR20180126003A - 분기 명령 - Google Patents

분기 명령 Download PDF

Info

Publication number
KR20180126003A
KR20180126003A KR1020187029669A KR20187029669A KR20180126003A KR 20180126003 A KR20180126003 A KR 20180126003A KR 1020187029669 A KR1020187029669 A KR 1020187029669A KR 20187029669 A KR20187029669 A KR 20187029669A KR 20180126003 A KR20180126003 A KR 20180126003A
Authority
KR
South Korea
Prior art keywords
branch
instruction
loop
processing
data
Prior art date
Application number
KR1020187029669A
Other languages
English (en)
Other versions
KR102353639B1 (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 KR20180126003A publication Critical patent/KR20180126003A/ko
Application granted granted Critical
Publication of KR102353639B1 publication Critical patent/KR102353639B1/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes

Landscapes

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

Abstract

데이터 처리 시스템은, 분기되는 분기 타겟 어드레스를 지정하는 프로그램 가능 파라미터들과, 도달될 때 상기 분기 타겟 어드레스로의 분기가 후속하는 분기 차후 명령 후 프로그램 명령을 특정하는 분기점을 갖는, 상기 분기 차후 명령(BF)을 제공한다.

Description

분기 명령
본 발명은, 데이터 처리 시스템에 관한 것이다. 보다 구체적으로, 본 발명은, 데이터 처리 시스템내에서의 분기 명령들에 관한 것이다.
회로를 구비하고 명령들의 처리방법들을 지원하는 데이터 처리 시스템을 제공하는 것이 알려져 있다. 이 명령들의 일부에 의해 분기 타겟 어드레스에서의 프로그램 명령들에 분기한다.
적어도 일부의 실시예들에서, 본 발명은 데이터 처리장치가 존재하는 일례를 제공하고, 이 데이터 처리장치는,
프로그램 명령들의 시퀀스에 의해 지정된 처리 연산들을 행하는 처리회로;
상기 처리회로를 제어하여 상기 처리 연산들을 행하기 위한 제어신호들을 생성하기 위해 상기 프로그램 명령들의 시퀀스를 디코딩하는 명령 디코더를 구비하고,
상기 명령 디코더는 분기 차후 명령을 디코딩하는 분기 차후 명령 디코딩 회로를 구비하고, 상기 분기 차후 명령은 분기 타겟 어드레스와 관련된 프로그램 가능 파라미터와 상기 프로그램 명령들의 시퀀스내의 상기 분기 차후 명령 후 소정의 명령을 나타내는 또 다른 프로그램 가능 분기점 데이터 파라미터를 갖고,
상기 처리회로는, 상기 분기 차후 명령 디코딩 회로에 의해 제어되되 상기 분기점 데이터에 응답하여, 상기 프로그램 명령들의 시퀀스의 처리가 상기 소정의 명령에 도달할 때 상기 분기 타겟 어드레스에 대응한 분기 타겟 명령으로부터 시작하는 프로그램 명령들의 처리로 분기를 기동시키는 분기 제어회로를 구비한다.
적어도 일부의 실시예들에서, 본 발명은 데이터 처리장치를 제공하고, 이 데이터 처리장치는,
프로그램 명령들의 시퀀스에 의해 지정된 처리 연산들을 행하는 처리수단;
상기 프로그램 명령들의 시퀀스에 응답하여, 상기 처리수단을 제어하여 상기 처리 연산들을 행하기 위한 제어신호들을 생성하는 명령 디코더 수단을 구비하고,
상기 명령 디코더 수단은 분기 차후 명령을 디코딩하는 분기 차후 명령 디코딩 수단을 구비하고, 상기 분기 차후 명령은 분기 타겟 어드레스와 각각 관련된 프로그램 가능 파라미터들과 상기 프로그램 명령들의 시퀀스내의 상기 분기 차후 명령 후 소정의 명령을 나타내는 분기점 데이터를 갖고,
상기 처리수단은, 상기 분기 차후 명령 디코딩 수단에 의해 제어되되 상기 분기점 데이터에 응답하여, 상기 프로그램 명령들의 시퀀스의 처리가 상기 소정의 명령에 도달할 때 상기 분기 타겟 어드레스에 대응한 분기 타겟 명령으로부터 시작하는 프로그램 명령들의 처리로 분기를 기동시키는 분기 제어수단을 구비한다.
적어도 일부의 실시예들에서, 본 발명은 데이터 처리방법을 제공하고, 이 데이터 처리방법은,
프로그램 명령들의 시퀀스에 의해 지정된 처리 연산들을 행하는 단계;
상기 처리 연산들을 행하는 상기 단계를 제어하기 위한 제어신호들을 생성하기 위해 상기 프로그램 명령들의 시퀀스를 디코딩하는 단계를 포함하고,
상기 디코딩하는 단계는 분기 차후 명령을 디코딩하는 것을 포함하고, 상기 분기 차후 명령은 분기 타겟 어드레스와 각각 관련된 프로그램 가능 파라미터들과 상기 프로그램 명령들의 시퀀스내의 상기 분기 차후 명령 후 소정의 명령을 나타내는 분기점 데이터를 갖고,
상기 프로그램 명령들의 시퀀스의 처리가 상기 소정의 명령에 도달할 때 상기 분기 타겟 어드레스에 대응한 분기 타겟 명령으로부터 시작하는 프로그램 명령들의 처리로 분기를 기동시키는 단계를 더 포함한다.
이제, 실시예들을, 아래의 첨부도면을 참조하여 예시로만 설명하겠다:
도 1은 데이터 처리장치를 개략적으로 도시한 것이고,
도 2a는 분기 차후(branch-future) 명령을 개략적으로 도시한 것이고,
도 2b는 분기 차후 명령을 포함하는 프로그램 명령들의 시퀀스를 개략적으로 도시한 것이고,
도 2c는 소정의 명령을 나타내는 프로그램 가능 파라미터의 구현이 다른 다수의 분기 차후 명령들을 개략적으로 도시한 것이고,
도 2d는 프로그램 가능 분기 타겟 어드레스의 구현이 다른 다수의 분기 차후 명령들을 개략적으로 도시한 것이고,
도 3a는 처리 파이프라인을 통해 진행하는 분기 차후 명령을 포함하는 프로그램 명령들의 시퀀스를 개략적으로 도시한 것이고,
도 3b는 분기 차후 명령을 포함하는 명령들의 시퀀스의 프로그램 흐름을 개략적으로 도시한 것이고,
도 3c는 분기 차후 및 링크 명령을 포함하는 명령들의 시퀀스의 프로그램 흐름을 개략적으로 도시한 것이고,
도 4는 분기 차후 처리 방법을 개략적으로 도시한 것이고,
도 5는 데이터 무효에 응답하는 프로세스를 포함하는 다른 분기 차후 처리방법을 개략적으로 도시한 것이고,
도 5a는 조건 분기 차후 명령을 처리하는 일례를 도시한 것이고,
도 5b는 반대 조건들에 대응한 한 쌍의 조건 분기 차후 명령의 일례를 도시한 것이고,
도 6은 제로 오버헤드 루프 작용을 개략적으로 도시한 것이고,
도 7은 도 6의 상기 제로 오버헤드 루프 작용 후 명령들을 실행할 때 파이프라인 스테이지 콘텐트를 처리하는 것을 개략적으로 도시한 것이고,
도 8은 제로 오버헤드 루프 작용과 분기 차후 명령 작용을 제어하기 위해 루프/분기 제어회로를 구비하는 처리 파이프라인을 개략적으로 도시한 것이고,
도 9는 프로그램 카운터 값과 루프 제어 데이터의 필드간에 비교하여 루프 시작 위치로의 분기를 행해야 하는 프로그램 실행에서의 포인트를 특정하는 방법을 도시한 것이고,
도 10a는 루프 시작 프로그램 명령의 작용을 개략적으로 도시하는 흐름도이고,
도 10b는 상기 루프 시작 명령의 구현을 개략적으로 도시한 것이고,
도 11은 루프 종료 프로그램 명령의 작용을 개략적으로 도시하는 흐름도이고,
도 12는 프로그램 루프 본체를 제로 오버헤드 루프 작용의 일부로서 실행할 때 루프 제어회로의 액션을 개략적으로 도시하는 흐름도이고,
도 13은 술어를 제공하기 위해 프로그램 루프 본체내의 명령들의 실행 제어를 함으로써, 벡터 명령들이, 술어에 의해 제어중인 상기 프로그램 루프 본체의 주어진 반복동안에 그 특별한 벡터 요소들이 활성상태인 다중 벡터 요소들에 관해 연산할 수도 있는 것을 개략적으로 도시하는 흐름도이고,
도 14a 내지 14e는 비서술 루프와 서술 루프의 실행의 예들을 도시한 것이고,
도 15는 가상 머신 메카니즘을 개략적으로 도시한 것이다.
본 발명에서는, 분기 명령들이 처리에 대해 지연시켜 성능을 저하시킬 수도 있다는 것을 인식한다. 이 문제를 해결하기 위해서, 본 발명은, 분기 차후 명령을 디코딩하는 분기 차후 명령 디코딩 회로를 제공한다. 상기 분기 차후 명령은, 분기 타겟 어드레스와 관련된 프로그램 가능 파라미터를 포함한다. 상기 분기 타겟 어드레스는, 분기 후 상기 처리회로에 의해 처리되어도 되는 프로그램 명령에 대응한다. 또한, 상기 분기 차후 명령은, 프로그램 명령들의 시퀀스내에서 상기 분기 차후 명령 후 소정의 명령을 나타내는 또 다른 프로그램 가능 분기점 데이터 파라미터도 포함한다. 상기 분기 차후 명령에서 또 다른 프로그램 가능 분기점 데이터 파라미터를 포함함으로써, 상기 처리회로는, 상기 분기점에 앞서 상기 분기 타겟 어드레스에 분기하도록 준비할 수 있다. 그러므로, 상기 분기점에 도달할 때, 처리에 대한 지연을 피하거나 감소시킬 수도 있다.
도 1은 메모리(102)에 결합된 데이터 처리장치(100)의 일례를 개략적으로 도시한 것이다. 상기 메모리(102)는, 프로그램 명령들과 오퍼랜드 데이터를 저장하고 있다. 명령들은, 페치(fetch)부(104)에 의해 페치되고, 처리회로를 제어하기 위한 제어신호들(120)을 생성하기 위해 명령 디코더(106)에 의해 디코딩된다. 상기 처리회로는, 부동 소수점 처리회로(108)와 부동 소수점 레지스터들(110)을 구비하여, 상기 메모리(102)로부터 수신되거나 그 메모리에 저장된 부동 소수점 오퍼랜드들에 관해 데이터 처리 연산들을 행하여도 된다. 상기 처리회로는, 곱셈기(112)와, 시프터(114)와, 가산기(116)와, 정수 레지스터들(117)도 구비하여, 상기 메모리(102)로부터 수신되거나 그 메모리에 저장된 정수 오퍼랜드들에 관해 데이터 처리 연산들을 행한다.
상기 페치부에 의해 페치된 일부의 명령들은, 후속하는 프로그램 명령들의 현재 시퀀스로부터, 분기 타겟 어드레스에서 시작하는 메모리 어드레스 장소들에 저장된 프로그램 명령들까지의 처리를 분기하는 분기 명령들일 수도 있다. 분기 명령들을 수용하기 위해서, 상기 데이터 처리장치(100)는, 프로그램 흐름을 분기 타겟 어드레스에 재지정할 수도 있는 분기부(119)를 구비한다. 분기 명령들의 처리를 가속하기 위해서, 상기 데이터 처리장치(100)는, 분기 예측기(118)를 구비하여도 된다. 분기 예측기(118)는, 상태 데이터를 저장하고, 그 상태 데이터에 근거하여 분기 명령들을 취할지 취하지 않을지를 예측한다. 또한, 분기부(119)는, 여기서 한층 더 설명하는 것처럼 (다른 루프 제어회로 대신에 또는 다른 루프 제어회로에 더하여) 제로 오버헤드 루프 작용을 지원/제공하는 루프 제어 데이터에 의해 제어되어도 된다. 또한, 상기 분기 예측기(118)는, 여기서 한층 더 설명하는 것처럼, 루프 제어에 덧붙여져도 된다.
도 2a는 분기 차후 명령 BF(200)의 일례를 개략적으로 도시한 것이다. 분기 차후 명령(20)은, 분기 타겟 어드레스(254)를 나타내는 프로그램 가능 파라미터, 프로그램 가능 분기점 데이터(252)를 제공하는 프로그램 가능 파라미터, 및 그 명령을 분기 차후 명령으로서 특정하는 인코딩 비트들(258)을 포함한다. 상기 분기점 데이터(252)는, 데이터 처리장치에 의해 처리되는 프로그램 명령들의 시퀀스에서 상기 분기 차후 명령 BF에 후속하는 소정의 명령을 나타낸다. 상기 분기 타겟 어드레스(254)는, 상기 프로그램 흐름이 상기 소정의 명령에 도달할 때로 처리를 분기해야 하는 명령의 장소를 나타낸다. 다수의 비트들, x(256)는, 그 밖의 파라미터들을 위해 보유되어도 된다.
도 1로 되돌아가서, 상기 데이터 처리장치는, 상기 분리 차후 인코딩 비트들(258)과 일치함으로써 명령이 분기 차후인 것을 특정하는 것에 응답하여, 도 2a에 도시된 것들 등의 분기 차후 명령들을 디코딩하는 분기 차후 명령 디코딩 회로(122)를 구비한다. 분기 차후 명령을 디코딩하면, 상기 분기 차후 명령 디코딩 회로(122)는, 상기 처리회로를 제어하여, 분기 제어 데이터 캐시(130)내에, 분기 타겟 어드레스 데이터와, 상기 소정의 명령을 나타내는 분기점 데이터를 저장한다. 이렇게 데이터를 저장함으로써, 상기 데이터 처리장치(100)에는, 프로그램 명령들의 통상의 시퀀스의 처리로부터의 분기가 일어날 수도 있을 때에 앞서서의 표시와, 그 분기를 상기 프로그램 실행점으로 향하게 하는 타겟 어드레스가 제공될 수 있다. 그러므로, 상기 분기 차후 명령으로 나타낸 상기 소정의 명령에 그 프로그램 흐름이 도달하면, 그 분기는, 처리에 대한 지연 감소나 지연이 없게 일어날 수 있다. 또한, 상기 데이터 처리장치는, 루프 종료 명령 디코딩 회로(123)와 (비서술 루프 시작 명령 디코딩 회로도 겸하는) 서술 루프 시작 명령 디코딩 회로(125)를 구비하여, 한층 더 후술하는 것처럼 상기 처리회로를 제어하여 루프 종료 명령들 DLE와 루프 시작 명령들 DLS(P)에 응답한다.
분기 제어 데이터 캐시(130)는, 명령들의 시작 저장 어드레스들을 구별하는 메모리 저장 어드레스의 비트들의 최하위 비트 종료로부터 시작하는 상기 소정의 명령의 메모리 저장 어드레스를 나타내는 비트들의 적절한 서브세트로서, 상기 분기점에 대응한 데이터를 저장하여도 된다. 그 프로그램 흐름이 상기 소정의 명령에 언제 도달하였는지를 결정하기 위해서, 이 비트들을, 상기 프로그램 카운터를 나타내는 값, 다음 명령 페치 어드레스를 나타내는 값, 또는 상기 데이터 처리장치(100)의 처리 활동(activity)을 나타내는 값과 비교할 수 있다(예를 들면, 후술한 도 9를 참조).
도 2b는 분기 차후 명령 BF와, 프로그램 명령들 ADD1, ADD2 및 BX의 시퀀스를 포함하는 프로그램 코드를 도시한 것으로, 이 명령들은 상기 데이터 처리장치(100)에 의해 처리되어도 된다. 상기 분기 차후 명령 BF는, 초기에, 상술한 방식으로 상기 프로그램 흐름이 소정의 명령 BX에 도달할 때 타겟 어드레스에 분기하도록 상기 데이터 처리장치(100)를 설정한다. 상기 분기 차후 명령을 디코딩하였으면, 상기 데이터 처리장치(100)는, ADD1과 ADD2를 포함하는 프로그램 명령들의 시퀀스를 계속 처리할 것이다. 상기 데이터 처리장치(100)가 ADD2를 처리하였으면, 상기 캐시(130)에 저장된 상기 분기점 데이터는, 분기가 일어난다는 것을 나타낸다. 추가로, 상기 분기 제어 데이터 캐시(130)는, 분기되는 상기 명령의 어드레스에 해당한 대응 분기 타겟 데이터도 저장한다. 따라서, 상기 분기 타겟 데이터에 대응한 분기 타겟 명령에서 시작하는 처리 프로그램 명령들로의 분기는, 처리를 지연시키지 않거나 처리 파이프라인에 버블(미사용 슬롯)을 생기게 하지 않고 일어날 수도 있다.
도 2c는 도 2b에 도시된 명령들의 시퀀스에 대해 소정의 명령을 나타내는 상기 프로그램 가능 분기점 데이터 파라미터의 다른 예들을 도시한 것이다. 도 2c의 분기 차후 명령(201)에 있어서, 상기 분기점 데이터는, 상기 분기 명령 BX의 어드레스를 나타내는 데이터를 포함한다. 도 1에 도시된 분기 제어회로(124)는, BX의 어드레스를 나타내는 상기 데이터를, 페치중인 다음 명령에 대응한 값에 일치시켜도 된다. 그 후, 상기 프로그램 흐름이 분기 명령 BX에 도달하였다고 판정한 경우, 상기 분기 제어회로(124)는, 분기 차후 명령(201)의 분기 타겟에 의해 나타낸 명령으로의 분기를 기동시킨다.
상기 분기점 데이터는, 이와는 달리 도 2c의 분기 차후 명령(202)에 도시된 것처럼, 명령 ADD2를 나타내는 데이터이어도 된다. 그러므로, 분기 차후 명령(201)과 마찬가지로, 상기 분기 제어회로(124)는, 상기 프로그램 흐름이 ADD2를 페치하였을 때 분기 타겟으로의 분기를 기동시키고, BX에 도달한다.
도 2c의 분기 차후 명령(203)은, 도 2b에서 상기 분기 차후 명령 BF로부터 소정의 명령 BX까지의 어드레스 오프셋을 포함하는 분기점 데이터를 도시한 것이다.
도 2b의 예에서, ADD1 및 ADD2는, 32비트 명령들이다. 그러므로, 8바이트의 어드레스 오프셋은, 소정의 명령 BX를 나타낸다.
도 2c의 분기 차후 명령(204)은, 나머지 명령 카운트를 나타내는 분기점 데이터를 도시한 것이다. 그 나머지 명령 카운트는, 상기 소정의 명령이 도달되기 전에 상기 분기 차후 명령 후 실행되는 명령들의 수를 나타낸다. 도 2b의 예에서, 이것은 ADD1 및 ADD2에 해당한다. 따라서, 본 예에서 나머지 명령 카운트는 +2이다.
도 2c의 분기 차후 명령(205)은, 상기 소정의 명령이 도달되기 전에 처리되게 남은 프로그램 저장 장소들의 수를 나타내는 나머지 사이즈 데이터를 도시한 것이다. 상기 명령 ADD 및 ADD2가 각각 32비트 및 16비트의 가변 길이이면, 그들의 총 사이즈는 6바이트이고 나머지 사이즈 값은 6이다.
도 2c의 분기 차후 명령(211)은, 도 2b에서 상기 분기 차후 명령 BF로부터 소정의 명령 BX까지의 어드레스 오프셋을 포함하는 분기점 데이터를 도시한 것이다. 도 2b의 예에서, ADD1 및 ADD2는, 32비트 명령들이다. 그러므로, 상기 어드레스 오프셋이 8바이트이지만, 4의 값은, 모든 명령들이 적어도 2바이트 경계에 대해 정렬되므로 상기 값 8의 최하위 비트가 상기 소정의 명령의 어드레스를 유일하게 특정하는데 필요하지 않기 때문에, 소정의 명령 BX를 나타내는데 사용된다.
도 2d는 상기 분기 타겟 어드레스와 관련된 프로그램 가능 파라미터의 구현이 다른 분기 차후 명령들의 일부의 다른 예들을 도시한 것이다. 도 2d의 분기 차후 명령(206)에 도시된 것처럼, 상기 분기 타겟은, 상기 처리회로에 의해 분기되는 상기 명령의 메모리 어드레스를 저장하는 레지스터 장소를 지정하는 레지스터 지정자<Rm>로 나타내어져 된다.
도 2d의 분기 명령(207)은, 상기 분기 차후 명령의 상기 메모리 어드레스에 대한 포인트로부터 오프셋만큼 분기되는 명령의 어드레스를 나타내는 즉시 오프셋 값<imm>으로 상기 분기 타겟이 나타내어지는 다른 예를 도시한 것이다.
도 2d의 분기 차후 명령(208) 및 분기 차후 명령(209)은, 링크 지정자도 포함하는 분기 차후 명령들의 예들을 도시한 것이다. 상기 링크 지정자는, 상기 처리회로를 제어하여, 링크 레지스터 LR에 복귀 어드레스를 저장한다. 그 프로그램 흐름이 상기 분기 타겟에서 시작하는 프로그램 명령들의 처리를 완료하고 복귀 명령에 도달하면, 상기 링크 레지스터에 저장된 어드레스로 또 다른 분기를 행한다. 그러므로, 일단 상기 분기 타겟에서 상기 프로그램 명령들이 처리되었다면 상기 프로그램 명령들의 원래의 스트림으로 처리가 복귀하여도 된다. 그 밖의 예들에서, 상기 복귀 어드레스는, 스택 포인트 레지스터에 적용된 소정의 오프셋에 의해 지정된 저장 영역에서 임의의 어드레스에 저장되어도 된다.
또한, 도 2d는 조건 분기 차후 명령(210)을 도시한 것이다. 상기 조건 분기 차후 명령(210)은, 일부의 조건 코드: op{cond}를 포함한다. 그 조건 분기 차후 명령이 처리될 때, 상기 조건 분기 차후 명령 디코더는 상기 조건 코드들이 충족되었는지를 판정하고, 상기 조건 분기 차후 명령은 이 판정에 따라 처리된다.
도 3a는 도 1의 데이터 처리장치(100)의 처리 파이프라인(간단한 3개의 스테이지 파이프라인: 페치, 디코드 및 실행)을 통해 진행하는 분기 차후 명령을 포함하는 명령들의 시퀀스를 도시한 것이다. 사이클 0에서, 명령 I1은 상기 처리 파이프라인의 상기 페치 스테이지에 공급된다. 사이클 1에서, 도 2b에 도시된 명령들의 상기 시퀀스의 제1 명령이 상기 파이프라인, 즉 분기 차후 명령에 공급된다. 또한, 명령 I1은, 이 사이클에서 상기 디코드 스테이지에 진행한다. 사이클 2에서, 가산 명령 ADD1은 상기 파이프라인에 공급되고, 상기 분기 차후 명령 BF는 디코딩된다. 그 분기 차후 명령 BF를 디코딩하면, 상기 분기 차후 명령 디코딩 회로(122)는, 상기 프로그램 명령들의 상기 시퀀스내 상기 분기 차후 명령 BF 후 소정의 명령을 나타내는 분기점 데이터와, 상기 분기 제어 데이터 캐시(130)에 저장되어도 되는 분기 타겟 데이터를 얻는다. 이 경우에, 상기 분기점 데이터는, 다른 분기 명령 BX를 나타낸다.
사이클 3에서, ADD2은 상기 처리 파이프라인에 공급된다. 상기 분기 제어회로(124)는, 상기 프로그램 명령들의 시퀀스가 소정의 명령에 도달한 것과, 분기 타겟 어드레스로부터 시작하는 프로그램 명령들의 처리로의 분기가 기동되어야 하는 것을, 특정한다. 그러므로, 다음 사이클, 사이클 4에서, 상기 분기 타겟 어드레스에서 상기 프로그램 명령들로부터의 제1 명령 I1BT는, 상기 처리 파이프라인에 공급된다. 마찬가지로, 사이클 5 및 사이클 6에서, 2개 이상의 명령들, I2BT와 I3BT도 상기 처리 파이프라인에 공급된다.
도 3b는 도 3a의 명령들을 처리할 때 상기 데이터 처리장치(100)의 데이터 흐름을 도시한 것이다. 알 수 있듯이, I1, BF, ADD1 및 ADD2은 먼저 데이터 처리장치에 의해 처리된다. 상기 분기 차후 명령 BF로 인하여, ADD2의 처리는, 분기 타겟 어드레스로부터 시작하여 프로그램 명령들의 다른 시퀀스에 대해 분기가 일어나야 하는 것을 나타낸다. 이러한 다른 시퀀스는, 분기 타겟 명령 I1BT, I2BT 및 I3BT를 포함한다. 도 3b에서 알 수 있듯이, 상기 프로그램 흐름은, 상기 분기 차후 명령을 포함하는 프로그램 명령들의 제1 시퀀스로부터 떨어져 분기하고, 상기 분기 타겟 명령들을 처리한다. I1BT, I2BT 및 I3BT는, 산술 및 논리 명령들, 메모리 연산들이 행해지게 하는 데이터 처리 명령들, 또는 임의의 다른 타입의 명령이어도 된다.
도 3b에 도시된 것처럼, 상기 분기 차후 명령 BF는, 상기 분기 명령 BX를 우회하여 상기 ADD2 명령 직후 분기를 야기한다. 분기 명령 BX는, 상기 분기 제어 데이터 캐시(130)에 저장된 분기 차후 상태 데이터가 상기 분기 차후 명령 BF와 BX와의 사이에서 무효화되는 이벤트에 대해 프로그램 명령의 시퀀스에 포함되어도 된다. 예를 들면, 리셋트 중인 상기 처리회로; 상기 분기 차후 명령을 포함하는 프로그램 루프의 또 다른 반복이 요구되지 않는다고 판정하는 루프 제어회로 또는 루프 종료 명령; 행해지는 예외; 이에 따라서 처리가 현재의 예외의 처리로부터, 상기 현재의 예외 이전에 상태를 복원하지 않고 다음 예외의 처리에 직접 진행하는 예외 테일 체이닝; 소정의 즉시 타겟 어드레스 범위보다 큰 분기 명령의 실행; 분기 명령의 실행; 루프 시작 명령; 예외로부터 복귀; 상기 데이터 처리장치의 명령 캐시가 무효화되게 하는 명령의 실행; 상기 제어 데이터의 캐싱을 불가능하게 하는 명령의 실행; 분기 예측을 불가능하게 하는 명령의 실행; 프로그램 루프 몸체내의 분기가 루프 시작 명령과 루프 종료 명령 사이에 있지 않은 어드레스를 타겟으로 한다고 판정하는 상기 처리회로; 보안 연산모드와 비보안 연산모드간의 전환; 및 하나 이상의 구현 규정된 조건들의 이벤트에 있어서, 상기 분기 차후 명령에 대응한 임의의 저장된 분기점 데이터는, 무효화되어도 된다. 이 때문에, 더 이상 상기 분기 차후 명령에 의해 나타낸 분기를 행하는 것이 가능하지 않을 수도 있다. 그러므로, 상기 분기 명령 BX는, 상기 타겟 어드레스에 분기하기 위해서 백업으로서 상기 시퀀스 프로그램 명령들에 포함된다. 그렇지만, 통상의 상황하에서, 상기 분기 명령 BX는 처리되지 않을 것이다.
도 3c는 분기 차후 및 링크 명령 BFL을 포함하는 프로그램 명령들의 시퀀스를 개략적으로 도시한 것이다. 상기 BFL 명령에 의해, 상기 명령 MUL에 도달할 때 상기 서브루틴 함수에 분기되게 된다. 또한, 상기 BFL 명령에 의해, 복귀 어드레스 값은 상기 링크 레지스터 LR에 저장되고, 상기 복귀 어드레스 값은 상기 서브루틴 함수가 실행되어 있을 때로 복귀되는 상기 CMP 명령의 어드레스를 나타낸다. 일부의 실시예들에서, 상기 BFL 명령은, 상기 복귀 어드레스 값을 상기 링크 레지스터 LR에 저장하여도 된다. 그 밖의 실시예들에서, 상기 BFL 명령은 상기 분기 제어 데이터 캐시(130)내에 링크 지시자(indicator) 플래그를 저장하여도 되고, 상기 분기 제어회로(124)는, 상기 링크 지시자 플래그가 설정되면 상기 분기 타겟 어드레스에의 분기가 기동될 때 상기 복귀 어드레스 값을 상기 링크 레지스터 LR에 저장하여도 된다.
도 4는 분기 차후 처리 방법의 일례를 도시한 것이다. 단계 401에서, 분기 차후 명령이 디코딩된다. 상기 분기 차후 명령은, 프로그램 명령들의 시퀀스내의 상기 분기 차후 명령 후 소정의 명령을 나타내는 분기 타겟 어드레스와 분기점 데이터를 각각 나타내는 프로그램 가능 파라미터들을 포함한다. 그 후, 본 방법은 단계 402로 진행되어, 상기 프로그램 명령들의 상기 시퀀스가 상기 소정의 명령에 도달하였는지를 판정한다. 상기 프로그램 명령의 시퀀스가 상기 소정의 명령에 도달하였다고 판정할 때, 본 방법은 단계 403으로 진행되어, 상기 분기 타겟 어드레스로부터 프로그램 명령의 처리에의 분기가 기동된다.
도 5는 분기 차후 처리 방법의 다른 예를 도시한 것이다. 단계 501에서, 분기 차후 명령이 디코딩된다. 이전에 설명된 것처럼, 상기 분기 차후 명령은, 분기 타겟 어드레스와, 상기 프로그램 명령들의 시퀀스내의 상기 분기 차후 명령 후 소정의 명령을 나타내는 분기점 데이터를 포함한다. 단계 502에서, 분기점 데이터와 분기 타겟 어드레스는 루프/분기 제어 캐시에 저장된다. 상기 복귀 어드레스가 상기 링크 레지스터 LR로 저장되어도 되는 링크 명령들을 갖는 분기 차후의 경우에, 다른 실시예들에서, 그 대신에, 링크 명령을 갖는 분기 차후에 의해, 링크 지시자 플래그가 저장될 것이다. 그 후, 처리는 단계 503으로 진행되어, 처리중인 프로그램 명령들의 시퀀스가 상기 소정의 명령에 도달하였는지를 감시한다. 그 소정의 명령이 도달되지 않았을 경우, 상기 분기 타겟 어드레스와 상기 분기점 데이터가 단계 504에서 무효화되어 있는지를 검사한다. 단계 504에서 무효화의 경우에, 처리는 단계 506으로 이동되어 상기 분기 차후 명령이 무시되고, 정기적 프로그램 흐름이 진행한다. 그렇지만, 상기 데이터가 그래도 유효하다고 판정되는 경우, 처리는 단계 503으로 복귀한다. 상기 소정의 명령이 도달되었다고 판정할 때, 처리는 단계 505로 진행되어 상기 분기 타겟 어드레스로부터 시작하는 프로그램 명령들의 처리에의 분기가 기동된다. 단계 502에서 링크 지시자 플래그를 저장하는 실시예들에서, 상기 처리회로는, 이 플래그가 단계 505에서 설정되는지의 여부를 알기 위해서 검사하고, 그것이 설정되면 복귀 어드레스는 링크 레지스터 LR에 저장된다.
도 5a는 조건 분기 차후 명령들에 의해 일어날 수 있는 문제점과 이 문제점을 해결하는 기술을 설명하는 명령들의 시퀀스의 예를 도시한 것이다. 상기 명령들의 시퀀스는, 대응한 조건(예를 들면, 동일 EQ)이 충족되는 경우 특정한 타겟 어드레스에 분기하기 위한 조건 분기 BEQ를 포함한다. 대응한 조건 분기 차후 명령 BFCSEL에는, 상기 분기 BEQ와 같은 조건 EQ를 지정하는 것과 또한, 상기 분기가 취해져야 상기 어드레스 BP를 바로 전에 특정하는 상기 상기 분기 타겟 어드레스와 분기점 데이터 BP를 나타내는 파라미터 '함수'를 지정하는 것을 포함한다. 따라서, 상기 EQ 조건이 충족되는 경우, 상기 분기 타겟 명령 I1BT에의 분기는, 처리가 포인트 BP 바로 전에 상기 명령 ADD2에 도달할 때 기동될 것이다. 통상, 조건 분기와 관련된 조건이 만족되지 않은 경우, 분기가 취해지지 않아야 하고, 대신에 프로그램 흐름이 순서적으로 계속된다. 상기 분기 차후 명령 BF가 같은 방식으로 작용하기를 예상하여, 상기 분기 차후 명령 BFCSEL에 대한 조건이 충족되지 않은 경우, 그 ADD2 명령 후, 상기 분기 타겟 어드레스 '함수'로의 분기가 취해지지 않아야 하고, 대신에 분기점 BP에서 상기 명령 ADD2 후 다음 명령은 실행되어야 한다.
그렇지만, ADD2 후의 명령은 상기 분기 차후 명령 BFCSEL에 대응한 조건 분기 BEQ이고, 상기 EQ 조건이 이미 상기 분기 차후 명령 BFCSEL에 대해 충족되지 않는다고 알려지기 때문에, 상기 분기 BEQ는 그것의 조건도 실패할 것이다. 따라서, 상기 조건을 실패할 때, 페치/디코드/발행/실행 슬롯들을 착수하지만 어떠한 실제의 처리 연산도 기동하지 않는 상기 처리 파이프라인에 도입된 2개의 "쓸데없는" 명령들(상기 분기 차후 명령 BFCSEL과 상기 분기 명령 BEQ)이 있다(실패된 분기는 본질적으로 무연산(NOP) 명령으로서 작용한다). 따라서, 상기 분기 차후 명령 BFCSEL을 포함하는 것은 상기 분기 조건이 통과될 때의 경우들에 성능을 향상시킬 수 있지만, 상기 조건이 실패할 때 상기 분기 차후 명령 BFCSEL을 포함하는 것은, 실제로, 상기 분기 차후 명령 BFCSEL이 포함되지 않았었을 경우 하나의 쓸데없는 명령(상기 분기 BEQ) 대신에, 이제 2개의 쓸데없는 명령들(상기 분기 차후 명령 BFCSEL과 상기 분기 명령 BEQ)이 있기 때문에 성능 불이익을 초래한다. 이것은, 컴파일러가 상기 분기 차후 명령 BFCSEL을 포함하는 것을 정당화시키는지를 판정하는 것을 곤란하게 한다-그렇게 할 것인지 아닌지의 판단은 데이터 의존적일 수도 있고 컴파일 시간에 예측하는 것이 매우 곤란할 수 있는 상기 조건이 충족될 가능성에 의존하여도 된다.
도 5a는 이 발행이 어떻게 해결될 수 있는지를 도시한 것이다. 상기 조건 코드 EQ, 분기점 정보 BP 및 타겟 어드레스 정보 "함수"에 더하여, 상기 조건 분기 차후 명령 BFCSEL은, 상기 분기 차후 명령 BFCSEL과 관련된 이후의 분기 명령 BEQX 후 명령인 분기 우회 명령 I2의 어드레스를 나타내는 분기 우회 파라미터 '종료'도 지정하여도 된다. 상기 분기 차후 명령 BFCSEL과 관련된 상기 조건이 충족되는 경우, 상기 분기 차후 명령 디코딩 회로(122)는, 상술한 것처럼 같은 방식으로, 상기 처리회로를 제어하여, 상기 점 BP 바로 전에 상기 소정의 명령 ADD2를 나타내는 분기점 데이터와, 분기 타겟 어드레스를, 상기 분기 제어 데이터 캐시(130)내에 저장한다. 한편, 상기 분기 차후 명령 BFCSEL과 관련된 상기 조건이 만족되지 않은 경우, 상기 분기 차후 명령 디코딩 회로(122)는, 상기 처리회로를 제어하여, 상기 분기점 BP를 특정하는 분기 제어 데이터와, 분기 우회 명령을, 상기 분기 제어 데이터 캐시(130)내에 저장한다. 따라서, 상기 처리가 상기 분기점 BP에 도달할 때, 상기 조건이 실패되었을 경우, 순차로 다음 명령 BEQ에 진행하는 대신에, 상기 분기 제어회로(124)는 상기 분기 우회 명령 I2에의 분기를 기동시킨다.
이것이 의미하는 것은, 조건 분기 차후 명령과 관련된 상기 조건이 충족되는지에 상관없이, 상기 분기 명령 BEQ 자체는, 상기 분기점 BP에 도달하기 전에 상기 분기 제어 데이터가 무효화되지 않으면 도달되지 않는다는 것이다. 따라서, 상기 분기 제어와 관련된 명령 슬롯들의 수가 상기 조건의 통과나 실패 여부와 상기 분기 차후 명령의 포함 또는 미포함 여부에 상관없이 그래도 1이므로, 상기 분기 차후 명령 BFCSEL을 도입함으로써 초래된 불이익이 없다. 따라서, 이것이 의미하는 것은, 분기 차후 명령을 포함하는 것은 성능 불이익을 일으킬 가능성이 높을지를 추정해야 하지 않고 분기 차후 명령들을 상기 컴파일러가 이용할 수 있기 때문에, 실제로 프로그램 코드를 실행할 때 상기 분기점에서의 분기 지연을 감소시키는 성능 이익이 보다 자주 달성될 수도 있도록, 상기 분기 차후 명령을 이용할 가능성을 높게 한다는 것이다.
상기 분기 우회 파라미터 '종료'는, 상기 조건 분기 명령내에서 다양한 방식으로 인코딩될 수 있거나, 묵시적이어서 전혀 인코딩될 필요가 없을 수도 있다. 예를 들면, 상기 '종료' 어드레스는, 레지스터에 또는 즉시값으로서 지정될 수 있고, 절대값으로서 지정될 수 있거나 상기 분기 차후 명령 자체 BFCSEL의 프로그램 카운터 어드레스에 대해 지정될 수 있다. 그렇지만, 실제로, 상기 분기 우회 명령 I2는 상기 분기점 BP로부터 일부의 명령만을 추종하므로, 상기 분기점에서 상기 소정의 명령 ADD2의 어드레스에 대해 지정된 어드레스로서 상기 분기 우회 파라미터를 인코딩하여, 그 분기 우회 파라미터를 인코딩하는데 필요한 비트들의 수를 감소시키는데 보다 효율적일 수 있다. 일부의 실시예들은, 상기 분기점 BP에게, 상기 분기 명령 BEQ에 앞서 명령들의 임의의 수를 지정되게 하는 것을 허가할 수도 있다. 예를 들면, 이에 따라, 상기 분기 자체뿐만 아니라 분기점으로부터도 분기할 때 상기 분기 BEQ와 관련된 조건을 평가하는 비교 명령들 등의 제어 명령들이 우회 가능하게 할 수도 있다. 이 경우에, 상기 분기 우회 파라미터는, 일부의 어드레스 스트라이드 값(예를 들면, 2 또는 4바이트)의 배수로 상기 분기점에서 소정의 명령에 대해 상기 분기 우회 명령의 오프셋을 지정하는 이진 수치일 수 있다.
그렇지만, 그 밖의 실시예들은, 상기 분기점 BP가 상기 분기 BX 직전의 명령 ADD2이고, 상기 분기 우회 명령 I2가 그 분기 직후의 명령이어서, ADD2와 I2 사이에는 명령이 하나가 있다고 가정할 수도 있다. 분기 명령들 전부가 특정한 고정 명령 길이를 갖는 경우, 상기 분기점 BP에서의 상기 명령 ADD2의 어드레스들과 상기 분기 우회 명령 I2 사이의 오프셋은 특정한 공지된 오프셋만큼 분리되어도 되어서, 분기 차후 명령에서 상기 분기 우회 파라미터 '종료(end)'를 전혀 인코딩할 필요가 없을 수도 있다.
한편, 상기 분기 명령 BX가 분기점 BP에서 상기 명령 ADD2로부터 상기 분기 우회 명령 I2를 분리하는 명령일뿐이라고 상정하는 경우에도, 일부의 구현은, 가변 명령 길이를 지원할 수도 있어서, 중재 분기 명령 BEQ는 다수의 명령 길이들 중 하나를 가질 수 있었다. 이 경우에, 상기 조건 분기 차후 명령 BFCSEL에서 상기 우회 파라미터 '종료'는, 상기 분기 명령 BEQ의 길이를 페치하여 결정할 필요 없이 이후의 분기 명령 BEQ의 길이를 지정함으로써 상기 분기 우회 명령을 특정할 수 있다, 예를 들면 상기 분기 명령을 위한 가능한 명령 길이(예를 들면, 16비트 또는 32비트)가 2개 있을 경우, 상기 우회 파라미터 '종료'는 1비트 플래그로 표현될 수 있었다.
도 5b는 반대의 조건들에 대응한 한 쌍의 분기 차후 명령들 BFCSEL의 이용을 도시하는 명령들의 다른 시퀀스의 예를 도시한 것이다. 프로그램은, 조건이 충족되는 경우 코드의 제1 피스(piece)로의 분기와 (예를 들면, if-then-else 생성자(constructs))를 처리하기 위해) 상기 조건이 충족되지 않은 경우 코드의 제2 피스로의 분기를 필요로 하는 프로그램 흐름에서 '포크(fork)'를 필요로 하는 것이 상대적으로 일반적이다. 따라서, 프로그램 명령 시퀀스는, 반대의 조건들(예를 들면, 동일 EQ와 동일하지 않음 NE)에 대응한 한 쌍의 분기 명령 BEQ와 BNQ를 포함하여도 된다. 상기 분기들 처리시의 지연을 감소시키기 위해서, 대응한 조건 분기 차후 명령들 BFCSEL은, 반대의 조건들 EQ와 NE 각각과 함께 포함되어도 된다. 따라서, 상기 EQ 또는 NE 조건의 충족 여부에 상관없이, 'func1' 또는 'func2'로의 분기들 중 하나가 취해져야 한다.
상기 한 쌍의 분기 차후 명령들 BFCSEL EQ의 첫번째가 그 조건을 실패하는 경우, 상기 분기 차후 명령 디코딩 회로(122)는, 상기 처리회로를 제어하여, 상술한 것처럼 우회 어드레스 '종료'에서 상기 분기 우회 명령을 지정하는 분기 제어 데이터를 사기 분기 제어 데이터 캐시(130)내에 저장한다. 그 후, 제2 분기 차후 명령 BFCSEL NE는 그 조건을 통과하여서, 상기 제1 분기점 BP에 도달시에 '종료'로의 분기 대신에, 상기 필요로 한 프로그램 흐름은 실제로, 상기 분기점 BP에서 함수 'func2'로의 분기를 필요로 한다. 따라서, 분기 제어 데이터 캐시(130)가 보다 이른 분기 차후 명령에 응답하여 설정된 유효 분기 제어 데이터를 이미 포함할 때, 분기 차후 명령이 그 조건을 통과하는 경우, 상기 분기 차후 명령 디코딩 회로(122)는 상기 처리회로를 제어하여 상기 이전에 설정된 분기 제어 데이터를 겹쳐쓴다.
그렇지만, 상기 한 쌍의 분기 차후 명령들 BFCSEL EQ의 첫번째가 그 조건을 통과하는 경우, 데이터는, 처리가 상기 분기점 BP에 도달할 때 상기 분기 타겟 어드레스 'func1'로의 분기를 제어하기 위해 상기 분기 제어 데이터 캐시(130)에 저장된다. 그렇지만, 상기 한 쌍의 분기 차후 명령들 BFCSEL NE의 두번째가 그 조건을 실패하고, 보통, 상기 분기점 BP에서 상기 분기 우회 어드레스 '종료'로의 분기를 나타내기 위해 상기 분기 제어 데이터 캐시(130)에 그 데이터를 설정할 것이다. 그렇지만, 이 경우에, 상기 이전에 설정된 분기 제어 데이터를 겹쳐쓰는 것에 의해, 상기 분기점 BP후 어드레스 '종료'에서 명령 I2로의 분기가 2개의 함수 'func1'와 'func2' 중 어느쪽도 실행되지 않을 것이 때문에 결과가 잘못되게 될 것이다. 이를 방지하기 위해서, 분기 제어 데이터 캐시(130)가 보다 이른 분기 차후 명령에 응답하여 설정된 유효 분기 제어 데이터를 이미 포함할 때, 분기 차후 명령이 그 조건을 실패하는 경우, 상기 분기 차후 명령 디코딩 회로(122)는 상기 처리회로를 제어하여, 상기 이전에 설정된 분기 제어 데이터를 상기 분기 제어 데이터 캐시(130)에 보유한다.
요약하면, 'condition true' 분기 차후 명령은 이전의 분기 차후 명령에 응답하여 설정된 유효 분기 제어 데이터를 겹쳐쓰지만, 'condition false' 분기 차후 명령은 이전의 분기 차후 명령에 응답하여 설정된 유효 분기 제어 데이터를 겹쳐쓰지 않는다. 이것은, 조건의 결과에 따라 2개의 다른 함수들 중 하나로 상기 프로그램이 분기하는 경우 그 프로그램 흐름 제어에서 '포크'를 필요로 할 때에도, 분기 차후 명령들이 정확히 사용될 수 있도록 보장한다.
도 6은 제로 오버페드 프로그램 루프 작용을 개략적으로 도시한 것이다. 제로 오버헤드 프로그램 루프 작용은 루프 작용을 지원하는 것과 관련된 오버헤드가 없다는 것을 의미하지 않지만, 그 대신에 이 오버헤드는, 예를 들면, 루프 제어 프로그램 명령들을 별도로 실행하기 위한 요구사항 없이 이후의 패스들(passes)이 제어되면서 상기 프로그램 루프 본체를 통한 제1 패스동안에 프로그램 실행 파이프라인내에 슬롯들을 루프 제어 프로그램 명령들에게 차지하도록 요구하는 등으로 행함으로써, 감소된다.
통상, 프로그램 흐름은, 프로그램 분기에 직면할 때까지 선형으로 진행된다. 도 6에 도시된 예에서, 프로그램 흐름은, 과거의 명령 Ix를 진행하여 루프 시작 명령 DLS[P]에 도달한다. 이 루프 시작 명령 DLS[P]는, 서술 작용과 비서술 작용 양쪽을 나타낼 수도 있다. 상기 루프 시작 명령 DLS[P] 후 명령들 I0, I1, I2, I3로 이루어진 상기 프로그램 루프 본체가 상기 프로그램 루프 본체를 통한 패스마다 다중 벡터 요소들이 처리되는 벡터 프로그램 루프 본체로서 실행할 경우, 상기 루프 시작 명령은 술어에 사용되는 벡터 요소 사이즈를 지정한다. 이 사용되는 벡터 요소 사이즈가 기본 처리 시스템의 최대 데이터 경로 폭미만일 때, 이것은, 다중 벡터 요소들이 상기 프로그램 루프 본체를 통한 각 패스에 관해 처리된다는 것을 나타낸다. 반대로, 그 지정된 벡터 요소 사이즈가 상기 최대 데이터 경로 폭과 같거나, 데이터 요소 사이즈가 지정되지 않은 경우, 이것은, 상기 프로그램 루프 본체를 통한 패스마다 하나의 요소가 처리되는 스칼라 방식으로 처리를 추구하는 것을 나타낸다. 상기 프로그램 루프 본체를 통한 하나의 패스동안에 복수의 벡터 요소들을 처리할 때, 이러한 패스는 그 프로그램 루프 본체를 통한 그 패스 동안에 처리된 벡터 요소들의 수만큼 주어진 복수의 반복을 위해 상기 프로그램 루프 본체를 실행한 것에 대응한다고 생각할 수 있다. 예를 들면, 실행되는 프로그램은, 8개의 요소들, 즉 상기 프로그램 루프 본체의 8번 반복이 처리되는 것을 요구할 수도 있다. 이것은, 상기 프로그램 루프 본체를 통한 2개의 패스에 의해, 상기 프로그램 루프 본체를 통한 각 패스가 상기 루프의 4번 반복에 대응하면서 상기 요소들 중 4개에 관한 원하는 처리를 병렬로 각각 실행함으로써 이루어질 수 있다. 그 밖의 실시예들에서, 상기 요소들은, 1번의 반복에 각기 대응한 루프를 통한 8개의 패스동안에 따로따로 처리되어도 된다.
전형적인 벡터 구현에 있어서, 상기 프로그램 루프 본체를 통한 패스동안에 상기 벡터 요소들을 병렬로 처리함으로써 성능을 향상시킨다는 것을 알 것이다. 그렇지만, 일부의 실시예들은, 비록 상이한 벡터 요소들은 프로그래머의 시점에서 단일의 병렬 벡터 처리 명령에 대응하게 보일지라도 순서대로 그 상이한 벡터 요소들을 실행함으로서 하드웨어 오버헤드/복잡성의 감소를 위해 병렬로 실행할 능력을 희생시킬 수도 있다.
복수의 벡터 요소들로 벡터 처리를 하는 경우, 상기 상이한 벡터 요소들은 벡터 처리의 상이한 레인에서 처리되고, 이 레인들의 각각에 서술되어도 된다. 하나의 레벨에서, 상기 술어는, 관련된 상기 요소 비트 폭에 이용 가능한 데이터 레인들의 이용 가능 수가 주어진 상기 프로그램 루프 본체를 통한 각 패스동안에 처리되는 벡터 요소들의 수에 대해 행해진 처리와 매칭시키는데 사용되어도 된다. 예를 들면, 상기 처리가 7개의 벡터 요소들에 관해 처리되고 그 벡터 요소 사이즈는 4개의 벡터 요소들이 상기 프로그램 루프 본체를 통한 각 패스동안에 처리되기 위한 사이즈일 경우, 전체 처리는, 4개의 벡터 요소가 병렬로 처리되는 상기 프로그램 루프 본체를 통한 하나의 패스를 행한 후, 3개의 요소가 병렬로 처리되고 그 벡터 처리의 하나의 레인이 상기 프로그램 루프 본체내의 상기 프로그램 명령들의 술어로 인해 그것의 연산에서 억제되는 상기 루프 본체를 통한 최종 패스를 행함으로써, 이루어질 수도 있다.
이러한 술어는, 상기 처리의 데이터 경로 폭과 상기 벡터 요소 사이즈를 갖는 상기 프로그램 루프 본체를 통한 반복의 수와 일치한다. 이러한 술어는, 예를 들면, 상기 프로그램 명령들에서 지정된 것처럼, 계산이 행해지는 것에 관련된 다른 이유로 인한 상기 프로그램 루프 본체를 통한 주어진 패스동안에 상기 처리 레인들내의 처리를 억제하는 역할을 하는 또 다른 술어에 의해 추가되어도 된다. 이러한 형태들의 술어의 양쪽을 조합하여, 그들이 상기 프로그램 루프 본체의 실행을 통과한 것처럼 상기 벡터 요소들의 술어 전체를 제공하여도 된다.
도 6으로 되돌아가면, 상기 루프 시작 명령은, 상기 프로그램 루프 본체가 레지스터 Rn내에 저장된 값으로 나타낸 것처럼 실행되는 횟수(벡터화가 행해지지 않는 경우 스칼라 루프 반복의 수에 대응함)를 지정하는 것과 관련된 파라미터를 갖고, 상기 Rn은 상기 레지스터 LR에 상기 DLS(P) 명령에 의해 복사된다. 상기 레지스터 LR은, 프로그램 호출 복귀시 사용되는 복귀 어드레스를 저장하는 링크 레지스터로서도 사용되는 레지스터이어도 되고, 이에 따라 상기 DLS(P) 명령을 실행하기 전에 이 링크 레지스터의 프로그램 스택에 대한 콘텐츠를 보관하는 것이 바람직할 수도 있다. 또한, 상기 루프 시작 명령 DLS(P)는, 상기 제로 오버헤드 루프의 종료의 프로그램 어드레스를 나타내는 관련 파라미터 "loopend"를 갖고, 루프 종료 명령 DLE 직후의 명령이다.
상기 루프 시작 명령 DLS(P) 후, 상기 프로그램 루프 본체를 형성하는 하나 이상의 프로그램 명령들, 예를 들면, I0, I1, I2, I3을 발견하였다. 상기 프로그램 루프 본체는 짧고 간단하거나 길고 복잡할 수 있고(예를 들면, 또 다른 루프들이나 분기들을 포함하여도 되고), 일부의 상황에서만 단일의 명령을 포함하여도 된다는 것을 알 것이다. 실제로, 짧은 프로그램 루프 본체들은, 프로그램 루프 본체를 통한 각 패스에 관해 종래의 루프 제어 명령들을 실행하는 오버헤드가 상기 프로그램 루프 본체의 길이 자체가 보다 짧을 경우 커지므로, 제로 오버헤드 루프들의 이용으로부터 비례적으로 보다 많이 유익하다.
상기 프로그램 루프 본체의 종료에는, 루프 종료 명령 DLE가 있다. 이 루프 종료 명령 DLE는, 상기 루프 시작 명령 DLS[P] 후 상기 명령의 메모리 어드레스를 지정하는 그것의 loopstart 파라미터를 제어하기 위한 파라미터들로서 취한다. 상기 DLE 명령은, 행해지는 남은 반복의 수를 나타내는, 상기 레지스터 LR에 저장된 값을 검사한다. 상기 프로그램 루프 본체를 통한 최종 패스가 행해졌을 때, 처리는, 상기 루프 종료 명령 DLE, 즉 상기 명령 Iz 후 상기 프로그램 명령을 실행하도록 진행된다. 이것은, 상기 명령 Iz에 직접 분기함으로써, 또는 먼저 상기 DLE 명령을 NOP로서 실행하고 나서 Iz를 실행함으로써, 행해져도 된다.
도 6의 우측부는, 명령들이 실행되고 그 동안에 상기 프로그램 루프 본체를 통과하는 것을 개략적으로 도시한 것이다. 상기 프로그램 루프 본체를 통한 제1 패스상에서, 상기 루프 시작 명령 DLS[P]와 상기 루프 종료 명령 DLE 양쪽이 실행된다. 상기 루프 시작 명령과 상기 루프 종료 명령 양쪽이 실행되면, 루프 제어 데이터는, 상기 시스템 하드웨어에 의해 설정되어 저장된다. 이에 따라, 상기 프로그램 루프 본체를 통한 이후의 패스들은, 상기와 같은 루핑(looping) 작용에 대하여 계속 진행시킬 때 상기 루프 시작 명령 DLS[P] 또는 상기 루프 종료 명령 DLE을 따로따로 실행해야 하지 않고 행해질 수 있다. 이것은, 도 6의 우측부에서, 상기 실행된 프로그램 명령들을 그리는 실선들과 프로그램 명령의 점프들/분기들을 나타내는 점선들로 나타내어진다. 도시된 것처럼, 상기 프로그램 루프 본체를 통한 최종 패스의 종료에서, 프로그램 실행 포인트는, 그 프로그램 루프 본체의 최종 명령 I3로부터, 상기 루프 종료 명령 DLE를 실행하지 않고 상기 루프 종료 명령 후 상기 명령 Iz로 점프하여도 된다. 그 밖의 실시예들에서, 상기 프로그램 흐름은, 그 시점에서 상기 프로그램 루프 본체의 요구된 반복의 전체가 행해져 있는 것을 나타내는 값을 상기 링크 레지스터 LR이 저장중이므로, 액션이 억제되면서만 상기 루프 종료 명령 DLE를 통과하여도 된다.
상기 프로그램 루프 본체의 종료에서 상기 루프 종료 명령 DLE의 장소와, 상기 루프 제어 데이터를 설정 및 저장할 때의 액션은, 상기 프로그램 루프 본체를 통한 패스들이 중단되고 상기 루프 제어 데이터가 예외의 발생으로 인한 것과 같이 무효화된 경우, 상기 프로그램 루프 본체에 의한 처리가 재개될 때, 상기 루프 종료 명령 DLE은 실행되어 다시 필요한 루프 제어 데이터를 복원시킬 수도 있다. 보다 구체적으로, 상기 루프 제어 데이터(미세구조 상태)는 예외 발생시에 보존될 필요가 없지만, 상기 프로그램 루프 본체를 얼마나 많이 반복했는지를 나타내는 상기 링크 레지스터 값 LR(구조적 상태)이 유지될 것이다. 상기 프로그램 루프 본체 도중에 실행이 재개할 때, 상기 루프 종료 명령은, (비록 그 실행은 상기 중단이 일어나지 않았었다면 억제되었을지라도) 다시 실행되고, 상기 프로그램 루프 본체를 통한 이후의 패스들상에서, 상기 제로 오버헤드 루프 작용이 재개되고 상기 루프 종료 명령의 실행이 상기와 같은 이후의 패스들상에서 회피되어도 되도록, 상기 루프 제어 데이터를 복원하는 하는 역할을 할 것이다.
상술한 것처럼, 상기 제로 오버헤드 루프 작용을 제어하는 상기 루프 제어 데이터는, 제로 오버헤드 루프처리동안에 예외(exception)/중단(interrupt)의 발생시 무효화될 수도 있다. 또한, 그 밖의 이벤트들은, 상기 처리가 재개될 때, 적어도 일부의 인스턴스들에서, 그 루프 제어 데이터가 복원되면서 상기 루프 제어 데이터의 무효화를 기동시켜도 된다. 상기 루프 제어 데이터가 무효화될 수 있는 이벤트들의 예들은, 상기 처리회로가 리셋트되고; 상기 프로그램 루프 본체의 또 다른 반복이 요구되지 않는 것을 특정하는 상기 루프 제어회로나 상기 루프 종료 명령; 행해지는 예외; 현재의 예외의 처리로부터 상기 현재의 예외 이전에 상태를 복원하지 않고 다음 예외의 처리에 직접 진행하는 예외 테일 체이닝; 소정의 즉시 타겟 어드레스 범위보다 큰 분기 명령의 실행; 분기 명령의 실행; 예외로부터 복귀; 상기 데이터 처리장치의 명령 캐시가 무효화되게 하는 명령의 실행; 상기 루프 제어 데이터의 캐싱을 불가능하게 하는 명령의 실행; 분기 예측자나 분기 예측을 불가능하게 하는 명령의 실행(수정된 분기 예측자를 부분적으로 사용하여 상기 루프 제어회로의 역할을 이행하여도 된다); 상기 프로그램 루프 몸체내의 분기가 상기 프로그램 루프 본체의 시작 명령과 루프 종료 명령 사이에 있지 않은 어드레스를 타겟으로 한다고 판정하는 상기 처리회로; 보안 연산모드와 비보안 연산모드간의 전환; 및 특별한 구현을 사용하여 상기 루프 제어 데이터를 무효화하여도 되는 하나 이상의 구현 규정된 조건들을 포함한다.
도 7은 도 6에 도시된 상기 제로 오버헤드 프로그램 루프 작용의 예를 행할 때 처리 파이프라인의 여러가지의 처리 스테이지들의 콘텐츠를 개략적으로 도시한 것이다. 본 예에서, 상기 처리 파이프라인은 6개의 스테이지, 즉 페치, 디코드 및 실행을 갖는다. 도 6에 도시된 상기 프로그램 명령들은, 이 처리 파이프라인에 공급/페치된다. 도시된 것처럼, 상기 프로그램 루프 본체를 통한 제1 패스는 상기 루프 시작 명령 DLS[P]와 상기 루프 종료 명령 DLE 양쪽의 실행을 포함한다. 따라서, 상기 제1 패스상에서 실행된 명령이 6개(DLS(P), I0, I1, I2, I3 및 DLE)가 있다. 상기 프로그램 루프 본체를 통한 이후의 3개의 패스들 상에서, 상기 루프 시작 명령 DLS[P]와 상기 루프 종료 명령 DLE의 실행이 요구되지 않고, 대신에 상기 루프 제어 데이터의 제어하에 연산하는 상기 루프 제어회로는, 행해졌던 상기 프로그램 루프 본체를 통한 패스들의 수를 추적하고, 상기 프로그램 루프 본체내의 최종 명령이 상기 페치 스테이지에 놓여 있을 때를 특정하고, 상기 프로그램 루프 본체의 시작 명령으로 역으로 분기할 때 사용되는 상기 분기점을 특정하는데, 사용되어도 된다. 본 예에서, 상기 명령 I0는 상기 프로그램 루프 본체의 시작 명령이고, 상기 명령 I3은 상기 프로그램 루프 본체내의 마지막/최종 명령이다. 상기 프로그램 루프를 통한 상기 각 제로 오버헤드 패스상에서, 4개의 프로그램 명령들(I0, I1, I2 및 I3)은, 상기 처리 파이프라인을 통해 진행된다. 상기 프로그램 루프 본체를 통한 제4 패스상에서의 최종 명령 I3의 실행 후, 상기 링크 레지스터 LR내에 저장된 루프 반복 카운터는, 요구된 모든 반복이 행해져 있고, 이에 따라 최종 명령 I3에 도달할 때 상기 루프 제어회로가 상기 시작 명령 I0에 역으로 분기를 기동하지 않고 대신에, 상기 루프 종료 명령 DLE 직후 상기 명령 Iz에 분기를 기동하는 것을 나타낸다. 그 밖의 실시예들에서, 상기 루프 제어회로는 상기 명령 Iz에 분기를 기동하지 않고, 대신에 프로그램 흐름을 상기 DLE에 계속 진행되게 한다. 상기 링크 카운터 LR에 저장된 반복 카운터가 그 이상 반복이 요구되지 않는 것을 나타내므로, 상기 DLE 명령은 조금도 연산을 행하지 않을 것이고, 프로그램 흐름은 상기 명령 Iz를 계속할 것이다. 이러한 해결방법은, 일부의 실시예들에서 구현하기가 보다 쉬울 수도 있고, 하나 더의 DLE 명령만이 상기 루프의 끝에 도달할 때 실행되므로, 상기 성능 영향은 최소일 수도 있다.
도 8은 명령 파이프라인의 페치 스테이지(1002)와 관련지어 루프/분기 제어회로(1000)의 일례의 형태와 연산을 개략적으로 도시한 것이다. 상기 루프/분기 제어회로는, 루프/분기 제어 캐시(1004)내에 저장된 루프/분기 제어 데이터에 의해 적어도 부분적으로 제어된다. 다른 곳에서 설명된 상기 제로 오버헤드 루프 작용과 분기 차후 작용이, 동일한 또는 유사한 회로를 사용하여 제어되어도 된다는 것을 알 것이다. 예를 들면, 분기 차후 작용은, 상기 시스템이 (제로 오버헤드 루핑 작용이 활성인 것을 나타내는) DoLoop 플래그가 설정되지 않지만 상기 루프/분기 제어 데이터가 유효로서 표시된 상태에 있을 때, 상기 루프 제어 데이터(또는 이와 유사한 데이터)와 상기 루프/분기 제어 회로(1000)를 사용하여 지원되어도 된다.
도 8과 제로 오버헤드 루프 작용을 제어할 때의 이용으로 되돌아가면, 상기 루프 제어 캐시(1004)에는, 상기 루프 종료 명령 DLE의 결과로서 루프 제어 데이터가 로딩된다. 상기 루프 종료 명령들은, 도 1에 도시된 루프 종료 디코딩 회로(123)에 의해 디코딩된다. 또한, 데이터는, 도 1에 도시된 상기 분기 차후 명령 디코딩 회로(122)에 의해 디코딩되는 분기 차후 명령들 BF의 실행에 의해 그 캐시(1004)에 로딩될 수 있다.
일부의 실시예들에서, 상기 루프 제어 캐시(1004)는, 장애의 발생시에 장애 증후군 데이터를 저장하는 장애 증후군 레지스터나 레지스터들도 겸하는 스토리지를 재사용하여도 된다. 이러한 레지스터들은, 내부에 저장된 임의의 데이터가 유효한 장애 증후군 데이터인지를 나타내는 관련된 적어도 하나의 유효 비트 fv를 가질 수도 있다. 상기 루프/분기 제어회로(1000)와 루프 시작 및 루프 종료 명령의 액션은, 관련된 상기 레지스터들이 대신에 루프 제어 데이터나 분기 차후 데이터를 저장중일 때 상기 장애 증후군 데이터와 관련된 상기 장애 레지스터 유효 비트들 fv를 무효 상태로 설정할 수도 있다. 일부의 실시예들에서, 장애 증후군 데이터의 보존은 제로 오버헤드 루프 작용이 진행되게 하는 것을 보다 중요하다고 생각되는 것일 수도 있고, 이에 따라 폴스(false) 증후군 레지스터들 중 어느 하나가 상기 장애 레지스터 유효 비트 fv로 나타낸 것처럼 장애 증후군 데이터를 저장중일 경우, 루프 종료 명령의 디코딩은 그 유효 장애 증후군 데이터가 겹쳐써지는 것을 허가하지 않고 상기 제로 오버헤드 루프 작용은 (상기 루프 시작 명령 및 상기 루프 종료 명령의 존재가 프로그램 루프 본체 반복의 정확한 수가 그들의 명시적 실행에 의해 행해지도록 보장하긴 하지만) 억제될 것이다.
또한, 상기 루프 제어회로(1000)는, 진단/분석 목적용 흔적 데이터를 형성하는데 사용되는 흔적 출력을 생성한다. 상기 루프 제어회로는, 루프 종료 명령 DLE의 실행에 대응한 흔적 출력을, 비록 상기 루프 종료 명령의 실행이 상기 프로그램 루프 본체를 통한 제1 패스 이후의 제로 오버헤드 루프 연산 동안에 회피되었고 명시적으로(따로따로) 일어나지 않았을지라도, 상기 제로 오버헤드 루프를 실행할 때 상기 루프/분기 제어회로(1000)의 제어하에 상기 시작 명령으로 역으로 분기하는 제어시 또는, 상기와 같은 루프 종료 명령의 실행시에, 생성한다. 비록 상기 루프 종료 명령이 종래의 의미에서 명시적으로/따로따로 실행되지 않았을지라도, 루프 종료 명령 실행에 대응한 이벤트들을 나타내는 흔적 데이터를 포함하는 흔적 출력을 제공함으로써, 진단 및 분석 연산들을 행할 때 상기 흔적 출력을 보다 쉽게 추종하여 이해하게 한다.
상기 루프 제어 캐시(1004)내에 저장된 루프 제어 데이터는, 형태가 다양할 수 있고, 상기 제로 오버헤드 루프 작용과 상기 분기 차후 작용을 제어하는데 사용된 데이터의 타입이 다를 수 있다. 특히, 상기 루프 제어 데이터는, 예를 들면, 상기 시작 명령의 어드레스를 나타내는 루프 시작 데이터(이 어드레스를 직접 또는, 그 어드레스로부터 소정의 오프셋을 갖는 어드레스를 거쳐 상기 시작 명령에 대해 나타냄); 상기 루프 종료 명령으로 즉시 진행되는 상기 프로그램 루프 본체의 마지막 명령과, 상기 프로그램 루프 본체의 시작 명령과의 사이의 거리를 나타내는 루프 시작 오프셋 어드레스; 그 루프 종료 명령으로 즉시 진행되는 상기 프로그램 루프 본체의 마지막 명령의 어드레스를 나타내는 루프 종료 데이터; 상기 루프 종료 명령으로 즉시 진행되는 상기 프로그램 루프 본체의 마지막 명령에 도달하기 전에 처리되는 나머지 명령들의 수를 나타내는 루프 나머지 명령 데이터; 상기 루프 종료 명령으로 즉시 진행되는 상기 프로그램 루프 본체의 마지막 명령에 도달하기 전에 처리되는 나머지 프로그램 명령들을 저장하는 프로그램 저장 메모리 장소들의 수를 나타내는 루프 나머지 사이즈 데이터; 및 상기 루프 제어 데이터가 유효한 것, 예를 들면 이전에 설명된 것과 같은 무효 이벤트가 일어나지 않은 것을 나타내는 루프 제어 유효 데이터 v 중, 하나 이상을 포함하여도 된다.
일부의 실시예들에서, 상기 루프 제어 캐시(1004)는, 다중 엔트리들을 가져도 되어, 다중 연산들은 동시에 지원될 수 있다. 상기 루프 제어 캐시(1004)내의 각 엔트리는, 그것과 관련되어, 유효 루프 제어 데이터를 현재 저장하고 있는지 아닌지를 나타내는 유효 비트 v를 더 갖는다. 상기 루프 제어 데이터용 유효 비트 v는, 클리어 되어, 상술한 각 종 무효 이벤트들 중 하나의 발생시에 무효성을 나타낼 수도 있다. 본 실시예에서는, 상기 루프 제어 캐시(1004)를 엔트리가 2개인 것으로서 설명한다. 이는 제로 오버헤드 루프와 분기 차후 작용 양쪽이 동시에 지원되는 것을 허가한다. 그 밖의 실시예들에서는, 단일의 엔트리만을 위한 충분한 스토리지를 상기 루프 제어 캐시(1004)내에 설치하여도 됨에 따라서, 제로 오버헤드 루프 작용 또는 분기 차후 작용 중 한쪽만을 주어진 시간에 지원하여도 된다. 상기 루프 제어 캐시(1004)는 분기 제어 캐시도 겸한다는 것을 알 것이다. 또한, 동일한 이중 기능을 상기 루프 제어회로(1000)에서 제공한다.
도 8에 도시된 것처럼, 상기 루프 제어회로(1000)는, 명령 캐시(1006)으로부터 상기 페치 스테이지(1002)에 로딩된 프로그램 명령들 I와 관련된 상기 메모리 어드레스들을 감시하는 역할을 한다. 로딩된 상기 프로그램 명령의 어드레스가 상기 루프 제어 캐시(1004)내에 저장된 상기 루프 제어 데이터에 의해 제로 오버헤드 루프의 상기 프로그램 루프 본체내의 마지막 명령으로서 나타낸 상기 프로그램 명령의 어드레스와 일치할 때(또는, 소정의 관계, 예를 들면 소정의 오프셋을 가질 때), 상기 루프 제어회로(1000)는 (상기 링크 레지스터 LR내의 값으로 나타낸 것처럼) 상기 프로그램 루프 본체를 통해 상기 시스템에서 행하는 나머지 패스들이 있는지 없는지를 판정하고, 이러한 나머지 패스들이 있을 경우, 상기 프로그램 루프 본체의 시작 명령으로의 분기를 기동시킨다. 이렇게 하여, 상기 루프 제어 캐시(1004)내에 저장된 루프 제어 데이터의 제어하에 동작하는 상기 루프 제어회로(1000)는, 또 다른 루프 반복들이 요구되는지를 판정할 수 있고, 또 다른 루프 반복들(주어진 요소가 처리되기 위한 상기 프로그램 루프 본체를 통한 패스)이 요구되면, 상기 처리회로를 제어하여(상기 처리 파이프라인에서 실행한 상기 명령들을 행하는 상기 시스템의 상기 명령 파이프라인과 그 밖의 요소들) 상기 루프 종료 명령에 선행하는 상기 프로그램 명령들이나 상기 프로그램 루프 본체에 의해 지정된 상기 처리 연산(들)을 행하지만, 상기 루프 종료 명령(이 명령 자체는 상기 루프 제어 데이터의 무효 이벤트가 일어나지 않게 된, 상기 제1 패스이외의 상기 프로그램 루프 본체를 통한 패스들상에서 따로따로 실행될 필요가 없다)을 제외한다.
도 9는, 상기 루프 제어회로(1000)의 일 예시 형태가, 상기 루프 제어 데이터의 일부를 사용하여 상기 페치 스테이지(1002)에서 페치하는 다음 명령과 관련된 현재의 프로그램 카운터 값에 의존한 데이터와 비교하여, 상기 프로그램 루프 본체의 시작 명령으로의 분기가 요구되는지를 판정할 수도 있는(상기 명령 메모리 어드레스 자체가 아닐 수도 있는, 예를 들면 이로부터 고정된 오프셋을 가질 수도 있는) 방법을 개략적으로 도시한 것이다. 보다 구체적으로, 상기 루프 제어 데이터는, 상기 루프 종료 명령의 메모리 저장 어드레스를 나타내는 적절한 서브세트의 비트들을 포함할 수도 있다. 예를 들면, 상기 루프 제어 데이터는, 통상의 32비트 중 비트 2로부터 비트 x까지 연장되는 비트들의 필드, 메모리 저장 장소에 대응한 바이트 어드레싱된 메모리 어드레스를 포함할 수도 있다. 이것을, 상기 페치 스테이지(1002)에서 공급한 페치되는 다음 명령과 관련된 메모리 어드레스내의 대응한 비트 위치들과 비교한다. 본 실시예에서 프로그램 명령들은, 상기 32비트 프로그램 명령들로서, 최하위 2개의 비트 1:0이 불변자이도록 상기 바이트 어드레싱된 메모리 어드레스 공간내에 정렬됨에 따라서, 상기 루프 시작 어드레스로 분기하기 위한 요구사항을 특정하기 위해 비교될 필요가 없다. 도 9의 상기 예는, 상기 루프 제어회로(1000)가 상기 페치 스테이지(1002)에 페치중인 상기 프로그램 루프 본체내의 마지막 명령과, 이에 따라서 상기 루프 시작 어드레스, 즉 상기 프로그램 루프 본체의 시작 명령으로 분기하기 위한 요구사항을 특정하여도 되는 일 방식일 뿐이다는 것을 알 것이다. 분기를 행하는 이러한 요구사항은, 또 다른 방식들로, 이를테면 상기 프로그램 루프 본체를 통해 진행하는 것처럼 페치된 명령들의 수를 카운팅하는 방식, 상기 프로그램 루프 본체의 명령을 페치할 때 통과한 저장 장소들의 수를 카운팅하는 방식(이 기술은 가변 길이 명령들을 이용하는 실시예들에서 사용하는데 적합할 수도 있다), 또는 그 밖의 기술들로 이루어질 수도 있다.
도 10a는 루프 시작 명령의 디코딩시의 작용을 개략적으로 도시하는 흐름도다. 단계 2000에서는, 루프 시작 명령 디코더 회로에서 루프 시작 명령 DLS(P)를 디코딩할 때까지 처리를 대기한다. 단계 2002에서는, 상기 파라미터 Rn으로 지정한 상기 레지스터내에 저장된 반복 카운트가 제로인지 아닌지를 판정한다. 그 반복 카운트가 제로이면, 이것은 상기 프로그램 루프 본체를 통해 패스들(반복)을 요구하지 않는 것을 나타내고, 단계 2004의 처리로 진행되어, 상기 루프 종료 명령 DLE 후 상기 명령으로의 분기가 행해지거나, 상기 프로그램 루프 본체가 직면한 각 명령의 억제로, 이를테면 라이트 백들(write backs)과 그 명령들로부터의 그 밖의 부작용을 억제함으로써, 순회된다.
단계 2002에서 상기 반복 카운트가 제로가 아니다고 판정한 경우, 단계 2003의 처리로 진행되어 단계 2000에서 디코딩된 명령이 서술 루프 시작 명령 DLSP인지에 관해 판정한다. 예일 경우, 단계 2006의 처리로 직접 진행된다. 아닐 경우, 단계 2005에서는, 풀(full) 벡터 사이즈로 상기 요소 사이즈를 설정한 후 다시 단계 2006의 처리로 진행되어 상기 프로그램 루프 본체를 통한 하나의 패스에서 처리 가능한 벡터 요소들의 최대 수를 가리키는 값 Nmax를 생성한다. 그 밖의 실시예들에서, 상기 Nmax는 상기 DLS(P) 명령의 일부로서 산출할 필요는 없다, 예를 들면, 도 13에 도시된 것처럼 상기 DoLoop내에서 명령 처리의 일부로서 행해질 수 있다. 이 값 Nmax는, 상기 루프 시작 명령에서 지정한 벡터 요소 사이즈와 비교하여 상기 처리 파이프라인의 상기 처리회로의 데이터 폭에 의존한다. 상기 값 Nmax는 상기 제로 오버헤드 루프 작용의 실행 전체에 걸쳐 정적이어서, 그 생성된 값은 명시적으로 저장되지 않고 단지 원하는 대로 및 필요한 경우에 상기 벡터 작용을 제어하는데만 사용될 필요가 있다.
단계 2008에서는, 상기 DoLoop 상태가 유효하고 상기 시스템이 현재 DoLoop를 처리중인 것(즉, 제로 오버헤드 루프 작용이 활성인 것)을 가리키는 플래그를 설정하고, 상기 루프 반복 카운트는 상기 루프 제어회로에서 사용할 상기 링크 레지스터 LR에도 복사된다. 그 후, 단계 2010의 처리로 진행되어 프로그램 루프 본체의 시작 명령을 페치하여 실행하는 것으로 진행한다.
도 10b는 루프 시작 명령 DLS(P)를 개략적으로 도시한 것이다. 이것은, 상기 명령을 DLS(P) 명령으로서 특정하는 오피코드 필드 ENC를 포함한다. 또한, (상기 링크 레지스터 LR에 전달되는) 상기 반복 카운트 Rn을 갖는 레지스터, 상기 루프 종료 명령이 위치되는(이전에 설명된 상기 분기 타겟 어드레스들을 지정하는 상기 BF를 위한 각종 방식으로 지정되어도 되는) 지시자, 및 요소 사이즈 값을, 지정하는 파라미터 필드들도 포함된다. 상기 요소 사이즈 값이 데이터 경로의 상기 풀 벡터 사이즈로 설정되면, 그 명령은 비서술된, 즉 DLS 명령으로서 취급될 것이다. 상기 요소 사이즈가 미만일 경우, 이것은, 상기 루프가 상기 지정된 벡터 사이즈의 요소들을 사용하여 벡터화되어 서술 루프 시작 명령으로서 처리되어야 한다는 것을 나타낸다.
상기 벡터 요소 사이즈 VEwidth는, 부동 소수점 데이터 값들이 액세스 가능할 때 액세스 가능하고 부동 소수점 데이터 값들이 액세스 가능하지 않을 때 액세스 가능하지 않은, 부동 소수점 제어 데이터 레지스터내에 저장된다. 상기 부동 소수점 데이터 값들이 액세스 가능할 때, 상기 루프 시작 명령들로부터 디코딩된 것처럼 벡터 요소 사이즈 VEwidth는, 상기 부동 소수점 제어 데이터 레지스터내에 저장되고, 상기 데이터 경로내의 벡터화를 제어한다. 상기 루프 시작 명령들이 비서술되면, 상기 벡터 요소 사이즈는 벡터 레지스터 폭 VRwidth로 설정된다.
부동 소수점 데이터 값들이 액세스 가능하지 않을 때, 예를 들면 부동 소수점 상태가 초기화 되어 있지 않을 때, 상기 부동 소수점 제어 데이터 레지스터로부터 VEwidth를 판독하려는 시도는, 상기 부동 소수점 제어 레지스터내에 현재 저장된 VEwidth의 임의의 값과는 관계없이(또한 액세스 가능하지 않은) VRwidth의 값을 복귀시킨다. 루프의 실행 도중에 부동 소수점 값들을 액세스 가능하게 하면(초기화하면), 임의의 기존의 부유 상태가 (예를 들면, 유휴 상태 보존(saving) 메카니즘에 의해) 보존될 것이고, 상기 부동 소수점 제어 데이터 레지스터내에 저장된 VEwidth의 값을 (특별한 구현을 위해 고정 배선된) VRwidth로 초기화하는 것을 포함하는 새로운 부동 소수점 상태는 초기화될 것이다. 이에 따라, 상기 루프 내의 벡터화는 그대로일 것이다.
도 11은 루프 종료 명령 DLE의 디코딩시에 액션들을 개략적으로 도시하는 흐름도다. 단계 2012에서는, 루프 종료 명령 디코더에서 루프 종료 명령 DLE를 디코딩할 때까지 처리를 대기한다. 그 후, 단계 2014에서는, 상기 DoLoop 플래그가 현재 설정되었는지 아닌지를 판정한다. 상기 DoLoop 플래그가 현재 설정되어 있지 않으면, 이것은 제로 루프 작용이 현재 활성이 아니라는 것을 나타내고, 단계 2016의 처리로 진행되어 상기 루프 종료 명령의 실행이, 이를테면 단계 2013에서 그것을 무연산 명령(NOP)으로서 취급함으로써 억제된다.
단계 2014에서 상기 DoLoop 플래그가 설정되어 있다고 판정하면, 단계 2018에서는 루프 제어 데이터를 상기 루프 제어 캐시(1004)에 저장한다. 이 루프 제어 데이터는, 예를 들면, 상기 시작 명령의 명령 어드레스, 상기 DLE 명령의 상기 메모리 저장 어드레스의 비트들에 대응한 (고정된 명령 정렬로 인한 임의의 불변자 비트들을 제외한) 최하위 비트들의 필드, 및 상기 루프 제어 데이터가 유효한 것을 가리키는 유효 비트를, 나타내는 데이터를 포함하여도 된다. 또한, 그 밖의 형태의 상기 루프 제어 데이터는, 이전에 설명된 것처럼 저장되어도 된다.
단계 2020에서는, 현재의 반복 카운트가 상기 DLS(P) 루프 시작 명령에 응답하여 이전에 생성된 Nmax 값이하인지 아닌지를 판정한다. 그 반복 카운트가 Nmax 값이하인 경우, 이것은, 상기 루프 종료 명령에 도달된 상기 프로그램 루프 본체를 통한 현재의 패스가 상기 프로그램 루프 본체를 통한 요구된 마지막 패스인 것을 나타내고, 이에 따라 단계 2016의 처리로 진행된다. 단계 2020에서 상기 반복 카운트가 Nmax 값이하가 아니라고 판정한 경우는, 단계 2022의 처리로 진행되어 상기 반복 카운트를 Nmax만큼 감분한다.
그리고, 단계 2024에서는, 상기 프로그램 루프 본체의 시작 명령으로의 분기를 행한다.
도 12는 상기 루프 제어회로(1000)의 액션을 개략적으로 도시하는 흐름도다. 단계 2026에서, 상기 루프 제어회로(1000)는, 상기 루프 제어 데이터가 현재 유효로서 표시되어 있는지 아닌지를 판정한다. 그 루프 제어 데이터가 현재 유효로서 표시되어 있을 경우, 단계 2028의 처리로 진행되어, 상기 파이프라인에 공급된(즉, 상기 페치 스테이지(1002)에 페치된) 최근의 명령이, 상기 루프 제어 데이터와 일치하는 페치될 다음 명령의 어드레스로 나타낸 것처럼 상기 프로그램 루프 본체내의 마지막 명령인지 아닌지에 간해 판정한다. 상기 프로그램 루프 본체에서 이러한 마지막 명령의 페칭이 검출되는 경우는, 단계 2030의 처리로 진행되어, 상기 반복 카운트가 현재 상기 값 Nmax이하인지 아닌지에 관해 판정한다. 상기 반복 카운트가 현재 상기 값 Nmax이하인 경우, 단계 2032의 처리로 진행되어, 상기 DoLoop 플래그를 클리어 하고 상기 루프 제어 데이터 유효 비트 v를 클리어 한다. 이것은, 제로 오버헤드 루프 작용이 종료한 것을 나타낸다. 그 후, 상기 루프 제어회로(1000)에 의한 처리는, 그 제로 오버헤드 루프 작용 인스턴스에 대해 종료한다. 그 후, 상기 루프 종료 명령은, 도 11에 관련지어 설명된 것처럼 처리될 것이다, 예를 들면 이러한 루프 종료 명령 DLE 주변에서 분기할 것이다.
단계 2030에서 상기 프로그램 루프 본체를 통한 패스들의 수를 추적하는 상기 현재 반복 카운트가 상기 값 Nmax이하가 아니다고 판정한 경우, 단계 2034에서는 그 반복 카운트를 Nmax만큼 감분한다. 그 후, 단계 2036에서는, 상기 프로그램 루프 본체의 시작 명령으로 분기하고, 상기 프로그램 루프 본체를 통한 다음 패스를 시작한다.
도 13은 제로 오버헤드 프로그램 루프 본체내의 명령들의 실행의 제어, 특히 이것이 술어를 포함하는 방법을 개략적으로 도시하는 흐름도다. 단계 2038에서는 실행할 명령이 있는지를 판정한다. 그 후, 단계 2040에서는, 이러한 실행이 제로 오버헤드 루프 프로그램 루프 본체내에서 일어나는중인 것을 나타내는 상기 DoLoop 플래그가 설정되는지를 판정한다. 이 DoLoop 플래그가 설정되어 있지 않으면, 단계 2050에서는 통상적으로 그 명령의 처리가 진행된다. 단계 2040에서 상기 DoLoop 플래그가 설정되어 있다고 판정하면, 단계 2042에서는 Nmax의 값이 나머지 반복 카운트보다 큰지를 판정한다. Nmax의 값이 나머지 반복 카운트보다 크지 않으면, 단계 2044에서는 상기 프로그램 명령이 실행되기 위해 사용되는 액티브 레인들의 수를 Nmax로서 설정한다. 이 액티브 레인들의 수는, 실제로, 단계 2048에서 실행되는 명령 또는 단계 2048이나 단계 2050 중 한쪽에서 행해진 이전의 명령내에서 인코딩되어도 되는 또 다른 술어로서의 결과를 감소시킬 수도 있다. 단계 2042에서 Nmax의 값이 상기 나머지 반복 카운트보다 크다고 판정하면, 단계 2046에서는 상기 명령을 위해 사용되는 액티브 레인들의 수를 상기 나머지 반복 카운트 값으로서 설정한다. 이것은, 그 레인들내에서 처리될 필요가 있는 벡터 요소들이 없을 때 처리하는 레인들을 능동적으로 이용하지 않게 한다. 그 후, 단계 2048에서는, 그 설정된 액티브 레인들의 수를 사용하여 단계 2038에서 실행을 요구하는 것으로서 특정된 상기 명령을 행한다.
상기 명령의 벡터화 성능은, 행해지는 상기 명령의 타입에 따를 수도 있다. 보다 구체적으로, 선택된 액티브 레인들의 수로 나타낸 서술이 이루어지는 방식은, 실행중인 명령의 유형과 상기 관련된 시스템의 데이터 경로의 유형에 따라 달라질 수도 있다. 예를 들면, 술어는, 요구되지 않은 대로 데이터의 술어로 나타내어 있던 데이터 레인들(예를 들면, 바이트 인에이블)에 대한 위한 라이트 백을 억제함으로써 적용될 수도 있다. 이러한 경우에, 상기 술어 값을 생성할 때 적용된 상기 요소 사이즈는, 상기 처리 명령에 의해 적용된 요소 사이즈와 상이하여도 된다. 따라서, 보다 작은 요소 사이즈로 상기 라이트 백을 억제함으로써, 가산 등의 단일의 산술 연산의 일부들만이 라이트 백될 수도 있다. 쉽게 분할될 수 없는 명령들의 경우에 있어서, 상기 적용된 술어는, 바이트 레벨로 지정되어도 되지만, 상기 바이트 술어 값들 중 하나만, 이를테면 데이터 처리가 행해진 워드의 전체를 서술하는 역할을 하는 최하위 바이트에 따라 구현된다.
상술한 것처럼, 상기 루프 제어회로(1000)는, 상기 프로그램 루프 본체의 하나의 벡터 명령에 응답하여 처리되는 벡터 요소들의 수를 나타내는 소정의 상태 레지스터에 저장된 제어 파라미터에 따라 상기 루프 카운터의 갱신을 제어하여도 된다. 예를 들면, 상기 제어 파라미터는, 상기 루프에 의해 처리된 하나의 벡터 요소의 사이즈를 나타내는 VEwidth이어도 되고, 이 제어 파라미터에 의해 루프 반복당 처리되는 요소들의 수를 결정할 수 있어, 상기 루프 카운터는 상기 루프 본체의 순회에 의해 처리된 벡터 요소들의 수만큼 반복마다 갱신될 수 있다. VEwidth는, 상기 루프의 처리를 위해 규정된 것과 같은 하나의 벡터 요소의 사이즈인 것을 주목한다. 또한, 별도의 벡터 요소 사이즈 IVEwidth는, 상기 루프내의 상기 벡터 명령들의 파라미터들 중 하나로서 지정되어도 되고, 이는 전체적으로 상기 루프를 위해 지정된 것처럼 VEwidth와 일치하는 경우가 많지만, 동일할 필요는 없다. 전체적으로 상기 루프를 위해 별도의 요소 사이즈가 지정되게 하는 것과 상기 루프내의 명령들은, 상기 루프에서 처리되는 하나의 "요소"가 실제로 벡터 명령의 상이한 벡터 요소들에 할당된 다수의 성분들을 포함하는 경우들을 지원하는데 유용할 수 있다. 예를 들면, 복소수는 실수성분과 허수성분을 가져도 되고, 복합 산출 벡터 명령들은, 하나 이상의 수들의 상기 실수성분과 허수성분이 상기 벡터의 교호 요소들에 할당된다고 가정하여 지원되어도 된다. 이 경우에, 개개의 벡터 명령들이 32비트 요소들을 지정하는 경우에도, 예를 들면, 전체적으로 상기 루프는 하나의 "요소"의 64비트가 실수성분과 허수성분 양쪽을 포함하는 것으로서 생각하여도 된다. 따라서, 여기서 VEwidth에 대한 레퍼런스들은, 상기 루프 제어회로에 의해 보여진 것처럼 상기 벡터 요소 사이즈를 나타내고, 이는 상기 루프내의 벡터 명령들에서 사용한 실제의 요소 사이즈와 반드시 같지는 않다.
또한, 상기 루프의 최종 반복에서 (Nmax-loopcount)개의 벡터 레인들을 마스킹하는 루프 테일 술어는, 상기 소정의 상태 레지스터에 저장된 파라미터들에 의존할 수도 있다. 예를 들면, 상기 루프 테일 술어는 술어가 요구되는지를 나타내는 플래그에 의존할 수도 있고, 술어가 요구될 때, 상기 최종 반복에서 행해지는 액티브 레인들의 수는, (상기 링크 레지스터에 저장된 루프 카운터 "loopcount"와 결합하여) 상기 소정의 상태 레지스터에 저장된 VEwidth로부터 얻어질 수 있다. 상기 루프의 끝에서, 적용중인 어떠한 루프 테일 술어도, 상기 루프 이후의 벡터 명령들이 테일 술어 없이 연산하도록 상기 소정의 상태 레지스터에 있는 상기 플래그를 리셋트함으로써 불가능하게 될 수 있다. 또는, 술어가 요구되는지는, 명시적 술어 플래그를 필요로 하지 않도록 상기 loopcount 및 VEwidth로부터 직접 판정될 수 있었다. 여기서, 루프 테일 술어는, 상기 프로그램 루프 본체의 다수의 반복동안에 처리되는 (사이즈 VEwidth의) 벡터 요소들의 총수인 Nve/상기 프로그램 루프 본체의 한번의 반복으로 처리되는 (다시 사이즈 VEwidth의) 벡터 요소들의 최대수인 Nmax가 정수와 같지 않을 때, 상기 루프 제어회로(1000)가, 상기 반복들 동안에 처리된 벡터 요소들의 총수가 Nve이도록 많은 상기 반복들 중 하나의 반복동안에 상기 벡터 처리 레인들의 하나 이상에서의 처리를 적어도 부분적으로 억제하는 경우의 기능성을 나타낸다. 상기 예들은 상기 루프 테일 술어가 상기 최종 루프 반복에 적용되는 경우들을 설명하지만, 그 밖의 구현들도 동일한 결과를 내기 위해 보다 이른 루프 반복에서 상기 루프 테일 술어를 적용할 수 있다. 사이즈 VEwidth의 일 요소의 술어는, 상술한 것처럼 VEwidth>IVEwidth의 경우에 상기 루프내의 개개의 벡터 명령에 대해 마스킹되는 하나보다 많은 사이즈 IVEwidth의 요소를 요구할 수도 있다.
그렇지만, 상기 소정의 상태 레지스터는, 항상 액세스 가능하지 않은 레지스터일 수도 있다. 예를 들면, 상기 소정의 상태 레지스터는, 도 1에 도시된 부동 소수점 레지스터들(110) 중 하나인 부동 소수점 제어 레지스터(1110)(도 8 참조) 등의 부동 소수점 문맥 데이터와 관련된 레지스터일 수도 있다. 문맥 전환시에 보존될 필요가 있는 상태의 양을 감소시키기 위해서, 부동 소수점 연산들을 요구하지 않는 프로세스들은, 디폴트에 의해 부동 소수점 상태가 할당되지 않고, 제어 레지스터에 저장된 부동 소수점 상태 접근성 플래그(또는 유휴 상태 보존 스테이터스 플래그)는, 부동 소수점 문맥이 현재의 프로세스에 액세스 가능한지를 나타낼 수도 있다. 문맥 전환시에, 그 상태 접근성 플래그가 상기 부동 소수점 문맥이 현재 액세스 가능하지 않은 것을 나타내면, 상기 부동 소수점 문맥은 메모리에 보존될 필요가 없다. 부동 소수점 문맥이 현재 액세스 가능하지 않을 때 상기 부동 소수점 문맥을 요구하는 명령에 응답하여, 유휴 상태 보존(saving) 연산을 행하여 메모리에 대한 상기 부동 소수점 레지스터들내에 저장된 이전의 어떠한 문맥 데이터도 보존하고, 그 후 상기 부동 소수점 문맥 레지스터들은 현재의 프로세스에 액세스 가능하게 되고, 상기 상태 접근성 플래그는 지금 상기 부동 소수점 문맥이 액세스 가능한 것을 나타내기 위해 갱신된다.
상기 소정의 상태 레지스터가 액세스 가능하지 않을 수도 있는 다른 상황은, 현재의 특권레벨을 금지하거나 그 레지스터에 액세스하는 것을 처리하는 액세스 허가들이 규정되어 있을 경우다. 예를 들면, 일부의 시스템들은, 허가 검사회로(1008)(도 8 참조)를 설치하여, 상기 소정의 상태 레지스터(예를 들면, 부동 소수점 레지스터들)를 구비하는 특별한 서브세트의 레지스터들에의 액세스를 제어하기 위한 액세스 허가 데이터를 검사하고, 상기 액세스 허가 데이터를 위반하는 상기 서브세트의 레지스터들 중 하나에의 액세스가 검출될 때 장애 조건을 기동한다. 그 장애는, 운영체제를 기동하여 그 액세스 허가들을 검토하고, 필요한 경우, 그 장애를 기동한 상기 프로세스/특권 레벨에 상기 서브세트의 레지스터들이 액세스 가능하게 하는 상기 액세스 허가들을 변경하고 처리를 비특권 프로세스에 복귀시키기 전에, 상기 장애를 기동한 비특권 프로세스로부터 숨겨지도록 메모리에 대한 상기 레지스터들에 현재 저장된 특권 데이터를 보존하여도 된다.
상기 요구된 벡터 요소 폭 VEwidth을 설정하기 위한 상기 루프의 시작에서 상기 부동 소수점 문맥이 액세스 가능하게 한 경우에도, 그래도 그 부동 소수점 문맥이 상기 루프의 끝에서 액세스 가능할 것이라고 상정될 수 없는데, 그 이유는, 현재의 프로세스의 문맥이 무효화되게 되는 상기 루프 동안에 예외가 일어났을 수도 있는 것이 가능하기 때문이고, 상기 예외 후 그 프로세스의 문맥이 복원하면, 상기 부동 소수점 문맥은 상기 복원된 프로세스와 관련된 명령에서 실제로 필요할 때까지 복원되지 않을 것이다.
따라서, 상기 루프의 끝에서, 상기 루프 카운트 감분 및/또는 상기 루프 테일 술어를 제어하는데 사용된 파라미터를 저장하는 상기 소정의 상태 레지스터에는 액세스 가능하지 않을 수도 있다. 상기 루프 테일 술어 정보를 리셋트 가능하도록, 상기 루프의 끝에서 유휴 상태 보존이나 장애 조건을 기동하여 상기 소정의 상태 레지스터에 대해 액세스 가능하게 허용하기 위한 기능성을 제공할 것을 기대할 것이다. 그렇지만, 이러한 해결방법은 문제가 될 수 있는데, 그 이유는, 명령에 의해 기동되지 않고 상기 루프 제어회로(1000)로부터 유휴 상태 보존 연산들이나 장애 조건을 기동하는 것은, 장애들이나 상태 보존을 처리하기 위한 상기 구조 메카니즘들이 이 연산들을 특별한 명령 어드레스에서 기동한다고 상정할 수도 있으므로 바람직하지 않은 경우도 있을 것이기 때문이다. 성능을 개선하기 위해서는, (상기 루프 제어 데이터가 유효할 때 또 다른 루프 반복을 요구하지 않는 것을 검출하는 것에 응답하여, 상기 루프 제어회로가 상기 처리회로를 제어하여, 상기 루프 종료 명령 후 일 명령으로부터의 프로그램 실행이 계속되게 구성되도록) 상기 루프의 최종 반복시에 상기 루프 종료 명령의 실행을 모두 생략하는 것이 바람직할 수도 있다. 상기 루프 종료 명령 전후의 명령에 응답하여 상기 장애 조건이나 상태 보존을 기동하는 것이 적절하지 않을 수도 있다. 따라서, 필요할 때 상기 부동 소수점 문맥을 액세스 가능하게 하는 상기 유휴 상태 보존 또는 장애 조건을 기동하는 상기 루프의 끝에서 적절한 명령이 없을 수도 있다. 또한, 상기 루프 제어회로(1000)는, 보통, 레지스터 액세스들을 기동하기 위한 경로들을 갖지 않는 명령 파이프라인의 상기 페치 스테이지와 관련되어서, 상기 페치 스테이지에 대해 상태 보존을 기동시키는 회로 면적의 관점에서 곤란하고 값비쌀 것이다.
이 쟁점들은, 상기 루프의 맨 첫번째 반복상에서 또는 예외가 일어난 반복의 끝에서 실행될 상기 루프 종료 명령에 응답하여, 상기 유휴 상태 보존 연산이나 장애 조건을 기동함으로써 해결될 수 있다(그 예외가 상기 루프 제어 데이터를 무효화할 때, 상기 루프 종료 명령은 그 반복의 끝에서 재실행될 것이다). 따라서, 상기 소정의 상태 레지스터를 구비하는 서브세트의 레지스터들이 액세스 가능하지 않을 때 상기 루프 종료 명령에 응답하여, 상기 루프 종료 명령 디코딩 회로는, 상기 서브세트의 레지스터들에 저장된 상태 데이터의 메모리에의 보존을 기동하고 상기 서브세트의 레지스터들을 액세스 가능하게 하는 상태 보존 제어신호들을 생성할 수도 있다. 상기 루프의 완료시가 아닌 상기 루프 종료 명령에 응답하여 상기 상태 보존 연산을 기동함으로써, 상기 부동 소수점 상태가 액세스 불가능해진 경우에 예방 조치로서만 상기 최종 루프 반복의 끝에서 상기 루프 종료 명령을 실행하는 것이 불필요함에 따라서, 성능을 향상시킬 수 있다. 마찬가지로, 상기 액세스 허가 데이터가 상기 소정의 상태 레지스터를 구비하는 서브세트의 레지스터들에의 액세스를 금지하는 경우에, 상기 루프 종료 명령에 응답하여, 상기 루프 종료 명령 디코딩 회로는 제어신호들을 생성하여 상기 서브세트의 레지스터들에의 액세스를 기동하여도 된다. 따라서, 액세스가 상기 허가 검사회로(1008)에 의해 현재 허가되지 않은 경우, 상기 루프 종료 명령을 실행할 때 장애가 생성되는 것에 의해, 임의의 감지 데이터가 메모리에 보존되어 있고 그 서브세트의 레지스터들에서 무효화되어 있으면 상기 운영체계는 개입하여 그 필요한 허가를 승인할 수 있다. 또한, 상기 루프 종료 명령에 응답하여 이 연산들은, 상기 루프 제어회로(1000)가 상기 루프 카운터의 감분을 제어하기 위한 상기 VEwidth 파라미터에 액세스할 수 있도록 보장한다.
상기 루프의 최종 반복의 끝에서, 상기 프로그램 루프 본체의 반복 후 또 다른 루프 반복들이 요구되지 않는 것을 검출하는 것에 응답하여, 상기 루프 제어회로는, 상기 벡터 처리 레인들 중 상기 하나 이상에서의 처리의 억제를 불가능하게 한다. 예를 들면, 상기 루프 제어회로는 소정의 상태 레지스터에 저장된 제어 파라미터에 따라 상기 벡터 처리 레인들 중 하나 이상에서의 처리의 억제를 제어하여도 되고, 상기 프로그램 루프 본체의 반복 후 또 다른 루프 반복들이 요구되지 않는 것을 검출하는 것에 응답하여, 상기 루프 제어회로(1000)는 상기 소정의 상태 레지스터가 액세스 가능한지를 판정하여도 되고, 상기 소정의 상태 레지스터가 액세스 가능하다고 판정될 때, 상기 소정의 상태 레지스터에 저장된 상기 제어 파라미터를 갱신함으로써 상기 벡터 처리 레인들의 하나 이상에서의 처리의 억제를 불가능하게 하기 위한 술어 불가능 제어신호들을 생성하여도 된다. 상기 루프 제어회로(1000)는, 상기 소정의 상태 레지스터가 액세스 가능하지 않다고 판정될 때는 상기 술어 불가능 제어신호들의 생성을 억제한다.
즉, 상기 루프 제어회로(1000)는, 상기 소정의 상태 레지스터가 이미 액세스 가능할 때 루프 테일 술어를 가능하게 하기 위해 상기 소정의 상태 레지스터에서의 상기 파라미터를 리셋트할 뿐이다. 상기 소정의 상태 레지스터가 이미 액세스 가능하지 않을 때, 상기 루프 종료 명령은, 상기 레지스터가 액세스 불가능하게 될 수 있는 이벤트들(예를 들면, 예외, 장애, 도는 문맥 전환)이 상기 루프 제어 캐시(1004)로부터의 상기 루프 제어 데이터를 무효화할 때도 행해질 것이다. 따라서, 상기 루프 제어회로(1000)가 상기 유휴 상태 보존 또는 장애 기동 연산을 기동할 필요가 없다- 필요한 경우 상기 루프의 끝에서, 그래도, 이것은, 상기 루프 종료 명령에 응답하여 상기 루프 종료 명령 디코딩 회로(123)에 의해 기동될 것이다.
상기 주어진 이유로 인해, 상기 루프 종료 명령이, 상기 요소 폭과 루프 테일 술어 제어정보를 지정하는 상기 제어 파라미터들을 저장하는 상기 소정의 상태 레지스터가 액세스 가능한지의 검사를 기동하고, 상기 레지스터가 액세스 불가능한 경우 장애 조건이나 유휴 상태 보존을 기동하는 것이, 유용하다. 일부의 구현들은, 항상, 이러한 상태 보존 또는 장애 조건을, 상기 요구된 소정의 상태 레지스터가 액세스 불가능할 때 루프 종료 명령에 응답하여, 기동시킬 수 있다.
그렇지만, 실제로, 모든 루프들이 상기 루프의 테일에서 레인들의 술어를 필요로 하지 않는다. 예를 들면, 요소 사이즈가 상기 레지스터 폭과 같은 스칼라 명령들 또는 벡터 명령들을 사용하여 상기 루프를 처리할 경우, 1개의 반복마다 하나의 요소만이 처리되어서, 요소들의 총수는 항상 상기 벡터 길이의 정확한 배수이다. 따라서, 이러한 루프들상에서, VEwidth 또는 상기 루프 테일 술어 제어 파라미터에의 액세스가 요구되지 않는다. 비서술 루프들을 위한 유휴 상태 보존이나 장애 조건을 기동하는 성능 비용을 초래하는 것을 피하기 위해서, 2개의 버전의 상기 루프 시작 및 종료 명령들이 제공된다:
ㅇ DLS: 비서술 루프 시작 명령: 상기 루프 종료 어드레스 'loopend'와 반복 수 rN을 지정하지만, 벡터 요소 사이즈를 지정하지 않아서, 상기 부동 소수점 제어 레지스터에서의 VEwidth 파라미터에 대해 변경시키지 않는다. VEwidth는, 디폴트에 의해 하나의 벡터 레지스터 VRwidth에서 비트들의 수와 같다고 상정된다.
ㅇ DLSP: 서술 루프 시작 명령: 상기 루프 종료 어드레스 'loopend'와 반복 수 rN을 지정하고, 또한 벡터 명령들용 상기 요소 폭 VEwidth를 나타내는 '사이즈' 파라미터를 지정한다. 상기 요소 폭은, 부동 소수점 제어 레지스터에 대해 저장된다. 상기 부동 소수점 문맥이 이미 액세스 가능하지 않은 경우, 상기 DLSP 명령은, 유휴 상태 보존 연산을 기동하여 메모리에 대해 이전의 부동 소수점 문맥을 보존하고, 상기 부동 소수점 문맥이 현재의 프로세스에 대해 액세스 가능한 후, 상기 요소 폭을 상기 부동 소수점 제어 레지스터에 저장한다.
ㅇ DLE: 비서술 루프 종료 명령: 상기 DLS 명령 후 사용된다. 상기 부동 소수점 문맥이 액세스 가능하지 않을 때 실행되는 경우, 상기 루프 종료 명령 디코딩 회로는 메모리에 대한 상기 부동 소수점 문맥의 어떠한 유휴 상태 보존도 기동하지 않는다.
ㅇ DLEP: 서술 루프 종료 명령: 상기 DLSP 명령 후 사용된다. 상기 부동 소수점 문맥이 액세스 가능하지 않을 때 실행되는 경우, 상기 루프 종료 명령 디코딩 회로는 제어신호들을 생성하여 상기 부동 소수점 문맥의 메모리에 대한 보존을 기동하고, 상기 부동 소수점 문맥을 액세스 가능하게 한다. 또한, 상기 DLEP 명령은, 상기 부동 소수점 문맥 레지스터들 중 하나(예를 들면, VEwidth를 저장하는 부동 소수점 제어 레지스터)에의 액세스를 기동하여, 상기 부동 소수점 문맥이 상기 현재 프로세스/특권 레벨을 위해 액세스되게 허가되지 않은 경우 상기 액세스 허가 검사회로(1008)에 의해 장애 조건이 기동되도록 보장한다.
상기 루프의 각 반복의 끝에서, 상기 루프 제어회로는, 상기 부동 소수점 제어 레지스터로부터 판독된 VEwidth로부터 얻어진, 그 반복에서 처리된 요소들의 수만큼 상기 루프 카운터를 감분시킨다. 따라서, 비서술 루프들의 경우 VEwidth=VRwidth이어서, 상기 루프 카운터는, 반복마다 1씩 감분된다. 서술 루프들의 경우, 1번의 반복에 대해 처리된 요소들의 수는, VRwidth/VEwidth이다(VRwidth은 주어진 하드웨어 구현을 위해 고정되어도 되어서, 제어 레지스터에 명시적으로 나타내질 필요가 없을 수도 있다).
2개의 버전의 상기 루프 종료 명령을 제공함으로써, 상기 문맥 데이터가 출력되도록 서술 루프를 통해 중간에 예외가 일어나고, 상기 부동 소수점 문맥이 상기 예외로부터 다시 복귀 후 현재의 프로세스에 액세스 불가능해지는 경우에도, 이것이 상기 루프 제어 데이터도 무효화하는 것처럼, 상기 서술 루프 종료 명령은 상기 루프의 끝에서 실행되어서, 부동 소수점 문맥에 다시 액세스 가능하게 하는데 필요한 경우 상기 유휴 상태 보존 연산이나 장애 조건을 기동시킬 수 있다. 그렇지만, 비서술 루프들의 경우, 상기 유휴 상태 보존 연산이나 장애 조건을 기동하는 상기 오버헤드는, 비서술 루프 종료 명령을 사용하여 회피될 수 있다. 따라서, 요약하면, 상기 루프 종료 명령 디코딩 회로는, 상기 루프 종료 명령이 제1 타입의 루프 종료 명령인지 제2 타입의 루프 종료 명령인지에 따라, 상기 상태 보존 제어 신호들을 생성할지를 선택할 수도 있다. 마찬가지로, 상기 소정의 상태 레지스터를 구비하는 상기 서브세트의 레지스터들에의 액세스가 상기 루프 종료 명령에 응답하여 기동되는지도, 상기 루프 종료 명령이 제1 타입 또는 제2 타입의 루프 종료 명령인지에 좌우될 수도 있다.
도 14a 내지 14e는, 상술한 특징들을 설명하기 위해 비서술 루프 및 서술 루프의 실행의 예들을 도시한 것이다.
도 14a는 상기 루프의 실행동안에 예외가 일어나지 않는 비서술 루프의 일례를 도시한 것이다. 상기 비서술 루프 시작 명령 DLS는, 상기 루프 종료 어드레스와 실행되는 반복들의 수를 상기 루프의 시작에서 설정하도록 실행된다. 이것이 비서술 루프 시작 명령이므로, 상기 부동 소수점 제어 레지스터에서 상기 요소 폭 VEwidth 파라미터는, 그대로이다. 현재의 프로세스가 이미 부동 소수점 문맥에 액세스하지 않은 경우, 액세스가 요구되지 않아서, 유휴 상태 보존 연산이나 장애 조건이 기동되지 않는다. 제1 루프 반복의 끝에서, 상기 비서술 루프 종료 명령 DLE는, 이후의 반복을 제어하기 위한 상기 루프 시작 어드레스를 설정하도록 실행되고, 다시 상기 부동 소수점 제어 레지스터에의 액세스가 요구되지 않아서, 상기 부동 소수점 문맥이 현재 액세스 가능하지 않은 것을 상기 부동 소수점 문맥 접근성 플래그에 의해 나타내는 경우에도, 유휴 상태 보존 연산이나 장애 조건이 기동되지 않는다. 상기 루프의 이후의 반복들상에서, 상기 루프 시작 명령 및 루프 종료 명령은 실행되지 않고, 프로그램 흐름은 상기 프로그램 루프 본체의 여러 번의 반복을 통해 진행된다. 각 반복의 끝에서, 상기 부동 소수점 문맥이 액세스 가능하지 않으므로, 상기 루프 제어회로(1000)는, 상기 부동 소수점 제어 레지스터에 액세스하지 않고, VEwidth=VRwidth, 즉 벡터당 요소들의 수가 1이다고 상정하기 때문에, 상기 루프 카운터를 1씩 감분한다. 최종 반복상에서, 벡터 루프 술어가 적용되지 않고, 또 다른 반복들이 필요하지 않은 것을 검출하면, 상기 루프 제어회로(1000)는 프로그램 흐름을 제어하여 상기 루프 종료 명령 DLE에 선행하는 명령으로부터 DLE 후의 명령으로 점프하고, 상기 루프 종료 명령을 건너뛰어 상기 루프 후 이후의 명령들의 처리를 계속한다.
도 14b는, 상기 루프의 실행 동안에 예외가 일어나지 않는 서술 루프의 일례를 도시한 것이다. 이번에는 상기 루프 시작 명령은 서술 루프 시작 명령 DLSP이어서, 상기 루프 종료 어드레스와 반복이 행해지는 수를 지정하는 상기 루프 제어 데이터를 설정하는 것과 아울러, 상기 루프 시작 명령 디코딩 회로는, 상기 DLSP 명령에서 지정한 '사이즈' 파라미터에 근거하여 상기 부동 소수점 제어 레지스터에서 지정된 벡터 요소 폭 VEwidth의 갱신도 기동한다. 따라서, 부동 소수점 문맥이 이미 액세스 가능하지 않은 경우, VEwidth가 갱신될 수 있도록, 상기 유휴 상태 보존 연산이나 장애 조건이 기동되어 상기 문맥을 액세스 가능하게 한다. 상기 제1 루프 반복의 끝에서, 상기 서술 루프 종료 명령 DLEP는, 상기 루프 시작 어드레스를 설정하도록 실행된다. 상기 루프 종료 명령 디코딩 회로는, 상기 부동 소수점 문맥이 이미 액세스 가능한 상기 상태 접근성 플래그로부터 검출하여서, 유휴 상태 보존을 할 필요가 없고, 상기 루프 종료 명령 DLEP에 응답하여 기동된 상기 부동 소수점 제어 레지스터로의 액세스는 장애를 기동시키지 않는다. 그 후, 이후의 상기 루프의 반복들은, 상기 루프 시작/종료 명령들을 실행하지 않고 실행된다. 상기 루프의 각 반복에서, 상기 루프 제어회로(1000)는 상기 부동 소수점 제어 레지스터로부터 판독된 VEwidth에 근거하여 상기 반복에서 처리된 요소들의 수를 결정하고, 이 결정된 요소들의 수만큼 상기 루프 카운터를 감분한다. 상기 루프의 최종 반복에서, 상기 루프 카운터에 의해 나타낸 거처럼 처리되는 나머지 요소들의 수가 하나의 벡터 명령에 의해 처리되는 요소들의 수미만이면, 상기 루프 제어회로(1000)는 필요치 않은 벡터 레인들에 술어를 적용하고, 마스킹되는 벡터의 부분들이 VEwidth와 상기 루프 카운터로부터 결정된다. 최종 반복의 끝에서, 상기 루프 제어회로(1000)는 또 다른 반복들이 요구되지 않는 것을 검출하여서 상기 DLEP 명령은 건너뛴다. 상기 부동 소수점 문맥이 이미 액세스 가능하므로, 상기 부동 소수점 제어 레지스터에서의 상기 VEwidth 필드는, 이후의 벡터 명령들을 위한 루프 테일 술어를 불가능하게 하기 위해 상기 벡터 레지스터들의 폭으로 리셋트되고, 유휴 상태 보존이나 장애 조건이 요구되지 않는다.
도 14c는 상기 루프 동안에 예외가 일어날 때 비서술 루프의 일례를 도시한 것이다. 비서술 루프 시작 명령 DLS와 루프 종료 명령 DLE는, 도 14a에 대해 설명된 것과 같은 방식으로 실행되고, 상기 루프 카운터는 도 14a에 대해 설명된 것처럼 상기 루프의 각 반복에서 1씩 감분된다. 예외는, 중단된 쓰레드의 문맥의 상태 보존을 기동하는 제3 반복에서 일어난다. 상기 부동 소수점 문맥이 액세스 가능한 것처럼 나타내어지면, 상기 상태 보존은 부동 소수점 문맥의 보존을 포함하는 한편, 그 부동 소수점 문맥이 액세스 가능하지 않으면 상기 상태 보존은 정수 문맥 데이터를 보존하지만 부동 소수점 문맥 데이터를 보존하지 않는다. 상기 예외로부터 복귀시에, 상기 정수 상태 데이터가 복원되고 상기 부동 소수점 문맥 데이터가 초기에는 액세스 가능하지 않다. 유휴 상태 보존 플래그는 유휴 상태 보존이 활성인 것을 나타내도록 설정되어, 상기 루프의 임의의 이후의 명령이 부동 소수점 문맥 데이터를 요구하면, 이것은 상기 부동 소수점 문맥의 유휴 상태 복원을 기동한다. 상기 부동 소수점 문맥 데이터를 요구하는 명령들에 직면하지 않으면, 상기 루프 종료 명령 DLE에 도달할 때, 상기 부동 소수점 문맥은 그래도 액세스 가능하지 않을 것이다. 상기 루프 제어 데이터가 상기 예외의 발생시에 이전에 무효화되었으므로, 상기 루프 종료 명령 DLE는 그 루프 제어 데이터를 리셋트하도록 실행된다. 이것이 비서술 루프 종료 명령 DLE이므로, 상기 루프 종료 명령은, 그 부동 소수점 문맥이 액세스 가능하지 않은 경우에도, 유휴 상태 보존이나, 상기 부동 소수점 제어 레지스터에의 액세스를 기동시키지 않는다. 그 루프 제어 데이터를 복원하였으면, 상기 루프의 이후의 반복들은 도 14a에서와 같은 방식으로 계속되고, 상기 루프의 최종 반복은 도 14a에서와 같은 방식으로 처리된다. 따라서, 반복들이 처리되지 않고 있을 때 상기 DLE 명령을 건너뛰고, 그래서 유휴 상태 보존이나 장애 조건은, 부동 소수점 문맥이 액세스 가능하지 않은 경우에도 최종 반복에서 기동되지 않는다. 상기 유휴 상태 보존 플래그가 상기 예외로부터 복귀한 이후로 아직 클리어되지 않고 있으면, 그것은 활성인채로 있어서, 상기 루프 후 부동 소수점 문맥을 요구하는 다음 명령은 유휴 상태 보존을 기동시킬 것이다. 게다가, 상기 유휴 상태 보존 플래그가 상기 예외로부터 복귀한 이후로 아직 클리어되지 않고 있으면, 상기 루프 제어회로는 부동 소수점 제어 레지스터에서의 VEwidth를 상기 벡터 레지스터의 폭으로 리셋트하려고 하지 않을 것이다.
도 14d는 상기 루프 동안에 예외가 일어날 때의 서술 루프의 일례를 도시한 것이다. 제1 반복에서, 상기 서술 루프 시작 명령 DLSP/상기 서술 루프 종료 명령 DLEP는, 도 14b에서와 같은 방식으로 실행된다. 예외는, 상기 루프의 제3 반복에서 일어난다. 이것은, 도 14c에서와 같은 방식으로 처리되는, 예외 핸들러 또는 다른 쓰레드로의 문맥 전환을 기동하고 다시 돌아온다. 그렇지만, 상기 서술 루프에 대해서, 상기 유휴 상태 보존 플래그(상태 접근성 플래그)가 활성으로 설정된 상기 루프 본체 명령들에 복귀시에, 상기 서술 루프 종료 명령 DLEP의 디코딩은, (상기 루프 본체에서 보다 이른 명령이 부동 소수점 문맥을 요구하지 않았던 경우) 상기 유휴 상태 보존 연산을 기동하고, 또한 현재의 프로세스에 대한 액세스 허가들이 부동 소수점 레지스터들에 대한 액세스를 허가하지 않은 경우, 장애 조건을 일으켜 상기 운영체계를 기동하여 그 요구된 허가를 승인하도록, 상기 부동 소수점 제어 레지스터에의 액세스도 기동한다. 따라서, 상기 서술 루프 종료 명령에 직면한 후, 상기 부동 소수점 문맥은 이용 가능해지기 때문에 상기 루프 카운터의 갱신을 제어하기 위한 상기 VEwidth 파라미터를 판독하고, 상기 루프?? 마지막 반복에서 술어를 제어하기 위한 상기 루프 테일 술어 파라미터에 액세스하는 것이 가능하다. 하나보다 많은 예외가 상기 루프 동안에 일어나는 경우, 각 예외는 도 14d에 도시된 것과 마찬가지로 처리된다. 최종 루프 반복에서, 상기 루프 테일 술어는, 상기 루프에서 처리된 요소들의 총수가 상기 루프 시작 명령에 의해 지정된 수와 일치하도록 보장하기 위해 미사용된 벡터 레인들의 마스킹을 제어하는데 적용된다. 최종 루프 반복의 끝에서, 상기 루프 제어회로(1000)는, 상기 유휴 상태 보존 플래그가 비활성이어서 그 부동 소수점 문맥이 이미 액세스 가능한 것을 검출하고, 그래서 상기 부동 소수점 제어 레지스터에서의 VEwidth를 상기 벡터 레지스터들의 폭으로 리셋트하여 상기 루프 동안에 서술되었던 그 벡터 레인들의 처리의 억제를 불가능하게 한다.
도 14e는 상기 루프의 최종 반복에서 상기 예외가 일어나는 서술 루프의 일례를 도시한 것이다. 제1 반복에서, 상기 루프 시작 명령 DLSP/루프 종료 명령 DLEP는 도 14b 또는 도 14d에서와 같은 방식으로 처리되고, 또한 각 반복에서 상기 루프 카운터의 감분은 동일한 방식으로 처리된다. 그렇지만, 포인트 *2에서, 예외가 최종 반복에서 일어나, 문맥 전환을 기동한다. (상기 술어 요소 폭 VEwidth을 포함하는) 이전의 부동 소수점 문맥은 메모리에 보존된 후 그 예외가 처리된다. 상기 예외로부터 복귀하면, 상기 루프를 동작시키는 상기 쓰레드와 관련된 상기 정수 문맥은 복원되지만, 그 부동 소수점 문맥은 복원되지 않아서, 상기 유휴 상태 보존 플래그가 활성으로 설정된다. 본 예에서, 상기 예외로부터 복귀 후 실행된 제1 명령은 부동 소수점 상태를 요구하지 않는 스칼라 명령 SI1이어서, 유휴 상태 보존을 기동시키지 않는다. 부동 소수점 제어 레지스터에서 상기 술어 요소 폭 VEwidth은 액세스 가능하지 않지만, 이것은 그 명령이 스칼라 명령이므로 상관없고, 그래서, 술어를 요구하지 않는다. 포인트 *3에서 제1 벡터 명령 VI2에 직면하라 때, 이것을 부동 소수점 문맥을 요구하는 명령으로 한다(상기 부동 소수점 제어 레지스터로부터 상기 술어 요소 폭 VEwidth을 요구하는 것을 제외하고는, 일부의 구조에서, 상기 벡터 레지스터들은 부동 소수점 레지스터들과 중첩하여도 되어서, 상기 유휴 상태 보존 플래그가 활성일 때 벡터 명령의 실행에 의해, 어쨌든 상기 벡터 레지스터들을 액세스 가능하게 하기 위해서 유휴 상태 보존이 일어나게 할 수도 있다). 상기 유휴 상태 보존 플래그가 활성이므로, 상기 벡터 명령 VI2는 상기 유휴 상태 보존 연산을 기동하는 것에 의해, 부동 소수점 문맥을 액세스 가능하게 하고 상기 VEwidth가 복원될 수 있어, 상기 루프의 남은 최종 반복동안 술어가 재사용 가능하게 된다.
일부의 실시예들에서, 상기 유휴 상태 보존 프로세스는, 단지 상기 레지스터들내에 상기 부동 소수점 문맥을 보존하고 상기 유휴 상태 보존을 기동시킨 상기 쓰레드와 관련된 상기 부동 소수점 문맥을 복원하지 않을 뿐이다. 이러한 실시예들에서, 상기 운영체계는, 유휴 상태 보존을 기동하는 것과 아울러, 부동 소수점 상태에 액세스하려고 하는 시도가 상기 운영체계가 응답 가능한 장애를 기동하고 그 장애를 기동한 상기 쓰레드와 관련된 부동 소수점 문맥을 복원하도록, 상기 액세스 허가들을 구성한다.
도 15는 일부의 실시예에서 여기서 설명된 기술들을 구현하는데 적합한 가상 머신 실시예를 개략적으로 도시한 것이다. 상술한 실시예들은 관련된 기술들을 지원하는 특정한 처리 하드웨어를 동작시키는 장치 및 방법들의 관점에서 본 발명을 구현하지만, 하드웨어 디바이스들의 소위 가상 머신 구현을 제공하는 것도 가능하다. 이들 가상 머신 구현들은, 가상 머신 프로그램(510)을 지원하는 호스트 운영체계(520)를 동작시키는 호스트 프로세서(530)상에서 동작한다. 전형적으로, 아주 강력한 프로세서들은 합리적 속도로 실행하는 가상 머신 구현을 제공하는데 필요하지만, 이러한 해결 방법은, 특정한 상황에서, 이를테면, 호환성 또는 재사용 목적을 위해 또 다른 프로세서 고유의 코드를 실행하기를 바라는 경우에 정당화될 수도 있다. 가상 머신 프로그램(510)은, 이 가상 머신 프로그램(510)에 의해 모델링중인 상기 디바이스인 실제의 하드웨어에 의해 제공될 애플리케이션 프로그램 인터페이스와 같은 애플리케이션 프로그램(500)에 애플리케이션 프로그램 인터페이스를 제공한다. 따라서, 상술한 메모리 액세스들의 제어를 포함하는 상기 프로그램 명령들은, 상기 가상 머신 프로그램(510)을 사용하여 상기 가상 머신 하드웨어와의 상호작용을 모형으로 만들기 위해 상기 애플리케이션 프로그램(500)내로부터 실행되어도 된다.
여기서는 예시적 실시예들을 첨부도면을 참조하여 상세히 설명하였지만, 그 청구항들은 구체적인 실시예들에 한정되지 않고, 첨부된 청구항의 범위 및 사상으로부터 벗어나지 않고 당업자가 변경, 추가 및 수정을 여러 가지로 실시할 수 있다는 것을 알 수 있다. 예를 들면, 종속항들의 특징들과 독립항의 특징들을 여러가지로 조합할 수 있다.

Claims (21)

  1. 프로그램 명령들의 시퀀스에 의해 지정된 처리 연산들을 행하는 처리회로;
    상기 처리회로를 제어하여 상기 처리 연산들을 행하기 위한 제어신호들을 생성하기 위해 상기 프로그램 명령들의 시퀀스를 디코딩하는 명령 디코더를 구비하고;
    상기 명령 디코더는 분기 차후 명령을 디코딩하는 분기 차후 명령 디코딩 회로를 구비하고, 상기 분기 차후 명령은 분기 타겟 어드레스와 관련된 프로그램 가능 파라미터와 상기 프로그램 명령들의 시퀀스내의 상기 분기 차후 명령 후 소정의 명령을 나타내는 또 다른 프로그램 가능 분기점 데이터 파라미터를 갖고;
    상기 처리회로는, 상기 분기 차후 명령 디코딩 회로에 의해 제어되되 상기 분기점 데이터에 응답하여, 상기 프로그램 명령들의 시퀀스의 처리가 상기 소정의 명령에 도달할 때 상기 분기 타겟 어드레스에 대응한 분기 타겟 명령으로부터 시작하는 프로그램 명령들의 처리로 분기를 기동시키는 분기 제어회로를 구비하는, 데이터 처리장치.
  2. 제 1 항에 있어서,
    상기 분기 제어회로가 상기 분기를 기동시킬 때, 상기 분기 타겟 명령은 상기 프로그램 명령들의 시퀀스에서 상기 소정의 명령 직전의 명령에 후속하고, 상기 분기 차후 명령에 의해 지정된 연산과 상기 소정의 명령 직전의 상기 명령에 의해 지정된 연산은 상기 처리회로에 의해 인접하여 행해지는, 데이터 처리장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 분기점 데이터는,
    상기 소정의 명령의 어드레스를 나타내는 어드레스 데이터;
    상기 소정의 명령 직전의 마지막 명령의 어드레스를 나타내는 종료 데이터;
    상기 분기 차후 명령과 상기 소정의 명령과의 사이의 거리를 나타내는 오프셋 데이터;
    명령들의 시작 저장 어드레스들을 구별하는 메모리 저장 어드레스의 비트들의 최하위 비트 종료로부터 시작하는 상기 소정의 명령의 상기 메모리 저장 어드레스를 나타내는 비트들의 적절한 서브세트;
    상기 소정의 명령전에 처리되는 나머지 명령들의 수를 나타내는 나머지 사이즈 명령 데이터; 및
    상기 소정의 명령에 도달하기 전에 처리되는 나머지 프로그램 저장 장소들의 수를 나타내는 나머지 사이즈 데이터 중,
    하나 이상을 포함하는, 데이터 처리장치.
  4. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 분기 차후 명령 디코딩 회로는, 상기 처리회로를 제어하여 상기 분기점 데이터와 상기 분기 타겟 어드레스를 분기 제어 캐시에 저장하는, 데이터 처리장치.
  5. 제 4 항에 있어서,
    상기 분기 차후 명령 디코딩 회로가 상기 분기 차후 명령을 디코딩할 때, 상기 분기 제어회로는, 명령들의 시작 저장 어드레스들을 구별하는 메모리 저장 어드레스의 비트들의 최하위 비트 종료로부터 시작하는 상기 소정의 명령의 상기 메모리 저장 어드레스를 나타내는 비트들의 적절한 서브세트를 저장하는, 데이터 처리장치.
  6. 제 5 항에 있어서,
    상기 분기 제어회로는, 상기 비트들의 적절한 서브세트가,
    프로그램 카운터 값을 나타내는 값의 대응한 부분;
    명령 페치 어드레스를 나타내는 값의 대응한 부분; 및
    상기 데이터 처리장치의 처리 활동을 나타내는 값 중,
    하나와 일치할 때, 상기 분기를 기동시키는, 데이터 처리장치.
  7. 제 4 항에 있어서,
    리셋트 중인 상기 처리회로;
    프로그램 루프 본체의 또 다른 반복이 요구되지 않는다고 판정하는 루프 제어회로 또는 루프 종료 명령;
    행해지는 예외;
    처리가 현재의 예외의 처리로부터, 상기 현재의 예외 이전에 상태를 복원하지 않고 다음 예외의 처리에 직접 진행하는 예외 테일 체이닝;
    소정의 즉시 타겟 어드레스 범위보다 큰 분기 명령의 실행;
    분기 명령의 실행;
    루프 시작 명령의 실행;
    예외로부터 복귀;
    상기 데이터 처리장치의 명령 캐시가 무효화되게 하는 명령의 실행;
    상기 제어 데이터의 캐싱을 불가능하게 하는 명령의 실행;
    분기 예측을 불가능하게 하는 명령의 실행;
    프로그램 루프 몸체내의 분기가 루프 시작 명령과 루프 종료 명령 사이에 있지 않은 어드레스를 타겟으로 한다고 판정하는 상기 처리회로;
    보안 연산모드와 비보안 연산모드간의 전환; 및
    하나 이상의 구현 규정된 조건들 중, 하나 이상에 응답하여,
    상기 분기점 데이터가 무효화되는, 데이터 처리장치.
  8. 제 7 항에 있어서,
    상기 분기점 데이터가 무효화되어 있을 때, 프로그램 흐름은 상기 소정의 명령으로 진행하는, 데이터 처리장치.
  9. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 분기 차후 명령은, 만족되는 조건 분기 차후 명령과 관련된 하나 이상의 조건 코드들에 따라 실행된 상기 조건 분기 차후 명령인, 데이터 처리장치.
  10. 제 9 항에 있어서,
    상기 하나 이상의 조건 코드들이 만족되지 않을 때 상기 조건 분기 차후 명령에 응답하여, 상기 분기 차후 명령 디코딩 회로는, 상기 분기 제어회로를 제어하여, 상기 프로그램 명령들의 시퀀스의 처리가 상기 소정의 명령에 도달할 때 상기 프로그램 명령들의 시퀀스에서 상기 이후의 분기 명령 후 분기 우회 명령의 처리로의 분기를 기동시키기 위해 분기 제어 데이터를 설정하도록 구성되는, 데이터 처리장치.
  11. 제 10 항에 있어서,
    상기 조건 분기 차후 명령은, 상기 소정의 명령의 어드레스에 관하여 상기 분기 우회 명령의 어드레스를 나타내는 우회 파라미터를 지정하는, 데이터 처리장치.
  12. 제 11 항에 있어서,
    상기 명령 디코더는, 상기 명령 디코더에 의해 지원된 복수의 명령 길이들로부터 선택된 가변 명령 길이를 갖는 명령들을 디코딩하도록 구성되고;
    상기 우회 파라미터는 상기 이후의 분기 명령의 명령 길이를 나타내는, 데이터 처리장치.
  13. 제 9 항 내지 제 12 항 중 어느 한 항에 있어서,
    상기 하나 이상의 조건 코드들이 만족되고 분기 제어 캐시가 이미 보다 이른 분기 차후 명령에 응답하여 설정된 유효 분기 제어 데이터를 저장할 때 상기 조건 분기 차후 명령에 응답하여, 상기 분기 차후 명령 디코딩 회로는 상기 처리회로를 제어하여 상기 유효 분기 제어 데이터를 겹쳐쓰도록 구성되고;
    상기 하나 이상의 조건 코드들이 만족되지 않고 상기 분기 제어 캐시가 이미 보다 이른 분기 차후 명령에 응답하여 설정된 유효 분기 제어 데이터를 저장할 때 상기 조건 분기 차후 명령에 응답하여, 상기 분기 차후 명령 디코딩 회로는 상기 처리회로를 제어하여 상기 유효 분기 제어 데이터를 상기 분기 제어 캐시에 보유하도록 구성되는, 데이터 처리장치.
  14. 제 1 항 내지 제 13 항 중 어느 한 항에 있어서,
    분기 타겟 어드레스와 관련된 상기 프로그램 가능 파라미터는 레지스터 지정자를 포함하고, 상기 분기 타겟 어드레스는 상기 레지스터 지정자에 대응한 레지스터에 저장되는, 데이터 처리장치.
  15. 제 1 항 내지 제 13 항 중 어느 한 항에 있어서,
    분기 타겟 어드레스와 관련된 상기 프로그램 가능 파라미터는 상기 분기 차후 명령의 메모리 어드레스에 의존한 현재의 메모리 어드레스로부터 오프셋만큼 상기 분기 타겟 어드레스를 나타내는 즉시 오프셋 값을 포함하는, 데이터 처리장치.
  16. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 분기 차후 명령 디코딩 회로는, 상기 처리회로를 제어하여, 상기 분기로부터 상기 분기 타겟 어드레스에 복귀시에 사용하기 위한 복귀 어드레스를 링크 데이터 스토어내에 저장하는, 데이터 처리장치.
  17. 제 1 항 내지 제 15 항 중 어느 한 항에 있어서,
    상기 분기 제어회로는, 상기 프로그램 명령들의 시퀀스의 처리가 상기 소정의 명령에 도달할 때, 상기 분기로부터 상기 분기 타겟 어드레스에 복귀시에 사용하기 위한 복귀 어드레스를 링크 데이터 스토어내에 저장하도록 구성되는, 데이터 처리장치.
  18. 제 16 항 또는 제 17 항에 있어서,
    상기 링크 데이터 스토어는,
    링크 레지스터; 또는
    스택 포인터 레지스터에 적용된 소정의 오프셋에 의해 지정된 저장 영역에서의 어드레스 중,
    하나인, 데이터 처리장치.
  19. 프로그램 명령들의 시퀀스에 의해 지정된 처리 연산들을 행하는 처리수단;
    상기 프로그램 명령들의 시퀀스에 응답하여, 상기 처리수단을 제어하여 상기 처리 연산들을 행하기 위한 제어신호들을 생성하는 명령 디코더 수단을 구비하고;
    상기 명령 디코더 수단은 분기 차후 명령을 디코딩하는 분기 차후 명령 디코딩 수단을 구비하고, 상기 분기 차후 명령은 분기 타겟 어드레스와 각각 관련된 프로그램 가능 파라미터들과 상기 프로그램 명령들의 시퀀스내의 상기 분기 차후 명령 후 소정의 명령을 나타내는 분기점 데이터를 갖고;
    상기 처리수단은, 상기 분기 차후 명령 디코딩 수단에 의해 제어되되 상기 분기점 데이터에 응답하여, 상기 프로그램 명령들의 시퀀스의 처리가 상기 소정의 명령에 도달할 때 상기 분기 타겟 어드레스에 대응한 분기 타겟 명령으로부터 시작하는 프로그램 명령들의 처리로 분기를 기동시키는 분기 제어수단을 구비하는, 데이터 처리장치.
  20. 프로그램 명령들의 시퀀스에 의해 지정된 처리 연산들을 행하는 단계;
    상기 처리 연산들을 행하는 상기 단계를 제어하기 위한 제어신호들을 생성하기 위해 상기 프로그램 명령들의 시퀀스를 디코딩하는 단계를 포함하고,
    상기 디코딩하는 단계는 분기 차후 명령을 디코딩하는 것을 포함하고, 상기 분기 차후 명령은 분기 타겟 어드레스와 각각 관련된 프로그램 가능 파라미터들과 상기 프로그램 명령들의 시퀀스내의 상기 분기 차후 명령 후 소정의 명령을 나타내는 분기점 데이터를 갖고;
    상기 프로그램 명령들의 시퀀스의 처리가 상기 소정의 명령에 도달할 때 상기 분기 타겟 어드레스에 대응한 분기 타겟 명령으로부터 시작하는 프로그램 명령들의 처리로 분기를 기동시키는 단계를 더 포함하는, 데이터 처리방법.
  21. 컴퓨터를 제어하여 청구항 20의 방법에 따라 동작하는 가상 머신 실행 환경을 제공하기 위한 컴퓨터 프로그램을 비일시적 형태로 저장하는 컴퓨터 프로그램 제품.
KR1020187029669A 2016-03-23 2017-03-21 분기 명령 KR102353639B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1604948.8 2016-03-23
GB1604948.8A GB2548604B (en) 2016-03-23 2016-03-23 Branch instruction
PCT/GB2017/050774 WO2017163038A1 (en) 2016-03-23 2017-03-21 Branch instruction

Publications (2)

Publication Number Publication Date
KR20180126003A true KR20180126003A (ko) 2018-11-26
KR102353639B1 KR102353639B1 (ko) 2022-01-20

Family

ID=55968778

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187029669A KR102353639B1 (ko) 2016-03-23 2017-03-21 분기 명령

Country Status (9)

Country Link
US (1) US10768938B2 (ko)
EP (1) EP3433723B1 (ko)
JP (1) JP7011595B2 (ko)
KR (1) KR102353639B1 (ko)
CN (1) CN108885549B (ko)
GB (1) GB2548604B (ko)
IL (1) IL261341B (ko)
TW (1) TWI746529B (ko)
WO (1) WO2017163038A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2548602B (en) 2016-03-23 2019-10-23 Advanced Risc Mach Ltd Program loop control
GB2548603B (en) * 2016-03-23 2018-09-26 Advanced Risc Mach Ltd Program loop control
GB2551574B (en) 2016-06-24 2019-11-27 Advanced Risc Mach Ltd An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry
GB2564130B (en) * 2017-07-04 2020-10-07 Advanced Risc Mach Ltd An apparatus and method for controlling execution of instructions
CN109783143B (zh) * 2019-01-25 2021-03-09 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN110134441B (zh) * 2019-05-23 2020-11-10 苏州浪潮智能科技有限公司 Risc-v分支预测方法、装置、电子设备及存储介质
CN112835624A (zh) * 2021-02-18 2021-05-25 中国科学院自动化研究所 指令字处理器及零开销循环处理方法、电子设备及介质
US20230305992A1 (en) * 2022-03-25 2023-09-28 Nokia Solutions And Networks Oy Processor using target instructions

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000022516A1 (en) * 1998-10-12 2000-04-20 Idea Corporation Method for processing branch operations
EP1071010A2 (en) * 1999-07-23 2001-01-24 International Business Machines Corporation Decoupled instruction fetch-execute with static branch prediction support
US20150277926A1 (en) * 2014-03-28 2015-10-01 Telefonaktiebolaget L M Ericsson (Publ) Efficient Branch Predictor History Recovery In Pipelined Computer Architectures Employing Branch Prediction And Branch Delay Slots Of Variable Size

Family Cites Families (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3551895A (en) * 1968-01-15 1970-12-29 Ibm Look-ahead branch detection system
US5388841A (en) * 1992-01-30 1995-02-14 A/N Inc. External memory system having programmable graphics processor for use in a video game system or the like
JPH0827715B2 (ja) * 1993-03-03 1996-03-21 日本電気株式会社 記憶装置
JPH08292887A (ja) * 1995-02-24 1996-11-05 Hitachi Ltd 命令の分岐方法およびプロセッサ
US5790845A (en) * 1995-02-24 1998-08-04 Hitachi, Ltd. System with reservation instruction execution to store branch target address for use upon reaching the branch point
TW360852B (en) * 1995-04-12 1999-06-11 Matsushita Electric Ind Co Ltd Pipeline processor
JP2883035B2 (ja) * 1995-04-12 1999-04-19 松下電器産業株式会社 パイプライン・プロセッサ
JP2931890B2 (ja) 1995-07-12 1999-08-09 三菱電機株式会社 データ処理装置
US5742804A (en) * 1996-07-24 1998-04-21 Institute For The Development Of Emerging Architectures, L.L.C. Instruction prefetch mechanism utilizing a branch predict instruction
US6189092B1 (en) * 1997-06-30 2001-02-13 Matsushita Electric Industrial Co., Ltd. Pipeline processor capable of reducing branch hazards with small-scale circuit
US6092188A (en) * 1997-12-23 2000-07-18 Intel Corporation Processor and instruction set with predict instructions
US6304963B1 (en) 1998-05-14 2001-10-16 Arm Limited Handling exceptions occuring during processing of vector instructions
TW455814B (en) * 1998-08-06 2001-09-21 Intel Corp Software directed target address cache and target address register
US6308322B1 (en) * 1999-04-06 2001-10-23 Hewlett-Packard Company Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
WO2002084451A2 (en) 2001-02-06 2002-10-24 Victor Demjanenko Vector processor architecture and methods performed therein
US7159103B2 (en) 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
GB2409064B (en) 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
US7930526B2 (en) * 2004-03-24 2011-04-19 Arm Limited Compare and branch mechanism
US20050223202A1 (en) * 2004-03-31 2005-10-06 Intel Corporation Branch prediction in a pipelined processor
US7272704B1 (en) 2004-05-13 2007-09-18 Verisilicon Holdings (Cayman Islands) Co. Ltd. Hardware looping mechanism and method for efficient execution of discontinuity instructions
US7565514B2 (en) 2006-04-28 2009-07-21 Freescale Semiconductor, Inc. Parallel condition code generation for SIMD operations
US7991985B2 (en) 2006-12-22 2011-08-02 Broadcom Corporation System and method for implementing and utilizing a zero overhead loop
DE602007005790D1 (de) 2007-06-26 2010-05-20 Ericsson Telefon Ab L M Datenverarbeitungseinheit für Anweisungen in geschachtelten Schleifen
JP4526560B2 (ja) 2007-12-05 2010-08-18 日本テキサス・インスツルメンツ株式会社 プロセッサおよび信号処理方法
US7925866B2 (en) * 2008-01-23 2011-04-12 Arm Limited Data processing apparatus and method for handling instructions to be executed by processing circuitry
US8271832B2 (en) 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US9110683B2 (en) 2008-08-15 2015-08-18 Apple Inc. Predicting branches for vector partitioning loops when processing vector instructions
US7900025B2 (en) 2008-10-14 2011-03-01 International Business Machines Corporation Floating point only SIMD instruction set architecture including compare, select, Boolean, and alignment operations
US20100122066A1 (en) 2008-11-12 2010-05-13 Freescale Semiconductor, Inc. Instruction method for facilitating efficient coding and instruction fetch of loop construct
NL2002799C2 (en) * 2009-04-24 2010-10-26 Univ Delft Tech Data structure, method and system for address lookup.
GB2471067B (en) * 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
GB2471138B (en) 2009-06-19 2014-08-13 Advanced Risc Mach Ltd Handling integer and floating point registers during a context switch
US9286066B2 (en) 2009-11-24 2016-03-15 Nec Corporation Processor, and method of loop count control by processor
US20110280314A1 (en) 2010-05-12 2011-11-17 Texas Instruments Incorporated Slice encoding and decoding processors, circuits, devices, systems and processes
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
CN104115113B (zh) 2011-12-14 2018-06-05 英特尔公司 用于循环剩余掩码指令的系统、装置和方法
US9448879B2 (en) * 2011-12-22 2016-09-20 Intel Corporation Apparatus and method for implement a multi-level memory hierarchy
US8688661B2 (en) * 2012-06-15 2014-04-01 International Business Machines Corporation Transactional processing
US20130346727A1 (en) * 2012-06-25 2013-12-26 Qualcomm Incorporated Methods and Apparatus to Extend Software Branch Target Hints
TWI569205B (zh) * 2012-08-31 2017-02-01 威盛電子股份有限公司 一種微處理器及其操作方法
US9244677B2 (en) 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
CN107729018A (zh) 2012-09-28 2018-02-23 英特尔公司 循环向量化方法和设备
US9557993B2 (en) 2012-10-23 2017-01-31 Analog Devices Global Processor architecture and method for simplifying programming single instruction, multiple data within a register
US9459871B2 (en) 2012-12-31 2016-10-04 Intel Corporation System of improved loop detection and execution
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9329870B2 (en) 2013-02-13 2016-05-03 International Business Machines Corporation Extensible execution unit interface architecture with multiple decode logic and multiple execution units
US9798542B2 (en) 2014-04-25 2017-10-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Zero overhead looping by a decoder generating and enqueuing a branch instruction
JP6314195B2 (ja) 2016-10-20 2018-04-18 住友電工プリントサーキット株式会社 プリント配線板及び該プリント配線板の製造方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000022516A1 (en) * 1998-10-12 2000-04-20 Idea Corporation Method for processing branch operations
EP1071010A2 (en) * 1999-07-23 2001-01-24 International Business Machines Corporation Decoupled instruction fetch-execute with static branch prediction support
US20150277926A1 (en) * 2014-03-28 2015-10-01 Telefonaktiebolaget L M Ericsson (Publ) Efficient Branch Predictor History Recovery In Pipelined Computer Architectures Employing Branch Prediction And Branch Delay Slots Of Variable Size

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
James R. Goodman 외 1명. Code Scheduling Methods for Some Architectural Features in PIPE. 1985년 2월 *

Also Published As

Publication number Publication date
TWI746529B (zh) 2021-11-21
KR102353639B1 (ko) 2022-01-20
WO2017163038A1 (en) 2017-09-28
EP3433723A1 (en) 2019-01-30
CN108885549A (zh) 2018-11-23
CN108885549B (zh) 2023-03-07
GB2548604A (en) 2017-09-27
US20190079770A1 (en) 2019-03-14
GB2548604B (en) 2018-03-21
US10768938B2 (en) 2020-09-08
JP7011595B2 (ja) 2022-01-26
GB201604948D0 (en) 2016-05-04
JP2019509576A (ja) 2019-04-04
IL261341A (en) 2018-10-31
IL261341B (en) 2020-07-30
TW201734768A (zh) 2017-10-01
EP3433723B1 (en) 2020-07-22

Similar Documents

Publication Publication Date Title
KR102353628B1 (ko) 프로그램 루프 제어
KR102353639B1 (ko) 분기 명령
KR102353636B1 (ko) 프로그램 루프 제어
EP2572274A1 (en) Illegal mode change handling
EP3765957B1 (en) Branch target variant of branch-with-link instruction
KR102379886B1 (ko) 벡터 명령 처리

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