KR20100032441A - 조건부 명령을 비조건부 명령 및 선택 명령으로 확장하기 위한 방법 및 시스템 - Google Patents

조건부 명령을 비조건부 명령 및 선택 명령으로 확장하기 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20100032441A
KR20100032441A KR1020107001942A KR20107001942A KR20100032441A KR 20100032441 A KR20100032441 A KR 20100032441A KR 1020107001942 A KR1020107001942 A KR 1020107001942A KR 20107001942 A KR20107001942 A KR 20107001942A KR 20100032441 A KR20100032441 A KR 20100032441A
Authority
KR
South Korea
Prior art keywords
instruction
conditional
instructions
command
processor
Prior art date
Application number
KR1020107001942A
Other languages
English (en)
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 KR20100032441A publication Critical patent/KR20100032441A/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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3824Operand accessing

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

파이프라인 프로세서 내에서 다수의 피연산자(operand)들을 가지는 조건부(conditional) 명령을 확장하는 방법이 제시된다. 상기 방법은 발행(issue) 스테이지 이전에 조건부 명령을 식별하고, 다수의 피연산자들이 미리 결정된 임계치를 초과하는지 여부를 결정한다. 상기 방법은 조건부 명령을 비-조건부(non-conditional) 명령 및 선택 명령으로 확장한다. 상기 방법은 또한 개별적인 파이프라인들에서 비-조건부 명령 및 선택 명령을 실행한다.

Description

