KR101232343B1 - X86 가상머신을 지원하는 risc 프로세서 장치 및 방법 - Google Patents

X86 가상머신을 지원하는 risc 프로세서 장치 및 방법 Download PDF

Info

Publication number
KR101232343B1
KR101232343B1 KR1020107020814A KR20107020814A KR101232343B1 KR 101232343 B1 KR101232343 B1 KR 101232343B1 KR 1020107020814 A KR1020107020814 A KR 1020107020814A KR 20107020814 A KR20107020814 A KR 20107020814A KR 101232343 B1 KR101232343 B1 KR 101232343B1
Authority
KR
South Korea
Prior art keywords
instruction
register
virtual machine
address
bit
Prior art date
Application number
KR1020107020814A
Other languages
English (en)
Other versions
KR20100125331A (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 KR20100125331A publication Critical patent/KR20100125331A/ko
Application granted granted Critical
Publication of KR101232343B1 publication Critical patent/KR101232343B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30094Condition code generation, e.g. Carry, Zero flag
    • 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
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode

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)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

본 발명은 X86 가상머신을 지원하는 RISC 프로세서 장치 및 방법에 관한 것으로, 상기 RISC 프로세서는 명령어 모듈을 포함하고, 명령어 모듈은 X86 가상머신을 지원하는 가상머신 명령어 집합을 저장하는데 사용되고, 디코더는 가상머신 명령어 집합 명령어를 디코딩하는 과정 중 명령어의 가상머신 명령어 집합 모드를 구별하고, 명령어를 구별된 가상머신 명령어 집합 모드에 의해 디코딩한 후 고정점 연산소자 혹은 부동 소수점 연산소자에 출력하는데 사용되고, 고정점 연산소자는 디코더의 출력에 따라 가상머신 명령어 집합의 고정점 명령어에 대하여 처리를 진행하고, 실행 결과를 출력하는데 사용되고, 부동 소수점 연산소자는 디코더의 출력에 의해 가상머신 명령어 집합의 부동 소수점 명령어에 대하여 처리를 진행하고, 실행 결과를 출력하는데 사용된다. 본 발명은 RISC 프로세서가 가상머신을 운행하는 기능을 제고하였다.

Description

