KR101643065B1 - 불연속 명령 지정자들을 연속 명령 지정자들로 변형하는 기술 - Google Patents

불연속 명령 지정자들을 연속 명령 지정자들로 변형하는 기술 Download PDF

Info

Publication number
KR101643065B1
KR101643065B1 KR1020147017426A KR20147017426A KR101643065B1 KR 101643065 B1 KR101643065 B1 KR 101643065B1 KR 1020147017426 A KR1020147017426 A KR 1020147017426A KR 20147017426 A KR20147017426 A KR 20147017426A KR 101643065 B1 KR101643065 B1 KR 101643065B1
Authority
KR
South Korea
Prior art keywords
instruction
specifier
field
register
bits
Prior art date
Application number
KR1020147017426A
Other languages
English (en)
Other versions
KR20140104974A (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 KR20140104974A publication Critical patent/KR20140104974A/ko
Application granted granted Critical
Publication of KR101643065B1 publication Critical patent/KR101643065B1/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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • 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
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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/342Extension of operand address space
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

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)
  • Advance Control (AREA)

Abstract

불연속 지정자들(non-contiguous specifiers)을 포함하는 명령들의 에뮬레이션(emulation)이 용이해진다. 명령의 멀티 필드들(multiple fields)을 사용하여, 불연속 지정자는 레지스터와 같은 명령의 리소스를 지정한다. 예를 들어, 명령의 다수의 필드들(예컨대, 두 개의 필드들)은 명령에 의해 사용될 특정 레지스터를 함께 지정하는 비트들을 포함한다. 하나의 컴퓨터 시스템 아키텍쳐에서 정의된 명령들의 불연속 지정자들은 또 다른 컴퓨터 시스템 아키텍쳐에서 정의된 명령들에 의해 사용가능한 연속 지정자들(contiguous specifiers)로 변형된다. 상기 또 다른 컴퓨터 시스템 아키텍쳐에서 정의된 명령들은 상기 하나의 컴퓨터 시스템 아키텍쳐에 대해 정의된 명령들을 에뮬레이트(emulate)한다.

Description

