KR20190020036A - 레지스터 복구 분기 명령 - Google Patents

레지스터 복구 분기 명령 Download PDF

Info

Publication number
KR20190020036A
KR20190020036A KR1020197001153A KR20197001153A KR20190020036A KR 20190020036 A KR20190020036 A KR 20190020036A KR 1020197001153 A KR1020197001153 A KR 1020197001153A KR 20197001153 A KR20197001153 A KR 20197001153A KR 20190020036 A KR20190020036 A KR 20190020036A
Authority
KR
South Korea
Prior art keywords
register
instruction
target
data value
program address
Prior art date
Application number
KR1020197001153A
Other languages
English (en)
Other versions
KR102307581B1 (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 KR20190020036A publication Critical patent/KR20190020036A/ko
Application granted granted Critical
Publication of KR102307581B1 publication Critical patent/KR102307581B1/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/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/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/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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30105Register structure
    • 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/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent 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 or 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 or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

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

Abstract

프로그램 명령에 의해 지정된 처리 연산을 행하는 처리회로와 타겟 프로그램 어드레스를 기억하는 타겟 레지스터를 구비한 장치가 제공된다. 수치 레지스터는 데이터 값을 기억한다. 아키텍처 레지스터와, 프로그램 명령들을 디코드하여, 처리회로가 처리 연산들을 행하도록 제어하는 제어신호를 발생하는 명령 디코더가 더 설치된다. 명령 디코더는, 레지스터 복구 분기 명령을 디코드하여, 타겟 프로그램 어드레스 및 데이터 값이 유효한지 아닌지를 처리회로가 판정하게 하는 분기 명령 디코딩 회로를 구비한다. 타겟 프로그램 어드레스와 데이터 값이 모두 유효이면, 처리회로는 타겟 프로그램 어드레스로 분기되고, 아키텍처 레지스터를 갱신하여 데이터 값을 기억하게 한다. 그렇지 않으면, 에러 조치가 취해진다.

Description

레지스터 복구 분기 명령
본 발명은 데이터 처리 분야에 관한 것이다.
데이터 처리장치에서는, 프로그램의 한 부분으로부터 이 프로그램의 다른 부분으로 분기하거나 점프하는 것이 바람직한 경우가 많다. 이것은, 타겟 프로그램 어드레스를 레지스터에 기억한 후, 프로세서에게 명령을 발행하여 프로세서가 레지스터에 지정된 프로그램 어드레스로 분기(점프)하게 함으로써 달성될 수 있다. 그러나, 코드의 일부의 실행이 개시될 때 레지스터가 특정한 값들을 기억하는 것이 필요할 때가 있다. 예를 들어, 예외처리 루틴으로부터 프로세스로 복귀할 때, 모든 레지스터들의 상태를 예외가 처리되기 전의 이전의 상태로 복구하는 것이 필요한데, 이것은 이들 레지스터가 프로세스에 대한 중간값을 기억하고 있었을 수도 있기 때문이다. 그러나, 분기 명령에 대한 타겟 프로그램 어드레스가 이들 레지스터들 중에서 한 개에 기억되어 있으면, 이와 같은 필요성을 만족시킬 수 없다. 마찬가지로, 메모리에서 레지스터들로 값을 로드하는 것은 레지스터들 중에서 한 개가 메모리 위치를 기억하도록 요구할 수 있다. 따라서, 모든 레지스터의 상태를 복구하는 것이 곤란할 수 있다.
첫 번째 예시적인 구성에 따르면, 프로그램 명령들에 의해 지정된 처리 연산들을 행하는 처리회로와, 타겟 프로그램 어드레스를 기억하는 타겟 레지스터와, 데이터 값을 기억하는 수치 레지스터와, 아키텍처 레지스터와, 프로그램 명령들을 디코드하여, 상기 처리회로가 상기 처리 연산들을 행하도록 제어하는 제어신호를 발생하는 명령 디코더를 구비하고, 상기 명령 디코더는, 레지스터 복구 분기 명령을 디코드하여, 상기 타겟 프로그램 어드레스 및 상기 데이터 값이 유효한지 아닌지를 상기 처리회로가 판정하게 함으로써, 상기 타겟 프로그램 어드레스와 상기 데이터 값이 모두 유효이면, 상기 타겟 프로그램 어드레스로 분기하고 상기 아키텍처 레지스터를 갱신하여 상기 데이터 값을 기억하게 하고, 그렇지 않으면, 에러 조치를 취하게 하는 분기 명령 디코딩 회로를 구비한 장치가 제공된다.
두 번째 예시적인 구성에 따르면, 타겟 프로그램 어드레스를 기억하는 타겟 레지스터와, 데이터 값을 기억하는 수치 레지스터와, 아키텍처 레지스터를 구비한 시스템에서 데이터를 처리하는 방법으로서, 프로그램 명령들에 의해 지정된 처리 연산들을 행하는 단계와, 프로그램 명령들을 디코드하여, 상기 처리 연산들의 실행을 제어하는 제어신호를 발생하는 단계를 포함하고, 상기 디코딩 단계는, 레지스터 복구 분기 명령을 디코드하여, 상기 타겟 프로그램 어드레스 및 상기 데이터 값이 유효한지 아닌지를 판정함으로써, 상기 타겟 프로그램 어드레스와 상기 데이터 값이 모두 유효이면, 상기 타겟 프로그램 어드레스로 분기하고 상기 아키텍처 레지스터를 갱신하여 상기 데이터 값을 기억하고, 그렇지 않으면, 에러 조치를 취하는 단계를 포함하는 방법이 제공된다.
세 번째 예시적인 구성에 따르면, 프로그램 명령들에 의해 지정된 처리 연산들을 행하는 수단과, 타겟 프로그램 어드레스를 기억하는 수단과, 데이터 값을 기억하는 수단과, 아키텍처 레지스터와, 프로그램 명령들을 디코드하여, 상기 처리 연산들을 행하는 수단이 상기 처리 연산들을 행하도록 제어하는 제어신호를 발생하는 수단을 구비하고, 상기 프로그램 명령들을 디코드하는 수단은, 레지스터 복구 분기 명령을 디코드하여, 상기 타겟 프로그램 어드레스 및 상기 데이터 값이 유효한지 아닌지를 상기 처리 연산들을 행하는 수단이 판정하게 함으로써, 상기 타겟 프로그램 어드레스와 상기 데이터 값이 모두 유효이면, 상기 타겟 프로그램 어드레스로 분기하고 상기 아키텍처 레지스터를 갱신하여 상기 데이터 값을 기억하게 하고, 그렇지 않으면, 에러 조치를 취하게 하는 분기 명령 디코딩 수단을 구비한 장치가 제공된다.
이하, 다음의 첨부도면에 도시된 실시예를 참조하여 본 발명을 더욱 상세히 설명한다:
도 1은 일 실시예에 따른 파이프라인의 일례를 나타낸 것이다.
도 2는 레지스터 복구 분기 명령을 포함하는 프로그램 코드를 나타낸 것이다.
도 3은 일 실시예에 따라 도 2에 도시된 코드의 실행이 아키텍처에 어떻게 영향을 미치는지를 개략적으로 나타낸 것이다.
도 4는 일 실시예에 따라 서로 다른 레지스터들에 기억된 값들이 레지스터 복구 분기 명령의 셋업 및 실행 중에 변경되는 방법을 나타낸 것이다.
도 5는 일 실시예에 따라 서로 다른 레지스터들에 기억된 값들이 레지스터 복구 분기 명령의 셋업 및 실패한 실행 중에 변경되는 방법을 나타낸 것이다.
도 6은 일 실시예에 따른 데이터 처리방법을 나타낸 흐름도이다.
도 7은 일 실시예에 따른 레지스터 복구 분기 명령의 사용을 나타낸 흐름도이다.
도 8은 일 실시예에 따른 가상머신의 동작을 나타낸 흐름도이다.
첨부도면을 참조하여 실시예를 설명하기 전에, 이하의 실시예의 설명과 이와 관련된 이점이 주어진다.
예시적인 일 구성에 따르면, 프로그램 명령들에 의해 지정된 처리 연산들을 행하는 처리회로와, 타겟 프로그램 어드레스를 기억하는 타겟 레지스터와, 데이터 값을 기억하는 수치 레지스터와, 아키텍처 레지스터와, 프로그램 명령들을 디코드하여, 상기 처리회로가 상기 처리 연산들을 행하도록 제어하는 제어신호를 발생하는 명령 디코더를 구비하고, 상기 명령 디코더는, 레지스터 복구 분기 명령을 디코드하여, 상기 타겟 프로그램 어드레스 및 상기 데이터 값이 유효한지 아닌지를 상기 처리회로가 판정하게 함으로써, 상기 타겟 프로그램 어드레스와 상기 데이터 값이 모두 유효이면, 상기 타겟 프로그램 어드레스로 분기하고 상기 아키텍처 레지스터를 갱신하여 상기 데이터 값을 기억하게 하고, 그렇지 않으면, 에러 조치를 취하게 하는 분기 명령 디코딩 회로를 구비한 장치가 제공된다.
타겟 레지스터는 타겟 프로그램 어드레스, 즉 분기가 일어날 프로그램 어드레스를 기억한다. 수치 레지스터는 아키텍처 레지스터들 중에서 한 개에 대한 교체값을 기억하는 데이터 값을 기억한다. 레지스터 복구 분기 명령은 아키텍처 레지스터를 지정하는 명령이다. 실행될 때, 레지스터 복구 분기 명령은 타겟 레지스터와 수치 레지스터가 유효한 값들을 포함하는지 검사한다. 포함하지 않으면, 에러 조치가 발생된다. 그렇지 않으면, 명령이 타겟 레지스터에 기억된 타겟 프로그램 어드레스로 분기한 후, 수치 레지스터에 유지된 데이터 값을 기억하도록 지정된 아키텍처 레지스터를 갱신한다. 모든 이들 연산 또는 단계들은 원자적으로 발생한다. 즉, 레지스터 복구 분기 명령의 실행은 다른 명령에 의해 그것의 실행 도중에 인터럽트될 수 없다. 더구나, 지정된 아키텍처 레지스터의 분기 및 갱신 동작은 역순으로 행해질 수 있다. 아키텍처 레지스터는 레지스터 복구 분기 명령에 대한 다른 레지스터들을 셋업하기 위해 사용되는 레지스터일 수 있다. 예를 들어, 아키텍처 레지스터는, 분기되고 있는 코드에 대한 교체 레지스터 값들이 기억되는 메모리 내부의 위치의 어드레스를 기억할 수도 있다. 이에 따라, 아키텍처 레지스터가 올바른 값을 갖도록 복구하는 것과 분기 명령을 행하는 것을 거의 동시에 행할 수 있다. 타겟 레지스터와 수치 레지스터가 유효한 값을 포함하는지 검사함으로써, 타겟 레지스터와 수치 레지스터에 유지된 값들이 레지스터 복구 분기 명령의 실행을 대비하여 셋업된 후에 변형된 상황을 처리할 수 있다. 예를 들어, 이와 같은 검사를 행함으로써, 특정한 값들이 이들 레지스터에 로드되고, 이들 값들을 변경되게 하는 인터럽트 또는 예외가 발생한 후, 실행될 레지스터 복구 분기 명령에 대해, 부정확한 값을 이용하여 레지스터 복구 분기 명령이 실행되게 하는 상황을 회피할 수 있다.
일부 실시예에서, 에러 조치는 파이프라인을 플러시(flush)시키는 것이다. 파이프라인 플러시는 파이프라인 내부의 모든 스테이지들을 무효화가 되게 한다. 자주, 분기 발생을 예측하여, 시스템이 분기 목적지로부터 파이프라인 내부에 명령의 삽입을 개시할 수도 있다. 그 결과, 분기가 일어나지 않으면, 이들 명령이 완전히 실행되지 않도록 파이프라인을 플러시하는 것이 필요하다.
일부 실시예에서, 에러 조치는 추가적인 명령으로 분기하는 것이다. 이 추가적인 명령은, 레지스터 복구 분기 명령이 실패한 상황으로부터 복구하기 위해 제공되는 복구 코드에 관한 것일 수도 있다. 일부 실시예에서, 추가적인 명령은 프로그램 명령들 내에서 레지스터 복구 분기 명령 이전에 위치한다. 예를 들어, 추가적인 명령은, 레지스터 복구 분기 명령이 성공할 때까지 레지스터 복구 분기 명령을 셋업하는 코드와 레지스터 복구 분기 명령 그 자체가 반복하여 실행되는 루프를 셋업할 수도 있다.
일부 실시예에서, 에러 조치는 레지스터 복구 분기 명령을 NOOP 명령으로서 취급하는 것이다. 실행될 때, 프로세서는 일반적으로, 프로그램 카운터를 증분하여 다음 명령으로 이동하는 것을 제외하고는, NOOP 명령에 대해 아무런 조치를 취하지 않는다. 이와 같은 실시예에서는, 레지스터 복구 분기 명령이 (타겟 레지스터 또는 수치 레지스터가 무효인 것으로 인해) 성공적으로 분기 및 복원되지 않으면, 프로그램 카운터의 중분을 제외하고는, 레지스터 복구 분기 명령의 실행의 일부로서 추가적인 조치가 발생하지 않는다. 그후, 레지스터 복구 분기 명령에 대한 그후의 명령들이 행해질 수 있다.
일부 실시예에서는, 수치 레지스터와 타겟 레지스터 중에서 적어도 한 개는, 데이터 값 또는 타겟 프로그램 어드레스가 플러시되었는지 여부를 표시하는 관련된 유효성 표시자를 갖는다. 이와 같은 플러시가능한 레지스터들은, (예를 들어, 현재 실행되고 있는 프로세스 이외의 프로세스에 의해) 실질적으로 아무 때나 무효화될 수도 있다. 레지스터가 플러시되었는지 판정하기 위해, 유효성 표시자가 제공된다.
이와 같은 유효성 표시자가 제공될 수 있는 다양한 방법이 존재한다. 일부 실시예에서, 처리회로는 타겟 유효 플래그를 검사함으로써 타겟 프로그램 어드레스가 유효한지 판정한다. 타겟 유효 플래그는, 예를 들어, 아키텍처에서 노출되지 안아 유저가 타겟 유효 플래그를 직접 편집할 수 없는 타겟 레지스터 내부에 특수한 비트로서 제공될 수도 있다. 아키텍처는, 유저가 타겟 레지스터에 대한 값을 지정할 때 타겟 유효 플래그를 세트할 수 있으며, 타겟 프로그램 어드레스가 변경되었을 수도 있는 상황이 발생할 때 타겟 유효 플래그를 클리어(clear)할 수 있다. 예를 들어, 일부 실시예에서, 처리회로는, 예외에 응답하여, 타겟 프로그램 어드레스가 무효인 것을 표시하기 위해, 타겟 유효 플래그를 클리어하도록 구성된다. 이것은, 예외중에, 타겟 레지스터의 값이 변경되었을 수도 있으므로, 타겟 레지스터의 값이 유효하다고 안전하게 가정할 수 없기 때문이다. 일부 다른 실시예에서는, 타겟 프로그램 어드레스가 다른 식으로는 유효가 되지 않는 특수한 값을 갖는지 여부에 근거하여 타겟 프로그램 어드레스가 유효한지 아닌지 판정한다. 예를 들어, 타겟 프로그램 어드레스에 대한 값 "0"은, 0보다 큰(에를 들면, 1) 타겟 프로그램 어드레스에서 일련의 명령들 중에서 첫 번째 명령이 발생하는 경우 타겟 프로그램 어드레스가 유효라는 것을 나타낼 수도 있다. 이에 따라, 타겟 레지스터가 무효화될 때마다, 타겟 레지스터가 유효한 값을 포함하지 않는다는 것을 표시하기 위해 타겟 프로그램 어드레스 값이 특수한 값으로 갱신될 수 있다. 이와 같은 접근방법은 레지스터에 유지된 값이 유효인지 아닌지 표시하기 위해 추가적인 비트를 설치할 필요성을 없앤다.
일부 실시예에서, 명령 디코더는, 무브(move) 명령을 디코드하여, 처리회로가 제공된 값을 타겟 레지스터에 기억하게 하고 타겟 유효 플래그를 세트하여, 타겟 프로그램 어드레스가 유효인 것을 표시하게 하는 무브 명령 디코딩 회로를 구비한다. 이에 따르면, 유저에게 직접 노출되지 않고 타겟 유효 플래그가 세트될 수 있어, 유효 플래그가 올바르지 않게 세트되거나 클리어될 가능성을 줄인다. 유저가 타겟 레지스터에 값을 삽입하면, 타겟 프로그램 어드레스가 유효인 것을 표시하기 위해 대응하는 유효 플래그가 세트된다.
또한, 데이터 값이 유효인지 아닌지를 판정할 수 있는 다양한 방법이 존재한다. 일부 실시예에서, 처리회로는 수치 유효 플래그를 조사함으로써 데이터 값이 유효인지 아닌지를 판정한다. 수치 유효 플래그는, 예를 들어, 아키텍처에 노출되지 않아 유저가 직접 수치 유효 플래그를 편집할 수 없는 수치 레지스터 내부의 특수한 비트로서 제공될 수도 있다. 아키텍처는, 유저가 수치 레지스터에 대한 값을 지정할 때 수치 유효 플래그를 세트하고, 데이터 값이 변경될 수도 있는 상황이 발생할 때 수치 유효 플래그를 클리어할 수 있다. 예를 들어, 일부 실시예에서, 처리회로는, 예외에 응답하여, 수치 유효 플래그를 클리어하여, 데이터 값이 유효인 것을 표시하도록 구성된다. 이것은, 예외 중에서는, 수치 레지스터 내부의 값이 변경되었을 수도 있기 때문이다. 따라서, 예외가 발생할 때, 데이터 값이 더 이상 유효하지 않은 것으로 가정한다. 다른 일부 실시예에서는, 데이터 값이 특수한 값을 갖는지 여부에 근거하여 데이터 값이 유효인지 아닌지가 판정된다. 예를 들어, 데이터 값에 대핸 값 "0"은 데이터 값이 무효인 것을 표시할 수도 있다. 따라서, 수치 레지스터가 무효화될 때마다, 데이터가 값 레지스터가 유효한 값을 포함하지 않는다는 것을 표시하기 위해 데이터 값이 특수한 값으로 갱신될 수 있다. 이와 같은 접근방법은, 레지스터에 유지된 값이 유효인지 아닌지 표시하기 위해 추가적인 비트를 설치할 필요성을 없앤다.
일부 실시예에서, 명령 디코더는, 무브 명령을 디코드하여, 처리회로가 수치 레지스터에 제공된 값을 기억하게 하고, 수치 유효 플래그를 세트하여, 데이터 값이 유효인 것을 표시하게 하는 무브 명령 디코딩 회로를 구비한다. 이에 따르면, 유저에게 직접 노출시키지 않고 수치 유효 플래그가 설정될 수 있어, 유효 플래그가 올바르지 않게 세트되거나 클리어될 가능성을 줄일 수 있다. 유저가 타겟 레지스터에 값을 삽입하면, 타겟 프로그램 어드레스가 유효인 것을 표시하기 위해 대응하는 유효 플래그가 세트된다.
일부 실시예에서, 레지스터 복구 분기 명령은 아키텍처 레지스터에 대한 명시적인 참조를 제공한다. 이것은 주변 코드의 유연성을 증가시킨다. 특히, 이것은 임의의 레지스터를 이용하여 레지스터 복구 분기 명령을 셋업할 수 있게 할 수 있다. 예를 들어, 한 개의 인스턴스에서는, 레지스터 x12를 사용하여 교체 레지스터 값이 기억되는 메모리 위치를 기억할 수 있으며, 다른 인스턴스에서는, 레지스터 x17을 사용하여 메모리 위치를 기억할 수도 있다. 각각의 경우에, (예를 들어) 메모리 위치를 기억하는데 사용되었던 레지스터는 명시적으로 레지스터 복구 분기 명령의 필드 내에 제공된다. 다른 실시예에서는, 아키텍처 레지스터가 암시적으로 지정된다. 예를 들어, 아키텍처 레지스터는 항상 레지스터 x17일 수도 있다. 이와 같은 경우에, 아키텍처 레지스터가 레지스터 복구 분기 명령의 필드 내부에 설치될 필요는 없다. 그러나, 예를 들어, 교체 레지스터 값들의 메모리 위치를 기억하는 레지스터로서 레지스터 x17을 항상 사용하는 것이 필요할 것이기 때문에, 이것은 더 적은 유연성을 제공한다. 레지스터 x17이 다른 용도로 사용되고 있는 경우에는 사태를 복잡하게 만들 수도 있다.
일부 실시예에서, 타겟 프로그램 어드레스 및 레지스터 복구 분기 명령의 프로그램 어드레스는 모두 유저 공간에 존재한다. 유저 공간은, 커널과 그것의 관련된 서비스가 실행되는 커널 공간과 별개로 유저 어플리케이션이 실행되는 메모리의 영역인 것으로 생각할 수 있다. 커널 공간 내부에서 실행되는 어플리케이션은 특권이 주어지는 경우가 많다. 예를 들어, 이들 어플리케이션은 유저 공간에서 실행되는 어플리케이션보다 메모리에 대한 덜 제한된 액세스를 갖는다. 본 발명은, 어떤 프로세스가 기반을 이루는 아키텍처 상태에 관한 추가적인 허가 또는 제한된 지식이 주어지는 것을 요구하지 않기 때문에, 타겟 프로그램 어드레스와 레지스터 복구 분기 명령의 프로그램 어드레스 모두가 유저 공간에 있는 상황에 본 발명을 적용할 수 있다.
일부 실시예에서, 처리회로는 64비트 아키텍처를 이용한다. 64비트 아키텍처에서는, 메모리 위치가 레지스터 내부에 기억되는 것이 매우 바람직한데, 이것은 메모리 자체로부터 이 정보를 제공하는 것이 64비트 아키텍처에서는 특히 시간을 소모할 수 있기 때문이다. 본 발명은 64비트 아키텍처에 적용될 수 있다.
일부 실시예에서, 가상머신 컴퓨터 프로그램은, 호스트 데이터 처리장치를 제어하여 상기한 구성들 중에서 한 개의 장치에 대응하는 명령 실행 환경을 제공하는 프로그램 명령을 포함한다.
이하, 첨부도면을 참조하여 특정한 실시예를 설명한다.
도 1은 일 실시예에 따른 파이프라인(100)을 나타낸 것이다. 파이프라인(100)은 다수의 스테이지들/회로들을 구비한다. 먼저, 명령 페치 스테이지(10)에서는, 프로그램 카운터(120)의 값을 참고하고, 프로그램 카운터(120) 내부에 기억된 프로그램 어드레스에 위치한 명령이 페치된다. 그후, 이것은 명령 디코드 스테이지(13)로 전달되어 명령이 디코드된다. 이것은 한 개 이상의 신호가 발생되게 한다. 본 실시예에서, 디코드 스테이지는, 로드 명령을 디코드하고 대응하는 신호를 발생하는 로드 명령 디코딩 회로(132)와, 분기 명령을 디코드하고 대응하는 신호를 발생하는 분기 명령 디코딩 회로(134)를 구비한다. 명령에 응답하여 명령 디코드 스테이지(130) 내부에서 발생된 신호 또는 신호들은 한 개 이상의 처리부(140)로 건네진다. 본 실시예에서, 처리부는, 정수 논리 및 산술 연산을 행하는 한쌍의 산술 논리 유닛(ALU)(150, 160)과, 부동소수점 산술 연산을 행하는 부동소수점 유닛(FPU)(170)과, 메모리 또는 메모리 계층과 인터페이스로 연결되는 로드/스토어 유닛(180)과, 프로그램의 제어 흐름을 변경하는 동작을 행하는 분기 유닛(190)을 구비한다. 예를 들어, 분기 유닛(190)은 프로그램 카운터(120)의 조정을 처리할 수도 있으며 명시적인 분기 또는 점프 명령에 응답할 수 있다. 이때, 파이프라인(100) 내부의 다양한 스테이지들(즉, 유닛들)은 서로 독립하여 동작할 수 있다. 예를 들어, 한 개의 명령이 페치되고 있는 동안, 다른 명령이 디코드될 수 있으며, 또 다른 명령이 처리부(140)에 의해 실행될 수도 있다.
도 2는 레지스터 복구 분기 명령(BRR)을 포함하는 프로그램 코드를 나타낸 것이다. 도 2에 도시된 코드는, 레지스터 복구 분기 명령이 사용되는 방법을 나타내고 있다. 먼저, 로드 명령(LD)은 분기 명령의 목적지가 레지스터 x17 내지 레지스터 x1로 참조되는 메모리 내부의 어드레스(또는 어드레스들)로부터 로드되게 한다. 본 실시예에서, 레지스터 x17은 레지스터 복구 분기 명령(BRR)을 셋업하는데 사용되는 아키텍처 레지스터의 일례이다. 그후, 목적지가 Move to System Register(MSR) 명령을 거쳐 레지스터 x1으로부터 타겟 레지스터의 일례인 BDEST 레지스터에 로드된다. 이때, 다른 실시예에서는, 데이터 값이 범용 레지스터로부터 "시스템"으로 이동할 수 있게 하는 기능을 갖는 모든 명령이 사용될 수 있다. 이것은, 범용 레지스터와 유사하게 거동하는 환경설정 또는 시스템 레지스터에 기록하는 명령과, 순수하게 부작용 기반인 명령(예를 들어, PMSWINC)을 포함한다. 이 명령은, 로드/스토어 처리 유닛(18)에 의해 실행될 때, BDEST 레지스터에 대한 유효 비트가 설정되도록 하여, BDEST 레지스터의 콘텐츠가 유효라는 것을 표시한다. 그후, 새로운 로드 명령은 새로운 데이터 값이 레지스터 x17 내지 레지스터 x1으로 참조되는 메모리 내부의 어드레스(또는 어드레스들)로부터 로드되게 한다. 마찬가지로, 그후 MSR 명령은 이 데이터를 x1으로부터 수치 레지스터의 일례인 BRVAL 레지스터에 복사한다. 이 명령은, 로드/스토어 처리 유닛(18)에 의해 실행될 때, BRVAL 레지스터에 대한 유효 비트가 설정되어 BRVAL 레지스터의 콘텐츠가 유효라는 것을 나타내게 한다. 그후, x1에 있는 값을 레지스터 x17에 의해 참조된 어드레스에 있는 메모리에 기억된 데이터로 교체하기 위해 세 번째 로드 명령이 실행된다. 이때, 데이터를 검출할 수 있는 메모리 어드레스를 제공하기 위해 레지스터 x17이 필요하기 때문에, 레지스터 x17 그 자체에 대해 동일한 명령이 행해질 수 없다. 더구나, BDEST 레지스터가 무효화되는 경우에 데이터를 재검색할 수 있는 메모리 어드레스를 제공하기 위해 레지스터 x17이 필요하다. 레지스터 복구 분기 명령은 이와 같은 문제를 해결한다. 분기 명령 디코딩 회로(134)에 의해 디코드될 때, 발생된 신호는, 예를 들어, 분기 유닛(190)이 먼저 BDEST 및 BRVAL에 대해 플래그가 세트되어 있는지 검사하게 한다. 플래그들이 세트되어 있다고, 즉 BDEST 및 BRVAL 레지스터에 있는 데이터가 유효하다고 가정하면, 프로그램 카운터(PC)의 값이 BDEST에 기억된 값과 같도록 갱신되는데, 즉 프로그램이 BDEST에 기억된 어드레스로 분기한다. 그후, 본 실시예에서는 BRR 명령 필드에 명시적으로 지정되는 레지스터 x17에 기억된 데이터 값이 레지스터 BRVAL에 기억된 데이터로 갱신된다. 플래그들 중에서 한 개가 세트되지 않은 경우에는(즉, BDEST 또는 BRVAL 중에서 한 개가 무효인 경우), BRR 명령이 NOOP 명령인 것처럼 실행되고, 라벨 "again"으로의 직접 분기 명령(B)인 다음 명령으로 흐름이 계속된다. 즉, 이와 같은 최종 명령이 실행되면, 코드가 순환하여 다시 실행된다. 이때, 이들 실시예에서는, 로드(LD) 명령의 특정한 파라미터들 모두가 제공되는 것은 아니다. 그러나, 레지스터 x17을 사용하여, 예를 들어, 스레드 콘텍스트에 대해, 다수의 데이터 값들을 포함하는 메모리 내부의 구조를 가리키며, 순차적으로 도시된 로드 명령들이 데이터 값을 레지스터들 내부에 구조에 로드한다는 것을 알 수 있다.
이때, 본 실시예에서는, 아키텍처 레지스터(x17)가 VRR 명령 필드에서 명시적으로 참조된다. 이것은, 유저(또는 컴파일러)가 레지스터 복구 분기 명령을 셋업하기 위해 모든 아키텍처 레지스터를 이용할 수 있게 할 수 있기 때문에, 유연성을 증가시킨다. 그러나, 다른 실시예에서는, 이것이 가능하지 않으며, 그 대신에 BRR 명령 그 자체가 BDEST에 기억된 값으로 갱신되는 레지스터를 암시적으로 제어한다.
도 3은 도 2에 도시된 코드를 실행하는 64비트 아키텍처(200)에 대한 효과를 개략적으로 나타낸 것이다. 아키텍처(200)는, 예를 들어 로드/스토어 처리 유닛(180)을 거쳐 액세스될 수 있는 메모리(210)를 구비한다. 도 3은 식별자 "보존"에 의해 참조된 메모리(210)의 위치를 나타낸다. 이 메모리의 부분은 3개의 워드를 포함하는데, 이중에서 첫 번째는 데이터 "XYZ"를 포함하고, 두 번째는 데이터 "117"을 포함하고, 세 번째는 데이터 "101"을 포함한다. 아키텍처는 다수의 아키텍처 레지스터들(예를 들어, x0, x1, x2, …, x17, 18)을 포함하는 메인 레지스터 파일(220)을 더 포함한다. 이들 레지스터 각각은 범용이므로, 직접 액세스(기록/판독)될 수 있다. 아키텍처는 레지스터 복구 분기 명령(BRR)이 실행될 때 분기의 타겟인 타겟 프로그램 어드레스를 기억하는데 사용되는 BRDEST 레지스터(230)를 더 포함한다. 분기는, 예를 들어, 분기 유닛(190)에 의해 갱신되고 있는 프로그램 카운터(120)에 기억된 값에 의해 발생된다. 레지스터 복구 분기 명령(BRR) 실행의 일부로서 아키텍처 레지스터들 중에서 한 개로 이동하는 데이터 값을 기억하는 BRVAL 레지스터(240)가 더 설치된다. 본 실시예에서, BRDEST(230) 및 BRVAL(240) 레지스터 각각은 BRDEST 및 BRVAL에 기억된 값이 유효한지 아닌지 표시하기 위해 플래그 250, 260을 포함한다. 이때, 플래그가 세트되는 것, 즉 레지스터의 값이 유효하다는 것을 표시하기 위해 값 "1"을 사용한다. 플래그들 250, 260은 직접 세트되거나 클리어될 수 없다. 그러나, BRDEST(230) 또는 BRVAL(240) 중에서 한 개에 갑을 기억하는 것은 대응하는 플래그가 세트되게 한다. 한편, 예외 또는 인터럽트를 취하거나 레지스터 복구 분기 명령 그 자체를 실행하는 것은 플래그들이 클리어(즉, "0"으로 설정)되게 함으로써, 레지스터들에 기억된 값들이 무효인 것을 표시하거나, 적어도 이들 값이 유효한 것으로 신뢰할 수 없다는 것을 표시한다.
이때, 일부 다른 실시예에서는, 레지스터들 BRDEST 및 BRVAL이 아키텍처 레지스터이며, 그 결과, 레지스터들이 영향을 받는 방식을 제한하고 대응하는 유효 플래그들을 세트하는 것에 신경을 쓰는, MSR를 명령을 통해서만 액세스되는 것이 아니라, 직접 액세스될 수 있다. 실제로, 일부 실시예에서는, BRDEST 및 BRVAL 레지스터들은 심지어 플러시 가능한데, 즉 (플래그와 별개로) 이들 레지스터의 값들이 언제나 변경될 수도 있다.
도 2에 도시된 코드는 다수의 다른 연산이 아키텍처에 대해 발생하게 한다. 이것들은 도 3에 11개의 다른 스텝으로 분할되는 것으로 도시되어 있다. 제 1 스텝에서, 레지스터 x17을 사용하여 메모리의 영역에 대한 어드레스를 제공한다. 이것은, 예를 들어, 구조가 레지스터들에 순차적으로 로드되는 다수의 데이터 값들을 포함하는 스레드의 보존된 콘텍스트를 기억하는 구조일 수 있다. 제 2 스텝에서, 이 메모리 어드레스에 기억된 데이터가 레지스터 x1에 기억된다. 제 3 스텝에서, 레지스터 x1에 기억된 데이터가 BRDEST 레지스터(230)에 복사되고 BRDEST에 대한 유효 플래그가 세트된다. 제 4 스텝에서는, 레지스터 x17을 다시 사용하여 메모리의 영역에 대한 어드레스를 제공하고, 제 5 스텝에서는, 레지스터 x17에 의해 참조된 것 이후의 다음의 메모리 어드레스에 기억된 데이터가 레지스터 x1에 복사된다. 스텝 6에서는, 레지스터 x1에 기억된 데이터가 BRVAL 레지스터(240)에 복사되고 BRVAL에 대한 유효 플래그가 (예를 들어, 1로) 세트된다. 스텝 7에서는, 레지스터 x17을 다시 사용하여 메모리의 영역에 대한 어드레스를 제공하고, 제 8 스텝에서는, 위치 x17에 있는 다음 메모리 어드레스에 기억된 데이터가 레지스터 x1으로 복사된다. 스텝 9에서는, 레지스터 x17에 대한 명시적인 참조를 사용하여 레지스터 복구 분기 명령이 실행된다. 이것은 BRDEST 및 BRVAL의 유효 플래그들이 검사되게 한다. 유효하면, 스텝 10에서, BRDEST에 기억된 값을 사용하여 프로그램 카운터(PC)(120)를 갱신한다. 또한, 유효하면, 스텝 11에서, BRVAL에 기억된 값이 레지스터 x17에 기억된다. 2개의 플래그 중에서 한 개가 클리어되면(즉, 2개의 값들 중에서 한 개가 무효이면) 에러 조치가 행해진다. 에러 조치는, 파이프라인의 플러싱(예를 들어, 파이프라인을 비우는 것), 레지스터 복구 분기 명령을 NOOP 명령으로서 취급하는 것, 또는, 예를 들어, 레지스터 복구 분기 명령을 다시 재설정하고 실행하기 위해 레지스터 복구 분기 명령 이전의 명령으로 대안적인 분기를 행하는 것을 포함하는 한 개 이상의 다른 부속조치를 포함할 수도 있다.
도 4는 일 실시예에 따른 레지스터 복구 분기 명령의 셋업 및 실행 중에 서로 다른 레지스터들에 기억된 값들이 변경되는 방식을 나타낸 것이다. 본 실시예에서는, BDEST 및 BRVAL에 기억된 값들이 유효라는 것을 표시하기 위해 이들 레지스터 각각에 대해 플래그를 제공하는 것이 아니라, 이들 레지스터의 콘텐츠가 무효인 것을 표기하는 특수한 값들이 정의된다. 처음에는, 레지스터 x17을 사용하여, 보존된 스레드 콘텍스트를 기억하는 데이터 구조에 대응하는 메모리 내부의 보존된 데이터 위치("save")를 가리킨다, 한편, 레지스터들 BDEST 및 BRVAL은 모두 특수한 "무효" 값을 포함하여, BDEST 및 BRVAL이 무효인 것을 표시한다. 첫 번째 로드 명령을 행한 후, 레지스터 x17은 여전히 "save"를 가리킨다. 그러나, 레지스터 x1은 어드레스 "save"에 위치한 메모리에 기억된 데이터 값 XYZ을 포함하게 된다. 첫 번째 MSR 명령을 수행한 후, BDEST는 레지스터 x1에 기억된 값(즉, XYZ)을 보유하게 된다. BDEST는 더 이상 특수한 무효 값을 포함하지 않으므로, 암시적으로 유효하다. 레지스터 x1의 값 및 BRVAL의 값은 변경되지 않은 채 유지된다. 두 번째 로드 명령을 실행한 후, 다음 데이터 값("117")이 레지스터 x1에 로드된다, 나머지 데이터 값들은 변경되지 않은 채 유지된다. 두 번째 MSR 명령은 레지스터 x1에 기억된 값이 BRVAL에 기억되게 한다. BRVAL은 더 이상 특수한 무효 값을 포함하지 않으므로, 암시적으로, BRVAL의 데이터는 유효하다. 세 번째 및 최종 로드 명령은 다음의 데이터 값("101")이 레지스터 x1에 로드되게 한다. 따라서, 이 시점에서, x17은 여전히 "save"를 가리키는 한편, BDEST는 값 XYZ을 유지하고 BRVAL은 값 117을 유지한다. 레지스터 x1은 값 101을 보유한다. 레지스터 x17을 처리중에 갱신할 레지스터로서 명시적으로 참조하는 레지스터 복구 분기 명령(VRR) 명령의 실행시에, BDEST 및 BRVAL에 기억된 값들이 검사된다. 이 경우에, 어떤 레지스터도 특수한 무효 값을 기억하지 않기 때문에, 이들 값은 유효인 것으로 생각되므로 처리가 진행한다. 특히, BRVAL에 기억된 값(117)은 레지스터 x17에 할당되고, 프로그램 카운터(120)를 XYZ으로 갱신함으로써 BDEST에 기억된 프로그램 어드레스(XYZ)로 프로그램이 분기한다. 따라서, BRR 명령의 실행의 종료시에, 레지스터 x1은 값 101을 기억하고, 레지스터 x17은 값 117을 기억한다. 이와 같은 특정한 예에서는, 레지스터 복구 분기 명령의 발행 결과로써, BDEST 및 BRVAL의 값이 무효화된다. 그 결과, 모든 레지스터들이 올바른 값을 기억하고 있는 프로그램 어드레스 XYZ에 위치한 명령으로부터 실행이 재개할 수 있다.
본 실시예에서는, BRR 명령의 위치 및 XYZ의 위치가 유저 공간 내인 것으로 가정한다. 즉, BRR 명령의 프로그램 어드레스와 프로그램 어드레스 XYZ은 메모리의 특권이 없는 부분에 위치한다. 실제로, MSR 명령을 거쳐 제어되는 BDEST 및 BRVAL 레지스터들에 대한 액세스 이외에, 기반을 이루는 아키텍처의 모든 부분에 특수한 액세스가 요구되지 않는다. 실제로, 보통 유저 공간 처리에서 이용가능하지 않은 자원에 대한 액세스가 필요하지 않다.
도 5는 일 실시예에 따른 레지스터 복구 분기 명령의 셋업 및 실패한 실행 중에 다양한 레지스터들에 기억된 값들이 변경되는 방식을 나타낸 것이다. 이때, 처리는 도 4를 참조하여 설명한 것과 같다. 그러나, 본 실시예에서는, 세 번째 로드 명령("LD x1,[x17,#...]")의 실행후에, 인터럽트가 발생한다. 이와 같은 인터럽트 중에, BDEST 또는 BRVAL 레지스터에 기억된 값들이 변경될 수도 있다. 따라서, 인터럽트 서비스 루틴은 자동으로 BDEST 및 BRVAL의 값을 무효인 것으로 설정한다. 그러나, 인터럽트로부터 복귀할 때 범용 레지스터에 유지된 값들은 보통 복구된다. 그 결과, 레지스터 복구 분기 명령 BRR이 실행될 때, 레지스터 x17을 지정하는 것은 여전히 메모리 내부의 보존된 데이터 위치("save")를 가리키며, x1은 여전히 값 101을 기억하게 된다. 한편, BDEST 및 BRVAL은 무효가 된다. 따라서, BRR 명령의 실행의 첫 번째 스텝에서, BDEST 및 BRVAL 중에서 적어도 한 개가 무효인 것으로 판정되므로, 프로그램 카운터를 증분하는 것을 제외하고는 추가적인 실행이 발생되지 않는다(즉, 명령이 NOOP 명령으로서 다른 식으로 취급된다). 따라서, 실행의 흐름이 BRRF 명령 아래의 복구 코드로 "실패로 끝난다(fall through)". 도 2에 나타낸 것과 같이, 이것은 코드를 재실행하게 하는 분기 명령만큼 단순할 수 있다. BDEST 또는 BRVAL 값이 무효화되는 경우의 수가 특히 작을 것으로 예상되므로, 시퀀스를 재실행함으로써, 레지스터 복구 분기 명령이 다음의 경우에는 성공하게 되는 것이 기대된다.
도 6은 본 실시예에 따른 데이터 처리방법을 나타낸 흐름도(300)이다. 스텝 310에서는, 아키텍처 레지스터를 지정하는 레지스터 복구 분기 명령이 디코드된다. 디코드되는 명령은 프로그램 카운터(120)에 기억된 값에 근거하여 (예를 들어, 명령 페처(110)를 사용하여) 페치된 명령과 일치한다. 디코딩은, 예를 들어, 파이프라인(100) 내부의 명령 디코더(130)에 있는 분기 명령 디코딩 회로(134)에 의해 행해질 수 있다. 스텝 320에서는, 디코드된 명령이 한 개 이상의 제어신호가 발생하게 한다. 이들 제어신호는 한 개 이상의 처리 유닛(1400에 전송되어, 처리 연산이 발생하게 한다. 스텝 330에서는, 명령에 의해 지정되는(그리고 제어신호를 거쳐 구현되는) 다양한 처리 연산이 분기 유닛(190) 등의 처리 유닛(140)에게 타겟 프로그램 어드레스 및 데이터 값이 모두 유효인지 판정하게 한다. 이들 값은, 예를 들어, BRDEST 및 BRVAL 레지스터들에 각각 기억된다. 이들 값 중에서 한 개가 무효이면, 스텝 340에서, 에러 조치가 행해진다. 그렇지 않으면, 스텝 350에서, 처리 유닛은 타겟 프로그램 어드레스로 분기가 발생하게 하며, 그후 스텝 360에서, 아키텍처 레지스터가 데이터 값으로 갱신된다. 특정한 아키텍처 레지스터가 레지스터 복구 분기 명령 그 자체 의해 명시적으로 지정될 수 있다. 이와 달리, 아키텍처 레지스터의 아이덴티티가 암시적으로 지정될 수도 있다. 즉 레지스터 BRVAL에 기억된 값은 항상 동일한 레지스터에 보존된다.
도 7은 일 실시예에 따른 레지스터 복구 분기 명령의 사용을 예시한 흐름도(400)이다. 도 6에 나타낸 것과 스텝이 동일한 곳에는, 동일한 참조번호를 사용하였다. 스텝 410에서는, 메모리로부터 레지스터(예를 들어, BRDEST)에 타겟 프로그램 어드레스가 로드된다. 이 스텝은 처리 유닛(140)을 거쳐 각각 페치, 디코드 및 실행되어야 하는 한 개 이상의 명령들의 실행을 포함한다. 그후, 스텝 420에서, 메모리로부터 레지스터(예를 들어, BRVAL)에 데이터 값이 로드된다. 마찬가지로, 이 스텝은 처리 유닛(140)을 거쳐 각각 페치, 디코드 및 실행되어야 하는 한 개 이상의 명령들의 실행을 포함할 수도 있다. 그후, 스텝 310, 320, 330, 350 및 360을 참조하여 도 6에서 나타낸 것과 같이 레지스터 복구 분기 명령이 디코드되고 행해진다. 그러나, 스텝 330에서, 처리 유닛(140)이 타겟 프로그램 어드레스와 데이터 값 중에서 한 개가 무효라고 판정하면, 스텝 340에서 취해지는 에러 조치는, 타겟 프로그램 어드레스가 메모리에서 레지스터(BRDEST)로 로드되는 스텝 410으로 처리가 복귀하는 것이다. 이에 따라, 스텝 350 및 360에서 아키텍처 레지스터의 분기 및 갱신이 성공적으로 일어날 때까지 처리가 계속된다.
도 8은 사용되는 가상 머신 구현예를 나타낸 것이다. 전술한 실시예는 해당 기술을 지원하는 구체적인 처리 하드웨어를 작동하는 장치 및 방법에 대해 본 발명을 구현하지만, 하드웨어 장치의 소위 가상머신 구현을 제공할 수도 있다. 이들 가상머신 구현은 가상머신 프로그램(510)을 지원하는 호스트 운영체계(520)를 실행하는 호스트 프로세서(530) 상에서 실행된다. 일반적으로, 합당한 속도에서 실행되는 가상머신 구현을 제공하기 위해서는 크고 강력한 프로세서가 필요하지만, 이와 같은 접근방법은 호환성이나 재사용 이유로 인해 다른 프로세서에 네이티브한 코드를 실행할 필요성이 있을 때 등의 특정한 상황에서만 정당화된다. 가상머신 프로그램(510)은 가상머신 프로그램(510)에 의해 모델링되고 있는 장치인 실제 하드웨어에 의해 제공되는 하드웨어 인터페이스와 동일한 어플리케이션 프로그램(500)에 대한 어플리케이션 프로그램 인터페이스를 제공한다. 따라서, 전술한 프로세서 상태 검사 명령의 한 개 이상의 예를 포함하는 프로그램 명령은 가상머신 프로그램(510)을 사용하여 어플리케이션 프로그램((500) 내에서 실행되어 가상머신 하드웨어와의 그들의 상호작용을 모델화한다.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
또한, 본 출원에서는, 레지스터 또는 플래그와 관련하여 단어 "세트"는 값 "1" 또는 "0"을 갖도록 레지스터 또는 플래그를 환경설정하는 것을 포함할 수 있다. 마찬가지로, 레지스터 또는 플래그와 관련하여 단어 "클리어"는 "세트"에 대해 행해진 동작의 반대를 말하며, 따라서 값 "0" 또는 "1"을 갖도록 레지스터 또는 플래그를 환경설정하는 것을 의미할 수도 있다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다. 예를 들면, 종속항들의 특징들의 다양한 조합이 독립항들의 특징과 행해질 수도 있다.

Claims (20)

  1. 프로그램 명령들에 의해 지정된 처리 연산들을 행하는 처리회로와,
    타겟 프로그램 어드레스를 기억하는 타겟 레지스터와,
    데이터 값을 기억하는 수치 레지스터와,
    아키텍처 레지스터와,
    상기 프로그램 명령들을 디코드하여, 상기 처리회로가 상기 처리 연산들을 행하도록 제어하는 제어신호를 발생하는 명령 디코더를 구비하고,
    상기 명령 디코더는, 레지스터 복구 분기 명령을 디코드하여, 상기 타겟 프로그램 어드레스 및 상기 데이터 값이 유효한지 아닌지를 상기 처리회로가 판정하게 함으로써,
    상기 타겟 프로그램 어드레스와 상기 데이터 값이 모두 유효이면, 상기 타겟 프로그램 어드레스로 분기하고 상기 아키텍처 레지스터를 갱신하여 상기 데이터 값을 기억하게 하고,
    그렇지 않으면, 에러 조치를 취하게 하는 분기 명령 디코딩 회로를 구비한 장치.
  2. 제 1항에 있어서,
    상기 에러 조치는 파이프라인을 플러시(flush)시키는 것인 장치.
  3. 선행하는 청구항 중 어느 것에 있어서,
    상기 에러 조치는 추가적인 명령으로 분기하는 것인 장치.
  4. 제 3항에 있어서,
    상기 추가적인 명령은 상기 프로그램 명령들 내에서 상기 레지스터 복구 분기 명령 이전에 위치하는 장치.
  5. 제 1항에 있어서,
    상기 에러 조치는 상기 레지스터 복구 분기 명령을 NOOP 명령으로서 취급하는 것인 장치.
  6. 선행하는 청구항 중 어느 것에 있어서,
    상기 수치 레지스터와 상기 타겟 레지스터 중에서 적어도 한 개는, 상기 데이터 값 또는 상기 타겟 프로그램 어드레스가 플러시되었는지 여부를 표시하는 관련된 유효성 표시자를 갖는 장치.
  7. 선행하는 청구항 중 어느 것에 있어서,
    상기 처리회로는 타겟 유효 플래그를 검사함으로써 상기 타겟 프로그램 어드레스가 유효한지 판정하는 장치.
  8. 제 7항에 있어서,
    상기 처리회로는, 예외에 응답하여, 상기 타겟 프로그램 어드레스가 무효인 것을 표시하기 위해, 상기 타겟 유효 플래그를 클리어하도록 구성된 장치.
  9. 제 7항 또는 제 8항에 있어서,
    상기 명령 디코더는, 무브(move) 명령을 디코드하여, 상기 처리회로가 제공된 값을 상기 타겟 레지스터에 기억하게 하고 상기 타겟 유효 플래그를 세트하여, 상기 타겟 프로그램 어드레스가 유효인 것을 표시하게 하는 무브 명령 디코딩 회로를 구비한 장치.
  10. 선행하는 청구항 중 어느 것에 있어서,
    상기 처리회로는 수치 유효 플래그를 조사함으로써 상기 데이터 값이 유효인지 아닌지를 판정하는 장치.
  11. 제 10항에 있어서,
    상기 처리회로는, 예외에 응답하여, 수치 유효 플래그를 클리어하여, 상기 타겟 프로그램 어드레스가 무효인 것을 표시하도록 구성된 장치.
  12. 제 10항 또는 제 11항에 있어서,
    상기 명령 디코더는, 무브 명령을 디코드하여, 상기 처리회로가 상기 수치 레지스터에 제공된 값을 기억하게 하고, 상기 수치 유효 플래그를 세트하여, 상기 데이터 값이 유효인 것을 표시하게 하는 무브 명령 디코딩 회로를 구비한 장치.
  13. 선행하는 청구항 중 어느 것에 있어서,
    상기 레지스터 복구 분기 명령은 상기 아키텍처 레지스터에 대한 명시적인 참조를 제공하는 장치.
  14. 선행하는 청구항 중 어느 것에 있어서,
    상기 타겟 프로그램 어드레스 및 상기 레지스터 복구 분기 명령의 프로그램 어드레스는 모두 유저 공간에 존재하는 장치.
  15. 선행하는 청구항 중 어느 것에 있어서,
    상기 처리회로는 64비트 아키텍처를 이용하는 장치.
  16. 호스트 데이터 처리장치를 제어하여 청구항 1 내지 14 중 어느 것에 기재된 장치에 대응하는 명령 실행 환경을 제공하는 프로그램 명령을 포함하는 가상머신 컴퓨터 프로그램.
  17. 타겟 프로그램 어드레스를 기억하는 타겟 레지스터와,
    데이터 값을 기억하는 수치 레지스터와,
    아키텍처 레지스터를 구비한 시스템에서 데이터를 처리하는 방법으로서,
    프로그램 명령들에 의해 지정된 처리 연산들을 행하는 단계와,
    상기 프로그램 명령들을 디코드하여, 상기 처리 연산들의 실행을 제어하는 제어신호를 발생하는 단계를 포함하고,
    상기 디코딩 단계는, 레지스터 복구 분기 명령을 디코드하여, 상기 타겟 프로그램 어드레스 및 상기 데이터 값이 유효한지 아닌지를 판정함으로써, 상기 타겟 프로그램 어드레스와 상기 데이터 값이 모두 유효이면, 상기 타겟 프로그램 어드레스로 분기하고 상기 아키텍처 레지스터를 갱신하여 상기 데이터 값을 기억하고, 그렇지 않으면, 에러 조치를 취하는 단계를 포함하는 데이터 처리방법.
  18. 제 17항에 있어서,
    상기 디코딩 단계는,
    한 개 이상의 무브 명령들을 디코드하여 메모리로부터 상기 타겟 프로그램 어드레스 및 상기 데이터 값을 액세스하고 상기 타겟 프로그램 어드레스를 상기 타겟 레지스터에 기억하고 상기 데이터 값을 상기 수치 레지스터에 기억하는 단계를 포함하고,
    상기 한 개 이상의 무브 명령을 디코드하는 상기 단계는 상기 레지스터 복구 분기 명령을 디코드하는 상기 단계 이전에 발생되는 데이터 처리방법.
  19. 청구항 17 또는 청구항 18에 기재된 방법을 행하기 위한 컴퓨터 프로그램을 비일시적인 형태로 기억하는 컴퓨터 프로그램 제품.
  20. 프로그램 명령들에 의해 지정된 처리 연산들을 행하는 수단과,
    타겟 프로그램 어드레스를 기억하는 수단과,
    데이터 값을 기억하는 수단과,
    아키텍처 레지스터와,
    프로그램 명령들을 디코드하여, 상기 처리 연산들을 행하는 수단이 상기 처리 연산들을 행하도록 제어하는 제어신호를 발생하는 수단을 구비하고,
    상기 프로그램 명령들을 디코드하는 수단은, 레지스터 복구 분기 명령을 디코드하여, 상기 타겟 프로그램 어드레스 및 상기 데이터 값이 유효한지 아닌지를 상기 처리 연산들을 행하는 수단이 판정하게 함으로써,
    상기 타겟 프로그램 어드레스와 상기 데이터 값이 모두 유효이면, 상기 타겟 프로그램 어드레스로 분기하고 상기 아키텍처 레지스터를 갱신하여 상기 데이터 값을 기억하게 하고, 그렇지 않으면, 에러 조치를 취하게 하는 분기 명령 디코딩 수단을 구비한 장치.
KR1020197001153A 2016-06-22 2017-06-15 레지스터 복구 분기 명령 KR102307581B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1610859.9A GB2551548B (en) 2016-06-22 2016-06-22 Register restoring branch instruction
GB1610859.9 2016-06-22
PCT/GB2017/051751 WO2017220974A1 (en) 2016-06-22 2017-06-15 Register restoring branch instruction

Publications (2)

Publication Number Publication Date
KR20190020036A true KR20190020036A (ko) 2019-02-27
KR102307581B1 KR102307581B1 (ko) 2021-10-05

Family

ID=56894970

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197001153A KR102307581B1 (ko) 2016-06-22 2017-06-15 레지스터 복구 분기 명령

Country Status (5)

Country Link
US (1) US10877767B2 (ko)
KR (1) KR102307581B1 (ko)
CN (1) CN109416632B (ko)
GB (1) GB2551548B (ko)
WO (1) WO2017220974A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11599445B2 (en) * 2018-06-15 2023-03-07 Board Of Regents, The University Of Texas System Watcher: precise and fully-automatic on-site failure diagnosis
US10802854B2 (en) 2019-08-30 2020-10-13 Alibaba Group Holding Limited Method and apparatus for interpreting bytecode instruction stream
CN110704108B (zh) * 2019-08-30 2020-08-14 阿里巴巴集团控股有限公司 解释执行字节码指令流的方法及装置
CN114153391B (zh) * 2021-11-26 2024-02-27 山东云海国创云计算装备产业创新中心有限公司 一种基于寄存器的数据存储方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4974155A (en) * 1988-08-15 1990-11-27 Evans & Sutherland Computer Corp. Variable delay branch system
US20020078330A1 (en) * 1994-06-22 2002-06-20 Sgs-Thomson Microelectronics Limited Computer system for executing branch instructions
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
US20120089818A1 (en) * 2010-10-12 2012-04-12 Arm Limited Decoding instructions from multiple instructions sets

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1254661A (en) * 1985-06-28 1989-05-23 Allen J. Baum Method and means for instruction combination for code compression
US4853840A (en) * 1986-01-07 1989-08-01 Nec Corporation Instruction prefetching device including a circuit for checking prediction of a branch instruction before the instruction is executed
US5627981A (en) * 1994-07-01 1997-05-06 Digital Equipment Corporation Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination
US5850543A (en) * 1996-10-30 1998-12-15 Texas Instruments Incorporated Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return
US5964869A (en) * 1997-06-19 1999-10-12 Sun Microsystems, Inc. Instruction fetch mechanism with simultaneous prediction of control-flow instructions
US6553426B2 (en) * 1997-10-06 2003-04-22 Sun Microsystems, Inc. Method apparatus for implementing multiple return sites
US6189088B1 (en) * 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US6338136B1 (en) * 1999-05-18 2002-01-08 Ip-First, Llc Pairing of load-ALU-store with conditional branch
JP3644892B2 (ja) * 2001-01-22 2005-05-11 智原科技股▲ふん▼有限公司 複数組の命令組を実行するためのデータ処理装置
US20040128448A1 (en) * 2002-12-31 2004-07-01 Intel Corporation Apparatus for memory communication during runahead execution
JP3974063B2 (ja) * 2003-03-24 2007-09-12 松下電器産業株式会社 プロセッサおよびコンパイラ
US7293265B2 (en) * 2003-05-15 2007-11-06 Intel Corporation Methods and apparatus to perform return-address prediction
US7096348B2 (en) * 2003-12-15 2006-08-22 Freescale Semiconductor, Inc. Method and apparatus for allocating entries in a branch target buffer
US7996659B2 (en) * 2005-06-06 2011-08-09 Atmel Corporation Microprocessor instruction that allows system routine calls and returns from all contexts
US7934073B2 (en) * 2007-03-14 2011-04-26 Andes Technology Corporation Method for performing jump and translation state change at the same time
CN101344842B (zh) * 2007-07-10 2011-03-23 苏州简约纳电子有限公司 多线程处理器及其多线程处理方法
US20090229054A1 (en) 2007-07-11 2009-09-17 Yates Jamie L Body pillow cover with detachable pockets
CN101419543B (zh) * 2007-10-26 2010-12-01 瑞昱半导体股份有限公司 预测高速寄存器的存取位置的方法及系统
US8341383B2 (en) * 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
US20100023730A1 (en) * 2008-07-24 2010-01-28 Vns Portfolio Llc Circular Register Arrays of a Computer
GB2474521B (en) * 2009-10-19 2014-10-15 Ublox Ag Program flow control
US9213551B2 (en) * 2011-03-11 2015-12-15 Oracle International Corporation Return address prediction in multithreaded processors
GB2498203B (en) * 2012-01-06 2013-12-04 Imagination Tech Ltd Restoring a register renaming map

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4974155A (en) * 1988-08-15 1990-11-27 Evans & Sutherland Computer Corp. Variable delay branch system
US20020078330A1 (en) * 1994-06-22 2002-06-20 Sgs-Thomson Microelectronics Limited Computer system for executing branch instructions
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
US20120089818A1 (en) * 2010-10-12 2012-04-12 Arm Limited Decoding instructions from multiple instructions sets

Also Published As

Publication number Publication date
GB2551548B (en) 2019-05-08
GB2551548A (en) 2017-12-27
KR102307581B1 (ko) 2021-10-05
US20190121646A1 (en) 2019-04-25
CN109416632B (zh) 2023-02-28
WO2017220974A1 (en) 2017-12-28
CN109416632A (zh) 2019-03-01
US10877767B2 (en) 2020-12-29
GB201610859D0 (en) 2016-08-03

Similar Documents

Publication Publication Date Title
US7711935B2 (en) Universal branch identifier for invalidation of speculative instructions
KR102629722B1 (ko) 이동 프리픽스 명령어
US5640503A (en) Method and apparatus for verifying a target instruction before execution of the target instruction using a test operation instruction which identifies the target instruction
KR102307581B1 (ko) 레지스터 복구 분기 명령
CN108780397B (zh) 程序循环控制
TW201719389A (zh) 處理用於向量算術指令的例外狀況
JP7136888B2 (ja) 例外マスク更新命令後のトランザクションの非アボート処理の許可
JP6874264B2 (ja) ベクトルアトミックメモリ更新命令
US5761467A (en) System for committing execution results when branch conditions coincide with predetermined commit conditions specified in the instruction field
KR100303712B1 (ko) 파이프라인기계에서의어드레스파이프라인을위한방법및장치
CN112334874A (zh) 事务比较和丢弃指令
JPH09152973A (ja) カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置
US6990569B2 (en) Handling problematic events in a data processing apparatus
US7937525B2 (en) Method and apparatus for decoding a virtual machine control structure identification
US5813039A (en) Guest execution control system, method and computer process for a virtual machine system
EP1050805A1 (en) Transfer of guard values in a computer system
JP5822848B2 (ja) 例外の制御方法、システムおよびプログラム
US11663014B2 (en) Speculatively executing instructions that follow a status updating instruction
EP3462308B1 (en) Transaction nesting depth testing instruction
US10552156B2 (en) Processing operation issue control
JP3748191B2 (ja) 計算機とその制御方法
CN110799940A (zh) 内容数据管理
JP2000347858A (ja) マイクロプロセッサ
JPH0319027A (ja) データ処理装置

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