X86 가상머신을 지원하는 RISC 프로세서 장치 및 방법{RISC PROCESSOR APPARATUS AND METHOD FOR SUPPORTING X86 VIRTUAL MACHINE}
본 발명은 마이크로 프로세서 아키텍처 크로스-플랫폼 호환 기술분야에 관한 것으로, 특히 X86 가상머신을 지원하는 축소 명령어 집합 컴퓨터 (RISC) 프로세서 장치 및 방법에 관한 것이다.
센터 프로세서(CPU)는 마이크로 프로세서라고 약칭하며, 컴퓨터의 핵심 유닛이다. 마이크로 프로세서가 명령어 집합, 디자인 규범 (아키텍처)을 활용하는 것은 주요한 특징으로, 이는 컴퓨터가 활용할 주변기기와 응용 소프트웨어의 유형을 결정한다.
현재 세계적으로 비교적 유행되는 두 가지 프로세서 아키텍처로는 MIPS사의 MIPS32/64 명령어 집합을 대표로 하는 축소 명령어 집합 컴퓨터 (Reduced Instruction Set Computing, RISC) 프로세서 아키텍처와 Intel사의 복잡 명령어 집합 컴퓨터 (Complex Instruction Set Computing, CISC) 프로세서 아키텍처가 있다. CISC 프로세서 명령어는 수량이 많고, 일부 명령어는 상당히 복잡한 기능을 실행할 수 있는데, 일반적으로 많은 클록 주기로 실행해야 한다. RISC프로세서는 비교적 적은 수량의 사용 가능한 명령어를 사용하여, 비교적 높은 속율로 한 세트의 간단한 기능을 실행한다. 그러나 부동한 아키텍처를 활용한 프로세서에서 운행하는 프로그램 소프트웨어는 프로세서의 아키텍처에 대응하여 작성해야 하고, 통상적으로 X86의 응용 소프트웨어는 MIPS 명령어 집합의 RISC 프로세서 컴퓨터에서 운행할 수 없다. 즉 통상 말하는 호환 불가능하다.
그러나 컴퓨터 제조 업체들은 자체 제조한 아키텍처의 마이크로 프로세서에서 더욱 많은 기존의 소프트웨어를 운행하여 소프트웨어 개발 원가를 절감함과 동시에 시장 점유율을 최대화하는 목적에 도달하기를 원한다.
상기 문제를 해결하기 위하여, 가상머신이 출현했다. 일반적으로, 한가지 유형의 아키텍처를 구비한 프로세서 (CPU) 컴퓨터를 호스트라고 한다. 동시에 호스트의 에뮬레이션이 필요한, 아키텍처 유형과 상관없는 프로세서 (CPU) 환경을 타겟 머신이라고 한다. 한가지 응용 프로그램이 필요하되, 이러한 프로그램은 호스트가 1개 혹은 다수 개 응용 프로그램을 실행하도록 하고 소정 타겟 머신의 명령어에 응답하게 하고 타겟 머신을 위해 작성된 소프트웨어를 운행하도록 하는데, 이러한 프로그램을 가상머신이라고 한다.
현재, 기존의 가상머신은 SimOS, QEMU, Transmeta 등이 있는데, 기존의 가상머신은 각종 아키텍처의 커다란 차이로 인해 방대한 가상머신 운행 원가를 초래하고, 실행 효율이 낮아 실제 작업 중 활용이 어려운 점이 있다.
X86 가상머신으로부터 RISC까지의 이진 체계 명령어 번역 효율은 주로 RISC와 X86 아키텍처의 유사성에 의해 결정된다. 그러나 X86 아키텍처 중 고정점 연산 명령어가 플래그 비트 연산을 지원, X86 구조 중 80비트의 부동 소수점 수 조작과 부동 소수점 스택 연산, 세그먼트 베이스 어드레스 레지스터의 존재 등 특성을 포함한 X86 아키텍처의 많은 특성은 RISC 구조가 소유하지 못한 것이다. 이로 인해, RISC 프로세서의 X86 가상머신은 연산과정에서 상이한 아키텍처 명령어의 번역 문제로 인해 이진 체계 명령어 번역 효율이 떨어지고 연산속도를 제고할 수 없게 된다.
본 발명의 목적은 X86 가상머신을 지원하는 RISC 프로세서 장치 및 방법을 제공함으로써 RISC 프로세서의 기능을 제고하는 데 있다.
본 발명의 목적을 실현하기 위하여 제공한 X86가상머신을 지원하는 RISC프로세서에 있어서,
명령어 모듈, 디코더, 룩업 테이블, 고정점 연산소자 및 부동 소수점 연산소자를 포함하고, 그 중: 상기 명령어 모듈은 X86 가상머신을 지원하는 가상머신 명령어 집합을 저장하는데 사용되고, 상기 디코더는 상기 가상머신 명령어 집합 명령어를 디코딩하는 과정 중, 명령어의 가상머신 명령어 집합모드를 구별하고, 명령어를 구별된 가상머신 명령어 집합모드에 의해 디코딩 진행 후 고정점 연산소자 혹은 부동 소수점 연산소자로 출력하는데 사용되고, 상기 룩업 테이블은 X86 프로그램 중의 점프 어드레스와 MIPS 점프 어드레스를 저장하고, 상기 디코더의 출력에 의해 X86 프로그램 중 점프 어드레스부터 MIPS 점프 어드레스까지의 번역에 대한 신속한 룩업을 지원하는데 사용되고, 상기 고정점 연산소자는 디코더의 출력에 의해 가상머신 명령어 집합의 고정점 명령어에 대하여 처리를 진행하고, 실행 결과를 출력하는데 사용되고, 상기 부동 소수점 연산소자는 디코더의 출력에 의해 가상머신 명령어 집합의 부동 소수점 명령어에 대하여 처리를 진행하고, 실행 결과를 출력하는데 사용되는 것을 특징으로 한다.
상기에 있어서 메모리 액세스 실행 유닛, 메모리 및 데이터 경로를 더 포함하고, 상기 메모리 액세스 실행 유닛은 디코더의 출력에 의해, 데이터 경로를 통해, 레지스터와 메모리 사이의 데이터 전송을 완성하는 것을 특징으로 한다.
상기에 있어서 범용 물리 레지스터 파일을 더 포함하고, 상기 범용 물리 레지스터 파일은 오버플로 체크 레지스터, 상계/ 하계 어드레스 레지스터, 에뮬레이션 플래그 레지스터, 및 가상머신 모드 컨트롤 레지스터를 포함하고, 상기 오버플로 체크 레지스터는 RISC 프로세서를 에뮬레이션하는 스택 레지스터에 대하여 부동 소수점 방문을 진행 시, 스택 오버플로 예외를 체크한 결과를 저장하는데 사용되고, 상기 상계/ 하계 어드레스 레지스터는 X86 프로세서의 유한 메모리 액세스 메커니즘을 에뮬레이션 시 상계/ 하계로 사용되는 유효 어드레스를 저장하는데 사용되고, 상기 에뮬레이션 플래그 레지스터는 X86 프로세서의 플래그 레지스터 플래그 비트 실현을 에뮬레이션하는데 사용되고, 상기 가상머신 모드 컨트롤 레지스터는 1개 컨트롤 비트 플래그를 포함하고, 상기 컨트롤 비트 플래그가 1일 경우, 이때 상응한 명령어가 X86 가상머신 명령어 집합 모드에서 운행하고 있음을 표시하고, 상기 컨트롤 비트 플래그가 0일 경우, 이때 상응한 명령어가 비 X86 가상머신 명령어 집합 모드에서 운행하고 있음을 표시하는 것을 특징으로 한다.
상기에 있어서 부동 소수점 레지스터 파일을 더 포함하고, 상기 부동 소수점 레지스터 파일은 부동 소수점 컨트롤 레지스터, 부동 소수점 레지스터 스택, 및 제1 내지 제3 부동 소수점 레지스터를 포함하는 것을 특징으로 한다.
상기에 있어서, 상기 가상머신 명령어 집합은 메모리 액세스 확장 명령어, 전치 명령어, EFLAG 플래그 비트 관련 명령어, 부동 소수점 스택 관련 명령어 및 룩업 테이블 관련 명령어 중 1개 혹은 1개 이상의 조합을 포함하는 것을 특징으로 한다.
상기에 있어서, 상기 디코더는 명령어 처리 모듈 및 모드 식별 모듈을 포함하고, 상기 명령어 처리 모듈은 가상머신 명령어 집합의 명령어에 대하여 명령어 디코딩을 진행하고, 다음 고정점 연산소자 혹은 부동 소수점 연산소자에 출력하는데 사용되고, 상기 모드 식별 모듈은 명령어 디코딩 과정 중, 명령어의 가상머신 명령어 집합 모드를 구별하고, 상응한 처리를 진행하는데 사용되는 것을 특징으로 한다.
상기에 있어서, 상기 모드 식별 모듈은 다수배 저장 디코딩 모듈 및/또는 다수배 판독 디코딩 모듈을 포함하고, 상기 다수배 저장 디코딩 모듈은 입력한 명령어가 메모리 액세스 확장 명령어 중 저장 조작 명령어일 때, 소스 레지스터를 1개로부터 다수개 인접한 레지스터로 자동으로 확장하고, 메모리 액세스 실행 유닛 실행에 출력하는데 사용되고, 상기 다수배 판독 디코딩 모듈은 입력한 명령어가 메모리 액세스 확장 명령어 중 판독 조작 명령어일 때, 상기 판독 조작 명령어를 다수개 내부 조작 명령어로 디코딩하고, 타겟 레지스터를 1개로부터 다수개 인접한 레지스터로 자동으로 확장하고, 상기 다수개 내부 조작에 배분하고, 메모리 액세스 실행 유닛에 출력하여 실행하는데 사용되는 것을 특징으로 한다.
상기에 있어서, 상기 모드 식별 모듈은 전치 명령어 디코딩 모듈 및 플래그 비트 명령어 디코딩 모듈을 더 포함하고, 상기 플래그 비트 명령어 디코딩 모듈은 에뮬레이션 EFLAGS 작업 모드에 있는 EFLAG 플래그 비트 관련 명령어에 대하여 처리를 진행하고, 부동한 EFLAG 플래그 비트 관련 명령어에 의해, 에뮬레이션 플래그 레지스터를 그의 명령어의 소스 레지스터 및/또는 타겟 레지스터로 디코딩하는데 사용되고, 상기 전치 명령어 디코딩 모듈은 전치 명령어 후의 다수개 명령어가 X86 가상머신 명령어 집합 모드에 있음을 제시하는데 사용되는 것을 특징으로 한다.
상기에 있어서, 전치 명령어의 범위 파라미터가 n일 경우, 디코더는 전치 명령어 계수기를 더 포함하고, 전치 명령어 계수기는 전치 명령어 영향을 받고 전이 명령어가 출현하지 않는 명령어 시퀀스의 명령어 수를 기록하는데 사용되고, 상기 명령어 수와 상기 범위 파라미터는 동등한 것을 특징으로 한다.
상기에 있어서, 상기 디코더는 TOP 포인터 레지스터 및 룩업 테이블 모듈을 더 포함하고, 그 중, 상기 TOP 포인터 레지스터는 부동 소수점 스택 조작 포인터를 유지보호하고, 부동 소수점 스택의 스택 조작 포인터의 값을 저장하는데 사용되고, 상기 룩업 테이블 모듈은 룩업 테이블의 관련 명령어에 의해, 룩업 테이블을 이용하여 X86 소스 명령어 어드레스부터 MIPS 타겟 명령어 어드레스까지의 전환을 실현하는데 사용되는 것을 특징으로 한다.
상기에 있어서, 상기 고정점 연산소자는 플래그 리드 라이트 모듈, 플래그 연산 모듈, 예외 처리 모듈 및 전치 예외 컨트롤 레지스터를 포함하고, 상기 플래그 리드 라이트 모듈은 에뮬레이션 플래그 레지스터 플래그 비트의 값을 리드-라이트 하는데 사용되고, 상기 플래그 연산모듈은 연산 과정 중, RISC 프로세서가 X86 가상머신 작업 모드에 처해 있을 때, 연산 결과에 의해 에뮬레이션 플래그 레지스터 플래그 비트를 획득하고, 혹은 에뮬레이션 플래그 레지스터 플래그 비트 중 1개 비트 혹은 다수개 비트에 따라 분지 점프 명령어를 실행하는데 사용되고, 상기 예외 처리 모듈은 전치 명령어가 그 뒤에 연속 인접한 1개 명령어에만 영향 줄 경우, 만약 실행 예외가 발생하면 딜레이 슬롯 예외와 같은 방법을 활용하고, Cause레지스터의 bd비트를 1로 설정하고, 동시에 EPC가 전치 명령어를 가리키고, 예외 서비스 프로그램을 완성 후 다시 전치 명령어를 실행하는데 사용되고, 상기 전치 예외 컨트롤 레지스터는 예외가 발생한 명령어가 상기 전치 명령어의 영향을 받았는지 여부를 기록하고, 이상이 발생하여 프로세스가 인터럽트 될 경우, 현재 명령어의 집계를 저장하고, 이상이 종결되어 중단된 프로세스로 컴백할 때, 상기 집계에 의해 상기 중단된 프로세스를 회복하는데 사용되는 것을 특징으로 한다.
상기에 있어서, 상기 부동 소수점 연산소자는 포인터 조작모듈, 스택 오버플로 판단모듈 및 전환모듈을 포함하고, 상기 포인터 조작모듈은 상기 TOP 포인터 레지스터에 대하여 조작을 진행하고, 상기 부동 소수점 레지스터 스택 조작을 에뮬레이션 시, 상기 스택 조작 포인터의 스택 조작을 에뮬레이션하고, 스택 조작 포인터의 스테이지를 수정 및 모니터링하는데 사용되고, 상기 스택 오버플로 판단모듈은 지정한 부동 소수점 레지스터 스택 중 스택 레지스터를 체크하고, 스택 레지스터의 값에 의해 상기 오버플로 체크 레지스터에 대하여 조작을 진행하고, 부동 소수점 방문을 진행 시 스택 오버플로 예외를 체크하는데 사용되고, 상기 전환모듈은 확장 배정도 부동 소수점 데이터와 배정도 부동 소수점 데이터 사이의 상호 전환을 진행하는데 사용되는 것을 특징으로 한다.
RISC 프로세서 장치가 X86 가상머신을 지원하는 데이터 처리방법에 있어서, RISC 프로세서에서 RISC 프로세서의 작업모드를 X86 가상머신 작업모드로 설정하는 스텝A, 명령어를 판독하고, 명령어의 가상머신 명령어 집합모드를 구별하고, 명령어 디코딩 과정 중, 구별한 명령어의 가상머신 명령어 집합모드에 의해, 디코딩한 후 출력하는 스텝B, 상기 출력에 따라, 상응한 계산 혹은 액세스 처리를 진행하고, 실행 결과를 출력하는 스텝 C를 포함하는 것을 특징으로 한다.
상기에 있어서, RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 EFLAG 명령어 사용에 대한 지원일 경우, 상기 스텝A는 구체적으로, RISC 프로세서에서 RISC 프로세서의 작업 모드를 X86 가상머신 작업 모드로 설정하여, 에뮬레이션 플래그 레지스터의 사용이 가능함을 표시하는 스텝A1이고, 상기 스텝B는 구체적으로, 디코더는 연산이 에뮬레이션 EFLAGS 작업모드에 있음을 식별하고, 부동한 명령어에 의해 에뮬레이션 플래그 레지스터를 소스 레지스터 및/또는 타겟 레지스터로 디코딩하는 스텝B1이고, 상기 스텝C는 구체적으로, RISC 프로세서는 연산 과정 중, RISC 프로세서의 작업모드가 X86 가상머신 작업모드일 경우, 에뮬레이션 플래그 레지스터 플래그 비트의 값을 리드/라이트 하여, 연산 스테이지의 취득/저장을 실현하고, 또는 연산결과에 의해 에뮬레이션 플래그 레지스터 플래그 비트를 획득하고, 혹은 에뮬레이션 플래그 레지스터 플래그 비트 중 1개 비트 혹은 다수개 비트에 의해 분지 점프 명령어를 실행하는 스텝C1인 것을 특징으로 한다.
상기에 있어서, RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 X86 부동 소수점 포맷과 부동 소수점 스택에 대한 지원일 경우, 상기 스텝A는 구체적으로, 스택 이네이블 비트에 의해, 부동 소수점 레지스터를 선택하여 부동 소수점 레지스터 스택 조작을 에뮬레이션하는데 사용할지 여부를 결정하거나, 혹은 범용 레지스터를 설정하고, 그의 하위 8비트가 하위부터 상위까지 부동 소수점 레지스터 스택의 0~7번 스택 레지스터의 스테이지를 각기 표시하거나, 혹은 임의의 3개 범용 레지스터를 선택 사용하여 제1 부동 소수점 레지스터, 제2 부동 소수점 레지스터 및 제3 부동 소수점 레지스터로 하고, 64비트 부동 소수점 숫자와 80비트 부동 소수점 숫자의 포맷 전환 작업을 담당하는 스텝A2이고, 상기 스텝B는 구체적으로, 디코더에서 3비트인 TOP 포인터 레지스터에 스택 조작 포인터의 값을 저장하거나, 혹은 새로 증가한 스택 오버플로 판단 명령어를 디코딩하거나, 혹은 확장 배정도 부동 소수점 데이터와 배정도 부동 소수점 데이터의 전환 명령어에 대하여 디코딩하는 스텝B2이고, 상기 스텝C는 구체적으로, 부동 소수점 레지스터 스택 조작을 에뮬레이션 시, 포인터 레지스터에 대하여 조작을 진행하고, 스택 조작 포인터의 스택 조작을 에뮬레이션하고, 스택 조작 포인터의 스테이지를 수정 및 모니터링하거나, 혹은 지정한 부동 소수점 레지스터 스택 중 스택 레지스터를 체크하고, 스택 레지스터의 값에 의해 오버플로 체크 레지스터에 대하여 조작을 진행하고, 부동 소수점 스택 오버플로 체크를 진행하거나, 혹은 확장 배정도 부동 소수점 데이터와 배정도 부동 소수점 데이터 사이의 데이터 전환을 실행하는 스텝C2인 것을 특징으로 한다.
상기에 있어서, RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 X86 스토리지 스트럭쳐에 대한 지원일 경우, 상기 스텝A는 구체적으로, RISC 프로세서의 X86 가상머신에서 물리 레지스터 파일 중 2개 범용 레지스터를 각기 상계 어드레스 레지스터와 하계 어드레스 레지스터로 설정하는 스텝A3이고, 상기 스텝B는 구체적으로, X86 가상머신 명령어 집합부터 MIPS 명령어 집합까지 번역을 진행할 경우, 디코더는 명령어에 대하여 디코딩을 진행하고, RISC 프로세서에 의해 처리될 수 있는 이진 체계 코드를 획득하는 스텝B3이고, 상기 스텝C는 구체적으로, 고정점 연산소자는 디코딩 후의 메모리 액세스 명령어 중 상계 어드레스 레지스터에 저장한 상계 어드레스 및/또는 하계 어드레스 레지스터에 저장한 하계 어드레스에 의해, 명령어 연산수 어드레스와 명령어 어드레스의 유효성을 판단하고, 명령어 연산수 어드레스와 명령어 어드레스가 모두 유효 시, 메모리 액세스 조작을 실행하고, 아니면 어드레스 에러 예외를 유발하는 스텝C3인 것을 특징으로 한다.
상기에 있어서, RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 가상 메커니즘에 대한 지원일 경우, 상기 스텝A는 구체적으로, 전치 명령어를 판독하고, 명령어의 가상머신 명령어 집합 모드를 구별하거나, 혹은 프로세서가 다수배 데이터폭의 명령어를 페치하여 디코더에 입력하거나, 혹은 RISC 프로세서의 X86 가상머신이 가동 시 룩업 테이블을 초기화하고, 획득한 X86 가상머신 명령어 어드레스부터 MIPS 명령어 어드레스까지의 내용을 사용하여 룩업 테이블을 채우는 스텝A4이고, 상기 스텝B는 구체적으로, 명령어의 디코딩 과정 중, 구별한 명령어의 가상머신 명령어 집합 모드에 의해, 명령어를 구별된 가상머신 명령어 집합 모드에 의해 디코딩한 후 출력하거나, 혹은 디코더는 명령어 유형을 판단하고, 다수배 데이터폭의 명령어를 식별 및 디코딩하거나, 혹은 디코더가 룩업 테이블의 관련 명령어를 식별하는 스텝B4이고, 상기 스텝C는 구체적으로, 고정점 연산소자는 전치 명령어의 영향을 받는 명령어를 실행하고, 연산 결과에 따라 상응한 EFLAG플래그 비트를 계산하거나, 혹은 디코딩 후의 다수배 데이터폭의 명령어를 메모리 액세스 실행 유닛에 발송하여 조작을 실행하거나, 혹은 룩업 테이블의 관련 명령어를 실행하고, 타겟 명령어 어드레스의 값을 획득하거나 혹은 타겟 어드레스로 점프하여 실행하는 스텝C4인 것을 특징으로 한다.
본 발명의 RISC 프로세서 및 데이터 처리방법은
EFLAG 명령어 사용에 대한 지원, X86 부동 소수점 포맷과 부동 소수점 스택에 대한 지원, X86 스토리지 스트럭쳐에 대한 지원, 가상 메커니즘에 대한 지원을 제공하여, X86과 RISC 아키텍처의 시멘틱 차이를 감소하고, RISC 프로세서에서의 X86 가상머신에 대한 지원을 실현하고, RISC 프로세서에서의 X86 가상머신의 처리속도를 제고하며, RISC 프로세서의 기능을 제고한다.
도 1은 본 발명에 의한 X86 가상머신을 지원하는 RISC 프로세서 장치의 구조도이다.
도 2는 본 발명에 의한 X86 가상머신을 지원하는 RISC 프로세서의 데이터 처리방법의 흐름도이다.
본 발명의 목적, 기술방안, 기술효과가 더욱 명확하게 하기 위하여, 이하 첨부된 도면과 실시예를 결부하여, 본 발명의 X86 가상머신을 지원하는 RISC 프로세서 장치 및 방법에 대하여 진일보 상세한 설명을 진행한다. 또한, 이하에서 묘사할 구체적인 실시예는 본 발명에 대한 해석일 뿐 본 발명에 대한 제한이 아님을 자명해야 한다.
본 발명 실시예 중, MIPS64 명령어 집합의 RISC 프로세서를 실시예로 하여, 본 발명의 X86 가상머신을 지원하는 RISC 프로세서 장치 및 방법에 대하여 상세히 설명한다. 그러나 응당 해명할 것은 동 실시예는 본 발명에 대한 제한이 아니며 본 발명이 보호하려는 범위는 청구범위에 의해 한정된다.
본 발명에 의한 X86 가상머신을 지원하는 RISC 프로세서 장치 및 방법은, X86과 RISC 프로세서 아키텍처의 시멘틱 (semantic) 차이를 해결하고, RISC 프로세서에서 X86 프로세서 대한 호환성 지원을 실현하기 위하여, RISC 프로세서에서 아래와 같은 몇 가지 문제를 해결해야 한다.
1. EFLAG 명령어 사용에 대한 지원,
2. 부동 소수점 포맷과 부동 소수점 스택에 대한 지원,
3. 스토리지 스트럭쳐에 대한 지원,
4. 가상 메커니즘에 대한 지원.
도 1에서 도시되 바와 같이, 본 발명 중의 X86 가상머신을 지원하는 RISC 프로세서는, 명령어 모듈 (1), 디코더 (2), 룩업 테이블 (미 도시), 고정점 연산소자 (3), 범용 물리 레지스터 파일 (register file) (7), 부동 소수점 연산소자 (4), 부동 소수점 물리 레지스터 파일 (8), 메모리 액세스 실행 유닛 (5), 메모리 및 데이터 경로 (6) 등을 포함한다.
상기 명령어 모듈 (1)은 X86 가상머신을 지원하는 가상머신 명령어 집합을 저장하는데 사용되고, 상기 가상머신 명령어 집합은 메모리 액세스 확장 명령어, 전치 명령어, EFLAG 플래그 비트 관련 명령어, 부동 소수점 스택 관련 명령어, 룩업 테이블 관련 명령어 중 1개 혹은 다수개의 조합을 포함한다.
상기 디코더 (2)는 상기 가상머신 명령어 집합의 명령어를 디코딩하는 과정 중, 명령어의 가상머신 명령어 집합 모드를 구별하고, 구별된 가상머신 명령어 집합 모드에 따라 명령어에 대하여 디코딩을 진행한 고정점 연산소자 (3) 혹은 부동 소수점 연산소자 (4)에 출력하는데 사용된다.
상기 룩업 테이블은 X86 프로그램 중 점프 어드레스와 MIPS 점프 어드레스를 저장하고, 또한 상기 디코더의 출력에 따라 X86프로그램 중 점프 어드레스로부터 MIPS 점프 어드레스까지의 번역을 지원하고 신속한 룩업을 하는데 사용된다.
상기 고정점 연산소자 (3)은, 디코더 (2)의 출력에 의해 가상머신 명령어 집합의 고정점 명령어에 대하여 처리를 진행하고 실행 결과를 출력하는데 사용된다.
상기 부동 소수점 연산소자 (4)는, 디코더 (2)의 출력에 의해 가상머신 명령어 집합의 고정점 명령어에 대하여 처리를 진행하고 실행 결과를 출력하는데 사용된다.
상기 메모리 액세스 실행 유닛 (5)는, 디코더의 출력에 의해 데이터 경로를 통하여 레지스터와 메모리 사이의 데이터 전송을 완성한다.
상기 디코더 (2)는 명령어 처리 모듈 (21), 모드 식별 모듈 (24), TOP 포인터 레지스터 (22), 룩업 테이블 모듈 (23)을 포함하는 것이 바람직하다.
상기 명령어 처리 모듈은 가상머신 명령어 집합의 명령어에 대하여 명령어 디코딩을 진행하여 고정점 연산소자 (3) 혹은 부동 소수점 연산소자 (4) 혹은 메모리 액세스 실행 유닛 (5)으로 출력하는데 사용되고,
상기 모드 식별 모듈 (24)는 명령어 디코딩 과정 중에 명령어의 가상머신 명령어 집합 모드를 구별하고 상응한 처리를 진행하는데 사용된다.
상기 모드 식별 모듈 (24)는 다수배 저장 (Times more memory) 디코딩 모듈(244) 및/또는 다수배 판독 디코딩 모듈 (245)를 포함한다.
상기 다수배 저장 디코딩 모듈 (244)는 입력한 명령어가 메모리 액세스 확장 명령어 중의 저장 조작 명령어일 경우, 소스 레지스터를 1개로부터 다수개 인접한 레지스터로 확장하고, 메모리 액세스 실행 유닛 (5)로 출력하여 실행하는데 사용되고,
상기 다수배 판독 디코딩 모듈 (245)는 입력한 명령어가 메모리 액세스 확장 명령어 중 판독 조작 명령어일 때, 상기 판독 조작 명령어를 다수개 내부 조작 명령어로 디코딩 하고, 타겟 레지스터를 1개로부터 다수개 인접한 레지스터로 확장하여 상기 다수개 내부 조작에 배분하고, 메모리 액세스 실행 유닛 (5)로 출력하여 실행하는데 사용된다.
상기 모드 식별 모듈 (24)는 전치 명령어 디코딩 모듈 (241)과 플래그 비트 명령어 디코딩 모듈 (243)을 더 포함한다.
상기 플래그 비트 명령어 디코딩 모듈 (243)은 에뮬레이션 EFLAGS 작업 모드에 있는 EFLAG 플래그 비트 관련 명령어에 대하여 처리를 진행하고, 상이한 EFLAG 플래그 비트 관련 명령어에 의해 에뮬레이션 플래그 레지스터 (71)을 동 명령어의 소스 레지스터 및/또는 타겟 레지스터로 디코딩하는데 사용되고,
상기 전치 명령어 디코딩 모듈 (241)은 전치 명령어 후의 다수개 명령어가 X86 가상머신 명령어 집합 모드에 처하도록 지시하는데 사용되고, 진일보로 전치 명령어의 범위 파라미터가 n일 경우, 디코더 (2)는 전치 명령어 영향을 받으며 또한 전이 명령어가 발생하지 않는 명령어 시퀀스의 명령어 수를 기록하는데 사용되는 전치 명령어 계수기 (242)를 더 포함하고, 상기 명령어 수량과 상기 범위 파라미터는 같고,
상기 TOP포인터 레지스터 (22)는 부동 소수점 스택 조작 포인터를 유지보호하고, 부동 소수점 스택의 스택 조작 포인터의 값을 저장하는데 사용되고,
상기 룩업 테이블 모듈 (23)은 룩업 테이블 관련 명령어에 따라, 룩업 테이블을 이용하여 X86 소스 명령어 어드레스로부터 MIPS 타겟 명령어 어드레스까지의 전환을 실현하는데 사용된다.
상기 고정점 연산소자 (3)은 플래그 리드 라이트 모듈 (31), 플래그 연산 모듈 (32), 예외 처리 모듈 (34), 전치 예외 컨트롤 레지스터 (33)을 포함한다.
상기 플래그 리드 라이트 모듈 (31)은 에뮬레이션 플래그 레지스터 (71)의 플래그 비트의 값을 리드 및 라이트 하는데 사용되고,
상기 플래그 연산 모듈 (32)는 연산 과정 중에서 RISC 프로세서가 X86 가상머신 작업 모드에 처해 있을 때, 연산 결과에 의해 에뮬레이션 플래그 레지스터 플래그 비트를 획득, 혹은 에뮬레이션 플래그 레지스터 플래그 비트 중 1개 비트 혹은 다수개 비트에 의해 분지 점프 명령어를 실행하는데 사용되고,
상기 예외 처리 모듈 (34)는, 전치 명령어가 그 뒤에 인접한 1개 명령에만 영향을 줄 경우, 만약 실행 예외가 발생하면, 딜레이 슬롯 예외와 동일한 방법을 활용하여, Cause 레지스터의 bd 비트를 1로 설정하고, 동시에 EPC는 전치 명령어를 가리키게 하고, 예외 서비스 프로그램 완료 후 전치 명령어를 다시 실행하는데 사용된다.
상기 전치 예외 컨트롤 레지스터 (33)은 예외가 발생한 명령어가 상기 전치 명령어의 영향을 받는지 여부를 기록하고, 이상이 발생하여 프로세스를 중단할 경우, 현재 명령어의 집계를 저장하고, 이상이 종결되고 중단된 프로세스로 컴백할 경우, 상기 집계에 따라 상기 중단된 프로세스를 회복하는데 사용된다.
상기 범용 물리 레지스터 파일 (7)은 오버플로 체크 레지스터 (72), 상계/하계 어드레스 레지스터 (74), 에뮬레이션 플래그 레지스터 (71), 및 가상머신 모드 컨트롤 레지스터 (73)를 포함한다.
상기 오버플로 체크 레지스터 (72)는, RISC 프로세서를 에뮬레이션하는 스택 레지스터에서 부동 소수점 방문을 진행 시, 스택 오버플로 예외의 존재 여부를 체크한 결과를 저장하는데 사용되고,
상기 상계/하계 어드레스 레지스터 (74)는, X86 프로세서의 한계 메모리 액세스 메커니즘을 에뮬레이션할 때 상계/하계인 유효 어드레스를 저장하는데 사용되고,
상기 에뮬레이션 플래그 레지스터 (71)은 X86 프로세서의 플래그 레지스터 플래그 비트 실현을 에뮬레이션하는데 사용되고,
상기 가상머신 모드 컨트롤 레지스터 (73)은 1개 컨트롤 비트 플래그를 포함하고, 상기 컨트롤 비트 플래그가 1일 때, 이때 상응한 명령어는 X86 가상머신 명령어 집합 모드에서 운행하고 있음을 표시하고, 상기 컨트롤 비트 플래그가 0일 때, 이때 상응한 명령어는 X86 가상머신 명령어 집합 모드가 아닌 다른 모드에서 운행하고 있음을 표시하는데 사용된다.
상기 부동 소수점 연산소자 (4)는 포인터 조작 모듈 (41), 스택 오버플로 판단 모듈 (43), 전환 모듈 (42)를 포함한다.
상기 포인터 조작 모듈 (41)은, 상기 TOP포인터 레지스터에 대하여 조작을 실행하고, 상기 부동 소수점 레지스터 스택 (83)의 조작을 에뮬레이션할 때, 상기 스택 조작 포인터의 스택 조작을 에뮬레이션하고, 스택 조작 포인터의 스테이지를 수정 및 모니터링하는데 사용되고,
상기 스택 오버플로 판단 모듈 (43)은 지정한 부동 소수점 레지스터 스택 (83) 중의 스택 레지스터를 체크하고, 스택 레지스터의 값에 의해 오버플로 체크 레지스터 (72)에 대하여 조작을 진행하고, 부동 소수점 방문 시의 스택 오버플로 예외 체크를 진행하는데 사용되고,
상기 전환 모듈 (42)는 확장 배정도 (double precision) 부동 소수점 데이터와 배정도 부동 소수점 데이터 사이의 상호 전환을 진행하는데 사용된다.
상기 부동 소수점 레지스터 파일 (8)은 부동 소수점 컨트롤 레지스터 (81), 0~7번 부동 소수점 레지스터 스택 (83), 및 제1~3 부동 소수점 레지스터 (82)를 포함한다.
상기 제1~3 부동 소수점 레지스터 (82) 동 3개 레지스터는 상기 0~7번 부동 소수점 레지스터 스택 (83)과 교차 중첩 활용할 수 있다.
상기 메모리 액세스 실행 유닛 (5)는 병합 셀, 상계/하계 판단 모듈을 포함한다.
상기 병합 셀은 다수배 판독 디코딩 모듈 (244)가 메모리 판독 조작 명령어에 대하여 디코딩 한 후 실행 유닛이 실행하기 전에 다수개 내부 조작에 대하여 합병을 진행하는데 사용된다.
상기 상계/하계 판단 모듈은 한계 메모리 액세스 명령어를 지원할 때, 상계/하계 어드레스에 대하여 메모리 액세스 명령어가 포함하고 있는 어드레스에 대해 유효성 판단을 진행하는데 사용된다.
도 2에서 보이는 바와 같이, 본 발명의 목적을 실현하기 위하여 RISC 프로세서 장치가 X86 가상머신을 지원하는 데이터 처리방법을 더 제공하였고, 그 방법은 아래와 같은 스텝을 포함한다.
스텝 A에서, RISC 프로세서에서 RISC 프로세서의 작업 모드를 X86 가상머신 작업 모드로 설정하고,
스텝 B에서, 명령어를 판독하여 명령어의 가상머신 명령어 집합 모드를 구별하고, 명령어를 디코딩하는 과정 중에서, 구별한 명령어의 가상머신 명령어 집합 모드에 의하여 명령어를 구별된 가상머신 명령어 집합 모드에 따라 디코딩하여 출력하고,
스텝 C에서, 상기 출력에 의해 상응한 계산 혹은 액세스 처리를 진행하고, 실행 결과를 출력한다.
RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 EFLAG 명령어 사용에 대한 지원일 경우,
상기 스텝A는 구체적으로 하기와 같다.
스텝 A1은, RISC 프로세서에서 RISC 프로세서의 작업 모드를 X86 가상머신 작업 모드로 설정하고, 에뮬레이션 플래그 레지스터 (71) 사용이 가능함을 표시한다.
상기 스텝B는 구체적으로 하기와 같다.
스텝 B1에서, 디코더는 연산이 에뮬레이션 EFLAGS 작업 모드에 처해 있음을 식별하고, 다음 상이한 명령어에 의해 에뮬레이션 플래그 레지스터 (71)을 소스 레지스터 및/또는 타겟 레지스터로 디코딩한다.
상기 스텝C는 구체적으로 하기와 같다.
스텝 C1에서, RISC 프로세서는 연산 과정 중에 RISC 프로세서의 작업 모드가 X86 가상머신 작업 모드일 경우, 에뮬레이션 플래그 레지스터 (71) 플래그 비트의 값을 리드/라이트 하여 연산 스테이지의 획득/저장 및/또는 에뮬레이션 플래그 레지스터 (71) 플래그 비트의 값에 따라 제어를 진행하는 것을 실현한다.
RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 X86 부동 소수점 포맷과 부동 소수점 스택에 대한 지원일 경우,
상기 스텝A는 구체적으로 하기와 같다.
스텝 A2에 있어서, 스택 이네이블 비트에 의해 부동 소수점 레지스터를 선택하여 부동 소수점 레지스터 스택 (83) 조작의 에뮬레이션에 사용할지 여부를 결정, 혹은 범용 레지스터를 설정하여, 하위 8비트는 하위부터 상위까지 각기 부동 소수점 레지스터 스택 (83)의 0~7번 스택 레지스터의 상태를 표시, 또는 임의의 3개 범용 레지스터를 선택 사용하여 제1~3 부동 소수점 레지스터 (82)로 하고, 64비트 부동 소수점 숫자와 80비트 부동 소수점 숫자의 포맷 전환 작업을 담당한다.
상기 스텝B는 구체적으로 하기와 같다.
스텝 B2에 있어서, 디코더 중 3비트의 TOP포인터 레지스터에 스택 조작 포인터의 값을 저장, 또는 새로 추가한 스택 오버플로 판단 명령어에 대하여 디코딩을 진행, 또는 확장 배정도 부동 소수점 데이터와 배정도 부동 소수점 데이터의 전환에 대하여 명령어 디코딩 진행한다.
상기 스텝C는 구체적으로 하기와 같다.
스텝 C2에 있어서, 부동 소수점 레지스터 스택 (83)의 조작을 에뮬레이션할 때, 포인터 레지스터에 대하여 조작을 진행하고, 스택 조작 포인터의 스택 조작을 에뮬레이션하고, 스택 조작 포인터의 스테이지를 수정 및 모니터링, 또는 지정한 부동 소수점 레지스터 스택 (83) 중의 스택 레지스터를 체크하고, 스택 레지스터의 값에 의해 오버플로 체크 레지스터 (72)에 대하여 조작을 진행, 또는 확장 배정도 부동 소수점 데이터와 배정도 부동 소수점 데이터 사이의 데이터 전환을 실행한다.
RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 X86 스토리지 스트럭쳐에 대한 지원일 경우,
상기 스텝A는 구체적으로 하기와 같다.
스텝 A3에 있어서, RISC 프로세서의 X86 가상머신 중에 2개의 범용 레지스터를 설정하고 각각 상계/하계 어드레스 레지스터 (74)로 설정한다.
상기 스텝B는 구체적으로 하기와 같다.
스텝 B3에 있어서, X86 가상머신 명령어 집합부터 MIPS 명령어 집합까지의 번역을 진행할 경우, 디코더는 명령어에 대하여 디코딩을 진행하고, RISC 프로세서에 의해 처리될 수 있는 이진 체계 코드를 획득한다.
상기 스텝C는 구체적으로 하기와 같다.
스텝 C3에 있어서, 고정점 연산소자는 디코딩한 후의 메모리 액세스 명령어 중에서, 상계 어드레스 레지스터에 저장한 상계 어드레스 및/또는 하계 어드레스 레지스터에 저장한 하계 어드레스에 의해 명령어 조작수 어드레스와 명령어 어드레스의 유효성을 판단하고, 명령어 연산수수 어드레스와 명령어 어드레스가 모두 유효일 경우, 메모리 액세스 조작을 진행하고, 아니면 어드레스 에러 예외를 유발한다.
RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 가상 메커니즘에 대한 지원일 경우,
상기 스텝A는 구체적으로 하기와 같다.
스텝 A4에 있어서, 전치 명령어를 판독하고, 명령어의 가상머신 명령어 집합 모드를 구별, 혹은 프로세서가 다수배 데이터 너비의 명령어를 페치하여 디코더에 입력, 혹은 RISC 프로세서의 X86 가상머신을 가동 시, 룩업 테이블을 초기화하여, 획득한 X86 가상머신 명령어 어드레스로부터 MIPS 명령어 어드레스까지의 내용을 사용하여 룩업 테이블을 기입한다.
상기 스텝B는 구체적으로 하기와 같다.
스텝 B4에 있어서, 명령어 디코딩 과정 중, 구별한 명령어의 가상머신 명령어 집합 모드에 의하여, 구별된 가상머신 명령어 집합 모드에 의해 명령어를 디코딩한 후 출력, 혹은 디코더는 명령어 유형을 판단하고 다수배 데이터 너비의 명령어를 식별 및 디코딩, 혹은 디코더는 룩업 테이블 관련 명령어를 식별한다.
상기 스텝C는 구체적으로 하기와 같다.
스텝 C4에 있어서, 고정점 연산소자는 전치 명령어 영향을 받는 명령어를 실행하고, 또한 연산 결과에 따라 상응한 EFLAG 플래그 비트를 계산한다. 혹은 디코딩한 후의 다수배 데이터 너비의 명령어를 메모리 액세스 실행 유닛에 발송하여 조작을 실행한다. 혹은 룩업 테이블 관련 명령어를 실행하여 타겟 명령어 어드레스의 값을 획득하거나 혹은 타겟 어드레스로 점프하여 실행한다.
하기 상세한 묘사는, 프로세서가 X86 가상머신의 데이터 처리를 지원하는 과정이 EFLAG 명령어의 사용에 대한 지원일 경우 RISC 프로세서 장치가 X86 가상머신을 지원하는 데이터 처리방법의 과정이다.
EFLAG 명령어의 사용을 지원하기 위하여, 두 가지 방식을 제공한다. 한가지는 물리 레지스터 파일 중 각 물리 레지스터를 72비트로 확장하여, 64비트의 데이터 비트와 8비트의 플래그 비트를 포함한다. 연산 시, 데이터 부분과 플래그 부분을 함께 타겟 레지스터에 라이트 한다. 동시에 디코더 (2)에 1개 최신 플래그 비트 포인터 Reflag를 설정하고, 최신 플래그 비트와 결부한 범용 레지스터 로직 넘버드 번호를 지시한다. 다른 한가지는 물리 레지스터 파일에 내부 로직 레지스터를 추가 설정하여 X86의 EFLAG 플래그 비트를 실현하고, 각 EFLAG를 수정하는 각 연산 명령어에 대하여 모두 관련 신규 명령어를 증가하여 EFLAG를 수정한다.
상기 두 가지 방식에서, 첫 번째는 각 레지스터에 <<횡방향>>으로 EFLAG 비트를 증가하고, 두 번째 방법은 모든 레지스터의 <<종방향>>에서 1개 레지스터를 증가하여 EFLAG 비트를 보존한다.
1개일 실시예로, X86_EFLAGS 플래그 비트에 대한 지원을 실현하기 위하여, 본 발명의 X86 가상머신을 지원하는 RISC 프로세서 장치, 상기 에뮬레이션 플래그 레지스터 (71) (M-EFLAGS)는 X86 명령어 집합의 CISC 프로세서 플래그 레지스터 (EFLAGS)의 플래그 비트 실현을 에뮬레이션하는데 사용되고, 상기 레지스터의 하위 6 비트는 하위부터 상위까지 각기 CF비트, PF비트, AF비트, ZF비트, SF비트 및 OF비트를 표시한다.
하기 상세한 설명은 본 발명 X86 가상머신을 지원하는 RISC 프로세서의 레지스터 플래그 비트 처리과정이다. 이는 아래와 같은 스텝을 포함한다.
스텝 110에 있어서, RISC 프로세서 중 RISC 프로세서의 작업 모드를 X86 가상머신 작업 모드로 설정, 즉 에뮬레이션 플래그 레지스터 (71) 사용이 가능함을 표시하고, 디코더 (2)는 연산이 RISC 프로세서의 X86 가상머신 작업 모드에 처해 있음을 식별, 즉 에뮬레이션 EFLAGS 작업 모드 하에 있고, 다음 상이한 명령어에 따라 에뮬레이션 플래그 레지스터 71을 소스 레지스터 및/또는 타겟 레지스터로 디코딩하고,
에뮬레이션 플래그 레지스터 (M-EFLAGS)는 X86 명령어 집합의 플래그 레지스터 (EFLAGS) 플래그 비트의 실현을 에뮬레이션하고, 상기 레지스터의 하위 6 비트는 하위부터 상위까지 각기 CF비트, PF비트, AF비트, ZF비트, SF비트 및 OF비트를 표시한다.
에뮬레이션 플래그 레지스터 (71)가 사용 가능할 경우, 상기 연산이 RISC 프로세서의 X86 가상머신 작업 모드에 있음을 식별, 즉 에뮬레이션 EFLAGS 작업 모드 하에 있고, 실행 결과에 따라 상응한 에뮬레이션 플래그 레지스터 (71)의 값을 수정하고, 상이한 명령어에 의해 에뮬레이션 플래그 레지스터를 소스 레지스터 및/또는 타겟 레지스터로 디코딩함으로, 기존의 타겟 레지스터에 결과를 보존하지 않을 수 있다.
일 실시예로, 에뮬레이션 플래그 레지스터와 상관된 명령어가 에뮬레이션 플래그 레지스터의 플래그 비트를 수정 시, 상기 명령어 전에 상기 명령어가 RISC 프로세서의 X86 가상머신 작업 모드에 있음을 표시하는 전치 명령어 SETFLAG가 있을 경우, 만약 그 후의 명령어가 X86 가상머신 모드에 처해 있음을 표시한다.
명령어 포맷은 SETFLAG /에뮬레이션 EFLAGS작업 모드 전치 명령어.
상기 명령어 뒤에 인접한 1개 명령어는 에뮬레이션 EFLAGS 작업 모드에 처해 있음을 표시한다.
따라서 동 명령어가 실행될 경우, 실행 결과에만 의해 상응한 에뮬레이션 플래그 레지스터 (71)의 플래그 비트의 값을 수정할 뿐, 타겟 레지스터에 결과를 보존하지 않는다. 예를 들면 아래와 같다.
일반적인 MIPS명령어는:
ADD $5,$1,$2
1호 범용 레지스터와 2호 범용 레지스터 중의 값을 서로 가함을 표시하고, 결과는 5호 범용 레지스터에 보존한다.
에뮬레이션 플래그 레지스터 (71)의 플래그 비트를 수정하는 명령어는 하기와 같다.
SETFLAG
ADD $5,$1,$2
1호 범용 레지스터와 2호 범용 레지스터 중의 값을 서로 가함을 표시하고, 결과는 보존하지 않고, 결과에 의해 에뮬레이션 플래그 레지스터 중의 플래그 비트에 상응한 비트를 수정한다.
디코더 (2)의 입력 세트는 모든 가능한 32비트 인코드이고, 모든 합법 및 불법 명령어를 포함한다. 이런 방식에 대하여, 디코더 (2)는 합법 입력 SETFLAG를 새로 추가, 이는 상기 명령어 뒤에 인접한 1개 명령어가 RISC 프로세서의 X86 가상머신 작업 모드에 처해 있음을 표시한다. 즉 에뮬레이션 EFLAGS 작업 모드이다.
전치 명령어에 의해, 디코더 (2)가 전치 명령어 뒤의 명령어를 디코딩할 때, 해당 출력은 에뮬레이션 EFLAGS 작업 모드에 의해 내부 조작 코드를 조절하여 고정점 연산소자 (3)에 송신한다. 이때, 동 명령어의 목적 레지스터는 디코딩을 거쳐 에뮬레이션 플래그 레지스터 (M-EFLAGS)로 변하고, 그 중 1개 소스 레지스터도 에뮬레이션 플래그 레지스터 (M-EFLAGS)이다. 일부 연산은 일부분 에뮬레이션 플래그 레지스터 (M-EFLAGS)만 수정하므로 기존의 에뮬레이션 플래그 레지스터 (M-EFLAGS)를 고정점 연산 소자 3에 송신하는 것이 요구된다.
그 중, 상기 조절 내부 조작 코드가 포함한 리네임(rename), 즉 로직 레지스터부터 물리 레지스터까지의 매핑, 및 레지스터 포트에 대한 리드-라이트 등 조작 내용은 당업자에게 공지된 내용이기에, 본 발명에서 구체적으로 설명하지 않는다.
디코더 (2)는 디코딩 후, 명령어를 고정점 연산소자 (3)으로 출력하고, 고정점 연산소자 (3)은 내부 조작 코드를 판단하여, 만약 정상명령어일 경우, 정상 스텝에 따라 연산하고, 만약 에뮬레이션 EFLAGS 작업 모드일 경우, 우선 결과를 계산하고, 다음 계산 결과와 중간 결과에 따라 에뮬레이션 플래그 레지스터 (M-EFLAGS) 플래그 비트를 설정하고, 계산 결과는 타겟 레지스터에 보존하지 않을 수 있다.
일 실시예로, 본 발명에서 사용 빈도가 높은 에뮬레이션플래그 레지스터의 플래그 비트를 수정하는 명령어에 대하여, X86 명령어를 일 대 일로 대응 시키고, 이러한 1개 명령어는 1개가 기존의 2개 명령어 (1개는 SETFLAG, 다른 1개는 보편적인 MIPS명령어)와 등가 된다. 예를 들면 아래와 같다.
사용 빈도가 높은 에뮬레이션 플래그 레지스터의 플래그 비트를 수정하는 가법 명령어 (ADD)에 대하여, 명령어 X86ADD를 정의하고, 따라서,
X86ADD $5,$1,$2는
SETFLAG
ADD $5,$1,$2와 등가 된다.
이러한 사용 빈도가 높은 명령어는, 디코딩 시 싱글 명령어 슬롯을 배분하고, 기능 소자가 이러한 명령어를 식별해 낸 후, 생성된 결과는 타겟 레지스터에 송신하지 않고, 결과에 따라 상응한 에뮬레이션 플래그 레지스터 (M-EFLAGS)의 플래그 비트를 생성하고, 플래그 비트를 에뮬레이션 플래그 레지스터 (M-EFLAGS)에 송신한다.
스텝 120에 있어서, RISC 프로세서는 연산 과정 중 RISC 프로세서가 X86 가상머신 작업 모드에 처할 경우, 에뮬레이션 플래그 레지스터 플래그 비트의 값, 및/또는 에뮬레이션 플래그 레지스터 플래그 비트에 따른 값을 리드/라이트하고, 제어를 진행한다.
상기 스텝 120에서, 에뮬레이션 플래그 레지스터의 플래그 비트 값에 대한 리드/라이트는 아래와 같은 스텝을 포함한다.
스텝 121에 있어서, RISC 프로세서가 X86 가상머신 작업 모드에 처할 경우, 1개 비트 혹은 다수개 비트 에뮬레이션 플래그 레지스터의 플래그 비트 값을 페치하고, 그 중 8비트 마스크 (mask) 값에 의해 에뮬레이션 플래그 레지스터 중 1개 비트 혹은 다수개 비트에 대한 페치를 제어하고, 페치한 에뮬레이션 플래그 레지스터 (71)의 플래그 비트 값은 타겟 레지스터에 저장한다.
스텝 122에 있어서, RISC 프로세서가 X86 가상머신 작업 모드에 처할 경우, 1개 비트 혹은 다수개 비트 에뮬레이션 플래그 레지스터의 플래그 비트 값을 수정하고, 그 중 8비트 마스크 (mask) 값에 의해 에뮬레이션 플래그 레지스터 중 1개 비트 혹은 다수개 비트에 대한 수정을 제어하여 에뮬레이션 플래그 레지스터에 대하여 수정을 진행한다.
일 실시예로, 본 발명 실시예는 2개 명령어 MTFLAG와 MFFLAG를 통하여 에뮬레이션 플래그 레지스터의 플래그 비트 값을 수정 혹은 판독하고, 이들은 8비트 마스크 (mask)를 사용하여 에뮬레이션 플래그 레지스터의 상응한 플래그 비트를 수정 혹은 판독하고, 이들은 각기 에뮬레이션 플래그 레지스터 플래그 비트의 값을 라이트 하거나 에뮬레이션 플래그 레지스터의 플래그 비트 값을 리드하여 지정한 범용 레지스터에 저장할 수 있다.
MTFLAG 명령어는 1개 비트 혹은 다수개 비트 에뮬레이션 플래그 레지스터 (M-EFLAGS) 플래그 비트의 값에 대한 페치를 실현하고, 명령어 중 8비트 마스크 (mask) 값 (즉시 데이터로 표시)에 의해 에뮬레이션 플래그 레지스터 중 1개 비트 혹은 다수개 비트에 대한 페치를 제어하고, 페치한 에뮬레이션 플래그 레지스터 (M-EFLAGS) 플래그 비트의 값은 타겟 레지스터 GPR[rt]에 저장한다.
마스크 (mask)로부터 에뮬레이션 플래그 레지스터 중 플래그 비트의 패치는 아래와 같은 관계식으로 표시한다.
GPR[rt] M-EFLAGS & mask
예를 들면, 마스크 (mask) 값이 0x00000100이면, 에뮬레이션 플래그 레지스터 (M-EFLAGS) 제2 비트, 즉 AF 비트의 내용을 페치하여 타겟 레지스터 GPR[rt]에 저장한다.
MTFLAG 명령어는 직접 1개 비트 혹은 다수개 비트의 에뮬레이션 플래그 레지스터 (M-EFLAGS) 플래그 비트의 값을 수정하고, 명령어 중의 8비트 마스크 (mask) 값 (즉시 데이터로 표시)에 의해 에뮬레이션 플래그 레지스터 (M-EFLAGS) 중 1개 비트 혹은 다수개 비트에 대한 수정을 제어하고, GPR[rs] 소스 레지스터 중의 값을 사용하여 에뮬레이션 플래그 레지스터 (M-EFLAGS)에 대하여 수정을 진행한다.
마스크 (mask)로 에뮬레이션 플래그 레지스터 (M-EFLAGS) 중의 플래그 비트에 대한 수정을 제어하는 부분은 아래와 같은 관계식으로 표시한다.
M-EFLAGS & mask GPR[rs]
예를 들면, GPR[rs] 하위 8비트의 내용은 0x00010010이고, 마스크 (mask) 필드의 값이 0x00110011이면, 동 명령어는 에뮬레이션 플래그 레지스터 (M-EFLAGS) 중 CF, PF, SF및 OF 비트를 수정하고, 동 4개 비트의 값을 각기 0, 1, 1 및 0으로 설정한다.
상기 스텝 120에서, 상기 제어과정은 아래와 같은 스텝을 포함한다.
스텝 121'에 있어서, 연산 결과에 의해 에뮬레이션 플래그 레지스터 (M-EFLAG)의 플래그 비트를 획득한다.
예를 들면, 에뮬레이션 플래그 레지스터 (M-EFLAG)의 플래그 비트에 의해 직접 연산한 명령어는 X86ADD 명령어 등이 있다.
x86ADD / EFLAGS 비트의 32비트 가법에만 영향 준다.
명령어 포맷은,
X86ADD rs, rt
X86ADD 명령어는 GPR [rs] 레지스터 중 32비트의 정수와 GPR [rt] 레지스터 중 32비트 정수를 서로 가하는 것을 실현하고, 32비트의 결과를 발생하고, 결과는 보존하지 않고, 결과에 따라 에뮬레이션 플래그 레지스터 (M-EFLAGS)의 OF/SF/ZF/AF/PF 비트 수정만 진행한다.
스텝 122'에 있어서, 에뮬레이션 플래그 레지스터 (M-EFLAG)의 플래그 비트 중 1개 비트 혹은 다수개 비트에 의해 분지 점프 명령어를 실행한다.
예를 들면, X86J M-EFLAGS 조건 전이
명령어 포맷은:
X86J.fmt offset
X86J 명령어는 EFLAGS의 임의 개 비트에 대한 비교를 실현하고, 상응한 조건에 따라 프로세서에 관련된 점프를 진행한다.
그 중, 상이한 명령어 후치 (fmt)는 상이한 조건을 대표한다. 예를 들면, X86J.a fmt=0은 CF=0 및 ZF=0 일 경우 점프를 진행함을 표시한다.
MIPS64 명령어 집합의 32비트 명령어 코드의 상위 6비트 (31bit: 26bit)는 opcode 도메인이다. 그 중, SPECIAL2 (opcode은 011100) 명령어 슬롯은 MIPS의 규정에 의해 유저가 자주적으로 정의할 수 있다. 본 발명의 실시예에서 새로 추가한 명령어는 전부 기존 MIPS64 명령어 집합 중에 보류한 SPECIAL2 엠프티 슬롯의 값을 이용하여 실현한다.
하기, 프로세서의 X86 가상머신의 데이터 처리에 대한 지원이 X86 부동 소수점 포맷과 부동 소수점 스택에 대한 지원일 경우, RISC 프로세서 장치가 X86 가상머신을 지원하는 데이터 처리 방법에 대하여 상세하게 설명하도록 한다.
X86은 1개 특수한 연산소자를 제공하여 80비트 부동 소수점 정도를 지원하고, 또한 스택 조작 방식을 채용함으로. 이러한 것은 RISC 프로세서와 비교적 큰 차이가 있다. 부동 소수점 포맷과 부동 소수점 스택에 대한 지원을 실현하기 위하여, 본 발명은 64비트 부동 소수점 수와 80비트 부동 소수점 수 사이의 전환 명령어 3개를 추가 설정하였고, 80비트 부동 소수점 수를 64비트 부동 소수점 수로 전환하는데 사용되는 1개 명령어를 설정하고, 64비트 부동 소수점 수를 80비트 부동 소수점 수로 전환하는데 사용되는 2개 명령어를 설정하였다.
일 실시예로, MIPS 명령어 집합을 포함한 RISC 물리 레지스터 파일의 32개 범용 부동 소수점 레지스터에서 동적으로 임의의 3개 범용 레지스터를 선택하여 제1~3 부동 소수점 레지스터 (82)로 하고, 전환 작업을 담당하도록 한다. 전환 작업 완료 후, 상기 3개 범용 레지스터는 기타 범용 레지스터와 구별 없이 사용될 수 있다.
그 중:
상기 제1 부동 소수점 레지스터는 확장 배정도 부동 소수점 데이터의 부호 비트와 스테이지 (stage)를 저장하는데 사용되고, 상기 레지스터의 상위 16비트를 점용한다.
상기 제2 부동 소수점 레지스터는 확장 배정도 부동 소수점 데이터의 가수 (Mantissa) 부분을 저장하는데 사용되고, 총 64비트이다.
상기 제3 부동 소수점 레지스터는 배정도 부동 소수점 데이터를 저장하는데 사용된다.
프로세서가 X86 가상머신의 데이터 처리에 대한 지원이 X86 부동 소수점 포맷과 부동 소수점 스택에 대한 지원일 경우, RISC 프로세서 장치가 X86 가상머신을 지원하는 데이터 처리 방법은 아래와 같은 스텝을 포함한다.
스텝 210에 있어서, 메모리 중 80비트 확장 배정도 부동 소수점 데이터를 부호 비트와 스테이지 (stage) 부분 및 가수 부분으로 분할하고, 상이한 제1 부동 소수점 레지스터와 제2 부동 소수점 레지스터에 각기 저장하고, 부동 소수점 연산소자 (4)를 통하여 64비트 배정도 부동 소수점 데이터로 전환하고, 제3 부동 소수점 레지스터에 저장한다.
스텝 210은 구체적으로 아래와 같은 스텝을 포함한다.
스텝 211에 있어서, 메모리 중의 80비트의 확장 배정도 부동 소수점 데이터를 부호 비트와 스테이지 (stage) 부분 및 가수 부분으로 분할한다.
80비트 부동 소수점 데이터의 제64 비트 위치에서 분할하고, 제80비트부터 제64비트까지 제1 부분 (총 16비트)으로 하고, 제63비트부터 제0비트까지 제2 부분 (총 64비트)으로 한다. 분할 후, 유저는 한가지 리드인 방식 (MIPS는 여러 가지 리드인 방식을 제공)을 선택하고, 두 부분을 각기 2개의 부동 소수점 레지스터 $f(i), $f(j)에로 리드 인한다.
스텝 212에 있어서, 부동 소수점 레지스터 $f(i)에 80비트의 확장 배정도 부동 소수점 데이터의 부호 비트와 스테이지 (stage)를 저장하고, 동 레지스터의 하위 16비트를 점용한다.
스텝 213에 있어서, 부동 소수점 레지스터 $f(j)에 80비트 확장 배정도 부동 소수점 데이터의 가수 부분 총 64비트를 저장한다.
스텝 214에 있어서, 부동 소수점 레지스터 $f(i)와 부동 소수점 레지스터 $f(j)을 소스 레지스터로 하고, 부동 소수점 레지스터 $f(t)를 타겟 레지스터로 하여, 부동 소수점 레지스터 $f(i)와 부동 소수점 레지스터 $f(j)에 저장한 80비트의 확장 배정도 부동 소수점 데이터를 64비트 배정도 부동 소수점 데이터로 전환한다.
다른 실시예로, 상기 전환은 명령어 (1)을 통하여 실행한다.
CVT.D.LD $f(t), $f(i), $f(j) //*확장 배정도를 배정도로 전환 (1)
MIPS64 명령어 집합의 32비트 명령어 코드의 상위 6비트 (31bit: 26bit)는 opcode 도메인이다. 그 중, SPECIAL2 (opcode011100) 명령어 슬롯은 MIPS의 규정에 따라 유저가 자체로 정의한다. 본 발명 실시예에서는 기존 MIPS64 명령어 집합에서 보류한 SPECIAL2 엠프티 슬롯의 값을 이용하여 정의한다.
식 (1)은 $f(i), $f(j) 2개 스택 레지스터가 표시하는 확장 배정도 데이터를 배정도 수로 전환하여, 스택 레지스터 $f(t)에 저장함을 표시한다.
출력한 64비트 데이터를 부동 소수점 레지스터 $f(t)에 저장하여 64비트의 배정도 부동 소수점 데이터를 획득한다.
스텝 220에 있어서, 제3 부동 소수점 레지스터 중 64비트의 배정도 부동 소수점 데이터에서 부호 비트와 스테이지 (stage) 부분 및 가수 부분을 페치하고, 부동 소수점 연산소자 (4)를 통하여 80비트 부동 소수점 데이터의 부호 비트와 스테이지 (stage) 부분 및 80비트 부동 소수점 데이터의 가수 부분으로 전환하고, 또한 제1 부동 소수점 레지스터와 제2 부동 소수점 레지스터에 각기 저장하고, 2개 레지스터를 이용하여 80비트의 확장 배정도 부동 소수점 데이터를 함께 표시함으로써 80비트의 부동 소수점 데이터를 획득한다.
스텝 220은 구체적으로 아래와 같은 스텝을 포함한다.
스텝 221에 있어서, 64비트의 배정도 부동 소수점 데이터를 부동 소수점 레지스터 $f(t)에 저장하고,
스텝 222에 있어서, 부동 소수점 레지스터 $f(t)에서 배정도 부동 소수점 데이터의 부호 비트와 스테이지 (stage) 부분 (총 11비트)을 페치하고, 80비트의 확장 배정도 부동 소수점 데이터의 부호 비트와 스테이지 (stage) 부분 (총 16비트)으로 저장한다.
다른 실시예로, 상기 전환은 아래와 같은 명령어(2)를 통하여 실행된다.
CVT.UD.D $f(i), $f(t) //*배정도를 확장 배정도의 상위 비트로 전환 (2)
부동 소수점 레지스터 $f(t)가 표시하는 배정도 수를 확장 배정도 수의 상위 16비트로 전환하고 $f(i)에 저장한다.
전환 후의 스테이지 (stage)에 대하여 0 확장을 진행하여 64비트의 부동 소수점 데이터를 획득한다. 타겟 레지스터는 64비트이므로 사실상 여기에서 16비트의 데이터가 수용된다. 그러나 64비트의 타겟 레지스터 $f(i)에 저장하기 위하여, 반드시 16비트 이상의 48비트에 대하여 0 확장을 진행하고, 부동 소수점 레지스터 $f(i)에 저장한다.
스텝 223에 있어서, 부동 소수점 레지스터 $f(t)의 가수 부분의 53비트를 페치하여, 80비트의 부동 소수점 데이터의 가수 부분 64비트로 전환하고, 부동 소수점 레지스터 $f(j)에 저장한다.
페치 작업은 부동 소수점 연산소자 (4)에서 완성되고, 페치한 53비트의 데이터를 80비트의 부동 소수점 데이터의 가수 부분 64비트로 전환한다.
일 실시예로, 상기 전환은 명령어 (3)을 통하여 실행된다.
CVT.LD.D $f(j), $f(t) //*배정도를 확장 배정도 로어 비트로 전환 (3)
부동 소수점 레지스터 $f(t)가 표시하는 배정도 수를 확장 배정도 수의 하위 64비트로 전환하고 부동 소수점 레지스터 $f(j) 저장한다.
상기 페치 및 전환은 IEEE 754 표준의 관련 규정에 따라 진행하고, 동 분야의 당업자라면 명령어 (2)에 의해 본 발명을 실현할 수 있으므로, 본 발명에서는 상세하게 묘사하지 않는다.
전환 후의 가수는 부동 소수점 레지스터 $f(j)에 저장한다.
스텝 224에 있어서, 부동 소수점 레지스터 $f(i)의 값을 부호 비트와 스테이지 (stage)로 하고, 부동 소수점 레지스터 $f(j)의 값을 가수로 하여, 80비트의 확장 배정도 부동 소수점 데이터를 획득한다.
본 발명의 부동 소수점 데이터 전환은 X86아키텍처가 아닌 프로세서가 X86 중의 특수 80비트 부동 소수점 데이터 유형을 지원하도록 하여, 가상머신의 이진 체계 번역 작업이 편리하도록 하고, 가상머신 효율을 제고하고, 프로세서의 호환성을 제고한다.
또한, X86 구조에서 부분적 부동 소수점 명령어가 제공한 부동 소수점 레지스터 번호는 상대값으로, 반드시 부동 소수점 상태 어(status word) 중의 부동 소수점 순환 스택의 톱 스택 포인터 TOP와 서로 가한 후에야만 진정한 부동 소수점 레지스터 번호로 된다. 이 문제를 해결하기 위하여, 본 발명은 디코더 (2)에 TOP포인터 레지스터 (22)를 설정하고, 부동 소수점 물리 레지스터 파일 중 부동 소수점 컨트롤 레지스터 (81)에 설정하고 스택 이네이블 시그널을 유지보호하고, 8개 부동 소수점 레지스터를 선택하여 부동 소수점 스택을 에뮬레이션할지 여부를 결정하고, 만약 스택 이네이블이 설정되면 상응한 부동 소수점 명령어 연산에서 레지스터 번호가 8보다 작은 레지스터는 디코딩 시 TOP의 값에 따라 자체의 소스 혹은 타겟 로직 레지스터 번호를 수정하고, 또한 명령어의 내용에 따라 TOP값을 수정한 후, 프로세서에 발송한다. 만약 스택 이네이블 비트가 0으로 클리어되면, 연산 과정에서 레지스터 에뮬레이션 스택이 존재하지 않은 것으로 판단하고 기존의 작업 스텝에 따라 정상적으로 진행한다.
상기 부동 소수점 컨트롤 레지스터 (81)은 부동 소수점 레지스터 파일 (8)을 이용하여 부동 소수점 레지스터 스택 (83)에 대한 에뮬레이션을 이네이블 혹은 금지하는 것을 제어하는데 사용된다.
이는 1개 스택 이네이블 비트를 유지보호하고, 이네이블 비트가 1로 설정되면, 프로세서가 X86 프로세서의 부동 소수점 레지스터 스택 조작을 에뮬레이션함을 표시하고, 이네이블 비트가 0으로 설정되면, 프로세서가 X86 프로세서의 부동 소수점 레지스터 스택 조작을 에뮬레이션하지 않음을 표시한다.
본 발명 실시예 중, RISC 프로세서를 이용하여 0~31로 표기한 32개 기존의 부동 소수점 레지스터를 이용하여, X86 프로세서의 부동 소수점 레지스터 스택 조작을 에뮬레이션 한다.
상기 TOP 포인터 레지스터 (22)는 1개 TOP 포인터 (즉 스택 조작 포인터)를 유지보호하고, TOP 포인터의 값을 저장하는데 사용되고, 동 TOP 포인터는 리드(read), 라이트 (write), 1을 덧셈 (add), 1을 뺄셈 (subtract) 등이 가능하다.
상기 포인터 조작 모듈 (41)은 포인터 레지스터에 대하여 조작을 진행하고, 부동 소수점 레지스터 스택 조작을 에뮬레이션 시, 포인터 레지스터의 스택 조작 포인터의 스택 조작을 에뮬레이션하고, 스택 조작 포인터의 스테이지를 수정 및 모니터링하는데 사용된다.
일 실시예로, 만약 부동 소수점 컨트롤 레지스터 (81) 중의 스택 이네이블 비트가 설정되면, 32개 부동 소수점 레지스터 중 8개 레지스터를 선택하여 X86 프로세서의 부동 소수점 레지스터 스택의 스택 레지스터를 에뮬레이션하는데 사용하고, 시리얼 넘버는 0~7이다.
부동 소수점 컨트롤 레지스터 (81) 중 스택 이네이블 비트가 1로 설정되면 연산 과정에서 사용되고, 레지스터가 에뮬레이션한 부동 소수점 레지스터 스택이 존재함을 표시하고, 이러할 경우 모든 부동 소수점 연산 명령어에서 사용되는 넘버가 8 이하인 레지스터는 전부 부동 소수점 레지스터 스택 (83)의 스택 레지스터로 사용되고, X86 프로세서의 부동 소수점 레지스터 스택을 에뮬레이션한다.
그 후, 포인터 조작 모듈은 TOP 포인터를 사용하여 스택 레지스터 번호에 대하여 전환을 진행한다. 즉 유저가 보게 되는 부동 소수점 레지스터 번호를 프로그램이 사용하는 부동 소수점 레지스터 번호와 전환을 진행한다. 예를 들면, 레지스터 번호는 톱 스택으로부터 제i개 유닛 떨어져 있는 레지스터 ST(i)에 TOP 포인터값을 덧셈한 것이다. 만약 TOP 포인터값이 2이면, ST(0)는 제2 레지스터이고, ST(1)은 제3 레지스터이다. 만약 오버플로에도 상응한 처리과정이 있어 상기 레지스터들이 순환 스택을 형성하게 되면, 본 발명이 실현하려는 x86 중 부동 소수점 레지스터 스택의 기능을 에뮬레이션하는 것을 완성할 수 있다. 다음 후속 작업을 진행하고, 후속 작업은 스택 이네이블을 설정하지 않은 것과 같다.
만약 부동 소수점 컨트롤 레지스터 (81) 중 스택 이네이블 비트가 0으로 설정되면, 즉 0으로 클리어되면, 연산 과정에서 레지스터 에뮬레이션 스택이 존재하지 않는 것으로 판단하고, 기존의 작업 스텝에 따라 정상적인 작업을 진행한다.
본 발명에 의한 X86 가상머신을 지원하는 RISC 프로세서가 부동 소수점 스택 조작 과정을 에뮬레이션하는 방법을 진일보로 설명하면, 이는 RISC 프로세서의 8개 부동 소수점 레지스터를 부동 소수점 레지스터 스택 (83)으로 그루핑하고, 부동 소수점 컨트롤 레지스터 (81)을 통하여 X86의 TOP 포인터 기능, 즉 스택 포인터 조작 기능을 에뮬레이션하고, 부동 소수점 레지스터의 스택 조작을 에뮬레이션하는 것을 완성한다.
본 발명의 X86 가상머신을 지원하는 RISC 프로세서가 부동 소수점 스택 조작을 에뮬레이션하는 방법은 아래와 같은 스텝을 포함한다.
스텝 2100에 있어서, 스택 이네이블 비트에 의해 8개 부동 소수점 레지스터를 선택하여 부동 소수점 레지스터 스택 중 8개 스택 레지스터를 에뮬레이션할지 여부를 결정하고, 부동 소수점 레지스터 스택 조작을 에뮬레이션하고, 포인터 레지스터를 설정한다.
상기 스텝 2100은 아래와 같은 스텝을 포함한다.
스텝 2110에 있어서, 부동 소수점 컨트롤 레지스터 (81)에서 1개 비트를 선택하여 부동 소수점 스택 이네이블 비트로 하고, 이네이블 비트를 1로 설정할 경우, X86 프로세서의 부동 소수점 스택을 에뮬레이션함을 표시하고, 부동 소수점 스택 조작을 진행하고, 이네이블 비트를 0으로 설정할 경우, X86 프로세서의 부동 소수점 스택을 에뮬레이션하지 않음을 표시하고, 부동 소수점 스택 조작을 진행하지 않고, 프로세서는 정상적인 과정에 따라 작업을 진행한다.
스텝 2120에 있어서, 적어도 3비트인 포인터 레지스터 1개를 설정하고, TOP 포인터의 값을 저장한다.
상기 포인터의 값은 리드, 라이트, 1을 덧셈, 1을 뺄셈 가능하고, TOP 포인터의 범위는 0~7이다.
TOP 포인터가 스택을 푸시할 경우, 7호 레지스터를 푸시(push)하고, TOP 포인터의 값은 6으로 설정되고, 스택을 팝(pop)할 경우, 만약 TOP 포인터값이 7이면 스택을 팝 후 TOP 포인터값을 0으로 설정한다.
TOP 포인터는 영원히 톱 스택 레지스터를 가리키기 때문에, 본 스택은 위로부터 아래로 생장한다. 즉 스택을 푸시시 TOP 포인터값은 1을 뺄셈하고, 팝 시 TOP 포인터값은 1을 덧셈한다. 그러므로 7호 레지스터에 데이터를 저장할 때 (즉 7호 레지스터에 스택을 푸시시), TOP포인터 값은 응당 1을 뺄셈하여 6으로 변한다. 7호 레지스터에서 데이터를 팝 시, TOP포인터 값은 응당 1을 덧셈하여 8로 변한다. 그러나 0~7호까지 총 8개의 레지스터가 있기 때문에 TOP 포인터값은 최대로 7로 되고, 1을 덧셈할 때, TOP 포인터는 응당 다음 레지스터를 가리킨다. 즉 순환 스택 중0호 레지스터이다. 이때, TOP 포인터값은 응당 0으로 변해야 한다.
예를 들면, 만약 TOP 포인터의 값이 3이고, 이네이블 비트는 1일 경우, 만약 연산에 참여한 부동 소수점 레지스터가 $f(i): i<=7이면 부동 소수점 레지스터 $f(j)를 사용하여 부동 소수점 레지스터 $f(i)을 교체하여 연산을 진행하고, 그 중j=(i+3) mod 8이다.
만약 레지스터 $f(i): i> 7이면, 교체할 필요가 없고, 부동 소수점 레지스터 $f(i)를 직접 사용한다.
스텝 2200에 있어서, 부동 소수점 레지스터 스택 조작을 에뮬레이션할 경우, 포인터 레지스터에 대하여 조작을 진행하고, 스택 조작 포인터의 스택 조작을 에뮬레이션하고, 스택 조작 포인터의 스테이지를 수정 및 모니터링한다.
상기 스텝 2200은 아래와 같은 스텝을 포함한다.
스텝 2210에 있어서, 스택 조작 모드를 설정하고, 부동 소수점 스택 이네이블 비트를 1로 설정하고, 유저가 부동 소수점 레지스터 스택을 에뮬레이션하여 부동 소수점 스택 조작을 진행하는 것을 허락한다.
다른 실시예로, 부동 소수점 스택 에뮬레이션 모드를 설정하고, X86부동 소수점 스택 모드를 1로 설정하기 위하여 아래 명령어를 거쳐 실행할 수 있다.
상기 명령어 포맷은: SETTM
본 발명이 제공한 메모리 액세스 확장 명령어는, MIPS 명령어 집합 중 SPECIAL2의 엠프티 슬롯의 보류 값을 이용하여 확장 명령어를 정의한다.
명령어를 통하여 이네이블 비트를 1로 설정하는 조작을 완료하고, X86부동 소수점 스택 모드에 비트를 설정하고, 유저가 x86 부동 소수점 스택을 사용하여 부동 소수점 조작을 진행하는 것을 허락한다.
스텝 2220에 있어서, 스택 조작 모드를 클리어하고, 부동 소수점 스택 이네이블 비트를 0으로 설정하고, 유저가 부동 소수점 레지스터 스택을 에뮬레이션하여 부동 소수점 스택 조작을 진행하는 것을 허락하지 않는다.
일 실시예로, 본 발명 실시예가 부동 소수점 스택 에뮬레이션 모드를 클리어하고, X86부동 소수점 스택 모드를 0으로 설정하는 명령어 포맷은 CLRTM 이다.
이는 X86 부동 소수점 스택 모드의 비트 클리어로, 유저가 x86 부동 소수점 스택을 사용하는 것을 허락하지 않고, MIPS 프로세서의 부동 소수점 레지스터를 사용하여서야 만이 부동 소수점 조작을 진행하게 한다.
상기 비트를 설정하거나 0으로 클리어 하는 스택 포인터 조작 명령어는 각기 부동 소수점 레지스터 스택의 가동 및 금지 작업을 완성할 수 있다.
스텝 2230에 있어서, 스택 조작 포인터값에 1을 덧셈, 즉 TOP 포인터의 값에 1을 덧셈한다.
일 실시예로, 본 발명의 실시예에서 스택 포인터값에 1을 덧셈, 즉 TOP 포인터의 값에 1을 덧셈하는 명령어 포맷은 INCTOP이다.
스텝 2240에 있어서, 스택 조작 포인터값에 1을 뺄셈하고, 즉 TOP포인터의 값에서 1을 뺄셈한다.
일 실시예로, 본 발명 실시예에서 스택 포인터값에서 1을 뺄셈, 즉 TOP 포인터의 값에서 1을 뺄셈하는 명령어 포맷은 DECTOP이다.
상기 TOP 포인터의 값에 1을 덧셈하거나 1을 뺄셈하는 명령어는 각기 X86 프로세서 부동 소수점 스택 중의 스택 인(in), 스택 아웃(out) 작업을 에뮬레이션할 수 있다.
스텝 2250에 있어서, 스택 조작 포인터값을 리드, 즉 TOP 포인터의 값을 리드한다.
일 실시예로, 본 발명의 실시예에서 TOP 포인터값을 리드하는 명령어 포맷은 MFTOP rd이다.
동 명령어의 기능은 X86 부동 소수점 톱 스택 포인터의 값을 레지스터 GPR[rd]에 저장한다.
스텝 2260에 있어서, 스택 조작 포인터값을 라이트, 즉 포인터 레지스터에 현재 TOP 포인터의 값을 라이트 한다.
일 실시예로, 본 발명 실시예에서 TOP 포인터값의 라이트 조작을 완성하는 명령어 포맷은 MTTOP imm이다.
동 명령어 기능은 3개 비트의 즉시 데이터 imm을 x86 부동 소수점 톱 스택 포인터에 라이트 한다.
상기 리드, 라이트 TOP 포인터 명령어는 부동 소수점 스택의 조작을 편리하게 제어할 수 있다.
본 발명의 X86 가상머신을 지원하는 RISC 프로세서가 부동 소수점 스택 조작을 에뮬레이션하는 과정이 진일보로 이해될 수 있도록, 아래에 가법 연산 중의 스택 포인터 조작을 예로 설명을 진행한다.
이네이블 비트가 1이고, TOP 포인터값이 2일 때, add.s $f(6), $f(1), $f(9) 연산은 RISC 프로세서 내부에서 아래와 같은 전환을 진행한다.
X86 부동 소수점 스택 조작에 대한 에뮬레이션이 가동, 즉 이네이블 비트를 1로 설정한다.
$f(0)으로 $f(6)을 교체; // 6+2 mod 8 =0
$f(3)으로 $f(1)을 교체; // 1+2 mod 8 =3
$f(9) 전환 불필요 ; // 9> 7 따라서 변환 불필요, 레지스터 $f(9)를 직접 사용.
최종적으로, 실제 연산을 진행하는 식은 add.s $f(0), $f(3), $f(9).
이때 스택 인 및 스택 아웃 조작이 없으므로 TOP 값은 변하지 않는다.
동시에, 부동 소수점 스택의 존재로 인하여, 부동 소수점 스택의 오버플로 체크 메커니즘을 유지보호하는 것이 필요하고, 부동 소수점 스택의 스테이지를 실시간 모니터링함으로써, 부동 소수점 스택의 오버플로 예외의 확산 발생을 방지해야 한다.
본 발명 실시예에서, 본 발명의 RISC 프로세서의 상기 부동 소수점 레지스터 스택 83은 부동 소수점 연산을 직접 진행할 수 있는 8개의 스택 레지스터로 그루핑되고, 순차적으로 넘버드 되어, 각기 0~7이다.
본 발명 실시예의 RISC 프로세서에서, 상기 오버플로 체크 레지스터 (72)는 X86의 부동 소수점 플래그 레지스터 중의 TAG 기능을 실현하고, 부동 소수점 레지스터 스택 (83) 중의 스택 레지스터에 대하여 부동 소수점 방문을 진행할 때 스택 오버플로 예외가 발생할지 여부를 검측하는데 사용되고, 이는 적어도 8비트인 멀티 비트 레지스터이고, TAG 비트, 즉 오버플로 체크 기능 비트를 표시하고, 각기 부동 소수점 레지스터 스택 (83)의 스택 레지스터 0~7번 스테이지를 표시한다.
본 발명의 실시예에서는 1개 범용 레지스터 r(i)를 선택하고, 그의 하위 8비트는 하위부터 상위까지 각기 부동 소수점 레지스터 스택 (83)의 스택 레지스터 0~7번 스테이지를 표시한다.
범용 레지스터 r(i)의 하위 8비트에서, 각 비트는 1개의 부동 소수점 레지스터 스택 (83) 중의 스택 레지스터에 대응되고, 각 비트의 값은 상이한 스테이지를 대표하고, 그 중 0은 보이드(void), 스택 푸시 가능, 스택 아웃 불가능 혹은 오버플로 됨을 표시하고, 1은 유효, 재 스택 푸시 불가능, 또는 오버플로 됨을 표시한다.
실시할 수 있는 한가지 방식으로, 본 발명의 RISC 프로세서는 0~31, 총 32개 멀티 비트 부동 소수점 레지스터로 그루핑 된 부동 소수점 레지스터 스택 (83)을 포함하고, 그 중 0~7번, 총 8개 스택 레지스터는 X86의 부동 소수점 레지스터 스택 (83)의 8개 스택 레지스터를 에뮬레이션하고, RISC 프로세서는 32비트인 범용 레지스터 (고정 소수점) r(i)를 더 포함하고, 그 하위 8비트는 하위로부터 상위까지 각기 부동 소수점 레지스터 스택 (83)의 스택 레지스터 0~7번 스테이지를 표시하고, X86 부동 소수점 스택 메커니즘 중의 TAG 기능을 완성한다.
상기 스택 오버플로 판단 모듈 (43)은 지정한 부동 소수점 레지스터 스택 (83) 중의 스택 레지스터를 체크하고, 스택 레지스터의 값에 따라 오버플로 체크 레지스터 72에 대하여 조작을 진행하고, 부동 소수점 스택 오버플로 체크를 진행하는데 사용된다.
아래 본 발명의 X86 가상머신을 지원하는 RISC 프로세서에서 부동 소수점 스택 오버플로 체크를 진행하는 방법을 진일보로 설명한다. 이는 RISC 프로세서의 8개 스택 레지스터를 이용하여 부동 소수점 레지스터 스택 (83)을 그루핑하고, 범용 레지스터를 오버플로 체크 레지스터 (72)로 하고, 그 하위 8비트는 X86의TAG 기능을 에뮬레이션하고, 각 비트는 1개 스택 레지스터의 상이한 상태와 대응한다.
X86 가상머신을 지원하는 RISC 프로세서에서 부동 소수점 스택 오버플로 체크를 진행하는 방법은 아래와 같은 스텝을 포함한다.
스텝 21000에 있어서, 지정한 부동 소수점 레지스터 스택 중의 스택 레지스터를 체크하고, 스택 레지스터의 값에 의해 오버플로 체크 레지스터 (72)에 대하여 조작을 진행하고, 부동 소수점 스택 오버플로 체크를 진행한다.
상기 스텝 21000은 아래와 같은 스텝을 포함한다.
스텝 21100에 있어서, 부동 소수점 레지스터 스택 중 지정된 스택 레지스터가 공 (void)인지 여부를 판단하고, 만약 공이면 지정한 오버플로 체크 레지스터 (72)의 TAG 비트의 상응 비트를 1로 설정하고 계속하여 실행하고, 아니면 부동 소수점 스택 오버플로 예외를 유발한다.
스텝 21200에 있어서, 부동 소수점 레지스터 스택 중의 지정된 스택 레지스터가 유효인지 여부를 판단하고, 만약 유효이면 지정한 오버플로 체크 레지스터 (72)의 TAG 비트의 상응 비트를 0으로 설정하고 계속하여 실행하고, 아니면 부동 소수점 스택 오버플로 예외를 유발한다.
스텝 21300에 있어서, 부동 소수점 레지스터 스택 중의 지정된 2개 스택 레지스터가 모두 유효인지 여부를 판단하고, 만약 모두 유효이고 또한 스택 레지스터 중의 데이터가 스택 아웃이 필요하지 않으면, 지정한 오버플로 체크 레지스터 (72)의 TAG비트의 값을 유지하고 계속하여 실행하고, 아니면 부동 소수점 스택 오버플로 예외를 유발한다.
스텝 21400에 있어서, 부동 소수점 레지스터 스택 중의 지정된 2개 스택 레지스터가 유효인지 여부를 판단하고, 만약 모두 유효이고 또한 1개 스택 레지스터 중의 데이터가 스택 아웃이 필요하면, 데이터가 스택 아웃한 스택 레지스터가 대응되는 오버플로 체크 레지스터 (72)의 TAG 비트와 대응되는 비트를 0으로 설정하고 계속하여 실행하고, 아니면 부동 소수점 스택 오버플로 예외를 유발한다.
스텝 21500에 있어서, 부동 소수점 레지스터 스택 중의 지정된 2개 스택 레지스터가 유효인지 여부를 판단하고, 만약 모두 유효이고 또한 스택 레지스터 중의 데이터가 모두 스택 아웃이 필요하면, 대응하는 오버플로 체크 레지스터 (72)의 TAG 비트와 대응하는 2개 비트를 모두 0으로 설정하고 계속하여 실행하고, 아니면 부동 소수점 스택 오버플로 예외를 유발한다.
아래, 소수점 레지스터의 스택 인 조작을 예로, RISC 프로세서에서 부동 소수점 스택 오버플로 체크를 진행하는 방법을 진일보로 설명한다.
우선, RISC 프로세서가 부동 소수점 레지스터 스택의 톱 스택을 확정하고, 상기 톱 스택의 스택 레지스터와 대응하는 오버플로 체크 레지스터 (72)의 TAG 비트를 판독하고,
RISC 프로세서는 본 발명의 부동 소수점 레지스터 스택에 의해, 부동 소수점 레지스터 스택의 톱 스택을 판단 확정하고, 또한 본 발명의 톱 스택의 스택 레지스터와 대응하는 오버플로 체크 레지스터 (72)의 TAG 비트를 확정하는 것은 기존의 기술이다. 이는 본 발명의 발명 창조가 아니고, 동 분야에 숙지한 자라면 본 발명 실시예의 기재에 따라 상기 조작을 실현할 수 있다. 따라서 본 발명에서 구체적으로 설명하지 않는다.
톱 스택의 스택 레지스터와 대응하는 오버플로 체크 레지스터 (72)의 상응한 TAG 비트가 0인지 여부를 판단하고,
만약 0이면, 톱 스택의 스택 레지스터와 대응하는 오버플로 체크 레지스터 (72)의 상응한 TAG 비트를 1로 설정하고, 또한 데이터를 상기 스택 레지스터에 라이트하고, 컴백을 종결하고,
만약 1이면, 스택 오버플로 예외를 유발한다.
일 실시예로, 본 발명 실시예에서 범용 레지스터 r(3)을 선택하여 오버플로 체크 레지스터 r(3)의 하위 8비트로 하고, 즉 bit r(3)_0~bit r(3)_7은 각기 부동 소수점 레지스터 스택 중의 스택 레지스터 f(0)~f(7)의 상태와 대응된다.
1) 만약 스택 인 조작을 진행하고, 또한 톱 스택이 스택 레지스터 f(5)에 있으면,
오버플로 체크 레지스터 r(3)의 제5 비트를 판단, 즉 bit r(3)_4가 0인지 여부를 판단하고,
만약 0이면, 먼저 오버플로 체크 레지스터의 bit r(3)_4를 1로 설정하고, 데이터를 스택 인 하고, 스택 레지스터 f(5)에 저장하며,
만약 1이면, 스택 오버플로 예외를 유발한다.
2) 만약 스택 아웃 조작이고, 또한 톱 스택이 스택 레지스터 f(5)에 있으면,
오버플로 체크 레지스터 r(3)의 제5 비트를 판단, 즉 bit r(3)_4가 1인지 여부를 판단하고,
만약 1이면, 먼저 오버플로 체크 레지스터의 bit r(3)_4를 0으로 클리어하고, 다음 데이터를 스택 아웃하고, 지정한 부동 소수점 레지스터에 저장하며,
만약 0이면, 스택 오버플로 예외를 유발한다.
3) 만약 연산 조작이고, 또한 2개 소스 연산수가 각기 스택 레지스터 f(4)와 f(5)에 있으면,
오버플로 체크 레지스터 r(3)의 제4 비트를 판단, 즉 bit r(3)_3이 1인지 여부를 판단하고,
만약 0이면, 스택 오버플로 예외를 유발하고,
만약 1이면, 아래 스텝을 계속한다.
오버플로 체크 레지스터 r(3)의 제5 비트를 판단, 즉 bit r(3)_4가 1인지 여부를 판단하고,
만약 1이면, 계속하여 연산 조작을 진행하고,
만약 0이면, 스택 오버플로 예외를 유발한다.
4) 만약 연산 및 스택 아웃 조작이고, 2개 소스 연산수가 각기 스택 레지스터 f(4)와 f(5)에 있을 경우,
만약 톱 스택이 스택 레지스터 f(5)에 있으면, 오버플로 체크 레지스터 r(3)의 제5 비트를 판단, 즉 bit r(3)_4가 1인지 여부를 판단하고,
만약 0이면, 스택 오버플로 예외를 유발하고,
만약 1이면, 하기 스텝을 계속한다.
오버플로 체크 레지스터 r(3)의 제4 비트를 판단, 즉 bit r(3)_3이 1인지 여부를 판단하고,
만약 0이면, 스택 오버플로 예외를 유발하고,
만약 1이면, 하기 스텝을 계속한다.
먼저, 오버플로 체크 레지스터의 제5 비트, 즉 bit r(3)_4를 0으로 클리어하고, 다음 계속하여 연산 조작을 진행한다.
5) 만약 연산 및 연속 스택 아웃 조작이고, 2개2개 소스 연산수가 각기 스택 레지스터 f(4)와 f(5)에 있으면,
오버플로 체크 레지스터 r(3)의 제4 비트를 판단, 즉 bit r(3)_3이 1인지 여부를 판단하고,
만약 0이면, 스택 오버플로 예외를 유발하고,
만약 1이면, 오버플로 체크 레지스터의 제4 비트, 즉 bit r(3)_3을 0으로 클리어하고, 하기 스텝을 계속한다.
오버플로 체크 레지스터 r(3)의 제5 비트를 판단, 즉 bit r(3)_4가 1인지 여부를 판단하고,
만약 1이면, 오버플로 체크 레지스터의 제5 비트, 즉 bit r(3)_4를 0으로 클이어하고, 다음 연산 조작을 계속하고,
만약 0이면, 스택 오버플로 예외를 유발한다.
아래, 프로세서에서 X86 가상머신의 데이터 처리를 지원하는 과정이 X86 스토리지 스트럭쳐에 대한 지원일 경우, 본 발명 RISC 프로세서의 데이터 처리과정에 대하여 상세히 설명한다.
X86 프로세서에 세그먼트 레지스터가 존재하기에, 유저 상태에서도 X86의 저장, 액세스, 어드레싱 및 보호 방식은 비교적 특수하다. 따라서, 본 발명은 메모리 액세스 어드레스가 한계를 벗어났는지 여부를 판단하는 것을 지원하는 액세스 조작을 제공, 즉 load와 store조작의 소스 레지스터 중에서 1개 bound레지스터는 어드레스 계산에도 사용되지 않고, 데이터 저장에도 사용되지 않으며, 방문 어드레스의 비교에만 사용되고, 만약 방문 어드레스가 상기 bound레지스터가 규정한 한계를 벗어났을 경우 어드레스 크로스 보더 (cross-border) 예외를 통보한다.
어드레스 한계는 상계 혹은 하계로 나뉘고, 메모리 액세스의 유효 어드레스는 상계보다 이하 혹은 하계 이상임을 보장해야 한다. 이런 명령어는, 만약 메모리 액세스 어드레스가 조건을 만족하면 정상적으로 메모리 액세싱을 진행하고, 아니면 어드레스 에러 예외를 유발한다.
RISC 프로세서에서 가상머신을 지원함에 있어서, X86 명령어 집합으로부터 RISC 프로세서 MIPS 명령어 집합으로 번역하는 과정 중, 메모리 액세스 조작이 발생할 경우, 메모리 액세스 어드레스에 대한 판단을 추가하고, 메모리 액세스 어드레스가 한계를 벗어났는지 여부를 판단하여, X86 메모리 액세스 조작에 대한 번역 속도를 제고한다.
일 실시예로, 본 발명 실시예에서 상기 물리 레지스터 파일의 상계 어드레스 레지스터는 상계로 사용되는 유효 어드레스를 저장하는데 사용되고, 하계 어드레스 레지스터는 하계로 사용되는 유효 어드레스를 저장하는데 사용된다.
상기 상계/하계 어드레스 레지스터는 물리 레지스터 중의 임의의 범용 레지스터이다.
상기 상/하계 판단 모듈은 메모리 액세스 명령어 중의 상계 어드레스 레지스터에 저장한 상계 어드레스 및/또는 하계 어드레스 레지스터에 저장한 하계 어드레스에 의해, 명령어 연산수 어드레스의 유효성을 판단하는데 사용된다.
MIPS 명령어 집합 중의 각 메모리 액세스 명령어, 예를 들면 load 명령어 혹은 store 명령어에 대하여 한계 판단을 추가하고, 만약 메모리 액세스 어드레스가 조건을 만족하면 이러한 명령어는 정상적으로 메모리 액세스를 진행하고, 아니면 MIPS 중의 어드레스 에러 예외를 유발한다.
명령어 디코딩 후, 레지스터 중의 어드레스 한계를 명령어의 1개 레지스터 연산수로 하고, 조작 내용 데이터가 base 방식에 따라 유효 어드레스를 형성 후, 상기 유효 어드레스는 우선 레지스터 중의 어드레스 한계와 비교한다. 만약 명령어의 시멘틱 조건에 부합되면, 즉 만약 레지스터가 상계 어드레스 레지스터이면, 상기 유효 어드레스는 레지스터 중 어드레스 한계보다 크거나 혹은 레지스터 중 어드레스 한계와 같게 되어, 정상적인 메모리 액세스를 완성하고, 아니면 어드레스 에러 예외를 유발한다.
본 발명 실시예 중의 다른 실시예로, MIPS 명령어 집합 중 load 명령어와 store 명령어를 포함한 총 24개 메모리 액세스 명령어에 대하여 한계 판단을 추가한다.
그 중,
12개 load 명령어는 8개 고정 소수점 명령어, 4개 부동 소수점 명령어를 함유하고, 어드레싱 방식은 모두 base 방식이다.
이러한 명령어는 각기 상계 조건을 가진 로드 바이트(load byte), 하계 조건을 가진 로드 바이트, 상계 조건을 가진 로드 하프 워드(load half word), 하계 조건을 가진 로드 하프 워드, 상계 조건을 가진 로드 워드(load word), 하계 조건을 가진 로드 워드, 상계 조건을 가진 로드 듀얼 워드(load dual word), 하계 조건을 가진 로드 듀얼 워드, 상계 조건을 가진 로드 단정도 부동 소수점 숫자, 하계조건을 가진 로드 단정도 부동 소수점 숫자, 상계조건을 가진 로드 배정도 부동 소수점 숫자, 하계 조건을 가진 로드 배정도 부동 소수점 숫자 명령어 중 1개 혹은 1개 이상의 조합이다.
명령어의 상세한 묘사는 아래와 같다.
gsLBLE rt, base, bound
우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 유효 어드레스에 의해 메모리에서 8비트 바이트(byte) 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다.
gsLBGT rt, base, bound
우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 유효 어드레스에 의해 메모리에서 8비트 바이트 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다.
gsLHLE rt, base, bound
우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 정돈 (align)된 유효 어드레스에 의해 메모리에서 16비트 하프 워드 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 1비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우 어드레스 에러 예외를 발생한다.
gsLHGT rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 유효 어드레스에 의해 메모리에서 16비트 하프 워드 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 1비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLWLE rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 32비트 워드(word) 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLWGT rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 32비트 워드 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLDLE rt, base, bound
우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 64비트 듀얼 워드(dual word)를 메모리로부터 GPR[rt]으로 페치한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLDGT rt, base, bound
우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 64비트 듀얼 워드를 메모리에서부터 GPR[rt]으로 페치한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLWLEC1 ft, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 32비트 데이터를 페치하여 FPR[ft]의 하위 32비트에 저장한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 로어 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLWGTC1 ft, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 32비트 데이터를 페치하여 FPR[ft]의 하위 32비트에 저장한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLDLEC1 ft, base, bound
우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 64비트 데이터를 페치하여 FPR[ft]에 저장한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLDGTC1 ft, base, bound
우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 64비트 데이터를 페치하여 FPR[ft]에 저장한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
본 발명의 실시예에서는 기존 MIPS64 명령어 집합에서 보류한 LWC2와 SWC2 엠프티 슬롯의 값을 이용하여 정의한다. MIPS64 명령어 집합의 32비트 명령어 코드의 상위 6비트 (31bit: 26bit)는 opcode 도메인이다. LWC2 (opcode는 110010)와 SWC2 (opcode는 111010) 명령어 슬롯은 MIPS의 규정에 따라 유저가 자체로 정의할 수 있다.
12개 store 명령어는 8개 고정 소수점 명령어, 4개 부동 소수점 명령어를 포함하고, 어드레싱 방식은 모두 base 방식이다.
이러한 명령어는 각기 상계 조건을 가진 스토어 바이트(store byte), 하계 조건을 가진 스토어 바이트, 상계 조건을 가진 스토어 하프 워드(store half word), 하계 조건을 가진 스토어 하프 워드, 상계 조건을 가진 스토어 워드(store word), 하계 조건을 가진 스토어 워드、상계 조건을 가진 스토어 듀얼 워드(store dual word), 하계 조건을 가진 스토어 듀얼 워드, 상계 조건을 가진 스토어 단정도 부동 소수점 숫자, 하계 조건을 가진 스토어 단정도 부동 소수점 숫자, 상계 조건을 가진 스토어 배정도 부동 소수점 숫자, 하계 조건을 가진 스토어 배정도 부동 소수점 숫자 명령어 중 1개 혹은 1개 이상의 조합이다.
명령어의 상세한 묘사는 아래와 같다.
gsSBLE rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 8비트 바이트 데이터 내용을 메모리 중의 동 유효 어드레스에 보존한다.
gsSBGT rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 8비트 바이트 데이터 내용을 메모리 중 동 유효 어드레스에 보존한다.
gsSHLE rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 16비트 하프 워드 데이터 내용을 메모리 중 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 1비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSHGT rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 16비트 하프 워드 데이터 내용을 메모리 중 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 1비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSWLE rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 32비트 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSWGT rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 32비트 워드 데이터 내용을 메모리 중 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSDLE rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 64비트 듀얼 워드 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSDGT rt, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 64비트 듀얼 워드 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSWLEC1 ft, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 FPR[ft] 중 하위 32비트 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSWGTC1 ft, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 FPR[ft] 중 하위 32비트 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSDLEC1 ft, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 FPR[ft] 중 64비트 듀얼 워드 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSDGTC1 ft, base, bound
우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 FPR[ft] 중 64비트 듀얼 워드 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
동시에 상/하계를 판단하는 명령어 중, 어드레스는 동시에 상계 조건과 하계 조건을 만족해야 하고, 어느 1개 한계가 만족하지 않으면 한계를 벗어나는 예외가 발생한다.
상기 상/하계 판단 모듈은 메모리 액세스 명령어 중 상계 어드레스 레지스터에 저장한 상계 어드레스 및/또는 하계 어드레스 레지스터에 저장한 하계 어드레스에 의해, 명령어 어드레스의 유효성을 판단하는데 사용된다.
일 실시예로, RISC 프로세서 MIPS 명령어 집합 중에 2개 명령어를 추가하여 레지스터 값을 비교하는데 사용하고, 동 2개 명령어는 어드레스가 한계를 벗어났는지 여부를 판단하는데 사용되고, 만약 어드레스가 조건을 만족하면 무연산 명령 (do-nothing operation)을 진행하고, 아니면 RISC프로세서 중 어드레스 에러 예외를 유발한다.
이 외, 2개gsLE rs, rt와 gsGT rs, rt 2개 명령어를 실현한다.
명령어의 상세한 묘사는 아래와 같다.
gsLE rs, rt
레지스터 중의 값을 비교하고, 조건 어드레스 에러 예외를 설정한다.
범용 레지스터 GPR [rs]와 범용 레지스터 GPR [rt] 중의 값을 비교하고, 만약 GPR [rs] 중의 값이 GPR [rt] 중의 값보다 작거나 같으면, 순차적으로 다음 명령어를 실행하고, 아니면 adel 예외를 유발한다.
gsGT rs, rt
레지스터 중의 값을 비교하고, 조건 어드레스 에러 예외를 설정한다.
범용 레지스터 GPR [rs]와 범용 레지스터 GPR [rt] 중의 값을 비교하고, 만약 GPR [rs] 중의 값이 GPR [rt] 중의 값보다 크면, 순차적으로 다음 명령어를 실행하고, 아니면 adel 예외를 유발한다.
동 2개 명령어는 어드레스를 비교하는데 사용되고, rs 레지스터에 어드레스 한계 값을 저장하고, rt 레지스터에 비교 대기중인 유효 어드레스를 저장하여, 만약 조건을 만족하면 순차적으로 다음 명령어를 실행하고, 아니면 어드레스 에러 예외를 유발한다.
동 2개 명령어는 각기 범용 레지스터 GPR[rs]와 범용 레지스터 GPR[rt] 중의 값을 비교하고, 만약 GPR[rs] 중의 값이 GPR[rt] 중의 값보다 작거나 동등 또는 클 경우, 그 중 작거나 동등하다는 것은 gsLE rs, rt에 상대해 말한 것이고, 크다는 것은 gsGT rs, rt에 상대해 말한 것, 순차적으로 다음 명령어를 실행하고, 아니면 어드레스 에러 예외를 유발한다.
본 발명에 의한 X86 가상머신을 지원하는 RISC 프로세서의 한계 메모리 액세스 과정은 아래와 같은 스텝을 포함한다.
스텝 31에 있어서, RISC 프로세서의 X86 가상머신 중, 물리 레지스터 파일 중의 2개 범용 레지스터를 각기 상계/ 하계 어드레스 레지스터 (74)로 설정한다.
그 중, 상계 어드레스 레지스터는 상계로써의 유효 어드레스를 저장하고, 하계 어드레스 레지스터는 하계로써의 유효 어드레스를 저장한다.
스텝 32에 있어서, X86 가상머신 명령어 집합으로부터 MIPS 명령어 집합까지의 번역을 진행 시, 디코더는 명령어를 디코딩하여, RISC 프로세서에서 처리 가능한 이진 체계 코드를 획득한다.
스텝 33에 있어서, 고정점 연산소자 (3)은 디코딩 후의 메모리 액세스 명령어 중, 상계 어드레스 레지스터에 저장한 상계 어드레스 및/또는 하계 어드레스 레지스터에 저장한 하계 어드레스에 의해, 명령어 연산수 어드레스의 유효성을 판단한다.
MIPS명령어 집합 중의 각 메모리 액세스 명령어, 예를 들면 load 명령어 혹은 store 명령어 중에서, 한계 판단을 추가하고, 만약 메모리 액세스 어드레스가 조건을 만족하면 이러한 명령어는 정상적으로 메모리를 액세스하고, 아니면 MIPS 중 어드레스 에러 예외를 유발한다.
상기 스텝 33은 아래와 같은 스텝을 포함한다.
스텝 331에 있어서, 명령어는 디코딩 후, 레지스터 중 어드레스 한계를 명령어의 1개 레지스터 연산수로 하고, 조작 내용 데이터는 base 방식에 따라 유효 어드레스를 형성한다.
스텝 332에 있어서, 상기 유효 어드레스는 우선 레지스터 중의 어드레스 한계와 비교한다.
스텝 333에 있어서, 만약 명령어의 시멘틱 조건에 부합되면, 즉 만약 레지스터가 상계 어드레스 레지스터이면, 상기 유효 어드레스는 레지스터 중의 어드레스 한계보다 작거나 혹은 레지스터 중의 어드레스 한계와 같고, 또는 만약 레지스터가 하계 어드레스 레지스터이면, 상기 유효 어드레스는 레지스터 중의 어드레스 한계보다 크거나 혹은 레지스터 중의 어드레스 한계와 같으며, 이러할 경우 정상적인 메모리 액세스 조작을 완성하고, 아니면 어드레스 에러 예외를 유발한다.
구체적으로, 상기 스텝 333은 로드 연산수 (load) 명령어 조작에 관한 것이다. 즉,
만약 상계 조건을 가진 로드 바이트 명령어이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중의 내용보다 작지 않거나 혹은 GPR[bound] 중 내용과 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 유효 어드레스에 따라 메모리에서 8비트 바이트 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다. 즉 gsLBLE rt, base, bound이다.
만약 하계 조건을 가진 로드 바이트 명령어이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 유효 어드레스에 의해 메모리에서 8비트 바이트 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다. 즉 gsLBGT rt, base, bound이다.
만약 상계 조건을 가진 로드 하프 워드 명령어이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 16비트 하프 워드 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다. 즉 gsLHLE rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 1비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 로드 하프 워드이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 유효 어드레스에 의해 메모리에서 16비트 하프 워드 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다. 즉 gsLHGT rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 1비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 상계 조건을 가진 로드 워드 명령어이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 32비트 워드 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다. 즉 gsLWLE rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 로드 워드 명령어이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 따라 메모리에서 32비트 워드 데이터를 페치하고, 동 데이터에 대하여 부호 비트 확장을 진행한 후 GPR[rt]에 저장한다. 즉 gsLWGT rt, base, bound이다.
유효 어드레스는 얼라인 되는 것이 바람직하고, 만약 로어 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 상계 조건을 가진 로드 듀얼 워드 명령어이면, 우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 64비트 듀얼 워드를 메모리에서 GPR[rt]으로 페치한다. 즉 gsLDLE rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 로드 듀얼 워드 명령어이면, 우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 64비트 듀얼 워드를 메모리에서 GPR[rt]으로 페치한다. 즉 gsLDGT rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 상계 조건을 가진 로드 단정도 부동 소수점 수이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 32비트 데이터를 페치하여 FPR[ft]의 하위 32비트에 저장한다. 즉 gsLWLEC1 ft, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 로드 단정도 부동 소수점 수이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 따라 메모리에서 32비트 데이터를 페치하여 FPR[ft]의 하위 32비트에 저장한다. 즉 gsLWGTC1 ft, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 상계 조건을 가진 로드 배정도 부동 소수점 수이면, 우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 따라 메모리에서 64비트 데이터를 페치하여 FPR[ft]에 저장한다. 즉 gsLDLEC1 ft, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 로드 배정도 부동 소수점 수이면, 우선 GPR[base]의 내용에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 동 얼라인 된 유효 어드레스에 의해 메모리에서 64비트 데이터를 페치하여 FPR[ft]에 저장한다. 즉 gsLDGTC1 ft, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
상기 스텝 S333은 스토어 연산수 (store) 명령어 조작에 관한 것이다. 즉,
만약 상계 조건을 가진 스토어 바이트 명령어이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 8비트 바이트 데이터 내용을 메모리 중의 동 유효 어드레스에 보존한다. 즉 gsSBLE rt, base, bound이다.
만약 하계 조건을 가진 스토어 바이트 명령어이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 8비트 바이트 데이터 내용을 메모리 중의 동 유효 어드레스에 보존한다. 즉 gsSBGT rt, base, bound이다.
만약 상계 조건을 가진 스토어 하프 워드 명령어이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 16비트 하프 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSHLE rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 1비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 스토어 하프 워드 명령어이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 16비트 하프 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSHGT rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 1비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 상계 조건을 가진 스토어 워드 명령어이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 32비트 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSWLE rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 스토어 워드 명령어이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 32비트 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSWGT rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 상계 조건을 가진 스토어 듀얼 워드 명령어이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 64비트 듀얼 워드 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSDLE rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 스토어 듀얼 워드 명령어이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 GPR[rt] 중 64비트 듀얼 워드 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSDGT rt, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 상계 조건을 가진 스토어 단정도 부동 소수점 수이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 FPR[ft] 중 하위 32비트 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSWLEC1 ft, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 스토어 단정도 부동 소수점 숫자이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 FPR[ft] 중 하위 32비트 워드 데이터 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSWGTC1 ft, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 2비트 어드레스 중의 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 상계 조건을 가진 스토어 배정도 부동 소수점 수이면, 우선 GPR[base]의 내용 중 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 작지 않거나 같지 않으면, 어드레스 에러 예외를 발송하고, 아니면 FPR[ft] 중 64비트 듀얼 워드 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSDLEC1 ft, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
만약 하계 조건을 가진 스토어 배정도 부동 소수점 수이면, 우선 GPR[base]의 내용 중에서 유효 어드레스를 획득하고, 만약 유효 어드레스가 GPR[bound] 중 내용보다 크지 않으면, 어드레스 에러 예외를 발송하고, 아니면 FPR[ft] 중 64비트 듀얼 워드 내용을 메모리 중의 동 얼라인 된 유효 어드레스에 보존한다. 즉 gsSDGTC1 ft, base, bound이다.
상기 유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 3비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
상기 스텝 33은 아래와 같은 스텝을 더 포함한다.
스텝 334에 있어서, 동시에 상/하계를 판단하는 명령어 중에서, 어드레스는 동시에 상계 조건과 하계 조건을 만족해야 하고, 어느 1개 한계가 만족되지 않으면 한계 초월 예외를 발송한다.
상기 스텝 S300 후에 아래와 같은 스텝을 더 포함하는 것이 바람직하다.
스텝 34에 있어서, 메모리 액세스 명령어 중에서 상계 어드레스 레지스터에 저장한 상계 어드레스 및/또는 하계 어드레스 레지스터에 저장한 하계 어드레스에 의해, 명령어 어드레스의 유효성을 판단한다.
상기 스텝 34 아래와 같은 스텝을 포함한다.
스텝 341에 있어서, 로드 연산수 (load) 명령어 중, 범용 레지스터 GPR [rs] (즉 상계 어드레스 레지스터)와 범용 레지스터 GPR [rt] (즉 하계 어드레스 레지스터) 중 값을 비교하고, 만약 GPR [rs] 중 값이 GPR [rt] 중 값보다 작거나 혹은 GPR [rt] 중 값과 같으면, 순서적으로 다음 명령어를 실행하고, 아니면 adel예외를 유발한다. 즉 gsLE rs, rt이다.
스텝 342, 라이트 연산수 (store) 명령어 중, 범용 레지스터 GPR [rs] (즉 상계 어드레스 레지스터)와 범용 레지스터 GPR [rt] (즉 하계 어드레스 레지스터) 중의 값을 비교하고, 만약 GPR [rs] 중의 값이 GPR [rt] 중의 값보다 크면, 순차적으로 다음 명령어를 실행하고, 아니면 adel예외를 유발한다. 즉 gsGT rs, rt이다.
본 발명 RISC 프로세서의 한계 메모리 액세스 방법에 있어서, RISC 프로세서가 지원하는 가상머신 중에서, X86 가상머신 명령어로부터 MIPS 명령어 집합의 이진 체계 코드까지 번역하고, RISC 프로세서에서 운행할 때, 운행 속도를 제고하고, 가상머신 운행 속도에 대한 영향을 감소하고, 가상머신 운행 효율을 제고한다.
아래, 프로세서가 X86 가상머신 데이터 처리를 지원하는 과정이 가상 메커니즘에 대한 지원일 때, RISC 프로세서 장치가 X86 가상머신을 지원하는 데이터 처리방법에 대하여 상세히 설명한다.
X86 명령어와 RISC 프로세서 명령어 사이의 기능 차별을 제외하고, 가상머신 시스템 자체의 소모도 가상머신의 기능 저하를 도발한다. 때문에 가상머신의 실현 메커니즘에 대하여 필수적인 지원을 제공해야 하고, 주로 아래와 같은 3가지 방면을 포함한다.
N1) 가상머신 코드와 번역 후 MIPS 코드의 스위칭에 대한 지원
가상머신의 설계에서, X86 범용 레지스터는 이미 고정된 MIPS 레지스터에 매핑(mapping) 된다. 그러나 가상머신의 코드와 번역 후의 MIPS 코드 두 가지 코드가 문맥 전환 (context switching)을 진행할 때, 고정된 MIPS 레지스터의 값을 보존하거나 회복하여 동 레지스터가 두 가지 문맥 (context)에서 상호 간섭하지 않고 자유로 사용할 수 있게 한다.
본 발명은 데이터 폭이 기존 데이터 폭의 2배인 메모리 액세스 확장 명령어를 제공하고, 가상머신의 문맥 전환을 가속화하는 동시에 기능도 제고한다.
본 발명의 X86 가상머신을 지원하는 RISC 프로세서 모드 식별 모듈 (24)는 다수배 데이터 폭에 대하여 메모리 액세스를 진행하는 명령어를 포함한다. 상기 다수배 데이터 폭 메모리 액세스 명령어는 다수배 데이터 폭에 대한 메모리 판독, 메모리 라이트, 및 부동 소수점 레지스터의 다수배 데이터 폭에 대한 메모리 판독, 메모리 라이트 등 총 4가지 다수배 데이터 폭 메모리 액세스 확장 명령어를 포함한다.
일 실시예로, 본 발명은 모두 4개의 다수배 데이터폭의 메모리 액세스 확장 명령어를 제안하고, 더블 데이터폭의 메모리 판독, 메모리 라이트 명령어, 및 부동 소수점 레지스터의 더블 데이터 폭에 대한 메모리 판독, 메모리 라이트 명령어를 포함한다.
일 실시예로, 본 발명이 제공한 다수배 데이터 폭 확장 명령어는 기존의 MIPS64 명령어 집합 중에 보류된 LWC2와 SWC2 엠프티 슬롯 값을 이용하고, 그 중 32비트 명령어의 상위 6비트 (31bit: 26bit)는 opcode 도메인이다. 그 중 LWC2 (opcode는 110010)와 SWC2 (opcode는 111010) 명령어 슬롯은 모두 MIPS가 규정한 것이고 유저가 자주로 정의할 수 있다. 그 메모리 액세스의 어드레싱 방식은 base+8 bits offset의 어드레싱 방식이다.
그 중, 5비트의 base 도메인은 베이스 어드레스(base address)를 표시하고, 5비트의 rt (Register Target (Source/Destination)) 도메인은 소스/타겟 레지스터를 표시하고, offset은 오프셋 (offset) 어드레스를 표시하고, 마지막 6비트의 func 도메인은 각 확장 명령어를 구별하는데 사용된다.
본 발명의 4개 확장 명령어는 MIPS64 명령어 집합 중에서 유저를 위하여 확장한 자체 정의 명령어이다.
스토어 넘버 명령어 SQ에 대하여, 디코더는 1개 내부 sq조작을 출력하고,
로드 넘버 명령어 LQ에 대하여, 디코더는 2개 인접한 내부 조작 lq1과 lq2를 출력하고, 그 중 lq1은 LQ 명령어를 가진 하위 64비트 로직 레지스터 번호이고, lq2는 LQ 명령어를 가진 상위 64비트 로직 레지스터 번호이다.
디코더 2는 명령어에 대하여 디코딩 후, 메모리 액세스 실행 유닛 (5)의 준비 대기열(ready queue) (미 도시)에 송신하고, 준비 대기열은 그 중에서 연산수가 준비된 조작을 선택하여 메모리 액세스 실행 유닛 (5)의 메모리 액세스 소자 (미 도시)에 발사한다.
메모리를 판독하는 4개 워드인 총 128비트 로드 넘버 명령어 조작에 대하여, 상기 메모리 액세스 실행 유닛 (5)의 병합 셀은 준비 대기열에 진입할 때 2개 내부 조작에 대하여 병합을 진행한다. 병합하는 방법은 아래와 같다. 만약 대기열 (queue)에 진입할 인접한 2개 조작이 4개 워드인 128비트 로드 넘버 명령어를 디코딩하여 형성한 것임을 발견하면, 그 다음 조작은 준비 대기열에 진입하지 않고, 그의 목적 물리 레지스터 번호를 그 앞 조작의 상위 64비트 목적 물리 레지스터 번호에 저장해 넣는다.
병합 후의 로드 넘버 조작은 2개 목적 물리 레지스터 번호가 있고, 어드레스 확정 (대응 소스 물리 레지스터 준비 완료) 시 메모리 액세스 실행 유닛 (5)의 메모리 액세스 소자에 발사하여 실행한다.
메모리 액세스 실행 유닛 (5)는 데이터 액세스를 실행하는 소자이고, 이는 명령어에 의해 메모리에서 데이터를 페치하거나 혹은 데이터를 메모리에 저장한다. 이 과정은 기존의 표준기술이고, 동 분야의 당업자는 자명할 것이다. 따라서 본 발명의 실시예에서는 구체적으로 설명하지 않는다.
아래, 더블 데이터폭의 메모리 판독, 메모리 라이트 명령어, 및 부동 소수점 레지스터의 더블 데이터폭의 메모리 판독, 메모리 라이트 명령어 총 4개 명령어에 대하여 설명을 진행한다.
gsLQ rt, offset(base) / 쿼드 워드 (quadword) 데이터를 메모리에 판독
메모리에서 쿼드 워드를 로드하여 레지스터에 저장하고, 우선 부호를 가진 8비트 offset와 GPR[base]의 내용을 서로 덧셈하여 유효 어드레스를 획득하고, 동 얼라인 된 유효 어드레스에 의해 메모리에서 128비트 쿼드 워드를 페치하고, 인접한 2개 범용 레지스터에 저장한다.
만약 rt가 짝수이면 레지스터 rt와 rt+1에 저장하고, 만약 rt가 홀수이면 레지스터 rt-1와 rt에 저장한다.
유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 4비트 어드레스 중의 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsLQC1 ft, offset(base) / 쿼드 워드 데이터를 메모리에 라이트
우선 부호를 구비한 8비트 offset와 GPR[base]의 내용을 서로 덧셈하여 유효 어드레스를 획득하고, 다시 동 얼라인 된 유효 어드레스에 의해 메모리에서 128비트 쿼드 워드를 페치하고, 인접한 2개 부동 소수점 레지스터에 저장한다.
만약 ft가 짝수이면, 레지스터 ft와 ft+1에 저장하고, 만약 ft가 홀수이면, 레지스터 ft-1과 ft에 저장한다.
유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 4비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSQ rt, offset(base) / 쿼드 워드 데이터를 메모리에 저장
우선 부호를 가진 8비트 offset와 GPR[base]의 내용을 서로 덧셈하여 유효 어드레스를 획득하고, 다음 서로 인접한 2개 범용 레지스터 중 쿼드 워드를 메모리 중의 유효 어드레스에 저장한다.
만약 rt가 짝수이면, 레지스터 rt와 rt+1 중의 값을 페치하여 메모리에 저장하고, 만약 rt가 홀수이면, 레지스터 rt-1과 rt 중의 값을 페치하여 메모리에 저장한다.
유효 어드레스는 얼라인되는 것이 바람직하고, 만약 하위 4비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
gsSQC1 ft, offset(base) / 쿼드 워드를 부동 소수점 레지스터로부터 메모리에 저장
우선 부호를 가진 8비트 offset와 GPR[base]의 내용을 서로 덧셈하여 유효 어드레스를 획득하고, 다음 서로 인접한 2개 부동 소수점 레지스터 중의 쿼드 워드를 메모리 중의 유효 어드레스에 저장한다. 만약 ft가 짝수이면, 레지스터 ft와 ft+1 중의 값을 페치하여 메모리에 저장하고, 만약 ft가 홀수이면, 레지스터 ft-1과 ft 중의 값을 페치하여 메모리에 저장한다.
유효 어드레스는 반드시 얼라인 되어야 하며, 만약 하위 4비트 어드레스 중 임의의 1개 비트가 0이 아닐 경우, 어드레스 에러 예외를 발생한다.
본 발명에 있어서 X86 가상머신의 RISC 프로세서의 데이터 메모리 액세스 방법을 지원하기 위하여, 아래와 같은 스텝을 포함한다.
스텝 N110에 있어서, 프로세서는 우선 1개 명령어를 페치하여 디코더에 입력하고,
스텝 N120에 있어서, 디코더는 명령어 유형을 판단하고, 다수배 데이터폭의 명령어를 식별 및 디코딩하고,
만약 기존 MIPS 명령어 집합의 명령어이면, 디코더는 이를 내부 조작으로 번역, 예를 들면 상응한 OP, 소스 레지스터 및 타겟 레지스터를 제공 등,
만약 입력한 명령어가 본 발명이 제기한 다수배 메모리 액세스 확장 명령어 조작이면, 디코더는 소스 /혹은 타겟 레지스터를 1개로부터 2개의 페어드(paired) 레지스터로 자동 확장한다.
만약 rt가 짝수이면, 레지스터 rt와 rt+1에 저장하고, 만약 rt가 홀수이면, 레지스터 rt-1과 rt에 저장한다.
만약 입력 명령어가 다수배 데이터폭의 판독 명령어이면, 디코더는 타겟 레지스터를 1개로부터 다수개 인접한 레지스터로 자동으로 확장하고, 또한 판독 조작을 다수개 내부 조작에 배분하고, 다수개 페어드 레지스터는 각기 상기 다수개 내부 조작의 타겟 레지스터이다.
만약 입력 명령어가 다수배 데이터폭의 저장 명령어이면, 디코더는 소스 레지스터를 1개로부터 다수개 인접한 레지스터로 자동 확장한다.
프로세서는 우선 1개 명령어를 페치하여 디코더에 입력하고, 디코더는 명령어 유형을 판단하여, 만약 기존의 MIPS 명령어 집합의 명령어이면, 디코더는 이를 내부 조작으로 번역하여, 예를 들면 상응한 조작 (OP), 소스 레지스터와 타겟 레지스터를 제공 등, 저장 연산 소자에 출력하여 실행한다. 만약 입력한 명령어가 본 발명이 제안한 메모리 액세스 확장 명령어의 저장 조작이면, 디코더는 소스 / 혹은 타겟 레지스터를 1개로부터 2개 페어드 레지스터로 자동 확장하고, 다음 저장 연산소자에 출력하여 실행한다.
프로세서는 우선 1개 명령어를 페치하여 디코더에 입력하고, 디코더는 명령어 유형을 판단하고, 내부 조작으로 변환한다. 내부 조작의 인코드는 프로세서의 기능 소자에 비하여 명령어가 더욱 규칙적이고, 내부 로직을 간단화 하는데 유리하다. RISC 프로세서 중, 통상적으로 외부 명령어로부터 내부 조작까지는 일 대 일로 매핑된다. 디코더가 출력한 내부 조작은 임의개의 도메인으로 그루핑 된다. 예를 들면 조작 코드 (op), 확장 조작 코드 (fmt), 소스 레지스터 번호, 목적 레지스터 번호, 즉시 데이터 등이다.
스텝 N130에 있어서, 디코딩 후의 다수배 데이터폭의 명령어는 메모리 액세스 실행 유닛 (5)에 발송하여 조작을 실행한다.
디코더는 입력한 명령어에 대하여 디코딩한 후, 메모리 액세스 실행 유닛 (5)에 발송하고, 메모리 액세스 실행 유닛에서, 만약 판독 조작 명령어이면, 판독 조작 명령어 LQ의 2개 내부 조작 lq1, lq2을 1개 조작으로 병합하고, 메모리 액세스 실행 유닛 (5)의 메모리 액세스 소자에 송신하여 실행한다.
만약 입력한 명령어가 본 발명이 제안한 메모리 액세스 확장 명령어 중 4개 워드 총 128비트인 스토어 넘버 명령어 SQ이면, 디코더 (3)은 소스 레지스터 번호를 1개로부터 2개 페어드 레지스터 번호로 확장한다. 예를 들면 4호 레지스터는 4, 52개 레지스터 번호로 확장되고, 7호 레지스터는 6, 7 2개로 확장된다. 내부 조작으로 하는 2개 소스 레지스터 번호는 메모리 액세스 실행 유닛 5의 준비 대기열에 송신한다.
만약 입력한 명령어가 본 발명이 제안한 메모리 액세스 확장 명령어 중 판독 조작이면, 디코더는 상기 판독 조작을 2개 내부 조작으로 디코딩하고, 여전히 타겟 레지스터를 1개로부터 2개 페어드 레지스터로 자동 확장하고, 다음 이를 1개 조작으로 병합하여 메모리 액세스 실행 유닛 (5)의 메모리 액세스 소자에 송신하여 실행한다.
다시 말하면, 만약 입력한 명령어가 본 발명이 제안한 메모리 액세스 확장 명령어 중 4개 워드 총 128비트인 스토어 넘버 명령어 LQ이면, 디코더는 타겟 레지스터 번호를 1개로부터 2개 페어드 레지스터 번호로 확장한다. 또한, 2개 인접한 내부 조작 lq1, lq2로 분해하고, 각기 동 2개 타겟 레지스터 번호를 구비한 상황에서 메모리 액세스 실행 유닛 (5)의 준비 대기열에 송신한다. 메모리 액세스 실행 유닛 (5)는 디코더로부터 송신되는 내부 조작을 수신하고, 그 중에서 소스 물리 레지스터가 준비된, 메모리 액세스 실행 유닛 (5)에 발사된 메모리 액세스 소자를 선택한다. LQ명령어는 1개 메모리 액세스 조작으로, 메모리 액세스 소자에 발사된다. 때문에 메모리 액세스 실행 유닛 (5)의 병합 모듈이 2개 내부 조작의 병합을 완성한다. 그 방법은, lq2의 목적 물리 레지스터를 lq1조작의 상위 64비트 목적 물리 레지스터에 저장하고, lq2 자체는 준비 대기열에 진입하지 않는다. 메모리 액세스 소자는 메모리 액세스 조작을 실행하고, lq1에 대하여, 결과 중 2개 값 도메인이 있으며, 각기 대응하는 물리 레지스터에 라이트 한다.
N2) 번역 후의 코드가 X86 모드에 처해 있는지 여부를 구별
RISC 프로세서가 X86 가상머신을 지원함에 있어서, 1개 명령어에 대하여, 기존 명령어 집합 모드에 처했는지 아니면 X86 모드에 처했는지를 구별해야 한다. 예를 들면, MIPS 명령어 집합을 예로 하면, 가법 명령어에 있어서, MIPS 명령어 집합 중 가법 처리는 2개 넘버에 대하여 서로 덧셈을 진행하는 조작이다. 그러나 X86 명령어 집합에 있어서, 가법 명령어는 2개 연산수를 서로 덧셈하는 계산일뿐만 아니라, 가법 결과에 따라 상응한 EFLAG 중의 플래그 비트를 수정한다.
본 발명은 상기 문제에 대안하여, 1개 RISC 명령어가 X86 가상머신 모드에서 운행되는지 여부를 구별하는 방법을 제공한다.
상이한 명령어의 사용 빈도에 따라, 본 발명은 3가지 구별 방식을 제공한다.
(1) 컨트롤 비트 플래그 실행 방법: 본 발명은 RISC 프로세서에 특정의 제어 비트 x86mode 플래그를 설정하고, 상기 비트가 1일 때 해당 시점에서 상응한 명령어가 x86 모드에서 운행함을 표시하고, 상기 플래그가 0일 때, 명령어가 비 X86모드에서 운행함을 표시한다.
(2) 전치 명령어 실행 방법: 본 발명은 1개 전치 명령어 SETFLAG를 추가 설정하여, 그 후의 명령어가 X86 모드에 처해 있음을 표시한다. 전치 명령어의 영향 범위에 따라, 또한 두 가지 방식으로 나누어진다. 한가지는 전치 명령어가 그 후의 1개 명령어에만 영향 주는 것이고, 한가지는 전치 명령어가 그 후의 다수개 명령어에 영향 주는 것이다.
(3) 전용 명령어 방법: 명령어 빈도가 특별히 높은 X86 명령어에 대하여, 본 발명은 명령어 집합에 특정 명령어를 설정하여 일대일 대응을 진행함으로써, 효율을 제고한다. 상기 설정한 명령어는 2개 유형으로 귀납 할 수 있다. 한가지는 X86 명령어 집합 중에서 EFLAG 플래그와 관련된 명령어와 일대일 대응하는 명령어이고, 다른 한가지는 X86 명령어 집합 중의 특수 구조에 대하여 조작을 진행하는 명령어이다. 예를 들면, 부동 소수점 스택 조작 명령어에 대하여 대응을 진행하는 명령어이다. 새로 추가 설정한 명령어는 특정 명령어를 제공하여 X86 명령어에 대하여 부분적인 지원을 제공함으로써, 상응한 소비를 감소한다.
본 발명 중의 X86 가상머신을 지원하는 RISC 프로세서 장치의 모드 식별 모듈 (24)는 명령어의 가상머신 명령어 집합 모드를 구별하는데 사용된다.
본 발명의 RISC 프로세서 장치 중에서, 디코더는 종래 기술의 데이터 경로를 갖고 있는 외, 또한 디코딩 입력 및 출력, 명령어 디코딩 기능을 포함하고 있을 뿐만 아니라, 모드 식별 모듈 (24)에 의해 명령어의 가상머신 명령어 집합 모드를 구별하고, 상기 디코더는 구별된 가상머신 명령어 집합 모드에 따라 명령어 디코딩을 진행한 후 고정점 연산 소자 3에 출력하여, 기존 디코더의 기능을 보완하고, 직접 디코딩을 진행하고, 프로세서 연산 속도를 제고하였다.
고정점 연산 소자 (3)은 디코딩 명령어를 수신한 후, 처리를 진행하고, 실행 결과를 출력한다.
고정점 연산 소자 (3)은 종래기술의 데이터 경로를 구비하고 있고, 명령어 입력 및 출력, 명령어 실행을 포함하고 있을 뿐만 아니라, 디코더 (2)가 명령어에 대하여 그의 명령어 집합 모드를 구별한 후, 고정점 연산 소자 (3)이 상이한 명령어 모드에 따라 상응한 계산을 실행하고, 실행 결과를 출력한다.
(첫째)
일 실시예, 본 발명의 RISC 프로세서 장치의 모드 식별 모듈 (24)는 1개의 가상머신 모드 컨트롤 레지스터 (73)이다. 상기 가상머신 모드 컨트롤 레지스터 (73)은 컨트롤 비트 플래그 X86MODE1를 포함하고, 상기 비트가 1 일 때, 해당 시점에서 상응한 명령어는 X86 가상머신 명령어 집합 모드에서 운행하고 있음을 표시하고, 상기 플래그가 0일 때, 해당 시점에서 상응한 명령어는 비 X86 가상머신 명령어 집합 모드에서 운행하고 있음을 표시한다.
RISC 프로세서의 MIPS64 명령어 집합 중에서, 일부 Coprocessor0 (CP0) 컨트롤 레지스터는 유저가 자체 정의하도록 예비한 것이다. 예를 들면, 모든 Sel 비트 상황에서 22호 레지스터는 모두 유저가 자체정의하도록 예비한 것이다.
본 발명 실시예는 상기 컨트롤 레지스터 (CP0) 중 1개 비트를 이용하여 X86 모드 제어 플래그 비트 X86MODE1로 하고, 명령어가 처한 모드를 구별하는 것이 필요할 때, 동 컨트롤 레지스터의 상응 비트에 대한 판독을 통해 판단을 진행한다. 상기 플래그 비트가 1일 때 상응한 명령어는 X86 가상머신 명령어 집합 모드에서 운행함을 표시하고, 상기 플래그 비트가 0일 때 상응한 명령어가 비 X86 가상머신 명령어 집합 모드에서 운행함을 표시한다.
RISC 프로세서가 명령어를 로드하고, 디코더 (2)가 디코딩하여 실행할 때, 디코더 (2)는 우선 가상머신 모드 컨트롤 레지스터 (73)의 컨트롤 비트 플래그 X86MODE1를 판독하고, 플래그 비트의 값 0 혹은 1에 의하여 구별된 가상머신 명령어 집합 모드에 의해, 가상머신 모드 컨트롤 레지스터 (73)의 컨트롤 비트 플래그 X86MODE1이 리라이트(rewrite)될 때까지, 가상머신 명령어 집합 모드에 의해 디코딩한다.
만약 1개 가법 명령어가 디코더에 진입할 경우, RISC 프로세서는 상응한 컨트롤 레지스터에 대하여 판단을 진행하고, 이가 X86 가상머신 명령어 집합 모드인지 아니면 비 X86 가상머신 명령어 집합 모드인지를 구별한다.
상기 고정점 연산소자 (3)의 플래그 연산 모듈 (32)는 입력 명령어에 의해 연산을 진행하고, 연산 결과에 따라 상응한 EFLAG 플래그 비트를 계산한다.
(둘째)
일 실시예로, 본 발명의 RISC 프로세서 장치에 있어서, 상기 모드 식별 모듈 (24)는 디코더에 포함된 전치 명령어 디코딩 모듈 (241)이고, 상기 전치 명령어 디코딩 모듈 (241)은 상기 전치 명령어 후의 다수개 명령어가 X86 가상머신 명령어 집합 모드에 처해 있음을 표시하는데 사용되는 전치 명령어 SETFLAG를 포함한다.
본 발명 실시예의 전치 명령어 디코딩 모듈 (241) 중의 전치 명령어는 MIPS 명령어 집합 중 SPECIAL2의 엠프티 슬롯의 보류값을 이용하여 실현된다.
디코더 (2)의 전치 명령어 디코딩 모듈 (241)은 상기 전치 명령어를 디코딩할 때 플래그를 설정하고, 동 명령어 후의 명령어는 X86 가상머신 명령어 집합 모드로 디코딩되고, 상기 전치 명령어는 무연산 명령 조작 NOP로 디코딩된다.
상기 전치 명령어 SETFLAG는 전치 명령어 SETFLAG의 영향 범위를 표시하는데 사용되는 범위 파라미터를 포함하는 것이 바람직하다. 그 중 범위 파라미터는 1이 될 수 있고, 이는 상기 전치 명령어가 단지 그 후의 1개 명령어에만 영향 줌을 표시하고, 이는 n도 될 수 있고, 그 중 범위 파라미터는 상기 전치 명령어가 그 뒤의 n개 명령어에 영향 줌을 표시한다.
상기 디코더 (2)의 전치 명령어 계수기 (242)는, 전치 명령어의 영향을 받으며 전이 명령어가 발생하지 않는 명령어 시퀀스의 명령어 수 n을 기록하는데 사용하는 것이 바람직하다.
영향을 받는 현재 명령어가 고정점 연산 소자에 진입 시, 즉 넥스트 명령어가 디코더 (2)에 진입 시, n에 대하여 1을 뺄셈한다. 상기 명령어 시퀀스 중에 전이 명령어가 발생하는 것을 허락하지 않는다. 즉 일단 전이 명령어가 발생하면, 전이 명령어부터 시작한 명령어 시퀀스는 전치 명령어의 영향을 받지 않는다.
일 실시예로, 상기 고정점 연산 소자 3의 예외 처리 모듈 (34)는 전치 명령어가 그 뒤에 연속 인접한 1개 명령어에만 영향 줄 때, 만약 실행 예외가 출현하면, 딜레이 슬롯 예외와 같은 방법을 채용하고, Cause레지스터의 bd비트를 1로 설정하고, 동시에 EPC가 전치 명령어를 가리키고, 예외 서비스 프로그램 완성 후 전치 명령어를 다시 실행하는데 사용하는 것이 바람직하다.
다른 실시예로, 상기 고정점 연산 소자 (3)의 전치 예외 컨트롤 레지스터 (33)은 예외가 발생한 명령어가 상기 전치 명령어 영향을 받았는지 여부를 기록하는데 사용되는 것이 바람직하다. 이상이 발생하여 프로세스가 중단될 때, 전치 예외 컨트롤 레지스터 (33)에 현재 명령어의 집계수를 저장하고, 이상이 종결되고 중단된 프로세스로 회귀할 때, 상기 집계수에 따라, 즉 앞에서 전치 예외 컨트롤 레지스터 (33)가 보존한 집계수에 의해 중단된 프로세스의 상태를 회복한다.
상기 고정점 연산소자 (3)의 플래그 연산 모듈 (32)는 입력 명령어에 의해 가상머신 명령어 집합 모드에 처한 명령어에 대하여 연산을 진행하고, 연산 결과에 따라 상응한 EFLAG 플래그 비트를 계산하는데 사용된다.
(셋째)
일 실시예로, 상기 모드 식별 모듈 (24)는 명령어 처리 모듈 (21)이고, RISC 프로세서의 MIPS 명령어 중 상기 명령어의 가상머신 명령어 집합 모드를 표시한다.
사용 빈도가 특별히 높은 X86 가상머신 명령어에 대하여, RISC 프로세서의 MIPS 명령어 집합 중에서 명령어 처리 모듈 (21)를 통하여 플래그를 설정하여, 상기 MIPS 명령어는 X86 가상머신 명령어 집합 모드에서 실행되는 명령어임을 표시한다. 이럴 경우, 사용 빈도가 높은 X86 가상머신 명령어에 대하여, 상기 명령어는 X86 가상머신 명령어 집합 모드임을 표시하고, 직접 RISC 프로세서의 MIPS 명령어 집합이 실행함으로써, 상응한 비용을 감소한다.
명령어 처리 모듈 (21)의 영향을 받는 명령어는 동 명령어의 디코딩 실행에만 영향 주고, 기타 명령어에 대하여는 영향을 주지 않으며, 기타 명령어는 기존의 가상 명령어 집합 모드에 따라 실행한다.
상기 RISC 프로세서의 MIPS 명령어는, X86 명령어 집합 중에서 EFLAG 플래그와 관련된 명령어와 대응하는 가상머신 명령어, 및 부동 소수점 스택과 같은 특수 구조에 대하여 조작하는 명령어와 대응하는 가상머신 명령어를 포함하는 것이 바람직하다.
예를 들면, 명령어 처리 모듈 (21)은 RISC 프로세서의 가법 명령어 (Add)에 대하여, 상기 명령어의 가상머신 명령어 집합 모드는 X86 가상머신 명령어 집합 모드 X86Add임을 표시하고, 이는 RISC 프로세서 MIPS 명령어 집합 중의 SPECIAL2의 엠프티 슬롯의 보류값을 이용하여 실현할 수 있다. 이 명령어는 기존의 가법 명령어 (Add)와 같지 않고, 다만 기존 명령어에 대하여 부분적 지원을 제공하고, 이는 레지스터 중의 값에 대하여 가법 조작을 실행하고, 또한 결과에 따라 상응한 EFLAGS 플래그 비트를 수정한다. 그러나 계산 결과는 레지스터에 저장하지 않는다. 즉 레지스터의 값은 변하지 않는다.
본 발명의 X86 가상머신을 지원하는 RISC 프로세서 장치가 멀티 모드에서 데이터를 처리하는 방법은 아래와 같은 스텝을 포함한다.
스텝 N210에 있어서, 명령어를 판독 시, 명령어의 가상머신 명령어 집합 모드를 구별한다.
일 실시예로, 상기 스텝 N210은 아래와 같은 스텝을 포함한다.
스텝 N211에 있어서, 디코더는 1개 전치 명령어 SETFLAG를 판독하고, 상기 명령어 뒤의 다수개 명령어가 X86 가상머신 명령어 집합 모드에 처해 있음을 표시하고, 명령어의 가상머신 명령어 집합 모드를 구별하고,
전치 명령어 SETFLAG는 범위 파라미터를 더 포함하고, 전치 명령어 SETFLAG의 영향 범위를 표시한다. 상기 파라미터는 1이 될 수 있고, 상기 전치 명령어가 단지 그 후의 1개 명령어에 영향 줌을 표시하고, 상기 파라미터는 n(n≠1)이 될 수 있고, 상기 전치 명령어가 그 후의 n개 명령어에 영향 줌을 표시한다.
상기 전치 명령어에 대하여 디코딩 시 플래그를 설정하고, 동 명령어 뒤의 명령어는 X86 가상머신 명령어 집합 모드로 디코딩되고, 다음 상기 전치 명령어는 무연산 명령 조작 NOP로 디코딩된다.
일 실시예로, 상기 스텝 N210은 아래와 같은 스텝을 포함한다.
스텝 N210'에 있어서, 명령어가 디코더 (2)에 진입 시, 가상머신 모드 컨트롤 레지스터 (73)의 컨트롤 비트 플래그 X86MODE1은 명령어의 가상머신 명령어 집합 모드를 구별한다.
상기 스텝 N210'은 아래와 같은 스텝을 포함한다.
스텝 N211'에 있어서, 가상머신 모드 컨트롤 레지스터 (73)의 컨트롤 비트 플래그 X86MODE를 판단하고,
스텝 N212'에 있어서, 상기 플래그 비트가 1이면, 동 시점에서 상응한 명령어가 X86 가상머신 명령어 집합 모드에서 운행함을 표시하고,
스텝 N213'에 있어서, 상기 플래그 비트가 0이면, 동 시점에서 상응한 명령어가 비 X86 가상머신 명령어 집합 모드에서 운행함을 표시한다.
일 실시예로, 상기 스텝 N210은 아래와 같은 스텝을 포함한다.
스텝 N211"에 있어서, 디코더는 명령어를 판독하고, 상기 명령어 중 플래그의 가상머신 명령어 집합 모드에 따라, 명령어의 가상머신 명령어 집합 모드를 구별한다.
스텝 N220에 있어서, 디코더는 명령어를 디코딩하는 과정 중, 구별한 명령어의 가상머신 명령어 집합 모드에 따라, 명령어에 대하여 구별된 가상머신 명령어 집합 모드에 따라 디코딩을 진행하고 다음 RISC 프로세서의 고정점 연산소자 (3)에 출력하고,
전치 명령어로 명령어의 가상머신 명령어 집합 모드를 구별할 때, 아래와 같은 스텝을 포함한다.
스텝 N221, 디코더는 디코딩을 거쳐 전치 명령어를 식별하고, 플래그 비트 X86mode2=1을 설정하고,
상기 스텝 N220은 아래와 같은 스텝을 더 포함한다.
스텝 N222에 있어서, 디코더 중의 전치 명령어 계수기 (242)는 전치 명령어 영향을 받으며 전환 명령어가 발생하지 않는 명령어 시퀀스의 명령어 데이터 n을 기록하고,
영향받는 현재 명령어가 고정점 연산소자에 진입하면, 즉 넥스트 명령어가 디코더 (2)에 진입하면, n에 대하여 1을 뺄셈한다.
상기 명령어 시퀀스 중 전이 명령어의 발생을 허락하지 않으면, 즉 일단 전이 명령어가 발생하면 전이 명령어부터 시작하여 명령어 시퀀스는 전치 명령어 영향을 받지 않는다.
가상머신 모드 컨트롤 레지스터 (73) 컨트롤 비트 플래그 X86MODE1로 명령어의 가상머신 명령어 집합 모드를 구별할 때, 상기 스텝 N220 중의 디코더는 디코딩을 진행하고, 아래와 같은 스텝을 포함한다.
스텝 N221'에 있어서, RISC 프로세서가 명령어를 로드하고 디코더 (2)가 디코딩을 실행할 때, 디코더는 우선 가상머신 모드 컨트롤 레지스터 (73)의 컨트롤 비트 플래그 X86MODE1를 판독하고, 플래그 비트의 값 0 혹은 1에 의하여 구별된 가상머신 명령어 집합 모드에 따라, 가상머신 모드 컨트롤 레지스터 (73)의 컨트롤 비트 플래그 X86MODE1이 리라이트(rewrite)될 때까지, 가상머신 명령어 집합 모드에 따라 디코딩한다.
스텝 N230에 있어서, RISC 프로세서의 고정점 연산소자는 디코더의 출력에 따라 처리를 진행하고, 실행 결과를 출력한다.
전치 명령어로 명령어의 가상머신 명령어 집합 모드를 구별할 때, 아래와 같은 스텝을 포함한다.
스텝 N231에 있어서, 디코더는 전치 명령어를 내부의 무연산 명령 조작 NOP으로 디코딩한다. 따라서 고정점 연산소자는 NOP명령어를 실행한다.
멀티 모드 명령어 집합 명령어 실행 과정 중, 중단 예외가 발생하는 것을 피하기 위하여, 상기 스텝 N230은 아래와 같은 스텝을 포함하는 것이 바람직하다.
스텝 N232에 있어서, 고정점 연산소자가 전치 명령어에서 그 뒤에 연속 인접한 1개 명령어에만 영향 줄 때, 만약 실행 예외가 발생하면, 딜레이 슬롯 예외와 같은 방법을 활용하고, Cause레지스터의 bd (Branch delay) 비트를 1로 설정하고, 동시에 EPC (The Exception Program Counter)는 전치 명령어를 가리키고, 예외 서비스 프로그램 완성 후 전치 명령어를 다시 실행한다.
통상적으로, EPC 레지스터가 저장한 것은 예외 서비스 프로그램을 실행 완료 후 프로세서가 기존의 조작을 계속하는 입구 어드레스이다.
스텝 N233에 있어서, 전치 명령어가 n개 명령어에 영향 줄 때, 고정점 연산소자는 전치 예외 컨트롤 레지스터 (33)을 사용하여 예외가 발생한 명령어가 상기 전치 명령어 영향을 받았는지 여부를 기록한다. 이상이 발생하여 프로세스가 중단될 때 전치 예외 컨트롤 레지스터 (33)에 현재 명령어의 집계수를 저장한다. 이상이 종결되고 중단된 프로세스로 회귀할 때, 상기 집계수에 따라, 즉 사전에 전치 예외 컨트롤 레지스터 (33)가 보존한 집계수에 따라 중단된 프로세스의 상태를 회복한다.
스텝 N234에 있어서, 고정점 연산소자는 입력 명령어에 의해 연산을 진행하고, 연산 결과에 따라 상응한 EFLAG 플래그 비트 출력을 계산한다.
아래 가법 명령어를 예로, 전치 명령어 방식으로 본 발명의 RISC 프로세서 장치의 멀티 모드에서의 데이터 처리방법을 구체적으로 설명한다.
우선, 1개 전치 명령어가 디코더에 진입하고,
다음, 디코더 2는 디코딩을 거쳐 전치 명령어를 식별하고, 디코더는 1개 플래그 비트 X86mode2=1을 설정하고, 전치 명령어를 내부의 무연산 명령 조작 NOP으로 디코딩하고, 후속되는 명령어를 실행하고,
그 다음, 전치 명령어의 넥스트 명령어, 즉 가법 명령어가 디코더에 진입 시, 전치 플래그 비트가 존재하는지 여부를 판단하고, 만약 가법 명령어가 전치 명령어의 파라미터 범위 내에 있지 않으면, 디코더는 명령어 자체가 가지고 있는 소스 레지스터와 타겟 레지스터 및 내부 조작의 조작 코드 (op)를 정상적으로 디코딩하고, 만약 동 가법 명령어가 전치 명령어 파라미터 범위 내에 속하면, 즉 X86모드에 처한 가법 명령어이면, X86 가상머신 명령어 집합 모드에 따라, 계산 결과에 의거하여 EFLAGS 플래그 비트를 수정한다. 따라서 디코더는 EFLAGS 플래그 비트를 소스 레지스터 중 1개로 디코딩하고, 동시에 EFLAGS 플래그 비트를 타겟 레지스터 디코딩하고, 다음 동시에 가법 명령어 자신이 가지고 있는 소스 레지스터와 타겟 레지스터 및 내부 조작의 조작 코드 (op)를 디코딩 하고,
최종적으로, 고정점 연산소자는 디코더의 출력을 입력으로, 만약 정상적인 MIPS 명령어 집합의 명령어이면, 가법 계산을 진행하고, 만약 전치 명령어의 영향을 받는 가법 명령어이면, 고정점 연산소자가 우선 가법 계산을 진행하고, 다음 가법 연산의 결과에 따라 신규 EFLAGS 플래그 비트의 값을 계산한다.
본 발명의 RISC프로세서 장치 및 그 멀티 모드에서 데이터를 처리하는 방법은, RISC프로세서 장치에서 부동한 모드에 있는 가상머신 명령어를 RISC프로세서 장치가 실행할 수 있는 명령어로 번역할 때, 직접 디코딩하고 실행하여 많은 번역 시간을 절약하고, 프로세서 장치의 연산 속도의 지수적 차수 (exponential order)의 제고를 획득하고, 프로세서 장치의 기능을 전체적으로 제고한다.
N3) 소스 프로세서로부터 타겟 프로세서의 어드레스로 전환하는 룩업 테이블 지원
가상머신의 종류는 매우 많다. 그러나 핵심은 번역 혹은 해석하는 과정이다. 즉 타겟 코드를 로컬 코드로 번역 혹은 해석하여 로컬 프로세서에서 실행될 수 있게 하는 과정이다. 가상머신이 로컬 코드를 실행하는 과정 중, 점프 명령어를 만나게 되면, X86 소스 프로그램의 명령어 어드레스를 서로 대응되는 MIPS 타겟 프로그램의 명령어 어드레스로 전환하고, 다음 타겟 프로그램의 명령어 어드레스에 따라 점프를 실현한다. 본 발명은 RISC 프로세서에 소스 명령어 어드레스 (X86 명령어 어드레스)로부터 타겟 명령어 어드레스 (MIPS 명령어 어드레스)까지의 매핑을 해결할 수 있는 룩업 테이블의 구조를 증가하여, 가상머신의 기능을 제고한다.
본 발명 실시예의 X86 가상머신을 지원하는 RISC 프로세서의 룩업 테이블 모듈 (23)은 룩업 테이블을 이용하여 X86 소스 명령어 어드레스로부터 MIPS 타겟 명령어 어드레스까지 전환하는데 사용된다.
본 발명의 하드웨어는 룩업 테이블이 있고, X86 프로그램 중 점프 어드레스로부터 MIPS 점프 어드레스까지 번역에 대하여 신속한 조회를 진행하는 것을 지원하여, 가상머신의 기능을 제고한다.
일 실시예로, 상기 룩업 테이블은 내용에 따라 어드레싱 한 룩업 테이블이고, 연상기억장치/랜덤 액세스 메모리 (Content-Addressable Memory/Random Access Memory, CAM/RAM)을 사용하여 실현하고, 그 중 RAM은 1개 어드레스를 입력하고, 대응하는 어드레스의 데이터를 출력하고, CAM은 내용을 입력하고, 동 내용을 저장한 유닛의 인덱스 번호 혹은 동 인덱스 번호와 관련된 다른 1개 유닛의 내용을 출력한다.
상기 룩업 테이블은 내용에 따라 어드레싱 하는 룩업 테이블이고, X86 점프 어드레스로부터 MIPS 점프 어드레스까지 번역을 실현하고, 즉 RISC 프로세서의 X86 가상머신에서 X86 소스 명령어 어드레스부터 MIPS타겟 명령어 어드레스까지 전환한다. 리스트 아이템 (list item)은 표1과 같다.
룩업 테이블의 리스트 아이템
ASID SPC TPC
표1에서 보이는 바와 같이, X86 소스 명령어 (SPC)로부터 MIPS타겟 명령어 어드레스 (TPC)까지 전환은 3개 도메인을 사용하였다. 즉 ASID 도메인, SPC 도메인, 및 TPC 도메인이다.
그 중, ASID 도메인은 오퍼레이팅 시스템에서 다수개 X86 가상머신 프로세스를 가동하는 ID를 저장하는데 사용된다. 동 다수개 X86 가상머신 프로세스가 모두 룩업 테이블을 사용 시, 오퍼레이팅 시스템이 배분한 ID번호 (ASID)를 사용하여 구별하여, 상호 간섭되지 않게 한다.
SPC 도메인은 X86 소스 명령어 어드레스를 저장하는데 사용된다.
TPC 도메인은 MIPS 타겟 명령어 어드레스를 저장하는데 사용된다.
ASID와 SPC 도메인은 룩업 테이블의 어드레스 부분 (CAM)에 위치하고, TPC는 룩업 테이블의 저장부분 (RAM)에 위치한다.
룩업 테이블 모듈 (23)이 룩업을 진행 시, 현재 X86 가상머신 프로세스의 ASID와 룩업 테이블 명령어가 제기한 SPC가 함께 룩업 테이블의 "어드레스" 부분을 구성하고, 모든 리스트 아이템에 송신하고, 각 리스트 아이템은 자체가 저장한 ASID, SPC를 입력과 비교하고, 만약 매칭(matching)되면 그 중에 저장한 TPC를 출력한다. 따라서, RISC 프로세서의 X86 가상머신 프로세스에 있어서, 룩업 하려는 X86 소스 명령어 어드레스를 입력하기만 하면, 룩업 테이블 모듈 (23)에서 상호 대응되는 MIPS타겟 명령어 어드레스를 룩업 할 수 있다.
그 중, 룩업 테이블의 SPC 도메인과 TPC 도메인 값은 초기화 시 가상머신이 초기화 처리를 진행하고, ASID 도메인 값은 로컬 오퍼레이팅 시스템이 제공한다.
일 실시예로, 본 발명 실시예에서, 상기 룩업 테이블 구조를 방문 혹은 수정하는 4개 명령어에 의해 룩업 테이블 모듈 (23)을 실현한다.
명령어 1, CAMPV 명령어. 상기 명령어는 룩업 테이블 RAM의 리스트 아이템 값을 조회하고,
상기 명령어의 포맷은 아래와 같다.
CAMPV rd, rs
GPR [rs]의 내용에 의해 룩업 테이블을 인덱스하여, RAM의 내용을 획득한다. 범용 레지스터 GPR [rs]의 내용에 의해 룩업 테이블을 인덱스 한다. 만약 히팅 (hitting) 되면, 상응한 RAM의 내용을 타겟 레지스터 GPR [rd]에 저장하고, 만약 리스트 아이템이 히팅되지 않으면, 히팅되지 않은 서비스 프로그램의 입구 어드레스를 타겟 레지스터 GPR [rd]에 저장한다.
명령어의 실행 과정은, 모든 프로세서 명령어가 실행되는 흐름이고, 명령어 로드, 디코딩, 실행을 포함하고, 방문하는 소자는 바로 위에서 설명한 룩업 테이블이다.
명령어 2, CAMPI 명령어. 상기 명령어는 룩업 테이블 RAM 리스트 아이템의 인덱스 (index)를 조회한다.
상기 명령어의 포맷은 아래와 같다.
CAMPI rd, rs
GPR [rs]의 내용에 의해 룩업 테이블을 인덱스 하여, 상기 내용이 위치한 리스트 아이템의 인덱스 (index)를 획득한다. 범용 레지스터 GPR [rs]의 내용에 의해 룩업 테이블을 인덱스 한다. 만약 히팅되면, 상응한 리스트 아이템의 인덱스 (index)를 타겟 레지스터 GPR [rd]에 저장해 넣고, 만약 리스트 아이템이 히팅되지 않으면, 타겟 레지스터 rd의 최상위 비트를 1로 설정한다.
명령어의 실행 과정은, 모든 프로세서 명령어를 실행하는 흐름이고, 명령어 로드, 디코딩, 실행을 포함하고, 방문하는 소자는 바로 위에서 설명한 룩업 테이블이다.
명령어 3, CAMWI 명령어. 상기 명령어는 룩업 테이블 RAM 리스트 아이템의 인덱스 (index)에 의해 룩업 테이블을 작성하고, 상기 명령어의 포맷은 아래와 같다.
CAMWI rd, rs, rt
GPR [rd]의 값에 의해 룩업 테이블을 작성한다. 범용 레지스터 GPR [rd]의 index 값에 따라 GPR [rs]와 GPR [rt] 레지스터의 값을 룩업 테이블의 CAM 리스트 아이템과 RAM 리스트 아이템에 각기 라이트 한다.
만약 인덱스 (index)의 값이 룩업 테이블 리스트 아이템의 범위를 초과하면, 어드레스 에러 예외를 유발한다.
명령어의 실행 과정은, 모든 프로세서 명령어를 실행하는 흐름이고, 명령어 로드, 디코딩, 실행을 포함하고, 방문하는 소자는 바로 위에서 설명한 룩업 테이블이다.
명령어 4, RAMRI 명령어. 상기 명령어는 룩업 테이블 RAM 리스트 아이템의 인덱스 (index)에 의해 룩업 테이블 RAM 리스트 아이템 내용을 판독한다.
상기 명령어의 포맷은 아래와 같다.
RAMRI rd, rs
GPR [rs]의 값에 의해 룩업 테이블의 RAM 내용을 판독한다. 범용 레지스터 GPR [rs]의 index값에 의해 룩업 테이블의 RAM의 내용을 판독하고, 또한 타겟 레지스터 GPR [rd]에 저장해 넣는다.
만약 index의 값이 룩업 테이블 리스트 아이템의 범위를 초과하면, 어드레스 에러 예외를 유발한다.
아래, 조회 미히팅, 즉 룩업 테이블 조회가 실패 시, 즉 룩업 테이블에 상응한 프로세스가 희망하는 한 쌍의 SPC-TPC가 없을 경우, 그에 해당하는 처리과정에 대하여 상세히 설명한다.
조회 실패 시, 즉 미히팅 시, 미히팅된 서비스 프로그램 입구 어드레스로 점프하고, 미히팅된 서비스 프로그램이 처리를 진행한다.
미히팅 서비스 프로그램은 기존의 1개 루틴(routine)이고, MIPS 명령어 집합의 RISC 프로세서의 종래의 표준기술이다. 따라서 본 발명의 실시예에서 상세한 설명은 생략한다.
일 실시예로, 상기 미히팅 서비스 프로그램의 입구 어드레스는 1개 CP0 레지스터 CAM.default를 이용하여 보존하여 실현하고, 가상머신이 1개 기정 값(default value)을 제공하고, CP0 레지스터 CAM.default에 보존하여, 미히팅 서비스 프로그램의 입구 어드레스로 한다.
이는 프로세서의 1개 컨트롤 레지스터이고, 기타 컨트롤 레지스터와 동일한 읽기-쓰기 방식 (단지 어드레스만 다르다)을 사용하고, 가상머신이 1개 기정값을 제공하고, 미히팅 서비스 프로그램의 입구 어드레스로 한다. 룩업 테이블이 테이블을 룩업 하여 미히팅 될 경우, 상기 CAM.default에 보존한 기정값을 타겟 레지스터에 송신한다. 이리하여 룩업 테이블 프로그램은 히팅된 상황에서 MIPS 명령어 어드레스로 점프하여 실행되고, 미히팅 상황에서, 미히팅 서비스 프로그램의 입구 어드레스로 점프한 후, 미히팅 서비스 프로그램이 조회하여 획득한 상응한 어드레스를 이용하여 룩업 테이블을 작성한다. 이로써 테이블 룩업 후 전이 명령어를 가입하여 히팅 여부를 판단하는 것을 피할 수 있다.
이때 타겟 어드레스는 타겟 레지스터에 저장하였기에, 기존 MIPS64 중 직접 점프 명령어 JR rs를 이용하여 점프를 실현할 수 있다.
그 중, rs는 타겟 어드레스가 있는 레지스터이다.
일 실시예로, 미히팅 서비스 프로그램의 입구 어드레스를 룩업 테이블 리스트 아이템의 제0항에 저장하고, 실시예 1 중 컨트롤 레지스터에 저장하지 않는다.
이런 방법에 있어서, 신규 명령어 VJR를 더 설정하고, 디폴트(default)는 제31호 범용 레지스터의 내용을 사용하여 SPC 룩업 테이블로 하고, VJR 명령어의 기능은 첫 번째 방법 중 CAMPV+JR 2개 명령어의 기능과 유사하다.
상기 명령어의 포맷은 아래와 같다.
VJR rt
제31호 범용 레지스터의 값에 의해 룩업 테이블의 RAM 내용을 판독한다. 범용 레지스터 GPR [31]의 값에 의해 룩업 테이블의 RAM 내용 (다시 말하면 전환 후의 타겟 어드레스)을 판독한다. 만약 조회 성공되면, 타겟 레지스터 GPR [rt]에 저장한다. 다음, 명령어는 rt 레지스터의 값에 의해 타겟 어드레스로 점프, 혹은 룩업 테이블의 제0항의 RAM 내용을 타겟 레지스터 GPR [rt]에 저장한다. 명령어는 rt 레지스터의 값에 의해 미히팅 서비스 프로그램으로 점프하여 처리한다.
명령어의 실행 과정은, 모든 프로세서 명령어를 실행하는 흐름이고, 명령어 로드, 디코딩, 실행을 포함하고, 방문하는 소자는 바로 위에서 설명한 룩업 테이블이다.
소스 명령어 어드레스를 사용하는 점프 명령어가 발생하면, 상기 명령어 전에 1개 명령어가 소스 명령어 어드레스의 값을 1개 고정된 레지스터 (예를 들면, 제31호 레지스터)에 저장한다. 예를 들면, X86 중 JMP rax 명령어이다.
2개 MIPS 명령어로 실현한다.
Addiu $31, r2, 0x0
VJR r4
점프 명령어 디코딩 후, VJR 명령어는 상기 고정된 레지스터의 값에 의해 테이블을 룩업 한 후, 만약 히팅 되면, 타겟 명령어 어드레스가 가리키는 코드 세그먼트로 직접 전환하여 실행하고, 만약 미히팅 되면, 룩업 테이블의 제0항으로 직접 점프한 후, 미히팅 서비스 프로그램으로 점프한다.
이하 본 발명에 의한 X86 가상머신을 지원하는 RISC 프로세서 장치의 명령어 어드레스 전환 조회과정에 대하여 상세히 설명하도록 한다. 상기 과정은 아래와 같은 스텝을 포함한다.
스텝 N310, RISC 프로세서의 X86 가상머신이 가동 시, 룩업 테이블을 초기화하고, 획득한 X86 가상머신 명령어 어드레스부터 MIPS 명령어 어드레스까지의 내용을 이용하여 룩업 테이블을 작성하고,
RISC 프로세서의 X86 가상머신을 초기화 시, 미히팅 서비스 프로그램을 이용하여, 미히팅 서비스 프로그램이 유지보호하는 해시 테이블(hash table)의 내용에 의해, CAMPI 명령어와 CAMWI 명령어를 통해 초기화를 진행하여 상응한 X86 명령어 어드레스부터 MIPS 명령어 어드레스까지의 룩업 테이블을 획득한다.
스텝 N320, RISC 프로세서 X86 가상머신의 점프 명령어는 X86 소스 명령어 어드레스부터 타겟 명령어 어드레스까지의 전환을 완성해야하므로 룩업 테이블을 방문한다.
상기 스텝 N320은 아래와 같은 스텝을 포함한다.
스텝 N321, 룩업 테이블 리스트 아이템 값을 조회하는 CAMPV 명령어를 사용하고, 레지스터의 소스 명령어 어드레스에 의해 룩업 테이블을 검색하여 타겟 명령어 어드레스를 획득하고,
스텝 N322, 만약 룩업이 히팅 되면, 직접 획득한 타겟 명령어 어드레스의 값을 타겟 레지스터에 저장하고, 프로그램은 점프 명령어에 의하여 상기 타겟 어드레스가 가리키는 코드 세그먼트로 점프하여 실행되고,
스텝 N323, 만약 룩업이 미히팅되면, 미히팅 서비스 프로그램의 어드레스를 획득하고, 상기 어드레스는 가상머신에 의해 제공되고, 타겟 레지스터에 저장한 후, 프로그램은 미히팅 서비스 프로그램으로 점프 되어 실행된다.
스텝 N330, 미히팅 서비스 프로그램은 가상머신이 유지보호한 해시 테이블의 내용에 의해 룩업 테이블을 다시 작성하고,
상기 스텝 N330아래와 같은 스텝을 포함한다.
스텝 N331, 룩업 테이블 리스트 아이템의 인덱스를 조회하는 CAMPI 명령어를 사용하고, 소스 명령어 어드레스의 값에 의해 상기 값이 있는 리스트 아이템의 인덱스 (index)를 획득하고, 상기 인덱스를 타겟 레지스터에 저장,
스텝 N332, 룩업 테이블 리스트 아이템의 인덱스 (index)에 의해 룩업 테이블을 작성한 AMWI 명령어를 사용하여, 타겟 레지스터의 인덱스 값에 의해 테이블을 작성하는 동시에 프로세스의 ASID, 소스 명령어 어드레스 및 서로 대응되는 타겟 명령어 어드레스를 테이블에 작성한다.
상기 명령어 어드레스 전환을 룩업 하는 방법은 아래와 같은 스텝을 더 포함하는 것이 바람직하다.
스텝 N340, 룩업 테이블의 한 항 내용을 무효하거나, 혹은 룩업 테이블 RAM의 내용을 판독한다.
룩업 테이블 RAM리스트 아이템의 인덱스 (index)에 의해 룩업 테이블을 작성하는 CAMWI 명령어를 사용하고, 지정한 인덱스 (index)의 상기 항에 고정된 값을 작성하고, 상기 고정된 값은 프로그램의 소스 명령어 어드레스와 매칭되지 않는다. 다시 말하면, 상기 항이 무효 된다.
룩업 테이블 RAM 리스트 아이템의 인덱스 (index)에 의해 룩업 테이블 RAM 리스트 아이템 내용을 판독하는 RAMRI 명령어를 사용하고, 지정한 인덱스 (index) 리스트 아이템의 룩업 테이블 RAM의 값을 판독하고, 타겟 레지스터에 저장하여, 디버깅(debugging)에 편리하도록 한다.
본 발명의 RISC 프로세서 장치 및 그 명령어 어드레스 전환 룩업 방법은
RISC 프로세서에 X86 소스 명령어 어드레스부터 MIPS 타겟 명령어 어드레스까지 매핑을 해결할 수 있는 룩업 테이블 구조를 추가하여, RISC 프로세서의 X86 가상머신에서 X86 소스 명령어 어드레스부터 MIPS 타겟 명령어 어드레스까지 전환을 가속화함으로써, 가상머신의 기능을 제고한다.
첨부된 도면을 결부한 본 발명의 구체적인 실시예에 대한 설명을 통하여, 동 기술분야의 당업자는 본 발명의 기타 부분과 특징에 대하여 응당 자명할 것이다.
이상, 본 발명의 구체적인 실시예에 대하여 묘사 및 설명을 진행했고, 이러한 실시예는 예시적인 것으로 본 발명에 대한 제한은 아니고, 본 발명의 보호 범위는 첨부된 특허청구범위에 의해 한정되어야 한다.