불연속 명령 지정자들을 연속 명령 지정자들로 변형하는 기술{TRANSFORMING NON-CONTIGUOUS INSTRUCTION SPECIFIERS TO CONTIGUOUS INSTRUCTION SPECIFIERS}
본 발명은 일반적으로 컴퓨팅 환경(computing environment) 내의 에뮬레이션(emulation)과 관련되고, 구체적으로 명령들 내에서 지정자들(specifiers)의 에뮬레이션과 관련된다.
에뮬레이션(emulation)은 타겟 아키텍쳐(target architecture)로 불려지는 컴퓨터 아키텍쳐 상의 기능들(functions)을 모방(imitate)한다. 타겟 아키텍쳐는 그 기능들이 정의된 소스 아키텍쳐(source architecture)로 불려지는 컴퓨터 아키텍쳐와는 다르다. 예를 들어, 뉴욕 아몽크(New York, Armonk)의 인터내셔널 비지네스 머신즈 코포레이션(International Business Machines Corporation)에 의해 제공되는 z/아키텍쳐(z/Architecture)를 위해 작성된 명령은, 파워PC(PowerPC) - 이 또한 인터내셔널 비지네스 머신즈 코포레이션에 의해 제공됨 - 와 같은 다른 아키텍쳐, 또는 인터내셔널 비지네스 머신즈 코포레이션 또는 또 다른 회사에 의해 제공되는 또 다른 아키텍쳐의 하나 또는 그 이상의 명령들로 변환(translate)되고 표현될 수 있다. 이들 변환된 명령들은 변환되고 있는 명령과 동일 또는 유사한 기능을 수행한다.
해석(interpretation) 및 변환(translation)을 포함하여, 서로 다른 유형의 에뮬레이션들이 있다. 해석(interpretation)으로써, 명령을 표현하는 데이터가 리드(read)되고, 그래서 각각의 명령이 디코딩됨에 따라, 그것이 실행된다. 각각의 명령은 그것이 참조될 때마다 실행된다. 그러나, 변환(translation) - 이는 바이너리 변환(binary translation) 또는 리컴파일레이션(recompilation)으로도 불려짐 - 으로써, 명령들의 시퀀스들이 하나의 컴퓨터 아키텍쳐의 명령 세트(instruction set)로부터 또 다른 컴퓨터 아키텍쳐의 명령 세트로 변환된다.
정적 변환(static translation) 및 동적 변환(dynamic translation)을 포함하여 변환에는 다수의 유형들이 있다. 정적 변환에서, 하나의 아키텍쳐의 명령의 코드는 그 코드를 미리 실행하지 않고서 다른 아키텍쳐 상에서 실행되는 코드로 바뀐다. 이와는 대조적으로, 동적 변환에서는, 그 코드의 적어도 일 부분이 실행되고 변환되고, 그 결과가 타겟 컴퓨터 아키텍쳐의 프로세서에 의한 이후의 실행을 위해 캐시에 두어진다.
종래 기술의 단점들은 컴퓨팅 환경의 명령 지정자들(instruction specifiers)을 변형하기 위한 컴퓨터 프로그램 제품의 제공을 통해 극복되고 또한 이를 통해 장점들이 제공된다. 컴퓨터 프로그램 제품은 하나의 방법(a method)을 수행하기 위해 처리 회로(processing circuit)에 의해 판독가능하고 처리 회로에 의한 실행을 위한 명령들을 저장하는 컴퓨터 판독가능 스토리지 매체(computer readable storage medium)을 포함하는데, 상기 방법은, 프로세서에 의해, 제1 컴퓨터 아키텍쳐에 대해 정의된 제1 명령(first instruction)으로부터, 제1 부분(first portion) 및 제2 부분(second portion)을 갖는 불연속 지정자(non-contiguous specifier)를 획득하는 단계 - 상기 획득하는 단계는 상기 명령의 제1 필드로부터 상기 제1 부분을 획득하고 상기 명령의 제2 필드로부터 상기 제2 부분을 획득하는 단계를 포함하며, 상기 제1 필드는 상기 제2 필드에서 분리됨 -; 상기 제1 부분 및 상기 제2 부분을 사용하는 연속 지정자(contiguous specifier)를 생성하는 단계 - 상기 생성하는 단계는 상기 제1 명령의 오피코드(opcode)에 기초한 하나 또는 그 이상의 규칙들(rules)을 사용함 -; 및 제2 명령 - 상기 제2 명령은 상기 제1 컴퓨터 아키텍쳐와 다른 제2 컴퓨터 아키텍쳐에 대해 정의되고, 상기 제1 명령의 기능을 에뮬레이팅함 - 의 실행에 사용될 리소스를 나타내기 위해 상기 연속 지정자를 사용하는 단계를 포함한다.
여기서는 본 발명의 하나 또는 그 이상의 측면들과 관련되는 방법들 및 시스템들도 설명되고 청구(claim)된다. 나아가, 여기서는 본 발명의 하나 또는 그 이상의 측면들과 관련되는 서비스들도 설명되고 청구될 수 있다.
본 발명의 기술들을 통해 추가 특징들 및 이점들이 구현된다. 발명의 다른 실시예들 및 측면들이 여기에서 상세히 설명되며, 이는 청구되는 발명의 일부로서 고려된다.
이제, 첨부되는 도면들을 참조하여 본 발명의 실시예들이 기술될 것이나, 이는 단지 예를 든 것에 불과하다.
도 1은 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 컴퓨팅 환경의 일 예를 도시한다.
도 2는 본 발명의 일 측면에 따라, 도 1의 메모리의 추가 상세 내용들을 도시한다.
도 3은 하나 또는 그 이상의 해석(interpretation) 및 변환(translation)을 채용하는 에뮬레이션 프로세스의 개요의 일 실시예를 도시한다.
도 4는 도 3에서 참조된 해석 블록과 연관된 로직의 일 실시예를 도시한다.
도 5는 도 3에서 참조된 변환 블록과 연관된 로직의 일 실시예를 도시한다.
도 6은 본 발명의 일 측면에 따라 수정(modify)된 해석 및 변환의 하나 또는 그 이상을 채용하는 에뮬레이션 프로세스(emulation process)의 개요의 또 다른 실시예를 도시한다.
도 7a는 본 발명의 일 측면에 따라, 도 6에서 참조된 해석 블록과 연관된 로직의 일 예를 도시한다.
도 7b는 본 발명의 일 측면에 따라, 불연속 지정자를 연속 지정자로 변형하기 위한 로직의 일 예를 도시한다.
도 8은 본 발명의 일 측면에 따라, 도 6에서 참조된 변환 블록과 연관된 로직의 일 예를 도시한다.
도 9a는 본 발명의 일 측면에 따라, 하나의 컴퓨터 아키텍쳐의 벡터 로드 명령(Vector Load instruction)에서의 불연속 지정자를 또 다른 컴퓨터 아키텍쳐의 로드 벡터 인덱스드 명령(Load Vector Indexed instruction)에서의 연속 지정자로 변형하는 일 실시예를 도시한다.
도 9b는 본 발명의 일 측면에 따라, 연속 지정자에 대한 특정 레지스터의 할당(allocation)을 포함하는, 도 9a의 변형의 또 다른 예를 도시한다.
도 10은 본 발명의 일 측면에 따라, 레지스터 파일의 일 예를 도시한다.
도 11은 본 발명의 일 측면에 따라, 에뮬레이션 동안 메모리에 대한 할당에 있어서 불연속 지정자들을 연속 지정자들로 변형하는 것의 일 예를 도시한다.
도 12는 본 발명의 하나 또는 그 이상의 측면들을 편입시키는 컴퓨터 프로그램 제품의 일 실시예를 도시한다.
도 13은 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하는 호스트 컴퓨터 시스템의 일 실시예를 도시한다.
도 14는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하는 컴퓨터 시스템의 추가 실시예를 도시한다.
도 15는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하는 컴퓨터 네트워크를 포함하는 컴퓨터 시스템의 또 다른 예를 도시한다.
도 16은 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하는 컴퓨터 시스템의 여러 가지 구성요소들의 일 실시예를 도시한다.
도 17a는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하는 도 16의 컴퓨터 시스템의 실행 유닛의 일 실시예를 도시한다.
도 17b는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하는 도 16의 컴퓨터 시스템의 분기 유닛(branch unit)의 일 실시예를 도시한다.
도 17c는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하는 도 16의 컴퓨터 시스템의 로드/저장 유닛(load/store unit)의 일 실시예를 도시한다.
도 18은 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하는 에뮬레이트된 호스트 컴퓨터 시스템의 일 실시예를 도시한다.
본 발명의 일 측면에 따라, 불연속 지정자들(non-contiguous specifiers)을 포함하는 명령들의 에뮬레이션을 용이하게 하는 기술이 제공된다. 불연속 지정자는, 명령의 다수의 필드들을 사용하여, 레지스터와 같은 명령의 리소스를 지정한다. 예를 들어, 명령의 다수의 필드들(예컨대, 두 개의 필드들)은 그 명령에 의해 사용될 특정 레지스터를 함께 지정하는 비트들을 포함한다.
발명의 특정 측면에서, 하나의 컴퓨터 시스템 아키텍쳐(예컨대, 인터내셔널 비지네스 머신즈 코포레이션에 의해 제공되는 z/아키텍쳐(z/Architecture))에서 정의된 명령들의 불연속 지정자들을 또 다른 컴퓨터 시스템 아키텍쳐(예컨대, 인터내셔널 비지네스 머신즈 코포레이션에 의해 제공되는 PowerPC 아키텍쳐)에서 정의된 명령들에 의해 사용가능한 연속 지정자들(contiguous specifiers)로 변형하기 위한 기술이 제공된다. 상기 또 다른 컴퓨터 시스템에서 정의된 명령들은 상기 하나의 컴퓨터 시스템 아키텍쳐에 대해 정의된 명령들을 에뮬레이트한다.
에뮬레이션을 제공하는 컴퓨팅 환경의 일 실시예가 도 1을 참조하여 설명된다. 일 예에서, 컴퓨팅 환경(100)은, 예를 들어, 네이티브 중앙처리장치(CPU)(102), 메모리(104), 하나 또는 그 이상의 입력/출력 디바이스들 및/또는 인터페이스들(106) - 이것들은, 예를 들어, 하나 또는 그 이상의 버스들(108) 및/또는 다른 연결들을 통해 서로 간에 결합되어 있음 - 을 포함한다. 예를 들어, 컴퓨팅 환경(100)은 뉴욕 아몽크의 인터내셔널 비지네스 머신즈 코포레이션에 의해 제공되는 PowerPC 프로세서, pSeries 서버 또는 xSeries 서버, 캘리포니아 팔로 알토(Palo Alto)의 휴렛 패커드사에 의해 제공되는 인텔 이타늄(Intel Itanium) II 프로세서들을 갖는 HP 수퍼돔(Superdome), 및/또는 인터내셔널 비지네스 머신즈 코포레이션, 휴렛 패커드, 인텔, 오라클, 또는 다른 회사들에 의해 제공되는 아키텍쳐들에 기초한 다른 머신들을 포함할 수 있다.
네이티브 중앙처리장치(102)는 하나 또는 그 이상의 네이티브 레지스터들(110), 예컨대, 그 환경 내에서 처리 동안 사용되는 하나 또는 그 이상의 특수 레지스터들(special purpose registers) 및/또는 하나 또는 그 이상의 범용 레지스터들(general purpose registers)과 같은 것들을 포함한다. 이들 레지스터들은 어떤 특정 시점에서 그 환경의 상태를 나타내는 정보를 포함한다.
또한, 네이티브 중앙처리장치(102)는 메모리(104)에 저장되는 명령들 및 코드를 실행한다. 하나의 특정 예에서, 중앙처리장치는 메모리(104)에 저장된 에뮬레이터 코드(112)를 실행한다. 이 코드는 하나의 아키텍쳐에 구성된 처리 환경이 또 다른 아키텍쳐를 에뮬레이트할 수 있도록 한다. 예를 들어, 에뮬레이터 코드(112)는 z/Architecture 이외의 아키텍쳐들, 예컨대, PowerPC 프로세서들, pSeries 서버들, xSeries 서버들, HP 수퍼돔 서버들 또는 다른 것들과 같은 아키텍쳐들에 기초한 머신들이, z/Architecture를 에뮬레이트할 수 있도록 하고 또한 z/Architecture에 기초하여 개발(develope)된 소프트웨어 및 명령들을 실행할 수 있도록 한다.
에뮬레이터 코드(112)에 관한 더 구체적인 상세 내용들은 도 2를 참조하여 설명된다. 게스트 명령들(Guest instructions)(200)은 네이티브 CPU(102)의 그것과 다른 아키텍쳐에서 실행되도록 개발된 소프트웨어 명령들(예컨대, 기계 명령어들(machine instructions))을 포함한다. 예를 들어, 게스트 명령들(200)은 z/Architecture 프로세서 상에서 실행되도록 설계되었을 수 있으나, 그 대신에, 네이티브 CPU(102)(예를 들어, PowerPC 프로세서 또는 다른 유형의 프로세서일 수 있음) 상에 에뮬레이트되고 있다. 일 예에서, 에뮬레이터 코드(112)는 메모리(104)로부터 하나 또는 그 이상의 게스트 명령들(200)을 획득하고, 또한 선택적으로는 획득된 명령들을 위한 로컬 버퍼링(local buffering)을 제공하기 위한, 명령 페칭 유닛(202)을 포함한다. 그것은 또한 획득된 게스트 명령의 유형을 결정하고, 게스트 명령을 하나 또는 그 이상의 해당 네이티브 명령들(206)로 변환하기 위한, 명령 변환 루틴(instruction translation routine)(204)을 포함한다. 이 변환은, 예를 들어, 게스트 명령에 의해 수행될 기능을 식별하는 것(예컨대, 오피코드(opcode)를 통해) 그리고 그 기능을 수행할 네이티브 명령(들)을 선택하는 것을 포함한다.
나아가, 에뮬레이터(112)는 네이티브 명령들이 실행되도록 하기 위해 에뮬레이션 컨트롤 루틴(emulation control routine)(210)을 포함한다. 에뮬레이션 컨트롤 루틴(210)은 네이티브 CPU(102)로 하여금 하나 또는 그 이상의 미리 획득된 게스트 명령들을 에뮬레이트하는 네이티브 명령들의 루틴을 실행하게 할 수 있고, 그러한 실행의 끝에, 그 다음의 게스트 명령 또는 게스트 명령들의 그룹의 획득을 에뮬레이트하기 위해 명령 페치 루틴으로 컨트롤을 리턴할 수 있다. 네이티브 명령들(206)의 실행은 메모리(104)로부터 레지스터 내로 데이터를 로드하는 것; 레지스터로부터 메모리로 다시 데이터를 저장하는 것; 또는 변환 루틴에 의해 결정되는 바에 따라 산술(arithmetic) 또는 논리(logic) 연산(operation)의 몇몇 유형을 수행하는 것을 포함할 수 있다.
각각의 루틴은, 예를 들어, 소프트웨어로 구현될 수 있으며, 이는 메모리에 저장되고 네이티브 중앙처리장치(102)에 의해 실행된다. 다른 예들에서, 상기 루틴들 또는 연산들 중 하나 또는 그 이상은 펌웨어(firmware), 하드웨어, 소프트웨어 또는 이것들의 몇몇 조합으로 구현된다. 에뮬레이트된 프로세서의 레지스터들은 네이티브 CPU의 레지스터들(110)을 사용하여 또는 메모리(104)에서의 위치들(locations)을 사용함으로써 에뮬레이트될 수 있다. 실시예들에서, 게스트 명령들(200), 네이티브 명령들(206) 및 에뮬레이터 코드(112)는 동일한 메모리에 상주(reside)할 수 있고 또는 서로 다른 메모리 디바이스들 사이에 배분(disburse)될 수 있다.
여기서 사용되는 바와 같이, 펌웨어(firmware)는, 예컨대, 프로세서의 마이크로코드, 밀리코드 및/또는 매크로코드를 포함한다. 그것은 또한, 예를 들어, 하드웨어-레벨 명령들 및/또는 더 높은 레벨의 기계어(machine code)의 구현에 사용되는 데이터 구조들을 포함한다. 일 실시예에서, 그것은, 예를 들어, 기본적인 하드웨어(underlying hardware)에게 특정된 신뢰성 있는 소프트웨어 또는 마이크로코드를 포함하고 또한 시스템 하드웨어에 대한 운영체제 접근을 컨트롤하는, 마이크로코드로서 전형적으로 배포되는 독점 코드(proprietary code)를 포함한다.
일 예에서, 획득되고, 변환되고 실행되는 게스트 명령(200)은 여기에 설명되는 하나 또는 그 이상의 명령들이다. 하나의 아키텍쳐(예컨대, z/Architecture)의 명령은 메모리로부터 페치되고, 또 다른 아키텍쳐(예컨대, PowerPC, pSeries, xSeries, Intel 등)의 네이티브 명령들(206)의 시퀀스로 변환되고 표현된다. 그런 다음, 이들 네이티브 명령들은 실행된다.
도 3 - 5를 참조하여, 에뮬레이션에 관한 더 상세한 사항들이 설명된다. 특히, 도 3은 하나 또는 그 이상의 해석(interpretation) 및 변환(translation)을 채용하는 에뮬레이션 프로세스의 개요의 일 실시예를 도시하며, 도 4는 도 3에 참조된 해석(테크닉(technique) 2000)과 연관된 로직의 일 실시예를 도시하며, 도 5는 도 3에 참조된 바이너리 변환(테크닉 3000)과 연관된 로직의 일 실시예를 도시한다. 이 구체적인 예에서, z/Architecture에 대해 작성된 명령들은 PowerPC 명령들로 변환되고 있다. 그러나, z/Architecture에서 다른 타겟 아키텍쳐들로; 다른 소스 아키텍쳐들로부터 PowerPC 아키텍쳐로, 및/또는 다른 소스 아키텍쳐들로부터 다른 타겟 아키텍쳐들로의 에뮬레이션을 위해 동일한 테크닉들(techniques)이 적용가능하다.
도 3을 참조하면, 도 4를 참조하여 더 상세히 기술되는 바와 같이, 에뮬레이션 동안, 명령 X(insn X)로 일컬어지는 명령이 획득되고 해석된다(단계 300). 해석된 명령과 관련되는 여러 가지 통계(statics)는 업데이트되고(단계 302), 그런 다음, 처리는 그 다음 명령 - 이는 로직(logic)에서 명령 X(insn X)가 됨 - 으로 진행된다(단계 304). 이러한 다음 명령이 이전에 변환된 엔트리 포인트를 갖는지 여부에 관한 결정이 이뤄진다(질의(INQUIRY) 306). 만약 아니라면, 이러한 다음 명령이 N 번(예컨대, 15 번) 보여졌는지에 관한 추가 결정이 이뤄진다(질의 308). 즉, 이 명령이, 예를 들어, 그 다음의 사용을 위한 엔트리 포인트를 제공하는 그 코드의 적시(just-in-time, JIT) 컴파일레이션을 수행함에 의해 실행을 최적화시키기에 충분하게 보여 보여졌는지에 관한 것이다. 만약 이 명령이 15 번과 같이 N 번 보여지지 않았다면, 처리는 단계 300으로 계속된다. 그렇지 않으면, 처리는 명령들의 그룹을 형성하고 하나의 아키텍쳐로부터 또 다른 아키텍쳐로 명령들의 그룹을 변환하는 단계로 계속된다(단계 310). 이 변환을 수행하는 것의 일 예는 도 5를 참조하여 설명된다. 그 그룹을 형성하고 변환하는 것 다음으로, 그 그룹이 실행되고(단계 312), 처리는 단계 304로 계속된다.
질의 306으로 돌아가서, 만약 명령에 대한 기존의 변환된 엔트리 포인트가 있다면, 처리는 그 엔트리 포인트에서 그 그룹을 실행하는 단계로 계속된다(단계 312).
명령을 해석하는 것(테크닉 2000)과 관련되는 더 상세한 사항들은 도 4를 참조하여 설명된다. 처음에, 그 다음의 프로그램 카운터(PC) 어드레스에서 명령이 리드된다(단계 400). 이 명령이 분석(analyze)되고, 오피코드(opcode), 레지스터 및 이미디어트 필드들(immediate fields)이 추출된다(단계 402). 그런 다음, 그 추출된 오피코드에 해당하는 동작(bahavior)을 에뮬레이트하는 코드로 분기(branch)가 수행된다(단계 404). 그런 다음, 에뮬레이트된 코드가 수행된다(단계 406).
그룹 내 명령들을 변환하는 것(테크닉 3000)에 관한 더 상세한 사항들이 도 5를 참조하여 설명된다. 처음에, 미리 정의된 명령들의 그룹 내 명령이 리드된다(단계 500). 일 예에서, 그 그룹은 여러 가지 방법들을 사용하여 형성될 수 있다. 일 실시예에 따라, 그 그룹은 최빈(most likely) 경로(path)를 따라 단일 경로의 실행을 포함하도록 형성된다. 또 다른 실시예에서, 그룹은 에뮬레이트된 아키텍쳐의 상태에 기초하여, 가장 마지막의 이전의 실행 경로들(the last previous execution paths), 또는 현재의 실행 경로 중 하나를 포함하도록 형성된다. 또 다른 실시예에서, 모든 분기들이 채택되지 않는 것(not taken)으로 가정(assume)된다. 또 다른 하나의 실시예에서, 그룹 시작점에서부터 시작하는 모든 경로들과 같이 그룹에 다수의 경로들이 포함된다. 또 다른 실시예에서, 제1 분기까지(up to) 그리고 제1 분기를 포함하는 모든 명령들이 그룹(즉, 그룹은, 또한 흔히 "기본 블록(basic block)"으로도 알려져 있는 코드의 직선 부분(straight line piece of code)에 대응한다)에 추가된다. 각각의 실시예에서, 그룹을 언제 종료하고 어디에서 종료할 것인지에 관한 결정이 이뤄져야만 한다. 일 실시예에서, 그룹은 픽스된 수의 명령들 이후에 종료된다. 또 다른 실시예에서, 그룹은, 명령에 이르는 것(reaching an instruction)의 누적 확률(cumulative probability)이 주어진 스레쉬홀드 아래로 된 이후에 종료된다. 몇몇 실시예들에서, 그룹은, 중단 조건에 이르게 되었을 때 즉시 중단된다. 실시예들의 또 다른 세트에서, 그룹은, 단지 잘 정의된 "중단점(stopping point)", 예컨대, 정의된 명령, 특정 그룹 시작 정렬, 또는 다른 조건에서만 중단된다.
그 이후에, 명령은 분석되고, 오피코드, 레지스터 및 이미디어트 필드들(immediate fields)이 명령으로부터 추출된다(단계 502). 다음으로, 추출된 정보의 내부 표현(internal representation)이 제공된다(단계 504). 이 내부 표현은, 디코딩, 레지스터 할당, 및/또는 명령을 변환하는 것과 연관된 다른 태스크들을 최적화하기 위해 프로세서(예컨대, 컴파일러(complier) 또는 변환기(translator))에 의해 사용되는 추출된 정보의 포맷이다.
나아가, 변환될 그룹에서 또 다른 명령이 있는지에 관한 결정이 이뤄진다(질의 506). 만약 또 다른 명령이 있다면, 처리는 단계 500으로 계속된다. 그렇지 않으면, 처리는 계속해서 내부 표현을 최적화하고(단계 508), 명령들의 그룹에 대해 하나 또는 그 이상의 레지스터들을 할당하고(단계 510), 그 그룹에서 명령들을 에뮬레이트하는 코드를 생성하는 것으로 이어진다(단계 512).
상기 해석 및 변환 절차들은 하나의 아키텍쳐에서 정의된 명령을 또 다른 아키텍쳐에서 정의된 하나 또는 그 이상의 명령들로 에뮬레이션하기 위해 제공되지만, 불연속 지정자들을 사용하는 명령들의 에뮬레이션에서 진보(advancements)가 이뤄질 수 있다. 예를 들어, 본 발명의 일 측면에 따라, 명령의 레지스터 오퍼랜드가 그 명령의 다수의 필드들에 의해 지정되는 상황을 다루기 위해, 에뮬레이션 기술들에서의 개선(improvements)이 제공된다.
불연속 지정자들을 사용하는 명령의 한 가지 유형은 본 발명의 일 측면에 따라 제공되는 벡터 퍼실리티(vector facility)의 일부인 벡터 명령들이다. 많은 벡터 명령들에서, 레지스터 필드는 명령에 의해 사용될 레지스터를 지정하기 위해 필요한 비트들 모두를 포함하지는 않지만, 그 대신에, 레지스터를 지정하기 위해 레지스터 필드와 함께 또 다른 필드가 사용된다. 이 다른 필드는 여기서는 RXB 필드로 일컬어진다.
레지스터 확장 비트(register extension bit)로도 일컬어지는 RXB 필드는, 예를 들어, 벡터 명령의 벡터 레지스터 지정 오퍼랜드들(vector register designated operands) 각각에 대한 최상위 비트(the most significant bit)를 포함하는 네 개의 비트 필드(비트들 0-3)이다. 명령에 의해 지정되지 않는 레지스터 지정들(designations)을 위한 비트들은 보존되고 0으로 세트될 것이다.
일 예에서, RXB 비트들은 이하와 같이 정의된다.
0 - 명령의 제1 벡터 레지스터 지정을 위한 최상위 비트.
1 - 만약 있다면, 명령의 제2 벡터 레지스터 지정을 위한 최상위 비트.
2 - 만약 있다면, 명령의 제3 벡터 레지스터 지정을 위한 최상위 비트.
3 - 만약 있다면, 명령의 제4 벡터 레지스터 지정을 위한 최상위 비트.
각각의 비트는, 예를 들어, 레지스터 수에 따라 어셈블러에 의해 0 또는 1로 세트된다. 예를 들어, 레지스터들 0-15에 대하여는, 비트가 0으로 세트되고, 레지스터들 16-31에 대하여는, 비트가 1로 세트된다.
일 실시예에서, 각각의 RXB 비트는 하나 또는 그 이상의 벡터 레지스터들을 포함하는 명령에서 특정 위치(location)를 위한 확장 비트이다. 예를 들어, 하나 또는 그 이상의 벡터 명령들에서, RXB의 비트 0은 위치 8-11을 위한 확장 비트인데, 이는, 예컨대, V1로 배정된다. 그리고, RXB의 비트 1은 위치 12-15를 위한 확장 비트인데, 이는, 예컨대, V2로 배정된다.
또 다른 실시예에서, RXB 필드는 추가 비트들을 포함하고, 각각의 벡터 또는 위치를 위한 확장(extension)으로서 하나보다 많은 비트가 사용된다.
본 발명의 일 측면에 따라, 불연속 오퍼랜드 지정자들을 연속 지정자들로 변형하기 위한 테크닉들이 제공된다. 변형되는 경우, 연속 지정자들은 불연속 지정자들에 전혀 관계없이 사용된다.
불연속 지정자들을 사용하는 명령들을 에뮬레이트하기 위한 로직의 일 실시예가 도 6-8을 참조하여 설명된다. 구체적으로는, 도 6은 불연속 지정자들을 포함하는 명령들의 하나 또는 그 이상의 해석 및 변환을 포함하는 에뮬레이션 프로세스의 개요를 도시하며, 도 7a는 불연속 지정자들의 해석을 포함하는, 해석의 일 실시예(테크닉 6000)를 도시하며, 도 7b는 불연속 지정자를 연속 지정자로 변형하는 일 실시예를 도시하며, 도 8은 불연속 지정자들의 변환을 포함하는, 변환의 일 실시예(테크닉 7000)을 도시한다.
도 6을 참조하면, 에뮬레이션 프로세스의 개요가 제공된다. 이 개요는, 도 3에서 제공되는 개요와 유사하다. 다만, 단계 600이, 단계 300에서 참조된 테크닉(2000) 대신에, 도 7a를 참조하여 설명되는 테크닉(6000)을 사용하고, 또한 단계 610이 단계 310에서 참조된 테크닉(3000) 대신에, 도 8을 참조하여 설명되는 테크닉(7000)을 사용한다는 점에서는 다르다. 상기 개요는 위에서 도 3을 참조하여 설명되었으므로, 여기서는 반복되지 않고, 그 대신에, 계속해서 설명은 도 7a의 로직으로 이어진다.
도 7a를 참조하면, 단계들 700, 702, 704 및 706은 도 4의 단계들 400, 402, 404 및 406과 각각 유사하고, 따라서, 다시 설명되지 않지만, 단계들 703 및 705는 설명된다. 단계 703에서, 본 발명의 일 측면에 따라, 연속 지정자(이는 또한 여기서는 연속 인덱스(contiguous index)로도 일컬어짐)는 불연속 지정자로부터 생성된다. 불연속 지정자로부터 연속 지정자를 생성하는 것에 관한 더 상세한 사항들은 도 7b를 참조하여 설명된다.
도 7b를 참조하면, 일 실시예에서, 처음에, 불연속 지정자가 획득된다(단계 750). 이는, 예를 들어, 명령이 불연속 지정자를 가짐을 오피코드(opcode)로부터 결정하는 것, 그리고 불연속 지정자를 지정하기 위해 그 명령의 어느 필드들이 사용되는지를 결정하는 것을 포함한다. 예를 들어, 오피코드의 일부는 명령의 포맷을 지정하고 이 포맷은 명령이 적어도 하나의 불연속 지정자를 가짐을 프로세서에게 나타내며, 그것은 불연속 지정자를 지정하기 위해 사용되는 필드들을 더 지정한다. 그런 다음, 이들 필드들은 그들 필드들에서 데이터(예컨대, 비트들)를 획득하기 위해 리드(read) 된다. 예를 들어, 많은 벡터 명령들에서, 명령(예컨대, V1)의 위치 8-11은 벡터 레지스터를 지정하기 위해 사용되는 복수의 비트들(예, 4)을 지정하고, 명령의 RXB 필드는 특정 벡터 레지스터를 지정하기 위해 사용되는 하나 또는 그 이상의 추가 비트들을 포함한다. 이들 비트들은 이 단계에서 획득된다.
불연속 지정자(예컨대, 레지스터 필드(V1)로부터의 비트들 및 RXB로부터의 비트(들))를 획득하는 것에 후속하여, 불연속 지정자의 부분들을 결합하여 연속 지정자를 생성하도록, 하나 또는 그 이상의 규칙들이 사용된다(단계 752). 예를 들어, 하나 또는 그 이상의 규칙들은 명령의 오피코드에 의해 지정되는 바와 같이 명령의 포맷에 의존한다. 오피코드가 RXB 필드를 나타내는 특정 예에서, 하나 또는 그 이상의 규칙들은 레지스터 필드에서 지정된 비트들에 대한 최상위 비트(들)로서 레지스터 오퍼랜드와 연관된 RXB 비트(들)을 사용하는 것을 포함한다. 예를 들어, RXB 필드는, 일 실시예에서, 4 비트들을 가지며, 각각의 비트는 레지스터 오퍼랜드에 대응한다. 예를 들어, 비트 0은 제1 레지스터 오퍼랜드에 대응하고, 비트 1은 제2 레지스터 오퍼랜드에 대응한다. 그래서, 레지스터 오퍼랜드에 대응하는 비트가 추출되어 연속 지정자를 형성하기 위해 사용된다. 예를 들어, 만약 0010 바이너리가 제1 오퍼랜드 레지스터 필드에서 특정되고 1000 바이너리가 RXB 필드에서 특정되면, 제1 오퍼랜드와 연관된 비트의 값(이 예에서는 비트 0임)이 0010에 연결(concatenate)된다. 그러므로, 연속 지정자는, 이 예에서, 10010(레지스터 18)이다.
그런 다음, 생성된 연속 지정자는, 마치 그것이 그 명령에서 제공된 지정자인 것처럼 사용된다(단계 754).
그 후, 도 7a로 돌아가서, 오피코드에 대응하는 동작을 에뮬레이트하는 코드로 분기가 수행된다(단계 704). 나아가, 연속 인덱스는 불연속 지정자에 관계없이 동종화된(homogenized) 아키텍쳐 리소스를 관리하기 위해 사용된다. 즉, 연속 레지스터 지정자는, 마치 어떠한 불연속 지정자도 없는 것처럼 사용된다. 각각의 연속 지정자는 에뮬레이션 코드에 의해 사용될 레지스터를 나타낸다. 그 후, 에뮬레이션 코드가 수행된다(단계 706).
불연속 지정자들을 연속 지정자들로 변형하는 것을 포함하는 변환(테크닉 7000으로 일컬어짐)에 관한 더 상세한 사항들은 도 8을 참조하여 설명된다. 일 실시예에서, 단계들 800, 802, 804, 806, 808, 810 및 812는 도 5의 단계들 500, 502, 504, 506, 508, 510 및 512와 각각 유사하다. 그러므로, 도 8을 참조하여 여기서는 설명되지 않는다. 그러나, 본 발명의 일 측면에 따라, 소스 아키텍쳐의 명령의 불연속 지정자를 타겟 아키텍쳐의 명령의 연속 지정자로 변형하기 위해, 추가 단계들이 수행된다. 상기 타겟 아키텍쳐의 명령은 상기 소스 아키텍쳐의 명령의 기능(function)을 에뮬레이트한다.
예를 들어, 단계 803에서, 불연속 지정자로부터 연속 지정자가 생성된다. 도 7b를 참조하여 위에서 설명된 것과 같이, 이는 에뮬레이트될 명령으로부터 불연속 지정자를 획득하는 단계, 그리고 불연속 지정자로부터 연속 지정자를 생성하기 위한 하나 또는 그 이상의 규칙들을 사용하는 단계를 포함한다. 일 실시예에서, 불연속 지정자를 갖는 명령의 오피코드는, 적어도 암시적으로는(implicitly) 그것의 포맷에 의해, 그 명령이 불연속 지정자를 포함한다는 것을 나타낸다. 예를 들어, 명령의 포맷은 오피코드의 하나 또는 그 이상의 비트들(예컨대, 처음의 두 비트들)에 의해 나타내어지고, 그 포맷에 기초하여, 프로세서(예컨대, 그 프로세서의 컴파일러, 변환기, 에뮬레이터)는 이 명령이 불연속 지정자를 포함하는 것으로 이해하며, 여기서, 레지스터와 같은 리소스의 지정자의 일 부분은 명령의 하나의 필드에 포함되고, 그 지정자의 하나 또는 그 이상의 다른 부분들은 그 명령의 하나 또는 그 이상의 다른 필드들에 위치한다.
일 예로서, 오피코드는 또한 불연속 지정자로부터 연속 지정자를 생성하기 위해 사용되는 하나 또는 그 이상의 규칙들의 프로세서에 대한 표시(indication)를 제공한다. 예를 들어, 오피코드는 특정 명령이 벡터 레지스터 명령이고, 그래서 RXB 필드를 갖는다는 것을 나타낼 수 있다. 그러므로, 프로세서는 RXB 필드를 갖는 명령 - 상기 RXB 필드는 그것의 해당 레지스터 필드를 위한 최상위 비트를 제공함 - 을 나타내는 정보(예컨대, 메모리 또는 외부 스토리지에 저장된 규칙들)에 접근한다. 예를 들어, 규칙들은, 레지스터 필드의 비트들이 특정 레지스터 오퍼랜드와 연관된 RXB 필드의 하나 또는 그 이상의 비트들과 결합되어 연속 필드(contiguous field)를 생성한다는 것을 명시한다.
연속 지정자를 생성하는 것에 후속하여, 연속 지정자는 불연속 지정자와 관계없이 사용된다. 예를 들어, 단계 808에서, 코드는 불연속 지정자와 관계없이 연속 지정자를 사용하여 최적화된다. 이와 유사하게, 하나 또는 그 이상의 레지스터들은 연속 지정자를 사용하여 그리고 불연속 지정자와 관계없이 할당된다(단계 810). 더욱더 나아가, 단계 812에서, 에뮬레이트된 코드는 불연속 지정자와 관계없이 그리고 단계 810에서 수행된 할당을 사용하여 생성된다. 즉, 이들 단계들에서, 연속 지정자는 불연속 지정자로부터 생성되었다는 어떠한 표시도 없다. 불연속 지정자는 무시된다.
불연속 지정자를 연속 지정자로 변환하는 것에 관한 더 상세한 사항들은 도 9a, 9b 및 11을 참조하여 설명된다. 먼저, 도 9a를 참조하면, 벡터 로드(Vector Load, VL) 명령(900)이 도시되어 있다. 일 예에서, 벡터 로드 명령은, 벡터 로드 동작(vector load operation)을 나타내는 오피코드 필드들(902a(예, 비트들 0-7), 902b(비트들 40-47)); 벡터 레지스터(V1)를 지정하는데 사용되는 벡터 레지스터 필드(904)(예, 비트들 8-11); 인덱스 필드(X2)(906)(예, 비트들 12-15); 베이스 필드(base field)(B2)(908(예, 비트들 16-19)); 변위 필드(displacement field)(D2)(910(예, 비트들 20-31)); 및 RXB 필드(912(예, 비트들 36-39))를 포함한다. 일 예에서 필드들(904-912) 각각은 분리되고 오피코드 필드(들)과는 독립적이다. 나아가, 일 실시예에서 그것들은 서로 간에 분리되고 독립적이지만, 다른 실시예들에서는, 하나보다 많은 필드가 결합될 수 있다. 이들 필드들의 사용에 관한 추가 정보는 이하에서 설명된다.
일 예에서, 선택된 비트들(예, 오피코드 필드(902a)에 의해 지정된 오피코드의 처음의 두 비트들)은 명령의 길이 및 포맷을 지정한다. 이 구체적인 예에서, 그 길이는 세 개의 하프워드(half-words)이고 그 포맷은 확장된 오피코드 필드를 갖는 벡터 레지스터-및-인덱스 스토리지 동작(vector register-and-index storage operation)이다. 벡터(V1) 필드는, RXB에 의해 지정된 그것의 해당 확장 비트와 함께, 벡터 레지스터(즉, 불연속 지정자)를 지정한다. 특히, 벡터 레지스터들을 위해, 오퍼랜드를 포함하는 레지스터는, 예를 들어, 최상위 비트로서 그것의 레지스터 확장 비트(RXB)의 추가를 갖는 레지스터 필드의 4 비트 필드를 사용하여 지정된다. 예를 들어, 만약 V1에서 4 비트 필드가 0010 바이너리이고 이 오퍼랜드에 대한 확장 비트가 1 바이너리이면, 5-비트 필드는 10010 바이너리이며, 이는 레지스터 번호(register number) 18(십진수)을 나타낸다.
명령의 필드와 연관된 아래첨자 숫자는 그 필드가 적용되는 오퍼랜드를 표시한다. 예를 들어, V1과 연관된 아래첨자 숫자 1은 제1 오퍼랜드를 표시한다. 이는 RXB 필드의 어느 비트가 그 레지스터 필드와 결합되는지를 결정하기 위해 사용된다. 레지스터 오퍼랜드는 길이가, 예를 들어, 128 바이트인 하나의 레지스터이다. 일 예에서, 벡터 레지스터-및-인덱스 스토리지 동작 명령에서, X2와 B2 필드들에 의해 지정된 범용 레지스터들의 내용(contents)은 제2 오퍼랜드 어드레스를 형성하기 위해 D2 필드의 내용에 추가된다. 벡터 로드 명령에 대해, 변위(D2)는, 일 예에서, 12-비트 무부호 정수(unsigned integer)로 처리된다.
이 예에서, V1은 제1 오퍼랜드이므로, RXB의 최좌측 위치(예컨대, 비트 0)는 이 오퍼랜드와 연관된다. 그러므로, 여기에 설명된 바와 같이, 최좌측 위치에 위치한 값은, 연속 지정자를 생성하기 위해 V1 레지스터 필드에서의 값과 결합된다.
본 발명의 일 측면에 따라, 예를 들어, z/아키텍쳐에 정의되는 벡터 로드 명령(Vector Load instruction)(900)은, 예를 들어, PowerPC 아키텍쳐에 정의되는 로드 벡터 인덱스드 명령(Load Vector Indexed instruction)(950)으로 에뮬레이트된다. 비록, 이 예에서, z/아키텍쳐가 소스 아키텍쳐이고 PowerPC가 타겟 아키텍쳐이지만, 이는 단지 일 예일 뿐이다. 소스 및 타겟 아키텍쳐들 중 하나 또는 둘 모두를 위해, 다른 많은 아키텍쳐들이 사용될 수 있다.
각각의 아키텍쳐는 그것이 사용할 수 있는 그것의 특정 레지스터들과 연관되어 있다. 예를 들어, z/아키텍쳐에서는, 벡터 레지스터들의 사분면(quadrant)에 매핑할 수 있는 32개의 벡터 레지스터들 및 다른 유형들의 레지스터들이 있다. 예를 들어, 도 10에 도시된 바와 같이, 만약 32개의 벡터 레지스터들(1002)을 포함하는 레지스터 파일(1000)이 있고 각각의 레지스터가 128 비트 길이라면, 길이 64 비트인 16개의 부동 소수점 레지스터들(floating point registers)(1004)이 그 벡터 레지스터들을 오버레이(overlay)할 수 있다. 따라서, 일 예로서, 부동 소수점 레지스터 2가 수정(modify)될 경우, 벡터 레지스터 2도 또한 수정된다. 레지스터들의 다른 유형들에 대해서는 다른 매핑들도 또한 가능하다.
이와 유사하게, PowerPC 또는 다른 타겟 아키텍쳐는 그것에 배정된 레지스터들의 세트를 갖는다. 이러한 레지스터들의 세트는 소스 아키텍쳐에 할당된 레지스터들의 세트와 같거나 다를 수 있다. 타겟 레지스터는 명령의 구체적인 유형을 위해 이용가능한 어느 정도의(more or less) 레지스터들을 가질 수 있다. 예를 들어, 도 9a에 도시된 예에서, 벡터 로드 명령 및 로드 벡터 인덱스드 명령은 그것에 대해 이용가능한 32 개의 벡터 레지스터들을 갖는다. 또한, 다른 예들이 가능하다.
오피코드에 의해 나타내어지는 바와 같이, 벡터 로드 명령은 불연속 지정자를 포함하는데, 이는 이 예에서 V1 및 RXB 필드들로 표현된다. 이들 불연속 필드들은 로드 벡터 인덱스드 명령(950)에서 연속 인덱스를 생성하기 위해 결합된다. 이러한 연속 지정자는 명령(950)의 VRT 필드(954)에 나타내어진다. 이 특정 예에서, 코드 VL v18, 0(0,gr5)에 보여지는 바와 같이, 지정되고 있는 벡터 레지스터는 레지스터 18이다. 이 레지스터는 V1 필드와 RXB 필드에 의해 제공되는 불연속 지정자에 의해 그 명령에 지정되어 있다. 이 예에서, V1 필드는 값 2(0010 바이너리)를 포함하고, RXB 필드는 값 8(1000 바이너리)을 포함한다. 미리 정의된 규칙들에 근거하여, V1은 제1 오퍼랜드이므로, 1000의 최좌측 비트(1)는, V1 필드(0010) 내 비트들과 연결(concatenate)되어 그 값이 십진수 18인 10010의 연속 지정자를 생성한다.
참조부호 956으로 보여지는 바와 같이, 18이라는 표현이 로드 벡터 인덱스드 명령의 VRT 필드에 배치되는데, 이는 벡터 로드 명령의 레지스터 필드(V1)에 대응한다. 완성을 위해, 명령(950)의 RA 및 RB 필드들은 각각 명령(900)의 X2 및 B2에 대응한다. 명령(900)의 D2 필드는 명령(950) 내에 어떠한 대응하는 필드도 갖지 않으며, 명령(900)의 오피코드 필드들은 명령(950)의 오피코드 필드들에 대응한다.
추가 예가 도 9b에 도시되어 있다. 이 예에서, 도 9a에 도시된 예에서와 같이, 명령(900)의 불연속 지정자(V1, RXB)는 명령(950)의 연속 지정자(VRT)로 변형되고 있다. 그러나, 이 예에서, 명령(950)에 대해 할당된 레지스터는 변형된 연속 지정자와 동일한 수를 갖지 않고, 그 대신, 연속 지정자는 다른 레지스터에 매핑된다. 예를 들어, 도 9a에서의 예에서, 불연속 지정자는, 연속 지정자와 같이, 레지스터 18을 참조한다. 즉, 일대일 매핑(one for one mapping)이 있다. 그러나, 도 9b에서, 18의 불연속 지정자는 18의 연속 지정자로 변형되지만, 그런 다음, 연속 지정자의 18은, 레지스터 7(참조 부호 980 참조)과 같은 다른 레지스터로 매핑된다. 즉, 소스 아키텍쳐에서 레지스터 18은, 이 특정 예에서, 타겟 아키텍쳐에서의 레지스터 7로 매핑된다. 이러한 매핑은 미리 정의되고 프로세서에 접근가능하다.
추가 예가 도 11에 더 도시되어 있다. 이 예에서는, 도 9a 및 9b에서와 같이, 에뮬레이션 동안 레지스터에 대한 할당 대신에, 할당이 메모리에 대해 되어 있다. 이 예에서, 명령, VLR은 하나의 벡터 레지스터 VR 18의 내용들을 또 다른 벡터 레지스터 VR24로 옮기기 위해 사용된다. 그러나, 이 예에서는, 레지스터 파일이 이들 벡터 레지스터들을 포함할 정도로 충분히 크지 않고, 그래서 대신에 메모리가 사용되는 것으로 가정된다. 즉, 어레이(array)로서 복수의 벡터들을 저장하는 메모리의 연속 부분(contiguous portion)이 있다. 이 어레이는 어드레스, rvbase에서 시작하는데, 여기에 제1 레지스터(예컨대, 레지스터 0)가 저장되고, 그런 다음, 그 다음의 레지스터가 rbvase로부터의 오프셋(예컨대, 16 바이트)에 저장되고, 제3 레지스터는 제2 레지스터로부터의 오프셋에 저장된다. 그래서, 이 예에서, 레지스터 18은 rvbase로부터의 오프셋 288에 있고, 레지스터 24는 rvbase로부터의 오프셋 384에 있다.
이 예에서, 두 개의 불연속 지정자들(V1, RXB; 및 V2, RXB)이 있다. 그래서, 두 개의 연속 지정자들이 생성된다. 예를 들어, V1은 제1 오퍼랜드이므로, 제1 연속 지정자가 RXB의 비트 0과의 V1에서의 비트들의 연결(concatenation)에 의해 생성된다. V1이 이진수 1000(십진수 8)을 포함하고 이진수 1100(십진수 12)을 포함하므로, 제1 연속 지정자는 1(RXB의 비트 0으로부터)을 1000(V1으로부터)과 연결(concatenate)시켜 11000(십진수 24)을 제공함으로써 형성된다. 이와 유사하게, 제2 연속 지정자는 0010(V2에 대해 십진수 2)과 1(RXB의 비트 1로부터)을 연결(concatenation)시켜 10010(십진수 18)을 제공함으로써 생성된다. 이들 레지스터들은 메모리 내에 있으므로, 벡터 레지스터 24는 rvbase로부터의 오프셋 384에 있고, 벡터 레지스터 18은 rvbase로부터의 오프셋 288에 있다. 이들 값들은 도 11에서 각각 1102, 1104에 보여지고 있다.
도 11의 우측의 슈도 코드(pseudo-code) 및 좌측의 명령들은, 18에서의 벡터 오프셋(이는 288에서의 바이트 오프셋에 대응함)에서 벡터 레지스터에 대응하는 연속된 넘버의 바이트들(contiguous number of bytes)를 24에서의 벡터 오프셋(이는 384에서의 바이트 오프셋에 대응함)으로 옮기는 것을 설명한다. 특히, 로드 이미디어트(lode immediate, LI)는 288의 값을 rtemp1에 로드하고, 그런 다음 벡터 로드는 rvbase에 의해 제공되는 주소 플러스 rtemp1에서의 오프셋에서 수행되고, 그 값은 임시 벡터 레지스터, vtemp2에 저장된다. 그런 다음, 그 다음의 로드 이미디어트는 384를 rtemp1에 로드하고, 메모리 바깥으로의 저장(store back out to memory)은, 상기 어드레스 플러스 벡터 레지스터 24(예, 오프셋 288)에서의 오프셋에 대응하는 위치에서 수행된다.
비록 위에서 여러 가지 예들이 설명되어 있지만, 다른 많은 예들 및 그 변형들이 가능하다. 벡터 명령들 및 RXB 필드의 사용에 관한 추가 정보는, "명령에 의해 나타내어진 특정 메모리 경계까지 데이터를 로드하기 위한 명령(Instruction to Load Data Up to A Specified Memory Boundary Indicated by the Instruction)"(U.S. 시리얼 넘버()(IBM 도켓 넘버, POU920120030US1), 조나단 디. 브래드버리(Jonathan D. Bradbury) 등)의 제목으로, 여기에 함께 제출되는 특허 출원에서 설명되는데, 이는 전부 본 명세서 내에 참조로 편입된다.
나아가, 여기서는 여러 가지 아키텍쳐들이 언급된다. z/아키텍쳐의 일 실시예는, "z/아키텍쳐 동작 원리(z/Architecture Principles of Operation)" 라는 명칭의 IBM® 발행물(IBM® 발행물 번호 SA22-7832-08(2010년 8월, 제9판)에 설명되며, 이는 전부 본 명세서 내에 참조로 편입된다. IBM® 및 z/Architecture®는, 미국, 뉴욕 아몽크의 인터내셔널 비지네스 머신즈 코포레이션의 등록 상표들이다. 여기서 사용되는 다른 명칭들은 인터내셔널 비지네스 머신즈 코포레이션 또는 다른 회사들의 등록 상표들, 상표들, 또는 제품 명칭들일 수 있다. 또한, 파워 아키텍쳐(Power Architecture)의 일 실시예는 "Power ISATM" 버젼 2.06 리비젼 B"(인터내셔널 비지네스 머신즈 코포레이션(2010년 7월 23일))에 설명되어 있으며, 이는 전부 본 명세서 내에 참조로 편입된다. POWER ARCHITECTURE®는 인터내셔널 비지네스 머신즈 코포레이션의 등록 상표이다. 더 나아가, 인텔 아키텍쳐의 일 실시예는 "Intel® 64 및 IA-32 아키텍쳐들 개발자의 매뉴얼: 볼륨 2B. 명령들 세트 레퍼런스, A-L"(오더 넘버 253666-041US(2011년 12월)) 및 "Intel® 64 및 IA-32 아키텍쳐들 개발자의 매뉴얼: 볼륨, 2B, 명령들 세트 레퍼런스, M-Z"(오더 넘버 253667-041US, 2011년 12월)에 설명되어 있고, 이들 각각은 전부 본 명세서 내에 참조로 편입된다. Intel®은 캘리포니아, 산타 클라라의 인텔사의 등록 상표이다.
하나의 시스템 아키텍쳐를 위해 정의된 명령의 불연속 지정자들을 또 다른 시스템 아키텍쳐를 위해 정의된 명령에 대한 연속 지정자들로 변형하기 위한 테크닉이 여기에 상세히 설명되어 있다. 이전의 아키텍쳐 에뮬레이션은 불연속 지정자들, 그리고 픽스되거나 가변적인 폭의 명령 세트들에서, 특히 불연속 레지스터 지정자들을 갖는 시스템들의 에뮬레이션을 성공적으로 대처하지 못해 왔다. 그러나, 본 발명의 일 측면에 따라, 불연속 지정자들을 처리하기 위해 이전의 에뮬레이터들을 확장하기 위한 테크닉이 제공된다. 예를 들어, 이 테크닉은 불연속 지정자들을 리드(read)하는 단계, 불연속 지정자로부터 연속 인덱스(contiguous index)를 생성하는 단계, 및 동종의(homogeneous) 리소스에 접근하거나 동종의 리소스를 표현하기 위해 상기 연속 인덱스를 사용하는 단계를 포함한다.
추가 실시예에서, JIT 구현(implementation)에 따라, 불연속/비동종 리소스들에 의한 불연속 지정자에 의해, 그러나 불연속 지정자 경계들(boundaries)에 의한 파티셔닝을 반영하지 않고, 최적화 결정들에 의해, 접근된 리소스를 선택적으로 표현하는, 할당 결정들(allocation decisions)을 수행하기 위해, 연속 인덱스가 사용된다. 즉, 일 실시예에서, 하나의 아키텍쳐에 대해 정의된 명령은 적어도 하나의 리소스에 대한 적어도 하나의 불연속 지정자를 가지며, 그러한 적어도 하나의 불연속 지정자는 적어도 하나의 연속 지정자로 변형된다. 그러한 적어도 하나의 연속 지정자는 사용할 또 다른 아키텍쳐의 명령에 대한 적어도 하나의 리소스를 선택하는데 사용된다. 그러나, 다른 아키텍쳐의 명령은 불연속 지정자들을 사용한다. 그래서, 상기 적어도 하나의 선택된 리소스에 대한 적어도 하나의 연속 지정자는, 그런 다음 제2 아키텍쳐의 명령에 의한 사용을 위해 적어도 하나의 불연속 지정자로 변형된다. 일 실시예에서, 이는 에뮬레이터에 의해 수행된다.
일 실시예에서, 에뮬레이터는 제2 컴퓨터 아키텍쳐로 지정된 프로세서 상에서 제1 컴퓨터 아키텍쳐 명령 세트의 명령 실행을 에뮬레이트하기 위해 제공된다. 예를 들어, 에뮬레이터는 에뮬레이션 프로그램에 의해 어플리케이션의 명령들을 페치하고; 그 명령들을 에뮬레이트하기 위해 에뮬레이션 모듈을 선택하도록, 명령들의 오피코드를 해석하고; 그 명령들이 불연속 레지스터 필드들을 채용한다는 것을 오피코드로부터 결정하고; 결합된 레지스터 필드를 형성하기 위해 명령의 불연속 레지스터 필드들을 결합하고; 명령들을 에뮬레이트하기 위해, 에뮬레이션 모듈의 명령들에 의해 그 결합된 레지스터 필드를 사용하는 것을 포함한다.
나아가, 일 실시예에서, 레지스터 스페이스는 서브-섹션을 포함하고, 제1 컴퓨터 아키텍쳐 명령 세트는 그 서브-섹션에만 접근하기 위한 레지스터 필드들을 갖는 제1 명령들, 및 상기 레지스터 스페이스의 모두에 접근하기 위한 불연속 레지스터 필드들을 갖는 제2 명령들을 포함한다.
일 실시예에서, RXB 필드는 RXB 필드를 사용하는 모든 명령들에 대해 동일한 위치에 있다. 예를 들어, RXB 필드의 비트 36이 명령의 비트들 8-11을 확장하는데 사용되고, RXB의 비트 37이 비트들 12-15를 확장하는데 사용되며, RXB의 비트 38이 비트들 16-19를 확장하는데 사용되고, RXB의 비트 39가 비트들 32-35를 확장하는데 사용된다는 점에서, RXB 비트들은 중요한 비트(bit significant)이다. 나아가, RXB의 비트를 확장 비트로 사용하기 위한 결정은 오피코드(예, R1 대 V1)에 종속적이다. 더욱이, 불연속 지정자들은 RXB 필드들 이외의 필드들을 사용할 수 있다.
여기서, 특별히 그 문맥에서 다르게 명시되지 않는다면, 메모리, 메인 메모리, 스토리지 및 메인 스토리지는 서로 바꿔가면서 사용될 수 있다.
명령들의 예들을 포함하는, 벡터 퍼실리티(vectgor facility)에 관한 더 상세한 사항들은 이하에서 상세한 설명의 일부로서 더 제공된다.
당해 기술 분야에서 숙련된 자라면 알 수 있는 바와 같이, 본 발명의 하나 또는 그 이상의 측면들은 시스템, 방법 또는 컴퓨터 프로그램 제품으로 구현될 수 있다. 따라서, 본 발명의 하나 또는 그 이상의 측면들은 전적으로 하드웨어 실시예의 형태를 취할 수도 있고, 전적으로 소프트웨어 실시예(펌웨어(firmware), 상주 소프트웨어(resident software), 마이크로코드(micro-code) 등을 포함함)의 형태를 취할 수도 있고, 또는 소프트웨어와 하드웨어 측면들을 조합한 실시예 - 이들은 모두 본 명세서 내에서, "회로", "모듈" 또는 "시스템"으로 일컬어질 수 있음 - 의 형태를 취할 수도 있다. 더 나아가, 본 발명의 하나 또는 그 이상의 측면들은 하나 또는 그 이상의 컴퓨터 판독가능 매체(들)(computer readable medium(s)) - 이것들은 그러한 매체(들) 상에 구현되는 컴퓨터 판독가능 프로그램 코드를 가짐 - 에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
하나 또는 그 이상의 컴퓨터 판독가능 매체(들)의 어떤 조합이든지 이용될 수 있다. 컴퓨터 판독가능 매체는 컴퓨터 판독가능 스토리지 매체일 수 있다. 컴퓨터 판독가능 스토리지 매체는, 예를 들어, 전자, 자기, 광학, 전자기, 적외선 또는 반도체 시스템, 장치, 또는 디바이스, 또는 이것들의 어떤 적절한 조합일 수 있으나, 이러한 예들로 한정되는 것은 아니다. 컴퓨터 판독가능 스토리지 매체의 더 구체적인 예들(모든 예들을 총 망라하는 것은 아님)은 다음의 것들, 즉, 하나 또는 그 이상의 와이어들을 갖는 전기적인 연결, 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 억세스 메모리(random access memory, RAM), 읽기 전용 메모리(read-only-memory, ROM), 소거형 프로그램가능 읽기 전용 메모리(erasable programmable read-only memory)(EPROM 또는 플래시 메모리), 광섬유, 휴대용 컴팩트 디스크 읽기 전용 메모리(portable compact disc read-only memory)(CD-ROM), 광 스토리지 디바이스, 자기 스토리지 디바이스, 또는 이것들의 어떤 적절한 조합을 포함한다. 본 문서의 맥락에서, 컴퓨터 판독가능 스토리지 매체는, 명령 실행 시스템, 장치, 또는 디바이스에 의해 사용하기 위한 또는 명령 실행 시스템, 장치, 또는 디바이스와 함께 사용하기 위한 프로그램을 포함 또는 저장할 수 있는 어떤 실체적인 매체일 수 있다.
이제 도 12를 참조하면, 일 예에서, 컴퓨터 프로그램 제품(1200)은, 예를 들어, 하나 또는 그 이상의 비일시적(non-transitory) 컴퓨터 판독가능 스토리지 매체(1202)를 포함하여, 본 발명의 하나 또는 그 이상의 측면들을 제공하고 용이하게 하도록 그 매체 상에 컴퓨터 판독가능 프로그램 코드 수단 또는 로직(1204)을 저장한다.
컴퓨터 판독가능 매체 상에 구현된 프로그램 코드는, 무선, 유선, 광섬유 케이블, RF 등, 또는 이것들의 어떤 적절한 조합(그러나, 이러한 예들로 한정되는 것은 아님)을 포함하는 적절한 매체를 사용하여 전송될 수 있다.
본 발명의 하나 또는 그 이상의 측면들을 위한 동작들을 수행하기 위한 컴퓨터 프로그램 코드는 하나 또는 그 이상의 프로그래밍 언어들의 어떤 조합으로 작성될 수 있는데, 이러한 프로그래밍 언어들의 예들에는, 자바, 스몰토크, C++ 등과 같은 객체 지향 프로그래밍 언어, 및 "C" 프로그래밍 언어, 어셈블러, 또는 유사 프로그래밍 언어들과 같은 전통적인 절차형 프로그래밍 언어들이 포함될 수 있다. 프로그램 코드는, 독립형 소프트웨어 패키지로서, 전적으로 사용자의 컴퓨터 상에서, 사용자의 컴퓨터 상에서 부분적으로 실행될 수 있고, 사용자의 컴퓨터 상에서 부분적으로 그리고 원격 컴퓨터 상에서 부분적으로 실행될 수 있고, 또는 원격 컴퓨터 또는 서버 상에서 전적으로 실행될 수 있다. 후자의 시나리오에서, 원격 컴퓨터는 네트워크의 어떤 유형을 통해 사용자의 컴퓨터에 연결될 수 있는데, 이 네트워크의 유형에는, 근거리 통신망(LAN) 또는 광역 통신망(WAN)이 포함되며, 그 연결은 외부 컴퓨터에 대해 이뤄질 수 있다(예를 들어, 인터넷 서비스 공급자를 사용하여 인터넷을 통해).
본 발명의 하나 또는 그 이상의 측면들은 여기서는 발명의 실시예들에 따른 방법들, 장치들(시스템들) 및 컴퓨터 프로그램 제품들의 흐름도들 및/또는 블록도들을 참조하여 설명된다. 흐름도들 및/또는 블록도들의 각각의 블록, 및 흐름도들 및/또는 블록도들 내의 블록들의 조합들은 컴퓨터 프로그램 명령들에 의해 구현될 수 있다는 것을 이해하여야 할 것이다. 이들 컴퓨터 프로그램 명령들은 범용 컴퓨터, 전용 컴퓨터, 또는 다른 프로그램가능 데이터 처리 장치의 프로세서에 제공되도록 머신을 생성하여, 명령들이 컴퓨터 또는 다른 프로그램가능 데이터 처리 장치의 프로세서를 통해 실행될 때 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/작용들을 구현하기 위한 수단을 생성하도록 한다.
이들 컴퓨터 프로그램 명령들은 또한, 컴퓨터, 다른 프로그램가능 데이터 처리 장치, 또는 다른 디바이스들이 특정 방법으로 기능하도록 지시할 수 있는 컴퓨터 판독가능 매체에 저장될 수 있고, 그리하여 컴퓨터 판독가능 매체에 저장된 명령들이 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능/작용을 구현하는 명령들을 포함하는 제조 물품(article or manufacture)을 생성해 내도록 한다.
컴퓨터 프로그램 명령들은 또한, 컴퓨터, 다른 프로그램가능 데이터 처리 장치, 또는 다른 디바이스들 상에 로드되어, 일련의 동작 단계들이, 컴퓨터, 다른 프로그램가능 장치 또는 다른 디바이스들 상에서 수행되도록 하여, 컴퓨터로 구현되는 프로세스를 생성해 내도록 할 수 있고, 그리하여, 컴퓨터 또는 다른 프로그램 장치 상에서 실행되는 명령들이 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/작용들을 구현하기 위한 프로세스들을 제공하도록 한다.
도면들에서 흐름도 및 블록도들은, 본 발명의 하나 또는 그 이상의 측면들의 여러 가지 실시예들에 따른, 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍쳐, 기능, 및 동작을 도시한다. 여기서, 흐름도 또는 블록도들 내의 각각의 블록은, 모듈, 세그먼트, 또는 코드부(portion of code)를 나타낼 수 있으며, 이들 각각은 명시된 논리적 기능(들)(logical functions(s))을 구현하기 위한 하나 또는 그 이상의 실행가능 명령들을 포함한다. 몇몇 다른 구현 예들에서, 블록에 표시된 기능들은 도면들에 표시된 순서와 다른 순서로 발생할 수도 있다는 점에 또한 유의하여야 할 것이다. 예를 들어, 연속해서 보여지는 두 개의 블록들은, 결부된 기능에 따라, 사싱상, 실질적으로 동시에 실행될 수도 있고, 또는 그 블록들은 때로는 역순으로 실행될 수도 있다. 또한, 블록도들 및/또는 흐름도의 각각의 블록, 및 블록도들 및/또는 흐름도 내 블록들의 조합은, 전용 하드웨어 및 컴퓨터 명령들의 기능들 또는 작용들, 또는 조합들을 수행하는 전용 하드웨어 기반의 시스템들에 의해 구현될 수 있다.
상술한 것에 추가로, 본 발명의 하나 또는 그 이상의 측면들은, 고객 환경(customer environments)의 관리를 제공하는 서비스 공급자에 의해, 공급, 제공, 운용, 관리, 서비스 등이 될 수 있다. 예를 들어, 서비스 공급자는, 하나 또는 그 이상의 고객들을 위해 본 발명의 하나 또는 그 이상의 측면들을 수행하는 컴퓨터 코드 및/또는 컴퓨터 인프라스트럭쳐를 생성, 유지, 지원 등을 할 수 있다. 그 대신에, 서비스 공급자는, 예를 들어, 구독 및/또는 요금 승인(fee agreement) 하에서 그 고객으로부터 요금을 받을 수 있다. 추가로 또는 그에 대한 대안으로, 서비스 공급자는 하나 또는 그 이상의 제3자에게 광고 컨텐츠의 판매로부터 요금(payment)을 받을 수 있다.
본 발명의 일 측면에서, 어플리케이션은 본 발명의 하나 또는 그 이상의 측면들을 수행하기 위해 운용될 수 있다. 일 예로서, 어플리케이션의 운용은 본 발명의 하나 또는 그 이상의 측면들을 수행하도록 작동가능한 컴퓨터 인프라스트럭쳐를 제공하는 것을 포함한다.
본 발명의 추가 측면으로서, 컴퓨팅 인프라스트럭쳐는 컴퓨팅 시스템에 컴퓨터 판독가능 코드를 통합시키는 것을 포함하여 운용될 수 있고, 여기서 컴퓨팅 시스템과 결합된 코드는 본 발명의 하나 또는 그 이상의 측면들을 수행할 수 있다.
본 발명의 또 다른 추가 측면으로서, 컴퓨터 시스템에 컴퓨터 판독가능 코드를 통합시키는 것을 포함하는 컴퓨팅 인프라스트럭쳐를 통합시키기 위한 프로세스가 제공될 수 있다. 컴퓨터 시스템은 컴퓨터 판독가능 매체를 포함하며, 여기서, 컴퓨터 매체는 본 발명의 하나 또는 그 이상의 측면들을 포함한다. 컴퓨터 시스템과 결합된 코드는 본 발명의 하나 또는 그 이상의 측면들을 수행할 수 있다.
비록 위에서 여러 가지 실시예들이 설명되어 있으나, 이것들은 단지 예들일 뿐이다. 예를 들어, 다른 아키텍쳐들의 컴퓨팅 환경이 본 발명의 하나 또는 그 이상의 측면들을 편입시켜 사용할 수 있다. 나아가, 본 발명의 사상을 벗어나지 않고서, 다른 레지스터들 또는 다른 크기들의 벡터들이 사용될 수 있고, 명령들에 대한 변경들이 만들어질 수 있다. 또한, 그 프로세싱에서 다른 명령들이 사용될 수 있다. 나아가, 불연속 지정자들을 연속 지정자들로 변형하는 것과 관련된 본 발명의 하나 또는 그 이상의 측면들은 다른 맥락들에서 사용될 수 있다. 나아가, 지정자들은 레지스터들 이외의 다른 것을 위해 사용될 수 있다. 다른 변경들도 또한 가능하다.
나아가, 본 발명의 하나 또는 그 이상의 측면들로부터 컴퓨팅 환경의 다른 유형들이 혜택을 볼 수 있다. 예를 들어, 프로그램 코드를 저장 및/또는 실행하기에 적합한 데이터 처리 시스템은, 메모리 엘리먼트들에 대해 직접적으로 또는 시스템 버스를 통해 간접적으로 결합된 적어도 두 개의 프로세서들을 포함하는 것으로 사용가능하다. 예를 들어, 메모리 엘리먼트들은, 프로그램 코드의 실제 실행 동안 채용된 로컬 메모리, 벌크 스토리지, 및 적어도 일부 프로그램 코드의 임시 스토리지를 제공하는 캐시 메모리 - 이는 실행 동안 벌크 스토리지로부터 코드가 리트리브되어야 하는 횟수를 감소시키도록 함 - 를 포함할 수 있다.
입력/출력 또는 I/O 디바이스들(키보드들, 디스플레이들, 포인팅 디바이스들, DASD, 테이프, CD들, DVD들, 썸 드라이브들(thumb drives) 및 다른 메모리 매체들 등을 포함하지만, 이러한 예들로 한정되는 것은 아님)은 직접적으로 또는 I/O 컨트롤러들을 개재시켜 시스템에 결합될 수 있다. 네트워크 어댑터들이 또한 시스템에 결합되어 데이터 처리 시스템이 중간의 사설 또는 공중 네트워크들을 통해 다른 데이터 처리 시스템들 또는 원격 프린터들 또는 스토리지 디바이스들에 결합되도록 할 수 있다. 모뎀들, 케이블 모뎀들, 및 이더넷 카드들은 네트워크 어댑터들의 이용가능한 유형들의 몇몇 예들에 지나지 않는다.
도 13을 참조하면, 본 발명의 하나 또는 그 이상의 측면들을 구현하기 위한 호스트 컴퓨터 시스템(5000)의 전형적인 컴포넌트들이 도시되어 있다. 전형적인 호스트 컴퓨터(5000)는, 다른 컴퓨터들 또는 SAN들 등과 통신하기 위한 네트워크들(5010) 및 스토리지 매체 디바이스들(5011)에 대한 I/O 인터페이스들뿐만 아니라, 컴퓨터 메모리(즉, 중앙 스토리지)(5002)와 통신하는 하나 또는 그 이상의 CPU들(5001)을 포함한다. CPU(5001)는 아키텍트된 명령 세트(architected instruction set)와 아키텍트된 기능(architected functionality)을 갖는 아키텍쳐를 따른다. CPU(5001)는 프로그램 어드레스들(가상 어드레스들)을 메모리의 실제 어드레스들로 변형하기 위한 동적 어드레스 변환(dynamic address translation, DAT)(5003)을 가질 수 있다. DAT는 전형적으로, 변환들(translation)을 캐싱(caching)하기 위한 변환 색인 버퍼(translation lookaside buffer, TLB)(5007)를 포함하며, 그래서 컴퓨터 메모리(5002)의 블록에 대한 나중의 접근들에 있어서 어드레스 변환의 딜레이가 필요하지 않도록 한다. 전형적으로, 캐시(5009)는 컴퓨터 메모리(5002)와 프로세서(5001) 사이에 채용된다. 캐시(5009)는 하나 이상의 CPU 및, 큰 캐시와 각각의 CPU 사이의 더 작은, 더 빠른(더 낮은 레벨의) 캐시들에게 이용가능한 더 큰 캐시를 갖도록 계층적(hierarchical)일 수 있다. 몇몇 구현 예들에서, 명령 페칭 및 데이터 접근들을 위해 분리된 낮은 레벨의 캐시들을 제공하기 위해 더 낮은 레벨의 캐시들은 나뉘어진다. 일 실시예에서, 명령은 캐시(5009)를 통해 명령 페치 유닛(5004)에 의해 메모리(5002)로부터 페치된다. 명령은 명령 디코드 유닛(5006)에서 디코딩되고, 명령 실행 유닛 또는 유닛들(5008)로 디스패치된다(일부 실시예들에서는 다른 명령들과 함께). 전형적으로, 몇몇 실행 유닛들(5008), 예를 들어, 산술 실행 유닛(arithmetic execution unit), 부동 소수점 실행 유닛 및 분기 명령 실행 유닛이 채용된다. 명령은 실행 유닛에 의해 실행되고, 이는 필요에 따라 명령 지정 레지스터들(instruction specified registers) 또는 메모리로부터 오퍼랜드들에 접근한다. 만약 오퍼랜드가 메모리(5002)로부터 접근(로드 또는 저장)될 것이라면, 일반적으로 로드/저장 유닛(5005)이, 실행되고 있는 명령의 컨트롤 하에서 그 접근을 처리한다. 명령들은 하드웨어 회로들에서 또는 내부 마이크로코드(펌웨어)에서 또는 이것들의 조합에 의해 실행될 수 있다.
언급된 바와 같이, 컴퓨터 시스템은, 어드레싱, 보호(protection), 그리고 참조 및 변화 레코딩 뿐만 아니라, 로컬(또는 메인) 스토리지에 정보를 포함한다. 어드레싱의 몇몇 측면들은 어드레스들의 포맷, 어드레스 스페이스들의 개념, 어드레스들의 여러 가지 유형들, 그리고 한 가지 유형의 어드레스가 또 다른 유형의 어드레스로 변환되는 방식을 포함한다. 메인 스토리지의 몇몇은 영구적으로 지정된 스토리지 위치들을 포함한다. 메인 스토리지는 그 시스템에게 데이터의 직접적인 어드레싱가능 빠른-접근 스토리지(directly addressable fast-access storage)를 제공한다. 데이터와 프로그램들 둘 모두는 그것들이 처리될 수 있기 전에 메인 스토리지로 로드될 것이다(입력 디바이스들로부터).
메인 스토리지는 하나 또는 그 이상의 더 작은, 더 빠른 접근의 버퍼 스토리지들(때로는 캐시들로 일컬어짐)을 포함할 수 있다. 일반적으로 캐시는 CPU 또는 I/O 프로세서와 물리적으로 연관된다. 성능(performance)에 관한 것을 제외하고는, 물리적 구성 및 분명한 스토리지 매체의 사용의 효과들은 일반적으로 프로그램에 의해 관찰가능하지 않다.
명령들을 위해 그리고 데이터 오퍼랜드들을 위해, 분리된 캐시들이 유지될 수 있다. 캐시 내 정보는 캐시 블록 또는 캐시 라인(또는 줄여서, 라인)으로 일컬어지는 규정 경계(integral boundary) 상의 연속 바이트들(contiguous bytes) 내에 유지된다. 하나의 모델은 바이트들에서 캐시 라인의 크기를 리턴하는 EXTRACT CACHE ATTRIBUTE 명령을 제공할 수 있다. 하나의 모델은 또한 데이터 또는 명령 캐시 내에 스토리지의 프리페칭 또는 캐시로부터 데이터의 릴리싱(releasing)에 영향을 주는 PREFETCH DATA 및 PREFETCH DATA RELATIVE LONG 명령들을 제공할 수 있다.
스토리지는 비트들의 긴 수평 스트링으로 보여진다. 대부분의 동작들을 위해, 스토리지에 대한 접근들은 좌에서 우로의 시퀀스로 진행된다. 비트들의 스트링은 8 비트의 유닛들로 다시 나눠(subdivide)진다. 8 비트 유닛은 바이트로 일컬어지며, 이는 모든 정보 포맷들의 기본적인 빌딩 블록이다. 스토리지에서 각각의 바이트 위치는 고유의 음이 아닌 정수(nonnegative integer)에 의해 식별되고, 이는 그 바이트 위치의 어드레스, 또는 간단히 바이트 어드레스이다. 인접 바이트 위치들은 연속된(consecutive) 어드레스들을 갖는데, 이는 왼쪽에서 0으로 시작하고, 왼쪽에서 오른쪽 시퀀스로 진행된다. 어드레스들은 무부호 바이너리 정수들(unsigned binary integers)이고, 24, 31, 또는 64 비트이다.
정보는 스토리지와 CPU 또는 채널 서브시스템 사이에서, 한 번에 한 바이트, 또는 바이트들의 그룹으로 전송된다. 예를 들어, 만약 다르게 명시되어 있지 않으면, z/아키텍쳐에서, 스토리지에서 바이트들의 그룹은 그룹의 최좌측 바이트에 의해 어드레싱된다. 그룹에서 바이트들의 넘버는 수행될 동작에 의해 암시적으로 또는 명시적으로 특정된다. CPU 동작에 사용될 때, 바이트들의 그룹은 필드로 일컬어진다. 예를 들어, z/아키텍쳐에서 바이트들의 각각의 그룹 내에서, 비트들은 좌에서 우로의 시퀀스로 넘버링된다. z/아키텍쳐에서, 최좌측 비트들은 때로는 "고차(high-order)" 비트들로 일컬어지고 최우측 비트들은 "저차(low-order)" 비트들로 일컬어진다. 그러나, 비트 넘버들은 스토리지 어드레스들이 아니다. 단지 바이트들만이 어드레싱될 수 있다. 스토리지 내 바이트의 개별 비트들에 관해 연산(operate)하기 위해, 전체 바이트가 접근된다. 바이트 내 비트들은, (예컨대, z/아키텍쳐에서) 좌측에서 우측으로 0 내지 7로 넘버링된다. 어드레스에서 비트들은 24-비트 어드레스들에 대해서는 8-31 또는 40-63으로 넘버링되고, 또는 31 비트 어드레스들에 대해서는 1-31 또는 33-63으로 넘버링될 수 있고; 그것들은 64-비트 어드레스들에 대해 0-63으로 넘버링될 수 있다. 다수의 바이트들의 다른 어떤 픽스된 길이의 포맷 내에서, 그 포맷을 완성하는 비트들은 0에서부터 시작하여 연속적으로 넘버링된다. 에러 검출의 목적으로, 그리고 바람직하게는 교정(correction)을 위해, 하나 또는 그 이상의 체크 비트들이 각각의 바이트와 함께 또는 바이트들의 그룹과 함께 전송될 수 있다. 이러한 체크 비트들은 기계(machine)로 자동적으로 생성되고, 프로그램에 의해 직접적으로 컨트롤될 수 없다. 스토리지 용량들(storage capacities)은 바이트들의 수로 표현된다. 스토리지-오퍼랜드 필드의 길이가 명령의 오퍼레이션 코드(operation code)에 의해 암시될 때, 그 필드는 픽스된 길이를 갖는 것으로 일컬어지고, 이는 1, 2, 4, 8 또는 16 바이트들일 수 있다. 몇몇 명령들에 대해서는 더 큰 필드들이 암시될 수 있다. 스토리지-오퍼랜드 필드의 길이가 암시되지 않고 명시적으로 언급될 때, 그 필드는 가변 길이를 갖는 것으로 일컬어진다. 가변 길이 오퍼랜드들은 1 바이트의 증분들(increments)에 의해 길이가 가변될 수 있다(또는 몇몇 명령들로, 2 바이트의 배수들로 또는 다른 배수들로). 정보가 스토리지에 놓여질 때, 비록 스토리지로의 물리적 경로의 폭이 저장되고 있는 필드의 길이보다 더 클 수 있더라도, 그 지정된 필드에 포함되는 단지 그들 바이트 위치들의 내용만이 대체된다.
정보의 특정 유닛들은 스토리지에서 규정 경계(integral boundary) 상에 있을 것이다. 경계는, 그것의 스토리지 어드레스가 바이트들에서 유닛의 길이의 배수일 경우, 정보의 유닛에 대하여 인테그럴(integral)로 일컬어진다. 규정 경계 상에서 2,4,8, 및 16 바이트들의 필드들에 대해 특별한 명칭들이 주어진다. 하프워드(halfword)는 2-바이트 경계 상에서 두 개의 연속되는 바이트들의 그룹이며, 명령들의 기본적인 빌딩 블록이다. 워드(word)는 4-바이트 경계 상에서 4 개의 연속되는 바이트들의 그룹이다. 더블워드는 8-바이트 경계 상에서 8 개의 연속되는 바이트들의 그룹이다. 쿼드워드(quadword)는 16-바이트 경계 상에서 16 개의 연속되는 바이트들의 그룹이다. 스토리지가 하프워드들, 워드들, 더블워드들, 및 쿼드워드를 지정할 때, 어드레스의 바이너리 표현은 각각, 1, 2, 3, 또는 4 개의 최우측 0 비트들을 포함한다. 명령들은 2-바이트 규정 경계들 상에 있을 것이다. 대부분의 명령들의 스토리지 오퍼랜드들은 경계-정렬(boundary-alignment) 요건들을 갖지 않는다.
명령들 및 데이터 오퍼랜드들을 위한 분리된 캐시들을 구현하는 디바이스들 상에서, 그 저장(store)이 후속적으로 페치되는 명령들을 변경하는지 여부에 관계없이, 만약 프로그램이 캐시 라인 - 이 라인으로부터 명령들은 후속적으로 페치됨 - 내에 저장한다면, 큰(significant) 딜레이를 겪게 될 수 있다.
일 실시예에서, 발명은 소프트웨어(때로는 라이센싱된 내부 코드, 펌웨어, 마이크로코드, 밀리코드, 피코코드 등)에 의해 실행될 수 있고, 이들 중 어느 것이든지 본 발명의 하나 또는 그 이상의 측면들과 일치할 것이다). 도 13을 참조하면, 본 발명의 하나 또는 그 이상의 측면들을 구현하는 소프트웨어 프로그램 코드는, CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브와 같은 롱-텀 스토리지 매체 디바이스들(5011)로부터 호스트 시스템(5000)의 프로세서(5001)에 의해 접근될 수 있다. 소프트웨어 프로그램 코드는, 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템과 함께 사용하기 위한 공지된 여러 가지 매체들 중 어떤 것에서 구현될 수 있다. 코드는 이러한 매체들 상에 배포(distribute)될 수 있고, 또는 다른 컴퓨터 시스템들의 사용자들에 의한 사용을 위해 네트워크(5010)를 통해 컴퓨터 메모리(5002) 또는 하나의 컴퓨터 시스템의 스토리지로부터 그러한 다른 시스템들로 사용자들에게 배포될 수 있다.
소프트웨어 프로그램 코드는 여러 가지 컴퓨터 컴포넌트들 및 하나 또는 그 이상의 응용 프로그램들의 기능(function) 및 상호작용(interaction)을 컨트롤하는 운영체제를 포함한다. 프로그램 코드는 스토리지 매체 디바이스(5011)로부터 비교적 고속의 컴퓨터 스토리지(5002) - 여기에서 프로그램 코드가 프로세서(5001)에 의한 처리를 위해 이용가능함 - 로 노멀하게 페이지(page) 된다. 메모리 내 소프트웨어 프로그램 코드를, 물리적 매체 상에, 구현하고, 및/또는 네트워크들을 통해 소프트웨어 코드를 배포하기 위한 테크닉들 및 방법들은 잘 알려져 있으며, 여기서는 더 이상 언급되지 않을 것이다. 프로그램 코드는, 생성되어 실체적 매체(전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크(CDs), DVDs, 자기 테이프 등등을 포함하지만, 이러한 예들로 한정되는 것은 아님) 상에 저장될 때, 흔히 "컴퓨터 프로그램 제품"으로 일컬어진다. 컴퓨터 프로그램 제품 매체는 일반적으로 처리 회로에 의한 실행을 위해 바람직하게는 컴퓨터 시스템에서 처리 회로에 의해 판독가능하다.
도 14는 본 발명의 하나 또는 그 이상의 측면들이 실행되는 전형적인 워크스테이션 또는 서버 하드웨어 시스템을 나타낸다. 도 14의 시스템(5020)은, 선택적인 주변 디바이스들을 포함하여, 개인용 컴퓨터, 워크스테이션 또는 서버와 같은 전형적인 기본 컴퓨터 시스템(5021)을 포함한다. 기본 컴퓨터 시스템(5021)은 하나 또는 그 이상의 프로세서들(5026)과, 버스(bus) - 이것들은 공지된 기술들에 따라 프로세서(들)(5026)과 시스템(5021)의 다른 컴포넌트들을 연결하고 그들 사이에서 통신을 가능하게 하기 위해 채용됨 - 를 포함한다. 버스는 프로세서(5026)를 메모리(5025) 및 롱텀 스토리지(5027) - 이는, 예컨대, 하드 드라이브(예컨대, 자기 매체, CD, DVD 및 플래시 메모리 중 어떤 것을 포함함) 또는 테이프 드라이브를 포함할 수 있음 - 에 연결시킨다. 시스템(5021)은 또한 사용자 인터페이스 어댑터를 포함하는데, 이 사용자 인터페이스 어댑터는, 버스를 통해 마이크로프로세서(5026)를, 예를 들어, 키보드(5024), 마우스(5023), 프린터/스캐너(5030) 및/또는 다른 인터페이스 디바이스들 - 예컨대, 터치 감지 스크린(touch sentive screen), 디지타이즈드 엔트리 패드(digitized entry pad) 등과 같은 어떤 사용자 인터페이스 디바이스일 수 있음 - 과 같은 하나 또는 그 이상의 인터페이스 디바이스들에 연결시킬 수 있다. 버스는 또한, LCD 스크린 또는 모니터와 같은 디스플레이 디바이스(5022)를 디스플레이 어댑터를 통해 마이크로프로세서(5026)에 연결시킨다.
시스템(5021)은 네트워크(5029)와 통신할 수 있는 네트워크 어댑터(5028)를 통해 다른 컴퓨터들 또는 컴퓨터들의 네트워크들과 통신할 수 있다. 네트워크 어댑터들의 예는, 통신 채널들(communications channels), 토큰 링(token ring), 이더넷(Ethernet) 또는 모뎀들(modems)이다. 이와 다르게는, 시스템(5021)은, CDPD(셀룰러 디지털 패킷 데이터(cellular digital packet data)) 카드와 같은 무선 인터페이스를 사용하여 통신할 수 있다. 시스템(5021)은 근거리 통신망(LAN), 광역 통신망(WAN)에서 그러한 다른 컴퓨터들과 연관될 수 있고, 또는 시스템(5021)은 또 다른 컴퓨터를 갖는 클라이언트/서버 어레인지먼트(arrangement)에서의 클라이언트일 수 있다. 적절한 통신 하드웨어 및 소프트웨어뿐만 아니라, 이들 구성들 모두는 당해 기술 분야에서 알려져 있다.
도 15는 본 발명의 하나 또는 그 이상의 측면들이 실시될 수 있는 데이터 처리 네트워크(5040)를 도시한다. 데이터 처리 네트워크(5040)은, 무선 네트워크 및 유선 네트워크와 같은 복수의 개별 네트워크들을 포함할 수 있으며, 이들 각각은 복수의 개별 워크스테이션들(5041, 5042, 5043, 5044)을 포함할 수 있다. 또한, 당해 기술 분야에서 숙련된 자들이라면 알 수 있는 바와 같이, 하나 또는 그 이상의 LAN(LANs)이 포함될 수 있는데, 여기서 LAN은 호스트 프로세서에 결합된 복수의 지능 워크스테이션들(intelligent workstations)을 포함할 수 있다.
계속해서 도 15를 참조하면, 네트워크들은 또한, 게이트웨이 컴퓨터(클라이언트 서버(5046) 또는 어플리케이션 서버(데이터 저장소에 접근할 수 있고, 또한 워크스테이션(5045)으로부터 직접적으로 접근될 수도 있는 원격 서버(5048))와 같은, 메인프레임 컴퓨터들 또는 서버들을 포함할 수 있다. 게이트웨이 컴퓨터(5046)는 각각의 개별 네트워크 내에서 엔트리의 포인트로서의 역할을 수행한다. 게이트웨이는 하나의 네트워킹 프로토콜을 또 다른 하나에 연결시킬 때 필요하다. 바람직하게는, 게이트웨이(5046)는 통신 링크에 의해 또 다른 네트워크(예를 들어, 인터넷(5047)에 결합될 수 있다. 게이트웨이(5046)는 또한 통신 링크를 사용하여, 하나 또는 그 이상의 워크스테이션들(5041, 5042, 5043, 5044)에 직접 결합될 수도 있다. 게이트웨이 컴퓨터는 인터내셔널 비지네스 머신즈 코포레이션으로부터 이용가능한 IBM eServerTM System z 서버를 이용하여 구현될 수 있다.
도 14 및 도 15를 함께 참조하면, 본 발명의 하나 또는 그 이상의 측면들을 구현할 수 있는 소프트웨어 프로그래밍 코드는, CD-ROM 드라이브 또는 하드 드라이브와 같은 롱텀 스토리지 매체(5027)로부터 시스템(5020)의 프로세서(5026)에 의해 접근될 수 있다. 소프트웨어 프로그래밍 코드는, 예를 들어, 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템에서 사용하기 위한 다양한 공지의 매체 중 어느 것에서나 구현될 수 있다. 코드는, 이러한 매체 상에 배포될 수 있고, 또는 다른 컴퓨터 시스템들의 사용자들에 의한 사용을 위해 네트워크를 통해 하나의 컴퓨터 시스템의 메모리 또는 스토리지로부터 그러한 다른 시스템들로 사용자들(5050, 5051)에게 배포될 수 있다.
이와는 다르게, 프로그래밍 코드는 메모리(5025)에 구현될 수 있고, 프로세서 버스를 사용하여 프로세서(5026)에 의해 접근될 수 있다. 이러한 프로그래밍 코드는 여러 가지 컴퓨터 컴포넌트들 및 하나 또는 그 이상의 어플리케이션 프로그램들(5032)의 기능 및 상호작용을 컨트롤하는 운영체제를 포함한다. 프로그램 코드는 스토리지 매체(5027)로부터 고속 메모리(5025) - 여기에서 프로그램 코드가 프로세서(5026)에 의한 처리를 위해 이용가능함 - 로 노멀하게 페이지(page) 된다. 물리적 매체 상에, 메모리 내 소프트웨어 프로그래밍 코드를 구현하고, 및/또는 네트워크를 통해 소프트웨어 코드를 배포하기 위한 테크닉들 및 방법들은 잘 알려져 있고 여기서는 더 이상 언급되지 않을 것이다. 프로그램 코드는, 생성되어 실체적 매체(전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크들(CDs), DVDs, 자기 테이프 등을 포함하나 이러한 예들로 한정되는 것은 아님) 상에 저장될 때, 흔히 "컴퓨터 프로그램 제품(computer program product)"으로 일컬어진다. 컴퓨터 프로그램 제품 매체는 일반적으로, 처리 회로에 의한 실행을 위해 바람직하게는 컴퓨터 시스템에서 처리 회로에 의해 판독가능하다.
프로세서에게 가장 쉽게 이용가능한 캐시(노멀하게는 프로세서의 다른 캐시들보다 더 빠르고 더 작음)는 가장 낮은(lowest)(L1 또는 레벨 1의) 캐시이고, 메인 스토어(메인 메모리)는 가장 높은 레벨의 캐시(만약 3 레벨이 있다면, L3)이다. 가장 낮은 레벨의 캐시는 흔히, 실행될 기계 명령어들(machine instructions)을 보유하는 명령 캐시(I-캐시)와 데이터 오퍼랜드들을 보유하는 데이터 캐시(D-캐시)로 나눠진다.
도 16을 참조하면, 프로세서(5026)에 대한 하나의 프로세서 실시예가 도시되어 있다. 일반적으로 캐시(5053)의 하나 또는 그 이상의 레벨들은 프로세서 성능을 향상시키기 위해 버퍼 메모리 블록들에 채용된다. 캐시(5053)는 사용될 가능성이 있는 메모리 데이터의 캐시 라인들을 보유하는 고속 버퍼이다. 일반적인 캐시 라인들은 64, 128 또는 256 바이트의 메모리 데이터이다. 분리된 캐시들은 흔히 데이터를 캐싱(caching)하기 위해서라기보다 명령들을 캐싱하기 위해 채용된다. 캐시 일관성(cache coherence)(메모리 및 캐시들에서 라인들의 사본들(copies)의 동기화(synchronization))는 당해 기술 분야에서 다양한 "스누프(snoop)" 알고리즘들로 흔히 제공된다. 프로세서 시스템의 메인 메모리 스토리지(5025)는 흔히 캐시로 일컬어진다. 4 레벨의 캐시(5053)를 갖는 프로세서 시스템에서, 메인 스토리지(5025)는 일반적으로 더 빠르고 컴퓨터 시스템에게 이용가능한 비휘발성 스토리지(DASD, 테이프 등)의 일부분을 단지 보유하므로, 때로는 레벨 5(L5)로 일컬어진다. 메인 스토리지(5025)는 운영체제에 의해 메인 스토리지(5025) 내로 또는 밖으로 페이지(page)되는 데이터의 페이지들을 "캐시" 한다.
프로그램 카운터(명령 카운터)(5061)는 실행될 현재 명령의 어드레스를 추적한다. z/아키텍쳐 프로세서에서 프로그램 카운터는 64 비트이고 이전의 어드레싱 리미트들(addressing limits)을 지원하기 위해 31 또는 24 비트로 잘려(truncate)질 수 있다. 프로그램 카운터는 일반적으로 컴퓨터의 PSW(program status word)(프로그램 상태어)에 구현되어, 그것이 컨텍스트 스위칭 동안 계속되도록 한다. 이렇게 하여, 프로그램 카운터 값을 갖는, 진행 중인 프로그램은, 예를 들어, 운영체제에 의해 인터럽트될 수 있다(프로그램 환경으로부터 운영체제 환경으로의 컨텍스트 스위치). 프로그램이 액티브가 아닌 동안에는, 프로그램의 PSW가 프로그램 카운터를 유지하고, 운영체제가 실행 중인 동안에는, 운영체제의 프로그램 카운터(PSW에서의)가 사용된다. 일반적으로, 프로그램 카운터는 현재 명령의 바이트들의 수와 동일한 량으로 증가된다. RISC(Reduced Instruction Set Computing) 명령들은 일반적으로 픽스된 길이인 반면, CISC(Complex Instruction Set Computing) 명령들은 일반적으로 가변 길이이다. IBM z/아키텍쳐의 명령들은 2, 4 또는 6 바이트의 길이를 갖는 CISC 명령들이다. 프로그램 카운터(5061)는, 예를 들어, 컨텍스트 스위치 동작(context switch operation) 또는 분기 명령(branch instruction)의 분기 채택 동작(branch taken operation)에 의해 수정(modify)된다. 컨텍스트 스위치 동작에서, 현재의 프로그램 카운터 값은, 실행되고 있는 프로그램에 관한 다른 상태 정보(예컨대, 조건 코드들(condition codes)과 같은 것)와 함께 프로그램 상태어(program status word)에 저장되고, 실행될 새로운 프로그램 모듈의 명령을 가리키는 새로운 프로그램 카운터 값이 로드된다. 분기 채택 동작(branch taken operation)은, 그 프로그램이 프로그램 카운터(5061) 내로 분기 명령의 결과를 로드함으로써 결정할 수 있도록 또는 그 프로그램 내에서 루프(loop)를 수행할 수 있도록 하기 위해, 수행된다.
일반적으로, 프로세서(5026)를 대신하여 명령들을 페치하기 위해 명령 페치 유닛(5055)이 채용된다. 페치 유닛은 "다음의 순차 명령들(next sequential instructions)", 분기 채택 명령들의 타겟 명령들, 또는 컨텍스트 스위치 이후 프로그램의 첫 번째 명령들을 페치한다. 최신의 명령 페치 유닛들은, 프리페치된 명령들이 사용될 수 있다는 가능성에 기초하여 추측에 근거하여(speculatively) 명령들을 프리페치하는 프리페치 테크닉들(prefetch techniques)을 흔히 채용한다. 예를 들어, 페치 유닛은, 그 다음의 순차 명령(next sequential instruction)을 포함하는 명령의 16 바이트, 및 그 이후의 순차 명령들(further sequential instructions)의 추가 바이트들을 페치할 수 있다.
그런 다음 페치된 명령들은 프로세서(5026)에 의해 실행된다. 일 실시예에서, 페치된 명령(들)은 페치 유닛의 디스패치 유닛(5056)으로 패스된다. 디스패치 유닛은 명령(들)을 디코딩하고 그 디코딩된 명령(들)에 관한 정보를 적절한 유닛들(5057, 5058, 5060)로 전달한다. 실행 유닛(5057)은 일반적으로, 명령 페치 유닛(5055)으로부터 디코딩된 산술 명령들(arithmetic instructions)에 관한 정보를 수신하고, 그 명령의 오피코드에 따라 오퍼랜드들 상에서 산술 연산들(arithmetic operations)을 수행할 것이다. 오퍼랜드들은, 바람직하게는, 메모리(5025), 아키텍트된 레지스터들(5059)로부터, 또는 실행 중인 명령의 이미디어트 필드(immediate field)로부터, 실행 유닛(5057)으로 제공된다. 실행의 결과들은, 저장될 때, 메모리(5025), 레지스터들(5059)에, 또는 다른 기계 하드웨어(예컨대, 컨트롤 레지스터들, PSW 레지스터들 등)에 저장된다.
프로세서(5026)는 일반적으로, 명령의 기능을 실행하기 위한 하나 또는 그 이상의 유닛들(5057, 5058, 5060)을 갖는다. 도 17a를 참조하면, 실행 유닛(5057)은 아키텍트된 범용 레지스터들(general registers)(5059), 디코드/디스패치 유닛(5056), 로드/저장 유닛(5060), 및 다른 프로세서 유닛들(5065)과 인터페이싱 로직(5071)을 통해 통신할 수 있다. 실행 유닛(5057)은 산술 로직 유닛(arithmetic logic unit, ALU)(5066)이 연산할 정보를 보유하기 위해 몇몇 레지스터 회로들(5067, 5068, 5069)을 채용할 수 있다. ALU는, 덧셈(add), 뺄셈(subtract), 곱셈(multiply) 및 나눗셈(divide)과 같은 산술 연산들(arithmetic operations) 뿐만 아니라, 논리곱(and), 논리합(or) 및 배타 논리합(exclusive-or, XOR)과 같은 논리 함수(logical function), 로테이트(rotate) 및 시프트(shift)를 수행한다. 바람직하게는, ALU는 의존적 디자인(design dependent)인 특수한 동작들(specialized operations)을 지원한다. 다른 회로들은, 예를 들어, 조건 코드들(condition codes) 및 복구 지원 로직(recovery support logic)을 포함하는 다른 아키텍트된 퍼실리티들(facilities)(5072)을 제공할 수 있다. 일반적으로, ALU 연산의 결과는 그 결과를 다양한 다른 처리 펑션들(processing functions)에게 전달할 수 있는 출력 레지스터 회로(5070)에 유지된다. 프로세서 유닛들의 여러 가지 처리 방식(arrangements)이 있으며, 상세한 설명은 단지 일 실시예에 관한 전형적인 이해를 제공하도록 의도되었다.
예를 들어, ADD 명령은 산술 및 논리 기능(functionality)을 갖는 실행 유닛(5057)에서 실행되는 반면, 예를 들어, 부동 소수점 명령(floating point instruction)은 특수한 부동 소수점 기능(floating point capability)을 갖는 부동 소수점 실행(floating point execution)에서 실행될 것이다. 바람직하게는, 실행 유닛은, 오퍼랜드들에 관한 오피코드 정의 펑션(opcode defined function)을 수행함으로써 명령에 의해 식별된 오퍼랜드들에 관해 동작(operate)한다. 예를 들어, ADD 명령은, 명령의 레지스터 필드들에 의해 식별된 두 개의 레지스터들(5059)에서 발견되는 오퍼랜드들에 관해 실행 유닛(5057)에 의해 실행될 수 있다.
실행 유닛(5057)은 두 개의 오퍼랜드들에 관해 산술 덧셈(arithmetic addition)을 수행하고 그 결과를 제3 오퍼랜드 - 이 제3 오퍼랜드는 제3 레지스터 또는 두 개의 소스 레지스터들 중 하나일 수 있음 - 에 저장한다. 바람직하게는, 실행 유닛은 산술 로직 유닛(Arithmetic Logic Unit, ALU)(5066) - 이는 덧셈, 뺄셈, 곱셈, 나눗셈 중 어떤 것을 포함하는 여러 가지 대수 함수들(algebraic functions) 뿐만 아니라, 시프트, 로테이트, 논리곱, 논리합 및 배타 논리합과 같은 여러 가지 논리 함수들을 수행할 수 있음 - 을 이용한다. 몇몇 ALUs(5066)은 스칼라 연산들(SCALAR OPERATIONS)을 위해 설계되었고, 몇몇은 부동 소수점(floating point)을 위해 설계되었다. 데이터는, 아키텍쳐에 따라, 빅 엔디언(Big Endian)(여기서 최하위 바이트(the least significant byte)는 가장 높은 바이트 어드레스임) 또는 리틀 엔디언(Little Endian)(여기서 최하위 바이트는 가장 낮은 바이트 어드레스임)일 수 있다. IBM z/아키텍쳐는 빅 엔디언이다. 부호화된 필드들(Signed fields)은, 아키텍쳐에 따라, 부호(sign)와 크기(magnitude), 1의 보수 또는 2의 보수일 수 있다. 2의 보수에서 음의 값 또는 양의 값은 단지 ALU 내에서 덧셈(addition) 만을 필요로 하므로, ALU는 뺄셈 기능(substract capability)을 설계할 필요가 없다는 점에서, 2의 보수가 유리하다. 숫자들은 흔히 약칭으로(in shorthand) 기술되는데, 12 비트 필드는 4,096 바이트 블록의 어드레스를 정의하고, 예를 들어, 흔히 Kbyte(킬로바이트)로 기술된다.
도 17b를 참조하면, 분기 명령을 실행하기 위한 분기 명령 정보는 일반적으로, 다른 조건부 연산들(conditional operations)이 완료되기 전에 그 분기의 결과를 예측하기 위해 분기 이력표(branch history table)(5082)와 같은 분기 예측 알고리즘을 흔히 채용하는 분기 유닛(5058)으로 보내진다. 현재의 분기 명령의 타겟은, 조건부 연산들이 완료되기 전에 페치되고 추측에 근거하여 실행될 것이다. 조건부 연산들이 완료될 때, 추측에 근거하여 실행된 분기 명령들은 조건부 연산의 조건들 및 추측에 근거한 결과에 기초하여 완료 또는 폐기(discard) 된다. 만약 조건 코드들이 분기 명령의 분기 요건을 충족시킨다면, 일반적인 분기 명령은 그 조건 코드들을 테스트하고 타겟 어드레스로 분기할 수 있고, 타겟 어드레스는, 예를 들어, 레지스터 필드들 또는 명령의 이미디어트 필드에서 발견되는 것들(ones)을 포함하는 몇몇 숫자들에 기초하여 계산될 수 있다. 분기 유닛(5058)은 복수의 입력 레지스터 회로들(5075, 5076, 5077) 및 출력 레지스터 회로(5080)를 갖는 ALU(5074)를 채용할 수 있다. 분기 유닛(5058)은, 예를 들어, 범용 레지스터들(5059), 디코드 디스패치 유닛(5056) 또는 다른 회로들(5073)과 통신할 수 있다.
명령들의 그룹의 실행은, 예를 들어, 운영체제에 의해 시작된 컨텍스트 스위치(context switch), 컨텍스트 스위치를 초래하는 프로그램 예외(program exception) 또는 에러, 컨텍스트 스위치를 초래하는 I/O 인터럽션 신호 또는 복수의 프로그램들(멀티-쓰레디드 환경(multi-threaded environment) 에서의)의 멀티-쓰레딩 액티비티(multi-threading activity)를 포함하는 여러 가지 이유들로 인해 인터럽트될 수 있다. 바람직하게는, 컨텍스트 스위치 액션은 현재 실행 중인 프로그램에 관한 상태 정보를 저장하고, 그런 다음 호출되고 있는 또 다른 프로그램에 관한 상태 정보를 로드한다. 상태 정보는, 예를 들어, 하드웨어 레지스터들에 또는 메모리에 저장될 수 있다. 바람직하게는, 상태 정보는 실행될 다음의 명령을 가리키는 프로그램 카운터 값, 조건 코드들, 메모리 변환 정보(memory translation information) 또는 아키텍트된 레지스터 컨텍스트를 포함한다. 컨텍스트 스위치 액티비티는, 하드웨어 회로들, 어플리케이션 프로그램들, 운영체제 프로그램들 또는 펌웨어 코드(마이크로코드, 피코-코드 또는 라이센스된 내부 코드(licensed internal code, LIC)) 단독으로 또는 조합으로 실행될 수 있다.
프로세서는 명령 정의 메쏘드들(instruction defined methods)에 따라 오퍼랜드들에 접근한다. 명령은 그 명령의 일부의 값을 사용하여 이미디어트 오퍼랜드를 제공할 수 있고, 범용 레지스터들 또는 특수 레지스터들(예컨대, 부동 소수점 레지스터들)을 명확하게 가리키는 하나 또는 그 이상의 레지스터 필드들을 제공할 수 있다. 명령은 오피코드 필드에 의해 식별된 암시된 레지스터들(implied registers)을 오퍼랜드들로서 이용할 수 있다. 명령은 오퍼랜드들을 위한 메모리 위치들을 이용할 수 있다. 오퍼랜드의 메모리 위치는, z/아키텍쳐 장 변위 퍼실리티(long displacement facility)에 의해 예시되는 바와 같이, 레지스터, 이미디어트 필드, 또는 레지스트들과 이미디어트 필드의 조합에 의해 제공될 수 있다. z/아키텍쳐 장 변위 퍼실리티에서, 명령은 기본 레지스터(base register), 인덱스 레지스터 및 이미디어트 필드(변위 필드) - 이것들은, 예를 들어, 메모리에서 오퍼랜드의 어드레스를 제공하기 위해 함께 더해짐 - 를 정의한다. 여기서, 위치는, 만약 다르게 표시되지 않는다면, 메인 메모리(메인 스토리지) 내의 위치를 암시한다.
도 17c를 참조하면, 프로세서는 로드/저장 유닛(5060)을 사용하여 스토리지에 접근한다. 로드/저장 유닛(5060)은 메모리(5053)에서 타겟 오퍼랜드의 어드레스를 획득하고 레지스터(5059) 또는 또 다른 메모리(5053) 위치에서 오퍼랜드를 로드함으로써 로드 동작(load operation)을 수행할 수 있고, 또는 메모리(5053)에서 타겟 오퍼랜드의 어드레스를 획득하고, 레지스터(5059), 또는 메모리(5053)에서 타겟 오퍼랜드 내 또 다른 메모리(5053) 위치로부터 획득된 데이터를 저장함으로써 저장 동작을 수행할 수 있다. 로드/저장 유닛(5060)은 추측에 근거할 수 있고, 명령 시퀀스에 비해 순서가 다른 시퀀스로 메모리에 접근할 수 있지만, 로드/저장 유닛(5060)은 명령들이 순서대로 실행된 프로그램들에 대한 외관(appearance)을 유지할 것이다. 로드/저장 유닛(5060)은, 범용 레지스터들(5059), 디코드/디스패치 유닛(5056), 캐시/메모리 인터페이스(5053) 또는 다른 엘리먼트들(5083)과 통신할 수 있고, 스토리지 어드레스를 계산하고 순서대로 동작들을 계속하기 위한 파이프라인 시퀀싱(pipeline sequencing)을 제공하기 위해, 다양한 레지스터 회로들, ALU들(5085) 및 컨트롤 로직(5090)을 포함한다. 몇몇 동작들은 순서가 바뀔 수 있지만, 로드/저장 유닛은, 당해 기술 분야에서 잘 알려진 바와 같이, 순서대로 수행된 것처럼 프로그램에 대해 보이도록, 순서 바꿈 동작들(out of order operations)을 수행하는 기능을 제공한다.
바람직하게는, 어플리케이션 프로그램이 "보는(sees)" 어드레스들은 흔히 가상 어드레스들로 일컬어진다. 가상 어드레스들은 때로는 "논리적 어드레스들" 및 "유효 어드레스들"로 일컬어진다. 이들 가상 어드레스들은, 그것들이 단순히 오프셋 값으로 가상 어드레스를 프리픽스(prefix)하고, 하나 또는 그 이상의 변환표들(translation tables) - 이 변환표들은 바람직하게는, 적어도 세그먼트 표 및 페이지 표를 단독으로 또는 조합으로 포함하고, 바람직하게는, 상기 세그먼트 표는 그 페이지 표를 가리키는 엔트리를 가짐 - 을 통해 가상 어드레스를 변환하는 것을 포함(그러나, 이러한 것들로 한정되는 것은 아님)하는, 동적 어드레스 변환(dynamic address translation, DAT) 기술들 중 하나에 의해 물리적 메모리 위치로 리다이렉트(redirect)된다는 점에서, 이들 가상 어드레스들은 가상(virtual)이다. z/아키텍쳐에서, 영역 1 표(region first table), 영역 2 표(region second table), 영역 3 표(regiion third table), 세그먼트 표 및 선택적 페이지 표(optional page table)를 포함하는, 변환의 계층(hierarchy of translation)이 제공된다. 어드레스 변환(address translation)의 성능(performance)은, 가상 어드레스를 연관된 물리적 메모리 위치에 매핑하는 엔트리들을 포함하는 변환 색인 버퍼(translstion lookaside buffer, TLB)를 이용함으로써 향상된다. 엔트리들은, DAT가 변환표들을 사용하여 가상 어드레스를 변환할 때 생성된다. 그런 다음, 가상 어드레스의 이후의 사용은 느린 순차 변환표 억세스들(slow sequential translation table accesses) 보다 오히려 빠른 TLB의 엔트리를 이용할 수 있다. TLB 컨텐트는 LRU(최소 최근 사용(Least Recently used))을 포함하는 여러 가지 대체 알고리즘들에 의해 관리될 수 있다.
프로세서가 멀티-프로세서 시스템의 프로세스인 경우, 각각의 프로세서는, I/O, 캐시들, TLB들 및 메모리와 같은 공유된 리소스들이 일관성(coherency)를 위해 인터락(interlock)되게 유지할 책임을 갖는다. 일반적으로, 캐시 일관성을 유지함에 있어서, "스누프(snoop)" 기술들이 이용될 것이다. 스누프 환경에서, 각각의 캐시 라인은, 공유를 용이하게 하기 위해, 공유된 상태, 독점 상태(exclusive state), 변경된 상태, 무효 상태 등 중 어느 하나로 있도록 표시될 수 있다.
I/O 유닛들(도 16의 5054)은, 예를 들어, 테이프, 디스크, 프린터들, 디스플레이들, 및 네트워크들을 포함하는 주변 디바이스들에 연결하기 위한 수단을 프로세서에게 제공한다. I/O 유닛들은 흔히 소프트웨어 드라이버들에 의해 컴퓨터 프로그램에 제공된다. IBM®로부터의 시스템 z(System z)와 같은 메인프레임들에서, 채널 어댑터들 및 오픈 시스템 어댑터들은 메인프레임의 I/O 유닛들이며, 이 유닛들은 운영체제와 주변 디바이스들 사이의 통신들을 제공한다.
나아가, 컴퓨팅 환경들의 다른 유형들이 본 발명의 하나 또는 그 이상의 측면들로부터 혜택을 받을 수 있다. 예를 들어, 환경은 에뮬레이터(예컨대, 소프트웨어 또는 다른 에뮬레이션 메커니즘들)를 포함할 수 있고, 여기서 특정 아키텍쳐(예컨대, 명령 실행, 아키텍트된 기능들(어드레스 변환과 같은 것), 아키텍트된 레지스터들을 포함함) 또는 그것의 부분집합(subset)이 에뮬레이트된다(예컨대, 프로세서 및 메모리를 갖는 네이티브 컴퓨터 시스템 상에서). 이러한 환경에서, 비록 에뮬레이터를 실행하는 컴퓨터가, 에뮬레이트되고 있는 기능들(capabilities)과 다른 아키텍쳐를 가질 수 있더라도, 에뮬레이터의 하나 또는 그 이상의 에뮬레이션 기능들(emulation functions)은 본 발명의 하나 또는 그 이상의 측면들을 구현할 수 있다. 일 예로서, 에뮬레이션 모드에서, 에뮬레이트되고 있는 특정 명령 또는 동작이 디코딩되고, 개별 명령 또는 동작을 구현하기 위해 적절한 에뮬레이션 기능이 구축된다.
에뮬레이션 환경에서, 예를 들어, 호스트 컴퓨터는, 명령들 및 데이터를 저장하기 위한 메모리; 메모리로부터 명령들을 페치하고 선택적으로는 그 페치된 명령을 위해 로컬 버퍼링(local buffering)을 제공하기 위한, 명령 페치 유닛; 그 페치된 명령들을 수신하고 페치된 명령들의 유형을 결정하기 위한 명령 디코드 유닛(instruction decode unit); 및 명령들을 실행하기 위한 명령 실행 유닛을 포함한다. 실행(execution)은 메모리로부터 레지스터 내로 데이터를 로드하는 것; 레지스터로부터 메모리로 다시 데이터를 저장하는 것; 또는 디코드 유닛에 의해 결정된 바와 같이 산술 또는 논리 연산의 몇몇 유형을 수행하는 것을 포함할 수 있다. 일 예에서, 각각의 유닛은 소프트웨어로 구현된다. 예를 들어, 그 유닛들에 의해 수행되고 있는 동작들은 에뮬레이터 소프트웨어 내에서 하나 또는 그 이상의 서브루틴들로 구현된다.
더 구체적으로는, 메인프레임에서, 아키텍트된 기계 명령어들(machine instructions)은, 프로그래머들, 오늘날 보통 "C" 프로그래머들에 의해, 흔히 컴파일러 어플리케이션을 통해 사용된다. 스토리지 매체에 저장된 이들 명령들은, 원래(natively), z/아키텍쳐 IBM® 서버에서, 또는 다르게는 다른 아키텍쳐들을 실행하는 머신들에서 실행될 수 있다. 그것들은 기존의 또는 장래의 IBM® 메인프레임 서버들에서 또는 IBM®의 다른 머신들(예컨대, 파워 시스템즈 서버들(Power Systems servers) 또는 시스템 x® 서버들)에서 에뮬레이트될 수 있다. 그것들은 IBM®, Intel®, AMDTM, 및 다른 회사들에 의해 제조되는 하드웨어를 사용하는 광범위한 머신들 상에서 리눅스를 실행하는 머신들에서 실행될 수 있다. z/아키텍쳐 하에서 그 하드웨어 상의 실행 이외에, 허큘레스(Hercules), UMX, 또는 FSI(Fundamental Software, Inc)에 의한 에뮬레이션을 사용하는 머신들 뿐만 아니라, 리눅스가 사용될 수 있는데, 여기서는 일반적으로 실행이 에뮬레이션 모드이다. 에뮬리에션 모드에서, 에뮬레이션 소프트웨어는 에뮬레이트된 프로세서의 아키텍쳐를 에뮬레이트하기 위해 네이티브 프로세서에 의해 실행된다.
네이티브 프로세서는 일반적으로, 에뮬레이트된 프로세서의 에뮬레이션을 수행하기 위해 펌웨어 또는 네이티브 운영체제를 포함하는 에뮬레이션 소프트웨어를 실행한다. 에뮬레이션 소프트웨어는 에뮬레이트된 프로세서 아키텍쳐의 명령들을 페치하고 실행할 책임이 있다. 에뮬레이션 소프트웨어는 명령 경계들(instruction boundaries)을 추적하기 위해 에뮬레이트된 프로그램 카운터를 유지한다. 에뮬레이션 소프트웨어는 한번에 하나 또는 그 이상의 에뮬레이트된 기계 명령어들(machine instructions)을 페치할 수 있고, 하나 또는 그 이상의 에뮬레이트된 기계 명령어들을 네이티브 프로세서에 의한 실행을 위한 네이티브 기계 명령어들의 해당 그룹으로 변환시킬 수 있다. 더 빠른 변환이 달성될 수 있도록, 이들 변환된 명령들은 캐시될 수 있다. 그럼에도 불구하고, 에뮬레이션 소프트웨어는, 에뮬레이트된 프로세서를 위해 작성된 어플리케이션들 및 운영체제들이 올바르게 동작하도록 보장하기 위해, 그 에뮬레이트된 프로세서 아키텍쳐의 아키텍쳐 규칙들을 유지할 것이다. 더 나아가, 에뮬레이션 소프트웨어는, 컨트롤 레지스터들, 범용 레지스터들, 부동 소수점 레지스터들, 예를 들어, 세그먼트 표들 및 페이지 표들을 포함하는 동적 어드레스 변환 기능(dynamic address translation function), 인터럽트 메커니즘들, 컨텍스트 스위치 메커니즘들, 타임 오브 데이(TOD) 클럭들 및 I/O 서브시스템들에 대한 아키텍트된 인터페이스들(그러나, 이러한 예들로 한정되는 것은 아님)을 포함하는 에뮬레이트된 프로세서 아키텍쳐에 의해 식별되는 리소스들을 제공할 것이고, 그리하여 그 에뮬레이트된 프로세서 상에서 실행되도록 설계된 어플리케이션 프로그램 또는 운영체제가 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서 상에서 실행될 수 있도록 한다.
에뮬레이트되고 있는 특정 명령(specific instruction)은 디코딩되고, 서브루틴이 호출되어 개별 명령의 펑션을 수행한다. 에뮬레이트된 프로세서의 기능을 에뮬레이트하는 에뮬레이션 소프트웨어 기능은, 예를 들어, "C" 서브루틴 또는 드라이버로, 또는 당해 기술 분야에서의 통상의 기술을 가진 자가 바람직한 실시예들에 관한 설명을 이해한 후 알 수 있는 바와 같이, 특정 하드웨어(specific hardware)를 위해 드라이브를 제공하는 다른 몇몇 방법으로, 구현된다. "하드웨어 에뮬레이션을 위한 멀티프로세서(Multiprocessor for Hardware Emulation)"(Beausoleil 등)라는 제목의 미국특허(U.S. Letters Patent) 제5,551,013호; "타겟 프로세서 상에서 양립가능하지 않은 명령들을 에뮬레이팅하기 위한 저장된 타겟 루틴들의 전처리(Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor)"(Scalzi 등) 라는 제목의 미국특허 제6,009,261호; "게스트 명령들을 에뮬레이트하는 에뮬레이션 루틴들에 직접적으로 접근하기 위해 게스트 명령을 디코딩하는 것(Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions)"(Davidian 등)이라는 제목의 미국특허 제5,574,873호; "시스템에서 비-네이티브 코드(non-native code)가 실행되도록 허용하는 코프로세서 지원을 위해 사용되는 대칭형 멀티프로세싱 버스 및 칩셋(Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System)"(Gorishek 등)이라는 제목의 미국특허 제6,308,255호; "아키텍쳐 에뮬레이션을 위한 동적 최적화 오브젝트 코드 변환기 및 동적 최적화 오브젝트 코드 변환 방법(Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method)"(Lethin 등)이라는 제목의 미국특허 제6,463,582호; 및 "호스트 명령들의 동적 리컴파일레이션을 통한 호스트 컴퓨터 상의 게스트 명령들을 에뮬레이트하기 위한 방법(Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions)"(Eric Traut)이라는 제목의 미국특허 제5,790,825호 등(그러나, 이러한 예들로 한정되는 것은 아님)을 포함하는 여러 가지 소프트웨어 및 하드웨어 에뮬레이션 특허들 - 이것들 각각은 전부 본 명세서 내에 참조로 편입됨 - , 및 많은 다른 것들은, 당해 기술 분야에서 숙련된 자들에게 이용가능한 타겟 머신을 위해 다른 머신들에 대해 아키텍트된 명령 포맷의 에뮬레이션을 달성하기 위한 여러 가지 알려진 방법들을 예시한다.
도 18에서, 호스트 아키텍쳐의 호스트 컴퓨터 시스템(5000')을 에뮬레이트하는 에뮬레이트된 호스트 컴퓨터 시스템(5092)의 일 예가 제공된다. 에뮬레이트된 호스트 컴퓨터 시스템(5092)에서, 호스트 프로세서(CPU)(5091)는 에뮬레이트된 호스트 프로세서(또는 가상 호스트 프로세서)이고 호스트 컴퓨터(5000')의 프로세서(5091)의 그것과는 다른 네이티브 명령 세트 아키텍쳐를 갖는 에뮬레이션 프로세서(5093)을 포함한다. 에뮬레이트된 호스트 컴퓨터 시스템(5092)은 에뮬레이션 프로세서(5093)에 접근가능한 메모리(5094)를 갖는다. 실시예에서, 메모리(5094)는 호스트 컴퓨터 메모리(5096) 부분과 에뮬레이션 루틴들(5097) 부분으로 분할된다. 호스트 컴퓨터 메모리(5096)는 호스트 컴퓨터 아키텍쳐에 따라 에뮬레이트된 호스트 컴퓨터(5092)의 프로그램들에게 이용가능하다. 에뮬레이션 프로세서(5093)는 에뮬레이트된 프로세서(5091)의 그것 이외의 아키텍쳐의 아키텍트된 명령의 네이티브 명령들 - 이 네이티브 명령들은 에뮬레이션 루틴들 메모리(5097)로부터 획득됨 - 을 실행하며, 접근된 호스트 명령의 기능을 에뮬레이트하기 위한 네이티브 명령 실행 루틴을 결정하기 위해 접근된 호스트 명령(들)을 디코딩할 수 있는 시퀀스 & 접근/디코드 루틴에서 획득된 하나 또는 그 이상의 명령(들)을 채용함에 의해, 호스트 컴퓨터 메모리(5096)에서 프로그램으로부터 실행을 위한 호스트 명령에 접근할 수 있다. 예를 들어, 범용 레지스터들, 컨트롤 레지스터들, 동적 어드레스 변환 및 I/O 서브시스템 지원 및 프로세서 캐시와 같은 퍼실리티들(facilities)을 포함하여, 아키텍트된 퍼실리티 루틴들에 의해, 호스트 컴퓨터 시스템(5000') 아키텍쳐에 대해 정의되는 다른 퍼실리티들이 에뮬레이트될 수 있다. 에뮬레이션 루틴들은 또한, 에뮬레이션 루틴들의 성능을 향상시키기 위해 에뮬레이션 프로세서(5093)(예를 들어, 범용 레지스터들 및 가상 어드레스들의 동적 변환)에서 이용가능한 기능들을 이용할 수 있다. 호스트 컴퓨터(5000')의 기능을 에뮬레이팅함에 있어서 프로세서(5093)를 지원하기 위해, 특정 하드웨어 및 오프-로드 엔진들도 제공될 수 있다.
여기서 사용되는 용어는 단지 특정 실시예들을 설명하기 위한 목적으로 제공되는 것이지, 발명의 범위를 한정하려는 의도로 제공되는 것은 아니다. 여기에 사용되는 바와 같이, 단수 형태의 "한", "하나의" 및 "일" 등은, 그 맥락에서 그렇지 않은 것으로 명시되지 않는다면, 또한 복수 형태들을 포함하는 것으로 의도된다. 본 명세서에서 사용되는 "포함하다" 및/또는 "포함하는" 이라는 용어는 설명된 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 특정하지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들 및/또는 이것들의 그룹들의 존재 또는 추가를 배제하지 않는다는 것이 또한 이해되어야 할 것이다.
이하의 청구항들에서, 대응하는 구조들, 재료들, 작용들, 및 모든 수단 또는 단계 플러스 펑션 엘리먼트들의 균등물들(equivalents)은, 만약 있다면, 구체적으로 청구되는 다른 청구된 엘리먼트들과 함께 그 기능을 수행하기 위한 어떤 구조, 재료, 또는 작용을 포함하는 것으로 의도된다. 본 발명의 하나 또는 그 이상의 측면들에 관한 설명은 설명 및 예시의 목적으로 제공되지만, 개시된 그 형태대로 발명을 한정하려하거나 발명의 실시예들을 총 망라하려는 의도는 아니다. 발명의 범위 및 사상을 벗어나지 않고서 당해 기술 분야에서 통상의 기술을 가진 자에게는 많은 변형 예들 및 변경 예들을 생각해 낼 수 있다는 것은 자명할 것이다 실시예들은, 발명의 원리들 및 실제 적용을 가장 잘 설명하기 위해 선택되고 기술되었으며, 또한 당해 기술 분야에서 통상의 기술을 가진 자들에게, 고려되는 특정 사용에 적합하게 여러 가지 변형 예들을 갖는 다양한 실시예들에 대해 발명을 이해할 수 있도록 하기 위해 선택되고 설명되었다.
제 23 장. 벡터 스트링 명령들( Chapter 23. Vector String Instructions )
벡터 스트링 퍼실리티( Vector String Facility )
...
도입( Instructions )
만약 달리 명시되지 않는다면 모든 오퍼랜드들은 벡터-레지스터 오퍼랜드들(vector-register operands)이다. 어셈블러 문법(assembler syntax)에서 "V"는 벡터 오퍼랜드를 지정한다.
Figure 112014059349267-pct00001
벡터 파인드 애니 이퀄( VECTOR FIND ANY EQUAL )
Figure 112014059349267-pct00002
왼쪽에서 오른쪽으로 진행할 때, 제2 오퍼랜드의 모든 무부호 바이너리 정수 엘리먼트는 각각 제3 오퍼랜드의 각각의 무후보 바이너리 정수 엘리먼트와의 동일성을 위해(for equality with) 비교되고, 만약 제로 서치 플래그(Zero Search flag)가 M5 필드에 세트되어 있다면, 선택적으로 0이다.
만약 M5 필드에서 결과 유형(Result Type, RT) 플래그가 0이면, 제3 오퍼랜드에서의 어떤 엘리먼트 또는 선택적으로 0과 매치되는 제2 오퍼랜드에서의 각각의 엘리먼트에 대해, 제1 오퍼랜드에서 대응하는 엘리먼트의 비트 포지션들은 1들(ones)로 세트되고, 그렇지 않으면 그것들은 0으로 세트된다. 만약 M5 필드에서 결과 유형(RT) 플래그가 0이면, 제3 오퍼랜드에서의 엘리먼트 또는 0과 매치되는 제2 오퍼랜드에서의 최좌측 엘리먼트의 바이트 인덱스는 제1 오퍼랜드의 바이트 7에 저장된다.
각각의 명령은 권장되는 확장된 연상기호들(mnemonics) 및 그것들의 해당 머신 어셈블러 신택스를 설명하는 확장된 연상 기호 섹션(Extended Mnemonic section)을 갖는다.
프로그래밍 주: 선택적으로 조건 코드를 세팅하는 모든 명령에 대해, 만약 조건 코드(condition code)가 세트되면 성능(performance)이 나빠질 수 있다.
만약 M5 필드에서 결과 유형(RT) 플래그가 1(one)이고 어떠한 바이트도 동일, 또는 0(만약 그 0(zero) 서치 플래그가 세트되면)인 것으로 확인되지 않으면, 벡터에서 바이트들의 수와 동일한 인덱스가 제1 오퍼랜드의 바이트 7에 저장된다.
M4 필드는 엘리먼트 크기 컨트롤(element size control, ES)을 지정한다. ES 컨트롤은 벡터 레지스터 오퍼랜드들에서 엘리먼트들의 크기를 지정한다. 만약 예약 값(reserved value)이 지정되면, 지정 예외(specification exception)가 인식된다.
0 - 바이트
1 - 하프워드
2 - 워드
3-15 - 예약(reserved)
M5 필드는 다음의 포맷을 갖는다.
Figure 112014059349267-pct00003

M5 필드의 비트들은 다음과 같이 정의된다.
· 결과 유형( Result Type , RT ) : 만약 0이면, 각각의 결과 엘리먼트는 그 엘리먼트 상에 모든 범위 비교들(all range comparisons)의 마스크이다. 만약 1이면, 바이트 인덱스는 제1 오퍼랜드의 바이트 7 내에 저장되고 다른 모든 엘리먼트들에 0들이 저장된다.
· 제로 서치 ( Zero Search , ZS ) : 만약 1이면, 제2 오퍼랜드의 각각의 엘리먼트는 또한 0과 비교된다.
· 조건 코드 세트( Condition Code Set , CC ) : 만약 0이면, 조건 코드는 세트되지 않고 변경되지 않는 상태로 남는다. 만약 1이면, 조건 코드는 그 다음의 섹션에서 특정되는 바에 따라 세트된다.
특수 조건들( Special Conditions )
만약 다음 중 어떤 것이 일어나면, 지정 예외가 인식되어 어떠한 다른 액션도 일어나지 않는다.
1. M4 필드가 3-15의 값을 포함한다.
2. M5의 비트 0이 0이 아니다.
결과 조건 코드( Resulting Condition Code ):
만약 CC 플래그가 0이면, 코드는 변경되지 않은 상태로 남는다.
만약 CC 플래그가 1이면, 코드는 다음과 같이 세트된다.
0 만약 ZS-비트가 세트되면, 제2 오퍼랜드에서의 0보다 더 낮은 인덱스의 엘리먼트(lower indexed element)에는 어떠한 매치들(matches)도 없었다.
1 제2 오퍼랜드의 일부 엘리먼트들은 제3 오퍼랜드에서 적어도 하나의 엘리먼트와 매치된다.
2 제2 오퍼랜드의 모든 엘리먼트들은 제3 오퍼랜드에서 적어도 하나의 엘리먼트와 매치되었다.
3 제2 오퍼랜드에서 어떠한 엘리먼트도 제3 오퍼랜드에서의 어떤 엘리먼트들과 매치되지 않는다.
프로그램 예외들( Program Exceptions ):
1 DXC FE를 갖는 데이터, 벡터 레지스터
·만약 벡터-확장 퍼실리티(vector-extension facility)가 인스톨되지 않는다면 동작
·지정(specification)(예약(reserved) ES 값)
·트랜잭션 제한(Transaction Constraint)
확장된 연상기호들( Extended Mnemonics ):
Figure 112014059349267-pct00004

벡터 파인드 엘리먼트 이퀄( VECTOR FIND ELEMENT EQUAL )
Figure 112014059349267-pct00005
왼쪽에서 오른쪽으로 진행하면서, 제2 오퍼랜드의 무부호 바이너리 정수 엘리먼트들은 제3 오퍼랜드의 해당 무부호 바이너리 정수 엘리먼트들과 비교된다. 만약 두 개의 엘리먼트들이 같으면, 최좌측의 동일한 엘리먼트의 첫 번째 바이트의 바이트 인덱스는 제1 오퍼랜드의 바이트 7에 배치된다. 제1 오퍼랜드의 남아 있는 바이트들에 0들(zeros)이 저장된다. 만약 어떠한 바이트들도 동일, 또는 0(만약 0 비교(zero compare)가 세트되어 있으면)인 것으로 확인되지 않으면, 벡터에서 바이트들의 수와 동일한 인덱스는 제1 오퍼랜드의 바이트 7에 저장된다. 남아 있는 바이트들에는 0들(zeros)이 저장된다.
만약 M5 필드에 제로 서치(Zero Search, ZS) 비트가 세트되어 있으면, 제2 오퍼랜드에서 각각의 엘리먼트는 또한 0과의 동일성을 위해(for equality with zero) 비교된다. 만약 제2 및 제3 오퍼랜드들의 다른 어떤 엘리먼트들이 동일한 것으로 확인되기 전에 제2 오퍼랜드에서 0 엘리먼트가 확인되면, 0인 것으로 발견되는 엘리먼트의 첫 번째 바이트의 바이트 인덱스는 제1 오퍼랜드의 바이트 7에 저장되고 다른 모든 바이트 위치들에 0들이 저장된다. 만약 조건 코드 세트(Condition Code Set, CC) 플래그가 1이면, 조건 코드는 0으로 세트된다.
M4 필드는 엘리먼트 크기 컨트롤(element size control, ES)을 지정한다. ES 컨트롤은 벡터 레지스터 오퍼랜드들에서 엘리먼트들의 크기를 지정한다. 만약 예약 값(reserved value)이 지정되면, 지정 예외(specification exception)가 인식된다.
0 - 바이트
1 - 하프워드
2 - 워드
3-15 - 예약(reserved)
M5 필드는 다음의 포맷을 갖는다.
Figure 112014059349267-pct00006

M5 필드의 비트들은 다음과 같이 정의된다.
·예약( Reserved ): 비트들 0-1은 예약되고 0이어야 한다. 그렇지 않으면, 지정 예외가 인식된다.
·제로 서치 ( ZS ): 만약 1이면, 제2 오퍼랜드의 각각의 엘리먼트는 또한 0과 비교된다.
·조건 코드 세트 : 만약 0이면, 조건 코드는 변경되지 않은 상태로 남는다. 만약 1이면, 조건 코드는 그 다음의 섹션에서 지정되는 바와 같이 세트된다.
특수 조건들
만약 다음 중 어떤 것이 일어나면, 지정 예외가 인식되고 다른 어떠한 액션도 일어나지 않는다.
1. M4 필드가 3-15의 값을 포함한다.
2. M5 필드의 비트들 0-1이 0이 아니다.
결과 조건 코드:
만약 M5 필드의 비트 3이 1로 세트되면, 코드는 다음과 같이 세트된다.
0 만약 제로 비교 비트(zero compare bit)가 세트되면, 비교(comparison)는 어떤 동일한 비교들보다 더 작은 인덱스를 갖는 엘리먼트에서 제2 오퍼랜드 내 0 엘리먼트를 검출했다.
1 비교는 몇몇 엘리먼트에서 제2 오퍼랜드와 제3 오퍼랜드 사이의 매치(match)를 검출했다. 만약 제로 비교 비트가 세트되면, 이 매치는 그 제로 비교 엘리먼트(zero comparing element)와 같거나 더 작은 인덱스를 갖는 엘리먼트에서 일어났다.
2 --
3 어떠한 엘리먼트들도 동일하게 비교되지 않았다.
만약 M5 필드의 비트 3이 0이면, 코드는 변경되지 않은 상태로 남는다.
프로그램 예외들:
·DXC FE를 갖는 데이터, 벡터 레지스터
·만약 벡터-확장 퍼실리티가 인스톨되지 않으면 동작
·지정(예약 ES 값)
·트랜잭션 제한
확장된 연상기호들:
Figure 112014059349267-pct00007
Figure 112014059349267-pct00008

프로그래밍 주:
1. 바이트 인덱스는 어떤 엘리먼트 크기를 위한 제1 오퍼랜드 내에 항상 저장된다. 예를 들어, 만약 엘리먼트 크기가 하프워드로 세트되고 두 번째 인덱스의 하프워드가 동일한 것으로 비교(compared equal) 되면, 4의 바이트 인덱스가 저장될 것이다.
2. 제3 오퍼랜드는 0의 값을 갖는 엘리먼트들을 포함하지 않는다. 만약 제3 오퍼랜드가 0을 포함하고, 다른 어떤 동일 비교들(equal comparisons) 전에 그것이 제2 오퍼랜드 내 0 엘리먼트와 매치되면, 0 비교 비트 세팅에 관계없이 조건 코드 1이 세트된다.
벡터 파인드 엘리먼트 낫 이퀄( VECTOR FIND ELEMENT NOT EQUAL )
Figure 112014059349267-pct00009
왼쪽에서 오른쪽으로 진행하면서, 제2 오퍼랜드의 무부호 바이너리 정수 엘리먼트들은 제3 오퍼랜드의 대응하는 무부호 바이너리 정수 엘리먼트들과 비교된다. 만약 두 개의 엘리먼트들이 동일하지 않으면, 최좌측 비동일(non-equal) 엘리먼트의 바이트 인덱스는 제1 오퍼랜드의 바이트 7에 배치되고 다른 모든 바이트들에 0들이 저장된다. 만약 M5 필드에서 조건 코드 세트(Condition Code Set, CC) 비트가 1로 세트되면, 조건 코드는 어느 오퍼랜드가 더 컸는지를 나타내도록 세트된다. 만약 모든 엘리먼트들이 동일하면, 벡터 크기와 동일한 바이트 인덱스는 제1 오퍼랜드의 바이트 7에 배치되고 다른 모든 바이트 위치들에 0들(zeros)이 배치된다. 만약 CC 비트가 1이면, 조건 코드 3이 세트된다.
만약 M5 필드에서 제로 서치(ZS) 비트가 세트되면, 제2 오퍼랜드에서 각각의 엘리먼트는 또한 0과의 동일성을 위해(for equality with zero) 비교된다. 만약 제2 오퍼랜드의 다른 어떤 엘리먼트가 동일하지 않은 것으로 확인되기 전에 제2 오퍼랜드에서 0 엘리먼트가 확인되면, 0인 것으로 확인되는 엘리먼트의 제1 바이트의 바이트 인덱스는 제1 오퍼랜드의 바이트 7에 저장된다. 다른 모든 바이트들에 0들(zeros)이 저장되고 조건 코드 0이 세트된다.
M4 필드는 엘리먼트 크기 컨트롤(element size control, ES)을 지정한다. ES 컨트롤은 벡터 레지스터 오퍼랜드들에서 엘리먼트들의 크기를 지정한다. 만약 예약 값이 지정되면, 지정 예외가 인식된다.
0 - 바이트
1 - 하프워드
2 - 워드
3-15 - 예약
M5 필드는 다음의 포맷을 갖는다.
Figure 112014059349267-pct00010
M5 필드의 비트들은 다음과 같이 정의된다.
·제로 서치 ( ZS ): 만약 1이면, 제2 오퍼랜드의 각각의 엘리먼트는 또한 0과 비교된다.
·조건 코드 세트( CC ): 만약 0이면, 조건 코드는 세트되지 않고 변경되지 않는 상태로 남는다. 만약 1이면, 조건 코드는 그 다음 섹션에서 지정되는 것에 따라 세트된다.
특수 조건들
만약 다음 중 어떤 것이 일어나면, 지정 예외가 인식되고 다른 어떤 액션도 일어나지 않는다.
1. M4 필드가 3-15로부터의 값을 포함한다.
2. M5 필드의 비트들 0-1이 0이 아니다.
결과 조건 코드:
만약 M5 필드의 비트 3이 1로 세트되면, 코드는 다음과 같이 세트된다.
0 만약 제로 비교 비트(0, compare bit)가 세트되면, 비교는 어떤 동일하지 않은 비교들보다 더 낮은 인덱스의 엘리먼트(lower indexed element)에서의 양(both) 오퍼랜드들에서 0 엘리먼트를 검출했다.
1 엘리먼트 미스매치가 검출되었고 VR2에서의 엘리먼트가 VR3에서의 엘리먼트보다 더 작다.
2 엘리먼트 미스매치가 검출되었고 VR2에서의 엘리먼트가 VR3에서의 엘리먼트보다 더 크다.
3 모든 엘리먼트들이 동일한 것으로(compared equal) 비교되고, 그래서 만약 0 비교 비트가 세트되면, 제2 오퍼랜드에서 어떠한 0 엘리먼트들도 확인되지 않았다.
만약 M5 필드의 비트 3이 0이면, 코드는 변경되지 않는 상태로 남는다.
프로그램 예외들:
·DXC FE를 갖는 데이터, 벡터 레지스터
·만약 벡터-확장 퍼실리티가 인스톨되지 않으면 동작
·지정(예약 ES 값)
·트랜잭션 제한
확장된 연상 기호들:
Figure 112014059349267-pct00011
Figure 112014059349267-pct00012

벡터 스트링 범위 비교( VECTOR STRING RANGE COMPARE )
Figure 112014059349267-pct00013
왼쪽에서 오른쪽으로 진행하면서, 제2 오퍼랜드에서 무부호 바이너리 정수 엘리먼트들은 제3 및 제4 오퍼랜드들에서 엘리먼트들의 짝수-홀수 쌍들(even-odd pairs)에 의해 정의된 값들의 범위들(ranges)과 비교된다. 제4 오퍼랜드로부터의 컨트롤 값들과의 결합은 수행될 비교들의 범위를 정의한다. 만약 엘리먼트가 제3 및 제4 오퍼랜드들에 의해 지정된 범위들 중 어떤 것과 매치되면, 그것은 매치(match)인 것으로 고려된다.
만약 M6 필드에서 결과 유형(RT) 플래그가 0이면, 만약 그 엘리먼트가 범위들 중 어떤 것과 매치되면 제2 오퍼랜드에서 비교되고 있는 엘리먼트와 대응하는 제1 오퍼랜드에서의 엘리먼트의 비트 포지션들은 1로 세트되고, 그렇지 않으면, 그것들은 0으로 세트된다.
만약 M6 필드에서 결과 유형(RT) 플래그가 1로 세트되면, 만약 ZS 플래그가 1로 세트되면, 제3 및 제4 오퍼랜드들 또는 0 비교에 의해 지정된 범위들 중 어떤 것과 매치되는 제2 오퍼랜드에서의 제1 엘리먼트의 바이트 인덱스는, 제1 오퍼랜드의 바이트 7에 배치되고 남아 있는 바이트들에 0들이 저장된다. 만약 아무런 엘리먼트들도 매치되지 않으면, 벡터에서 바이트들의 수와 동일한 인덱스는 제1 오퍼랜드의 바이트 7에 배치되고 남아 있는 바이트들에 0들이 저장된다.
M6 필드 내 제로 서치(ZS) 플래그는, 만약 1로 세트되면, 제2 오퍼랜드 엘리먼트들의 0에 대한 비교(comparison to zero)를 제3 및 제4 오퍼랜드들에 의해 제공되는 범위들에 추가할 것이다. 만약 다른 어떤 참 비교(true comparison)보다 더 낮은 인덱스의 엘리먼트(lower indexed element)에서의 제로 비교(zero comparison)이면, 조건 코드는 0으로 세트된다.
오퍼랜드들은 M5 필드에서 엘리먼트 크기 컨트롤에 의해 지정된 크기의 엘리먼트들을 포함한다.
제4 오퍼랜드 엘리먼트들은 다음의 포맷을 갖는다.
만약 ES가 0과 동일하면:
Figure 112014059349267-pct00014
만약 ES가 1과 동일하면:
Figure 112014059349267-pct00015
만약 ES가 2와 동일하면:
Figure 112014059349267-pct00016
제4 오퍼랜드 엘리먼트들 내 비트들은 다음과 같이 정의된다.
· 이퀄 ( Equal , EQ ): 1일 때 동일성(equality)을 위한 비교가 수행된다.
·더 큰( Greater Than , GT ): 1일 때 비교보다 더 큰 것이 수행된다.
·더 작은( Less Than , LT ): 1일 때 비교보다 더 작은 것이 수행된다.
·다른 모든 비트들이 예약되고 장래의 호환성(compatibility)을 보장하기 위해 0이 되어야 한다.
어떤 조합에서 컨트롤 비트들이 사용될 수 있다. 비트들 중 어떤 것도 세트되지 않으면, 비교는 항상 거짓 결과(false result)를 생성할 것이다. 만약 모든 비트들이 세트되면, 비교는 항상 참 결과(true result)를 생성할 것이다.
M5 필드는 엘리먼트 크기 컨트롤(ES)을 지정한다. ES 컨트롤은 벡터 레지스터 오퍼랜드들에서 엘리먼트들의 크기를 지정한다. 만약 예약 값이 지정되면, 지정 예외가 인식된다.
0 - 바이트
1 - 하프워드
2 - 워드
3-15 - 예약
M6 필드는 다음의 포맷을 갖는다.
Figure 112014059349267-pct00017

M6 필드의 비트들은 다음과 같이 정의된다.
· 인버트 결과( Invert Result , IN ): 만약 0이면, 비교는 컨트롤 벡터에서 값들의 쌍(pair)으로 진행된다. 만약 1이면, 그 범위들에서의 비교들의 쌍들의 결과는 인버트(invert)된다.
·결과 유형( RT ): 만약 0이면, 각각의 결과 엘리먼트는 그 엘리먼트 상의 모든 범위의 비교들의 마스크이다. 만약 1이면, 인덱스는 제1 오퍼랜드의 바이트 7 내에 저장된다. 남아 있는 바이트들에 0들이 저장된다.
·제로 서치 ( ZS ): 만약 1이면, 제2 오퍼랜드의 각각의 엘리먼트는 또한 0과 비교된다.
·조건 코드 세트( CC ): 만약 0이면, 조건 코드는 세트되지 않고 변경되지 않는 상태로 남는다. 만약 1이면, 조건 코드는 그 다음의 섹션에서 지정되는 것에 따라 세트된다.
특수 조건들
만약 다음 중 어떤 것이 일어나면 지정 예외가 인식되고 다른 어떤 액션도 일어나지 않는다.
1. M4 필드가 3-15로부터의 값을 포함한다.
결과 조건 코드:
0 만약 ZS=1이고 다른 비교보다 더 낮은 인덱스의 엘리먼트에서 0이 확인되는 경우.
1 비교 확인(Comparison found)
2 --
3 어떠한 비교도 확인되지 않음(No comparison found)
프로그램 예외들:
·DXC FE를 갖는 데이터, 벡터 레지스터
·만약 벡터-확장 퍼실리티가 인스톨되지 않으면 동작
·지정(예약 ES 값)
·트랜잭션 제한
확장된 연상기호들:
Figure 112014059349267-pct00018
Figure 112014059349267-pct00019

로드 카운트 투 블록 바운더리( LOAD COUNT TO BLOCK BOUNDARY )
Figure 112014059349267-pct00020
16에서 캡된(capped), 지정된 블록 경계를 넘어서지 않고 제2 오퍼랜드 위치로부터 로드가능한 바이트들의 수를 포함하는 32-비트 무부호 바이너리 정수는, 제1 오퍼랜드에 배치된다.
변위(displacement)는 12-비트 무부호 정수로서 취급된다.
제2 오퍼랜드 어드레스는 데이터를 어드레싱하는데 사용되지 않는다.
M3 필드는 로드되는 가능한 바이트들의 수를 계산하기 위해 블록 경계 크기에 관해 CPU를 시그널링하는데 사용되는 코드를 지정한다.
코드 경계
0 64-바이트
1 128-바이트
2 256-바이트
3 512-바이트
4 1K-바이트
5 2K-바이트
6 4K-바이트
7-15 예약
결과 조건 코드:
0 오퍼랜드 1은 16
1 --
2 --
3 오퍼랜드 1은 16보다 작음
결과 조건 코드:
프로그램 예외들:
·만약 벡터-확장 퍼실리티가 인스톨되지 않으면 동작
·지정(specification)
프로그램 주: 로드된 바이트들의 수를 결정하기 위해 로드 카운트 투 블록 바운더리(LOAD COUNT TO BLOCK BOUNDARY)가 벡터 로드 투 블록 바운더리(VECTOR LOAD TO BLOCK BOUNDARY)와 함께 사용될 것이다.
벡터 로드 GR 프롬 VR 엘리먼트( VECTOR LOAD GR FROM VR ELEMENT )
Figure 112014059349267-pct00021
M4 필드에서 ES 값에 의해 지정된 크기를 가지며 제2 오퍼랜드 어드레스에 의해 인덱스된 제3 오퍼랜드의 엘리먼트는 제1 오퍼랜드 위치에 배치된다. 제3 오퍼랜드는 벡터 레지스터이다. 제1 오퍼랜드는 범용 레지스터이다. 만약 제2 오퍼랜드 어드레스에 의해 지정된 인덱스가 제3 오퍼랜드에서 가장 높게 넘버링되는 번호의 엘리먼트(지정된 엘리먼트 크기의)보다 더 크다면, 제1 오퍼랜드에서의 데이터는 예측가능하지 않다. 만약 벡터 레지스터 엘리먼트가 더블워드보다 더 작으면, 그 엘리먼트는 64-비트 범용 레지스터에 우 정렬(right aligned)되고 남아 있는 비트들을 0들(zeros)이 채운다.
제2 오퍼랜드 어드레스는 데이터를 어드레싱하는데 사용되지 않으며, 그 대신에 어드레스의 최우측 12 비트들이 사용되어 제2 오퍼랜드 내 엘리먼트의 인덱스를 지정한다.
M4 필드는 엘리먼트 크기 컨트롤(ES)을 지정한다. ES 컨트롤은 벡터 레지스터 오퍼랜드들에서 엘리먼트들의 크기를 지정한다. 만약 예약 값이 지정되면, 지정 예외가 인식된다.
0 - 바이트
1 - 하프워드
2 - 워드
3 - 더블워드
4-15 - 변경되지 않는 상태로 예약(reserved unchanged)
결과 조건 코드: 코드는 변하지 않는다.
프로그램 예외들:
·DXC FE를 갖는 데이터, 벡터 레지스터
·만약 벡터-확장 퍼실리티가 인스톨되지 않으면 동작
·지정(예약 ES 값)
·트랜잭션 제한
확장된 연상기호들:
Figure 112014059349267-pct00022
Figure 112014059349267-pct00023

벡터 로드 투 블록 바운더리( VECTOR LOAD TO BLOCK BOUNDARY )
Figure 112014059349267-pct00024

제1 오퍼랜드는 제2 오퍼랜드로부터의 바이트들을 갖는 0 인덱스된 바이트 엘리먼트에서 시작하여 로드된다. 만약 경계 조건에 마주하게 되면, 제1 오퍼랜드의 나머지(rest)는 예측가능하지 않다. 로드되지 않는 바이트들에 관하여는 접근 예외가 인식되지 않는다. VLBB에 대한 변위(displacement)는 12-비트 무부호 정수(unsigned integer)로 취급된다. M3 필드는 로드할 블록 경계 크기에 관하여 CPU를 시그널링하기 위해 사용된다. 만약 예약 값(reserved value)이 지정되면, 지정 예외가 인식된다.
코드 경계
0 64-바이트
1 128-바이트
2 256-바이트
3 512-바이트
4 1K-바이트
5 2K-바이트
6 4K-바이트
7-15 예약
결과 조건 코드: 코드는 변경되지 않는 상태로 남는다.
프로그램 예외들:
·접근(페치, 오퍼랜드 2)
·DXC FE를 갖는 데이터, 벡터 레지스터
·만약 벡터-확장 퍼실리티가 인스톨되지 않으면 동작
·지정(예약 블록 경계 코드)
·트랜잭션 제한
프로그래밍 주:
1. 특정 환경에서, 데이터는 블록 경계를 지나 로드될 수 있다. 그러나, 이는 그 데이터에 어떠한 접근 예외들도 없을 경우에만 일어날 것이다.
벡터 저장( VECTOR STORE )
Figure 112014059349267-pct00025

제1 오퍼랜드에서 128-비트 값은 제2 오퍼랜드에 의해 지정되는 스토리지 위치에 저장된다. VST에 대한 변위(displacement)는 12-비트 무부호 정수로 취급된다.
결과 조건 코드: 코드는 변경되지 않는 상태로 남는다.
프로그램 예외들:
·접근(저장, 오퍼랜드 2)
·DXC FE를 갖는 데이터, 벡터 레지스터
·만약 벡터-확장 퍼실리티가 인스톨되지 않으면 동작
·트랜잭션 제한
벡터 스토어 위드 렝스( VECTOR STORE WITH LENGTH )
Figure 112014059349267-pct00026

왼쪽에서 오른쪽으로 진행하면서, 제1 오퍼랜드로부터의 바이트들은 제2 오퍼랜드 위치에 저장된다. 범용 레지스터가 지정된 제3 오퍼랜드는 저장할 가장 높은 인덱스의 바이트를 나타내는 값을 포함하는 32-비트 무부호 정수를 포함한다. 만약 제3 오퍼랜드가 벡터의 가장 높은 바이트 인덱스와 같거나 더 큰 값을 포함한다면, 제1 오퍼랜드의 모든 바이트들이 저장된다.
저장된 바이트들에 관해 접근 예외들이 단지 인식된다.
벡터 스토어 위드 렝스(VECTOR STORE WITH LENGTH)에 대한 변위(displacement)는 12-비트 무부호 정수로 취급된다.
결과 조건 코드: 조건 코드는 변경되지 않는 상태로 남는다.
프로그램 예외들:
·접근(저장, 오퍼랜드 2)
·DXC FE를 갖는 데이터, 벡터 레지스터
·만약 벡터-확장 퍼실리티가 인스톨되지 않으면 동작
·트랜잭션 제한
RXB 설명
모든 벡터 명령들이 RXB로 라벨링된 명령의 비트들 36-40에서 필드를 갖는다. 이 필드는 벡터 레지스터가 지정된 오퍼랜드들 모두에 대한 최상위 비트들을 포함한다. 명령에 의해 지정되지 않는 레지스터 지정들(register designations)을 위한 비트들은 예약되고 0으로 세트되어야 하며, 그렇지 않으면, 프로그램은 장래에 호환가능하게 동작하지 않을 수 있다. 최상위 비트(most significant bit)는, 5-비트 벡터 레지스터 지정(designation)을 생성하기 위해, 4-비트 레지스터 지정의 왼쪽에 연결(concatenate)된다.
비트들은 다음과 같이 정의된다.
0. 명령의 비트들 8-11에서 벡터 레지스터 지정을 위한 최상위 비트.
1. 명령의 비트들 12-15에서 벡터 레지스터 지정을 위한 최상위 비트.
2. 명령의 비트들 16-19에서 벡터 레지스터 지정을 위한 최상위 비트.
3. 명령의 비트들 32-35에서 벡터 레지스터 지정을 위한 최상위 비트.
벡터 인에이블먼트 컨트롤( Vector Enablement Control )
벡터 레지스터들 및 명령들은, 컨트롤 레지스터 0에서 벡터 인에이블먼트 컨트롤(비트 46)과 AFP-레지스터-컨트롤(비트 45) 둘 다가 0으로 세트되는 경우에만 사용될 수 있다. 만약 벡터 퍼실리티가 인스톨되고 벡터 명령이 인에이블먼트 비트들 세트(enablement bits set) 없이 실행된다면, DXC FE 헥스(hex)를 갖는 데이터 예외가 인식된다. 만약 벡터 퍼실리티가 인스톨되지 않으면, 동작 예외가 인식된다.

Claims (20)

  1. 컴퓨팅 환경의 명령 지정자들(instruction specifiers) ― 명령 지정자들에는 불연속 지정자와 연속 지정자가 있으며, 불연속 지정자는 명령의 다수 필드들을 사용하여 레지스터와 같은 명령의 리소스를 지정함 ― 을 변형하기 위한 방법(a method)을 수행하기 위해, 처리 회로에 의해 판독가능하고 상기 처리 회로에 의한 실행을 위한 명령들을 저장하는, 비-일시적인 컴퓨터 판독가능 스토리지 매체(computer readable storage medium)로서, 상기 방법은,
    프로세서에 의해, 제1 컴퓨터 아키텍쳐에 대해 정의된 제1 명령으로부터 제1 부분 및 제2 부분을 갖는 불연속 지정자(non-contiguous specifier)를 획득하는 단계 ― 상기 획득하는 단계는 상기 명령의 제1 필드로부터 상기 제1 부분을 획득하는 단계 및 상기 명령의 제2 필드로부터 상기 제2 부분을 획득하는 단계를 포함하고, 상기 제1 필드는 상기 제2 필드로부터 분리됨 ―;
    상기 프로세서에 의해, 상기 제1 부분 및 상기 제2 부분을 사용하여 연속 지정자(contiguous specifier)를 생성하는 단계 ― 상기 생성하는 단계는 상기 제1 명령의 오피코드(opcode)에 기초해서 불연속 지정자를 획득하는 것에 후속하여 불연속 지정자의 부분들을 결합하여 연속 지정자를 생성하도록 하는, 하나 또는 그 이상의 규칙들을 사용함 ―; 및
    상기 프로세서에 의해, 제2 명령의 실행에 사용될 리소스를 나타내기 위해 상기 연속 지정자를 사용하는 단계 ― 상기 제2 명령은 상기 제1 컴퓨터 아키텍쳐와 다른 제2 컴퓨터 아키텍쳐에 대해 정의되고 상기 제1 명령의 기능을 에뮬레이트함 ― 를 포함하는, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
  2. 청구항 1에 있어서, 상기 프로세서는 에뮬레이터를 포함하고, 상기 제1 부분은 제1의 하나 또는 그 이상의 비트들(first one or more bits)을 포함하며, 상기 제2 부분은 제2의 하나 또는 그 이상의 비트들(second one or more bits)을 포함하고, 그리고 상기 생성하는 단계는 상기 연속 지정자를 형성하기 위해 상기 제2의 하나 또는 그 이상의 비트들을 상기 제1의 하나 또는 그 이상의 비트들과 연결(concatenate)시키는 단계를 포함하며, 상기 제2의 하나 또는 그 이상의 비트들은 상기 연속 지정자의 최상위 비트들(the most significant bits)인, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
  3. 삭제
  4. 삭제
  5. 청구항 1에 있어서, 상기 제1 필드는 레지스터 필드로 구성되고, 상기 제2 필드는 확장 필드(extension field)로 구성되고, 상기 제1 부분은 상기 레지스터 필드로부터의 복수의 비트들로 구성되고, 상기 제2 부분은 상기 레지스터 필드에 대응하는 명령의 위치에서 상기 확장 필드로부터의 비트로 구성되며, 그리고 상기 생성하는 단계는 상기 연속 지정자를 제공하기 위해 상기 확장 필드로부터의 비트를 상기 레지스터 필드로부터의 비트들과 연결(concatenate)시키는 단계를 포함하는, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
  6. 청구항 1에 있어서, 리소스를 나타내기 위해 상기 연속 지정자를 사용하는 단계는 상기 제2 명령에 의해 사용될 레지스터에 매핑(map)시키기 위해 상기 연속 지정자를 사용하는 단계를 포함하는, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
  7. 청구항 6에 있어서, 상기 연속 지정자에 의해 매핑되는 레지스터는 상기 연속 지정자와 동일한 값을 갖는, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
  8. 청구항 6에 있어서, 상기 연속 지정자에 의해 매핑되는 레지스터는 상기 연속 지정자와 다른 값을 갖는, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
  9. 청구항 1에 있어서, 상기 제1 컴퓨터 아키텍쳐는 하나의 명령 세트(an instruction set)를 포함하며, 상기 명령 세트는, 상기 제1 컴퓨터 아키텍쳐의 레지스터 스페이스(space)의 서브-섹션에 접근하기 위한 레지스터 필드들을 갖는 제1 명령들을 포함하고, 또한 상기 레지스터 스페이스의 상기 서브-섹션 및 나머지 서브섹션들에 접근하기 위한 불연속 레지스터를 갖는 제2 명령들을 가지며, 상기 제1 명령들은 상기 나머지 서브섹션들에 접근하는 것이 금지되는(precluded from accessing), 비-일시적인 컴퓨터 판독가능 스토리지 매체.
  10. 청구항 1에 있어서, 상기 제1 필드는 레지스터 필드로 구성되고, 상기 제2 필드는 확장 필드로 구성되며, 상기 제1 부분은 상기 레지스터 필드로부터의 복수의 비트들로 구성되고, 상기 제2 부분은 상기 레지스터 필드에 대응하는 명령의 위치에서 상기 확장 필드로부터의 비트로 구성되며, 그리고 상기 생성하는 단계는 상기 연속 지정자를 제공하기 위해 상기 확장 필드로부터의 비트를 상기 레지스터 필드로부터의 비트들과 연결(concatenate)시키는 단계를 포함하며,
    상기 프로세서에 의해, 상기 제1 명령으로부터, 또 다른 제1 부분(another first portion) 및 또 다른 제2 부분(another second portion)을 갖는 또 다른 불연속 지정자(another non-contiguous specifier)를 획득하는 단계 ― 상기 획득하는 단계는 상기 명령의 또 다른 제1 필드로부터 상기 또 다른 제1 부분을 획득하는 단계 및 상기 확장 필드의 또 다른 비트로부터 상기 또 다른 제2 부분을 획득하는 단계를 포함하고, 상기 또 다른 제1 필드는 상기 제1 필드 및 상기 확장 필드와는 분리됨 ―;
    상기 프로세서에 의해, 상기 또 다른 제1 부분 및 상기 또 다른 비트를 사용하여 또 다른 연속 지정자(another contiguous specifier)를 생성하는 단계 ― 상기 생성하는 단계는 상기 제1 명령의 오피코드(opcode)에 기초해서 불연속 지정자를 획득하는 것에 후속하여 불연속 지정자의 부분들을 결합하여 연속 지정자를 생성하도록 하는, 하나 또는 그 이상의 규칙들을 사용함 ―; 및
    상기 프로세서에 의해, 상기 제2 명령의 실행에 사용될 리소스를 나타내기 위해 상기 또 다른 연속 지정자를 사용하는 단계를 더 포함하는, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
  11. 컴퓨팅 환경의 명령 지정자들(instruction specifiers) ) ― 명령 지정자들에는 불연속 지정자와 연속 지정자가 있으며, 불연속 지정자는 명령의 다수 필드들을 사용하여 레지스터와 같은 명령의 리소스를 지정함 ― 을 변형하기 위한 방법(a method)를 수행하도록 구성된 컴퓨터 시스템으로서, 상기 컴퓨터 시스템은,
    메모리; 및
    상기 메모리와 통신하는 프로세서를 포함하고, 상기 방법은,
    상기 프로세서에 의해, 제1 컴퓨터 아키텍쳐에 대해 정의된 제1 명령으로부터 제1 부분 및 제2 부분을 갖는 불연속 지정자(non-contiguous specifier)를 획득하는 단계 ― 상기 획득하는 단계는 상기 명령의 제1 필드로부터 상기 제1 부분을 획득하는 단계 및 상기 명령의 제2 필드로부터 상기 제2 부분을 획득하는 단계를 포함하고, 상기 제1 필드는 상기 제2 필드로부터 분리됨 ―;
    상기 프로세서에 의해, 상기 제1 부분 및 상기 제2 부분을 사용하여 연속 지정자(contiguous specifier)를 생성하는 단계 ― 상기 생성하는 단계는 상기 제1 명령의 오피코드(opcode)에 기초해서 불연속 지정자를 획득하는 것에 후속하여 불연속 지정자의 부분들을 결합하여 연속 지정자를 생성하도록 하는, 하나 또는 그 이상의 규칙들을 사용함 ―; 및
    상기 프로세서에 의해, 제2 명령의 실행에 사용될 리소스를 나타내기 위해 상기 연속 지정자를 사용하는 단계 ― 상기 제2 명령은 상기 제1 컴퓨터 아키텍쳐와 다른 제2 컴퓨터 아키텍쳐에 대해 정의되고 상기 제1 명령의 기능을 에뮬레이트함 ― 를 포함하는, 컴퓨터 시스템.
  12. 청구항 11에 있어서, 상기 프로세서는 에뮬레이터를 포함하고, 상기 제1 부분은 제1의 하나 또는 그 이상의 비트들(first one or more bits)을 포함하고, 상기 제2 부분은 제2의 하나 또는 그 이상의 비트들(second one or more bits)을 포함하고, 상기 생성하는 단계는 상기 연속 지정자를 형성하기 위해 상기 제2의 하나 또는 그 이상의 비트들을 상기 제1의 하나 또는 그 이상의 비트들과 연결시키는 단계를 포함하며, 상기 제2의 하나 또는 그 이상의 비트들은 상기 연속 지정자의 최상위 비트들(the most significant bits)인, 컴퓨터 시스템.
  13. 삭제
  14. 삭제
  15. 청구항 11에 있어서, 상기 제1 필드는 레지스터 필드를 포함하고, 상기 제2 필드는 확장 필드(extension field)를 포함하고, 상기 제1 부분은 상기 레지스터 필드로부터의 복수의 비트들을 포함하고, 상기 제2 부분은 상기 레지스터 필드에 대응하는 위치에서 상기 확장 필드로부터의 비트를 포함하고, 상기 생성하는 단계는 상기 연속 지정자를 제공하기 위해 상기 확장 필드로부터의 비트를 상기 레지스터 필드로부터의 비트들과 연결(concatenate)시키는 단계를 포함하는, 컴퓨터 시스템.
  16. 청구항 11에 있어서, 리소스를 나타내기 위해 상기 연속 지정자를 사용하는 단계는 상기 제2 명령에 의해 사용될 레지스터에 매핑(map)시키기 위해 상기 연속 지정자를 사용하는 단계를 포함하는, 컴퓨터 시스템.
  17. 청구항 16에 있어서, 상기 연속 지정자에 의해 매핑된 레지스터는, 상기 연속 지정자와 동일한 값 또는 상기 연속 지정자와 다른 값, 중 어느 하나를 갖는, 컴퓨터 시스템.
  18. 컴퓨팅 환경의 명령 지정자들(instruction specifiers) ― 명령 지정자들에는 불연속 지정자와 연속 지정자가 있으며, 불연속 지정자는 명령의 다수 필드들을 사용하여 레지스터와 같은 명령의 리소스를 지정함 ― 을 변형하기 위한 방법으로서,
    프로세서에 의해, 제1 컴퓨터 아키텍쳐에 대해 정의된 제1 명령으로부터 제1 부분 및 제2 부분을 갖는 불연속 지정자(non-contiguous specifier)를 획득하는 단계 ― 상기 획득하는 단계는 상기 명령의 제1 필드로부터 상기 제1 부분을 획득하는 단계 및 상기 명령의 제2 필드로부터 상기 제2 부분을 획득하는 단계를 포함하고, 상기 제1 필드는 상기 제2 필드로부터 분리됨 ―;
    상기 프로세서에 의해, 상기 제1 부분 및 상기 제2 부분을 사용하여 연속 지정자(contiguous specifier)를 생성하는 단계 ― 상기 생성하는 단계는 상기 제1 명령의 오피코드(opcode)에 기초해서 불연속 지정자를 획득하는 것에 후속하여 불연속 지정자의 부분들을 결합하여 연속 지정자를 생성하도록 하는, 하나 또는 그 이상의 규칙들을 사용함 ―; 및
    상기 프로세서에 의해, 제2 명령의 실행에 사용될 리소스를 나타내기 위해 상기 연속 지정자를 사용하는 단계 ― 상기 제2 명령은 상기 제1 컴퓨터 아키텍쳐와 다른 제2 컴퓨터 아키텍쳐에 대해 정의되고 상기 제1 명령의 기능을 에뮬레이트함 ― 를 포함하는, 방법.
  19. 청구항 18에 있어서, 상기 제1 부분은 제1의 하나 또는 그 이상의 비트들(first one or more bits)을 포함하고, 상기 제2 부분은 제2의 하나 또는 그 이상의 비트들(second one or more bits)을 포함하며, 상기 생성하는 단계는 상기 연속 지정자를 형성하기 위해 상기 제2의 하나 또는 그 이상의 비트들을 상기 제1의 하나 또는 그 이상의 비트들과 연결(concatenate)시키는 단계 ― 상기 제2의 하나 또는 그 이상의 비트들은 상기 연속 지정자의 최상위 비트들(the most significant bits)임 ― 를 포함하는, 방법.
  20. 청구항 18 또는 19에 있어서, 상기 제1 필드는 레지스터 필드를 포함하고, 상기 제2 필드는 확장 필드(extension field)를 포함하고, 상기 제1 부분은 상기 레지스터 필드로부터의 복수의 비트들을 포함하고, 상기 제2 부분은 상기 레지스터 필드에 대응하는 위치에서 상기 확장 필드로부터의 비트를 포함하며, 상기 생성하는 단계는 상기 연속 지정자를 제공하기 위해 상기 확장 필드로부터의 비트를 상기 레지스터 필드로부터의 비트들과 연결(concatenate)시키는 단계를 포함하는, 방법.
KR1020147017426A 2012-03-15 2012-11-15 불연속 명령 지정자들을 연속 명령 지정자들로 변형하는 기술 KR101643065B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/421,657 2012-03-15
US13/421,657 US9280347B2 (en) 2012-03-15 2012-03-15 Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
PCT/IB2012/056436 WO2013136144A1 (en) 2012-03-15 2012-11-15 Transforming non-contiguous instruction specifiers to contiguous instruction specifiers

Publications (2)

Publication Number Publication Date
KR20140104974A KR20140104974A (ko) 2014-08-29
KR101643065B1 true KR101643065B1 (ko) 2016-07-26

Family

ID=49158813

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147017426A KR101643065B1 (ko) 2012-03-15 2012-11-15 불연속 명령 지정자들을 연속 명령 지정자들로 변형하는 기술

Country Status (24)

Country Link
US (2) US9280347B2 (ko)
EP (1) EP2769301B1 (ko)
JP (1) JP6108362B2 (ko)
KR (1) KR101643065B1 (ko)
CN (1) CN104169877B (ko)
AU (1) AU2012373735B2 (ko)
BR (1) BR112014022638B1 (ko)
CA (1) CA2867115C (ko)
DK (1) DK2769301T3 (ko)
ES (1) ES2779033T3 (ko)
HK (1) HK1201354A1 (ko)
HR (1) HRP20200393T1 (ko)
HU (1) HUE048409T2 (ko)
IL (1) IL232817A (ko)
LT (1) LT2769301T (ko)
MX (1) MX340050B (ko)
PL (1) PL2769301T3 (ko)
PT (1) PT2769301T (ko)
RU (1) RU2568241C2 (ko)
SG (1) SG11201404825SA (ko)
SI (1) SI2769301T1 (ko)
TW (1) TWI533207B (ko)
WO (1) WO2013136144A1 (ko)
ZA (1) ZA201406612B (ko)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
CN108874693B (zh) 2011-01-27 2022-09-23 英特尔公司 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
US9588762B2 (en) 2012-03-15 2017-03-07 International Business Machines Corporation Vector find element not equal instruction
US9454366B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Copying character data having a termination character from one memory location to another
US9459867B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a specified memory boundary indicated by the instruction
US9459864B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Vector string range compare
US9280347B2 (en) 2012-03-15 2016-03-08 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US9268566B2 (en) 2012-03-15 2016-02-23 International Business Machines Corporation Character data match determination by loading registers at most up to memory block boundary and comparing
US9710266B2 (en) 2012-03-15 2017-07-18 International Business Machines Corporation Instruction to compute the distance to a specified memory boundary
US9454367B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Finding the length of a set of character data having a termination character
US9715383B2 (en) 2012-03-15 2017-07-25 International Business Machines Corporation Vector find element equal instruction
US9459868B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
US9923840B2 (en) * 2012-08-20 2018-03-20 Donald Kevin Cameron Improving performance and security of multi-processor systems by moving thread execution between processors based on data location
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
CN109358948B (zh) 2013-03-15 2022-03-25 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
US20140281398A1 (en) * 2013-03-16 2014-09-18 William C. Rash Instruction emulation processors, methods, and systems
US9703562B2 (en) 2013-03-16 2017-07-11 Intel Corporation Instruction emulation processors, methods, and systems
US10120681B2 (en) 2014-03-14 2018-11-06 International Business Machines Corporation Compare and delay instructions
US9558032B2 (en) 2014-03-14 2017-01-31 International Business Machines Corporation Conditional instruction end operation
US9454370B2 (en) 2014-03-14 2016-09-27 International Business Machines Corporation Conditional transaction end instruction
US9823939B2 (en) * 2014-07-25 2017-11-21 Intel Corporation System for an instruction set agnostic runtime architecture
US10353680B2 (en) 2014-07-25 2019-07-16 Intel Corporation System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence
US11281481B2 (en) 2014-07-25 2022-03-22 Intel Corporation Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture
US9792098B2 (en) * 2015-03-25 2017-10-17 International Business Machines Corporation Unaligned instruction relocation
US20170022314A1 (en) 2015-07-24 2017-01-26 Weyerhaeuser Nr Company Grafted crosslinked cellulose
US10055208B2 (en) * 2015-08-09 2018-08-21 Oracle International Corporation Extending a virtual machine instruction set architecture
US10235170B2 (en) * 2016-09-30 2019-03-19 International Business Machines Corporation Decimal load immediate instruction
CN110851345B (zh) * 2019-09-23 2023-04-14 上海辛格林纳新时达电机有限公司 一种系统参数的调用方法及调用装置
US11263131B2 (en) * 2020-04-08 2022-03-01 Alibaba Group Holding Limited System and method for allocating memory space
US11816487B2 (en) 2020-12-29 2023-11-14 Shanghai Zhaoxin Semiconductor Co., Ltd. Method of converting extended instructions based on an emulation flag and retirement of corresponding microinstructions, device and system using the same
US11914997B2 (en) 2020-12-29 2024-02-27 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for executing new instructions
US11625247B2 (en) 2020-12-29 2023-04-11 Shanghai Zhaoxin Semiconductor Co., Ltd. System for executing new instructions and method for executing new instructions
US11604643B2 (en) 2020-12-29 2023-03-14 Shanghai Zhaoxin Semiconductor Co., Ltd. System for executing new instructions and method for executing new instructions
US11803383B2 (en) 2020-12-29 2023-10-31 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for executing new instructions
US11789736B2 (en) 2020-12-29 2023-10-17 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for executing new instructions
US11669328B2 (en) 2020-12-29 2023-06-06 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for converting instructions
US20220206809A1 (en) 2020-12-29 2022-06-30 Shanghai Zhaoxin Semiconductor Co., Ltd. Method and system for executing new instructions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030188130A1 (en) 2002-04-02 2003-10-02 Ip-First Llc Mechanism for extending the number of registers in a microprocessor
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture

Family Cites Families (90)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62276668A (ja) 1985-07-31 1987-12-01 Nec Corp ベクトルマスク演算制御ユニツト
US5073864A (en) 1987-02-10 1991-12-17 Davin Computer Corporation Parallel string processor and method for a minicomputer
US5222225A (en) 1988-10-07 1993-06-22 International Business Machines Corporation Apparatus for processing character string moves in a data processing system
JPH0831032B2 (ja) 1990-08-29 1996-03-27 三菱電機株式会社 データ処理装置
US5465374A (en) 1993-01-12 1995-11-07 International Business Machines Corporation Processor for processing data string by byte-by-byte
AU6629894A (en) 1993-05-07 1994-12-12 Apple Computer, Inc. Method for decoding guest instructions for a host computer
CA2162115A1 (en) 1993-06-14 1994-12-22 David V. James Method and apparatus for finding a termination character within a variable-length character string on a processor
JPH0721034A (ja) 1993-06-28 1995-01-24 Fujitsu Ltd 文字列複写処理方法
US5509129A (en) 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US6185629B1 (en) 1994-03-08 2001-02-06 Texas Instruments Incorporated Data transfer controller employing differing memory interface protocols dependent upon external input at predetermined time
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
AU696903B2 (en) 1994-09-27 1998-09-24 Jfe Steel Corporation Zinciferous plated steel sheet and method for manufacturing same
US5790825A (en) 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US5812147A (en) 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
US5931940A (en) 1997-01-23 1999-08-03 Unisys Corporation Testing and string instructions for data stored on memory byte boundaries in a word oriented machine
AU746743B2 (en) 1997-11-24 2002-05-02 British Telecommunications Public Limited Company Information management and retrieval
US6009261A (en) 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6041402A (en) * 1998-01-05 2000-03-21 Trw Inc. Direct vectored legacy instruction set emulation
US6094695A (en) 1998-03-11 2000-07-25 Texas Instruments Incorporated Storage buffer that dynamically adjusts boundary between two storage areas when one area is full and the other has an empty data register
US6334176B1 (en) 1998-04-17 2001-12-25 Motorola, Inc. Method and apparatus for generating an alignment control vector
US6308255B1 (en) 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
US7100026B2 (en) 2001-05-30 2006-08-29 The Massachusetts Institute Of Technology System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
JP3564395B2 (ja) 1998-11-27 2004-09-08 松下電器産業株式会社 アドレス生成装置および動きベクトル検出装置
US6192466B1 (en) 1999-01-21 2001-02-20 International Business Machines Corporation Pipeline control for high-frequency pipelined designs
US6189088B1 (en) 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US6499116B1 (en) 1999-03-31 2002-12-24 International Business Machines Corp. Performance of data stream touch events
US6802056B1 (en) 1999-06-30 2004-10-05 Microsoft Corporation Translation and transformation of heterogeneous programs
US6381691B1 (en) 1999-08-13 2002-04-30 International Business Machines Corporation Method and apparatus for reordering memory operations along multiple execution paths in a processor
US6513109B1 (en) 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6449706B1 (en) 1999-12-22 2002-09-10 Intel Corporation Method and apparatus for accessing unaligned data
JP2001236249A (ja) 2000-02-24 2001-08-31 Nec Corp メモリ管理装置およびメモリ管理方法
US6625724B1 (en) 2000-03-28 2003-09-23 Intel Corporation Method and apparatus to support an expanded register set
US6349361B1 (en) 2000-03-31 2002-02-19 International Business Machines Corporation Methods and apparatus for reordering and renaming memory references in a multiprocessor computer system
US6701424B1 (en) 2000-04-07 2004-03-02 Nintendo Co., Ltd. Method and apparatus for efficient loading and storing of vectors
US6408383B1 (en) 2000-05-04 2002-06-18 Sun Microsystems, Inc. Array access boundary check by executing BNDCHK instruction with comparison specifiers
CN1230740C (zh) * 2000-10-18 2005-12-07 皇家菲利浦电子有限公司 数字信号处理装置
US7487330B2 (en) 2001-05-02 2009-02-03 International Business Machines Corporations Method and apparatus for transferring control in a computer system with dynamic compilation capability
JP3900863B2 (ja) 2001-06-28 2007-04-04 シャープ株式会社 データ転送制御装置、半導体記憶装置および情報機器
US6839828B2 (en) 2001-08-14 2005-01-04 International Business Machines Corporation SIMD datapath coupled to scalar/vector/address/conditional data register file with selective subpath scalar processing mode
US6907443B2 (en) 2001-09-19 2005-06-14 Broadcom Corporation Magnitude comparator
US6570511B1 (en) 2001-10-15 2003-05-27 Unisys Corporation Data compression method and apparatus implemented with limited length character tables and compact string code utilization
US20100274988A1 (en) 2002-02-04 2010-10-28 Mimar Tibet Flexible vector modes of operation for SIMD processor
US7089371B2 (en) 2002-02-12 2006-08-08 Ip-First, Llc Microprocessor apparatus and method for prefetch, allocation, and initialization of a block of cache lines from memory
US7441104B2 (en) 2002-03-30 2008-10-21 Hewlett-Packard Development Company, L.P. Parallel subword instructions with distributed results
US7376812B1 (en) 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US20040049657A1 (en) * 2002-09-10 2004-03-11 Kling Ralph M. Extended register space apparatus and methods for processors
US6918010B1 (en) 2002-10-16 2005-07-12 Silicon Graphics, Inc. Method and system for prefetching data
US7103754B2 (en) 2003-03-28 2006-09-05 International Business Machines Corporation Computer instructions for having extended signed displacement fields for finding instruction operands
US20040215924A1 (en) 2003-04-28 2004-10-28 Collard Jean-Francois C. Analyzing stored data
US7035986B2 (en) 2003-05-12 2006-04-25 International Business Machines Corporation System and method for simultaneous access of the same line in cache storage
US20040250027A1 (en) 2003-06-04 2004-12-09 Heflinger Kenneth A. Method and system for comparing multiple bytes of data to stored string segments
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
US7904905B2 (en) 2003-11-14 2011-03-08 Stmicroelectronics, Inc. System and method for efficiently executing single program multiple data (SPMD) programs
GB2411973B (en) 2003-12-09 2006-09-27 Advanced Risc Mach Ltd Constant generation in SMD processing
US20060095713A1 (en) 2004-11-03 2006-05-04 Stexar Corporation Clip-and-pack instruction for processor
US7421566B2 (en) 2005-08-12 2008-09-02 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers
US9436468B2 (en) 2005-11-22 2016-09-06 Intel Corporation Technique for setting a vector mask
US8010953B2 (en) 2006-04-04 2011-08-30 International Business Machines Corporation Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine
US7565514B2 (en) 2006-04-28 2009-07-21 Freescale Semiconductor, Inc. Parallel condition code generation for SIMD operations
CN101097488B (zh) 2006-06-30 2011-05-04 2012244安大略公司 从接收的文本中学习字符片段的方法及相关手持电子设备
US9069547B2 (en) 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US7536532B2 (en) 2006-09-27 2009-05-19 International Business Machines Corporation Merge operations of data arrays based on SIMD instructions
US7991987B2 (en) 2007-05-10 2011-08-02 Intel Corporation Comparing text strings
WO2008142669A1 (en) 2007-05-21 2008-11-27 Incredimail Ltd. Interactive message editing system and method
US20090063410A1 (en) 2007-08-29 2009-03-05 Nils Haustein Method for Performing Parallel Data Indexing Within a Data Storage System
US7895419B2 (en) 2008-01-11 2011-02-22 International Business Machines Corporation Rotate then operate on selected bits facility and instructions therefore
US7739434B2 (en) 2008-01-11 2010-06-15 International Business Machines Corporation Performing a configuration virtual topology change and instruction therefore
US7870339B2 (en) 2008-01-11 2011-01-11 International Business Machines Corporation Extract cache attribute facility and instruction therefore
US7877582B2 (en) 2008-01-31 2011-01-25 International Business Machines Corporation Multi-addressable register file
EP2245529A1 (en) 2008-02-18 2010-11-03 Sandbridge Technologies, Inc. Method to accelerate null-terminated string operations
DK176835B1 (da) 2008-03-07 2009-11-23 Jala Aps Fremgangsmåde til skanning, medium indeholdende et program til udövelse af fremgangsmåden samt system til udövelse af fremgangsmåden
US8386547B2 (en) 2008-10-31 2013-02-26 Intel Corporation Instruction and logic for performing range detection
US20120023308A1 (en) 2009-02-02 2012-01-26 Renesas Electronics Corporation Parallel comparison/selection operation apparatus, processor, and parallel comparison/selection operation method
JP5471082B2 (ja) 2009-06-30 2014-04-16 富士通株式会社 演算処理装置および演算処理装置の制御方法
US8595471B2 (en) 2010-01-22 2013-11-26 Via Technologies, Inc. Executing repeat load string instruction with guaranteed prefetch microcode to prefetch into cache for loading up to the last value in architectural register
JP2011212043A (ja) 2010-03-31 2011-10-27 Fujifilm Corp 医用画像再生装置および方法並びにプログラム
US20110314263A1 (en) 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand
US8972698B2 (en) 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
US9009447B2 (en) 2011-07-18 2015-04-14 Oracle International Corporation Acceleration of string comparisons using vector instructions
US9454366B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Copying character data having a termination character from one memory location to another
US9459864B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Vector string range compare
US9715383B2 (en) 2012-03-15 2017-07-25 International Business Machines Corporation Vector find element equal instruction
US9459868B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
US9268566B2 (en) 2012-03-15 2016-02-23 International Business Machines Corporation Character data match determination by loading registers at most up to memory block boundary and comparing
US9280347B2 (en) 2012-03-15 2016-03-08 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US9588762B2 (en) 2012-03-15 2017-03-07 International Business Machines Corporation Vector find element not equal instruction
US9710266B2 (en) 2012-03-15 2017-07-18 International Business Machines Corporation Instruction to compute the distance to a specified memory boundary
US9454367B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Finding the length of a set of character data having a termination character
US9459867B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a specified memory boundary indicated by the instruction

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US20030188130A1 (en) 2002-04-02 2003-10-02 Ip-First Llc Mechanism for extending the number of registers in a microprocessor

Also Published As

Publication number Publication date
EP2769301B1 (en) 2020-02-19
AU2012373735A1 (en) 2014-09-11
ES2779033T3 (es) 2020-08-13
US9454374B2 (en) 2016-09-27
CN104169877A (zh) 2014-11-26
EP2769301A1 (en) 2014-08-27
DK2769301T3 (da) 2020-03-16
TWI533207B (zh) 2016-05-11
BR112014022638A2 (ko) 2017-06-20
JP2015514242A (ja) 2015-05-18
BR112014022638A8 (pt) 2021-12-14
HRP20200393T1 (hr) 2020-06-12
RU2012148583A (ru) 2014-05-20
SG11201404825SA (en) 2014-09-26
BR112014022638B1 (pt) 2022-01-04
WO2013136144A1 (en) 2013-09-19
IL232817A (en) 2017-07-31
HK1201354A1 (en) 2015-08-28
CA2867115A1 (en) 2013-09-19
US9280347B2 (en) 2016-03-08
KR20140104974A (ko) 2014-08-29
RU2568241C2 (ru) 2015-11-10
HUE048409T2 (hu) 2020-07-28
ZA201406612B (en) 2016-05-25
IL232817A0 (en) 2014-07-31
JP6108362B2 (ja) 2017-04-05
US20130246766A1 (en) 2013-09-19
PT2769301T (pt) 2020-03-26
AU2012373735B2 (en) 2016-06-02
MX340050B (es) 2016-06-22
CA2867115C (en) 2020-12-08
TW201403468A (zh) 2014-01-16
PL2769301T3 (pl) 2020-06-01
CN104169877B (zh) 2017-10-13
US20130246768A1 (en) 2013-09-19
EP2769301A4 (en) 2014-11-19
SI2769301T1 (sl) 2020-06-30
MX2014010948A (es) 2014-10-13
LT2769301T (lt) 2020-05-25

Similar Documents

Publication Publication Date Title
KR101643065B1 (ko) 불연속 명령 지정자들을 연속 명령 지정자들로 변형하는 기술
KR101662420B1 (ko) 명령에 의하여 표시된 특정 메모리 경계까지 데이터를 로드하기 위한 명령
KR101625315B1 (ko) 벡터 부등 엘리먼트 발견 명령
DK2769382T3 (en) INSTRUCTIONS FOR CALCULATING THE DISTANCE TO A SPECIFIC MEMORY BORDER
KR101740839B1 (ko) 벡터 체크섬 명령
KR101606307B1 (ko) 벡터 등가 엘리먼트 발견 명령
KR101740841B1 (ko) 벡터 예외 코드
KR101763051B1 (ko) 벡터 갈로이스 필드 멀티플라이 섬 및 어큐물레이트 명령
WO2013135556A9 (en) Method of loading data up to a dynamically determined memory boundary
AU2012373736B2 (en) Instruction to compute the distance to a specified memory boundary

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant