KR101581177B1 - 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공 - Google Patents

단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공 Download PDF

Info

Publication number
KR101581177B1
KR101581177B1 KR1020117005826A KR20117005826A KR101581177B1 KR 101581177 B1 KR101581177 B1 KR 101581177B1 KR 1020117005826 A KR1020117005826 A KR 1020117005826A KR 20117005826 A KR20117005826 A KR 20117005826A KR 101581177 B1 KR101581177 B1 KR 101581177B1
Authority
KR
South Korea
Prior art keywords
register
instruction
extension
address
registers
Prior art date
Application number
KR1020117005826A
Other languages
English (en)
Other versions
KR20110055629A (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 KR20110055629A publication Critical patent/KR20110055629A/ko
Application granted granted Critical
Publication of KR101581177B1 publication Critical patent/KR101581177B1/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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • 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
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3552Indexed addressing using wraparound, e.g. modulo or circular addressing

Landscapes

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

Abstract

N-비트 처리기(14)에 의해 업데이트를 갖는 제 1 메모리 액세스 명령의 실행은 복수의 레지스터들(34) 중 적어도 하나의 레지스터를 액세스하는 단계를 포함하고, 상기 액세스 단계는 제 1 레지스터를 액세스하는 단계를 포함하고, 복수의 레지스터들의 각 레지스터는 N 비트들의 주요부 및 M 비트들의 확장부를 포함하고, 제 1 레지스터의 주요부는 제 1 어드레스 피연산자를 포함한다. 제 1 명령의 실행은 제 1 어드레스 피연산자를 이용하여 메모리 액세스 어드레스를 형성하는 단계; 메모리 액세스를 위한 어드레스로서 메모리 액세스 어드레스를 이용하는 단계; 업데이트된 어드레스 피연상자를 생성하는 단계; 및 제 1 레지스터의 주요부에 업데이트된 어드레스 피연산자를 기록하는 단계를 추가로 포함한다. 상기 생성하는 단계는 변경 정보를 획득하기 위해 적어도 하나의 소스 레지스터의 소스 레지스터의 확장부를 액세스하는 단계 및 업데이트된 어드레스 피연산자를 생성하는데 변경 정보를 이용하는 단계를 포함한다.

Description

단일 명령 다중 데이터(SIMD)데이터 처리기에서 확장된 어드레싱 모드들의 제공{PROVISION OF EXTENDED ADDRESSING MODES IN A SINGLE INSTRUCTION MULTIPLE DATA (SIMD) DATA PROCESSOR}
본 개시는 일반적으로 데이터 처리기들에 관한 것으로, 보다 구체적으로는 SIMD 레지스터 확장들에서 확장된 어드레싱 모드들을 제공하는 것이다.
데이터 처리 시스템들에서 증가한 성능은 다수의 벡터 요소들 상에서 동작들의 병렬 실행을 허용함으로써 달성될 수 있다. 오늘날 이용 가능한 처리기의 한 형태는 벡터 동작들을 수행하기 위한 벡터 레지스터들을 활용하는 벡터 처리기이다. 그러나, 벡터 처리기들은 더 높은 성능을 허용하지만, 스칼라 범용 레지스터들을 이용하는 처리기들과 비교하여 복잡성 및 비용이 또한 증가한다. 즉, 벡터 처리기들 내의 벡터 레지스터 파일은 통상적으로 N 벡터 레지스터들을 포함하며, 여기서 각 벡터 레지스터는 M 요소들을 보유하는 M 레지스터들의 뱅크를 포함한다. 알려진 처리기의 다른 형태는 스칼라 범용 레지스터(GPR)를 이용하지만 제한된 벡터 처리를 허용하는 단일-명령 다중-데이터(SIMD) 스칼라 처리기("단-벡터 머신"으로도 칭함)이다. 그러므로, 동작 당 요소들의 수가 벡터 처리기들에 비해 제한되지만, 감소된 하드웨어가 요구된다.
SIMD 처리기들 상에서 실행되는 다수의 상이한 애플리케이션들은 순환 어드레싱 또는 비트-반전 어드레싱과 같은 특별한 어드레싱을 필요로 한다. 그러나, 로드 및 저장 명령들은 통상적으로 예를 들어, 큰 변위(displacement)들로 인해 제한된 옵코드 공간 중 많은 양이 인코딩될 것을 필요로 한다. 그러므로, 종종 임의의 부가적인 기능성을 지원하기 위한 어떠한 옵코드 공간도 남아있지 않는다. 그러므로, 옵코드 공간의 증가 없이 부가적인 어드레싱 제어의 명세가 바람직하다.
본 발명은 예로서 예시되고, 유사한 참조부호들이 유사한 요소들을 지시하는 첨부 도면들에 의해 제한되지 않는다. 도면들에서의 요소들은 단순성 및 명료성을 위해 예시되고, 축적대로 그려진 것은 아니다.
일 실시예에서, 상이한 어드레싱 모드들의 이용을 지원하는 SIMD 데이터 처리 명령들이 제공된다. 예를 들어, 일 실시예에서, 인덱스 형태 벡터 로드 또는 저장 명령은 2개의 소스 범용 레지스터들을 특정하고, 여기서 하나의 소스 범용 레지스터(GPR)의 주요부는 베이스 어드레스를 제공하는데 이용되고, 다른 소스 GPR의 주요부는 인덱스값(즉, 오프셋값)을 제공하는데 이용된다. 베이스 어드레스를 제공하는 소스 GPR 또는 인덱스 값을 제공하는 소스 GPR 중 어느 하나의 확장부는 벡터 로드 또는 저장 명령의 증가한 기능성을 허용하는 부가적인 어드레싱 제어 정보를 제공하는데 이용된다. 일 실시예에서, 변위 형태 벡터 로드 또는 저장 명령은 하나의 소스 GPR을 특정하고, 여기서 상기 하나의 소스 GPR의 주요부는 베이스 어드레스를 제공하는데 이용되고 상기 하나의 소스 GPR의 확장부는 부가적인 어드레싱 제어 정보를 제공하는데 이용된다. 이러한 방식으로, 어드레싱 모드 기능성은 옵코드 크기의 증가 없이 증가될 수 있다.
여기서 이용된 용어 "버스(bus)"는 데이터, 어드레스들, 제어, 또는 상태와 같이 하나 이상의 다양한 정보 형태들을 전달하는데 이용될 수 있는 도체들 또는 복수의 신호들을 지칭하는데 이용된다. 여기서 논의되는 도체들은 단일의 도체, 복수의 도체들, 단방향성 도체들, 또는 양방향성 도체들이 되는 것으로 참조하여 예시 또는 기술될 수 있다. 그러나, 상이한 실시예들에서 도체들의 구현은 변할 수 있다. 예를 들어, 양방향성 도체들이 아니라 별도의 단방향성 도체들이 이용될 수 있고 그 반대일 수 있다. 또한, 복수의 도체들은 다수의 신호들을 직렬로, 또는 시간 다중화된 방식으로 전달하는 단일의 도체로 대체될 수 있다. 유사하게, 다수의 신호들을 전달하는 단일의 도체들은 이 신호들의 서브세트들을 전달하는 다양한 상이한 도체들로 분할될 수 있다. 그러므로, 신호들을 전달하는데 다수의 옵션들이 존재한다.
용어 "어써트(assert)" 또는 "세트(set) 및 "부정하는(negate)"(또는 "디어써트(deassert)" 또는 "클리어(clear)")는 여기서 논리적으로 참 또는 논리적으로 거짓 상태로 신호, 상태 비트, 또는 유사한 기구의 렌더링을 참조할 때 각각 이용된다. 논리적으로 참 상태는 논리적 레벨 1인 경우, 논리적으로 거짓 상태는 논리적 레벨 0이다. 논리적으로 참 상태가 논리적 레벨 0인 경우, 논리적으로 거짓 상태는 논리적 레벨 1이다.
여기에 기술된 각 신호는 양의 또는 음의 로직으로서 설계될 수 있고, 여기서 음의 로직은 단일 명칭위의 바(bar) 또는 명칭에 이어지는 에스터릭스(*)로 표시될 수 있다. 음의 로직 신호의 경우에, 신호는 논리적으로 참 상태가 논리적 레벨 0에 대응하는 활성 로우이다. 양의 로직 신호의 경우, 신호는 논리적으로 참인 상태가 논리적 레벨 1에 대응하는 활성 하이이다. 여기에서 기술된 임의의 신호들은 음의 또는 양의 로직 신호들 중 하나로서 설계될 수 있다는 점에 주의한다. 그러므로, 대안 실시예에서, 양의 로직 신호들로서 기술된 신호들은 음의 로직 신호들로서 구현될 수 있고, 음의 로직 신호들로서 기술된 신호들은 양의 로직 신호들로서 구현될 수 있다.
또한, 여기서 사용된, 워드(w)는 4바이트를 포함하고, 하프워드(h)는 2바이트를 포함하고, 더블워드(d)는 8바이트를 포함한다. 그러나, 대안 실시예들에서, 워드는 2바이트로서 및 더블워드는 4바이트로서 규정될 수 있다. 번호에 선행하는 심볼 "$" 또는 "0x"는 해당 번호가 16 진법 또는 16진수 형태로 표현되었다는 것을 지시한다. 번호에 선행하는 심볼 "%"는 해당 번호가 이진법 또는 이진수 형태로 표현되었다는 것을 지시한다.
본 발명은 데이터 처리기들에서 SIMD 레지스터 확장들에서 확장된 어드레싱 모드들을 제공하는 방법을 제공한다.
도 1은 본 발명의 일 형태에 따라, SIMD 데이터 처리 시스템을 블록도 형태로 예시하는 도면.
도 2는 본 발명의 형태에 따라, 도 1의 SIMD 데이터 처리 시스템의 스칼라 범용 레지스터 파일을 블록도 형태로 예시하는 도면.
도 3은 본 발명의 일 실시예에 따라, 도 1의 SIMD 데이터 처리 시스템에 의해 실행하기 위한 로드 벡터 명령을 형성하는 인덱스의 일 형태를 예시하는 도면.
도 4는 본 발명의 일 실시예에 따라, 도 2의 스칼라 범용 레지스터 파일의 범용 레지스터를 블록도 형태로 예시하는 도면.
도 5는 본 발명의 일 실시예에 따라, 도 2의 스칼라 범용 레지스터 파일의 범용 레지스터를 블록도 형태로 예시하는 도면.
도 6은 순환 버퍼 어드레싱의 예를 예시하기 위해 도 1의 메모리의 부분을 블록도 형태로 예시하는 도면.
도 7은 본 발명의 일 실시예에 따라, 도 2의 스칼라 범용 레지스터 파일의 범용 레지스터를 블록도 형태로 예시하는 도면.
도 8은 비트-반전된 어드레싱의 예를 예시하는 도면.
도 9는 비트-반전된 어드레싱 증분들을 결정하기 위해 이용될 수 있는 상이한 데이터 크기들 및 및 상이한 수의 데이터에 대한 마스크들의 예시 값들의 표를 도시하는 도면.
도 10은 본 발명의 일 실시예에 따라, 예시 베이스 어드레스 포인터값, 예시 인덱스값, 예시 마스크 값, 및 예시 비트-반전된 어드레싱 시퀀스를 다어어그램 형태로 예시하는 도면.
도 11은 고속 푸리에 변환(TTF) 버퍼의 데이터 요소들을 저장하는 도 1의 SIMD 데이터 처리 시스템의 메모리의 일부를 다어어그램 형태로 예시하는 도면.
도 12는 본 발명의 일 실시예에 따라, 도 1의 SIMD 데이터 처리 시스템에 의해 실행하기 위한 변위 형태 로드 벡터 명령의 일 형태를 예시하는 도면.
도 13은 도 1의 처리기에 의해 실행하기 위해 종래 기술의 비-SIMD 인덱스 형태 로드 명령의 일 형태를 예시하는 도면.
도 1은 본 발명의 일 실시예에 따른 데이터 처리 시스템(10)을 블록도 형태로 예시한다. 데이터 처리 시스템(10)은 SIMD 명령들을 실행할 수 있으므로, 시스템(10)은 또한 SIMD 데이터 처리 시스템으로도 칭해질 수 있다. 데이터 처리 시스템(10)은 메모리(12), 처리기(14), 입력/출력(I/O)(16), 다른 주변장치(18) 및 시스템 버스(20)를 포함한다. 메모리(12)는 도체들(22)을 통해 시스템 버스(20)에 양방향성으로 결합되고, I/O(16)는 도체들(24)을 통해 시스템 버스(20)에 양방향성으로 결합되고, 다른 주변장치들(18)은 도체들(26)을 통해 시스템 버스(20)에 양방향성으로 결합되고, 처리기(14)는 도체들(58)을 통해 시스템 버스(20)에 양방향성으로 결합된다. 일 실시예에서, 다른 주변장치들(18)은 각각이 범용 비동기화 송수신기(UART), 실시간 클록(RTC), 키보드 제어기, 다른 메모리들 등과 같은 임의의 형태의 주변장치일 수 있는 하나 이상의 주변장치들을 포함할 수 있다. 다른 주변장치들(18)의 일부 또는 모두는 도체들(62)을 통해 데이터 처리 시스템(20) 외부와 정보를 통신할 수 있다. I/O(16)는 예를 들어, 도체들(60)을 통해 데이터 처리 시스템(20) 외부와 정보를 수신하거나 제공하는 임의 형태의 I/O 회로를 포함할 수 있다. 메모리(12)는 예를 들어, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 비-휘발성 메모리(예를 들어, 플래시) 등과 같이 임의의 형태의 메모리일 수 있다. 데이터 처리 시스템(10)은 예시된 것 이외의 요소들을 포함할 수 있고, 또는 예시된 것보다 많은 또는 적은 요소들을 포함할 수 있다. 예를 들어, 데이터 처리 시스템(10)은 임의의 수의 메모리들 또는 처리기들을 포함할 수 있다.
처리기(14)는 예를 들어, 마이크로프로세서, 마이크로제어기, 디지털 신호 처리기 등과 같은 임의의 형태의 처리기일 수 있다. 일 실시예에서, 처리기(14)는 처리기 코어로서 칭해질 수 있다. 다른 실시예에서, 처리기(14)는 다중-처리기 데이터 처리 시스템에서 다수의 처리기들 중 하나일 수 있다. 또한, 이러한 것으로서, 예시되지 않았지만, 처리기(14)는 파이프라인 처리기일 수 있다. 처리기(14)는 또한 SIMD 처리기로도 칭해질 수 있다는 점에 주의한다. 도 1에서 예시된 실시예에서, 처리기(14)는 제어 유닛(28), 명령 유닛(30), 실행 유닛들(32), 스칼라 범용 레지스터(GPR) 파일(34), 버스 인터페이스 유닛(BIU)(36), 및 로드/저장 유닛(38)을 포함한다. 제어 유닛(28)은 도체들(40)을 통해 명령 유닛(30)에, 도체들(42)을 통해 실행 유닛들(32)에, 도체들(46)을 통해 스칼라 파일(34)에, 및 도체들(48)을 통해 로드/저장 유닛(38)에 양방향성으로 결합된다. 실행 유닛들(32)은 도체들(44)을 통해, 스칼라 레지스터 파일(34)에 양방향성으로 결합되고, 스칼라 레지스터 파일(34)은 도체들(50)을 통해 로드/저장 유닛(38)에 양방향성으로 결합된다. BIU(36)은 도체들(54)을 통해 명령 유닛(30)에 및 도체들(52)을 통해 로드/저장 유닛(38)에 양방향성으로 결합된다. 처리기(14)는 도체들(58)에 결합된 도체들(56)을 통해 시스템 버스(20)와 양방향성으로 통신할 수 있다. 처리기(14)는 예시되 것보다 많은 회로를 포함할 수 있고, 부가적인 회로는 도체들(58)을 통해 또한 결합될 수 있다는 것을 주의하라. 즉, 도체들(56)은 도체들(58)의 일부 또는 모두를 통해 시스템 버스(20)와 통신할 수 있다. 처리기(14)의 일부 또는 모두는 처리 회로로 칭해질 수 있다는 것에 또한 주의한다.
동작에서, 명령 유닛(30)은 BIU(36) 및 시스템 버스(20)를 통해, 메모리(12)와 같은 메모리로부터 명령들을 가져오고(fetch), 제어 유닛(28)으로부터 및 제어 유닛(28)으로 제어 정보를 수신 및 제공한다. 명령 유닛(30)은 당분야에 잘 알려진 임의의 형태의 명령 유닛일 수 있고, 당 분야에서 알려진 바와 같이 동작하고, 그러므로 여기서 보다 상세히 기술되진 않을 것이다. 이에 따라, 명령 유닛(30)은 제어 유닛(28)에 명령들을 제공하고, 제어 유닛(28)은 예를 들어, 필요되는 스칼라 레지스터 파일(34)과 통신할 수 있는 실행 유닛들(32) 및 로드/저장 유닛(38)을 통해, 직접 또는 제어 유닛(28)을 통해 이 수신된 명령들의 실행을 제어한다. 예를 들어, 제어 유닛(28)은 로드/저장 유닛(38) 및 BIU(36)을 통해, 명령들을 실행하기 위해 필요한 스칼라 레지스터 파일(34)내의 레지스터들로 메모리(예를 들어, 메모리(12))로부터 데이터를 로딩할 수 있고, 명령들을 실행하기 위해 필요한 스칼라 레지스터 파일(34)내의 레지스터들로부터 메모리(예를 들어, 메모리(12))로 데이터를 저장할 수 있다. 예를 들어, 일 실시예에서, 로드/저장 유닛(38)은 도체들(48)을 통해 제어 유닛(28)으로부터 제공된 제어 정보에 기초하여 도체들(50)을 통해 (데이터를 판독 및 기록하기 위해) 스칼라 레지스터 파일(34)과 직접 통신할 수 있다. 실행 유닛들(32)은 스칼라 레지스터 파일(34)내에 저장된 데이터를 이용하여 산술, 논리적, 시프팅(shifting), 또는 다른 동작들을 수행할 수 있고, 제어 유닛(28)에 의해 명령 유닛(30)으로부터 수신된 명령들을 실행하기 위해 필요한 스칼라 레지스터 파일(34)내의 레지스터들에 결과들을 저장한다. 실행 유닛들(32)은 예를 들어, 산술 로직 유닛들(ALU들), 플로팅 포인트 유닛들(floating point units) 등을 포함할 수 있다. 스칼라 레지스터 파일(34)은 도체들(46)을 통해 제어 유닛(28)으로 또는 제어 유닛(28)으로부터 제어 정보 또는 데이터를 제공 또는 수신할 수 있다.
처리기(14)의 동작은 여기서 기술된 다양한 실시예들을 이해하는데 필요한 부분들 이외에는 여기서 보다 상세히 기술되지 않을 것이다. 또한, 스칼라 범용 레지스터 파일에 저장된 피연산자들(operands)을 갖는 데이터 처리 시스템들에 대한 기존의 설계는 벡터 로드 및 저장 명령들을 실행하는데 필요한 대로 변형될 수 있다는 점에 주의한다.
도 2에는 스칼라 범용 레지스터 파일(34)의 블록도가 예시된다. 예시된 실시예에서, 스칼라 레지스터 파일(34)은 32개의 범용 레지스터들(GPR들)을 포함한다. 그러나, 대안 실시예들에서, 스칼라 레지스터 파일은 임의의 수의 GPR들을 포함할 수 있다. 여기서 이용된 바와 같이, 스칼라 레지스터는 일차원 맵을 갖는 레지스터를 나타내고 따라서, 데이터의 하나의 로우만을 보유한다. 스칼라 레지스터 파일(34)의 각 GPR은 주요부(각 GPR의 N 하위 비트들(lower bits)을 포함) 및 SIMD 확장부(각 GPR의 M 상위 비트들을 포함)을 포함한다. 예시적인 실시예에서, N은 32비트이고, M은 32비트이고, 이에 따라, 각 GPR은 SIMD 동작들에 대해 64 비트량을 저장할 수 있는 64-비트 레지스터가 된다. 여기서 기술된 실시예들에서, 스칼라 레지스터 파일(34)의 각 GPR은 8바이트들이고, 여기서, SIMD 동작들을 위해 이용될 때, 각 GPR은 예를 들어, 2 워드-크기 벡터 요소들, 4 하프워드-크기 벡터 요소들, 또는 8바이트-크기 벡터 요소들을 저장할 수 있다.
예시적인 실시예에서, GPR 파일(34)의 주요부는 비-SIMD 동작들을 위해 이용되고, 여기서, GPR 파일(34)의 SIMD 확장부는 비-SIMD 명령들을 실행시에 또는 명령들(벡터 로드 및 벡터 저장 명령들을 포함)을 로드 및 저장하기 위한 유효 어드레스(EA) 값들을 형성할 때 이용되지 않는다. 또한, GPR의 확장부에 저장된 임의의 값들은 비-SIMD 동작들을 수행할 때 보존된다. 일 실시예에서, 주요부의 비트들의 수, 즉 N은 처리기(14)의 아키텍처에 의해 결정된다. 예를 들어, 처리기(14)는 N-비트 처리기라고 고려된다. N-비트 처리기는 고유의(예를 들어, 비-확장된) 정수 데이터 타입이 N 비트들인 처리기를 지칭한다. 통상적으로, N-비트 처리기의 포인터들은 N비트들이고; 따라서, 포인터값(GPR의 주요부내에 저장됨)은 2N 바이트를 액세스할 수 있다. 즉, N-비트 처리기는 N-비트 어드레스 공간을 갖는다. 그러므로, 일 실시예에서, GPR들의 주요부에 대한 비트들의 수 즉, N은 처리기의 타입, 또는 처리기의 명령 세트 아키텍처에 의해 결정된다. 그러므로, GPR들의 확장부의 비트들의 수 즉, M은 N비트들을 넘어서 확장한다. 예시된 실시예에서, 처리기(14)는 32-비트 처리기(고유의, 비-확장된 정수 데이터 타입은 32비트들이고 포인터 값들은 32비트들임)라고 가정된다. 그러므로, GPR들의 주요부는 32비트들이다(즉 N=32). 예시된 실시예에서, GPR들의 주요부는 레지스터 파일(34)의 하위부(예를 들어, 하위 절반)에 대응한다(즉, 각 GPR의 비트들 32:63). 예시된 실시예에서, 확장부는 또한 32비트들(즉, M=32)이고, 레지스터 파일(34)의 상위부(예를 들어, 상위 절반)에 대응한다(즉, 각 GPR의 비트들 0:31). 대안으로, 스칼라 GPR 파일(34)은 주요부가 N 비트들을 포함하고, 확장부가 N 비트를 넘는 M 비트들을 포함하는 한 다르게 구성될 수 있어서, 각 GPR(또는 SIMD 동작들을 위해 이용된 GPR들의 서브셋)은 N+M 비트들을 포함한다. 예를 들어, 주요부는 레지스터 파일(34)의 상위부에, 확장부는 하위부에 대응할 수 있다. 대안의 실시예들은 N=32 및 M=96과 같이 M 및 N에 대해 상이한 값들을 가질 수 있고, 여기서 SIMD 벡터의 폭은 이러한 실시예들에 대한 고유의 정수 데이터 타입에 대응하게 크고, 따라서 처리기의 베이스 N-비트 아키텍처를 유지하면서 보다 큰 SIMD 벡터 길이들을 지원한다.
도 2의 예시된 실시예에서, 레지스터 파일(34)의 확장부는 음영이 있고, 확장부는 SIMD 동작들을 위해서만 이용되므로 SIMD 확장부로서 지칭된다. 대안의 실시예에서, 다른 특별한 기능들은 배 정밀도(double-precision) 부동 포인트 값들과 같은 확장된 부분을 이용할 수 있다. 그러나, 일 실시예에서, 확장부들은 처리기(14)내의 비-SIMD 정수 동작들을 위해 이용되지 않는다. 또한, 각 레지스터의 확장부는 각 레지스터의 주요부와 별개로 어드레싱 가능하거나 독립적으로 액세스 가능하지 않다. 즉, 예를 들어, r0의 확장부는 r0를 액세스함으로써만 액세스할 수 있고, 확장부는 단순히 r0의 N-비트 주요부의 M-비트 확장부이므로, r0의 주요부로부터 독립적으로 어드레싱할 수 없다. 또한, 도 2에 도시된 GPR들(r1 내지 r31)의 확장부들 및 주요부들에 대한 경우도 동일하다.
도 13에는 종래의 기술에 따라 비-SIMD(즉, 스칼라) 정수 로드 명령(Iwz[u]x)을 형성하는 인덱스의 일 형태가 예시된다. 도 13에 예시된 바와 같이, Iwz[u]x는 목적 레지스터(rD) 및 2개의 소스 레지스터들(rA 및 rB)을 지시하는 32비트 명령이다. Iwz[u]x 명령은 업데이트 값(U)이, 업데이트 없이 인덱스를 갖는 로드 또는 인덱스 및 업데이트를 갖는 로드 중 어느 것이 수행되어야 하는지를 지시하도록 특정되는 것을 허용한다. U=1인 경우(Iwzux), rA의 업데이트는 명령의 동작의 부분으로서 수행된다. U=0(Iwzx)인 경우, rA의 업데이트는 수행되지 않는다. Iwz[u]x 명령은 명령의 형태 또는 기능을 식별하기 위한 옵코드 필드(opcode field)(비트들 0:5)를 포함한다. 명령 내의 목적 필드(비트들 6:10)는 스칼라 레지스터 파일(34)내의 레지스터(D)를 식별하는 "rD"로 라벨링된 목적 레지스터 식별자이다. 명령내의 제 1 소스 필드(비트들 11:15)는 스칼라 레지스터 파일(34)내의 레지스터(A)를 식별하는 "rA"로 라벨링된 소스 레지스터 식별자이고, 명령 내의 제 2 소스 필드(비트들 16:20)는 스칼라 레지스터 파일(34)내의 레지스터(B)를 식별하는 "rB"로 라벨링된 소스 레지스터 식별자이다. 명령은 명령의 기능성을 추가로 특정하기 위해 이용될 수 있는 서브옵코드 필드(비트들 21:31)를 또한 포함한다. 예시된 실시예에서, U는 명령의 서브옵코드 내의 비트(예시된 실시예에서 비트 위치 25)로서 포함된다는 것에 주의한다.
Iwz[u]x 명령은 메모리로부터 목적 레지스터의 주요부에 32비트 정수 워드를 로딩한다. 따라서, 처리기(14)가 32-비트 처리기인 예시된 실시예들에서, Iwz[u]x 명령은 목적 레지스터의 주요부에 32비트-정수 워드를 로딩하는데 이용될 수 있다. 이는 보통(비-SIMD) 정수 로드 명령이기 때문에, 데이터 레지스터의 SIMD-전용부에는 영향을 미치지 않는다. 명령의 동작은 SIMD 성능 없는 ISA 호환 가능한 처리기상에서 명령의 동작과 동일하다. Iwz[u]x 명령을 실행하면, rA(베이스 어드레스 값을 저장함)의 주요부 및 rB(인덱스 값을 저장함)의 주요부의 콘텐트들은 유효 어드레스(예를 들어, EA[0:31])를 산출하는데 이용된다. 그러면, EA[0:31]에 의해 포인팅된 메모리(12)내의 메모리 위치에 위치한 32-비트 워드는 rD의 주요(정수)부로 로딩된다. 즉, 메모리(12)의 EA에 의해 포인팅된 워드는 rD[32:63]으로 로딩된다. U=0(즉, Iwzx 명령)인 경우, rA의 업데이트가 수행되지 않는다. 그러나, U=1(즉, Iwzux 명령)인 경우, 메모리 데이터로 rD를 업데이트하는 로드 동작 이외에, rA의 업데이트가 수행된다. 즉, 보통 로드 명령들의 업데이트 타입은 업데이트된 베이스 값을 이용하여 후속 로드 명령에 대한 로드 동작을 위해 이용되는 계산된 EA[0:31] 값과 동일한 새로운 베이스 값으로 rA의 베이스 값을 업데이트하기 위해 이용될 수 있다. 따라서, 명령들로부터의 업데이트는 로드 동작을 어드레스 피연산자 업데이트 동작과 조합함으로써 부가적인 병행(parallelism)을 단일의 명령에 제공한다. 보통 정수 로드 명령들에 대해, 레지스터들(rA, rB, rD)의 확장부(SIMD-전용부)는 이용되거나 업데이트되지 않는다는 점에 주의한다.
유사하게, 대응하는 보통(비-SIMD, 스칼라) 정수 저장 명령(stw[u]x, rS, rA, rB)은 로드 명령과 유사하게 동작한다는 것에 주의한다. stw[u]x 명령은 rS에 의해 지시된 GPR로부터의 정수 워드를 EA에 의해 포인팅된 메모리의 위치에 저장한다(여기서, 베이스 어드레스 값을 저장하는 rA, 인덱스 값을 저장하는 rB의 콘텐트들은 EA[0:31]을 산출하는데 이용됨). 로드 명령과 마찬가지로, U=0(즉, stwx 명령)인 경우, rA의 업데이트는 수행되지 않는다. 그러나, U=1(즉, stwux 명령)인 경우, rA의 업데이트는 산출된 EA[0:31]로 rA의 주요부를 업데이트함으로써 발생한다. 정수 저장 명령들에 대해, 레지스터들(rA, rB, rS)의 확장부(SIMD-전용부)는 이용되거나 업데이트되지 않는다는 점에 주의한다.
도 3에는 본 발명의 일 실시예에 따라, 인덱스 형태 벡터(SIMD) 로드 명령(evldh[u]x)의 일 실시예를 예시한다. 예시된 실시예에서, evldh[u]x는 목적 레지스터 즉, rD 및 2개의 소스 레지스터들 즉, rA 및 rB을 지시하는 32비트 명령이다. evldh[u]x 명령은 업데이트 값(U)이 업데이트 없이 인덱스를 갖는 로드 또는 인덱스 및 업데이트를 갖는 로드 중 어느 것이 수행되는지를 지시하도록 특정되는 것을 허용한다. U=1인 경우(evldhux), rA의 업데이트는 명령의 동작의 부분으로서 수행되며, 이는 이하에 더 자세하게 설명될 것이다. U=0(evldhx)인 경우, rA의 업데이트는 수행되지 않는다. evldh[u]x 명령은 명령의 타입 또는 기능을 식별하기 위한 옵코드 필드(비트들 0:5)를 포함한다. 명령 내의 목적 필드(비트들 6:10)는 스칼라 레지스터 파일(34)내의 레지스터(D)를 식별하는 "rD"로 라벨링된 목적 레지스터 식별자이다. 명령내의 제 1 소스 필드(비트들 11:15)는 스칼라 레지스터 파일(34)내의 레지스터(A)를 식별하는 "rA"로 라벨링된 소스 레지스터 식별자이고, 명령 내의 제 2 소스 필드(비트들 16:20)는 스칼라 레지스터 파일(34)내의 레지스터(B)를 식별하는 "rB"로 라벨링된 소스 레지스터 식별자이다. 명령은 명령의 기능성을 추가로 특정하기 위해 이용될 수 있는 서브옵코드 필드(비트들 21:31)를 또한 포함한다. 예시된 실시예에서, U는 명령의 서브옵코드 내의 비트(예시된 실시예에서 비트 위치 25)로서 포함된다는 것에 주의한다. 그러나, 대안의 실시예들에서, 업데이트 여부에 관한 지시는 상이한 옵코드들 또는 명령 내의 상이한 비트로서 제공될 수 있다. 대안으로, 다른 비트 길이 명령들이 구현될 수 있고, 각 명령 필드의 비트 크기는 구현에 대해 특정하다. 그러나, 위에서 논의한 바와 같이, 다수의 명령 세트 아키텍처들에서, 옵코드 및 서브옵코드 공간은 제한되고, 따라서, 부가적인 명령 비트 길이는 이용가능하지 않을 수 있다. 또한, 다른 실시예들에서, 부가적인 필드들 또는 다른 필드들이 구현될 수 있다. 또한, 필드들(rD, rA, rB)의 순서는 도 3에서 예시된 것과 다른 시퀀스들로 변경될 수 있다.
evldh[u]x 명령은 메모리로부터 목적 레지스터의 4개의 하프워드들로 더블 워드를 로딩한다. 따라서, 처리기(14)가 32-비트 처리기인 예시된 실시예에서, evldh[u]x 명령은 16-비트 벡터 요소들을 SIMD 목적 레지스터로 로딩하는데 이용될 수 있다. evldh[u]x 명령을 실행하면, rA(베이스 어드레스 값을 저장함) 및 rB(인덱스 값을 저장함)의 콘텐트들은 유효 어드레스(예를 들어, EA[0:31])를 산출하는데 이용된다. (rB의 인덱스 값이 0인 경우 rA의 베이스 어드레스 값은 EA로서 직접 이용될 수 있다는 점에 주의한다.) 그러면, EA[0:31]에 의해 포인팅된 메모리(12)내의 메모리 위치에 위치한 더블워드는 rD의 조합된 확장 및 주요부들내로 로딩된다. 즉, 메모리(12)의 EA에 의해 포인팅된 하프워드는 rD[0:15]로, 메모리(12)의 EA+2에 의해 포인팅된 하프워드는 rD[16:31]로, 메모리(12)의 EA+4에 의해 포인팅된 하프워드는 rD[32:47]로, 및 메모리(12)의 EA+6에 의해 포인팅된 하프워드는 rD[48:63]로 로딩된다. (순환 버퍼 어드레싱 예를 참조하여 이하에 논의되는 것과 같이, rD로 4개의 벡터 요소들을 로딩하는데 이용되는 상기 EA들 중 임의의 것은 순환 버퍼의 길이 경계를 감쌀 수 있다는 점에 주의한다.) U=0(즉, evldhx 명령)인 경우, rA의 업데이트가 수행되지 않는다. 그러나, U=1(즉, evldhux 명령)인 경우, 메모리 데이터로 rD의 전체 콘텐트들(주요부 및 확장부 둘 다)을 업데이트하는 로드 동작 이외에, rA 또는 rB의 확장부는 rA의 업데이트가 어떻게 수행되지를 결정하는데 이용된다. 즉, rA 또는 rB는 선형 어드레싱, 랩-어라운드를 갖는 순환 버퍼 어드레싱, 또는 비트-반전된 어드레싱과 같은 상이한 어드레싱 방식들을 구현하기 위해 rA의 업데이트가 어떻게 발생하는지를 정의하는 제어 정보를 추가로 제공하는데 이용될 수 있다. 일 실시예에서, rA의 업데이트된 값은 rA의 이전의 값에 기초하고, 여기서 이는 베이스 어드레스 또는 EA를 변형함으로써 달성될 수 있다. SIMD 로드 명령들의 업데이트 형태들은 업데이트된 베이스 값을 이용하여 후속 로드 명령에 대한 새로운 베이스 값으로 rA의 베이스 값을 업데이트 하기 위해 선택될 수 있다. 따라서, 명령들로부터의 업데이트는 로드 동작을 어드레스 피연산자 업데이트 동작과 조합함으로써 부가적인 병행을 단일의 명령에 제공할 수 있다.
유사하게, 대응하는 SIMD 저장 명령(evstdh[u]x rS, rA, rB)은 SIMD 로드 동작과 유사하게 동작한다는 것에 주의한다. evstdh[u]x 명령은 rS에 의해 지시된 GPR로부터의 4개의 하프워드들을 EA에 의해 포인팅된 메모리의 위치에 저장한다(여기서, 베이스 어드레스 값을 저장하는 rA, 및 인덱스 값을 저장하는 rB의 콘텐트들은 EA[0:31]을 산출하는데 이용됨). (rB의 인덱스 값이 0인 경우, rA의 베이스 어드레스 값은 EA로서 직접 이용될 수 있다.) SIMD 로드 명령과 마찬가지로, U=0(즉, evstdhx 명령)인 경우, rA의 업데이트는 수행되지 않는다. 그러나, U=1(즉, evstdhux 명령)인 경우, rA 또는 rB의 확장부는 rA의 업데이트를 어떻게 수행될지 결정하는데 이용된다. 즉, rA 또는 rB의 확장부는 SIMD 로드 또는 저장 명령들을 실행할 때, 랩-어라운드를 갖는 순환 버퍼 어드레싱, 또는 비트-반전된 어드레싱과 같은 상이한 어드레싱 기술들을 구현하기 위해 rA의 업데이트가 어떻게 발생하는지를 정의하는 제어 정보(즉, 변형 정보)를 추가로 제공하는데 이용될 수 있다. 그러므로, EA의 산출 및 U=1일 때 업데이트가 어떻게 수행되는지 추가로 정의하기 위한 확장부의 사용 및 EA의 산출에 관해 이어지는 설명들은 인덱스 형태 SIMD 로드 및 인덱스 형태 SIMD 저장 명령들 둘 다에 적용한다. 그러나, 설명의 편의를 위해, 여기의 본 명세서의 다수의 예들은 SIMD 로드 명령에 대응한다. 또한, 임의의 요소 크기는 하프워드가 아닌 SIMD 로드 또는 SIMD 저장 명령에서 규정될 수 있다는 점에 주의한다. 예를 들어, 여기서 제공된 설명들은 메모리로부터 8바이트들을 로딩하는 evldb[u]x, 또는 메모리로 8바이트들을 저장하는 evstdh[u]x와 유사하게 적용될 수 있다. 설명들은 메모리로부터 2 워드들을 로딩하는 evldb[u]x, 또는 메모리로 2워드들을 저장하는 evstdh[u]x와 유사하게 또한 적용될 수 있다.
도 4는 본 발명의 일 예에 따라, GPR의 확장부 및 주요부를 예시한다. GPR의 주요부(비트들 32:63)는 어드레스 피연산자(예를 들어, 베이스 어드레스들 또는 인덱스값)를 저장한다. 그러므로, 이는 rA(어드레스 피연산자로서 베이스 어드레스들을 저장함)에 의해 지정된 GPR의 주요부 또는 rB(어드레스 피연산자로서 인덱스값을 저장함)에 의해 지정된 GPR의 주요부에 대응할 수 있다. 확장부(비트들 0:31)는 모드 필드(mode field) 및 어드레스 업데이트 제어 필드를 포함한다. 예시된 실시예에서, 모드 필드는 GPR의 비트들 0:2에 위치한 3-비트 필드이고, 어드레스 업데이트 제어 필드는 비트들 3:31에 위치한 29-비트 필드이다. 모드 필드는 무슨 형태의 어드레스 업데이트가 SIMD 로드 또는 저장 명령에 대해 수행될 것인지를 규정하는데 이용될 수 있고, 업데이트를 위해 필요한 경우, 어드레스 업데이트 제어 필드는 부가적인 제어 정보를 제공할 수 있다. 일 실시예에서, 모드 필드가 %000의 값을 갖는 경우, 업데이트를 갖는 보통 정수 로드 및 저장 명령들을 실행할 때 수행되는 바와 같이(도 13을 참조하여 앞서 논의됨), 보통 업데이트 동작은 지시되고, 산출된 EA[0:31]이 rA의 주요부(rA[32:63])에 저장된다. 모드 필드가 %001의 값을 갖는 경우, 순환 버퍼 어드레스 업데이트가 수행되고, rA의 주요부(rA[32:63])는 액세스되는 차기 순환 버퍼 요소의 어드레스 값으로 업데이트된다. 어드레스 업데이트 제어 필드에 저장된 부가적인 정보는 도 5 및 도 6을 참조하여 이하에 보다 상세히 기술되는 것처럼 이 업데이트를 수행하는데 이용된다. 모드 필드가 %010의 값을 갖는 경우, 비트-반전된 어드레스 업데이트가 수행되고, rA의 주요부(rA[32:63])는 비트-반전된 어드레싱에 따라 액세스될 차기 버퍼 요소의 어드레스 값으로 업데이트된다(예를 들어, FFT 데이터를 저장하는 버퍼를 액세스하기 위해). 어드레스 업데이트 제어 필드에 저장된 부가적인 정보는 도 7 내지 도 11을 참조하여 이하에서 보다 상세히 기술되는 바와 같이 이 업데이트를 수행하는데 이용된다. 그러므로, SIMD 로드 또는 저장 명령에 대한 U=1인 경우, rA 또는 rB 둘 중 하나의 확장부의 모드 필드의 값은 rA의 주요부의 업데이트가 어떻게 수행될 것인지를 지시하는데 이용되고, 어드레스 업데이트 제어 필드는 이들 업데이트를 수행하는데 필요한 대로 이용된다. U=0인 경우 어떠한 확장부도 액세스되지 않는다는 점에 주의한다. 또한, 이 명령들에 대해 대응하는 U 비트의 값에 무관하게, 어떠한 확장부도 업데이트 명령들로 보통 정수 로드 또는 저장을 위해 액세스되지 않는다는 점에 주의한다.
이어지는 예들에서, U=1인 경우 SIMD 로드 및 저장 명령들에 대해, rA의 확장부는 rA의 주요부의 어드레스 업데이트를 어떻게 수행할지 결정하기 위해 액세스될 수 있다고 가정할 것이다. (대안으로, U=1인 경우, 처리기(1)는 rA의 확장부가 아닌 rB의 확장부가 rA의 주요부의 어드레스 업데이트를 어떻게 수행할지 결정하기 위해 액세스되도록 설계될 수 있다.) 확장부의 이용을 통해, 개별적인 GPR 또는 어드레스 위치는 모드 또는 어드레스 업데이트 제어 정보와 같은 부가적인 정보를 제공하기 위해 독립적으로 어드레싱 또는 액세스될 필요가 없다는 점에 주의한다. 또한, 명령 내의 부가적인 필드들은 명령이 이미 베이스 어드레스 값을 제공할 목적들을 위해 rA를 지시했으므로 필요하지 않다. 그러나, rA의 주요부만이 베이스 어드레스 값을 액세스하는데 필요하기 때문에, 확장부는 부가적인 정보를 제공하기 위해 이용될 수 있다. 모드 필드 또는 U의 값에 무관하게, 벡터 로드 또는 저장 명령들을 위한 유효 어드레스 산출은 변경되지 않은 채로 남아있는다는 것에 주의한다. 즉, evldb[u]x 또는 evstdh[u]x에 대한 EA는 rA(rA[32:63])의 콘텐트들을 rB(rB[32:63])의 콘텐트들에 부가함으로써 산출된다. 즉, EA[0:31] = "rA 콘텐트들 + rB의 콘텐트들". 또한, EA는 처리기(14)가 32비트 처리기라고 가정한 예시된 실시예에서 32-비트 값이라는 것에 주의한다. EA는 데이터가 저장될 또는 데이터가 로딩될 메모리 어드레스를 제공하기 때문에 메모리 액세스 어드레스로도 칭해질 수 있다.
도 5는 순환 버퍼 어드레싱을 구현하기 위해 evldb[u]x 명령(또는 evstdh[u]x 명령)의 실행을 위해 이용될 수 있는 rA의 주요부 또는 확장부의 예를 예시한다. 위에서 논의한 바와 같이, rA의 주요부는 메모리 피연산자로서 베이스 어드레스를 포함한다. rA의 확장부 내의 모드 필드는 순환 버퍼 어드레싱 기술을 지시하는 %001이고, 어드레스 업데이트 제어 필드는 순환 버퍼 어드레싱을 구현하기 위한 부가적인 정보를 포함한다. 예시된 실시예에서, 어드레스 업데이트 제어 필드는 비트들 3:7에 5 비트 모듈러스(Mod) 필드, 비트들 8:16에 8-비트 오프셋(O) 필드, 및 비트들 16:31에 16-비트 길이(L) 필드를 포함한다. 대안의 실시예들은 rA의 확장부 내의 정보를 상이하게 구성할 수 있거나, 또는 어드레스 업데이트 제어 필드의 임의의 변형 정보 외에 또는 대신 다른 타입의 정보를 포함할 수 있다는 점에 주의한다. L 필드는 순환 버퍼의 요소들의 수를 제공한다. O 필드는 업데이트 산출을 위해 차기 요소에 거리를 제공한다. Mod 필드는 메모리의 순환 버퍼의 시작 어드레스가 메모리의 2Mod 바이트 경계로 정렬되었다는 것을 지시한다. Mod 필드는 또한 순환 버퍼에 대해 이용 가능한 최대 길이를 규정한다는 점에 주의한다. 이하에서 알 수 있는 바와 같이, 이는 보다 빠른 랩 어라운드 산출(wrap around calculation)을 허용한다.
도 6은 순환 버퍼를 저장하는 메모리(12)의 일부를 예시한다. (도 6의 순환 버퍼는 데이터 구조로서 칭해질 수 있고 액세스되기 이전에 메모리(12)내에서 형성될 수 있다는 점에 주의한다.) 도 6의 순환 버퍼의 시작 어드레스(즉, 베이스 어드레스)는 %10000으로서 제공된다. 순환 버퍼의 길이는 11(11 바이트들을 지시함)이고, 오프셋(즉, 액세스되는 요소들간의 거리)은 4 바이트들이다. 그러므로, 버퍼 요소들은 이들이 %10000의 베이스 어드레스 및 4의 오프셋에 따라 액세스되는 순서를 지시하는 1-11가 번호가 매겨진다. 즉, 먼저 위치 %1000가 액세스되고, 위치 %10100가 후속하고, 위치 %11000가 후속하고, 위치 %10001(랩 어라운드를 포함)가 후속하고, 위치 %10101이 후속하고, 위치 %11001이 후속하고, 위치 %10010(랩 어라운드를 재차 포함)가 후속하고, 위치 %10110가 후속하고, 위치 %11010가 후속하고, 위치 %10011이 후속하고(랩 어라운드를 또한 포함), 위치 %10111이 후속하는 등이다.
그러므로, 모드 필드가 %001인 evldhux 명령(U=1)의 실행시에, 베이스 어드레스는 %10000(인덱스 값은 이 예에서 0이라고 가정함)이고, 오프셋=4, rD는 %10000에 의해 어드레싱되는 메모리 위치의 콘텐트들로 로딩된다. 또한, rA의 주요부는 evldhux의 실행의 부분으로서 %10100에 업데이트될 것이고, 이에 따라 별개의 명령은 순환 버퍼의 액세스 포인트가 4바이트를 이격하여 위치한 차기 요소로 전진할 필요가 없다. (이 시점에서, rD의 결과들을 이용하는 하나 이상의 부가적인 명령들이 실행될 수 있다.) rA의 확장부(모드 필드 및 어드레스 업데이트 필드를 포함)가 변경되지 않은 채로 남아있으면서 rA의 주요부만이 업데이트된다는 점에 또한 주의한다. 그러므로, 후속의 evldhux 명령의 실행시에, rA의 업데이트된 버전을 이용하여, rD는 %10100에 의해 어드레스되는 메모리 위치의 콘텐트들로 업데이트되고, rA의 주요부는 %10100으로부터 %11000으로 재차 업데이트된다. rA의 확장부는 업데이트되지 않으므로, 길이는 여전히 11로서 및 오프셋은 4로서 제공될 것이다. 후속의 evldhux 명령의 실행시에, %11000에 4의 가산(%11110)은 버퍼의 마지막 요소(%11010)를 능가하는 어드레스를 발생시킬 것이다. 이는 이 예에서, 순환 버퍼의 시작 어드레스가 %10000(2Mod=24=%10000)이고 길이가 11이라는 것은 알려져 있지 않으므로 어드레스의 적어도 4-유효 비트들을 이용하여 결정될 수 있다. 이 경우, 버퍼의 길이는 어드레스로부터 감산되어 %10001의 차기 요소 어드레스를 발생시킬 수 있다. 그러나, 버퍼 어드레스의 시작 어드레스는 %10000라는 것은 알고 있으므로(예를 들어, 2Mod=24=%10000와 같이 모드 값(mod value)으로 인해, 16바이트 경계상에 정렬됨), 모드 값은 시작 버퍼 어드레스의 일부가 랩-어라운드시에 업데이트되는지를 결정하는데 이용될 수 있다. 즉, 랩-어라운드의 경우에, rA[(64-Mod):63]=(rA[48:63]+오프셋)[(64-Mod):63] 는 비트들(64-Mod):63만이 업데이트시에 변형된다. 그러므로, rD는 %11000에 의해 어드레싱되는 메모리 위치의 콘텐트들로 업데이트되고, rA의 주요부는 %11000으로부터 %10001(및 랩 어라운드로 인해 %11110이 아님)로 업데이트된다. 모드 값 또한 2( Mod )-1로서 버퍼의 최대 인덱스를 제공한다는 것에 주의한다. 즉, 랩 어라운드 산출들을 수행하도록 모드 값을 이용하기 위해, 마지막 순환 버퍼 요소는 %11111 위에 위치될 수 없다.
도 5에는 비트-반전된 어드레싱을 구현하도록 evldh[u]x 명령(또는 evstdh[u]x 명령)의 실행을 위해 이용될 수 있는 rA의 주요부 및 확장부의 예가 예시된다. 위에서 논의한 바와 같이 rA의 주요부는 어드레스 피연산자로서 베이스 어드레스를 포함한다. rA의 확장부내의 모드 필드는 비트-반전된 어드레싱 기술을 지시하는 %010이고, 어드레스 업데이트 제어 필드는 비트-반전된 어드레싱을 구현하기 위한 부가적인 정보를 포함한다. 예시된 실시예에서, 어드레스 업데이트 제어 필드는 비트들 16:31의 16-비트 마스크 필드를 포함한다. 대안의 실시예들은 rA의 확장부내의 정보를 상이하게 구성할 수 있거나, 또는 어드레스 업데이트 제어 필드의 임의의 변형 정보 대신에 또는 부가하여 다른 타입들의 정보를 포함할 수 있다는 것에 주의한다. 마스크 필드는 비트-반전된 증분을 수행하기 위해 이용되는 마스크 값을 제공한다.
많은 타입들의 필터링 알고리즘은 FFT 필터들과 같은 필터링 동작들의 세트로부터 입력 샘플들 및 계산된 출력 샘플들의 세트들을 보유하도록 버퍼들을 활용한다. 이 필터들은 통상적으로 비트-반전된 방식으로 액세스되어 계산들의 본연의 순서에 대응하는 미리 결정된 순서로 데이터를 획득하고 출력을 저장한다. 예를 들어, 선형 순서로 요소들 0, 1, 2, 3, 4, 5, 6, 및 7이 저장된 8 요소 FFT 버퍼에 대해, 액세스될 필요가 있는 비트-반전된 순서는 요소들 0, 4, 2, 6, 1, 5, 3, 및 7이다. 도 8은 예를 들어, 메모리(12)에 저장된 버퍼로부터 FFT 데이터 요소들을 액세스할 때와 같이 비트-반전된 방식으로 데이터 요소들을 액세스할 때 이용될 수 있는 비트-반전된 어드레싱의 예를 예시한다. 도 8의 예에서, 8 데이터 요소들(요소들 0-7)은 선형 순서로 저장된다고 가정한다. 이 요소들 각각은 값들(0 내지 7)을 나타내는 3-비트 이진 어드레스에 의해 어드레싱될 수 있다. 이 이진 값들(%000, %001, %010, %011, %100, %101, %110, 및 %111)은 요소들(0 내지 7) 각각에 각각 대응한다. 이 이진 값들은 "비트-반전"되고, 결과적으로 각 3-비트 이진값의 경상(mirror image)을 발생시킨다. 이 이진 값들 각각을 비트-반전할 때, 비트-반전된 요소들은 요소들(0 내지 7)이 요소 0, 요소 4, 요소 2, 요소 6, 요소 1, 요소 5, 요소 3, 및 요소 7의 비트-반전된 순서로 각각 어드레싱되게 한다. 설명의 편의를 위해, 여기서 기술될 예들은 8 데이터 요소들의 버퍼가 비트-반전된 방식으로 액세스된다고 가정하지만, 대안의 실시예들에서, 데이터 요소들의 임의의 수의 버퍼가 비트-반전된 순서로 어드레싱될 수 있다는 점에 주의한다.
샘플의 데이터 크기뿐만 아니라 버퍼의 다수의 데이터 요소들 또는 샘플들(예를 들어, FFT의 포인트들의 수)에 기초하는 마스크 값은 비트-반전된 방식으로 액세스될 차기 요소를 결정하는데 이용된다. 비트-반전된 방식으로 액세스될 차기 요소를 결정하기 위해 마스크 값을 이용하는 알려진 방법들이 이용될 수 있다. 도 9는 데이터 샘플들의 수 및 데이터 샘플 크기 둘 다에 기초하여 다양한 마스크 값들을 제공하는 표의 예를 예시한다. 어드레싱될 바이트-크기의 데이터 요소들을 포함하는 버퍼를 비트-반전된 어드레싱으로 액세스하기 위해, 마스크 값은 최하위 비트 위치들에 log2n 1들 및 남은 최상위 비트 위치들에 0들을 갖는다. 그러나, 데이터 크기는 다수의 하프워드 또는 워드인 경우, 1들은 log2(바이트의 데이터의 크기)만큼 왼쪽으로 이동하고, 0들은 최하위 비트 위치들에 배치되도록 마스크가 구성된다. 표의 각 로우에 있어서, 이들은 바이트 컬럼으로부터 더블워드 컬럼으로 진행하기 때문에 마스크 값들은 매번 1비트씩 좌측으로 이동된다는 것에 주의한다. 또한, 표의 각 컬럼에 있어서, 이들은 8 요소들의 크기로부터 64 요소들의 크기로 아래로 진행하기 때문에, 마스크 값들은 부가적인 하위 순차 비트를 1로 설정한다는 점에 주의한다. 도 9의 표는 통상적으로 2의 제곱인 더 큰 버퍼 크기들을 포함하도록 확장될 수 있고, 더 큰 데이터 크기들을 또한 포함할 수 있다. 도 9의 표는 도 1의 제어 유닛(28)내에 저장될 수 있거나, 또는 시스템(10)내 다른 곳에 저장될 수 있다. 도 9의 표는 값들의 표로서 저장될 수 있거나 논리 게이트들로 구현될 수 있다. 대안의 실시예들은 다양한 상이한 방식들로 도 9의 표의 정보를 저장 또는 수신할 수 있다.
도 10은 도 11의 예시 버퍼를 액세스하기 위해 evldh[u]x 명령들을 이용하여 달성될 수 있는 비트-반전된 어드레싱 시퀀스를 예시한다. 도 11의 예에서, 버퍼는 각 데이터 요소의 크기가 하프워드인 8개의 데이터 요소들을 저장한다. (도 11의 버퍼는 FFT 애플리케이션에서 이용될 수 있고, FFT 샘플 버퍼로서 또한 칭해질 수 있다는 점에 주의한다. 도 11의 버퍼는 데이터 구조로서 칭해질 수 있고 액세스되기 이전에 메모리(12)내에 형성될 수 있다는 것 또한 주의한다). 예를 들어, 도 11은 어드레스 위치 0xDCAABCF0에서 시작하는 8 하프워드-크기의 데이터 요소들을 저장하는 메모리(12)의 일부를 예시한다. 각 요소는 크기가 하프워드(예를 들어, 16 비트들)이기 때문에, 차기 7개의 요소들(요소 1 내지 요소 7)은 어드레스 값들 0xDCAABCF2, 0xDCAABCF4, 0xDCAABCF6, 0xDCAABCF8, 0xDCAABCFA, 0xDCAABCFC, 및 0xDCAABCFE에 의해 각각 선형 순서로 순차적으로 어드레싱된다. (이들 어드레스들 값들의 각각은 포인터 값들로서 또한 칭해질 수 있다는 점에 주의한다.) 이들이 비트-반전된 순서(도 8에서 기술된 바와 같이)로 액세스되어야 하는 경우, 이 어드레스들은 다음의 순서: 즉, 0xDCAABCF0(요소 0에 대응), 0xDCAABCF8(요소 4에 대응), 0xDCAABCF4(요소 2에 대응), 0xDCAABCFC(요소 6에 대응), 0xDCAABCF2(요소 1에 대응), 0xDCAABCFA(요소 5에 대응), 0xDCAABCF6(요소 3에 대응), 및 0xDCAABCFE(요소 7에 대응)로 어드레싱될 것이다.
그러므로, 도 10의 비트-반전된 어드레싱의 예에서, 액세스될 메모리(12)의 버퍼의 제 1 요소(요소 0)를 포인팅하는 0xDCAABCF0의 베이스 어드레스 값(즉, 초기 포인터 값)은 evldh[u]x 명령의 실행 이전에 레지스터(rA)의 주요부에 배치된다. 0x00000000의 값은 인덱스 값으로서 rB에 배치된다. 또한, 이 예에 있어서, 버퍼는 8 하프워드-크기의 데이터 요소들을 포함하고 있으므로, 마스크 값(도 4의 표로부터 취해짐)은 "000...00001110"이다. 0x000E에 대응하는 이 마스크 값은 rA의 확장부에 저장된다. 그러므로, U=1이고 모드 필드가 %010인 evldhux 명령의 실행시에, EA는 0xDCAABCF0(베이스 어드레스 + 인덱스 값)가 되도록 산출되고, rD는 버퍼의 요소 0인 mem[EA] 콘텐트들을 수신한다. (이 예에서, rB의 인덱스 값은 0이므로, 베이스 어드레스 값은 EA로서 직접 제공될 수 있다는 점에 주의한다) 또한, U=1이고 모드 필드가 %010이므로, evldhux 명령의 실행시에, rA의 확장부의 어드레스 업데이트 제어 필드(즉, 마스크 값)는 rA의 주요부를 어떻게 업데이트할지를 결정하는데 이용된다. 임의의 알려진 방법을 이용하여, 0x000E의 마스크 값은 비트-반전된 어드레싱 시퀀스(즉, 요소 4에 대응하는 0xDCAABCF8)에서 차기 어드레스를 산출하는데 이용된다. 그러므로, rA의 주요부는 0xDCAABCF8의 새로운 베이스 어드레스 값에 업데이트된다. rA의 주요부만이 업데이트되어서, 마스크 값 및 모드 필드 값은 변경되지 않은 채로 남아 있다는 점에 주의한다. 또한, 이 시점에서, 후속 데이터 처리 동작에서 rD(요소 0)의 결과들을 이용하는 하나 이상의 부가적인 명령들이 실행될 수 있다. U=1인 후속 evldhux 명령의 실행시에 및 동일한 rA 및 rB를 이용하여, 모드 값은 여전히 %010이고 마스크 값은 여전히 0x000E이다. 이 경우, 베이스 값은 이전에 evldhux 명령으로 업데이트되었던 0xDCAABCF8이다. 재차, 알려진 방법들을 이용하여, 0x000E의 마스크 값은 비트-반전된 어드레싱 시퀀스에서 0xDCAABCF8을 후속하는 차기 어드레스(즉, 요소 2에 대응하는 0xDCAABCF4)를 산출하는데 이용된다. 그러므로, 0xDCAABCF4(요소 2)의 콘텐트들은 rD로 로딩되고, rA의 주요부는 0xDCAABCF4에 업데이트된다. 이 방식으로, 일련의 evldhux 명령들은 rA의 주요부가 비트-반전된 어드레싱 시퀀스에서 차기 어드레스를 반영하도록 업데이트될 수 있는 비트-반전된 순서로(U=1이므로) 도 11의 버퍼의 버퍼 요소들을 액세스하는데 이용될 수 있다.
상기 순환 버퍼 어드레싱 예 및 비트-반전된 어드레싱 예는 메모리로부터의 요소들의 로딩을 참조하여 기술되었지만, evstdh[u]x 명령의 U=1이고 모드=%001 또는 %010일 때, 데이터 요소가 저장되는 차기 어드레스 위치를 포인팅하도록 각 어드레싱 방식에 대해 상술한 바와 같이 rA의 주요부가 업데이트될 수 있는 상기 방법들은 메모리에 요소들을 저장하도록 또한 적용된다는 점에 주의한다.
도 12에는 벡터 로드 명령(evldh[u])로부터 변위 형태의 일 예가 예시된다. 예시된 실시예에서, evldh[u]는 목적 레지스터(rD), 하나의 소스 레지스터(rA), 및 변위 값을 제공하는 중간 값 필드를 지시하는 32비트 명령이다. evldh[u] 명령은 변위를 갖는 로드 또는 변위 및 업데이트를 갖는 로드 중 어느 것이 수행될지를 지시하도록 특정하기 위해 업데이트 값(U)을 참작한다. U=1(evldhu)인 경우에, rA의 업데이트는 명령의 동작의 부분으로서 수행될 것이다. U=0(evldh)인 경우에, rA의 업데이트는 수행되지 않는다. evldh[u] 명령은 명령의 기능 또는 형태를 식별하기 위한 옵코드 필드(비트들 0:5)를 포함한다. 명령 내의 목적 필드(비트들 6:10)는 스칼라 레지스터 파일(34)내의 레지스터(D)를 식별하는 "rD"라 라벨링된 목적 레지스터 식별자이다. 명령 내의 소스 필드(비트들 11:15)는 스칼라 레지스터 파일(34)내의 레지스터(A)를 식별하는 "rA"라 라벨링된 소스 레지스터 식별자이다. 명령내의 미지정 중간 필드(UIMM, 비트들 16:20)는 변위 값을 제공하는 중간값이다. 명령은 또한 명령의 기능성을 추가적으로 특정하는데 이용될 수 있는 서브옵코드 필드(비트들 21:31)를 포함한다. 예시된 실시예에서, U는 명령의 서브옵코드(예시된 실시예에서 비트 위치 25)내의 비트로서 포함되는 점에 주의한다. 그러나, 대안의 실시예들에서, 업데이트 여부의 지시는 명령내의 상이한 옵코드들 또는 상이한 비트로서 제공될 수 있다. 대안으로, 다른 비트 길이 명령들이 구현될 수 있고, 각 명령 필드의 비트 크기는 구현에 대해 특정하다. 그러나, 앞서 논의한 바와 같이, 다수의 명령 세트 아키텍처들에서, 옵코드 및 서브옵코드 공간은 제한되고, 따라서, 부가적인 명령 비트 길이가 이용가능하지 않을 수 있다는 점에 주의한다. 또한, 다른 실시예들에서, 부가적인 필드들 또는 다른 필드들이 구현될 수 있다. 또한, rD 필드, rA 필드 및 중간 필드의 순서는 도 12에 예시된 것 이외의 다른 시퀀스들로 변경될 수 있다.
evldh[u] 명령(evldh[u], rD, rA, UIMM)은 EA를 산출하는데 이용되는 인덱스 값을 저장하는 제 2 소스 레지스터(rB)를 제공하는 것을 제외하고 evldh[u]x 명령과 유사하고, evldh[u] 명령은 EA를 산출하는데 직접 이용되는 명령 자체내의 중간값을 제공한다. evldh[u]x 명령과 유사하게, evldh[u] 명령은 메모리로부터 더블워드를 목적 레지스터의 4 하프워드들로 로딩한다. 따라서, 처리기(14)가 32-비트 처리기인 예시된 실시예들에서, evldh[u] 명령은 4의 16비트 벡터 요소들을 목적 레지스터에 로딩하는데 이용될 수 있다. 그러나, evldh[u] 명령의 실행시에, 명령의 중간 필드 내에 제공된 변위 값(UIMM)은 유효 어드레스(예를 들어, EA[0:31])를 산출하도록 rA(베이스 어드레스 값을 저장)의 콘텐트들에 부가된다. 그러면, EA[0:31]에 의해 포인팅되는 메모리(12)의 메모리 위치에 위치한 더블워드는 rD로 로딩된다. 즉, 메모리(12)에서 EA에 의해 포인팅되는 하프워드는 rD[0:15]로 로딩되고, 메모리(12)에서 EA+2에 의해 포인팅되는 하프워드는 rD[16:31]로 로딩되고, 메모리(12)에서 EA+4에 의해 포인팅되는 하프워드는 rD[32:47]로 로딩되고, 메모리(12)에서 EA+6에 의해 포인팅되는 하프워드는 rD[48:63]로 로딩된다.
U=0(즉, evldh 명령)인 경우에, rA의 업데이트는 수행되지 않는다. 그러나, U=1(즉, evldhu 명령)인 경우, rA의 확장부는 rA의 업데이트를 어떻게 수행할지 결정하는데 이용될 수 있다. 일 실시예에서, U=1(즉, evldhu 명령)인 경우, rA의 확장부 및 UIMM은 rA의 업데이트를 어떻게 수행할지를 결정하는데 이용된다. 예를 들어, 일 실시예에서, U=1이고 UIMM이 0이 아닌 경우에, rA의 확장부의 모드 필드의 값에 무관하게, 변위 및 업데이트를 갖는 보통 정수 로드와 유사한 방식으로(도 13을 참조하여 상술한 인덱스 및 업데이트를 갖는 보통 정수 로드에 대해 수행된 업데이트와 유사함), EA의 값이 rA의 주요부(rA[32:63])로 저장되는 보통 업데이트가 수행된다. 그러나, UIMM 값=0 및 U=1인 경우, 업데이트 형성이 지시되지만, 보통, rA의 현재 값에 대한 0의 UIMM 값의 가산은 변경된 rA 값을 제공하지 않을 것이므로 rA의 값의 변화는 발생하지 않을 것이다. 따라서, 일 실시예에서, U=0, UIMM=0 및 U=1, UIMM=0인 경우, 명령들의 변동들은 동일한 결과를 생성할 것이다. 부가적인 업데이트 제어 값들이 rA의 확장부에서와 같이 SIMD 로드 또는 저장 명령들을 위해 이용된다는 것을 지시하도록 이러한 명령 인코딩을 이용할 기회를 제공한다. 따라서, U=1, UIMM=0이고, rA의 확장부의 모드 필드 값이 %000인 경우, EA의 값이 rA의 주요부(rA[32:63])에 저장되는 보통 업데이트가 수행된다. 그러나, U=1, UIMM=0이고, rA의 확장부의 모드 필드 값이 %001 또는 %010인 경우, 위에서 기술했던 순환 버퍼 어드레싱 업데이트 또는 비트-반전된 어드레싱 업데이트는 rA의 주요부에 대해 각각 수행된다. 즉, 이 경우들에서(모드 필드가 %001 또는 %010), rA의 확장부는 랩-어라운드를 갖는 순환 버퍼 어드레싱 또는 비트-반전된 어드레싱과 같은 상이한 어드레싱 방식들을 구현하기 위해 rA의 업데이트가 어떻게 일어나는지를 정의하는 제어 정보(예를 들어, 어드레스 업데이트 제어 필드)를 추가로 제공하는데 이용된다. 그러므로, rA의 주요부를 어떻게 업데이트하는지에 관한 부가적인 변형 정보를 추가로 제공하기 위해 rA의 확장부가 이용되는 도 4 내지 도 11에 관해 위에서 제공된 설명들은 evldh[u] 명령에 또한 응용된다.
유사하게, 대응하는 저장 명령(evstdh[u]x rS, rA, UIMM)은 로드 명령과 유사하게 동작한다는 점에 주의한다. evstdh[u] 명령은 rS에 지시된 GPR로부터 4 하프워드들을 EA에 의해 포인팅되는 메모리의 위치에 저장한다(여기서 베이스 어드레스 값을 저장하는 rA, 및 UIMM(변위 값)의 콘텐트들이 EA[0:31]를 산출하는데 이용됨). 로드 명령과 마찬가지로, U=0(즉, evstdh 명령)인 경우에, rA의 업데이트는 수행되지 않는다. 그러나, U=1(즉, evstdh 명령)인 경우, rA의 확장부 및 UIMM의 값은 rA의 업데이트를 어떻게 수행할지 결정하는데 이용될 수 있다. 즉, 명령에서 지시된 UIMM의 값이 0이면, rA의 확장부는 랩-어라운드를 갖는 순환 버퍼 어드레싱 또는 비트-반전된 어드레싱과 같은 상이한 어드레싱 기술들을 구현하기 위해 rA의 업데이트가 어떻게 일어나는지를 규정하는 제어 정보(예를 들어, 변형 정보)를 추가로 제공하는데 이용될 수 있다. 그러므로, EA의 산출 및 UIMM의 이용 및 U=1일 때 업데이트가 어떻게 수행되는지를 결정하기 위한 확장부에 관해 위에서 제공된 설명들은 변위 형성 로드 및 변위 형성 저장 명령들 둘 다에 적용된다. 또한, 하프워드 이외의 임의의 요소의 크기가 로드 또는 저장 명령에서 정의될 수 있다는 점에 주의한다. 예를 들어, 여기서 제공된 설명들은 8 바이트를 메모리로부터(또는 메모리로) 각각 로드 또는 저장하는 evldb[u] 또는 evstdb[u]와 유사하게 또한 적용될 수 있다. 설명들은 또한 2워드들을 메모리로부터(또는 메모리로) 각각 로드(또는 저장)하는 evldw[u] 또는 evstdw[u]에 유사하게 응용될 수 있다.
이제부터, 소스 레지스터들 중 하나의 주요부를 어떻게 변형하는지에 관한 부가적인 정보를 제공하기 위해 소스 레지스터들 중 하나의 확장부를 이용할 수 있는 데이터 처리 시스템에서 이용하는 데이터 처리 명령들이 제공된다는 것을 이해해야 한다. 이러한 방식으로, 부가적인 옵코드 공간은 필수적이지 않다. 또한, 일 실시예에서, 이 명령들내의 하나 이상의 비트들(예를 들어, U 비트)은 소스 레지스터들 중 하나의 주요부의 업데이트가 수행될지 여부 및 확장부의 어드레스 업데이트 제어 정보가 새로운 업데이트된 값을 산출하는데 이용될지 여부를 결정하는데 이용될 수 있다. 다른 실시예에서, 명령 내의 변위 필드의 값은 확장부의 어드레스 업데이트 제어 정보가 새로운 업데이트된 값을 산출하는데 이용될지 여부를 결정하는데 이용될 수 있다.
위에서 논의했던 순환 버퍼 어드레싱 또는 비트-반전된 어드레싱을 구현하는데 이용될 수 있는 처리기(14)내의 회로는 제어 유닛(28) 내에 또는 실행 유닛들(32) 내에 위치될 수 있다는 점에 주의한다. 알려진 회로는 순환 버퍼 어드레싱 기술 또는 비트-반전된 어드레싱 기술에 따라 차기 어드레스를 결정하는 것에 관해 상술한 기능성을 구현하는데 이용될 수 있다. 부가적인 또는 대안의 어드레싱 모드들 또는 형태들이 순환 어드레스싱 및 비트-반전된 어드레싱의 예시된 기술들과 유사한 방식으로 대안의 모드 인코딩들에 의해 지시될 수 있다는 점에 주의한다.
본 발명을 구현하는 장치는 대부분의 부분들에 대해서, 당업자에게 알려진 전자 성분들 및 회로들로 구성되기 때문에, 회로 상세들은 본 발명의 기저의 개념들의 이해 및 인식을 위해 및 본 발명의 교시들을 불명확 또는 혼동하게 하지 않기 위해 앞서 예시된 바와 같이 필요하다고 고려되는 것보다 많은 정도로 설명되지 않을 것이다.
여기서 사용된 용어 "프로그램"은 컴퓨터 시스템상에서 실행을 위해 설계된 명령들의 시퀀스로서 정의된다. 프로그램, 또는 컴퓨터 프로그램은 서브루틴, 함수, 프로시저, 객체 방법, 객체 구현, 실행 가능한 애플리케이션, 애플릿, 서블렛, 소스 코드, 객체 코드, 공유 라이브러리/동적 로드 라이브러리 및/또는 컴퓨터 시스템상에서 실행을 위해 설계된 다른 명령들의 시퀀스를 포함할 수 있다.
응용 가능한 상기 실시예들 중 일부는 다양한 상이한 정보 처리 시스템들을 이용하여 구현될 수 있다. 예를 들어, 도 1 및 그 논의가 예시적인 정보 처리 아키텍처를 기술하지만, 이 예시적인 아키텍처는 단지 본 발명의 다양한 양태들을 논의하는데 유용한 참고자료를 제공하기 위해 제시된다. 물론, 아키텍처의 설명은 논의의 목적으로 단순화되고, 본 발명에 따라 이용될 수 있는 다수의 상이한 형태들의 적절한 아키텍처들 중 하나일 뿐이다. 당업자는 논리 블록들 간의 경계들은 단순히 예시적인 것이고, 대안의 실시예들은 논리 블록들 또는 회로 요소들을 합칠 수 있거나 또는 다양한 논리 블록들 또는 회로 요소들 상에서 기능성들의 대안적인 분해를 부과한다는 것을 인지할 것이다.
따라서, 여기에 도시된 아키텍처들은 단지 예시적인 것이고, 사실상 동일한 기능성을 달성하는 다수의 다른 아키텍처들이 구현될 수 있다는 것을 이해한다. 요약에서, 여전히 한정하는 의미로, 동일한 기능성을 달성하기 위한 성분들의 임의의 배열은 원하는 기능성이 달성되도록 유효하게 "연관"된다. 그러므로, 특정한 기능성을 달성하기 위해 여기서 조합된 임의의 2개의 성분들은 아키텍처들 또는 중개 성분들에 무관하게, 원하는 기능성이 달성되도록 서로 "연관"된 것으로서 이해될 수 있다. 유사하게, 이렇게 연관된 임의의 2개의 성분들은 원하는 기능성을 달성하기 위해 서로 "동작 가능하게 연결된" 또는 "동작 가능하게 결합된" 것으로서 또한 고려될 수 있다.
또한, 예를 들어, 일 실시예에서, 시스템(10)의 예시적인 요소들은 동일한 디바이스 내에 또는 단일의 집적 회로상에 위치한 회로이다. 대안으로, 데이터 처리 시스템(10)은 다수의 별도의 집적 회로들 또는 서로 상호연결된 별개의 디바이스들을 포함할 수 있다. 예를 들어, 메모리(12)는 처리기(14)와 같은 동일한 집적 회로 상에 또는 별도의 집적 회로상에 위치할 수 있거나, 또는 데이터 처리 시스템(10)의 다른 요소들과 분리된 별개인 슬레이브 또는 다른 주변장치내에 위치할 수 있다. 주변장치들(18) 및 I/O 회로(16)는 별도의 집적 회로들 또는 디바이스들 상에 또한 위치할 수 있다. 여기서 기술된 모든 회로는 실리콘 또는 다른 반도체 재료 둘 중 하나로 또는 대안적으로 실리콘 또는 다른 반도체 재료의 소프트웨어 코드 표현에 의해 구현될 수 있다는 것을 또한 이해해야 한다. 이러한 것으로서, 시스템(10)은 임의의 적절한 형태의 하드웨어 기술 언어로 구현될 수 있다. 소프트웨어 코드 또는 하드웨어 기술 언어는 임의의 형태의 컴퓨터 판독 가능한 매체들 상에 구현될 수 있다.
또한, 당업자는 위에서 기술된 동작들의 기능성 간의 경계들은 단순히 예시적이라는 것을 인지할 것이다. 일부 예들에서, 다수의 동작들의 기능성은 단일의 동작에 조합될 수 있고, 및/또는 단일의 동작의 기능성은 부가적인 동작들에 분산될 수 있다. 또한, 대안의 실시예들은 특정 동작의 다수의 인스턴스들을 포함할 수 있고, 동작들의 순서는 다양한 다른 실시예들에서 변경될 수 있다.
여기에 기술된 소프트웨어의 일부 또는 모두는 예를 들어, 메모리(12)와 같은 컴퓨터 판독 가능한 매체들 또는 다른 컴퓨터 시스템들 상의 다른 매체들로부터 시스템(10)의 수신된 요소들일 수 있다. 이러한 컴퓨터 판독 가능한 매체들은 영구적으로, 제거 가능하게 또는 시스템(10)과 같은 정보 처리 시스템에 원격으로 결합될 수 있다. 컴퓨터 판독 가능한 매체들은 예를 들어, 및 제한 없이, 몇가지 예를 들자면, 디스크를 포함하는 자기 저장 매체들 및 테이프 저장 매체들; 컴팩트 디스크 매체들(예를 들어, CD-ROM, CD-R 등)과 같은 광학 저장 매체들 및 디지털 비디오 디스크 저장 매체들; 플래시 메모리, EEPROM, EPROM, ROM과 같은 반도체 기반 메모리 유닛들을 포함하는 비휘발성 메모리 저장 매체들; 강자성 디지털 메모리들; MRAM; 예를 들면, 레지스터들, 버퍼들 또는 캐시들, 메인 메모리, RAM 등을 포함하는 휘발성 저장 매체들; 및 컴퓨터 네트워크들, 단 대 단 원격통신 장비, 및 캐리어 웨이브 전송 매체들을 포함하는 데이터 전송 매체를 포함할 수 있다.
일 실시예에서, 데이터 처리 시스템(10)은 개인용 컴퓨터 시스템과 같은 컴퓨터 시스템이다. 다른 실시예들은 상이한 형태들의 컴퓨터 시스템들을 포함할 수 있다. 컴퓨터 시스템들은 하나 이상의 사용자들에게 독립적 컴퓨팅 파워를 제공하기 위해 설계될 수 있는 정보 핸들링 시스템들이다. 컴퓨터 시스템들은 주프레임들, 미니컴퓨터들, 서버들, 워크스테이션들, 개인용 컴퓨터들, 노트패드들, 개인용 휴대 정보 단말들, 전자 게임들, 자동적 및 다른 임베딩된 시스템들, 휴대 전화들 및 다양한 다른 무선 디바이스를 포함하는(그러나 이것으로 제한되지 않음) 다수의 형태들로 발견될 수 있다. 통상적인 컴퓨터 시스템은 적어도 하나의 처리 유닛, 연관된 메모리 및 다수의 입력/출력(I/O) 디바이스들을 포함한다.
컴퓨터 시스템은 프로그램에 따라 정보를 처리하고 I/O 디바이스들을 통해 최종적인 출력 정보를 생성한다. 프로그램은 특정 애플리케이션 프로그램 및/또는 운영 체제와 같은 명령들의 리스트이다. 컴퓨터 프로그램은 통상적으로 컴퓨터 판독 가능한 저장 매체상에 내부적으로 저장되거나 컴퓨터 판독 가능한 전송 매체를 통해 컴퓨터 시스템에 전송된다. 컴퓨터 처리는 통상적으로 실행(구동) 프로그램 또는 프로그램의 일부, 현재 프로그램 값들 및 상태 정보, 및 처리의 실행을 관리하기 위해 운영 체제에 의해 이용되는 자원들을 포함한다. 부모 처리(parent process)는 부모 처리의 전반적인 기능성을 수행하는 것을 돕도록 다른, 자식 처리들(child processes)에 닿을 수 있다. 부모 처리는 구체적으로 부모 처리의 전반적인 기능성의 일부를 수행하도록 자식 처리들에 닿을 수 있기 때문에, 자식 처리들(및 손주 처리들 등)에 의해 수행되는 기능들은 때때로 부모 처리에 의해 수행되는 것과 같이 기술될 수 있다.
본 발명은 특정 실시예들을 참조하여 여기서 기술되었지만, 다양한 변형들 및 변경들이 이하의 청구범위에서 정의된 본 발명의 범위로부터 벗어남 없이 가해질 수 있다, 예를 들어, 16진수 이외의 다양한 넘버링 포맷들이 이용될 수 있다. 데이터 처리 아키텍처들에 대한 변경들이 이용될 수 있다. 다양한 알려진 데이터 저장 회로들 중 임의의 것은 메모리들 및 레지스터들을 구현하는데 이용될 수 있다. 데이터 버스들, 레지스터들, 벡터 필드들 및 데이터 피연산자들의 비트 크기들은 애플리케이션에 의존하여 변경될 수 있다. 부가적으로, 미리 결정된 상수들에 대해 이용된 값들은 여기서 예시된 것 이외의 다른 값들을 갖도록 변경될 수 있다. 임의의 형태의 반도체 처리 기술은 여기서 기술된 회로를 구현하는데 이용될 수 있다. 따라서, 명세서 및 도면들은 제한적인 의미보단 예시적인 것으로 간주되고, 모든 이러한 변형들은 본 발명의 범위 내에 포함되도록 의도된다. 임의의 혜택들, 이점들, 또는 특정 실시예들에 관해 여기서 기술된 문제점들에 대한 해결책들은 임의의 또는 모든 청구항들의 중요한, 요구되는 또는 필수적인 특징 또는 요소로서 해설되도록 의도되진 않는다.
여기서 사용된 용어 "결합된"은 직접 결합 또는 기계적 결합으로 제한되도록 의도되지 않는다.
또한, 여기서 사용된 단수 용어들은 하나 보다는 하나 이상으로서 정의된다. 또한, 청구범위에서 "적어도 하나" 및 하나 이상"과 같은 도입 문구들의 이용은 동일한 청구항이 도입 문구들 "하나 이상" 또는 "적어도 하나" 및 요소의 단수 표현을 포함할 때조차, 요소의 단수 표현에 의한 다른 청구항 요소의 도입이 단지 하나의 이러한 요소를 포함하는 발명들에 이렇게 도입된 청구항 요소를 포함하는 임의의 특정한 청구항을 제한하는 것을 암시하도록 해석되선 안된다. 정관사의 사용에 대해서도 상기는 참을 유지한다.
달리 언급이 없는 이상, "제 1" 및 "제 2"와 같은 용어는 이러한 용어가 기술하는 요소들 간을 임의로 구분하기 위해 이용된다. 따라서, 이러한 용어들은 반드시 이러한 요소들의 시간적 또는 다른 우선순위를 표시하기 위해 이용되는 것은 아니다.
이하는 본 발명의 다양한 실시예들이다.
항목 1은, N-비트 처리기에 의해 제 1 명령을 실행하는 단계를 포함하는 데이터 처리 시스템을 동작하는 방법에 있어서, 상기 제 1 명령은 업데이트를 갖는 메모리 액세스 명령이고, 제 1 명령의 실행은: 복수의 레지스터들 중 적어도 하나의 레지스터를 액세스하는 단계로서, 적어도 하나의 소스 레지스터를 액세스하는 단계는 복수의 레지스터들의 제 1 레지스터를 액세스하는 단계를 포함하고, 복수의 레지스터들의 각 레지스터는 N 비트들의 주요 레지스터부 및 M 비트들의 확장 레지스터부를 포함하고, 제 1 레지스터의 주요 레지스터부는 제 1 어드레스 피연산자를 포함하는, 상기 액세스하는 단계; 제 1 어드레스 피연산자를 이용하여 메모리 액세스 어드레스를 형성하는 단계; 메모리 액세스를 위한 어드레스로서 메모리 액세스 어드레스를 이용하는 단계; 업데이트된 어드레스 피연산자를 생성하는 단계로서, 상기 업데이트된 어드레스 피연산자는 제 1 어드레스 피연산자에 기초하는, 상기 생성하는 단계; 및 업데이트된 어드레스 피연산자를 제 1 레지스터의 주요부에 기록하는 단계를 포함한다. 상기 생성하는 단계는 변경 정보를 획득하기 위해 적어도 하나의 소스 레지스터 중 소스 레지스터의 확장부를 액세스하는 단계 및 업데이트된 액세스 피연산자를 생성하는 단계에서 변경 정보를 이용하는 단계를 포함한다.
항목 2는 항목 1의 방법을 포함하고, 상기 변경 정보를 획득하기 위해 적어도 하나의 소스 레지스터의 소스 레지스터의 확장부를 액세스하는 단계는 변경 정보를 획득하기 위해 제 1 레지스터의 확장 레지스터부를 액세스하는 단계를 포함한다.
항목 3는 항목 2의 방법을 포함하고, 상기 제 1 레지스터들은 제 1 명령에 대한 베이스 레지스터이고, 제 1 어드레스 피연산자는 베이스 어드레스이다.
항목 4는 항목 1의 방법을 포함하고, 상기 적어도 하나의 소스 레지스터는 복수의 레지스터들의 인덱스 레지스터를 포함하고, 상기 변경 정보를 획득하기 위해 적어도 하나의 소스 레지스터의 소스 레지스터의 확장부를 액세스하는 단계는 변경 정보를 획득하기 위해 인덱스 레지스터의 확장 레지스터부를 액세스하는 단계를 포함한다.
항목 5는 항목 1의 방법을 포함하고, 제 1 명령은 순환 버퍼에 저장된 메모리 피연산자를 액세스하기 위한 것이고, 변경 정보는 순환 버퍼의 버퍼 길이의 표시를 포함한다.
항목 6은 항목 5의 방법을 포함하고, 변경 정보는 순환 버퍼의 모듈러스(modulus)의 표시를 포함한다.
항목 7은 항목 5의 방법을 포함하고, 변경 정보는 순환 버퍼를 액세스하는데 이용되는 오프셋 값의 표시를 포함한다.
항목 8은 항목 1의 방법을 포함하고, 제 1 처리기 명령은 실행시에 비트 반전된 증분 동작을 수행하고, 변경 정보는 비트 반전된 증분 동작에 대한 마스크 값의 표시를 포함한다.
항목 9는 항목 1의 방법을 포함하고, 상기 제 1 명령을 실행하는 단계는 제 1 명령의 오프셋 필드가 제 1 값을 표시한다고 결정하는 단계를 포함하고, 상기 제 1 명령을 실행하는 단계는 제 1 값을 표시하는 오프셋 필드에 응답하여 변경 정보를 획득하기 위해 적어도 하나의 소스 레지스터의 소스 레지스터의 확장부를 액세스하는 단계를 포함하고, 업데이트를 갖는 메모리 액세스 명령의 오프셋 필드가 제 1 값을 표시하지 않는 경우, 상기 업데이트를 갖는 메모리 액세스 명령에 대한 업데이트된 어드레스 피연산자를 생성하는 단계는 업데이트를 갖는 메모리 액세스 명령에 대한 소스 레지스터의 확장부로부터 변경 정보를 이용하는 단계를 포함하지 않는다.
항목 10은 항목 1의 방법을 포함하고, 복수의 레지스터들의 확장부들은 스칼라 정수 명령들을 실행할 때 이용되지 않는다.
항목 11은 항목 1의 방법을 포함하고, 복수의 레지스터들의 확장부들은 SIMD 벡터 요소들을 저장하기 위해 제공된다.
항목 12는 항목 1의 방법을 포함하고, 제 1 명령은 SIMD 명령이다.
항목 13은 항목 1의 방법을 포함하고, 적어도 하나의 소스 레지스터의 소스 레지스터의 확장부는 모드 필드 및 제어 필드를 포함하고; 변경 정보는 제어 필드에 위치하고; 상기 업데이트된 어드레스 피연산자를 생성하는 단계는 복수의 업데이팅 기술들에 따라 업데이트된 어드레스 피연산자를 생성하는 단계를 포함하고, 모드 필드는 복수의 기술들 중 어느 기술이 상기 생성하는 단계에서 이용되는지를 표시한다.
항목 14는 항목 1의 방법을 포함하고, 처리기에 의해 제 2 명령을 실행하는 단계를 추가로 포함하고, 제 2 명령은 업데이트를 갖는 메모리 액세스 명령이고, 제 2 명령의 실행은: 업데이트된 어드레스 피연산자를 획득하기 위해 제 1 레지스터의 주요 레지스터부를 액세스하는 단계; 업데이트된 어드레스 피연산자를 이용하여 제 2 메모리 액세스 어드레스를 형성하는 단계; 및 제 2 메모리 액세스에 대한 어드레스로서 제 2 메모리 액세스 어드레스를 이용하는 단계를 포함한다.
항목 15는 항목 1의 방법을 포함하고, 상기 메모리 액세스 어드레스를 형성하는 단계는 메모리 액세스 어드레스를 유도하도록 제 1 어드레스 피연산자를 제 1 값에 부가하는 단계를 포함하고; 상기 업데이트된 어드레스 피연산자를 생성하는 단계는 변경 정보를 이용하여 메모리 액세스 어드레스를 변경하는 단계를 포함한다.
항목 16은 복수의 레지스터들로서, 복수의 레지스터들 각각은 주요부 및 확장부를 포함하고, 주요부는 N-비트들이고 확장부는 M-비트들이고, 처리기는 N-비트 처리기인, 상기 복수의 레지스터들; 명령들을 실행하는 실행 유닛으로서, 복수의 레지스터들의 레지스터들은 실행 유닛에 의한 명령들의 실행에서 소스 레지스터들 및 목적 레지스터들로서 활용되는, 상기 실행 유닛을 포함하는 처리기를 포함하고, 여기서, 실행 유닛은 업데이트를 갖는 제 1 메모리 액세스 명령을 실행하기 위해 복수의 레지스터들의 적어도 하나의 소스 레지스터를 액세스하고, 실행 유닛은 업데이트된 어드레스 피연산자를 생성하기 위해 적어도 하나의 소스 레지스터들의 제 1 소스 레지스터의 주요부로부터 제 1 어드레스 피연산자를 업데이트하도록 적어도 하나의 소스 레지스터들 중 소스 레지스터의 확장부로부터 변경 데이터를 이용하고, 업데이트된 어드레스 피연산자는 제 1 소스 레지스터의 주요부에 기록된다.
항목 17는 항목 16의 처리기를 포함하고, 실행 유닛은 제 1 어드레스 피연산자를 업데이트하도록 제 1 소스 레지스터의 확장부로부터 변경 데이터를 이용한다.
항목 18는 항목 16의 처리기를 포함하고, 제 1 메모리 액세스 명령은 순환 버퍼에 저장된 메모리 피연산자를 액세스하기 위한 것이고; 변경 정보는 순환 버퍼의 버퍼 길이의 표시를 포함한다.
항목 19는 항목 16의 처리기를 포함하고, 제 1 메모리 액세스 명령은 실행시에 비트 반전된 증분 동작을 수행하고; 변경 정보는 비트 반전된 증분 동작에 대한 마스크 값의 표시를 포함한다.
항목 20은 항목 16의 처리기를 포함하고, 복수의 레지스터들의 확장부들은 스칼라 정수 명령들을 실행할 때 실행 유닛에 의해 이용되지 않고, 복수의 레지스터들의 확장부들은 SIMD 벡터 요소들을 저장하기 위해 제공된다.
항목 20는 항목 16의 처리기를 포함하고, M은 N과 동일하다.
10 : 데이터 처리 시스템 12 : 메모리
14 : 처리기 16 : 입력/출력(I/O)
18 : 다른 주변장치 20 : 시스템 버스
22, 24, 26 : 도체들

Claims (21)

  1. 데이터 처리 시스템을 동작하는 방법에 있어서,
    N-비트 처리기에 의해 제 1 명령을 실행하는 단계를 포함하고, 상기 제 1 명령은 업데이트를 갖는 메모리 액세스 명령이고, 상기 제 1 명령의 실행은:
    복수의 레지스터들 중 적어도 하나의 레지스터를 액세스하는 단계로서, 상기 적어도 하나의 레지스터를 액세스하는 단계는 상기 복수의 레지스터들의 제 1 레지스터를 액세스하는 단계를 포함하고, 상기 복수의 레지스터들의 각 레지스터는 N 비트들의 주요 레지스터부 및 M 비트들의 확장 레지스터부를 포함하고, 상기 제 1 레지스터의 주요 레지스터부는 제 1 어드레스 피연산자를 포함하고, N 및 M 각각은 양의 정수인, 상기 적어도 하나의 레지스터를 액세스하는 단계;
    상기 제 1 어드레스 피연산자를 이용하여 메모리 액세스 어드레스를 형성하는 단계;
    메모리 액세스를 위한 어드레스로서 상기 메모리 액세스 어드레스를 이용하는 단계;
    업데이트된 어드레스 피연산자를 생성하는 단계로서, 상기 업데이트된 어드레스 피연산자는 상기 제 1 어드레스 피연산자에 기초하는, 상기 업데이트된 어드레스 피연산자를 생성하는 단계;
    상기 업데이트된 어드레스 피연산자를 상기 제 1 레지스터의 주요부에 기록하는 단계를 포함하고,
    상기 업데이트된 어드레스 피연산자를 생성하는 단계는 변경 정보를 획득하기 위해 상기 적어도 하나의 소스 레지스터의 확장부를 액세스하는 단계 및 상기 업데이트된 어드레스 피연산자를 생성하는 단계에서 상기 변경 정보를 이용하는 단계를 포함하는, 데이터 처리 시스템 동작 방법.
  2. 제 1 항에 있어서,
    상기 변경 정보를 획득하기 위해 적어도 하나의 소스 레지스터의 확장부를 액세스하는 단계는 상기 변경 정보를 획득하기 위해 상기 제 1 레지스터의 확장 레지스터부를 액세스하는 단계를 포함하는, 데이터 처리 시스템 동작 방법.
  3. 제 1 항에 있어서,
    상기 적어도 하나의 소스 레지스터는 상기 복수의 레지스터들의 인덱스 레지스터를 포함하고,
    상기 변경 정보를 획득하기 위해 적어도 하나의 소스 레지스터의 확장부를 액세스하는 단계는 상기 변경 정보를 획득하기 위해 상기 인덱스 레지스터의 확장 레지스터부를 액세스하는 단계를 포함하는, 데이터 처리 시스템 동작 방법.
  4. 제 1 항에 있어서,
    상기 제 1 명령을 실행하는 단계는 상기 제 1 명령의 오프셋 필드가 제 1 값을 표시한다고 결정하는 단계를 포함하고,
    상기 제 1 명령을 실행하는 단계는 상기 제 1 값을 표시하는 오프셋 필드에 응답하여 변경 정보를 획득하기 위해 상기 적어도 하나의 소스 레지스터의 확장부를 액세스하는 단계를 포함하고,
    상기 업데이트를 갖는 메모리 액세스 명령의 오프셋 필드가 제 1 값을 표시하지 않는 경우, 상기 업데이트를 갖는 메모리 액세스 명령에 대한 업데이트된 어드레스 피연산자를 생성하는 단계는 업데이트를 갖는 상기 메모리 액세스 명령에 대한 소스 레지스터의 확장부로부터 변경 정보를 이용하는 단계를 포함하지 않는, 데이터 처리 시스템 동작 방법.
  5. 처리기로서,
    복수의 레지스터들로서, 상기 복수의 레지스터들 각각은 주요부 및 확장부를 포함하고, 상기 주요부는 N-비트들이고 상기 확장부는 M-비트들이고, 상기 처리기는 N-비트 처리기이고, N 및 M 각각은 양의 정수인, 상기 복수의 레지스터들; 및
    명령들을 실행하는 실행 유닛으로서, 상기 복수의 레지스터들의 레지스터들은 상기 실행 유닛에 의한 명령들의 실행에서 소스 레지스터들 및 목적 레지스터들로서 활용되는, 상기 실행 유닛을 포함하는, 상기 처리기에 있어서,
    상기 실행 유닛은 업데이트를 갖는 제 1 메모리 액세스 명령을 실행하기 위해 상기 복수의 레지스터들의 적어도 하나의 소스 레지스터를 액세스하고, 상기 실행 유닛은 업데이트된 어드레스 피연산자를 생성하기 위해 상기 적어도 하나의 소스 레지스터들의 제 1 소스 레지스터의 주요부로부터 제 1 어드레스 피연산자를 업데이트하도록 상기 적어도 하나의 소스 레지스터들의 제 1 소스 레지스터의 확장부로부터 변경 데이터를 이용하고, 상기 업데이트된 어드레스 피연산자는 상기 제 1 소스 레지스터의 주요부에 기록되는, 처리기.
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
KR1020117005826A 2008-08-15 2009-05-28 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공 KR101581177B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/192,513 2008-08-15
US12/192,513 US8060724B2 (en) 2008-08-15 2008-08-15 Provision of extended addressing modes in a single instruction multiple data (SIMD) data processor

Publications (2)

Publication Number Publication Date
KR20110055629A KR20110055629A (ko) 2011-05-25
KR101581177B1 true KR101581177B1 (ko) 2016-01-11

Family

ID=41669168

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117005826A KR101581177B1 (ko) 2008-08-15 2009-05-28 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공

Country Status (5)

Country Link
US (1) US8060724B2 (ko)
KR (1) KR101581177B1 (ko)
CN (1) CN102124443B (ko)
TW (1) TWI463332B (ko)
WO (1) WO2010019304A1 (ko)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8635415B2 (en) * 2009-09-30 2014-01-21 Intel Corporation Managing and implementing metadata in central processing unit using register extensions
US9595074B2 (en) * 2011-09-16 2017-03-14 Imagination Technologies Limited Multistage collector for outputs in multiprocessor systems
US10318291B2 (en) 2011-11-30 2019-06-11 Intel Corporation Providing vector horizontal compare functionality within a vector register
CN103959237B (zh) * 2011-11-30 2016-09-28 英特尔公司 用于提供向量横向比较功能的指令和逻辑
US9424042B2 (en) * 2011-12-06 2016-08-23 Intel Corporation System, apparatus and method for translating vector instructions
CN104011649B (zh) 2011-12-23 2018-10-09 英特尔公司 用于在simd/向量执行中传播有条件估算值的装置和方法
KR101975534B1 (ko) 2012-09-11 2019-05-07 삼성전자주식회사 연산기능을 갖는 반도체 메모리 장치
CN103019972B (zh) * 2012-11-23 2016-05-25 广东威创视讯科技股份有限公司 一种利用总线进行通讯的方法和装置
US20140181427A1 (en) * 2012-12-21 2014-06-26 Advanced Micro Devices, Inc. Compound Memory Operations in a Logic Layer of a Stacked Memory
KR102102166B1 (ko) 2013-04-22 2020-04-21 삼성전자 주식회사 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법
US9424034B2 (en) * 2013-06-28 2016-08-23 Intel Corporation Multiple register memory access instructions, processors, methods, and systems
WO2015089314A1 (en) 2013-12-11 2015-06-18 Mill Computing, Inc. Computer processor employing operand data with associated meta-data
US9396056B2 (en) * 2014-03-15 2016-07-19 Intel Corporation Conditional memory fault assist suppression
WO2015161506A1 (zh) * 2014-04-25 2015-10-29 华为技术有限公司 一种寻址方法及装置
US9830151B2 (en) * 2014-12-23 2017-11-28 Intel Corporation Method and apparatus for vector index load and store
US20170046156A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Table lookup using simd instructions
US10620957B2 (en) * 2015-10-22 2020-04-14 Texas Instruments Incorporated Method for forming constant extensions in the same execute packet in a VLIW processor
US20170371657A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Scatter to gather operation
US10691691B2 (en) * 2016-09-10 2020-06-23 Sap Se Iterative evaluation of data through SIMD processor registers
US10318433B2 (en) * 2016-12-20 2019-06-11 Texas Instruments Incorporated Streaming engine with multi dimensional circular addressing selectable at each dimension
GB2558220B (en) * 2016-12-22 2019-05-15 Advanced Risc Mach Ltd Vector generating instruction
JP7141401B2 (ja) * 2017-08-24 2022-09-22 ソニーセミコンダクタソリューションズ株式会社 プロセッサおよび情報処理システム
US10983795B2 (en) * 2019-03-27 2021-04-20 Micron Technology, Inc. Extended memory operations
CN112764810B (zh) * 2021-01-20 2022-09-20 重庆邮电大学 一种应用于处理器的寄存器控制simd指令扩展方法
WO2022220835A1 (en) * 2021-04-15 2022-10-20 Zeku, Inc. Shared register for vector register file and scalar register file
US11886877B1 (en) * 2021-09-24 2024-01-30 Apple Inc. Memory select register to simplify operand mapping in subroutines

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5975365A (ja) * 1982-10-22 1984-04-28 Hitachi Ltd ベクトル処理装置
JPS60134974A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd ベクトル処理装置
US6052766A (en) * 1998-07-07 2000-04-18 Lucent Technologies Inc. Pointer register indirectly addressing a second register in the processor core of a digital processor
US6877084B1 (en) * 2000-08-09 2005-04-05 Advanced Micro Devices, Inc. Central processing unit (CPU) accessing an extended register set in an extended register mode
US6898691B2 (en) * 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
US7853778B2 (en) * 2001-12-20 2010-12-14 Intel Corporation Load/move and duplicate instructions for a processor
US7380109B2 (en) * 2002-04-15 2008-05-27 Ip-First, Llc Apparatus and method for providing extended address modes in an existing instruction set for a microprocessor
US7203820B2 (en) * 2002-06-28 2007-04-10 Sun Microsystems, Inc. Extending a register file utilizing stack and queue techniques
TWI230356B (en) * 2002-08-22 2005-04-01 Ip First Llc Apparatus and method for extending address modes in a microprocessor
US20040049657A1 (en) * 2002-09-10 2004-03-11 Kling Ralph M. Extended register space apparatus and methods for processors
US7610466B2 (en) * 2003-09-05 2009-10-27 Freescale Semiconductor, Inc. Data processing system using independent memory and register operand size specifiers and method thereof
US7315932B2 (en) * 2003-09-08 2008-01-01 Moyer William C Data processing system having instruction specifiers for SIMD register operands and method thereof
US7275148B2 (en) * 2003-09-08 2007-09-25 Freescale Semiconductor, Inc. Data processing system using multiple addressing modes for SIMD operations and method thereof
CN100338571C (zh) * 2003-09-27 2007-09-19 英特尔公司 处理器的扩展寄存器空间装置和方法
WO2005037326A2 (en) 2003-10-13 2005-04-28 Clearspeed Technology Plc Unified simd processor
GB2409067B (en) * 2003-12-09 2006-12-13 Advanced Risc Mach Ltd Endianess compensation within a SIMD data processing system
US7360063B2 (en) * 2006-03-02 2008-04-15 International Business Machines Corporation Method for SIMD-oriented management of register maps for map-based indirect register-file access

Also Published As

Publication number Publication date
CN102124443B (zh) 2014-05-07
TW201007472A (en) 2010-02-16
KR20110055629A (ko) 2011-05-25
TWI463332B (zh) 2014-12-01
CN102124443A (zh) 2011-07-13
US20100042808A1 (en) 2010-02-18
US8060724B2 (en) 2011-11-15
WO2010019304A1 (en) 2010-02-18

Similar Documents

Publication Publication Date Title
KR101581177B1 (ko) 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공
EP3588281B1 (en) Apparatus and method for a tensor permutation engine
KR102449616B1 (ko) 벡터 요소 세트에 대해 축소 연산을 수행하기 위한 방법 및 장치
KR101854520B1 (ko) 타이트하게 커플링된 이종 컴퓨팅을 위한 하드웨어 프로세서스들 및 방법들
US8051226B2 (en) Circular buffer support in a single instruction multiple data (SIMD) data processor
CN111177647A (zh) 实行16位浮点矩阵点积指令的系统和方法
JP6711480B2 (ja) ベクトルインデックスロードおよびストアのための方法および装置
KR102478874B1 (ko) 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치
CN109716290B (zh) 用于经融合的乘加的系统、装置和方法
CN108885551B (zh) 存储器复制指令、处理器、方法和系统
CN108205448B (zh) 具有在每个维度上可选择的多维循环寻址的流引擎
CN114625423A (zh) 用于执行将矩阵变换为行交错格式的指令的系统和方法
GB2529777A (en) Processor with granular add immediates capability and methods
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
CN115686633A (zh) 用于实现链式区块操作的系统和方法
JP6778375B2 (ja) ベクトルビット反転を実行するためのプロセッサ、方法、およびシステム
CN110909882A (zh) 用于执行水平铺块操作的系统和方法
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
KR20180067582A (ko) 벡터 로드 명령어
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
JP2021051727A (ja) グラフアプリケーション内の圧縮されたリストに効率的にアクセスするための間接参照のロード及びストアへのisaサポートのシステム及び方法
JP6374975B2 (ja) 連続ソースエレメントを複数のマスクされていない結果エレメントにストアすると共に、複数のマスクされた結果エレメントに伝搬するプロセッサ、方法、システム、及び命令
US11934830B2 (en) Method and apparatus for data-ready memory operations
JP2556182B2 (ja) デ−タ処理装置
US8572147B2 (en) Method for implementing a bit-reversed increment in a data processing system

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