Claims (17)

  1. X86 가상머신을 지원하는 RISC 프로세서에 있어서,
    명령어 모듈, 디코더, 룩업 테이블, 고정점 연산소자 및 부동 소수점 연산소자를 포함하고, 그 중:
    상기 명령어 모듈은 하나 이상의 X86 가상머신을 지원하는 명령어를 포함하는 가상머신 명령어 집합을 저장하는데 사용되고,
    상기 디코더는 하나 이상의 명령어 중 미리 지정된 형식의 전치 명령어를 참조하여 상기 각 명령어에 대한 모드가 가상머신 명령어 집합 모드인지 여부를 확인하고, 모드가 상기 가상머신 명령어 집합 모드인 상기 명령어를 가상머신 명령어 집합에 포함된 명령어로 디코딩을 진행한 후 고정점 연산소자 혹은 부동 소수점 연산소자로 출력하는데 사용되고,
    상기 룩업 테이블은 X86 프로그램 중의 점프 어드레스와 MIPS 점프 어드레스를 저장하고, 상기 디코더의 출력에 의해 X86 프로그램 중 점프 어드레스에서 MIPS 점프 어드레스로의 번역에 대한 신속한 룩업을 지원하는데 사용되고,
    상기 고정점 연산소자는 디코더의 출력에 의해 가상머신 명령어 집합의 고정점 명령어에 대하여 처리를 진행하고, 실행 결과를 출력하는데 사용되고,
    상기 부동 소수점 연산소자는 디코더의 출력에 의해 가상머신 명령어 집합의 부동 소수점 명령어에 대하여 처리를 진행하고, 실행 결과를 출력하는데 사용되고,
    상기 가상머신 명령어 집합 모드는 상기 명령어를 상기 가상머신 명령어 집합에 포함된 명령어로써 수행하는 모드인 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  2. 제1항에 있어서, 메모리 액세스 실행 유닛, 메모리 및 데이터 경로를 더 포함하고,
    상기 메모리 액세스 실행 유닛은 상기 디코더의 출력에 따라 상기 데이터 경로를 통해, 상기 메모리에 대한 액세스를 수행하는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  3. 제2항에 있어서,
    범용 물리 레지스터 파일을 더 포함하고, 상기 범용 물리 레지스터 파일은 오버플로 체크 레지스터, 상계/ 하계 어드레스 레지스터, 에뮬레이션 플래그 레지스터, 및 가상머신 모드 컨트롤 레지스터를 포함하고,
    상기 오버플로 체크 레지스터는 RISC 프로세서를 에뮬레이션하는 스택 레지스터에 대하여 부동 소수점 방문을 진행 시, 스택 오버플로 예외를 체크한 결과를 저장하는데 사용되고,
    상기 상계/ 하계 어드레스 레지스터는 X86 프로세서의 유한 메모리 액세스 메커니즘을 에뮬레이션 시 상계/ 하계로 사용되는 유효 어드레스를 저장하는데 사용되고,
    상기 에뮬레이션 플래그 레지스터는 X86 프로세서의 플래그 레지스터 플래그 비트 실현을 에뮬레이션하는데 사용되고,
    상기 가상머신 모드 컨트롤 레지스터는 1개 컨트롤 비트 플래그를 포함하고, 상기 컨트롤 비트 플래그가 1일 경우, 이때 상응한 명령어가 상기 가상머신 명령어 집합 모드에서 운행하고 있음을 표시하고, 상기 컨트롤 비트 플래그가 0일 경우, 이때 상응한 명령어가 비 가상머신 명령어 집합 모드에서 운행하고 있음을 표시하는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  4. 제3항에 있어서,
    부동 소수점 레지스터 파일을 더 포함하고,
    상기 부동 소수점 레지스터 파일은 부동 소수점 컨트롤 레지스터, 부동 소수점 레지스터 스택, 및 하나 이상의 부동 소수점 레지스터를 포함하는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  5. 제1항 내지 4항 중 어느 한 항에 있어서,
    상기 가상머신 명령어 집합은 메모리 액세스 확장 명령어, 전치 명령어, EFLAG 플래그 비트 관련 명령어, 부동 소수점 스택 관련 명령어 및 룩업 테이블 관련 명령어 중 1개 혹은 1개 이상의 조합을 포함하는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  6. 제5항에 있어서,
    상기 디코더는 명령어 처리 모듈 및 모드 식별 모듈을 포함하고,
    상기 명령어 처리 모듈은 가상머신 명령어 집합의 명령어에 대하여 명령어 디코딩을 진행하고, 다음 고정점 연산소자 혹은 부동 소수점 연산소자에 출력하는데 사용되고,
    상기 모드 식별 모듈은 명령어 디코딩 과정 중, 명령어의 가상머신 명령어 집합 모드를 구별하고, 상응한 처리를 진행하는데 사용되는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  7. 제6항에 있어서,
    상기 모드 식별 모듈은 다수배 저장 디코딩 모듈 및 다수배 판독 디코딩 모듈 중 하나 이상을 포함하고,
    상기 다수배 저장 디코딩 모듈은 입력한 명령어가 메모리 액세스 확장 명령어 중 저장 조작 명령어일 때, 소스 레지스터를 1개로부터 다수개 인접한 레지스터로 자동으로 확장하고, 메모리 액세스 실행 유닛 실행에 출력하는데 사용되고,
    상기 다수배 판독 디코딩 모듈은 입력한 명령어가 메모리 액세스 확장 명령어 중 판독 조작 명령어일 때, 상기 판독 조작 명령어를 다수개 내부 조작 명령어로 디코딩하고, 타겟 레지스터를 1개로부터 다수개 인접한 레지스터로 자동으로 확장하고, 상기 다수개 내부 조작에 배분하고, 메모리 액세스 실행 유닛에 출력하여 실행하는데 사용되는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  8. 제7항에 있어서,
    상기 모드 식별 모듈은 전치 명령어 디코딩 모듈 및 플래그 비트 명령어 디코딩 모듈을 더 포함하고,
    상기 플래그 비트 명령어 디코딩 모듈은
    에뮬레이션 EFLAGS 작업 모드에 있는 EFLAG 플래그 비트 관련 명령어에 대하여 처리를 진행하고, 부동한 EFLAG 플래그 비트 관련 명령어에 의해, 에뮬레이션 플래그 레지스터를 그의 명령어의 소스 레지스터 및 타겟 레지스터 중 하나 이상으로 디코딩하는데 사용되고,
    상기 전치 명령어 디코딩 모듈은 전치 명령어 후의 다수개 명령어가 상기 가상머신 명령어 집합 모드에 있음을 제시하는데 사용되는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  9. 제8항에 있어서,
    전치 명령어의 범위 파라미터가 n일 경우, 디코더는 전치 명령어 계수기를 더 포함하고, 전치 명령어 계수기는 전치 명령어 영향을 받고 전이 명령어가 출현하지 않는 명령어 시퀀스의 명령어 수를 기록하는데 사용되고, 상기 명령어 수와 상기 범위 파라미터는 동등한 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  10. 제6항에 있어서,
    상기 디코더는 TOP 포인터 레지스터 및 룩업 테이블 모듈을 더 포함하고, 그 중,
    상기 TOP 포인터 레지스터는 부동 소수점 스택 조작 포인터를 유지보호하고, 부동 소수점 스택의 스택 조작 포인터의 값을 저장하는데 사용되고,
    상기 룩업 테이블 모듈은 룩업 테이블의 관련 명령어에 의해, 룩업 테이블을 이용하여 X86 소스 명령어 어드레스에서 MIPS 타겟 명령어 어드레스로의 전환을 실현하는데 사용되는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  11. 제5항에 있어서,
    상기 고정점 연산소자는 플래그 리드 라이트 모듈, 플래그 연산 모듈, 예외 처리 모듈 및 전치 예외 컨트롤 레지스터를 포함하고,
    상기 플래그 리드 라이트 모듈은 에뮬레이션 플래그 레지스터 플래그 비트의 값을 리드-라이트 하는데 사용되고,
    상기 플래그 연산모듈은 연산 과정 중, RISC 프로세서가 X86 가상머신 작업 모드에 처해 있을 때, 연산 결과에 의해 에뮬레이션 플래그 레지스터 플래그 비트를 획득하고, 혹은 에뮬레이션 플래그 레지스터 플래그 비트 중 1개 비트 혹은 다수개 비트에 따라 분지 점프 명령어를 실행하는데 사용되고,
    상기 예외 처리 모듈은 전치 명령어가 그 뒤에 연속 인접한 1개 명령어에만 영향 줄 경우, 만약 실행 예외가 발생하면 딜레이 슬롯 예외와 같은 방법을 활용하고, Cause레지스터의 bd비트를 1로 설정하고, 동시에 EPC가 전치 명령어를 가리키고, 예외 서비스 프로그램을 완성 후 다시 전치 명령어를 실행하는데 사용되고,
    상기 전치 예외 컨트롤 레지스터는 예외가 발생한 명령어가 상기 전치 명령어의 영향을 받았는지 여부를 기록하고, 이상이 발생하여 프로세스가 인터럽트 될 경우, 현재 명령어의 집계를 저장하고, 이상이 종결되어 중단된 프로세스로 컴백할 때, 상기 집계에 의해 상기 중단된 프로세스를 회복하는데 사용되는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  12. 제10항에 있어서,
    상기 부동 소수점 연산소자는 포인터 조작모듈, 스택 오버플로 판단모듈 및 전환모듈을 포함하고,
    상기 포인터 조작모듈은 상기 TOP 포인터 레지스터에 대하여 조작을 진행하고, 상기 부동 소수점 레지스터 스택 조작을 에뮬레이션 시, 상기 스택 조작 포인터의 스택 조작을 에뮬레이션하고, 스택 조작 포인터의 스테이지를 수정 및 모니터링하는데 사용되고,
    상기 스택 오버플로 판단모듈은 지정한 부동 소수점 레지스터 스택 중 스택 레지스터를 체크하고, 스택 레지스터의 값에 의해 상기 오버플로 체크 레지스터에 대하여 조작을 진행하고, 부동 소수점 방문을 진행 시 스택 오버플로 예외를 체크하는데 사용되고,
    상기 전환모듈은 확장 배정도 부동 소수점 데이터와 배정도 부동 소수점 데이터 사이의 상호 전환을 진행하는데 사용되는 것을 특징으로 하는 X86 가상머신을 지원하는 RISC 프로세서.
  13. RISC 프로세서 장치가 X86 가상머신을 지원하는 명령어 처리방법에 있어서,
    디코더가 RISC 프로세서에서 RISC 프로세서의 작업모드를 X86 가상머신 작업모드로 설정하는 스텝A,
    상기 디코더가 하나 이상의 명령어 중 미리 지정된 형식의 전치 명령어를 참조하여, 상기 각 명령어에 대한 모드가 가상머신 명령어 집합 모드인지 여부를 확인하고, 모드가 상기 가상머신 명령어 집합 모드인 상기 명령어를 가상머신 명령어 집합에 포함된 명령어로 디코딩한 후 출력하는 스텝B,
    고정 소수점 연산 소자 또는 부동 소수점 연산 소자가 상기 출력에 따라, 상응한 계산 혹은 액세스 처리를 진행하고, 실행 결과를 출력하는 스텝 C를 포함하고,
    상기 가상머신 명령어 집합 모드는 상기 명령어를 상기 가상머신 명령어 집합에 포함된 명령어로써 수행하는 모드인 것을 특징으로 하는 RISC 프로세서 장치가 X86 가상머신을 지원하는 명령어 처리방법.
  14. 제13항에 있어서,
    RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 EFLAG 명령어 사용에 대한 지원일 경우,
    상기 스텝A는 구체적으로,
    상기 디코더가 RISC 프로세서에서 RISC 프로세서의 작업 모드를 X86 가상머신 작업 모드로 설정하여, 에뮬레이션 플래그 레지스터의 사용이 가능함을 표시하는 스텝A1이고,
    상기 스텝B는 구체적으로,
    상기 디코더가 연산이 에뮬레이션 EFLAGS 작업모드에 있음을 식별하고, 상기 명령어에 의해 에뮬레이션 플래그 레지스터를 소스 레지스터 및 타겟 레지스터 중 하나 이상으로 디코딩하는 스텝B1이고,
    상기 스텝C는 구체적으로,
    상기 고정 소수점 연산 소자 또는 상기 부동 소수점 연산 소자가 연산 과정 중, RISC 프로세서의 작업모드가 X86 가상머신 작업모드일 경우, 에뮬레이션 플래그 레지스터 플래그 비트의 값을 리드/라이트 하여, 연산 스테이지의 취득/저장을 실현하고, 또는 연산결과에 의해 에뮬레이션 플래그 레지스터 플래그 비트를 획득하고, 혹은 에뮬레이션 플래그 레지스터 플래그 비트 중 1개 비트 혹은 다수개 비트에 의해 분지 점프 명령어를 실행하는 스텝C1인 것을 특징으로 하는 RISC 프로세서 장치가 X86 가상머신을 지원하는 명령어 처리방법.
  15. 제13항에 있어서,
    RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 X86 부동 소수점 포맷과 부동 소수점 스택에 대한 지원일 경우,
    상기 스텝A는 구체적으로,
    상기 디코더가 스택 이네이블 비트에 의해, 부동 소수점 레지스터를 선택하여 부동 소수점 레지스터 스택 조작을 에뮬레이션하는데 사용할지 여부를 결정하거나, 혹은 범용 레지스터를 설정하고, 그의 하위 8비트가 하위부터 상위까지 부동 소수점 레지스터 스택의 0~7번 스택 레지스터의 스테이지를 각기 표시하거나, 혹은 임의의 3개 범용 레지스터를 선택 사용하여 제1 부동 소수점 레지스터, 제2 부동 소수점 레지스터 및 제3 부동 소수점 레지스터로 하고, 64비트 부동 소수점 숫자와 80비트 부동 소수점 숫자의 포맷 전환 작업을 담당하는 스텝A2이고,
    상기 스텝B는 구체적으로,
    상기 디코더가 3비트인 TOP 포인터 레지스터에 스택 조작 포인터의 값을 저장하거나, 혹은 새로 증가한 스택 오버플로 판단 명령어를 디코딩하거나, 혹은 확장 배정도 부동 소수점 데이터와 배정도 부동 소수점 데이터의 전환 명령어에 대하여 디코딩하는 스텝B2이고,
    상기 스텝C은 구체적으로,
    상기 부동 소수점 연산 소자가 부동 소수점 레지스터 스택 조작을 에뮬레이션 시, 포인터 레지스터에 대하여 조작을 진행하고, 스택 조작 포인터의 스택 조작을 에뮬레이션하고, 스택 조작 포인터의 스테이지를 수정 및 모니터링하거나, 혹은 지정한 부동 소수점 레지스터 스택 중 스택 레지스터를 체크하고, 스택 레지스터의 값에 의해 오버플로 체크 레지스터에 대하여 조작을 진행하고, 부동 소수점 스택 오버플로 체크를 진행하거나, 혹은 확장 배정도 부동 소수점 데이터와 배정도 부동 소수점 데이터 사이의 데이터 전환을 실행하는 스텝C2인 것을 특징으로 하는 RISC 프로세서 장치가 X86 가상머신을 지원하는 명령어 처리방법.
  16. 제13항에 있어서,
    RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 X86 스토리지 스트럭쳐에 대한 지원일 경우,
    상기 스텝A는 구체적으로,
    상기 디코더가 RISC 프로세서의 X86 가상머신에서 물리 레지스터 파일 중 2개 범용 레지스터를 각기 상계 어드레스 레지스터와 하계 어드레스 레지스터로 설정하는 스텝A3이고,
    상기 스텝B는 구체적으로,
    상기 디코더가 X86 가상머신 명령어 집합부터 MIPS 명령어 집합까지 번역을 진행할 경우, 명령어에 대하여 디코딩을 진행하고, RISC 프로세서에 의해 처리될 수 있는 이진 체계 코드를 획득하는 스텝B3이고,
    상기 스텝C는 구체적으로,
    상기 고정 소수점 연산 소자가 디코딩 후의 메모리 액세스 명령어 중 상계 어드레스 레지스터에 저장한 상계 어드레스 및/또는 하계 어드레스 레지스터에 저장한 하계 어드레스에 의해, 명령어 연산수 어드레스와 명령어 어드레스의 유효성을 판단하고, 명령어 연산수 어드레스와 명령어 어드레스가 모두 유효 시, 메모리 액세스 조작을 실행하고, 아니면 어드레스 에러 예외를 유발하는 스텝C3인 것을 특징으로 하는 RISC 프로세서 장치가 X86 가상머신을 지원하는 명령어 처리방법.
  17. 제13항에 있어서,
    RISC 프로세서가 X86 가상머신을 지원하는 데이터 처리과정이 가상 메커니즘에 대한 지원일 경우,
    상기 스텝A는 구체적으로,
    상기 디코더가 전치 명령어를 판독하고, 명령어의 가상머신 명령어 집합 모드를 구별하거나, 혹은 프로세서가 다수배 데이터폭의 명령어를 페치하여 디코더에 입력하거나, 혹은 RISC 프로세서의 X86 가상머신이 가동 시 룩업 테이블을 초기화하고, 획득한 X86 가상머신 명령어 어드레스부터 MIPS 명령어 어드레스까지의 내용을 사용하여 룩업 테이블을 채우는 스텝A4이고,
    상기 스텝B는 구체적으로,
    상기 디코더가 명령어의 디코딩 과정 중, 구별한 명령어의 가상머신 명령어 집합 모드에 의해, 명령어를 구별된 가상머신 명령어 집합 모드에 의해 디코딩한 후 출력하거나, 혹은 디코더는 명령어 유형을 판단하고, 다수배 데이터폭의 명령어를 식별 및 디코딩하거나, 혹은 디코더가 룩업 테이블의 관련 명령어를 식별하는 스텝B4이고,
    상기 스텝C는 구체적으로,
    상기 고정 소수점 연산 소자가 전치 명령어의 영향을 받는 명령어를 실행하고, 연산 결과에 따라 상응한 EFLAG플래그 비트를 계산하거나, 혹은 디코딩 후의 다수배 데이터폭의 명령어를 메모리 액세스 실행 유닛에 발송하여 조작을 실행하거나, 혹은 룩업 테이블의 관련 명령어를 실행하고, 타겟 명령어 어드레스의 값을 획득하거나 혹은 타겟 어드레스로 점프하여 실행하는 스텝C4인 것을 특징으로 하는 RISC 프로세서 장치가 X86 가상머신을 지원하는 명령어 처리방법.
