KR101081623B1 - 적절한 프리-디코딩을 이용하여 가변-길이 명령 세트로부터의 명령들을 프리로딩하기 위한 시스템, 방법 및 소프트웨어 - Google Patents

적절한 프리-디코딩을 이용하여 가변-길이 명령 세트로부터의 명령들을 프리로딩하기 위한 시스템, 방법 및 소프트웨어 Download PDF

Info

Publication number
KR101081623B1
KR101081623B1 KR1020097022990A KR20097022990A KR101081623B1 KR 101081623 B1 KR101081623 B1 KR 101081623B1 KR 1020097022990 A KR1020097022990 A KR 1020097022990A KR 20097022990 A KR20097022990 A KR 20097022990A KR 101081623 B1 KR101081623 B1 KR 101081623B1
Authority
KR
South Korea
Prior art keywords
instruction
instructions
preload
instruction cache
cache line
Prior art date
Application number
KR1020097022990A
Other languages
English (en)
Other versions
KR20090132638A (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 KR20090132638A publication Critical patent/KR20090132638A/ko
Application granted granted Critical
Publication of KR101081623B1 publication Critical patent/KR101081623B1/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
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control 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/22Microcontrol or microprogram arrangements
    • G06F9/24Loading of the microprogram
    • 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/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • 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
    • 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
    • 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

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)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

가변-길이 명령 세트로부터의 명령들을 실행하는 프로세서에서, 프리로드 명령은 명령 캐시 라인에 대응하는 데이터 블록을 메모리로부터 리트리브하고, 데이터 블록 내의 가변-길이 명령 세트로부터의 명령들을 프리-디코딩하며, 상기 명령들 및 프리-디코드 정보를 명령 캐시로 로딩하도록 동작한다. 명령 실행 유닛은 제 1 유효 명령의 데이터 블록 내에서의 위치를 프리-디코더로 표시한다. 프리-디코더는 각각의 명령의 길이 및 이에 따라 명령 바운더리들을 연속적으로 결정한다. 제 1 유효 명령의 위치를 식별하는 명령 캐시 라인 오프셋 표시자가 발생되어, 다양한 방식들로 프리-디코더로 제공될 수 있다.

Description

적절한 프리-디코딩을 이용하여 가변-길이 명령 세트로부터의 명령들을 프리로딩하기 위한 시스템, 방법 및 소프트웨어{SYSTEM, METHOD AND SOFTWARE TO PRELOAD INSTRUCTIONS FROM A VARIABLE-LENGTH INSTRUCTION SET WITH PROPER PRE-DECODING}
본 발명은 일반적으로 프로세서들의 분야에 관한 것으로, 보다 상세하게는 가변-길이 명령 세트로부터의 명령들을 명령 캐시로 프리-로딩(pre-load)하고, 상기 명령들을 정확하게 프리-디코딩(pre-decode)하기 위한 시스템, 방법, 및 소프트웨어에 관한 것이다.
마이크로프로세서들은 폭넓고 다양한 애플리케이션들에서 계산 작업(computational task)들을 수행한다. 향상된 프로세서 성능은 소프트웨어 강화들을 통해 보다 신속한 동작 및/또는 증가된 기능을 허용하기 위해서 거의 항상 요구된다. RISC 아키텍처들과 같은 아키텍처 발전들 및 반도체 기술의 발전들 모두를 이용함으로써, 다양한 현대의 프로세서들은 DRAM 및 SDRAM과 같은 메모리 칩들보다 훨씬 더 높은 클럭 속도로 실행한다. 상대적으로 느린 메모리 액세스들의 불이익을 최소화하기 위해서, 이러한 프로세서들은 최근에 액세스되었고 그리고/또는 프로세서가 가까운 미래에 (소프트웨어를 통해) 액세스하기를 예상하는 명령들 및 데이터의 로컬 복사본들을 저장하는 신속한 온-칩 캐시 메모리들을 가지는 계층적 메모리 구조를 이용한다.
명령 캐시로의 로드들을 예상하는 일례는 프리로드 명령(예를 들어, ARM 명령 PLI)이다. 프리로드 명령은 명령들을 실행하기 전에 상기 명령들을 명령 캐시로 로딩한다. 프로그래머는 타겟으로의 공지되거나 예상된 분기(branch)(예를 들어, 서브루틴 호출)에 다소 앞서, 프리로드 명령을 코드로 삽입할 수 있다. 프리로드 명령은 분기가 실행될 경우 타겟에서의 명령들이 즉시 실행을 위해 캐시에서 이용가능하도록, 타겟에서의 명령들을 명령 캐시로 로딩한다.
최신형 프로세서들은 순차적인 명령들이 실행 시에 오버랩되어 전체 프로세서 스루풋을 증가시키는 파이프라인형 아키텍처를 사용한다. 파이프라인을 통해 원활한 실행을 유지시키는 것은 높은 성능을 달성하는데 중요하다. 당해 기술에서 공지된 하나의 파이프라인 최적화 기법은 프리-디코딩 명령들이다. 명령들은 명령들이 메모리로부터 리트리브(retrieve)될 때 검사되고, 부분적으로 디코딩되며, 상기 명령들에 대한 일부 정보 ― 프리-디코드 정보라 알려짐 ― 는 연관된 명령들과 함께 명령 캐시에 저장된다. 명령들이 캐시로부터 파이프라인으로 추후에 인출(fetch)되는 경우, 프리-디코드 정보 또한 인출되며, 상기 프리-디코딩 정보는 상기 명령들을 완전히 디코딩하는 것을 돕는다. 프리-디코드 정보는 예를 들어, 분기 명령 및 부동-소수점 명령, 또는 파이프라인에서 명령들을 실행시키는데 유용한 다른 정보를 식별할 수 있다.
일부 명령 세트들은 상이한 길이들을 가지는 명령들을 포함한다. 예를 들 어, 프로세서는 32-비트 전용(32-bit native) 명령 세트를 가질 수 있고, 자바 바이트 코드들을 실행하는 능력을 추가적으로 포함한다. 또 다른 예로서, ARM 프로세서 아키텍처의 몇몇 버전들은 Thumb-2라고 알려진 명령 세트로부터의 명령들을 실행시킨다. Thumb-2 명령들은 16 비트 길이 또는 32 비트 길이일 수 있다. 일반적으로, 컴파일러는 최대한의 콤팩트 코드를 달성하기 위해서 Thumb-2 명령들을 선택하고, 16-비트 명령 및 32-비트 명령은 Thumb-2 코드의 세그먼트 내에서 임의의 순서로 믹싱(mix)될 수 있다. 또한, 일반적으로, 메모리 내의 명령들의 정렬에 대한 제한이 존재하지 않는다.
가변-길이 명령 세트 프로세서 내의 프리-디코더의 하나의 유용한 기능은 명령 캐시 라인 내의 각각의 명령 길이를 확인 및 표시하는 것이다. 즉, 프리-디코드 정보는 예를 들어, 명령 op 코드들의 조사(inspection)에 의해 결정될 수 있는 명령 바운더리(instruction boundary)들을 식별할 수 있다. 이러한 정보는 명령들을 실행을 위한 파이프라인으로 인출할 때 파이프라인 인출 및 디코드 스테이지(stage)들을 돕는다.
가변-길이 명령 세트로부터의 명령들을 프리-코딩하고, 명령 바운더리들을 표시하기 위해 상기 명령들을 프리-디코딩하는 것에 당면한 하나의 문제는 명령들이 메모리 내에 반드시 정렬되는 것은 아니기 때문에, 명령들이 명령 캐시 라인 바운더리들을 따라 정렬되지 않을 수 있다는 것이다. 따라서, 메모리로부터 리트리브되는 캐시 라인-사이즈 데이터 블록 내의 제 1 데이터(예를 들어, 하프워드)는 완전 명령(complete instruction)(예를 들어, 16-비트 명령) 또는 동일한 캐시 라 인(예를 들어, 32-비트 명령의 처음 16 비트들) 내에서 지속되는 명령의 일부분일 수 있으며, 이들 중 하나는 프리-디코더에 의해 검출된다. 그러나, 제 1 데이터는 데이터 블록(예를 들어, 32-비트 명령의 마지막 16-비트들) 이전에 시작했던 명령의 일부분일 수 있거나, 가변의 즉시 데이터 등과 같은 비-명령 데이터를 포함할 수 있다. 후자 2개의 경우들 ― 부분 명령 또는 데이터 ― 중 하나의 경우, 제 1 데이터는 완전 명령 또는 명령의 제 1 부분으로서 부정확하게 프리-디코딩될 수 있다.
데이터 블록 내의 다른 명령들의 길이 및 이에 따른 바운더리들이 순차적으로 결정되기 때문에, 제 1 데이터를 부정확하게 프리-디코딩하는 것은 데이터 블록 내의 모든 명령들이 부정확하게 프리-디코딩되도록 할 수 있으며, 상기 부정확한 프리-디코드 정보가 상기 명령들과 함께 명령 캐시에 기록되도록 할 수 있다. 명령들이 상기 캐시로부터 파이프라인으로 후속적으로 인출되고, 프리-디코드 정보가 잘못된 것으로 결정되는 경우, 캐시 라인은 폐기되어야 하고, 명령들은 정확한 명령 바운더리들 ― 프로세서 성능 및 전력 소비 모두에 불리한 영향을 미침 ― 을 결정하기 위해서 메모리로부터 다시 인출되어 프리-디코딩되어야 한다.
여기에 기재되고 주장되는 하나 이상의 실시예들에 따르면, 가변-길이 명령 세트로부터의 명령들을 실행하는 프로세서에서, 프리로드 명령은 명령 캐시 라인에 대응하는 데이터 블록을 메모리로부터 리트리브(retrieve)하고, 데이터 블록 내의 명령들을 프리-디코딩하며, 상기 명령들 및 프리-디코드 정보를 명령 캐시로 로딩하도록 동작한다. 명령 실행 유닛은 제 1 유효 명령의 데이터 블록 내에서의 위치를 프리-디코더로 표시한다. 프리-디코더는 각각의 명령의 길이 및 이에 따라 명령 바운더리들을 연속적으로 결정한다. 제 1 유효 명령의 위치를 식별하는 명령 캐시 라인 오프셋 표시자는 발생되어, 다양한 방식들로 프리-디코더로 제공될 수 있다.
일 실시예는 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩하는 방법에 관한 것이다. 명령 캐시 라인 오프셋 표시자는 세팅되며, 명령 캐시 라인에 대응하는 데이터 블록으로, 제 1 유효 명령의 오프셋을 식별한다. 메모리로부터 가변-길이 명령 세트로부터의 적어도 하나의 명령을 포함하는 데이터 블록을 리트리브하고, 상기 명령들을 명령 캐시로 로딩하도록 동작하는 프리로드 명령이 실행된다. 명령 캐시 라인 오프셋 표시자에 응답하여, 제 1 명령으로 시작되는 데이터 블록 내의 명령들이 연속적으로 프리-디코딩된다.
또 다른 실시예는 프로세서에 관한 것이다. 상기 프로세서는 메모리 인터페이스, 가변-길이 명령 세트로부터의 명령들 및 이들의 대응하는 프리-디코드 정보를 저장하도록 동작하는 명령 캐시를 포함한다. 상기 프로세서는 또한 상기 명령 캐시로 로딩될 데이터 블록 내의 제 1 유효 명령을 식별하는 명령 캐시 라인 오프셋 표시자를 발생시키도록 동작하는 명령 실행 유닛을 포함한다. 상기 프로세서는 명령 캐시와 메모리 인터페이스 사이에 삽입되고, 프리로드 명령 실행 시에 명령 캐시 라인 오프셋 표시자에 응답하여, 제 1 유효 명령으로 시작되는 데이터 블록 내의 가변-길이 명령 세트로부터의 명령들을 연속적으로 프리-디코딩하도록 동작하는 프리-디코더를 추가적으로 포함한다.
또 다른 실시예는 가변-길이 명령 세트 내의 적어도 하나의 프리로드 명령을 저장하는 컴퓨터 판독가능 매체에 관한 것이며, 상기 명령은 프로세서가 명령들을 명령 캐시로 프리로딩하게 하도록 동작하고, 여기서 상기 프리로딩된 명령들은 제 1 유효 명령으로 시작되어 프리-디코딩된다.
도 1은 가변-길이 명령 세트로부터 프리-로딩된 명령들을 정확하게 프리-디코딩하는 프로세서의 기능 블록 다이어그램이다.
도 2는 3개의 대표적인 데이터 블록들 내의 가변-길이 명령 세트로부터의 명령들의 정렬을 도시하는 블록 다이어그램이다.
도 3은 가변-길이 명령 세트로부터의 명령들을 프리-로딩하는 방법의 흐름 다이어그램이다.
도 1은 적어도 하나의 가변-길이 명령 세트로부터의 명령들을 실행하는 프로세서(110)의 기능 블록 다이어그램을 도시한다. 특히, 프로세서(110)는 가변-길이 명령 세트로부터 프리-로딩된 명령들을 정확하게 프리-디코딩한다. 프로세서(110)는 명령 실행 유닛(112) 내의 명령들을 실행하고, 명령 실행 유닛(112)은 파이프 스테이지들 뿐만 아니라 산술 논리 유닛들(Arithmetic Logic Units: ALU)과 같은 논리 및 계산 회로들에 구성된 복수의 레지스터들 또는 래치들(116)을 포함하는 파이프라인(114)을 포함한다. 파이프라인은 제어 논리(118)에 따라 명령들을 실행한 다. 파이프라인(114)은 도시된 바와 같이, 슈퍼 스칼라 설계(superscalar design)일 수 있다.
범용 레지스터(GPR) 파일(120)은 메모리 계층의 상부(top)를 포함하는 레지스터들을 제공한다. 일 실시예에서, 여기에 추가적으로 설명된 바와 같이, 명령 실행 유닛은 또한 상태 레지스터(122)를 포함하며, 상태 레지스터(122)는 제 1 명령이 위치하는 명령 캐시 라인으로의 오프셋을 표시할 수 있다. 명령 실행 유닛(112) 또한 L2 프로세싱 로직(124)을 포함하며, L2 프로세싱 로직(124)은 L2 캐시 메모리(136) 또는 메인 메모리(138)로부터 인출되는 데이터 및 명령들의 특성들을 추적한다.
파이프라인(114)은 명령-측 변환 색인 버퍼(Instruction-side Translation Lookaside Buffer: ITLB)(128)에 의해 관리되는 허용(permission)들 및 메모리 어드레스 지정(addressing)을 이용하여, 명령 캐시(126)로부터 명령들을 인출한다. 프리-디코더(130)는 L2 캐시(136)로부터 인출되는 명령들을 프리-디코딩하고, 상기 명령들 및 프리-디코드 정보를 명령 캐시(126)로 배치한다. 하나 이상의 실시예들에서, 프리-디코드 정보는 명령 캐시 라인 내의 명령들의 길이를 포함한다. 여기에 보다 상세하게 논의된 바와 같이, 프리-디코더(130)는 제 1 명령의 캐시 라인 내에서의 위치를 식별하는 명령 실행 유닛(112)으로부터의 명령 캐시 라인 오프셋 표시자(ICOI)에 응답하여 명령들의 길이를 정확하게 결정한다.
데이터는 메인 변환 색인 버퍼(TLB; 134)에 의해 관리되는 허용들 및 메모리 어드레스 지정을 이용하여, 데이터 캐시(132)로부터 액세스된다. 다양한 실시예들 에서, ITLB(128)는 TLB(134)의 일부분의 복사본을 포함할 수 있다. 대안적으로, ITLB(128) 및 TLB(134)는 통합될 수 있다. 이와 유사하게, 프로세서(110)의 다양한 실시예들에서, 명령 캐시(126) 및 데이터 캐시(132)는 통합될 수 있다.
명령 캐시(126) 및 데이터 캐시(132)에서의 누락(miss)들은 도 1에 도시된 실시예에서 통합된 레벨-2(L2) 캐시 메모리(136)로의 액세스를 야기한다. L2 캐시(136)에서의 누락은 메모리 인터페이스(142) 제어 하에, 시스템 버스(140)를 통한 메인(오프-칩) 메모리(138)로의 액세스를 야기한다. 프로세서(110)는 주변 버스(150)를 통해 다양한 주변 디바이스들(146, 148)로의 액세스를 제어하는 입력/출력(I/O) 인터페이스(144)를 포함할 수 있다. 당해 기술에 잘 알려져 있는 바와 같이, 프로세서(110)는 메모리(136)와 같은 컴퓨터 판독가능 매체, 또는 주변 디바이스들(146, 148)에 의해 판독되는 자기 매체 또는 광 매체로부터 리트리브되는 명령들을 실행한다.
당업자들은 프로세서(110)에 대한 다수의 변화들이 가능하다는 것을 인식할 것이다. 예를 들어, 프로세서(110)는 레벨-3(L3) 또는 추가적인 캐시를 포함할 수 있고, 그리고/또는 분리된 L2 캐시(136)는 명령 캐시(126) 및 데이터 캐시(132) 각각에 전용될 수 있다. 또한, 프로세서(110)에 도시된 기능 블록들 중 하나 이상은 특정 실시예에서 생략될 수 있다.
프로세서(110)는 적어도 하나의 가변-길이 명령 세트로부터의 명령들을 실행한다. 다양한 실시예들에서, 프로세서(110)는 고정-길이 명령 세트(예를 들어, 32-비트 ARM 명령 세트) 및 하나 이상의 가변-길이 명령 세트들(예를 들어, 32-비 트 및 16-비트 Thumb-2 명령 세트) 모두로부터의, 또는 둘 이상의 가변-길이 명령 세트들로부터의 명령들을 실행할 수 있다. 이러한 실시예들에서, 현재 프로세서 명령 세트 모드는 상태 레지스터(122)와 같은 레지스터에서의 하나 이상의 비트들에 의해 표시될 수 있다. 또 다른 실시예에서, 프로세서(110)는 단일의 가변-길이 명령 세트로부터의 명령들만을 실행한다.
프로세서(110)에 의해 실행되는 가변-길이 명령 세트는 명령들 실행 전에 명령 캐시(126)로 명령들을 로딩하도록 동작하는 적어도 하나의 프리로드 명령을 포함한다. 프리로드 명령은 L2 캐시(136) 또는 메모리(138)로부터 하나 이상의 명령들을 포함하는 데이터의 명령 캐시 라인-사이즈 블록을 리트리브한다. 상기 데이터 블록은 명령 길이들 및 다른 프리-디코드 정보를 결정하기 위해서 프리-디코더(130)에 의해 프리-디코딩된다. 이후, 명령들 및 프리-디코드 정보는 명령 캐시(126)에 기록된다.
도 2는 가변-길이 명령 세트 내의 프리로드 명령에 의해 캐시 라인으로 프리-로딩된 데이터 블록들 내의 명령들 및 데이터의 몇몇 가능한 분배(distribution)들을 도시한다. 도 2에 도시된 실시예에서, 캐시 라인은 16 하프워드들이다. 명료함을 위해서, 데이터 블록들의 하위 하프만이 상세하게 도시되어 있다. 도 2에 도시된 실시예에서, 프로세서(110)는 16-비트 및 32-비트 명령들(예를 들어, Thumb-2) 모두를 가지는 명령 세트로부터의 명령들을 실행한다. 캐시 라인으로 프리-로딩될 제 1 가상 데이터 블록(202)은 32-비트 명령인 명령 A로 시작되며, 이후 16-비트 명령들 B 및 C, 32-비트 명령 D 및 16-비트 명령들 E 및 F가 뒤따른다. 프리-디코더(130)는 명령 A와 연관된 명령 길이 표시자를 조사하여 명령 A가 32-비트 명령이라는 것을 결정한다. 일 실시예에서, 명령 길이 표시자는 명령 op 코드의 비트 필드이다. 예를 들어, Thumb-2 명령 세트에서, 비트들 [15:11]이 값 'b11101, 'b11110, 또는 b11111을 가지는 경우, 명령은 32 비트 길이고, 임의의 다른 인코딩은 16-비트 명령을 표시한다.
하프워드 0을 점유하는 명령이 (하프워드들 0 및 1을 점유하는) 32-비트 명령이라고 결정되는 경우, 프리-디코더(130)는 하프워드 2에서 비트 패턴을 조사하여, 명령 B가 16 비트 길이라는 것을 결정한다. 이러한 방식으로, 프리-디코더(130)는 프리-로딩된 데이터 블록을 연속적으로 다운(down)되게 동작하고, 각각의 명령 길이, 및 이에 따라 다음 명령의 시작 위치를 결정한다. 명령 길이는 다른 프리-디코드 정보와 함께 명령 캐시(126)에 기록된다. 명령 A가 데이터 블록(202)의 시작으로 정렬되었기 때문에 데이터 블록(202)은 적절하게 프리-디코딩된다.
프리로드 명령은 L2 캐시(136) 또는 메모리(138)로부터 데이터(292, 204, 206)의 고정-사이즈 블록 ― 명령 캐시 라인의 사이즈와 동일함 ― 을 리트리브한다. 대부분의 구현예들에서, 데이터 블록들(202, 204, 206)은 n개의 최하위 어드레스 비트들을 마스크 오프(mask off)함으로써 메모리에 정렬되며, 여기서 캐시 라인 사이즈는 2n 바이트들이다. 특정한 개별 명령의 타겟 어드레스를 가지는 프리로드 명령은 (타겟 명령이 도 2의 명령 A와 같은 데이터 블록(202, 204, 206) 내의 제 1 명령이 되지 않는 한) 타겟 명령으로 시작되는 메모리의 블록이 아닌, 타겟 명령을 포함하는 정렬된 데이터 블록(202, 204, 206)을 메모리로부터 리트리브한다. 따라서, 프리로드 명령에 의해 메모리로부터 리트리브되는 데이터 블록(202, 204, 206)의 제 1 데이터(예를 들어, 하프워드)가 반드시 명령이거나, 명령의 시작이라는 것은 아니다.
예를 들어, 데이터 블록(204)은 하프워드들 0-3에 대응하는 위치들에 비-명령 데이터를 포함한다. 이러한 데이터가 임의의 비트 패턴을 포함할 수 있기 때문에, 이러한 데이터는 명령들로서 잘못 프리-디코딩될 수 있다. 예를 들어, 종래의 프리-디코더는 하프워드 0에서 16-비트 명령, 하프워드들 1-2에서 32-비트 명령, 및 하프워드들 3-4에서 또 다른 32-비트 명령으로서 데이터를 해석할 수 있다. 이러한 경우, 명령 B를 포함하는 하프워드 위치와 관련된 프리-디코드 정보는 잘못된 것이다.
또 다른 예로서, 데이터 블록(206)은 명령 J의 제 2 하프로 시작되며, 명령 J의 처음 16 비트들은 또 다른 데이터 블록 내에 있다. 그러나, 종래의 프리-디코더는 하프워드들 0-1을 점유하는 32-비트 명령으로서 명령 J를 해석하고, 이에 따라 명령 K를 스킵(skip)할 수 있다. 관련 명령들이 추후에 명령 캐시로부터 파이프라인으로 인출될 때 데이터 블록들(204, 206) 및 이들의 대응하는 잘못된 프리-디코드 정보가 명령 캐시에 기록되면, 명령들은 정확한 프리-디코드 정보를 획득하기 위해서 폐기 및 재-인출되어야 한다. 이것은 파이프라인이 L2 캐시(136) 또는 메모리(138) 액세스를 기다리기 위해서 지연되어야 하므로, 프로세서 성능에 불리 한 영향을 미친다. 동일한 데이터 블록(204, 206)이 두 번 리트리브 및 프리-디코딩되어야 하므로, 전력 소비 또한 증가된다.
정확한 프리-디코딩을 이용하여 가변-길이 명령 세트로부터의 명령들의 프리-로딩을 허용하기 위해서, 명령 실행 유닛(112)은 제 1 유효 명령의 시작 또는 제 1 유효 명령의 데이터 블록(202, 204, 206) 내에서의 위치를 식별하는 명령 캐시 라인 오프셋 표시자(ICOI)를 발생시킨다. 명령 실행 유닛(112)은 프리로드 명령 실행 시에 ICOI를 프리-디코더(130)로 제공한다. ICOI의 비트 사이즈는 명령 캐시 라인의 사이즈 및 명령 세트 내의 가장 짧은 명령에 의존한다. 도 2에 도시된 실시예에서, 예를 들어, 가장 짧은 명령은 16 비트들 또는 하나의 하프워드이며, 명령 캐시 라인은 16 하프워드들을 포함한다. 따라서, 이러한 실시예에서, ICOI는 4 비트들을 요구한다. 일반적으로, ICOI는 m 비트들을 포함하며, 여기서 명령 캐시(126)의 라인 사이즈는 2m × 가장 짧은 명령이다. ICOI는 다양한 방식들로 발생되어, 프리-디코더(130)로 전달될 수 있다.
일 실시예에서, 프리로드 명령 타겟 어드레스의 하나 이상의 미사용된 어드레스 비트들은 ICOI로서 인코딩된다. 프리로드 명령(예를 들어, PLI)은 타겟 명령의 어드레스를 오퍼랜드(operand)로서 취한다. 타겟 명령 어드레스는 예를 들어, 태그, 세트 번호, 및 캐시 라인 인덱스로 분해될 수 있다. 예를 들어, 32-비트 명령 가상 어드레스 VA[31:0]에 대하여, 명령 캐시(126)의 CAM 구조에 저장되는 태그들과 비교되는 태그는 VA[31:11]를 포함할 수 있다. p-웨이 세트 연관 캐시(p-way set associative cache)에서, 태그가 일치할 경우 세트 번호는 리턴된 p개의 결과들 사이에서 선택한다. 세트 번호는 VA[10:5]를 포함할 수 있다. 인덱스, VA[4:0]는 캐시 라인의 개별 바이트들 즉, 명령 캐시(126)의 RAM 구조에 저장된 데이터를 어드레스 지정한다. 데이터는 명령들 및 프리-디코드 정보를 포함한다.
일 실시예에 따르면, 캐시 라인 인덱스 예를 들어, VA[4:0] 중 일부 또는 전부는 명령 캐시 라인 오프셋 표시자(ICOI)를 인코딩하기 위해서 사용된다. 도 2에 도시된 실시예에서, 5개의 인덱스 비트들 중 4개의 인덱스 비트들 VA[4:0]만이 ICOI에 대하여 요구된다. 일 실시예에서, 프리로드 타겟 명령 어드레스 비트들 VA[4:1]은 ICOI를 유지하고, (예를 들어, 프리-디코딩 동작들을 수행하기 위한 2개의 상이한 명령 세트 인코딩들 사이에서 선택할) 또 다른 플래그로서 사용하도록 VA[0]를 비워둘 수 있다(free). 명령 세트가 8-비트 명령들을 포함하였을 경우, ICOI를 저장하기 위해서 전체 캐시 라인 인덱스 VA[4:0]가 요구될 것이다.
프리로드 타겟 어드레스가 결정되어, 연관된 프리로드 명령의 실행에 대비하여 컴파일러-특정된 GPR에 기록되는 경우, ICOI는 프리로드 타겟 어드레스의 캐시 라인 인덱스 부분으로 인코딩된다. 프리로드 명령이 실행될 시에, 프리로드 명령은 특정된 GPR 레지스터로부터 타겟 명령 어드레스를 판독한다. 타겟 어드레스가 명령 캐시(126) 내에 있는 경우, 프리로드 명령 실행은 완료된다. 타겟 어드레스가 명령 캐시(126) 내에서 누락된 경우, L2 프로세싱 로직(124)과 같은 명령 실행 유닛(112) 내의 로직은 타겟 명령(들)을 포함하는 데이터 블록들(202, 204, 206)과 같은 데이터 블록을 리트리브하기 위해서 L2 캐시(136), 및 필요한 경우 메인 메모 리(138)에 액세스하여, 누락 프로세싱(miss processing)을 수행한다. 데이터 블록들(202, 204, 206)은 다른 정보 사이에서 블록(202, 204, 206) 내의 각각의 유효 명령의 길이를 결정하기 위해서 프리-디코딩된다.
명령들을 포함하는 데이터 블록(202, 204, 206)이 프리-디코더(130)로 로딩되는 경우, L2 프로세싱 로직(124)은 ICOI를 프리-디코더(130)로 제공한다. ICOI에 응답하여, 프리-디코더(130)는 제 1 유효 명령의 시작 또는 제 1 유효 명령의 위치에 대응하는 ICOI에 의해 특정되는 오프셋에서 시작되는 명령들을 프리-디코딩한다. 도 2의 실시예에서, ICOI는 데이터 블록(202)에 대해서는 'b0000이고, 데이터 블록(204)에 대해서는 'b0100이며, 데이터 블록(206)에 대해서는 'b0001일 것이다.
프리-디코더(130)는 예를 들어 명령 op 코드를 조사함으로써, 제 1 명령(및 다른 프리-디코드 정보)의 길이를 결정하고, 제 1 명령의 길이로부터 제 2 명령의 시작을 결정한다. 이후, 프리-디코더(130)는 데이터 블록(202, 204, 206) 내의 모든 명령의 길이가 결정될 때까지 제 2 명령의 길이 및 이후 명령들의 길이들을 결정한다. 이후, 프리-디코더(130)는 정확한 프리-디코드 정보와 함께 명령들을 명령 캐시(126)에 기록한다. 일 실시예에서, 추가적으로, 프리-디코더(130)는 데이터가 하나 이상의 명령들을 포함할 수 있는 경우, ICOI에 의해 표시된 바와 같이, 제 1 유효 명령에 선행하는 데이터를 추론적으로 프리-디코딩한다.
일 실시예에서, 명령 캐시 라인 오프셋 표시자(ICOI)는 상태 레지스터(122)와 같은 레지스터 내의 비트 필드를 포함한다. 이러한 실시예에서, ICOI 비트들은 프리로드 명령 실행 이전에 명시적으로 세팅된다. 프리로드 명령 실행 시에, 프리-디코더(130)는 상태 레지스터(122) 또는 다른 레지스터 내의 ICOI 비트들을 조사하고, 표시된 제 1 유효 명령으로 시작되는 데이터 블록(202, 204, 206)을 정확하게 프리-디코딩한다. 이후, 명령들 및 프리-디코드 정보는 명령 캐시(126)에 기록된다.
일 실시예에서, 명령 캐시 라인 오프셋 표시자(ICOI)는 프리로드 명령의 op 코드 내의 하나 이상의 비트들을 포함한다. 프리로드 명령 op 코드의 비트 필드는 ICOI에 대하여 정의될 수 있고, 컴파일러는 코드 내의 프로그래머의 명령들 또는 지시들에 따라 ICOI 비트 필드를 세팅할 수 있다. 프리로드 명령 실행 시에, ICOI 비트 필드는 예를 들어, L2 프로세싱 로직(124)에 의해 프리-디코더(130)로 제공되고, 프리-디코더(130)는 표시된 제 1 유효 명령으로 시작되는 데이터 블록(202, 204, 206)을 프리-디코딩한다. 이후, 명령들 및 프리-디코드 정보는 명령 캐시(126)에 기록된다.
일 실시예에서, 가변-길이 명령 세트는 상이한 명령 캐시 라인 오프셋 표시자(ICOI)를 각각 특정하는 복수의 프리로드 명령들을 포함한다. 예를 들어, 도 2에 도시된 실시예에서, 16개의 상이한 프리로드 명령들 각각은 데이터 블록(202, 204, 206) 내의 명령들을 프리-디코딩하기 위한 상이한 ICOI를 특정한다. 프로그래머 또는 컴파일러는 공지된 메모리 정렬들 및 프리-디코딩될 제 1 명령의 어드레스에 기초하여, 프리-로딩된 데이터 블록(202, 204, 206)로의 공지된 오프셋에 대한 적절한 프리로드 명령을 특정할 수 있다.
당업자들은 전술된 실시예들이 서로 배타적이지 않음을 인식할 것이다. 예를 들어, 특정 구현예들에서, op 코드 내의 ICOI 비트 필드를 가지는 프리로드 명령은 ICOI를 상태 레지스터(122)와 같은 레지스터로 래칭함으로써, 또는 ICOI를 프리로드 타겟 어드레스 내의 하나 이상의 미사용된 어드레스 비트들로 대용함으로써, ICOI를 프리-디코더(130)로 제공할 수 있다. 일반적으로, 본 발명의 설명 내용들이 주어지면, 당업자들은 제 1 유효 명령이 위치하는 데이터 블록(202, 204, 206)으로의 오프셋을 프리-디코더(130)로 전달하기 위한 최상의 솔루션을 확인할 수 있다.
도 3은 프리-로딩 명령들의 방법(300)을 도시한다. 상기 방법은 명령 캐시 라인 오프셋 표시자(ICOI)를 세팅함으로써 시작된다(블록 302). ICOI는 캐시 라인 또는 데이터 블록(202, 204, 206) 내에서의 제 1 유효 명령의 위치를 식별한다. 다양한 실시예들에서, ICOI는 프리로드 명령 타겟 어드레스를 변경하거나, 상태 레지스터(122)와 같은 레지스터 내의 ICOI 비트들을 세팅하거나, 프리로드 명령 op 코드 내의 ICOI 비트 필드를 세팅함으로써 세팅될 수 있다.
프리로드 명령은 실행된다(블록 304). 프리로드 명령은 L2 캐시(136) 또는 메모리(138)로부터 적어도 하나의 타겟 명령을 포함하는 데이터 블록(202, 204, 206)을 리트리브하고, 데이터 블록(202, 204, 206)을 프리-디코더(130)로 제공하도록 동작한다. ICOI에 응답하여, 프리-디코더(130)는 데이터 블록(202, 204, 206) 내에서 제 1 유효 명령을 위치지정하고(블록 306), 상기 제 1 명령의 길이를 결정한다(블록 308). 프리-디코더(130)가 데이터 블록(202, 204, 206)의 종단에 도달 하지 않았을 경우, 프리-디코더(130)는 블록(308)에서 결정되는 명령 길이를 사용하여 또 다른 명령의 시작을 결정하고(블록 312), 해당 명령을 조사하여 그것의 길이를 결정한다(블록 308). 데이터 블록(202, 204, 206)의 종단에 도달될 때까지 이러한 프로세스는 계속된다(블록 310).
일 실시예에서, 프리-디코더(130)는 제 1 명령에 선행하는 데이터를 프리-디코딩할 수 있다(블록 314). 데이터가 (데이터 블록(204)에 도시된 바와 같이) 랜덤 데이터이거나, (데이터 블록(206)에 도시된 바와 같이) 명령의 연속인 경우, 발생된 프리-디코드 정보는 잘못될 수 있을 것이다. 그러나, 제 1 명령에 선행하는 데이터가 데이터 블록(202, 204, 206)의 시작으로 정렬되는 유효 명령들을 포함하는 경우, 프리-디코드 정보는 정확할 것이며, 파이프라인(114)을 도울 수 있다. 다른 실시예들에서, 제 1 명령에 선행하는 데이터는 프리-디코딩되지 않는다.
프리-디코더(130)는 명령들 및 프리-디코드 정보를 명령 캐시(126)에 기록한다(블록 316). 당업자들은 일부 방법 단계들이 도 3에 도시된 것과는 상이한 순서로 수행될 수 있다는 것을 용이하게 인식할 것이다. 예를 들어, 제 1 명령 이전의 데이터는 유효 명령들을 프리-디코딩하기 이전에 프리-디코딩될 수 있다(블록 314). 추가적으로, 데이터 블록(202, 204, 206) 내의 각각의 명령이 프리-디코딩되므로, 프리-디코더(130)는 점진적으로 명령들 및 프리-디코드 정보를 명령 캐시(126)에 기록할 수 있다.
여기에 설명되고 주장되는 하나 이상의 실시예들에 따르면, 프로세서(110)는 가변-길이 명령 세트로부터의 명령들을 명령 캐시(126)로 프리로딩하고, 명령 또는 명령의 시작이 명령 캐시 라인의 시작으로 정렬되지 않은 경우 상기 명령들을 정확하게 프리-디코딩할 수 있다. 이것은 부정확하게 프리-디코딩된 명령들이 명령 캐시(126)로부터 인출되어, 폐기, 재-인출, 및 재-프리-디코딩되어야 할 때 발생되는 성능 및 전력 소비 감소를 회피할 수 있다. 제 1 유효 명령을 식별하는 명령 캐시 라인 오프셋 표시자(ICOI)를 프리-디코더(130)로 전달하는 것은 다양한 방식들로 구현될 수 있다.
본 발명은 특정 특징들, 양상들 및 실시예들에 대하여 여기에 설명되었지만, 다수의 변화들, 변형들, 및 다른 실시예들이 본 발명의 넒은 범위 내에서 가능하다는 것이 명백해질 것이며, 이에 따라 모든 변화들, 변형들, 및 실시예들은 본 발명의 범위 내에 있는 것으로 간주되어야 한다. 따라서, 본 발명의 실시예들은 모든 양상들에서 제한이 아닌 예시로서 구성되어야 하며, 첨부된 청구범위의 의미 및 균등물 범위 내에서 도출되는 모든 변화들은 여기에 포함되는 것으로 의도된다.

