KR101171423B1 - 컴퓨터 아키텍쳐 상태 코드 세팅을 효율적으로 에뮬레이트하는 방법 - Google Patents

컴퓨터 아키텍쳐 상태 코드 세팅을 효율적으로 에뮬레이트하는 방법 Download PDF

Info

Publication number
KR101171423B1
KR101171423B1 KR1020097013258A KR20097013258A KR101171423B1 KR 101171423 B1 KR101171423 B1 KR 101171423B1 KR 1020097013258 A KR1020097013258 A KR 1020097013258A KR 20097013258 A KR20097013258 A KR 20097013258A KR 101171423 B1 KR101171423 B1 KR 101171423B1
Authority
KR
South Korea
Prior art keywords
instructions
instruction
machine
bit
target machine
Prior art date
Application number
KR1020097013258A
Other languages
English (en)
Other versions
KR20090115119A (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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=39241912&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=KR101171423(B1) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20090115119A publication Critical patent/KR20090115119A/ko
Application granted granted Critical
Publication of KR101171423B1 publication Critical patent/KR101171423B1/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/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Clamps And Clips (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 소스 머신 명령어의 에뮬레이션에 관한 것으로, 타겟 머신 CPU 상태 코드가 분기 명령어 인코딩 또는 생성을 이용하지 않으며 에뮬레이트된 상태 코드 설정치를 생성하는 소스 머신 명령어 에뮬레이션을 제공한다.
에뮬레이션

Description

컴퓨터 아키텍쳐 상태 코드 세팅을 효율적으로 에뮬레이트하는 방법{METHOD FOR EFFICIENTLY EMULATING COMPUTER ARCHITECTURE CONDITION CODE SETTINGS}
본 발명은 일반적으로 컴퓨터 시스템 아키텍쳐의 에뮬레이션에 관한 것이고, 보다 구체적으로는 에뮬레이션 프로세스에서 처하는 상태 코드 세팅을 처리하는 방법 및 시스템에 관한 것이다. 보다 구체적으로 본 발명은 타겟 아키텍쳐로부터의 명령어 분기를 이용하지 않으며 유효 상태 코드 세팅을 생성하는 명령어 시퀀스를 제공하는 것에 관한 것이다.
실제 오늘날의 데이터 처리 시스템에서는, 수학적 연산, 논리 연산 및 데이터 전달 연산과 같은 다양한 연산의 실행에 의해서 명령어 실행의 결과 상태를 표시하는 여러 비트들이 생성될 수 있다. 이들 비트를 통상 상태 코드라 한다. 간단한 예로서, 가수(addends)가 결과치에 이용할 수 있는 비트 수를 초과하여 오버플로우가 생긴 수학적 덧셈 후에는 특수한 상태 코드 세팅이 설정될 수 있다. 상태 코드의 사용은 거의 모든 명령어의 실행에 들어간다.
실행시 상태 코드 변경을 야기하는 명령어의 일 예로는 오퍼랜드들이 동일하면 "0"으로, 제 1 오퍼랜드가 제 2 오퍼랜드에 비해 작으면 "1"로, 그리고 제 1 오퍼랜드가 제 2 오퍼랜드에 비해 크면 "2"로 상태 코드를 설정하는 비교 명령어가 있다. 비교 명령어는 전형적인 상태 코드 세팅 이용을 나타낸다.
여러 가지 이유로, 하나의 컴퓨터에 대해 설계된 명령어들을 그와 상이한 실행 가능한 명령어들 세트를 갖는 또 다른 시스템에서 에뮬레이트하는 것이 바람직할 수도 있다. 예를 들어, 에뮬레이션은 시스템 설계 또는 테스트에 사용될 수도 있다. 에뮬레이션은 또 다른 시스템에서 기록된 명령어들을 처리하는 데에 이용될 수 있도록 하나의 데이터 처리 시스템의 기능을 확장하는 데에 이용될 수도 있다. 본 발명은 명령어 에뮬레이션의 문맥에서 상태 코드 세팅의 처리에 관한 것이다. 본 발명의 시스템 및 방법은 상태 코드들이 존재하는 임의의 에뮬레이션 방법에 폭넓게 적용될 수 있으나, 특히 z/아키텍쳐의 에뮬레이션에 적용이 가능하다. 그러나, 본 명세서에서 개시하는 원리는 임의의 소스 아키텍쳐 및 임의의 타겟 아키텍쳐에 적용 가능하다.
본 발명에서 고찰하는 원칙적 에뮬레이션 환경에서, 에뮬레이션 소프트웨어의 과제는 소스 아키텍쳐 명령어들의 스트링을 입력으로서 수신하고 그로부터 명령어들의 스트링을 생성하되, 타겟 머신상에서 실행되면 동일한 결과를 생성하는 명령어 스트링을 생성하는 것이다. 이들 결과는 부호(sign), 캐리(carry), 오버플로우 그리고 예외 및 머신 상태 표시와 같은 다양한 상태 코드의 세팅을 포함한다. 에뮬레이션 환경은 바람직하게 타겟 아키텍쳐에서 하드웨어 또는 상태 코드 엘리멘트의 세팅이 생기게 하나, 본 발명은 상태 코드들이 생성되어 타겟 머신내의 상태 코드 레지스터가 아닌 다른 위치에 저장되는 경우도 고려한다.
본 발명은 종래의 상태 코드 생성 처리를 의도적으로 피한다는 것을 특히 유념하라. 이러한 차이는 간단히 비교 명령어의 예를 고려해 보면 알 수 있다. 비교 명령어는 2 개의 오퍼랜드를 비교하고, 비교 결과에 따라 2 비트 상태 코드를 설정한다. 예를 들어, 2 개의 오퍼랜드의 비교 결과 그들이 동일하다고 판정되면, 상태 코드는 0으로 설정된다. 제 1 오퍼랜드가 제 2 오퍼랜드에 비해 작다고 판정되면, 상태 코드는 1로 설정된다. 마지막으로, 제 1 오퍼랜드가 제 2 오퍼랜드에 비해 크다고 판정되면, 상태 코드는 2로 설정된다. 비교 명령어 에뮬레이션에 대한 종래의 방법에서는, 결과로 3 개의 분기 명령어들을 포함하는 명령어 시퀀스가 생긴다. 타겟 아키텍쳐 명령어 스트림에서 분기 명령어 존재는 이하 기술하는 이유 때문에 바람직하지 않다.
분기 명령어들은 적어도 두 가지 이유 때문에 바람직하지 않다. 특히, 최신 데이터 처리 아키텍쳐는 분기 예측이라 하는 특징을 포함한다. 이들 아키텍쳐에서, 분기 명령어를 만난 이후에 명령어가 뒤따르는 2 개 이상의 경로들 중 어느 경로일 지 추측이 이루어진다. 추측이 정확히 이루어지면, 모두가 잘되고, 이에 따라 머신 프로세싱 시간 속도가 상승된다. 그러나, 추측이 정확히 이루어지지 않으면, 머신 하드웨어는 택했던 경로를 되돌아오고, 그 다음 다른 경로를 택해야 한다. 이 때, 분기 명령어가 전체 처리 속도에 해를 끼치는 것으로 간주된다. 따라서, 분기 명령어는 필요없는 복잡화의 원인으로 간주된다. 또한, 분기 명령어 회피에 대한 두 번째 이유는 프로세서가 실행시키는 다른 명령어 스트림이 이용할 수 없도록 전술한 분기 예측 자원을 실제로 소모하는 것이다. 따라서, 분기 명령어는 그 자체로서도 소모적일 뿐만 아니라, 다른 명령어 스트림들에게서 한정된 소중한 컴퓨터 자원을 박탈한다.
따라서, 에뮬레이션 시스템의 설계자는 타겟 아키텍쳐에 상태 코드 세팅 생성을 성공적으로 에뮬레이트하며, 이와 동시에 불리한 분기 명령어들은 피하려 하는 것이 필요한 분기 명령어의 모순적인 선택이라는 사실에 직면한다. 이러한 문제는 타겟 아키텍쳐에서의 상태 코드 생성 및 기능이 소스 머신의 아키텍쳐에서 발견되는 것과 상당히 다른 경우에 특히 심각하다.
z/아키텍쳐의 머신 상태를 에뮬레이트하는 컴퓨터 프로그램은 상태 코드를 수정하는 다수의 z/아키텍쳐 명령어를 다룬다는 것에 특히 유념하라. 즉, z/아키텍쳐는 특히, 상태 코드 세팅이 과거에 비교적 간단한 마이크로프로세서 설계로부터 생겨난 아키텍쳐에서 발견되는 것과는 통상적으로 상당히 상이한 아키텍쳐의 주요 예이다. 또한, z/아키텍쳐에서 상태 코드 세팅의 변경은 편재한다(pervasive). z/아키텍쳐에서 상태 코드 세팅의 생성 및 이용은 수학적, 논리 또는 비교 연산을 수행하는 결과로서 가장 일반적으로 발견되는데, 이들 연산 후에 그 결과 또는 다른 인자들을 기초로 하여 하나 이상의 상태 코드 세팅이 변경된다. z/아키텍쳐에서의 명령어 그리고 종종 이들 명령어의 임의의 신텍스를 수정하는 상태 코드 편재는 궁극적으로 타겟 아키텍쳐 상에서 실행되는 명령어들의 스트림에 복합한 제어 흐름을 도입시킨다. 이러한 제어 흐름에 의해 에뮬레이트되는 명령어들에 상당한 공간 및 작업 오버헤드가 추가된다. 본 발명은 이러한 경우를 보다 효율적으로 처리하는 것에 관한 것이다. 본 발명에 따른 방법 및 시스템은 본 발명의 양수인이 제조 판매하는 대량 데이터 처리 시스템에 있는 z/아키텍쳐에 특히 적용될 수 있으나, 소스 명령어에 대한 공급 베이스로서는 그 아키텍쳐에 결코 제한되지 않는다.
일 실시예에서, 소스 컴퓨터 명령어들은 타겟 머신 명령어들로 변환되어 추후에 실행된다. 인터프리터의 동작에 보다 예민한 또 다른 동작 모드에서는 소스 명령어들은 타겟 명령어들로 변환되어 즉각적으로 실행된다. 그 광의의 범위에서 본 발명은 이들 동작의 모든 경우를 고려한다.
타겟 머신상에서 명령어 시퀀스를 생성하기 위하여 소스 머신으로부터 컴퓨터 명령어를 에뮬레이트하는 방법에 있어서, 본 발명은 타겟 머신으로부터 분기 명령어를 이용하지 않으며 캐리, 사인 및 오버플로우 코드로부터 타겟 머신 상태 코드를 직접 계산하도록 함께 작용하는 타겟 머신 명령어 시퀀스를 생성한다. 직접 계산은 상술한 단점을 갖는 분기 명령어의 이용을 피한다.
본 발명은 z/아키텍쳐에 대하여 에뮬레이션된 바이너리 번역 환경에서 상태 코드를 효율적으로 설정하거나 예외 케이스들을 탐지하는 특수한 안내 방법들 및 이들 방법으로부터 유도되는 몇몇 시퀀스들을 제공한다. 이들 방법은 특히 z/아키텍쳐를 에뮬레이트하기 위해 PowerPC 아키텍쳐 및 Intel IA32 아키텍쳐가 사용되는 경우에 관한 것이다. 본 발명의 시퀀스들은 보다 효율적이며 흐름 제어를 더 필요로 하는 직접적인 방법(straightforward method)에 비하여 대체로 더 작다. 그러나, 본 발명의 원리, 기술 및 방법은 임의의 특정 타겟 머신 아키텍쳐에 국한되지 않는다. 본 명세서에서 설명한 2 개의 아키텍쳐 예는 현재 가장 좋은 것으로 예상되는 것일 뿐이다.
본 발명의 기술을 통하여 추가 특징 및 이점들이 실현된다. 본 발명의 다른 실시예 및 측면은 본 명세서에 기술되어 있으며 청구되는 본 발명의 일부분으로서 간주된다.
본 발명의 다양한 실시예에 의해 충족되는 바람직한 오브젝트들은 본 발명의 가장 일반적인 실시예에서 또는 그 보다 특정적인 실시예 중 하나에서 임의의 또는 모든 이들 오브텍트들이 개별적으로 혹은 집합적으로 필수 특징부로서 존재한다는 것이 아니다.
도 1은 에뮬레이션 환경에서 종래의 상태 코드 세팅 처리가 최대 3 개의 분기 명령어를 사용한다는 사실을 나타내는 순서도이다.
도 2는 컴퓨터 명령어의 에뮬레이션에서 분기 명령어를 피하는 본 발명의 프로세스의 순서도이다.
도 3은 본 발명이 사용되는 환경의 일 예를 도시하는 블록도이다.
도 4는 본 발명의 방법을 구현하는 프로그램 코드를 포함하는 전형적인 컴퓨터 판독 가능 매체 예로서 CD(compact disc)의 평면도이다.
도 5는 본 발명이 동작하고 사용되는 환경을 나타내는 블록도이다.
본 발명으로 간주되는 요지는 상세한 설명의 말미에서 특정적으로 나타내고 뚜렷이 청구한다. 그러나, 본 발명의 실시 방법 및 구성 그리고 본 발명의 다른 목적 및 이점들은 첨부 도면과 함께 다음 상세한 설명을 참조하면 가장 잘 이해할 수 있을 것이다.
본 발명에서 시퀀스를 도출하기 위해 이용하는 방법은 상태 코드 세팅의 각각의 가능한 결과를 구별하기 위하여 결과 또는 임시 레지스터에 비트를 설정하는 매우 짧은 하나 또는 두 개의 명령어 시퀀스를 구현하는 것이다. 이들 작은 코드 단편들은 통상적으로 캐리, 부호 및 오버플로우 비트를 조작하며, 표준 및 보통 고성능 시프트, 회전 및 대부분의 컴퓨터 아키텍쳐에서 이용 가능한 다양한 수학적 또는 불 명령어에 의해 약간 더 큰 시퀀스로 함께 묶인다. 분기 명령어와, 하드웨어에서 최적화되기 어려운 보다 복잡한 명령어들을 모두 이용하지 않음으로써 매우 효율적인 시퀀스가 생긴다.
어떤 경우에는 z/아키텍쳐 상태 코드 세팅을 도출하기 위해 PowerPC 상태 코드 레지스터 자체를 조작하는 것이 가능하며 효율적이다. 이러한 경우에, PowerPC 레코드 형태의 명령어가 사용되며 결과적으로 PowerPC 상태 레지스터는 회전 및 논리 연산에 의해 조작되어 해당 z/아키텍쳐 상태 코드 세팅을 도출한다.
이하의 예는 어셈블러 수도코드(assembler pseudocode)의 형태이며, 캐리 비트를 조작하고 시프트/회전/부정 명령어를 가질 수 있는 대부분의 아키텍쳐에 적용될 수 있다. 사용된 어셈블러 수도코드는 의도하는 신텍스를 명확히 하기 위하여 길다(verbose). 어떤 경우에 특정 연산을 구현하는 데에 보다 효율적인 방법이 다른 아키텍쳐상에서 변하기 쉬운 경우에는 비 표준 연산기호(non-standard mnemonics)가 사용된다. 이들 비 표준 연산기호에 대해서는 아래 표에서 더 설명한다. 각각의 경우에 rX 및 rY는 타겟 머신 레지스터라 하고 "b"는 즉각적인 값이다. carry_bit는 높은 비트 자리에서 나오는 캐리이다.
명령어 기술
get_bit rX, rY, b rX의 최하위 비트가 rY의 위치 b로부터 비트값(0 또는 1)을 받고 rX의 나머지는 0으로 설정됨.
get_sign_bit rX, rY rY로부터의 부호 비트를 rX에 배치고 rX의 나머지 부분을 클리어.
double rY의 값을 두배로 하고 그 결과를 rX에 배치함.
set_bit_on_zero rX, rY rY가 0을 포함하면, 1이 rX에 배치되고, 그렇지 않으면 0이 rX에 배치됨.
set_bit_on_not_zero rY가 0이 아닌 값을 포함하면, 1이 rX에 배치되고 그렇지 않으면 1이 rX에 배치됨.
add_to_carry rX, rY, rZ rX = rY + rZ + carry_bit. 이 연산에서는 가산 결과에 따라 캐리 비트도 설정하는 것이로 가정.
add_set_carry rX = rY + rZ이고, 가산 결과에 따라 캐리 비트가 설정됨. sub_set_carry(감산)에 대해서도 마찬가지임.
add_to_carry_immed rX, rY, imm rX = rY + imm + carry_bit임. 이 연산에서는 가산의 결과에 따라 캐리 비트도 설정하는 것으로 가정.
add_set_carry_immed rX, rY, imm rX = rY + imm이고, 가산 결과에 따라 캐리 비트가 설정됨.
move_from_carry rX = 캐리 비트
flip_bit rX, rY, b rY의 위치 b에서의 비트값은 0에서 1로 또는 1에서 0으로 변하고 전체 변경된 레지스터값은 rX에 배치됨.
64 비트 레지스터에서 비트들은 0부터 63까지 번호가 매겨지고, 32 비트 레지스터에서는 0부터 31까지 번호가 매겨진다. 0은 최상위 위치이고, 31이나 63은 최하위 위치이다. 이하, 다음 레지스터 명명 규칙이 사용되었다.
rA, rB - 각각, 레지스터내로 평가되는 z/아키텍쳐 명령어의 제 1 및 제 2 오퍼랜드
rT - 레지스터내로 계산되어지는 z/아키텍쳐의 결과값
rX, rY, rZ - 중간 결과를 유지하는 데에 이용되는 임시 레지스터
rC - 시퀀스의 끝에서 상태 코드 값을 유지하는 레지스터.
이러한 방법을 통하여 도출되는 다양한 시퀀스들을 아래에서 열거하고 설명한다. 위에서 나타낸 바와 같이, 비교 명령어는 상태 코드를 설정하는 명령어의 전형적인 예이다. 따라서, 아래에서는 상태 코드 세팅을 에뮬레이트하기 위한 시퀀스를 제공한다. 제공된 시퀀스는 본 발명의 실시에서 사용되는 전형적인 방법이다. 특히, 대상 소스 명령어는 비교 논리 연산이라 하는 z/아키텍쳐 명령어이다. 예에서는 rA 및 rB가 64 비트 환경에서 0으로 확장되어 있다고 가정한다(32 비트 오퍼랜드에 대하여 명령어 연산을 비교하는 경우에만).
[1] sub_set_carry
rC, rA, rB
[2] set_bit_on_zero rX, rC
[3] set_bit_on_not_zero
rC, rC
[4] add_to_carry_immed rC, rC, 0
[5] sub rC, rC, rX
rA > rB
rA = rB rA < rB
명령어 레지스터 콘텐트
레지스터 콘텐트
레지스터 콘텐트
rC rX 캐리 rC rX 캐리 rC rX 캐리
[1] rC > 0 N/A 1 rC = 0 N/A 1 rC < 0 N/A 0
[2] rC > 0 0 1 rC = 0 1 1 rC < 0 0 0
[3] 1 0 1 0 1 1 1 0 0
[4] 2 0 N/A 1 1 N/A 1 0 N/A
[5] 2 0 N/A 0 1 N/A 1 0 N/A
위의 표가 나타내는 바와 같이, "sub_set_carry"(명령어 [1])의 실행 이후에, 레지스터 rX의 상태는 사용이 불가능하다. 그러나, 타겟 머신에서 명령어 [1]의 실행은 이후의 명령어들이 액세스하는 CPU 상태로 캐리 비트를 설정하지 않는다. 이는 타겟 머신에서 캐리 비트 플래그를 일컫는 표에 "캐리" 칼럼에 표시되어 있다. 이 캐리 비트는 타겟 머신내의 여러 다른 플래그 비트들처럼 타겟 머신내에서는 소스 머신에 존재하는 상태와 동일한 방식으로 또는 동일한 조건으로 설정되지 않는다는 것에 유념하라. 여기서, 레지스터 위치 rC에 해당 값을 설정하려는 종래의 방법은 도 1에 도시한 바와 같이 분기 명령어를 다수 이용할 것이다. 이러한 종래의 방법 및 본 발명의 프로세스 둘다 에뮬레이션 소프트웨어에 의해 이용되는 캐리 비트를 적절히 표시하도록 동작한다.
명령어 [1]에 대하여, 그 명령어가 실행되면 rA > rB인 경우에는 "1"로 그리고 rA < rB인 경우에는 "0"으로 캐리 비트(즉, CPU 캐리 비트)를 설정한다. 또한, rC는 명목상 "0"일 수 있는 감산 결과를 포함한다. 위의 표에서 엔트리 "rC > 0," "rC = 0" 및 "rC < 0"은 결과 상태의 표시를 제공하려는 것이다. 명령어 [2](set_bit_on_zero)의 실행 이후에, 레지스터 rC의 상태는 변경되지 않으나, rX의 콘텐트는 2 개의 오퍼랜드, rA 및 rB가 그 콘텐트 또는 rC(0 제한되나 이 경우에는 아님)를 기초로 하여 동일하면 "1"로 설정된다. 명령어 [2]의 실행은 rC의 콘텐트에는 영향을 미치지 않는다. 또한, 명령어 [2]는 CPU 캐리 비트에 영향을 미치지 않는다. 명령어 [3](set_bit_on_not_zero)과 관련하여, rC는 rC가 0이 아닐 때마다, 즉, rA가 rB와 동일하지 않을 때마다 "1"로 설정된다. CPU 캐리 비트는 명령어 [3]에 의해 영향을 받지 않는다. 따라서, 여기서 rA > rB 또는 rA < rB이면, rC = 1이지만, rA = rB이면 rC = 0이다. 여기서, rX는 부등식에서 등가를 구별하는 구별 정보를 제공하도록 설정되고, 이는 rC와 CPU 캐리 비트 둘 다의 외부에서(즉, 그로부터 멀리서) 발생한다.
그 다음, (rC, rC, 0)으로 나타내는 인수(argument)로 명령어 [4](add_to_carry_immed)가 실행되며, "0"은 즉각적인 오퍼랜드이다. 나타낸 오퍼랜드를 이용하면, 연산 : rC + "CPU 캐리 비트"가 수행된다. 또한, CPU 캐리 비트도 설정되지만, 그 결과는 후속 프로세싱에서는 필요하지 않다. 위의 표 2에는 rA > rB이면, 이제 rC의 콘텐트는 "2"이고, rA = rB이면, rC의 콘텐트는 "1"이고, rA < rB이면 rC의 콘텐트도 "1"인 것을 알 수 있다. 이 단계에서, 다른 2 개의 경우(rA = rB 그리고 rA < rB)와 경우 rA > rB가 구별되는 rC의 표시가 제공되는 것이 적절하다.
오퍼랜드 "rC, rC, rX"로 명령어 [5](sub)의 실행하면, 지금 등가를 나타내는 rX의 콘텐트들이 rC로부터 감산되는데, 등가 케이스에 의해서는, "1"로부터 "1"을 감산하는 결과가 생겨 결과 "0"을 rC에 배치하므로 rA = rB 케이스가 rA < rB 케이스와 구별되게 되는 마지막 단계가 제공된다. 따라서, 위에서 설정된 명령어 시퀀스의 끝에서, 다음 결과들: rA > rB이면, rC = 2; rA < rB이면 rC =1; 그리고 rA = rB이면 rC = 0을 얻는다.
이러한 방식으로 그 후 임의의 분기 명령어의 실행 없이 상태 코드 세팅에 대한 바람직한 에뮬레이터 결과를 얻는다. 상술한 개념은 상태 코드 변경을 야기하는 임의의 소스 명령어의 에뮬레이션에 동등하게 적용 가능하다. 위의 예는 특히 캐리 비트의 세팅에 관한 것이나, 부호 및 오버플로우 비트와 같은 다른 타겟 아키텍쳐 상태 코드 비트에도 동등하게 적용될 수 있다.
에뮬레이션 환경에서 상태 코드 생성을 제공하는 본 발명의 또 다른 애플리케이션의 예로서, Add Logical(32 비트) 및 Add Logical(64 비트) 명령어를 아래에서 고려해보자. 위에서 설명한 Compare Logical 예와 마찬가지로, Add Logical(32 비트)의 rA 및 rB는 62 비트 타겟 아키텍쳐 환경을 위하여 0으로 확장된다 가정한다. 다음은 프로세서의 끝에서 위치 rC에 적절한 세팅을 제공하는 수도-어셈블리(pseudo-assembly) 코드의 시퀀스이다. 이하, c는 캐리 비트이다.
[1] add_set_carry rT, rA, rB
[2] move_from_carry rC
[3] double rC
[4] set_bit_on_not_zero rX, rT
[5] or rC, rC, rX
rT는 0
캐리 없음
cc = 0
rT는 0이 아님
캐리 없음
cc = 1
rT는 0
캐리 있음
cc = 2
rT는 0이 아님
캐리 있음
cc = 3
레지스터 콘텐트 레지스터 콘텐트 레지스터 콘텐트 레지스터 콘텐트
rC rT rX c rC rT rX c rC rT rX c rC rT rX c
[1] n/a 0 n/a 0 n/a 0
아님
n/a 0 n/a 0 n/a 1 n/a 0

n/a 1
[2] 0 0 n/a 0 0 0
아님
n/a 0 1 0 n/a 1 1 0

n/a 1
[3] 0 0 n/a 0 0 0
아님
n/a 0 2 0 n/a 1 2 0

n/a 1
[4] 0 0 0 0 0 0
아님
1 0 2 0 0 1 2 0

1 1
[5] 0 0 0 0 1 0
아님
1 0 2 0 0 1 3 0

1 1
일반적으로, 이러한 프로세스는 다음 단계들을 갖는데, 이들 단계 중 어느 것도 분기 명령어의 사용 또는 실행을 포함하지 않는다. 먼저, 하나 이상의 타겟 CPU 플래그 비트를 설정하고 에뮬레이터에 액세스 가능한 저장 위치(위의 rC와 같은 제 1 위치)에 결과를 배치하는 방식으로 소스 명령어 스트림에 있는 명령어를 미미킹하는(mimicking) 타겟 머신의 아키텍쳐의 명령어(도 2의 단계(100))가 실행된다. 다음으로, 하나 이상의 케이스 결과들을 구별하기 위하여 그 결과를 이용하여 또 다른 에뮬레이터 제어형 저장 위치(위의 rX와 같은 제 2 위치)에 비트를 설정하는 명령어(단계(105))가 실행된다. 다음으로, 상기 결과를 이용하여 그 결과를 하나 이상의 케이스 결과들을 구별하는 역할을 하는 보다 짧은 비트 구성(위의 예에서 하나의 비트)으로 재설정한다(단계(110)). 다음으로, 제 1 저장 위치를 이용하여 서로 다른 케이스 결과들 세트를 구별하는 결과를 생성하는 명령어가 실행된다(단계(115)). 마지막으로, 제 1 및 제 2 위치에 있는 결과들을 이용하여 적어도 3 개의 케이스들이 구별되는 2 개의 에뮬레이터 액세스 가능한 명령어들 중 하나로 표시를 제공하는 타겟 머신 명령어가 실행된다(단계(120)).
보다 일반적으로, 본 발명의 프로세스는 타겟 머신 분기 명령어를 이용하지 않고, 대신 타겟 머신 명령어를 이용하되, 타겟 머신이 실행되면 에뮬레이터가 상태 코드 에뮬레이션 위치로서 이용할 수 있는 위치에서 사용할 수 있게 되는 하나 이상의 결과 상태들을 구별하는 데에 이용되게 후속 실행되는 비 분기 명령어들에서 이용하는 타겟 머신 상태 코드의 제어를 야기하는 타겟 머신 명령어를 이용한다.
본 발명의 프로세스는 타겟 머신상에서 실행될 적절한 명령어 시퀀스의 생성과 소스 명령어 시퀀스가 생성되는 즉시 실행이 이루어지는 지는 "인터프리트형(interpretive)" 환경 또는 필요하면 실제 실행이 추후에 발생할 수도 있는 "컴파일형(compilation-like)" 환경에서든, 타겟 머신상에서 이들 명령어의 실제 실행을 둘 다 포함하는 것으로 구상된다.
임의의 이벤트에서 본 발명이 동작되는 환경이 도 3에 도시되어 있다. 본 발명은 도 3에 도시하는 하나 이상의 컴퓨터 엘리멘트들을 효과적으로 포함하는 데이터 처리 환경에서 동작된다. 특히, 컴퓨터(500)는 랜덤 액세스 메모리(501)내에 저장된 프로그램 및 데이터를 액세스하는 중앙 처리 장치(CPU : 520)를 포함한다. 메모리(510)는 통상 휘발성이며, 따라서 이러한 시스템들은 통상 회전식 마그네틱 메모리(540)의 비휘발성 메모리에 제공된다. 메모리(540)는 바람직하게는 비휘발성 마그네틱 디바이스이나, 다른 매체도 이용 가능하다. CPU(530)는 입출력 장치(530)를 통해서 터미널(550)과 같은 콘솔에서 사용자와 통신한다. 터미널(550)은 통상 하나 이상의 입출력 장치(530)를 통해서 컴퓨터(500)와 통신하는 여러 콘솔들 중 하나이다. 특히, 콘솔 유닛(550)은 하나 이상의, 도 5에 도시하는 CD-ROM(600)과 같은 유형의 판독 매체를 위한 디바이스를 자체에 포함하고 있는 것으로 도시되어 있다. 도 4에 도시하는 예인, 매체(600)는 마그네틱 매체, 광학 저장장치, 및 플래시 메모리 소자 또는 썸 드라이브(thumb drives) 등과 같은 임의의 종래의 디바이스들을 포함한다. 디스크(600)는 또한 본 명세서에서 논의한 명령어들에 대한 코드를 나타내는 데이터 비트를 전송하는 데에 이용되는 전기 신호의 형태로 보다 일반적인 배포 매체를 나타낸다. 이러한 전송된 신호는 수명이 짧지만, 코딩된 명령어 비트를 갖는 물리적 매체를 구성하면 신호의 목적지에서 영구적으로 캡쳐되게도 된다.
본 발명이 이용되는 전형적인 에뮬레이션 환경이 도 5에 도시되어 있다. (320)과 같은 에뮬레이터는 소스 머신(300)상에서 동작하도록 설계되는 머신 또는 어셈블리 언어 명령어들을 나타내는 입력 명령어 스트림(305)을 입력으로서 수신한다. 에뮬레이터(320)는 타겟 머신(310)내 메모리(315)를 사용하여 타겟 머신(310)상에서 실행할 수 있는 명령어의 스트림을 생성한다. 도 5는 특히 에뮬레이션 환경내에서의 동작을 도시하고 있으나, 본 발명은, 에뮬레이터(320)가 명령어들을 새로운 아키텍쳐로 번역할 뿐만 아니라 근본적으로 동시에 실행시키는 인터프리터로서 동작하는 상황을 구상할 수도 있다.
본 발명을 그 바람직한 실시예로서 상세히 설명하였으나, 당업자에게는 다양한 수정 및 변형이 자명할 것이다. 따라서, 이하 청구의 범위는 본 발명의 진정한 사상 및 범주내에 오는 이러한 수정 및 변형예 모두를 포함한다.

Claims (7)

  1. 타겟 머신 상에서 명령어들의 시퀀스들을 생성하기 위해 소스 머신으로부터 컴퓨터 명령어를 에뮬레이트하기 위한 방법으로서,
    타겟 머신에 의해 소스 머신으로부터 컴퓨터 명령어를 획득하는 단계 ? 상기 소스 머신은 상기 타겟 머신과 상이한 아키텍쳐를 가짐 ? ; 및
    상기 컴퓨터 명령어에 대한 타겟 머신 상태 코드에 대한 인코딩을 이끌어내도록 동작하는 타겟 머신 명령어들의 시퀀스를 생성하는 단계를 포함하고,
    상기 타겟 머신 명령어들의 시퀀스는 직접 상기 상태 코드를 계산하고, 분기 명령어들을 사용하지 않고 상기 상태 코드에 대한 복수의 가능한 결과들을 구별하기 위한 구별 정보를 제공하며,
    상기 구별 정보의 적어도 일부는 상기 상태 코드와 분리되는,
    소스 머신으로부터 컴퓨터 명령어를 에뮬레이트하기 위한 방법.
  2. 제 1 항에 있어서,
    상기 타겟 머신 상태 코드의 계산은 계산에서 캐리, 부호 및 오버플로우 코드들 중 적어도 하나를 이용하는 것을 포함하는,
    소스 머신으로부터 컴퓨터 명령어를 에뮬레이트하기 위한 방법.
  3. 제 1 항에 있어서,
    상기 방법은 상기 생성되는 타겟 머신 명령어들의 시퀀스를 실행하는 단계를 더 포함하는,
    소스 머신으로부터 컴퓨터 명령어를 에뮬레이트하기 위한 방법.
  4. 제 3 항에 있어서,
    상기 실행하는 단계는 상기 생성하는 단계와 동시에 발생하는,
    소스 머신으로부터 컴퓨터 명령어를 에뮬레이트하기 위한 방법.
  5. 제 1 항에 있어서,
    상기 생성하는 단계는:
    소스 명령어 스트림에 존재하는 명령어를 미미킹(mimicking)하되, 하나 이상의 타겟 CPU 플래그 비트들을 설정하고, 미미킹된 명령어의 결과를 제 1 저장 위치에 위치시키는 방식으로 미미킹하는 단계;
    하나 이상의 케이스 결과들을 구별하도록 상기 미미킹된 명령어의 결과를 이용하여 제 2 저장 위치에 적어도 하나의 비트를 설정하는 명령어를 실행시키는 단계;
    상기 케이스 결과들 중 적어도 하나를 구별하도록 기능하는 더 짧은 비트 구성을 제공하기 위해 상기 미미킹된 명령어의 결과를 이용하는 단계;
    상기 제 1 저장 위치를 사용하여 상이한 세트의 케이스 결과들을 구별하는 결과를 생성하는 명령어를 실행시키는 단계; 및
    상기 제 1 및 제 2 저장 위치들의 결과들을 이용하여 적어도 세 개의 케이스들이 구별되는 표시를 제공하는 명령어를 실행시키는 단계를 포함하고,
    상기 케이스들은 상기 소스 머신의 상태 코드들을 나타내는,
    소스 머신으로부터 컴퓨터 명령어를 에뮬레이트하기 위한 방법.
  6. 컴퓨터 시스템으로서,
    제 1 항 내지 제 5 항 중 어느 한 항에 따른 방법의 모든 단계들을 수행하기 위한 수단을 포함하는,
    컴퓨터 시스템.
  7. 컴퓨터 판독가능한 매체로서,
    컴퓨터 시스템 상에서 실행될 때, 제 1 항 내지 제 5 항 중 어느 한 항에 따른 방법의 모든 단계들을 수행하기 위한 명령어들을 포함하는,
    컴퓨터 판독가능한 매체.
KR1020097013258A 2007-01-30 2008-01-22 컴퓨터 아키텍쳐 상태 코드 세팅을 효율적으로 에뮬레이트하는 방법 KR101171423B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/668,623 2007-01-30
US11/668,623 US8713289B2 (en) 2007-01-30 2007-01-30 Efficiently emulating computer architecture condition code settings without executing branch instructions
PCT/EP2008/050725 WO2008092776A1 (en) 2007-01-30 2008-01-22 Method for efficiently emulating computer architecture condition code settings

Publications (2)

Publication Number Publication Date
KR20090115119A KR20090115119A (ko) 2009-11-04
KR101171423B1 true KR101171423B1 (ko) 2012-08-06

Family

ID=39241912

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097013258A KR101171423B1 (ko) 2007-01-30 2008-01-22 컴퓨터 아키텍쳐 상태 코드 세팅을 효율적으로 에뮬레이트하는 방법

Country Status (10)

Country Link
US (1) US8713289B2 (ko)
JP (1) JP4662087B2 (ko)
KR (1) KR101171423B1 (ko)
CN (1) CN101601011B (ko)
BR (1) BRPI0806390B1 (ko)
CA (1) CA2675635C (ko)
IL (1) IL198613A0 (ko)
MX (1) MX2009007876A (ko)
TW (1) TWI423126B (ko)
WO (1) WO2008092776A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9274797B2 (en) 2012-12-19 2016-03-01 International Business Machines Corporation Computer processor with instruction for execution based on available instruction sets
PT3427148T (pt) 2016-03-11 2022-03-23 Lzlabs Gmbh Compilador de módulo de carregamento

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060173931A1 (en) 2005-01-31 2006-08-03 James Broadhurst System and method for managing long names in an application programming interface

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58195963A (ja) 1982-05-12 1983-11-15 Hitachi Ltd デ−タ処理装置
US5313614A (en) * 1988-12-06 1994-05-17 At&T Bell Laboratories Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems
US5574927A (en) * 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
US5560013A (en) * 1994-12-06 1996-09-24 International Business Machines Corporation Method of using a target processor to execute programs of a source architecture that uses multiple address spaces
US5778211A (en) * 1996-02-15 1998-07-07 Sun Microsystems, Inc. Emulating a delayed exception on a digital computer having a corresponding precise exception mechanism
US5903760A (en) 1996-06-27 1999-05-11 Intel Corporation Method and apparatus for translating a conditional instruction compatible with a first instruction set architecture (ISA) into a conditional instruction compatible with a second ISA
US6049864A (en) * 1996-08-20 2000-04-11 Intel Corporation Method for scheduling a flag generating instruction and a subsequent instruction by executing the flag generating instruction in a microprocessor
US5774694A (en) * 1996-09-25 1998-06-30 Intel Corporation Method and apparatus for emulating status flag
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
US6807625B1 (en) * 2000-02-18 2004-10-19 Hewlett-Packard Development Company, L.P. Method and apparatus for efficiently generating, storing, and consuming arithmetic flags between producing and consuming macroinstructions when emulating with microinstructions
US20030093649A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton Flexible caching of translated code under emulation
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
JP2004152201A (ja) 2002-11-01 2004-05-27 Mitsubishi Electric Corp プロセッサ装置
US7219337B2 (en) 2003-03-06 2007-05-15 Northrop Grumman Corporation Direct instructions rendering emulation computer technique
GB0315350D0 (en) * 2003-06-28 2003-08-06 Transitive Ltd Method and apparatus for the emulation of high precision floating point instructions

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060173931A1 (en) 2005-01-31 2006-08-03 James Broadhurst System and method for managing long names in an application programming interface

Also Published As

Publication number Publication date
KR20090115119A (ko) 2009-11-04
TWI423126B (zh) 2014-01-11
CA2675635C (en) 2016-03-15
IL198613A0 (en) 2010-02-17
US8713289B2 (en) 2014-04-29
BRPI0806390A2 (pt) 2011-09-06
JP2010517154A (ja) 2010-05-20
US20080184014A1 (en) 2008-07-31
CA2675635A1 (en) 2008-08-07
BRPI0806390B1 (pt) 2019-08-06
MX2009007876A (es) 2009-07-31
JP4662087B2 (ja) 2011-03-30
CN101601011A (zh) 2009-12-09
TW200844852A (en) 2008-11-16
WO2008092776A1 (en) 2008-08-07
CN101601011B (zh) 2012-07-25

Similar Documents

Publication Publication Date Title
US7594094B2 (en) Move data facility with optional specifications
JP5668143B2 (ja) データ処理装置のデバッグ
US9804851B2 (en) Operand size control
US9081564B2 (en) Converting scalar operation to specific type of vector operation using modifier instruction
US20090210874A1 (en) Non-native program execution across multiple execution environments
Shi et al. Cardinal pill testing of system virtual machines
JP2018534671A (ja) 転送プレフィックス命令
US7581074B2 (en) Facilitating use of storage access keys to access storage
US20070118696A1 (en) Register tracking for speculative prefetching
US7171543B1 (en) Method and apparatus for executing a 32-bit application by confining the application to a 32-bit address space subset in a 64-bit processor
CN108701184B (zh) 用于硬件控制流施行的控制流传递的基于包的验证的方法和设备
KR101171423B1 (ko) 컴퓨터 아키텍쳐 상태 코드 세팅을 효율적으로 에뮬레이트하는 방법
US8090935B2 (en) Direct register access for host simulation
US7219335B1 (en) Method and apparatus for stack emulation during binary translation
US7765389B2 (en) Management of exceptions and hardware interruptions by an exception simulator
CN106990939B (zh) 修改数据处理单元的行为
US9389865B1 (en) Accelerated execution of target of execute instruction
US20240004658A1 (en) Instruction simulation device and method thereof
CN117555555B (zh) 例外处理方法、装置、电子设备及存储介质
JP2013539882A (ja) データ要素の条件付き選択
US20230259605A1 (en) Authentication code generation/checking instructions
Zurstraßen et al. Efficient RISC-V-on-x64 Floating Point Simulation
Watanabe et al. An SPU reference model for simulation, random test generation and verification
US20060208928A1 (en) Encoding scheme to resist code injection attacks

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20150625

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160628

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170628

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 7