KR1020107020814A 2008-03-17 2008-12-17 X86 가상머신을 지원하는 risc 프로세서 장치 및 방법 KR101232343B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN 200810102086 CN100555225C (zh) 2008-03-17 2008-03-17 一种支持x86虚拟机的risc处理器装置及方法
CN200810102086.3 2008-03-17
PCT/CN2008/002023 WO2009114961A1 (zh) 2008-03-17 2008-12-17 一种支持x86虚拟机的risc处理器装置及方法

Publications (2)

Publication Number Publication Date
KR20100125331A KR20100125331A (ko) 2010-11-30
KR101232343B1 true KR101232343B1 (ko) 2013-02-13

Family

ID=39891348

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107020814A KR101232343B1 (ko) 2008-03-17 2008-12-17 X86 가상머신을 지원하는 risc 프로세서 장치 및 방법

Country Status (7)

Country Link
US (1) US8949580B2 (ko)
EP (1) EP2267598B1 (ko)
JP (1) JP5501338B2 (ko)
KR (1) KR101232343B1 (ko)
CN (1) CN100555225C (ko)
CA (1) CA2718724C (ko)
WO (1) WO2009114961A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11762566B2 (en) 2018-01-22 2023-09-19 Arm Limited Programmable mapping of guard tag storage locations
TWI818939B (zh) * 2018-01-22 2023-10-21 英商Arm股份有限公司 具有多個保護標籤設定指令的設備、方法、電腦程式及儲存媒體

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5193624B2 (ja) 2008-02-19 2013-05-08 ルネサスエレクトロニクス株式会社 データプロセッサ
CN100555225C (zh) * 2008-03-17 2009-10-28 中国科学院计算技术研究所 一种支持x86虚拟机的risc处理器装置及方法
CN101819517B (zh) * 2009-05-19 2013-05-22 威盛电子股份有限公司 适用于微处理器的装置及方法
KR101247259B1 (ko) 2009-12-17 2013-04-01 한국전자통신연구원 가상화 장치 및 그 처리 방법
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9336180B2 (en) * 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US20130086359A1 (en) * 2011-09-29 2013-04-04 Qualcomm Incorporated Processor Hardware Pipeline Configured for Single-Instruction Address Extraction and Memory Access Operation
CN102508635B (zh) * 2011-10-19 2014-10-08 中国科学院声学研究所 一种处理器装置及其循环处理方法
US9335993B2 (en) 2011-12-29 2016-05-10 International Business Machines Corporation Convert from zoned format to decimal floating point format
US9329861B2 (en) 2011-12-29 2016-05-03 International Business Machines Corporation Convert to zoned format from decimal floating point format
TWI569205B (zh) * 2012-08-31 2017-02-01 威盛電子股份有限公司 一種微處理器及其操作方法
CN104598196A (zh) * 2014-12-30 2015-05-06 杭州中天微系统有限公司 一种浮点处理装置及方法
US9335982B1 (en) * 2015-04-28 2016-05-10 Microsoft Technology Licensing, Llc Processor emulation using multiple translations
GB2546465B (en) * 2015-06-05 2018-02-28 Advanced Risc Mach Ltd Modal processing of program instructions
US9817642B2 (en) * 2015-06-25 2017-11-14 Intel Corporation Apparatus and method for efficient call/return emulation using a dual return stack buffer
CN105159651B (zh) * 2015-08-31 2017-11-07 中国航天科技集团公司第九研究院第七七一研究所 一种risc处理器的单/双/四精度浮点数据相关电路及操作数获取方法
US10761852B2 (en) 2015-09-30 2020-09-01 International Business Machines Corporation Extending data range addressing
US10394568B2 (en) 2015-09-30 2019-08-27 International Business Machines Corporation Exception handling for applications with prefix instructions
US10877759B2 (en) 2015-09-30 2020-12-29 International Business Machines Corporation Managing the capture of information in applications with prefix instructions
US9870305B2 (en) 2015-09-30 2018-01-16 International Business Machines Corporation Debugging of prefixed code
US10169043B2 (en) * 2015-11-17 2019-01-01 Microsoft Technology Licensing, Llc Efficient emulation of guest architecture instructions
CN105677298B (zh) * 2015-12-30 2018-03-27 李朝波 一种将计算机指令中立即数扩展的方法和装置
US20170192788A1 (en) * 2016-01-05 2017-07-06 Intel Corporation Binary translation support using processor instruction prefixes
US9996329B2 (en) 2016-02-16 2018-06-12 Microsoft Technology Licensing, Llc Translating atomic read-modify-write accesses
US10514913B2 (en) 2017-06-23 2019-12-24 International Business Machines Corporation Compiler controls for program regions
US10379851B2 (en) 2017-06-23 2019-08-13 International Business Machines Corporation Fine-grained management of exception enablement of floating point controls
US10684852B2 (en) * 2017-06-23 2020-06-16 International Business Machines Corporation Employing prefixes to control floating point operations
US10481908B2 (en) 2017-06-23 2019-11-19 International Business Machines Corporation Predicted null updated
US10740067B2 (en) 2017-06-23 2020-08-11 International Business Machines Corporation Selective updating of floating point controls
US10310814B2 (en) 2017-06-23 2019-06-04 International Business Machines Corporation Read and set floating point control register instruction
US10725739B2 (en) 2017-06-23 2020-07-28 International Business Machines Corporation Compiler controls for program language constructs
CN107291425B (zh) * 2017-06-23 2020-11-24 上海兆芯集成电路有限公司 合并解决重命名尺寸问题的部分写入结果的系统和方法
CN108415728B (zh) * 2018-03-01 2020-12-29 中国科学院计算技术研究所 一种用于处理器的扩展浮点运算指令执行方法及装置
CN110874259A (zh) * 2018-08-31 2020-03-10 龙芯中科技术有限公司 程序执行方法、装置、设备和存储介质
EP4009183A1 (en) 2018-10-18 2022-06-08 Shanghai Cambricon Information Technology Co., Ltd Network-on-chip data processing method and device
CN111210012B (zh) * 2018-11-21 2022-12-09 上海寒武纪信息科技有限公司 数据处理方法、装置及相关产品
CN109788352A (zh) * 2018-12-25 2019-05-21 深圳市纽格力科技有限公司 一种基于mips架构的机顶盒异常确认方法和系统
CN110362501B (zh) * 2019-07-05 2021-09-24 北京大学 一种执行饱和寻址加载和存储操作的设备和方法
CN110780925B (zh) * 2019-09-02 2021-11-16 芯创智(北京)微电子有限公司 一种指令流水线的预译码系统及方法
CN111090465B (zh) * 2019-12-19 2022-08-19 四川长虹电器股份有限公司 一种rv32ic指令集的译码系统及其译码方法
JP7487535B2 (ja) * 2020-04-08 2024-05-21 富士通株式会社 演算処理装置
US11119777B1 (en) 2020-04-22 2021-09-14 International Business Machines Corporation Extended prefix including routing bit for extended instruction format
CN111782269B (zh) * 2020-06-04 2023-12-12 珠海格力电器股份有限公司 一种中断处理方法及中断处理设备
CN114077424A (zh) * 2020-08-14 2022-02-22 上海芯联芯智能科技有限公司 扩展mips指令集处理器支持risc指令集多模系统的方法和装置
TWI764311B (zh) * 2020-10-08 2022-05-11 大陸商星宸科技股份有限公司 記憶體存取方法及智慧處理裝置
CN112860320A (zh) * 2021-02-09 2021-05-28 山东英信计算机技术有限公司 基于risc-v指令集进行数据处理的方法、系统、设备及介质
US11922055B2 (en) 2021-04-28 2024-03-05 Seagate Technology Llc Stack register having different ferroelectric memory element constructions
CN113220300A (zh) * 2021-04-29 2021-08-06 麒麟软件有限公司 一种应用于Android系统x86架构上的ARM指令集转换方法
CN114116003B (zh) * 2021-11-25 2024-10-15 中国人民解放军国防科技大学 支持多指令集体系结构的程序运行方法、计算机设备及系统
CN116501451B (zh) * 2023-06-25 2023-10-17 中国科学院计算技术研究所 二进制翻译方法、翻译控制方法、指令执行方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920001323A (ko) * 1990-06-29 1992-01-30 원본미기재 브랜치를 제거하여 컴퓨터 성능을 개선하는 프로세서 동작방법
JPH06131197A (ja) * 1992-10-21 1994-05-13 Toshiba Corp 最適化処理装置
JPH09507592A (ja) * 1993-05-17 1997-07-29 シリコン グラフィックス インコーポレイテッド Riscプロセッサのユニファイド浮動小数点および整数データパス

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1278382C (en) * 1986-12-15 1990-12-27 Brian J. Sprague Reduced instruction set computing apparatus and methods
JPH03150633A (ja) * 1989-11-07 1991-06-27 Matsushita Electric Ind Co Ltd 命令解読装置
JPH06202903A (ja) 1992-12-29 1994-07-22 Nec Corp Cpuシミュレーション方法およびcpuシミュレータ
JP2788839B2 (ja) * 1993-05-15 1998-08-20 日本電気株式会社 Cpuシミュレータ
EP0651320B1 (en) * 1993-10-29 2001-05-23 Advanced Micro Devices, Inc. Superscalar instruction decoder
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
US5685009A (en) 1994-07-20 1997-11-04 Exponential Technology, Inc. Shared floating-point registers and register port-pairing in a dual-architecture CPU
JP3451595B2 (ja) * 1995-06-07 2003-09-29 インターナショナル・ビジネス・マシーンズ・コーポレーション 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
US6076155A (en) * 1995-10-24 2000-06-13 S3 Incorporated Shared register architecture for a dual-instruction-set CPU to facilitate data exchange between the instruction sets
WO1997027537A2 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
EP2275930B1 (en) 1999-01-28 2017-06-14 Advanced Silicon Technologies, LLC Executing programs for a first computer architecture on a computer of a second architecture
US6751737B1 (en) * 1999-10-07 2004-06-15 Advanced Micro Devices Multiple protected mode execution environments using multiple register sets and meta-protected instructions
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
US7552426B2 (en) * 2003-10-14 2009-06-23 Microsoft Corporation Systems and methods for using synthetic instructions in a virtual machine
US7260702B2 (en) 2004-06-30 2007-08-21 Microsoft Corporation Systems and methods for running a legacy 32-bit x86 virtual machine on a 64-bit x86 processor
CN100555225C (zh) * 2008-03-17 2009-10-28 中国科学院计算技术研究所 一种支持x86虚拟机的risc处理器装置及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920001323A (ko) * 1990-06-29 1992-01-30 원본미기재 브랜치를 제거하여 컴퓨터 성능을 개선하는 프로세서 동작방법
JPH06131197A (ja) * 1992-10-21 1994-05-13 Toshiba Corp 最適化処理装置
JPH09507592A (ja) * 1993-05-17 1997-07-29 シリコン グラフィックス インコーポレイテッド Riscプロセッサのユニファイド浮動小数点および整数データパス

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11762566B2 (en) 2018-01-22 2023-09-19 Arm Limited Programmable mapping of guard tag storage locations
TWI818939B (zh) * 2018-01-22 2023-10-21 英商Arm股份有限公司 具有多個保護標籤設定指令的設備、方法、電腦程式及儲存媒體

Also Published As

Publication number Publication date
US8949580B2 (en) 2015-02-03
EP2267598B1 (en) 2018-07-18
CA2718724C (en) 2016-01-19
JP2011515750A (ja) 2011-05-19
EP2267598A4 (en) 2013-03-27
US20110035745A1 (en) 2011-02-10
WO2009114961A1 (zh) 2009-09-24
CN101256504A (zh) 2008-09-03
JP5501338B2 (ja) 2014-05-21
CN100555225C (zh) 2009-10-28
EP2267598A1 (en) 2010-12-29
CA2718724A1 (en) 2009-09-24
KR20100125331A (ko) 2010-11-30

Similar Documents

Publication Publication Date Title
KR101232343B1 (ko) X86 가상머신을 지원하는 risc 프로세서 장치 및 방법
US5781750A (en) Dual-instruction-set architecture CPU with hidden software emulation mode
JP3554342B2 (ja) 拡張ワード寸法及びアドレス空間を有する逆互換性コンピュータアーキテクチュア
KR101706496B1 (ko) 비인가 스택 피봇팅을 방지하기 위한 시스템들 및 방법들
US9250904B2 (en) Modify and execute sequential instruction facility and instructions therefor
JP3451595B2 (ja) 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
US6009261A (en) Preprocessing of stored target routines for emulating incompatible instructions on a target processor
EP0465321B1 (en) Ensuring data integrity in multiprocessor or pipelined processor system
KR100218572B1 (ko) 고성능 프로세서의 번역버퍼에 대해 세분성 힌트를 이용하는 프로세서 동작 방법 및 장치
JP5357181B2 (ja) コンピュータ・システム、その動作方法、及び、コンピュータ・プログラム
KR100401799B1 (ko) 명령어 세트 아키텍처 천이에 대한 명령어 세트의에뮬레이션
KR100190252B1 (ko) 고속 프로세서에서의 브랜치 처리 방법 및 장치
KR20120026104A (ko) 다수의 레인 내의 패킹된 데이터의 언패킹
RU2638641C2 (ru) Загрузка парциальной ширины, зависящая от режима, в процессорах с регистрами с большим числом разрядов, способы и системы
JPH06119166A (ja) 簡略命令セットプロセッサでレジスタ内データ操作を行なう方法
JPH06131175A (ja) 高性能プロセッサのためのバイト比較操作方法
CN112631657B (zh) 用于字符串处理的字节比较方法以及指令处理装置
JPH06110685A (ja) 高性能プロセッサにおける分岐予想方法
KR20110055629A (ko) 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공
JP2010524088A (ja) 適切なプレデコーディングにより可変長命令セットから命令をプレロードするシステム、方法およびソフトウェア
US20160048458A1 (en) Computer Security Systems and Methods Using Hardware-Accelerated Access To Guest Memory From Below The Operating System
JP2011509474A (ja) コンピュータを動作させる方法及びシステム
US8635434B2 (en) Mathematical operation processing apparatus for performing high speed mathematical operations
CN105989758A (zh) 地址翻译方法和装置
US6408380B1 (en) Execution of an instruction to load two independently selected registers in a single cycle

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160119

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170119

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180118

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190117

Year of fee payment: 7