Claims (24)

  1. 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법으로서,
    명령 캐시 라인에 대응하는 데이터 블록으로, 제 1 유효 명령의 오프셋을 식별하는 명령 캐시 라인 오프셋 표시자를 세팅하는 단계;
    메모리로부터 가변-길이 명령 세트로부터의 적어도 하나의 명령을 포함하는 데이터 블록을 리트리브(retrieve)하고, 상기 명령들을 상기 명령 캐시로 로딩하도록 동작하는 프리로드 명령을 실행하는 단계; 및
    상기 명령 캐시 라인 오프셋 표시자에 응답하여, 제 1 명령으로 시작되는 상기 데이터 블록 내의 명령들을 연속적으로 프리-디코딩(pre-decode)하는 단계; 및
    상기 명령 캐시에 상기 명령들 및 프리-디코드 정보를 기록하는 단계
    를 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  2. 제 1 항에 있어서,
    명령 길이 표시자들에 기초하여 상기 데이터 블록 내의 후속 명령들의 명령 바운더리(boundary)들을 결정하는 단계를 더 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  3. 제 2 항에 있어서,
    명령 길이 표시자는 명령 op 코드의 비트 필드를 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  4. 제 1 항에 있어서,
    상기 명령 캐시 라인 오프셋 표시자는 상기 프리로드 명령의 타겟 어드레스의 복수의 비트들을 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  5. 제 4 항에 있어서,
    상기 명령 캐시 라인 오프셋 표시자는 타겟 어드레스 비트들[4:1]을 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  6. 제 1 항에 있어서,
    상기 명령 캐시 라인 오프셋 표시자는 상기 프리로드 명령의 op 코드 내의 하나 이상의 비트들을 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  7. 제 1 항에 있어서,
    상기 명령 캐시 라인 오프셋 표시자를 세팅하는 단계 및 상기 프리로드 명령을 실행하는 단계는, 복수의 프리로드 명령들 중 하나를 실행하는 단계를 포함하고,
    각각의 프리로드 명령은 상이한 명령 캐시 라인 오프셋 표시자를 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  8. 제 7 항에 있어서,
    상기 복수의 프리로드 명령들은 상기 데이터 블록으로의 각각의 가능한 명령 오프셋에 대응하는 프리로드 명령을 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  9. 제 1 항에 있어서,
    상기 명령 캐시 라인 오프셋 표시자를 세팅하는 단계는 상기 프리로드 명령을 실행하는 단계 이전에 레지스터 내의 하나 이상의 비트들을 세팅하는 단계를 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  10. 제 1 항에 있어서,
    상기 명령 캐시 라인 오프셋 표시자에 의해 표시된 바와 같이 상기 제 1 유효 명령 이전에 상기 데이터 블록 내의 임의의 데이터를 프리-디코딩하는 단계를 더 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  11. 제 1 항에 있어서,
    상기 프리-디코드 정보를 기록하는 단계는 적어도 명령 길이를 표시하는 프리-디코드 정보를 상기 명령 캐시에 기록하는 단계를 포함하는, 가변-길이 명령 세트로부터의 명령들을 명령 캐시 내로 프리-로딩(pre-load)하는 방법.
  12. 메모리 인터페이스;
    가변-길이 명령 세트로부터의 명령들 및 프리-디코드 정보를 저장하도록 동작하는 명령 캐시;
    상기 명령 캐시로 로딩될 데이터 블록 내에서의 제 1 유효 명령의 위치를 식별하는 명령 캐시 라인 오프셋 표시자를 발생시키도록 동작하는 명령 실행 유닛; 및
    상기 명령 캐시와 상기 메모리 인터페이스 사이에 삽입되고, 프리로드 명령 실행 시에 상기 명령 캐시 라인 오프셋 표시자에 응답하여, 제 1 유효 명령으로 시작되는 상기 데이터 블록 내의 명령들을 연속적으로 프리-디코딩하도록 동작하는 프리-디코더를 포함하는,
    프로세서.
  13. 제 12 항에 있어서,
    상기 명령 실행 유닛은 상기 프리로드 명령의 타겟 어드레스의 하나 이상의 비트들을 세팅함으로써 상기 명령 캐시 라인 오프셋 표시자를 발생시키는,
    프로세서.
  14. 제 13 항에 있어서,
    상기 타겟 어드레스는 상기 프리로드 명령에 의해 판독되는 범용 레지스터에 기록되는,
    프로세서.
  15. 제 12 항에 있어서,
    상기 명령 실행 유닛은 상기 프리로드 명령의 op 코드 내의 하나 이상의 비트들에 응답하여 상기 명령 캐시 라인 오프셋 표시자를 발생시키는,
    프로세서.
  16. 제 12 항에 있어서,
    상기 명령 실행 유닛은 복수의 프리로드 명령들 중 하나를 실행하고,
    각각의 프리로드 명령은 상이한 명령 캐시 라인 오프셋 표시자를 특정하는,
    프로세서.
  17. 제 16 항에 있어서,
    상기 복수의 프리로드 명령들은 상기 데이터 블록으로의 각각의 가능한 명령 오프셋에 대응하는 프리로드 명령을 포함하는,
    프로세서.
  18. 제 12 항에 있어서,
    레지스터를 더 포함하고,
    상기 명령 실행 유닛은 상기 레지스터 내의 하나 이상의 미리 결정된 비트들을 세팅함으로써 상기 명령 캐시 라인 오프셋 표시자를 발생시키는,
    프로세서.
  19. 제 12 항에 있어서,
    상기 명령 캐시와 상기 메모리 인터페이스 사이에 삽입된 제 2 캐시 메모리를 더 포함하고,
    상기 프리-디코더는 상기 명령 캐시와 상기 제 2 캐시 메모리 사이에 삽입되는,
    프로세서.
  20. 제 12 항에 있어서,
    상기 프리-디코더는 상기 명령 캐시 라인 오프셋 표시자에 의해 표시되는 상기 제 1 유효 명령 이전에 상기 데이터 블록 내의 임의의 데이터를 프리-디코딩하 도록 추가적으로 동작하는,
    프로세서.
  21. 가변-길이 명령 세트 내의 적어도 하나의 프리로드 명령을 저장하는 컴퓨터 판독가능 매체로서,
    상기 프리로드 명령은 프로세서로 하여금 명령들을 명령 캐시로 프리로딩하게 하도록 동작하고,
    상기 명령들은 명령 캐시 라인 오프셋 표시자에 의해 특정되는 제 1 유효 명령으로 시작되어 프리-디코딩되는, 컴퓨터 판독가능 매체.
  22. 제 21 항에 있어서,
    상기 명령 캐시 라인 오프셋 표시자는 상기 프리로드 명령의 타겟 어드레스의 하나 이상의 비트들을 포함하는, 컴퓨터 판독가능 매체.
  23. 제 21 항에 있어서,
    상기 프리로드 명령 op 코드는 명령 캐시 라인 오프셋 표시자 비트 필드를 포함하는, 컴퓨터 판독가능 매체.
  24. 제 21 항에 있어서,
    상기 명령 캐시 라인 오프셋 표시자는 상기 프리로드 명령 실행 이전에 레지스터에 저장되는, 컴퓨터 판독가능 매체.
KR1020097022990A 2007-04-04 2008-04-03 적절한 프리-디코딩을 이용하여 가변-길이 명령 세트로부터의 명령들을 프리로딩하기 위한 시스템, 방법 및 소프트웨어 KR101081623B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/696,508 2007-04-04
US11/696,508 US7676659B2 (en) 2007-04-04 2007-04-04 System, method and software to preload instructions from a variable-length instruction set with proper pre-decoding

Publications (2)

Publication Number Publication Date
KR20090132638A KR20090132638A (ko) 2009-12-30
KR101081623B1 true KR101081623B1 (ko) 2011-11-09

Family

ID=39530631

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097022990A KR101081623B1 (ko) 2007-04-04 2008-04-03 적절한 프리-디코딩을 이용하여 가변-길이 명령 세트로부터의 명령들을 프리로딩하기 위한 시스템, 방법 및 소프트웨어

Country Status (6)

Country Link
US (1) US7676659B2 (ko)
EP (1) EP2142986A1 (ko)
JP (1) JP5313228B2 (ko)
KR (1) KR101081623B1 (ko)
CN (1) CN101646999B (ko)
WO (1) WO2008124473A1 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9075622B2 (en) * 2008-01-23 2015-07-07 Arm Limited Reducing errors in pre-decode caches
US8347067B2 (en) * 2008-01-23 2013-01-01 Arm Limited Instruction pre-decoding of multiple instruction sets
US7925866B2 (en) * 2008-01-23 2011-04-12 Arm Limited Data processing apparatus and method for handling instructions to be executed by processing circuitry
US8037286B2 (en) * 2008-01-23 2011-10-11 Arm Limited Data processing apparatus and method for instruction pre-decoding
US7917735B2 (en) * 2008-01-23 2011-03-29 Arm Limited Data processing apparatus and method for pre-decoding instructions
US7925867B2 (en) * 2008-01-23 2011-04-12 Arm Limited Pre-decode checking for pre-decoded instructions that cross cache line boundaries
US7747839B2 (en) 2008-01-23 2010-06-29 Arm Limited Data processing apparatus and method for handling instructions to be executed by processing circuitry
US9176739B2 (en) * 2011-08-05 2015-11-03 Cisco Technology, Inc. System and method for checking run-time consistency for sequentially and non-sequentially fetched instructions
US9459868B2 (en) * 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
US9354888B2 (en) 2012-03-28 2016-05-31 International Business Machines Corporation Performing predecode-time optimized instructions in conjunction with predecode time optimized instruction sequence caching
CN102932202B (zh) * 2012-10-25 2015-08-19 北京星网锐捷网络技术有限公司 审计外发信息的方法及装置
US9348598B2 (en) 2013-04-23 2016-05-24 Arm Limited Data processing apparatus and method for pre-decoding instructions to be executed by processing circuitry
US9959119B2 (en) * 2014-05-29 2018-05-01 Mill Computing, Inc. Computer processor employing double-ended instruction decoding
FR3097345B1 (fr) * 2019-06-13 2021-06-25 Stmicroelectronics Grand Ouest Sas Procede de gestion du fonctionnement d’une unite de calcul capable de fonctionner avec des instructions de tailles differentes et circuit integre correspondant
CN110750303B (zh) * 2019-09-25 2020-10-20 支付宝(杭州)信息技术有限公司 基于fpga的流水线式指令读取方法及装置
US11204768B2 (en) 2019-11-06 2021-12-21 Onnivation Llc Instruction length based parallel instruction demarcator
CN114625419B (zh) * 2022-05-16 2022-08-26 西安芯瞳半导体技术有限公司 一种可变长指令的缓存结构、方法及介质

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG45269A1 (en) * 1992-02-06 1998-01-16 Intel Corp End bit markers for instruction decode
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
TW357318B (en) * 1997-03-18 1999-05-01 Ind Tech Res Inst Branching forecast and reading device for unspecified command length extra-purity pipeline processor
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
US6175908B1 (en) * 1998-04-30 2001-01-16 Advanced Micro Devices, Inc. Variable byte-length instructions using state of function bit of second byte of plurality of instructions bytes as indicative of whether first byte is a prefix byte
US6260134B1 (en) * 1998-11-02 2001-07-10 Advanced Micro Devices, Inc. Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US6308257B1 (en) * 1999-04-20 2001-10-23 Intel Corporation Method and apparatus for generating boundary markers for an instruction stream including variable-length instructions
US6496921B1 (en) 1999-06-30 2002-12-17 International Business Machines Corporation Layered speculative request unit with instruction optimized and storage hierarchy optimized partitions
US6460132B1 (en) 1999-08-31 2002-10-01 Advanced Micro Devices, Inc. Massively parallel instruction predecoding
JP2001142692A (ja) * 1999-10-01 2001-05-25 Hitachi Ltd 2つの異なる固定長命令セットを実行するマイクロプロセッサ、マイクロコンピュータおよび命令実行方法
US6675374B2 (en) * 1999-10-12 2004-01-06 Hewlett-Packard Development Company, L.P. Insertion of prefetch instructions into computer program code
JP3644892B2 (ja) * 2001-01-22 2005-05-11 智原科技股▲ふん▼有限公司 複数組の命令組を実行するためのデータ処理装置
US6968430B1 (en) 2002-10-22 2005-11-22 Lsi Logic Corporation Circuit and method for improving instruction fetch time from a cache memory device