조건부 명령을 비조건부 명령 및 선택 명령으로 확장하기 위한 방법 및 시스템{A METHOD AND SYSTEM FOR EXPANDING A CONDITIONAL INSTRUCTION INTO A UNCONDITIONAL INSTRUCTION AND A SELECT INSTRUCTION}
본 발명은 일반적으로 컴퓨터 시스템들에 관한 것이며, 더욱 상세하게는, 조건부 명령을 비조건부 명령 및 선택 명령으로 확장하기 위한 방법 및 시스템에 관한 것이다.
프로세서 파이프라인은 많은 스테이지들로 구성되며, 각각의 스테이지는 하나의 명령과 관련된 특정한 기능을 수행한다. 각각의 스테이지는 파이프 스테이지 또는 파이프 세그먼트로 지칭된다. 상기 스테이지들은 파이프라인을 형성하기 위해 함께 연결된다. 명령들은 파이프라인의 한쪽 끝으로 입력되어 다른 쪽 끝으로 출력된다. 명령들은 파이프라인 스테이지들을 통해 스트림에서 순차적으로 플로우(flow)된다. 상기 스테이지들은 여러 개의 스테이지들이 동시에 여러 개의 명령들을 처리할 수 있도록 배치된다. 상이한 파이프라인 스테이지들에서의 동시적인 다수의 명령들의 프로세싱은 프로세서가 한 번에 하나의 명령을 처리하는 것보다 더 빠르게 명령들을 처리할 수 있도록 하며, 그에 따라 프로세서의 실행 속도를 향상시킨다.
프로세서 내에는 명령들을 처리하는 다수의 파이프라인들이 존재할 수 있다. 개별적인 파이프라인들은 고유한 프로세서 기능들을 수행할 수 있다. 예를 들어, 프로세서는 로드(load)/저장(store) 명령들을 실행하기 위한 하나의 파이프라인 및 정수(integer) 또는 로직 기반 명령들을 실행하기 위한 다른 파이프라인을 가질 수 있다. 명령의 기능에 기반하여 파이프라인들을 분리함으로써, 프로세서는 명령들을 실행할 때 자신의 자원들을 보다 효율적으로 사용할 수 있다.
프로세서가 명령들을 처리할 때, 명령을 실행하는데 필요한 정보가 수집된다. 상기 정보는 상기 명령에 있는 각각의 피연산자(operand)와 관련될 수 있다. 프로세서 내에서, 각각의 명령에 대하여 동시에 수집될 수 있는 정보량은 프로세서의 레지스터 파일 내에 있는 포트들의 개수에 의해 제한될 수 있다. 프로세서의 레지스터 파일은 판독(read) 및 기록(write)을 위해 액세스가능한 큰 어레이(array)를 포함할 수 있다. 프로세서가 지원하는 판독 포트들의 개수는 프로세서 내에 있는 사용가능한 하드웨어 공간뿐만 아니라 각각의 판독 포트를 위해 필요한 추가적인 전력에 의해 제한될 수 있다. 프로세서는 명령에 있는 각각의 피연산자와 관련되는 정보를 검색하기 위해 각각의 판독 포트를 사용한다.
프로세서의 명령 세트로 보다 복잡한 명령들이 추가되면, 명령이 실행될 때 명령들에 있는 피연산자들 모두에 대한 정보를 동시에 검색하기 위해 추가적인 판독 포트들이 요구될 수 있다. 일반적으로, 더 새로운 명령들은 판독 포트들보다 더 많은 피연산자들을 포함할 수 있다. 프로세서가 충분한 판독 포트들을 가지고 있지 않다면, 상기 명령은 실행을 위한 추가적인 프로세서 사이클들을 필요로 할 수 있다. 이에 따라, 프로세서의 효율성은 저하될 수 있다.
판독 포트들의 개수에 대한 제한과 관련되는 실행 지연에 의해 영향을 받을 수 있는 명령 중 하나의 타입은 조건부(conditional) 명령이다. 조건부 명령들은 일반적으로 조건부 부분 및 논리 기능, 산술 기능 등과 같은 비-조건부 부분을 포함한다. 판독 포트들의 부족으로 인하여, 판독 포트들보다 더 많은 피연산자들을 가지는 조건부 명령은 실행을 위해 다수의 프로세서 사이클들을 요구할 수 있다.
이에 따라 사용가능한 판독 포트들보다 더 많은 피연산자들을 가지는 조건부 명령들의 실행을 빠르게 하는 방식에 대한 산업상 필요성이 존재한다. 명령 실행은 명령의 조건부 부분을 비조건부 기능으로부터 분리함으로써 가속될 수 있다. 이러한 분리는 두 개의 더 작은 명령들을 생성하며, 각각의 작은 명령은 원래의 조건부 명령보다 더 적은 판독 포트들을 요구한다. 분리된 명령들의 실행은 프로세서의 병렬 프로세싱 능력을 이용하기 위해 상이한 파이프라인들에서 동시에 수행될 수 있다.
파이프라인 프로세서 내에서 다수의 피연산자(operand)들을 가지는 조건부(conditional) 명령을 확장(expand)하는 방법이 제시되며, 여기서 상기 파이프라인 프로세서는 다수의 파이프라인들을 가진다. 상기 방법은 발행(issue) 스테이지 이전에 상기 조건부 명령을 식별하는 단계 및 상기 다수의 피연산자들이 미리 결정된 임계치를 초과하는지 여부를 결정하는 단계를 포함한다. 상기 방법은 상기 조건부 명령을 비-조건부(non-conditional) 명령 및 선택 명령으로 확장하는 단계를 포함한다. 상기 방법은 또한 개별적인 파이프라인들에서 상기 비-조건부 명령 및 상기 선택 명령을 실행하는 단계를 포함한다.
파이프라인 프로세서 내에서 다수의 피연산자들을 가지는 조건부 명령을 확장하는 방법이 제시된다. 상기 방법은 프리-디코드(pre-decode) 스테이지 동안 상기 조건부 명령이 미리 결정된 임계치를 초과하는 피연산자들을 가지는 것을 식별하는 단계를 포함한다. 상기 방법은 상기 명령이 발행 스테이지에서 처리될 때 상기 조건부 명령을 비-조건부 명령 및 선택 명령으로 확장하는 단계를 포함한다. 상기 방법은 또한 실행 스테이지 동안 상기 비-조건부 명령 및 상기 선택 명령을 실행하는 단계를 포함한다.
파이프라인 프로세서 내에서 다수의 피연산자들을 가지는 조건부 명령을 확장하는 방법이 제시된다. 상기 방법은 발행(issue) 스테이지 이전에 상기 조건부 명령을 식별하는 단계 및 상기 다수의 피연산자들이 미리 결정된 임계치를 초과하는지 여부를 결정하는 단계를 포함한다. 상기 방법은 상기 조건부 명령을 비-조건부(non-conditional) 명령 및 선택 명령으로 확장하는 단계를 포함한다. 상기 방법은 또한 상기 비-조건부 명령 및 상기 선택 명령을 실행하는 단계를 포함한다.
프리-디코드 로직 회로를 포함하는 파이프라인 프로세서가 제시된다. 상기 프리-디코드 로직 회로는 조건부 명령이 미리 결정된 임계치를 초과하는 피연산자들을 가지는지 여부를 식별하도록 구성된다. 상기 프리-디코드 로직 회로는 발행 로직 회로와 통신하며, 상기 발행 로직 회로는 식별된 조건부 명령을 수신하고, 상기 식별된 조건부 명령을 확장하도록 구성된다. 상기 발행 로직 회로는 확장된 조건부 명령을 실행하도록 구성되는 실행 유니트들과 통신한다.
본 발명에 대한 보다 완전한 이해뿐만 아니라 본 발명의 추가적인 특징들 및 장점들은 다음의 상세한 설명 및 도면으로부터 명백해질 것이다.
도 1은 본 발명의 일 실시예를 이용하는 프로세서의 하이 레벨(high level) 하드웨어 블록 다이어그램을 나타낸다.
도 2는 도 1의 CPU의 상위 및 하위 파이프라인들의 보다 상세한 블록 다이어그램을 나타낸다.
도 3A는 도 1의 프로세서에 의해 실행되는 예시적인 명령들의 그룹을 나타낸다.
도 3B는 예시적인 확장된 명령들의 그룹을 나타낸다.
도 4A는 도 1의 프로세서에 의해 실행되는 다른 예시적인 명령들의 그룹을 나타낸다.
도 4B는 다른 예시적인 확장된 명령들의 그룹을 나타낸다.
도 5는 도 3A-3B의 예시적인 명령들의 그룹이 도 1의 프로세서의 다양한 스테이지들을 통해 실행될 때 이들의 타이밍 다이어그램을 나타낸다.
도 6은 도 1의 프로세서의 상위 및 하위 파이프라인들을 통한 예시적인 명령 플로우를 나타내는 플로우차트를 도시한다.
첨부되는 청구항들과 관련하여 아래에서 설명되는 상세한 설명은 본 발명의 다양한 실시예들에 대한 기술(description)로서 의도된 것이며, 본 발명이 실시될 수 있는 실시예들만을 나타내기 위하여 의도된 것은 아니다. 상세한 설명은 본 발명에 대한 철저한 이해를 제공하기 위한 목적으로 특정한 세부사항들을 포함한다. 그러나, 본 발명이 이러한 특정한 세부사항들 없이도 실시될 수 있다는 것은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 명백할 것이다. 몇몇 예들에서, 잘-알려진 구조들 및 컴포넌트들은 본 발명의 개념을 모호하게(obscuring) 하는 것을 방지하기 위해 블록 다이어그램 형태로 도시된다. 두문자어(acronym)들 및 다른 설명을 위한 용어는 단지 편의 및 간결함을 위해 사용될 수 있으며 본 발명의 범위를 제한하도록 의도되지 않는다.
도 1은 아래에서 설명되는 바와 같이 본 발명의 일 실시예를 이용하는 수퍼스칼라(superscalar) 프로세서(100)의 하이 레벨 뷰(view)를 도시한다. 프로세서(100)는 전용 고속 버스(104)를 통해 명령 캐시(106)로 연결되는 중앙 처리 유니트(CPU)(102)를 가진다. 명령 캐시(106)는 또한 범용(general purpose) 버스(110)를 통해 메모리(108)와 연결된다. CPU(102)는 하위 파이프라인들(160 및 165)과 연결되는 상위 파이프라인(150)을 가진다. CPU(102)는 메모리(108)로부터 명령 캐시(106)로의 명령들의 로딩을 제어한다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 명령 캐시(106)가 메모리(108) 및 프로세서(100) 간의 속도 갭(gap)을 브리징하도록 설계된 특수한 메모리일 수 있다는 것을 이해할 것이다. 메모리(108)로부터 패치(fetch)된 명령들은 프로세서 클록 속도들에서 판독될 수 있는 더 빠른 명령 캐시(106)로 배치된다. 명령 캐시(106)가 명령들로 로딩된 후에, CPU(102)는 고속 버스(104)를 통해 이들에 액세스한다. 명령들은 명령 캐시(106)로부터 상위 파이프라인(150)으로 로딩된다. 명령들이 상위 파이프라인(150)에서 처리된 후에, 이들은 추가적인 프로세싱을 위해 하위 파이프라인들(160 또는 165)로 전송된다. 도 2와 관련된 논의들에서 설명되는 바와 같이, 상위 파이프라인(150)은 미리 결정된 임계치를 초과하는 피연산자들을 가지는 조건부 명령들을 식별할 수 있는 논리 회로를 포함할 수 있다. 이러한 조건부 명령들이 식별된 후에, 프로세서(100)는 본 발명의 일 실시예에 따라 이들을 처리할 수 있다.
명령들은 순차적인 프로그램 순서로 상위 파이프라인(150)에서 나오게 된다. 상위 파이프라인(150)을 나온 후에, 명령들은 보다 효율적인 프로세싱을 위해 하위 파이프라인들(160 또는 165)로 재배치될 수 있다. 상위 파이프라인(150)에서 명령들을 통해 수행되는 몇몇 예시적인 프로세싱 기능들은 명령의 패치, 명령의 할당, 명령의 디코딩, 하위 파이프라인들(160 또는 165)로의 명령의 발행(issue) 등을 포함할 수 있다. 하위 파이프라인들(160 및 165) 내에서, 명령 프로세싱은 명령의 트래킹(tracking), 명령 실행을 위한 피연산자 정보 검색, 명령의 실행, 명령 결과들의 기록(recording) 등을 포함할 수 있다.
하위 파이프라인들(160 및 165)은 산술 로직 유니트들, 플로팅(floating) 포인트 유니트들, 저장 유니트들, 로드 유니트들 등과 같은 다양한 실행 유니트들(EU)(130)을 포함할 수 있다. 예를 들어, EU(130)는 정수 덧셈, 정수 뺄셈, 정수 곱셈, 비트와이즈(bitwise) 로직 연산들(예를 들어, AND, NOT, OR, XOR), 비트 시프팅 등과 같은 폭넓은 범위의 산술 기능들을 실행하기 위한 산술 로직 유니트들을 가질 수 있다. 대안적으로, EU(130)는 MOV, LOAD 등과 같은 로드/저장 연산들을 수행하기 위한 실행 유니트들을 가질 수 있다. 프로세서(100)의 효율성을 증가시키기 위해, 하위 파이프라인들(160 및 165)은 특정 기능들을 수행하도록 구성될 수 있다. 예를 들어, 하위 파이프라인(160)은 산술 및 논리 명령들을 실행하는 EU(130)들을 포함할 수 있으며, 하위 파이프라인(165)은 로드/저장 명령들을 실행하는 EU(130)들을 포함할 수 있다. 특정한 명령 기능을 개별적인 하위 파이프라인들(160 또는 165)로 분리함으로써, 이중(duplicate) EU(130)들은 요구되지 않을 수 있다.
본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 파이프라인 스테이지가 명령을 홀딩(hold)하도록 설계되는 레지스터 또는 레지스터들의 그룹을 포함할 수 있다는 것을 이해할 수 있다. 명령이 특정한 스테이지로 진입하면, 프로세서(100)는 상기 명령을 상기 스테이지로 링크되는 레지스터 또는 레지스터들의 그룹으로 로딩한다. 명령이 각각의 스테이지 내의 레지스터 또는 레지스터들의 그룹에 홀딩되면, 로직 회로들은 상기 명령에 따른 특정한 연산들을 수행할 수 있다. 로직 회로들이 의도된 연산을 수행한 후에, 상기 명령은 순차적으로 다음 스테이지로 전달된다.
도 2는 CPU(102)의 상위 파이프라인(150)의 보다 상세한 블록 다이어그램을 나타낸다. 상위 파이프라인(150)은 고속 버스(104)에 의해 명령 캐시(106)로 연결되는 패치 로직 회로(202)를 가진다. 패치 로직 회로(202)는 또한 프리-디코드(pre-decode) 로직 회로(201) 및 패치 스테이지(203)와 연결된다. 패치 스테이지(203)는 디코드 스테이지(205)와 연결되며, 디코드 스테이지(205)는 발행(issue) 스테이지(207)와 연결된다. 디코드 스테이지(205)는 디코드 로직 회로(204)와 연결된다. 유사하게, 발행 스테이지(207)는 발행 로직 회로(206)와 연결된다. 발행 스테이지(207) 내에는 하위 파이프라인들(160 및 165)로 발행하는 명령들 이전에 상기 명령들을 홀딩하는 (설명의 편의를 위해 도시되지 않는) 여러 개의 명령 큐(queue)들이 있다. 명령 큐들은 하위 파이프라인들(160 또는 165) 중 하나에서 처리될 명령들을 수용하도록 구성될 수 있다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 이해되는 바와 같이, 명령 큐들은 FIFO(first in first out) 버퍼들로서 동작하며, 발행되기 전에 순차적인 순서로 명령들을 홀딩한다.
명령들은 상위 파이프라인(150)으로 진입하여 패치 스테이지(203)로부터 발행 스테이지(207)까지 이동한다. 명령들이 발행 스테이지(207)를 나온 후에, 상기 명령들은 하위 파이프라인(160) 또는 하위 파이프라인(165)에서 실행된다. 하위 파이프라인(160) 내에서는 실행 스테이지(220) 및 EU(130)들이 있다. 하위 파이프라인(165)은 실행 스테이지(225) 및 EU(130)들을 가진다. 하위 파이프라인들(160 및 165)은 각각 레지스터 파일들(230 또는 235)로 액세스한다. 일 실시예에서, 레지스터 파일들(230 및 235)은 서로에 대하여 미러(mirror) 이미지들일 수 있다. 일 실시예에서, 명령을 실행 스테이지(220 또는 225)에서 실행할 때, 레지스터 파일들(230 및 235)은 명령 피연산자 정보를 제공하기 위한 3개의 판독 포트들을 가질 수 있다.
상위 파이프라인(150)에서, 패치 로직 회로(202)는 명령들을 결정하고 순차적으로 상기 명령들을 패치한다. 패치 프로세스의 일부로서, 프로세서(100)는 먼저 명령들이 이미 명령 캐시(106) 내에 있는지 여부를 결정한다. 명령들이 아직 명령 캐시(106) 내에 있지 않다면, 프로세서(100)는 메모리(108)로부터 명령들을 검색하고 이들을 명령 캐시(106)로 로딩한다. 프리-디코드 로직 회로(201)는 명령이 명령 캐시(106)로 로딩되기 전에 상기 명령에 대한 특성 정보를 결정하기 위해 패치 로직 회로(202)와 인터페이싱한다. 예를 들어, 프리-디코드 로직 회로(201)는 조건부 명령이 명령 캐시(106)로 로딩되기 전에 상기 명령의 피연산자들이 미리 결정된 임계치를 초과하는 조건부 명령임을 식별할 수 있다. 이러한 예에서, 프리-디코드 로직 회로(201)는 명령 캐시(106) 내에 있는 상기 명령을 "태깅(tag)"할 수 있으며, 그리하여 상기 명령이 이러한 특성 정보를 가진다는 것을 식별한다. 상기 특성 정보는 명령의 프로세싱 속도를 높이기 위해 상위 파이프라인(150) 내에 있는 다른 로직 회로들에 의해 이용될 수 있다.
명령 캐시(106)에서, 명령들은 캐시 라인들로 알려져 있는 섹션들로 그룹핑(grouped)된다. 각각의 캐시 라인은 다수의 명령들을 포함할 수 있다. 각각의 캐시 라인에서, 명령들과 관련되는 추가적인 정보가 저장될 수 있다. 명령들은 한 번에 여러 개의 명령들이 명령 캐시(106)로부터 패치될 수 있다. 명령들이 패치 로직 회로(202)에 의해 패치된 후에, 명령들은 디코드 스테이지(205)로 전송된다.
디코드 스테이지(205)에서, 명령에 대한 모든 특성들을 식별하기 위해 명령들은 디코드 로직 회로(204)에 의해 디코딩된다. 이전에 언급된 바와 같이, 프리-디코드 로직 회로(201)는 명령의 일반적인 특성들을 식별할 수 있다. 디코드 스테이지(205)에서 명령과 관련되는 추가적인 정보가 식별된다. 예를 들어, 명령의 타입(즉, ADDEQ, SUBEQ, AND 등), 명령으로 어드레싱되는 특정한 레지스터들, 명령에 대한 임의의 의존성(dependency)들이 디코드 로직 회로(204)에 의해 디코드 스테이지(205)에서 식별된다. 디코드 스테이지(205) 동안 검색되거나 또는 식별되는 정보는 프로세서(100)로 하여금 하위 파이프라인들(160 또는 165) 중 어떤 하위 파이프라인이 추가적인 프로세싱을 위해 명령을 수신할 것인지 여부를 결정할 수 있도록 한다. 명령이 디코드 스테이지(205)에서 처리된 후에, 상기 명령은 발행 스테이지(207)로 이동한다.
발행 스테이지(207)에서, 발행 로직 회로(206)는 어떤 하위 파이프라인(160 또는 165)이 명령들을 수신할 것인지 여부를 결정한다. 하위 파이프라인(160)은 산술 명령들을 실행하도록 설계될 수 있으며, 하위 파이프라인(165)은 로드/저장 명령들을 실행하도록 설계될 수 있다. 발행 로직 회로(206)는 하위 파이프라인들(160 또는 165) 중 어떤 하위 파이프라인으로 명령이 실행을 위해 전송될 것인지 여부에 따라 명령 큐들에 명령들을 배치한다. 도 3A-3B 및 4A-4B와 관련하여 보다 상세하게 논의될 바와 같이, 발행 로직 회로(206)는 프로세서의 효율성을 증가시키기 위해 프리-디코드 로직 회로(201)에 의해 태깅되었던 특정한 명령을 확장할 수 있다.
발행 스테이지(207)로부터, 명령들은 실행을 위해 하위 파이프라인들(160 및 165)로 전송된다. 예비(reservation) 스테이지, 레지스터 액세스 스테이지 등과 같은 다른 다양한 스테이지들이 하위 파이프라인들(160 및 165) 내에 존재할 수 있으나, 설명의 편의를 위해 이들은 도시되지 않는다. 명령이 실행 스테이지(220 또는 225)로 도달하면, 프로세서(100)는 명령을 실행하는데 필요한 피연산자 정보를 검색하기 위해 적절한 레지스터 파일(230 또는 235)로 액세스한다. 이전에 언급된 바와 같이, 레지스터 화일들(230 및 235)은 서로에 대하여 미러 이미지들일 수 있다. 그리하여, 프로세서(100)가 레지스터 파일(230)을 업데이트할 때, 프로세서(100)는 또한 레지스터 파일(235)을 업데이트한다. 레지스터들(230 및 235)의 이중 복사본들을 사용하여, 프로세서(100)는 각각의 하위 파이프라인(160 또는 165) 내에서 다수의 명령들을 동시에 실행할 수 있다. 정보가 레지스터 파일들로부터 검색된 후에, EU(130)들은 명령들을 수행하고 명령 실행의 결과들은 레지스터 파일들(230 및 235)로 다시 기록된다.
도 3A는 프로세서(100)에 의해 실행될 수 있는 예시적인 명령들의 그룹(300)을 나타낸다. 도 3A에 있는 명령 A는 4개의 소스 피연산자들 R1, R2, R3 및 R4를 가지는 조건부 덧셈(add) 명령이다. 명령의 소스 피연산자들은 레지스터 파일들(230 및 235)로부터 판독 포트들을 통해 판독되는 정보에 대응한다. 레지스터 파일들(230 또는 235)로 전송되는 정보는 목적지 피연산자들에 의해 지정될 수 있으며 기록 포트들을 사용하여 레지스터 파일들(230 및 235)로 기록된다. 명령 B는 2개의 소스 피연산자들(R7 및 R6) 및 하나의 목적지 피연산자(R5)를 가지는 뺄셈(subtraction) 명령이다. 명령 C는 2개의 소스 피연산자들(R5 및 R8) 및 하나의 목적지 피연산자(R9)를 가지는 곱셈(multiply) 명령이다.
상세하게 설명되는 바와 같이, 원래의 형태에서의 명령 A는 프로세서(100)에 의해 실행되지 않을 수 있다. 대신에, 본 발명의 일 실시예를 이용하여, 프로세서(100)는 보다 효율적인 프로세싱을 위해 명령 A를 2개의 더 작은 명령들로 수정할 수 있다. 설명의 편의를 위해, 다양한 실시예들의 발명 개념들을 이해하도록 명령 A는 기존의 프로세서에 의해 실행되는 것으로 설명된다.
기존의 프로세서에 의한 명령 A(조건부 ADD 명령)의 프로세싱 동안, 소스 피연산자들 R1, R2, R3 및 R4에 대한 값들은 레지스터 파일들(230 또는 235)로부터 판독된다. 소스 피연산자들에 대한 값들이 판독된 후에, 레지스터 R3에 있는 값은 R4에 포함된 값만큼 시프트되고 결과들은 레지스터 R2의 컨텐츠와 함께 더해진다. 조건부 제로(Zero) 플래그(flag)가 "0"이면, 상기 덧셈의 결과들은 R1에 저장된다. 제로 플래그가 "1"이면, 레지스터 R1의 컨텐트는 자신의 이전 값으로 리스토어(restore)된다.
본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 ARM® 프로세서 내에 있는 조건부 플래그들이 NZCV 상태 비트들(N=네거티브(Negative), Z=제로(Zero), C=올림(Carry), V=오버플로우(Overflow))에 대응할 수 있다는 것을 이해할 것이다. 조건부 플래그들은 비교 명령 등과 같은 특정한 명령들에 의해 설정될 수 있다. 프로세서(100)는 조건부 명령을 실행하는지 여부를 결정하기 위해 조건부 플래그들을 사용한다. 조건부 명령이 충족되지 않는 조건에 기인하여 실행되지 않으면, 프로세서는 이전에 판독된 값을 다시 타겟 레지스터로 재기록한다. 명령 A에 대하여, 타겟 레지스터는 R1이다.
명령 A에 대한 기존의 프로세싱 동안, R1의 값은 상태 플래그에 따라서 계산된 새로운 값이거나 또는 R1의 이전 값일 것이다. 조건이 충족되지 않으면(즉, 조건부 제로 플래그="0"), 기존의 프로세서는 R1의 기록을 취소할 것이다. 기존의 프로세서가 이러한 기능을 수행하는 하나의 방식은 레지스터 재명명(renaming)을 사용하는 것이다. 구체적으로, 명령 A가 실행될 때, R1의 예전(old) 값은 판독되어 다른 레지스터에 저장될 것이며, 상기 명령이 실행되지 않았다면, 레지스터는 R1으로 재명명될 것이다. 이러한 예에서 레지스터 재명명을 이용하는 것은 추가적인 처리 시간뿐만 아니라 다른 프로세서 자원들을 필요로 할 수 있다. 본 발명의 실시예들은 명령의 조건성(conditionality)이 충족되지 않을 때 레지스터들을 재명명할 필요를 없앨 수 있다.
이전에 언급된 바와 같이, 프로세서(100)는 레지스터 파일(230 또는 235)당 3개의 판독 포트들을 가질 수 있다. 명령 A는 4개의 소스 피연산자들을 가지기 때문에, 소스 피연산자들이 개수가 1개만큼 판독 포트들의 개수를 초과한다. 레지스터 파일들(230 및 235)에 대한 판독 포트들의 개수는 조건부 명령이 확장을 위해 적절한지 여부를 결정하기 위한 미리 결정된 임계치로서 사용될 수 있다. 대안적인 실시예에서, 레지스터 파일당 오직 2개의 판독 포트들을 가지는 프로세서는 미리 결정된 임계치로서 2를 가질 수 있다.
명령 A가 패치 스테이지(203)에서 처리되었을 때, 프리-디코드 로직 회로(201)는 명령 A가 판독 포트들보다 더 많은 피연산자들을 가지는 조건부 명령이며 미리 결정된 임계치를 초과한다는 것을 식별하였을 수 있다. 이러한 예에서, 명령 A는 명령 캐시(106)로 로딩되었을 때 이러한 정보를 가지도록 "태깅(tagged)"되었을 수 있다. 일 실시예에서, 태깅된 정보는 명령 A가 발행 스테이지(207)에서 처리될 때 명령 A를 2개의 더 작은 명령들로 확장하기 위해 발행 로직 회로(206)에 의해 사용된다. 그 다음에 2개의 더 작은 명령들 각각은 개별적인 파이프라인들로 라우팅되어 동시에 실행될 수 있다.
하나의 예시적인 실시예에서, 명령 A는 발행 스테이지(207)에서 처리될 때 도 3B에 도시된 바와 같은 명령들 A1 및 A2의 그룹에 의해 대체된다. 발행 로직 회로(206)는 명령 A가 2개의 더 작은 명령들로 확장될 수 있다는 것을 식별하기 위해 태깅된 정보를 사용한다. 그 결과, 발행 로직 회로(206)는 (명령 A1에 반영되는 바와 같이) 조건부 부분을 제거함으로써 명령 A를 수정하고 개별적인 선택 명령 A2를 생성한다. 도 3B에 도시되는 확장에서, 선택 명령 A2는 명령 A의 동일한 조건성을 반영하는 조건부 MOV 명령이다. 다시 말하면, 명령 A 및 A2의 조건성은 Z 비트가 "0"과 동일하다는 조건으로 설정된다. 명령 확장 프로세스를 단순화하기 위해, 확장된 명령의 원래의 조건성을 반영하는 조건부 MOV 명령은 디폴트(default) 선택 명령으로서 사용될 수 있다. 다른 프로세서 아키텍처들에서는, 다른 조건부 명령들이 디폴트 선택 명령으로서 사용될 수 있다. 명령들 A1 및 A2는 기능적으로 상이하기 때문에(즉, 명령 A1은 산술 명령이고, A2는 로드/저장 명령 타입), 이들은 개별적인 파이프라인들에서 실행될 수 있다. 그 결과, 명령들 A1 및 A2는 발행 스테이지(207) 내에서 상이한 명령 큐들로 삽입될 수 있다. 발행될 때, 명령 A1은 실행을 위해 하위 파이프라인(160)으로 전송될 수 있는 반면에, 명령 A2는 실행을 위해 하위 파이프라인(165)으로 전송될 수 있다.
명령 A1은 3개의 소스 피연산자들 R4, R3 및 R2 및 하나의 목적지 피연산자 T1을 가진다. 명령 A1은 레지스터 R3에 있는 값을 R4에 포함된 값만큼 시프트하고 결과들은 레지스터 R2의 컨텐츠와 함께 더해진다. 명령 A1의 결과들은 임시 레지스터 T1에 저장된다. 선택 명령 A2는 조건부 이동(move) 명령이며, 조건부 플래그 Z 비트가 "0"이면 T1의 값을 R1으로 이동시킨다. 선택 명령 A2는 T1의 값을 R1으로 기록할 것인지 또는 R1의 값이 변경되지 않게 둘 것인지 여부를 선택한다.
발행 로직 회로(206)가 명령들 A1 및 A2를 생성할 때, 프로세서(100)는 또한 명령 A1이 선택 명령 A2에 대한 의존성을 가진다는 것을 식별한다. 구체적으로, 데이터 해저드(hazard)가 명령 A1 및 A2 사이에 존재한다. 프로세서(100)는 명령 A1이 완료될 때까지 선택 명령 A2를 실행하지 않을 것이며, 그렇지 않으면 RAW(Read After Write) 해저드가 발생한다. 이를 위해, 프로세서(100)는 선택 명령 A2를 실행하기 전에 명령 A1의 결과들이 사용가능할 때까지 기다린다.
일 실시예에서, 프로세서(100)는 하위 파이프라인(160)과 같은 하나의 하위 파이프라인에서 산술 명령들을 실행할 수 있고, 다른 파이프라인(165)에서 로드/저장 명령들을 실행할 수 있다. 여기에서 제시되는 실시예들은 2개의 파이프라인들보다 더 많은 파이프라인들을 가지는 프로세서들로 적용될 수 있다. 이러한 실시예에서, 명령이 발행 스테이지(207)에서 처리될 때 확장된 명령들을 어떤 하위 파이프라인으로 전송할 지에 대한 선택은 발행 로직 회로(206)에 의해 이루어진다.
도 4A는 프로세서(100)에 의해 실행될 수 있는 다른 명령들의 그룹(400)을 나타낸다. 도 4A에 있는 명령 D는 4개의 소스 피연산자들 R1, R2, R3 및 R4를 가지는 배타적 OR 비동일(exclusive or not equal) 명령이다. 명령 E는 뺄셈 명령이며 명령 F는 OR 명령이다. 명령 D가 프로세서(100)에 의해 실행되면, 소스 피연산자들 R1, R2, R3 및 R4에 대한 값들은 레지스터 파일들(230 및 235)로부터 판독된다. 명령 D 내에서 레지스터 R3의 값은 R4에 포함된 값만큼 시프트되고 결과들은 레지스터 R2의 컨텐츠와 함께 배타적 OR로 연산된다. 조건부 제로 플래그가 "1"이면, 배타적 OR의 결과들은 R1에 저장된다. 제로 플래그가 "0"이면, 레지스터 R1의 컨텐츠는 자신의 이전 값으로 리스토어된다.
다른 예시적인 예에서, 명령 D가 발행 스테이지(207)에서 처리될 때 명령 D는 도 4B에 도시된 명령들 D1 및 D2의 그룹에 의해 대체된다. 프로세서(100)가 명령들의 그룹(300)으로 명령 A를 처리하는 방식과 유사하게, 발행 로직 회로(206)는 명령 D가 2개의 더 작은 명령들로 확장될 수 있다는 것을 식별하기 위해 태깅된 정보를 이용한다. 그 결과, 발행 로직 회로(206)는 (명령 D1에 반영되는 바와 같이) 조건부 부분을 제거함으로써 명령 D를 수정하고 선택 명령 D2를 생성한다. 도 4B의 실시예에서 도시되는 바와 같이, 선택 명령 D2는 명령 D의 동일한 조건성을 반영하는 조건부 MOV 명령이다. 명령 D 및 선택 명령 D2의 조건성은 비동일(Not Equal) 조건(Z 플래그 = "1")에 기반한다. 명령들 D1 및 D2가 발행 스테이지(207)로 삽입된 후에, 이들은 적절한 명령 큐들로 로딩되고 실행을 위해 상이한 하위 파이프라인들(160 및 165)로 전송된다.
명령 D1은 R3에 있는 값을 R4에 포함된 값만큼 시프트하고 상기 시프트의 결과는 레지스터 R2의 컨텐츠와 배타적 OR로 연산된다. 배타적 OR의 결과들은 임시 레지스터 T1에 저장된다. 선택 명령 D2는 조건부 플래그 Z 비트가 "1"이면 T1의 값을 R1으로 이동시키는 조건부 이동 명령이다. 선택 명령 A2와 유사하게, 선택 명령 D2는 T1의 값을 R1으로 기록할 것인지 또는 R1의 값이 변경되지 않도록 유지할 것인지 여부를 결정한다.
발행 로직 회로(206)가 명령들 D1 및 D2를 생성하면, 프로세서(100)는 또한 명령 D1이 명령 D2에 의존성을 가지는 것을 식별한다. 명령 D2는 명령 D1이 완료될 때까지 실행할 수 없으며, 그렇지 않으면 RAW(Read After Write) 해저드가 발생한다. 프로세서(100)는 명령 D2를 실행하기 전에 명령 D1의 결과들이 사용가능할 때까지 기다린다.
도 5는 명령들의 그룹들(300)이 상위 파이프라인(150) 및 하위 파이프라인들(160 및 165)의 다양한 스테이지들을 통해 처리될 때 이들의 타이밍 다이어그램(500)을 나타낸다. 타이밍 다이어그램(500)에서, 프로세서 사이클(502)은 Y-축(504)을 따라서 표시되며, 프로세서(100) 내의 스테이지들(패치 스테이지(203), 디코드 스테이지(205), 발행 스테이지(207), 실행 스테이지(220) 및 실행 스테이지(225))은 X-축(506)을 따라서 식별된다. 타이밍 다이어그램(500)에서 표시되는 명령들은 이들이 다양한 스테이지들로 진입하는 것으로 도시된다. 일 실시예에서, 타이밍 다이어그램(500)은 각각의 프로세서 사이클에서 각각의 스테이지로 진입하는 하나의 명령을 표시한다. 그러나, 대안적인 실시예들에서, 프로세서(100)는 프로세서 사이클마다 다수의 명령들을 처리할 수 있다. 여기에서 제시되는 내용은 단일(single) 명령 발행 또는 다수의 명령 발행 프로세서들로 적용될 수 있다. 설명의 편의를 위해, 명령들이 유사하게 확장될 수 있기 때문에 동일한 타이밍 다이어그램이 명령들의 그룹(400)에 적용될 수 있더라도 명령들의 그룹(300)에 대하여 논의하도록 한다.
도 5에 도시된 바와 같이, 명령 A는 프로세서 사이클 1에서 명령 캐시(106)로부터 패치 스테이지(203)로 패치된다. 명령 캐시(106)로부터 패치되는 명령 A에 앞서서, 패치 로직 회로(202)는 메모리(108)로부터 명령 A를 검색한다. 명령 A가 메모리(108)로부터 명령 캐시(106)로 로딩되면, 프리-디코드 로직 회로(201)는 명령 A가 조건부 명령인지 여부를 결정한다. 명령 A는 조건부 명령이기 때문에, 프리-디코드 로직 회로(201)는 계속해서 명령 A의 소스 피연산자들이 미리 결정된 임계치를 초과하는지 여부를 결정한다. 명령 A는 4개의 피연산자들을 가지며 미리 결정된 임계치는 3이기 때문에, 명령 A는 확장되도록 태깅된다.
패치 스테이지(203)로부터, 명령 A는 프로세서 사이클 2에서 디코드 로직 회로(204)에 의해 디코드 스테이지(205)에서 처리된다. 디코드 스테이지(205) 동안, 프로세서(100)는 명령 A가 조건부 덧셈 명령임을 식별한다. 또한 디코드 스테이지(205) 동안, 프로세서는 피연산자 정보뿐만 아니라 명령 A와 링크된 임의의 의존성들을 식별할 수 있다. 명령 A가 조건부 덧셈 명령이기 때문에, 프로세서(100)는 하위 파이프라인(160)이 산술 연산들을 지원하는 EU들을 포함하는 경우에 명령 A가 하위 파이프라인(160)으로 향하도록 할 수 있다. 그러나, 명령 A가 프리-디코드 로직 회로(201)에 의해 태깅되었기 때문에, 명령 A는 자신의 원래 형태로 하위 파이프라인들(160)로 전송되지 않을 수 있다. 명령 A가 디코드 스테이지(205)에서 처리된 후에, 명령 A는 프로세서 사이클 3에서 발행 스테이지(207)로 전송된다. 또한, 프로세서 사이클 2 동안, 명령 B가 패치 로직 회로(202)에 의해 패치 스테이지(203) 동안 패치된다.
프로세서 사이클 3에서, 프로세서는 명령 캐시(106)로부터 명령 C를 패치하며, 명령 B는 디코드 로직 회로(204)에 의해 디코드 스테이지(205)에서 처리된다. 명령 A가 프로세서 사이클 3에서 발행 스테이지(207)로 로딩될 때, 발행 로직 회로(206)는 명령 A가 태깅된 명령임을(예를 들어, 명령 A가 판독 포트들보다 더 많은 소스 피연산자들을 가지는 조건부 명령임을) 식별하고, 일 실시예에 따라 명령 A를 수정한다. 명령 A 대신에, 발행 로직 회로(206)는 명령들 A1 및 A2를 명령 스트림으로 삽입하며 보다 구체적으로 발행 스테이지(207) 내의 적절한 명령 큐로 삽입한다.
프로세서(100)가 명령들 A1 및 A2를 발행할 때, 프로세서(100)는 프로세서 사이클 4에서 도시되는 바와 같이 명령들을 상이한 파이프라인들로 라우팅한다. 프로세서 사이클 4에서, 명령 A1은 하위 파이프라인(160)의 실행 스테이지(220)에서 실행되는 반면에, 명령 A2는 하위 파이프라인(165)의 실행 스테이지(225)에서 실행된다. 상이한 파이프라인들에서 A1 및 A2를 실행함으로써, 두 개의 명령들은 동일한 프로세서 사이클 동안 실행될 수 있으며, 이는 프로세서(100)의 프로세싱 효율성을 증가시킨다. 프로세서 사이클 4에서 명령들 A1 및 A2를 실행하는 동안, 레지스터 파일들(230 및 235) 모두는 프로세서(100)에 의해 액세스된다. 먼저, 명령 A1이 실행되고 그 다음에 동일한 프로세서 사이클 동안 명령 A2가 실행된다. 단순화하기 위한 목적으로, 타이밍 다이어그램(500)은 실행 스테이지들(220 및 225)로 도달하기 위해 오직 하나의 프로세서 사이클만을 필요로 하는 명령들 A1 및 A2를 도시하고 있다. 그러나, 실제적으로, 명령들 A1 및 A2는 실행 스테이지들(220 및 225)로 도달하기 위해 여러 개의 프로세서 사이클들을 취할 수 있다. 프로세서 사이클 4 동안, 명령 B는 발행 스테이지(207)에서 처리되고 명령 C는 디코드 스테이지(205)에서 처리된다.
프로세서 사이클 5에서, 명령들 A1 및 A2는 자신들의 실행을 완료하며 레지스터 파일들(230 및 235)은 그러한 결과들로 업데이트된다. 또한, 프로세서 사이클 5에서, 명령 B는 실행 스테이지(220)에서 실행되고 명령 C는 발행 스테이지(207)에서 처리된다.
이전에 논의된 바와 같이, 다른 조건부 명령들이 선택 명령(즉, 명령 A2 또는 명령 D2)을 위해 사용될 수 있다. 예를 들어, 선택 명령을 위해 MOVEQ 명령 대신에, 아래에서 도시되는 ADDEQ 명령이 각각 명령들 A2 또는 D2에 대하여 사용될 수 있다:
A3: ADDEQ R1, T1, #0; 또는
D3: ADDNE R1, T1, #0
이러한 예에서, 2개의 하위 파이프라인들(160 및 165)은 산술 명령들을 지원하는 EU(130)들을 가질 수 있다. 명령 A3 내에서, 제로가 임시 레지스터 T1의 컨텐츠에 더해지며, 조건부 플래그 Z 비트가 "1"일 때 결과들은 R1으로 기록된다. 명령 D3 내에서, 제로가 임시 레지스터 T1의 컨텐츠에 더해지며, 조건부 플래그 Z 비트가 "0"일 때 결과들은 R1으로 기록된다.
도 6은 본 발명의 일 실시예에 의해 수행되는 프로세스(600)를 나타내는 플로우차트이다. 프로세스(600)는 시작 블록 602에서 개시된다. 블록 604에서, 프로세서(100)는 명령을 패치하기 위해 패치 로직 회로(202)를 사용한다. 명령이 명령 캐시(106) 내에 상주하지 않으면, 패치 로직 회로(202)는 메모리(108)로부터 명령들을 검색한다. 메모리(108)로부터 명령을 패치하고 상기 명령을 명령 캐시(106)로 넣는 동안, 블록 606에서 프리-디코드 로직 회로(201)는 상기 명령이 조건부 명령인지 여부를 결정한다. 상기 명령이 조건부 명령이 아니면, 프로세스는 블록 612로 진행한다. 상기 명령이 조건부 명령이면, 프로세스(600)는 결정 블록 608로 진행한다.
결정 블록 608에서, 프리-디코드 로직 회로(201)는 조건부 명령의 피연산자들의 개수가 미리 결정된 임계치를 초과하는지 여부를 결정한다. 이전에 언급된 바와 같이, 미리 결정된 임계치는 각각의 레지스터 파일(230 또는 235)에 대한 판독 포트들의 개수에 대응할 수 있다. 결정 블록 608에서, 조건부 명령의 피연산자들이 미리 결정된 임계치를 초과하면, 프로세스(600)는 블록 610으로 진행한다. 조건부 명령에 대한 피연산자들의 개수가 미리 결정된 임계치를 초과하지 않으면, 프로세스(600)는 블록 612로 계속된다.
블록 610에서, 프로세서(100)는 확장될 수 있는 조건부 명령으로서 상기 조건부 명령을 태깅한다. 상기 조건부 명령이 명령 캐시(106)로 기록될 때 태깅된 정보는 프리-디코드 로직 회로(201)에 의해 기록될 수 있다. 보다 구체적으로, 태깅된 정보는 조건부 명령을 위한 캐시 라인에 상주할 수 있다. 블록 610으로부터, 프로세스(600)는 블록 612로 계속된다.
블록 612에서, 명령들은 디코드 스테이지(205)에서 처리된다. 이전에 언급된 바와 같이, 상기 명령들이 디코드 스테이지(205)에서 처리될 때, 프로세서(100)는 상기 명령을 실행하는데 필요한 나머지 정보 모두를 식별한다. 디코드 스테이지(205)로부터, 블록 614에 도시된 바와 같이, 상기 명령들은 발행 스테이지(207)로 전송된다. 발행 스테이지(207) 내에서 발생하는 프로세싱의 일부로서, 결정 블록 616에서 프로세서(100)는 상기 명령이 피연산자들이 미리 결정된 임계치를 초과하는 조건부 명령으로서 태깅되었는지 여부를 결정한다. 상기 명령이 태깅되었다면, 블록 618에 도시되는 바와 같이 상기 조건부 명령이 확장되고 적절한 파이프라인들에서 실행된다. 블록 618로부터, 프로세스(600)는 블록 620에서 종료한다. 상기 명령이 태깅되지 않았다면, 상기 명령은 적절한 파이프라인을 통해 전달되고 프로세스(600)는 블록 620에서 종료한다.
여기에서 제시되는 실시예들과 관련하여 설명되는 다양한 예시적인 논리 블록들, 모듈들, 회로들, 엘리먼트들 및/또는 컴포넌트들은 범용 프로세서, 디지털 신호 프로세서(DSP), 애플리케이션 특정 집적 회로(ASIC), 필드 프로그래밍 가능한 게이트 어레이(FPGA) 또는 다른 프로그램 가능한 로직 컴포넌트, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들, 또는 여기에 설명되는 기능들을 수행하기 위해 설계되는 이들의 임의의 결합을 통해 구현되거나 또는 수행될 수 있다. 범용 프로세서는 마이크로프로세서일 수 있으며, 대안적으로 상기 프로세서는 임의의 기존의 프로세서, 제어기, 마이크로컨트롤러 또는 상태 머신일 수 있다. 프로세서는 컴퓨팅 컴포넌트들의 결합, 예를 들어, DSP 및 마이크로프로세서의 결합, 다수의 마이크로프로세서들, DSP 코어와 결합되는 하나 이상의 마이크로프로세서들, 또는 임의의 다른 이러한 구성으로서 구현될 수 있다.
여기에서 특정한 실시예들이 설명되고 도시되었지만, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 동일한 목적을 달성하기 위해 계산되는 임의의 배치가 특정한 실시예들을 위해 적용될 수 있으며, 그러한 발명이 다른 환경들의 다른 애플리케이션들을 포함할 수 있다는 것을 이해할 것이다. 이러한 애플리케이션은 본 발명의 임의의 적용 또는 변형들을 커버하도록 의도된다. 다음의 청구항들은 여기에서 설명되는 특정한 실시예들로 본 발명의 범위를 제한하고자 의도되지 않는다.

Claims (20)

  1. 파이프라인 프로세서 내에서 다수의 피연산자(operand)들을 가지는 조건부(conditional) 명령을 확장하는 방법으로서, 상기 파이프라인 프로세서는 다수의 파이프라인들을 가지며, 상기 방법은,
    발행(issue) 스테이지 이전에 상기 조건부 명령을 식별하는 단계;
    상기 다수의 피연산자들이 미리 결정된 임계치를 초과하는지 여부를 결정하는 단계;
    상기 조건부 명령을 비-조건부(non-conditional) 명령 및 선택 명령으로 확장하는 단계; 및
    개별적인 파이프라인들에서 상기 비-조건부 명령 및 상기 선택 명령을 실행하는 단계를 포함하는, 조건부 명령을 확장하는 방법.
  2. 제 1 항에 있어서,
    상기 선택 명령은 조건부 MOV 명령인, 조건부 명령을 확장하는 방법.
  3. 제 1 항에 있어서,
    상기 선택 명령은 조건부 ADD 명령인, 조건부 명령을 확장하는 방법.
  4. 제 1 항에 있어서,
    상기 미리 결정된 임계치는 레지스터 파일 상의 판독 포트들의 개수와 동일한, 조건부 명령을 확장하는 방법.
  5. 제 4 항에 있어서,
    상기 레지스터 파일은 3개의 판독 포트들을 가지는, 조건부 명령을 확장하는 방법.
  6. 제 1 항에 있어서,
    상기 조건부 명령은 발행 스테이지에서 확장되는, 조건부 명령을 확장하는 방법.
  7. 제 1 항에 있어서,
    확장된 명령들은 발행되기 전에 상기 발행 스테이지 내의 상이한 명령 큐(queue)들로 전송되는, 조건부 명령을 확장하는 방법.
  8. 제 1 항에 있어서,
    실행을 위해 상기 비-조건부 명령 및 상기 선택 명령을 개별적인 파이프라인들로 전송하는 단계를 더 포함하는, 조건부 명령을 확장하는 방법.
  9. 파이프라인 프로세서 내에서 다수의 피연산자들을 가지는 조건부 명령을 확장하는 방법으로서,
    프리-디코드(pre-decode) 스테이지 동안 상기 조건부 명령이 미리 결정된 임계치를 초과하는 피연산자들을 가지는 것을 식별하는 단계;
    상기 명령이 발행 스테이지에서 처리될 때 상기 조건부 명령을 비-조건부 명령 및 선택 명령으로 확장하는 단계; 및
    실행 스테이지 동안 상기 비-조건부 명령 및 상기 선택 명령을 실행하는 단계를 포함하는, 조건부 명령을 확장하는 방법.
  10. 제 9 항에 있어서,
    상기 선택 명령은 조건부 MOV 명령인, 조건부 명령을 확장하는 방법.
  11. 제 9 항에 있어서,
    상기 선택 명령은 조건부 ADD 명령인, 조건부 명령을 확장하는 방법.
  12. 제 9 항에 있어서,
    상기 피연산자들은 다수의 판독 포트들을 가지는 레지스터 파일로부터 정보를 수신하고 상기 미리 결정된 임계치는 판독 포트들의 개수와 동일한, 조건부 명령을 확장하는 방법.
  13. 제 12 항에 있어서,
    상기 레지스터 파일은 3개의 판독 포트들을 가지는, 조건부 명령을 확장하는 방법.
  14. 파이프라인 프로세서로서,
    조건부 명령이 미리 결정된 임계치를 초과하는 다수의 피연산자들을 가지는지 여부를 식별하도록 구성되는 프리-디코드 로직 회로;
    식별된 조건부 명령을 수신하고, 비-조건부 명령 및 선택 명령을 포함하도록 상기 식별된 조건부 명령을 확장하도록 구성되는 발행 로직 회로; 및
    상기 비-조건부 명령 및 상기 선택 명령을 실행하도록 구성되는 실행 유니트들을 포함하는, 파이프라인 프로세서.
  15. 제 14 항에 있어서,
    상기 선택 명령은 상기 조건부 명령의 조건성(conditionality)을 반영하는, 파이프라인 프로세서.
  16. 제 14 항에 있어서,
    상기 선택 명령은 조건부 ADD 명령인, 파이프라인 프로세서.
  17. 제 14 항에 있어서,
    상기 선택 명령은 조건부 MOV 명령인, 파이프라인 프로세서.
  18. 제 14 항에 있어서,
    상기 선택 명령 및 상기 비-조건부 명령은 개별적인 파이프라인들에 있는 실행 유니트들에 의해 실행되는, 파이프라인 프로세서.
  19. 제 13 항에 있어서,
    상기 피연산자들은 다수의 판독 포트들을 가지는 레지스터 파일로부터 정보를 수신하며, 상기 미리 결정된 임계치는 판독 포트들의 개수와 동일한, 파이프라인 프로세서.
  20. 제 17 항에 있어서,
    상기 레지스터 파일은 3개의 판독 포트들을 가지는, 파이프라인 프로세서.
KR1020107001942A 2007-06-27 2008-06-27 조건부 명령을 비조건부 명령 및 선택 명령으로 확장하기 위한 방법 및 시스템 KR20100032441A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/769,132 2007-06-27
US11/769,132 US7793079B2 (en) 2007-06-27 2007-06-27 Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction

Publications (1)

Publication Number Publication Date
KR20100032441A true KR20100032441A (ko) 2010-03-25

Family

ID=39790064

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107001942A KR20100032441A (ko) 2007-06-27 2008-06-27 조건부 명령을 비조건부 명령 및 선택 명령으로 확장하기 위한 방법 및 시스템

Country Status (6)

Country Link
US (1) US7793079B2 (ko)
EP (1) EP2176741A1 (ko)
JP (1) JP2010532063A (ko)
KR (1) KR20100032441A (ko)
CN (1) CN101689107A (ko)
WO (1) WO2009003160A1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8078846B2 (en) * 2006-09-29 2011-12-13 Mips Technologies, Inc. Conditional move instruction formed into one decoded instruction to be graduated and another decoded instruction to be invalidated
US9146742B2 (en) 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
TWI514265B (zh) * 2011-04-07 2015-12-21 Via Tech Inc 將條件載入/儲存指令轉譯為數量可變的微指令之微處理器
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
EP2624126B1 (en) * 2011-04-07 2016-11-02 VIA Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
CN107832083B (zh) * 2011-04-07 2020-06-12 威盛电子股份有限公司 具有条件指令的微处理器及其处理方法
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US8880857B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US8924695B2 (en) 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US9141389B2 (en) 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9256408B2 (en) 2012-01-20 2016-02-09 Qualcomm Incorporated Optimizing texture commands for graphics processing unit
US9582279B2 (en) 2013-03-15 2017-02-28 International Business Machines Corporation Execution of condition-based instructions
CN103853526B (zh) * 2014-02-20 2017-02-15 清华大学 可重构处理器及可重构处理器的条件执行方法
US10203960B2 (en) 2014-02-20 2019-02-12 Tsinghua University Reconfigurable processor and conditional execution method for the same
CN104615409B (zh) * 2014-05-27 2017-07-07 上海兆芯集成电路有限公司 跳越mov指令的处理器和由该处理器使用的方法
US9588769B2 (en) 2014-05-27 2017-03-07 Via Alliance Semiconductor Co., Ltd. Processor that leapfrogs MOV instructions
CN104461939A (zh) * 2014-12-16 2015-03-25 清华大学 扩展处理器寄存器堆容量的方法
US10402199B2 (en) 2015-10-22 2019-09-03 Texas Instruments Incorporated Conditional execution specification of instructions using conditional extension slots in the same execute packet in a VLIW processor

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6389932A (ja) * 1986-10-03 1988-04-20 Mitsubishi Electric Corp デ−タ処理装置
WO2000000878A2 (en) 1998-06-26 2000-01-06 Chi Lan Wong Derek Methods for increasing instruction-level parallelism in microprocessors and digital systems
US6449713B1 (en) * 1998-11-18 2002-09-10 Compaq Information Technologies Group, L.P. Implementation of a conditional move instruction in an out-of-order processor
JP3532835B2 (ja) 2000-07-04 2004-05-31 松下電器産業株式会社 データ処理装置およびプログラム変換装置
CA2356805A1 (en) 2001-09-07 2003-03-07 International Business Machines Corporation Converting short branches to predicated instructions
US9977674B2 (en) * 2003-10-14 2018-05-22 Intel Corporation Micro-operation generator for deriving a plurality of single-destination micro-operations from a given predicated instruction
US7210024B2 (en) * 2005-02-10 2007-04-24 Qualcomm Incorporated Conditional instruction execution via emissary instruction for condition evaluation

Also Published As

Publication number Publication date
CN101689107A (zh) 2010-03-31
WO2009003160A1 (en) 2008-12-31
US7793079B2 (en) 2010-09-07
US20090006811A1 (en) 2009-01-01
JP2010532063A (ja) 2010-09-30
EP2176741A1 (en) 2010-04-21

Similar Documents

Publication Publication Date Title
US7793079B2 (en) Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction
TWI654562B (zh) 藉由演算法匹配、停用特徵或限制效能之回溯相容性
US5590295A (en) System and method for register renaming
US5546597A (en) Ready selection of data dependent instructions using multi-cycle cams in a processor performing out-of-order instruction execution
US5764943A (en) Data path circuitry for processor having multiple instruction pipelines
US7454598B2 (en) Controlling out of order execution pipelines issue tagging
JP5209933B2 (ja) データ処理装置
KR20040016829A (ko) 파이프라인식 프로세서에서의 예외 취급 방법, 장치 및시스템
JP2004342087A (ja) 一連の処理命令をパイプライン処理する方法及び装置
TWI613590B (zh) 處理器流水線中的靈活的指令執行
KR101119612B1 (ko) 프로세서에서 실행 스테이지 이전에 명령들을 실행시키기 위한 시스템 및 방법
US20220035635A1 (en) Processor with multiple execution pipelines
KR100523706B1 (ko) 단일 사이클 파이프라인 스톨을 발생하기 위한 파이프라인 프로세서 시스템 및 방법
KR20090101061A (ko) 프로세서 및 정보 처리 장치
US9747109B2 (en) Flexible instruction execution in a processor pipeline
US7406587B1 (en) Method and system for renaming registers in a microprocessor
US11392386B2 (en) Program counter (PC)-relative load and store addressing for fused instructions
US6092184A (en) Parallel processing of pipelined instructions having register dependencies
KR20220065048A (ko) 대기열 압축 해제
US11544065B2 (en) Bit width reconfiguration using a shadow-latch configured register file
US7996655B2 (en) Multiport execution target delay queue FIFO array
US7783692B1 (en) Fast flag generation
US20230315446A1 (en) Arithmetic processing apparatus and method for arithmetic processing
US20240020119A1 (en) Vector processor with extended vector registers
US20040128482A1 (en) Eliminating register reads and writes in a scheduled instruction cache

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application