Also Published As

Publication number Publication date
EP2142986A1 (en) 2010-01-13
WO2008124473A1 (en) 2008-10-16
KR20090132638A (ko) 2009-12-30
JP2010524088A (ja) 2010-07-15
JP5313228B2 (ja) 2013-10-09
US20080250229A1 (en) 2008-10-09
CN101646999B (zh) 2016-10-12
CN101646999A (zh) 2010-02-10
US7676659B2 (en) 2010-03-09

Similar Documents

Publication Publication Date Title
KR101081623B1 (ko) 적절한 프리-디코딩을 이용하여 가변-길이 명령 세트로부터의 명령들을 프리로딩하기 위한 시스템, 방법 및 소프트웨어
US8145883B2 (en) Preloading instructions from an instruction set other than a currently executing instruction set
US5941980A (en) Apparatus and method for parallel decoding of variable-length instructions in a superscalar pipelined data processing system
EP2018609B1 (en) Pre-decoding variable length instructions
US7730283B2 (en) Simple load and store disambiguation and scheduling at predecode
US6275927B2 (en) Compressing variable-length instruction prefix bytes
US5826074A (en) Extenstion of 32-bit architecture for 64-bit addressing with shared super-page register
US20070288725A1 (en) A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism
EP1886217B1 (en) Caching instructions for a multiple-state processor
KR101839479B1 (ko) 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들
KR101005633B1 (ko) 일정한 개수의 가변 길이 명령을 가진 명령 캐시
US6240506B1 (en) Expanding instructions with variable-length operands to a fixed length
US6460116B1 (en) Using separate caches for variable and generated fixed-length instructions
US6253309B1 (en) Forcing regularity into a CISC instruction set by padding instructions
JP2886838B2 (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
FPAY Annual fee payment

Payment date: 20141030

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161028

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170929

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee