KR101847889B1 - 프로세서 모드들을 스위칭하기 위해 호출된 함수의 어드레스의 최하위 비트들의 이용 - Google Patents
프로세서 모드들을 스위칭하기 위해 호출된 함수의 어드레스의 최하위 비트들의 이용 Download PDFInfo
- Publication number
- KR101847889B1 KR101847889B1 KR1020147025017A KR20147025017A KR101847889B1 KR 101847889 B1 KR101847889 B1 KR 101847889B1 KR 1020147025017 A KR1020147025017 A KR 1020147025017A KR 20147025017 A KR20147025017 A KR 20147025017A KR 101847889 B1 KR101847889 B1 KR 101847889B1
- Authority
- KR
- South Korea
- Prior art keywords
- mode
- processor
- execution mode
- execution
- bits
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 28
- 238000012545 processing Methods 0.000 claims abstract description 15
- 230000008859 change Effects 0.000 claims description 12
- 230000006870 function Effects 0.000 description 68
- 210000003813 thumb Anatomy 0.000 description 15
- 238000013459 approach Methods 0.000 description 11
- 230000006399 behavior Effects 0.000 description 10
- 230000007704 transition Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 241000761456 Nops Species 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
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)
Abstract
프로세싱 시스템들에서 실행 모드들을 트래킹하고 이들 간에 스위칭하기 위한 시스템들 및 방법들이 제공된다. 프로세싱 시스템은 클래식/정렬된 모드 및 압축된/정렬되지 않은 모드로부터 선택된 제 1 및 제 2 실행 모드를 포함하는 적어도 2개의 명령 실행 모드들에서 명령들을 실행하도록 구성된다. 호출들 및 리턴들과 같이 선택된 명령들의 타겟 어드레스들이 압축된 모드에서 강제로 오정렬되고, 압축된 모드에서 타겟 어드레스의 최하위 비트들(정렬 비트들)과 같은 이러한 하나 이상의 비트들은 클래식 모드의 대응하는 정렬 비트들과 상이하다. 선택된 명령들이 제 1 모드의 실행 동안 직면하게 될 때, 제 2 모드로의 동작의 스위칭에 관한 판단은 선택된 명령의 타겟 어드레스의 정렬 비트들의 분석에 기초한다.
Description
35 U.S.C.§119 하의 우선권 주장
본 특허 출원은 2012년 2월 7일 출원되고 본원의 양수인에게 양도된, 발명의 명칭이 "USING THE LEAST SIGNIFICANT BITS OF A CALLED FUNCTION'S ADDRESS TO SWITCH PROCESSOR MODES"인 가출원 번호 제61/595,773호를 우선권으로 주장하며, 상기 가출원은 그에 의해 명시적으로 인용에 의해 본원에 포함된다.
발명의 분야
개시된 실시예들은 프로세싱 시스템들에서 실행 모드들 간의 스위칭에 관한 것이다. 보다 구체적으로, 예시적인 실시예들은 적어도 2개의 명령 모드들을 포함하는 프로세싱 시스템 및 호출된 기능들의 어드레스들의 하나 이상의 최하위 비트들을 이용하여 적어도 2개의 명령 모드들 간에 스위칭하기 위한 기법들에 관한 것이다.
프로세서들은 종종 다수의 실행 모드들을 지원하도록 구성된다. 예를 들어, 제 1 실행 모드는 고정-폭(fixed-width)의 명령들을 포함할 수 있는 반면에, 제 2 실행 모드는 가변-폭 명령들을 지원할 수 있다. 공통 어드레스 공간은 각각의 모드에서 명령들 간에 공유될 수 있어, 프로세서가 제 1 실행 모드에 있는 경우 제 1 명령을, 또는 프로세서가 제 2 실행 모드에 있는 동안 제 2 명령을 동일한 어드레스 또는 프로그램 카운터(PC) 값이 포인팅할 수 있다. 프로세서가 2개의 모드들 간에 스위칭할 수 있기 때문에, 2개의 명령들 중 어느 명령이 현재 PC 값에 의해 어드레싱되는지 확인하고, 이에 따라 명령들이 올바르게 실행되고 있다는 것을 보장하기 위해 실행 모드를 트래킹할 필요가 있게 된다.
알려진 ARM 프로세서를 참조하면, ARM 모드는 고정-폭(32-비트) 명령들을 지원하는 반면에, THUMB 모드는 가변-폭(16-비트 및 32-비트) 명령들을 지원한다. 바이트-어드레싱 가능한 메모리의 공통 어드레스 공간은 ARM 및 THUMB 둘다의 모드들의 명령들을 포함할 수 있다. 그러나 2개의 모드들의 명령들의 정렬(alignment)은 상이할 수 있다. 예를 들어, ARM 모드 명령들은 32-비트 바운더리들로 정렬될 수 있어서, ARM 모드 명령에 대한 2개의 최하위 어드레스 비트들은 항상 "00"일 것이다. 다른 한편, THUMB 모드 명령들은 16-비트 또는 32-비트 바운더리들 중 어느 하나로 정렬될 수 있어서, THUMB 모드 명령들에 대한 2개의 최하위 어드레스 비트들은 "10" 또는 "00"일 수 있다. 따라서, 어드레스만을 아는 것은 2개의 모드들(ARM 또는 THUMB) 중 어느 모드가 현재 실행되고 있는지를 확정적으로 결정하기에 불충분하다.
어느 모드가 실행되는지를 트래킹하기 위해, ARM 프로세서는 PC의 LSB(최하위 비트)에 모드 비트를 저장하는 것을 포함하는 접근법을 이용한다. THUMB 모드에서 PC의 LSB는, 위에서 언급된 바와 같이 2개의 최하위 어드레스 비트들이 "10" 또는 "00" 중 어느 하나이고, 이에 따라 LSB(양자의 경우들에 "0")는 모드 비트를 저장하는데 이용될 수 있으므로 예약된 비트일 수 있다. 실행은 점프 명령과 같은 함수 호출 시에 ARM 모드와 THUMB 모드 간에 스위칭할 수 있다. 따라서, 점프 명령이 THUMB 모드의 명령들을 포함하는 함수로 실행을 전달하는 경우, ARM 프로세서는 함수의 어드레스 + 1로 점프함으로써 THUMB 모드로의 모드들의 이러한 변경을 구현한다. 이러한 방식으로, THUMB 모드의 2개의 최하위 비트들의 값은 "11" 또는 "01" 중 어느 하나이므로, ARM 모드의 2개의 최하위 비트들의 "00" 값으로부터 이들을 구분한다.
ARM 프로세서들에 의해 이용되는 위의 접근법이 트래킹 실행 모드들의 목적들을 달성하지만, 이것은 대응하는 제약들을 겪는다. 예를 들어, "1"의 부가는 THUMB 모드로의 모든 각각의 점프마다 위에서 언급된 바와 같이 요구된다. 이는 소프트웨어 및 특히 링커를 복잡하게 한다. 링커는 각각의 함수의 모드를 결정하고 이어서 각각의 함수에 대한 모든 호출들에 대해 모드 스위칭 호출과 정규 호출 간에 선택해야 한다. 부가적으로, 디버거는 각각 함수의 PC 값으로 점프할지 또는 함수의 PC 값+1로 점프할지를 결정하기 위해 이들 함수들이 ARM 또는 THUMB 함수들인지를 결정하기 위해 디버거 내에서부터 호출되는 함수들을 계속 트래킹할 필요가 있을 수 있기 때문에, 디버거는 또한 영향을 받는다.
위의 접근법과 연관되는 또 다른 단점은 모드 비트를 저장하기 위해 PC의 LSB를 이용하는 것으로부터 발생한다. LSB가 모드를 표현하기 위해 이용되기 때문에, LSB는 더 이상 실제 어드레스들의 부분이 아니다. 그러므로, ARM 프로세서가 THUMB 모드에 8-비트 및 24-비트 명령들을 포함한 경우, THUMB 모드에서 모든 각각의 함수의 시작 포인트는 모드 트래킹을 용이하게 하기 위해 16-비트가 할당되도록 여전히 요구될 것이다. 이는 16-비트 바운더리로 함수의 제 1 명령을 정렬하기 위해 함수들의 시작 이전에 8-비트 nop(no-operation instruction)를 도입하도록 모든 함수들의 약 절반을 요구하는 것을 수반할 것이다.
MIPS 및 PowerPC와 같은 다른 알려진 프로세서 아키텍처들은 실행 모드들 간의 스위칭에 관련된 유사한 과제들에 직면하고 이들 과제들을 처리하기 위해 불리한 방법들을 유사하게 이용한다. 상응하게, 기존의 아키텍처들은 실행 모드들을 트래킹하고 이들 간에 스위칭하기 위한 그들의 접근법들에서 단점들을 표출한다. 예를 들어, 몇몇 접근법들은 MMU(memory management unit)의 임의의 페이지가 어느 하나의 모드에 속할 수 있기 때문에, 명령에 대한 실행 모드를 결정하기 위해 연관된 MMU에 저장된 명령의 PC 값을 이용하는 것을 포함한다. 모드를 결정하기 위해 페이지 속성을 이용하는 증가된 하드웨어 비용의 견지에서 단점은 모드 비트가 MMU의 페이지 테이블 엔트리의 부가적인 공간을 차지하고, 종래의 페이지 테이블 엔트리들이 그의 크기 면에서 제한된다는 것이다. 모드를 결정하기 위해 페이지 속성을 이용하는 소프트웨어 비용들의 견지에서의 단점들은, 로더를 복잡하게 하는 것을 포함하며, 이는 페이지가 어느 모드에 있게 될지를 결정하고 그 다음 그 페이지에 대한 페이지 테이블 엔트리에 적절한 비트를 채워야 할 것이다. 또한, 디버거는 자신이 특정 페이지의 명령들을 디어셈블링할 수 있기 전에, 그 페이지에 대한 페이지 테이블의 엔트리를 룩업해야 할 것이다. 예약된 동작 코드(OpCode) 비트들을 이용하여 어드레스들과 연관되는 모드를 결정하기 위한 특정한 특정 프로그램 코드를 포함하는 다른 알려진 접근법들에도 유사한 결점이 있다.
따라서, 실행 모드들을 트래킹하고 이들 간에 스위칭하기 위한 상술된 접근법들의 단점들을 극복하기 위한 당 분야의 상응하는 필요성이 있다.
본 발명의 예시적인 실시예들은 프로세싱 시스템들의 실행 모드들 간에 스위칭하기 위한 시스템들 및 방법에 관한 것이다. 보다 구체적으로, 예시적인 실시예들은 적어도 2개의 명령 모드들(클래식/정렬된 모드 및 압축/정렬되지 않은 모드)을 포함하고 호출된 함수들의 어드레스들의 하나 이상의 최하위 비트들을 이용하여 적어도 2개의 명령 모드들 간에 스위칭하는 프로세싱 시스템들에 관한 것이다.
예를 들어, 예시적인 실시예는 프로세서의 실행 모드들 간에 스위칭하는 방법에 관한 것으로, 이 방법은 상기 프로세서가 제 1 실행 모드에서 동작할 때 제 1 명령을 검출하는 단계; 상기 제 1 명령의 타겟 어드레스의 하나 이상의 비트들을 분석하는 단계; 및 상기 하나 이상의 비트들에 기초하여 제 1 실행 모드로부터 제 2 실행 모드로 상기 프로세서의 동작을 스위칭할지를 결정하는 단계를 포함한다.
다른 예시적인 실시예는 장치에 관한 것으로, 이 장치는 제 1 실행 모드 및 제 2 실행 모드를 포함하는 적어도 2개의 실행 모드들에서 명령들을 실행하도록 구성된 프로세서; 제 1 실행 모드에서의 실행 동안 제 1 명령을 검출하도록 구성된 로직; 상기 제 1 명령의 타겟 어드레스의 하나 이상의 비트들을 분석하도록 구성된 로직; 및 상기 하나 이상의 비트들에 기초하여 상기 제 1 실행 모드로부터 상기 제 2 실행 모드로 상기 프로세서의 동작을 스위칭할지를 결정하도록 구성된 로직을 포함한다.
또 다른 예시적인 실시예는 프로세싱 시스템에 관한 것으로, 이 프로세싱 시스템은 제 1 실행 모드 및 제 2 실행 모드를 포함하는 적어도 2개의 실행 모드들에서 명령들을 실행하기 위한 수단; 제 1 실행 모드에서의 실행 동안 제 1 명령을 검출하기 위한 수단; 상기 제 1 명령의 타겟 어드레스의 하나 이상의 비트들을 분석하기 위한 수단; 및 상기 하나 이상의 비트들에 기초하여 상기 제 1 실행 모드로부터 상기 제 2 실행 모드로 상기 프로세서의 동작을 스위칭할지를 결정하기 위한 수단을 포함한다.
다른 예시적인 실시예는 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 상기 프로세서의 실행 모드들 간에 스위칭하기 위한 동작들을 수행하게 하는 코드를 포함하는 비-일시적인 컴퓨터-판독 가능한 저장 매체에 관한 것으로, 이 비-일시적인 컴퓨터-판독 가능한 저장 매체는, 상기 프로세서가 제 1 실행 모드에서 동작하고 있을 때 제 1 명령을 검출하기 위한 코드; 상기 제 1 명령의 타겟 어드레스의 하나 이상의 비트들을 분석하기 위한 코드; 및 상기 하나 이상의 비트들에 기초하여 제 1 실행 모드로부터 제 2 실행 모드로 상기 프로세서의 동작을 스위칭할지를 결정하기 위한 코드를 포함한다.
첨부된 도면들은 본 발명의 실시예들의 설명에 도움이 되도록 제시되며 실시예들의 한정이 아닌 단지 실시예들의 예시를 위해 제공된다.
도 1은 예시적인 실시예들에 따라 구성된 프로세싱 시스템의 단순화된 개략도이다.
도 2는 예시적인 실시예들에 따라 실행 모드들 간에 스위칭하도록 구성된 프로세서에 의해 실행되는 예시적인 코드 시퀀스들을 예시한다.
도 3은 예시적인 실시예들에 따라 실행 모드들 간에 스위칭하기 위한 방법의 동작 흐름을 예시한다.
도 4a 내지 도 4b는 예시적인 실시예들에 따라 실행 모드들을 트래킹하고 이들 간에 스위칭하기 위한 방식을 예시한다.
도 5는 본 개시의 실시예가 유리하게 이용될 수 있는 예시적인 무선 통신 시스템(500)을 예시한다.
도 2는 예시적인 실시예들에 따라 실행 모드들 간에 스위칭하도록 구성된 프로세서에 의해 실행되는 예시적인 코드 시퀀스들을 예시한다.
도 3은 예시적인 실시예들에 따라 실행 모드들 간에 스위칭하기 위한 방법의 동작 흐름을 예시한다.
도 4a 내지 도 4b는 예시적인 실시예들에 따라 실행 모드들을 트래킹하고 이들 간에 스위칭하기 위한 방식을 예시한다.
도 5는 본 개시의 실시예가 유리하게 이용될 수 있는 예시적인 무선 통신 시스템(500)을 예시한다.
본 발명의 양상들은, 본 발명의 특정한 실시예들에 관련된 다음의 설명 및 관련된 도면들에서 기재된다. 대안적인 실시예들은 본 발명의 범위로부터 벗어나지 않으면서 고안될 수도 있다. 부가적으로, 본 발명의 잘-알려진 엘리먼트들은, 본 발명의 관련 세부사항들을 불명료하게 하지 않기 위해 상세하게 설명되지 않거나 생략될 것이다.
단어 "예시적인"은 "예, 예시, 또는 예증으로서 기능하는 것"을 의미하도록 본 명세서에서 사용된다. "예시적인"것으로서 본 명세서에 설명된 임의의 실시예는 다른 실시예들에 비해 바람직하거나 유리한 것으로서 해석될 필요는 없다. 유사하게, 용어 "본 발명의 실시예들"은, 본 발명의 모든 실시예들이 논의된 특징, 이점 또는 동작 모드를 포함하는 것을 요구하지는 않는다.
본 명세서에 사용된 용어는 특정 실시예들을 설명하려는 목적만을 위한 것이며, 본 발명의 실시예들을 제한하는 것으로 의도되지 않는다. 본 명세서에 사용된 바와 같이, 맥락이 명확하게 달리 표시하지 않으면, 단수 형태들("a", "an" 및 "the")은 복수 형태들을 또한 포함하도록 의도된다. 용어들 "구비하는", "구비", "포함하는" 및/또는 "포함"이 본 명세서에서 사용된 경우, 언급된 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 특정하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들, 및/또는 이들의 그룹들의 존재 또는 부가를 배제하지 않음을 추가적으로 이해할 것이다.
추가적으로, 많은 실시예들은, 예를 들어 컴퓨팅 디바이스의 엘리먼트들에 의해 수행될 동작들의 시퀀스들의 관점들에서 설명된다. 본 명세서에 설명된 다양한 동작들이 특정한 집적 회로들(예를 들어, 주문형 집적회로(ASIC)들)에 의해, 하나 또는 그 초과의 프로세서들에 의해 실행되는 프로그램 명령들에 의해, 또는 이 둘의 결합에 의해 수행될 수 있음이 인지될 것이다. 부가적으로, 본 명세서에 설명된 동작들의 이들 시퀀스는 실행 시에, 연관된 프로세서로 하여금 본 명세서에 설명된 기능을 수행하게 할 컴퓨터 명령들의 대응하는 세트가 저장되어 있는 임의의 형태의 컴퓨터 판독가능 저장 매체 내에서 완전히 구현되는 것으로 고려될 수 있다. 따라서, 본 발명의 다양한 양상들은 다수의 상이한 형태들로 구현될 수도 있으며, 이들 전부는 청구된 요지의 범위 내에 있는 것으로 고려된다. 부가적으로, 본 명세서에 설명된 실시예들의 각각에 대해, 임의의 그러한 실시예들의 대응하는 형태는, 예를 들어, 설명된 동작을 수행 "하도록 구성된 로직"으로서 본 명세서에서 설명될 수도 있다.
예시적인 실시예들은 기존의 접근법들과 연관되는 단점들을 방지하면서 실행 모드들을 트래킹하고 이들 간에 스위칭하기 위한 기법들을 포함한다. 일 실시예는 적어도 2개의 실행 모드들을 포함할 수 있으며, 여기서 실행 모드들은 모드들 내의 명령들의 각각의 정렬에 관해 정의될 수 있다. 명령들의 정렬에 대한 참조는 일반적으로 메모리 어드레스 공간의 32-비트들(또는 4-바이트들)에 관해 이루어지지만, 이는 제한으로서 해석되어선 안 될 것이다. 개시된 기법들은 본 개시의 범위로부터 벗어남 없이 다른 메모리 어드레스 바운더리들로 쉽게 확장될 수 있다.
이에 따라, 제 1 실행 모드에서, 명령들은 제약들 없이 임의로 정렬되거나 정렬되지 않도록/오정렬되도록 허용될 수 있다. 이 제 1 실행 모드는 "압축된" 모드로서 본 명세서에서 지칭될 것이다. 제 2 실행 모드에서, 명령들의 정렬은 32-비트 바운더리와 같은 대응하는 메모리 어드레스 공간에서 특정된 바운더리들로 억제될 수 있다. 이러한 제 2 실행 모드는 "클래식" 모드로서 본 명세서에서 지칭될 것이다.
이제 도 1을 참조하면, 예시적인 프로세싱 시스템(100)의 단순화된 개략도가 도시된다. 프로세싱 시스템(100)은 메모리(104)에 커플링되는 프로세서(102)를 포함하는 것으로 도시된다. 예시되지 않았지만, 프로세싱 시스템(100)은 당 분야에 잘 알려진 바와 같이 하나 이상의 명령 및/또는 데이터 캐시들, I/O 디바이스들, 보조프로세서들 등과 같은 다양한 다른 컴포넌트들을 포함할 수 있다. 메모리(104)는 바이트-어드레싱 가능할 수 있고 정렬되지 않거나 32-비트 바운더리들로 정렬될 수 있는 명령들(즉, 각각 압축된 모드 및 클래식 모드의 양자의 명령들)을 포함할 수 있다. 프로세서(102)는 클래식 모드는 물론 압축된 모드에서 명령들을 실행하도록 구성될 수 있다.
비-제한적인 예시적인 실시예에서, 클래식 모드의 명령들은 메모리(104)에서 32-비트 바운더리로 정렬될 수 있고, 이에 따라 클래식 모드에서 각각의 그리고 모든 명령의 어드레스들의 2개의 최하위 비트들이 값"00"을 갖게 지시된다. 또한, 이 실시예에서, 압축된 모드에서 선택된 명령들은, 선택된 명령들의 어드레스들의 2개의 최하위 비트들이 비-제로 값, 즉 "00" 이외의 임의의 값을 갖도록(예를 들어, 선택된 명령들의 어드레스들의 2개의 최하위 비트들은 값 "01", "10", 또는 "11"이도록 강제될 수 있음) 강제로 오정렬될 수 있다. 이에 따라, 어드레스들의 이들 최하위 비트들은 정렬을 표시할 수 있고 본 명세서에서 "정렬 비트들"로서 지칭될 수 있다.
강제로 오정렬되는 압축된 모드에서 선택된 명령들은 엔트리 포인트들에 대응할 수 있다. 예를 들어, 엔트리 포인트들은 압축된 모드의 명령들을 포함하는 함수의 시작을 마킹하고; 엔트리 포인트들은 압축된 모드로부터의 호출들에 이어지는 명령들일 수 있거나; 또는 엔트리 포인트들은 예외/인터럽트 핸들러들의 시작을 마킹할 수 있다. 엔트리 포인트들의 본질(precise nature)에 무관하게, 클래식 모드에서의 실행으로부터 압축된 모드에서의 실행으로의 스위칭을 트리거할 수 있는 선택된 명령들은 강제로 오정렬될 수 있다. 압축된 모드에 대한 함수 호출에 이어지는 압축된 모드 명령들과 같은 모든 잔여 명령들의 정렬은 방해받지 않은 채로 유지할 수 있다(즉, 선택된 명령들을 제외한 모든 명령들의 어드레스들의 정렬 비트들은 "00"을 포함하는 임의의 값으로 이루어질 수 있음). 이 구성에 있어서, 예시적인 실시예들은, 종래의 접근법들에서 실행 모드들을 트래킹하고 이들 간에 스위칭하는 단점들을 방지하면서, 클래식 모드에서의 실행 대 압축된 모드에서의 실행 간에 스위칭할 수 있다.
이제 도 2를 참조하면, 프로세서(102)에 의해 실행되는 예시적인 코드 시퀀스들이 예시된다. 코드 시퀀스들(210 및 214)은 클래식(정렬된) 모드의 명령들을 포함하고, 코드 시퀀스(212)는 압축된(정렬되지 않거나 오정렬된) 모드의 명령들을 포함한다. 도시된 바와 같이, 코드 시퀀스(210)는 명령 a1에서 시작하고 명령들 al-a7을 포함하는 함수 1을 포함한다. 함수 1 및 대응하는 명령들(a1-a7)에 대한 어드레스들의 정렬 비트들은 물론 호출(호출 1)은 "00"으로서 예시되었다. 몇몇 실시예들은 선택적인 사용자 상태 레지스터(또는 "USR", 명시적으로 도시되지 않음)를 포함할 수 있고, 여기서 USR은 정렬 비트들의 상태의 표시를 제공하도록 구성될 수 있다. 따라서, 정렬 비트들이 코드 시퀀스(210)의 실행 동안 "00"이지만, USR은 실행이 클래식 모드에 있다는 것을 표시하도록 선택적으로 업데이트될 수 있다. 명령(a4) 이후에 함수 2에 대한 호출(호출 1)이 직면하게 되면, 실행은 함수 2로의 경로(202)를 따를 수 있다.
함수 2에 관하여, 이 함수는 명령 b1에서 시작하고 명령들 b1-b6을 포함할 수 있으며 압축된 모드에 있다. 틀린 실행 모드에서 잘못된 실행을 방지하기 위해 경로(202)를 따름으로써 야기되는 실행 모드들의 스위칭을 프로세서(102)가 인지할 필요가 있다. 따라서, 함수 2는 예시적인 실시예들에서 압축된 모드에 대한 엔트리 포인트로서 인지될 수 있다. 이러한 스위칭을 인지하는 것은 함수 2의 어드레스의 2개의 최하위 비트들(또는 정렬 비트들)("AB")이 "00"이외의 임의의 값이 되도록 강제함으로써 달성될 수 있다. 예를 들어, 함수 2의 어드레스는 메모리(104)에서 강제로 오정렬될 수 있어 "AB"는 "01", "10", 또는 "11"이다. 이러한 강제 오정렬은 예를 들어, 프로세싱 시스템(100)의 컴파일러, 소프트웨어, 또는 전용 로직(명시적으로 도시되지 않음)에서 달성될 수 있다. 일 예에서, 강제 오정렬 함수 2는 경로(202)를 따른 함수 2 이전에 nop를 부가하도록 어셈블러를 구성함으로써 달성될 수 있다. nop의 크기는 정렬 비트들 "AB"이 "00" 이외의 값을 갖는 것을 보장하도록 조정될 수 있다. 예를 들어, 정렬 비트들 "AB"이 이미 "00" 이외의 값으로 이루어진 경우, 어셈블러는 nop를 삽입하지 않을 수 있다. 다른 한편, "AB"의 값이 "00"과 동일한 경우, 어셈블러는 "AB"가 "01"과 동일하도록 함수 2의 시작 어드레스를 조정할 단일 1-바이트 nop를 삽입할 수 있다.
프로세서(102)는 명령들의 실행 동안 직면하게 되는 모든 각각의 엔트리 포인트에 대한 정렬 비트들을 조사하도록 구성될 수 있다. 따라서 엔트리 포인트 함수 2가 비-제로 값으로서 정렬 비트들 "AB"을 갖는다고 프로세서(102)가 인지하면, USR은 실행이 이제 압축된 모드에 있다고 표시하도록 선택적으로 업데이트될 수 있다. 명령들 b1-b3의 정렬은 방해받지 않을 채로 남아있을 수 있고, 그의 대응하는 어드레스들의 정렬 비트들은 "00"을 포함하는 임의의 값을 가질 수 있다.
그 후, 함수 3에 대한 호출(호출 2)이 명령 b3 이후 직면하게 되면, 실행은 함수 3으로의 경로(206)를 따를 수 있다. 재차, 프로세서(102)는 함수 3의 정렬 어드레스 비트들을 조사하도록 구성될 수 있는데, 그 이유는 그것이 엔트리 포인트이기 때문이다. 그러나 이 때에, 엔트리 포인트(함수 3)의 정렬 비트들이 "00"이라고 인지될 수 있는데, 그 이유는 함수 3은 정렬된 클래식 모드에 있기 때문이다. 따라서, 프로세서(102)는 실행이 명령 c1에서 시작하고 명령들(c1-c5)을 포함하는 함수 3에 대해 다시 클래식 모드라는 것을 인지할 수 있다. 프로세서(102)는 또한 선택적으로 클래식 모드로의 리턴을 표시하기 위해 USR을 업데이트할 수 있다.
이제 압축된 모드의 코드 시퀀스(212)로부터 클래식 모드의 코드 시퀀스(210)로 경로(204)를 따라 리턴(리턴 1)하게 되면, 프로세서(102)는 엔트리 포인트의 정렬 비트들을 조사할 수 있다. 이 경우에, 엔트리 포인트는 명령 a5이고, 이에 따라 명령 a5의 정렬 비트들은 "00"이라는 것이 인지될 수 있다. 따라서, 실행이 클래식 모드로 리턴했다고 결론내릴 수 있다. 상응하게, USR은 실행이 클래식 모드에 있다고 표시하도록 업데이트될 수 있다.
경로(208)에 따라 명령 b4로의 리턴(리턴 2)에 대해, 엔트리 포인트는 명령 b4일 것이다. 올바른 동작을 보장하기 위해, 프로세서(102)는 명령 b4가 압축된 모드에 있다고 인지할 수 있어야 한다. 이를 달성하기 위해, 명령 b4는 강제로 오정렬될 수 있어 명령 b4의 정렬 비트들을 "00"이 아니다. 일 예에서, 강제 오정렬 명령 b4는 경로(206)를 따라 함수 3으로의 호출(호출 2) 이전에 nop를 부가하도록 어셈블러를 구성함으로써 달성될 수 있다. nop의 크기는 최하위 비트들"CD"이 "00" 이외의 값을 갖는다는 것을 보장하도록 조정될 수 있다. 다른 예에서, 경로(206)를 따른 함수 3으로의 호출 명령(호출 2)의 크기는 명령 b4의 최하위 비트들 "CD"이 값"01", "10", 또는 "11"로 강제되도록 증가될 수 있다. 명령들 b5 및 b6의 정렬은 제약되지 않고 방해받지 않는다. 따라서, 명령들 b5 및 b6의 어드레스들의 정렬 비트들은 "00"을 포함하는 임의의 값일 수 있다.
이제 도 4a를 참조하면, 호출들/리턴들에 대한 클래식 모드(정렬됨)와 압축된 모드(정렬되지 않음)의 트래킹 및 이들 간의 스위칭을 위한 일반화된 방식이 예시된다. 도시된 바와 같이, 정렬된 어드레스들로의 호출들/리턴들은 루프(406)에 의해 도시된 바와 같이 클래식 모드(402)로 남아있을 수 있다. 클래식 모드(402)로부터 정렬되지 않은 어드레스로의 호출들/리턴들은 경로(408)를 따라 압축된 모드(404)로 천이할 수 있다. 정렬되지 않은 어드레스들로의 호출들/리턴들은 루프(412)에 의해 도시된 바와 같이 압축된 모드(404)에 남아있을 수 있다. 마지막으로, 압축된 모드(404)로부터 정렬된 어드레스들로의 호출들/리턴들은 경로(410)를 따라 클래식 모드(402)로 천이할 수 있다.
위의 실시예들이 호출들/리턴들에 관해 설명되었지만, 예시적인 기법들은 다른 이러한 명령들로 확장될 수 있다. 예를 들어, 몇몇 실시예들은 도 4b를 참조하여 간략히 설명될 jump, jumpr, callr, dealloc_return 등과 같은 명령들에 대한 모드 스위칭들을 모니터링하도록 확장될 수 있다. 이들 명령들은 모드 스위칭들을 위해 모니터링될 수 있고, 따라서, 실행은 호출들/리턴들에 대해 위에서 설명된 것과 유사한 기법들을 따름으로써 올바른 모드에 있게 되도록 보장될 수 있다.
jump 명령들에 관하여, 이들은 예시적인 실시예들에 관해 2개의 상이한 방식들 중 하나에서 활용될 수 있다. 일 예에서, jump 명령은, 함수 내에서 직면하게 될 때, 함수 내의 명령으로 점프시키는데 이용될 수 있다. 다른 예에서, jump 명령은 당업자가 인지할 바와 같이, 호출-타입 거동(call-type behavior)을 수행하도록 이용될 수 있는 테일콜(또는 "tailcall")로서 거동할 수 있다. 함수에 대한 호출이 호출 스택 상에 저장될 수 있는 호출의 위치로의 리턴을 위해 리턴 명령을 요구할 수 있지만, 테일콜은 호출의 위치가 스택 상에 저장되거나 기억될 필요가 없을 수 있다. 다른 한편, 테일콜은 원 호출자에게 직접 리턴할 수 있다. jump와 같은 명령들은 아래에서 추가로 설명되는 바와 같은 부가적인 고려사항들을 필요로 할 수 있다.
jump 명령이 클래식 모드의 함수 내에서 직면하게 되고, jump 명령의 거동이 함수 내의 명령으로 점프하는 것인 경우, 어떠한 모드 변경도 없을 것이다. 그러나 jump 명령이 테일콜 명령과 같은 타입의 거동을 갖는 경우, jump 명령의 실행은 함수 외부에 있을 수 있는 엔트리 포인트로 이동하기 위한 제어 흐름을 야기할 수 있다. 엔트리 포인트는 클래식 모드 또는 압축된 모드 중 어느 하나에 있을 수 있다. 그러므로, 엔트리 포인트의 최하위 비트들을 조사함으로써, 모드 스위칭이 될 필요성이 있는지에 관한 결정이 내려질 수 있다. 따라서, 클래식 모드에서 직면하게 되는 jump 명령의 거동은 위에서 설명된 호출 명령의 거동과 유사할 수 있다.
그러나, 점프 명령이 압축된 모드에 있는 함수 내에서 직면하게 되는 경우, 특별한 고려사항들이 발생할 수 있다. 앞서 설명된 바와 같이, 압축된 모드에서, 강제로 오정렬되는 특정한 엔트리 포인트들을 제외하고, 잔여 명령들이 정렬되거나 정렬되지 않을 수 있다. 즉, 함수 내의 잔여 명령들의 어드레스들의 최하위 비트들은 "00"을 포함하는 임의의 값일 수 있다. 따라서, jump 명령이 함수 내의 타겟 명령으로의 점프를 야기할 때, 타겟 명령의 어드레스는 강제로 오정렬되지 않았을 수 있고 이에 따라 임의의 값일 수 있다. 이에 따라, 타겟 명령의 어드레스의 최하위 비트들을 조사하는 것은 모드 스위칭이 발생했는지를 결정하기에 불충분할 수 있는데, 그 이유는 타겟 명령의 어드레스의 최하위 비트들이 "00"인 경우, 클래식 모드로 스위칭이 발생했다고 표시하지 않기 때문이다. 이러한 상황들을 핸들링하기 위해, 실시예들은 특별한 명령들 또는 특별한 거동을 갖는 명령들을 포함할 수 있다.
하나의 이러한 특별한 거동은 압축된 모드에서, jump 명령과 동일한 함수 내의 타겟 명령으로와 같이 모드 스위칭을 야기하지 않을 명령들로만 점프하도록 jump 명령의 거동을 제한하고; 동일한 함수 외부에 있을 수 있고, 가능하게는 상이한 모드에 있을 수 있는 타겟 명령으로의 점프와 같이 모드 변경을 야기할 수 있는 상황들에 대해 별개의 테일콜 명령을 정의하는 것을 포함할 수 있다. 따라서, 테일콜 함수의 최하위 비트들을 조사하는 것은 모드 변경이 발생했는지를 밝혀낼 수 있고 프로세서는 이 모드 변경을 상응하게 핸들링할 수 있다.
이에 따라, jump 명령과 같은 명령들에 대해, 명령의 실행이 모드 변경을 야기할지 또는 안 할지에 관한 결정은 명령이 직면하게 되는 모드에 기초할 수 있다. jump 명령이 클래식 모드 내에서 직면하게 되는 경우, 타겟 어드레스의 최하위 비트들은 모드 변경이 발생했는지를 결정하는데 이용될 수 있다. 다른 한편, jump 명령이 압축된 모드 내에서 직면하게 되는 경우, 타겟 어드레스의 최하위 비트들에 의해 제공되는 표시들과 무관하게, 어떠한 모드 변경도 발생하지 않거나 모드 변경들은 억제될 수 있다. 대신, 특별한 테일콜 명령들이 모드 변경을 요구할 수 있는 점프-타입 거동을 달성하기 위해 압축된 모드에서 이용될 수 있고 이러한 모드 변경은 테일콜 명령의 최하위 비트들에 기초하여 결정될 수 있다. 유사하게, 몇몇 실시예들에서, 리턴(retrun) 명령은 또한 압축된 모드로 제한될 수 있으며, 클래식 모드에서 이용되지 않는다.
다른 명령들은 jumpr 및 tailcallr을 포함할 수 있다. jump 및 tailcall은 타겟 명령의 어드레스를 특정할 수 있지만, jumpr 및 tailcallr 명령들은 타겟 명령의 어드레스를 보유할 수 있는 레지스터를 특정할 수 있다. 유사하게, callr 명령은 호출되는 함수의 어드레스를 보유할 수 있는 레지스터를 특정할 수 있다. 레지스터를 할당해제하는데 이용될 수 있는 dealloc_return 명령은, dealloc_return 명령의 실행에 관련된 모드 변경들이 dealloc_return 명령의 타겟 어드레스의 최하위 비트들의 조사에 기초할 수 있도록 또한 구성될 수 있다.
이제 도 4b를 참조하면, 위의 특별한 명령들을 포함하는 예시적인 명령들에 대한 모드 스위칭 거동 및 트래킹이 예시된다. 호출된 함수들의 엔트리 포인트/타겟 명령의 어드레스의 최하위 비트들에 기초하여, call, callr, jump, jumpr, 및 dealloc_return와 같은 명령들은 루프 456에 따라 모드 스위칭을 야기함 없이 클랙식 모드(452)에 남아있을 수 있다. 대안적으로, 모드 스위칭이 발생할 수 있고, 이들 명령들(call, callr, jump, jumpr, 및 dealloc_return)은 경로(458)를 따라 압축된 모드(454)로 천이할 수 있다. 압축된 모드(454)로부터, jump 및 jumpr와 같은 명령들은 앞서 설명된 바와 같이 모드 스위치들에 대해 트래킹되지 않을 것이다. 대신, tailcall, tailcallr, 및 return은 트래킹될 수 있다. 이에 따라, 호출된 함수들의 엔트리 포인트/타겟 명령의 어드레스의 최하위 비트들에 기초하여, call, callr, tailcall, tailcallr, return, 및 dealloc_return과 같은 명령들은 루프(462)에 따라 압축된 모드(454)에 남아있을 수 있다. 대안적으로, 모드 스위칭이 발생할 수 있고, 이들 명령들(call, callr, tailcall, tailcallr, return, 및 dealloc_return)은 경로(460)를 따라 클래식 모드(452)로 천이할 수 있다.
몇몇 예시적인 실시예들에서, 압축된 모드에서 함수들로의 엔트리 포인트들과 같은 선택된 명령들만이 강제로 오정렬될 수 있고, 압축된 모드에서 잔여 명령들의 어드레스들은 방해받지 않은 채로 남아있을 수 있다. 따라서, THUMB 모드의 ARM 프로세서와 같은 기존의 접근법들에 대조적으로, 호출된 함수의 PC 값+ 1로 점프하거나 모드의 표시를 보유하기 위해 LSB를 이용할 필요성이 제거된다. 위에서 논의된 바와 같이, 예시적인 실시예들에서, USR은 실행 모드의 표시를 효율적으로 제공하도록 구성될 수 있다. 또한, 이 타입들의 명령들(경로(202)를 따라 함수 2로의 호출 1 및 경로(208)을 따라 명령 b4로의 리턴 2)만이 nop가 삽입되도록 요구할 수 있는 반면에, 204에 따라 명령 a5로의 리턴 1 및 경로(206)에 따라 함수 3으로의 호출 2같은 명령들은 이러한 nop들을 요구하지 않을 것이다. 이에 따라, call/return 명령들의 4개의 타입들 중 2개만이 nop의 도입에 의한 오정렬을 요구할 수 있으며, 이는 nop들의 도입에 의한 코드 공간의 낭비가 감소된다는 것을 의미한다.
또한, 예시적인 실시예들에서, 명령들의 어드레스들은 그들 자체가 어떠한 복잡한 코드 또는 고가의 트래킹 매커니즘들도 요구함 없이 함수 호출들 및 리턴들에 대한 실행 모드를 인지하기 위해 편리하게 이용될 수 있다. 모든 다른 명령들에 대해 USR은 실행 모드의 표시를 효율적으로 제공하도록 구성될 수 있다. 예시적인 실시예들은 실행 모드를 표시하기 위한 예약된 비트들에 대한 필요성을 방지하기 때문에, 실시예들은 함수들로의 엔트리 포인트들에 이어지는 명령들의 어드레스들의 제한과 연관되는 단점들을 상응하게 방지한다. 또한 실행 모드를 결정하기 위해 어드레스의 값을 이용하는 것은 call들 또는 return들에 관해서만 어드레스 비트들의 조사를 요구한다. 따라서 타겟 명령과 연관된 모드가 무엇인지를 미리 알 필요가 없다. 부가적으로, 예시적인 실시예들에서, MMU 페이지 테이블 엔트리들은 명령들의 실행 모드들에 관한 정보를 보유할 필요가 없다. 그러므로 실행이 압축된 모드와 클래식 모드 간에 또는 그 반대로 스위칭할 때 특별한 함수들을 수행하거나 동작을 스위칭하기 위해 프로세싱 시스템(100) 내의 MMU(도시되지 않음)에 대한 요건이 없다.
실시예들은 본 명세서에서 기재된 프로세스들, 기능들 및/또는 알고리즘들을 수행하기 위한 다양한 방법들을 포함한다는 것이 인지될 것이다. 예를 들어, 도 3에서 예시된 바와 같이, 실시예는 프로세서(예를 들어, 프로세서(102))의 실행 모드들 간에 스위칭하는 방법을 포함할 수 있으며, 이 방법은, 프로세서가 제 1 실행 모드(예를 들어, 클래식 모드)에서 동작하고 있을 때 제 1 명령(예를 들어, 도 2에서 각각 함수 2/명령 a5와 같은 타겟 명령/엔트리 포인트를 갖는 call/retrun 명령)을 검출하는 것(블록 302); 제 1 명령의 타겟 어드레스의 하나 이상의 비트들(예를 들어, 도 2에서 각각 함수 2/명령 a5에 대한 2개의 최하위 비트들 또는 정렬 비트들 "AB"/"OO")을 분석하는 것(블록 304); 및 하나 이상의 비트들에 기초하여 제 1 실행 모드로부터 제 2 실행 모드(예를 들어, 압축된 모드)로 프로세서의 동작을 스위칭할지를 결정하는 것(블록 306)을 포함한다.
당업자들은, 정보 및 신호들이 다양한 상이한 기술들 및 기법들 중 임의의 기술 및 기법을 사용하여 표현될 수도 있음을 인지할 것이다. 예를 들어, 상기 설명 전반에 걸쳐 참조될 수도 있는 데이터, 명령들, 커맨드들, 정보, 신호들, 비트들, 심볼들, 및 칩들은 전압들, 전류들, 전자기파들, 자기장들 또는 자기 입자들, 광학 필드들 또는 광학 입자들, 또는 이들의 임의의 결합에 의해 표현될 수도 있다.
추가적으로, 당업자들은 본 명세서에 기재된 실시예들과 관련하여 설명된 다양한 예시적인 로직 블록들, 모듈들, 회로들, 및 알고리즘 단계들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이 둘의 결합들로서 구현될 수도 있음을 인지할 것이다. 하드웨어와 소프트웨어의 이러한 상호교환가능성을 명확히 예시하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들, 및 단계들은 그들의 기능의 관점들에서 일반적으로 상술되었다. 그러한 기능이 하드웨어로서 구현되는지 또는 소프트웨어로서 구현되는지는 특정 애플리케이션 및 전체 시스템에 부과된 설계 제한들에 의존한다. 당업자들은 설명된 기능을 각각의 특정한 애플리케이션에 대해 다양한 방식들로 구현할 수도 있지만, 그러한 구현 결정들이 본 발명의 범위를 벗어나게 하는 것으로서 해석되지는 않아야 한다.
본 명세서에 기재된 실시예들과 관련하여 설명된 방법들, 시퀀스들 및/또는 알고리즘들은 직접 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이 둘의 결합으로 구현될 수도 있다. 소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터들, 하드 디스크, 착탈형 디스크, CD-ROM, 또는 당업계에 알려진 임의의 다른 형태의 저장 매체에 상주할 수도 있다. 예시적인 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고, 저장 매체에 정보를 기입할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수도 있다.
도 5를 참조하면, 예시적인 실시예에 따라 구성되는 다중-코어 프로세서를 포함하는 무선 디바이스의 특정한 예시적인 실시예의 블록도가 도시되며 일반적으로 500이 지정된다. 디바이스(500)는 도시된 바와 같이 메모리(532)에 커플링되는 도 1의 프로세서(102)를 포함할 수 있는 디지털 신호 프로세서(DSP)(564)를 포함한다. 도 5는 또한 DSP(564)에 그리고 디스플레이(528)에 커플링되는 디스플레이 제어기(526)를 또한 도시한다. 코더/디코더(CODEC)(534)(예를 들어, 오디오 및/또는 음성 CODEC)는 DSP(564)에 커플링될 수 있다. 무선 제어기(540)(모뎀을 포함할 수 있음)와 같은 다른 컴포넌트들이 또한 예시된다. 스피커(536) 및 마이크로폰(538)은 CODEC(534)에 커플링될 수 있다. 도 5는 또한 무선 제어기(540)가 무선 안테나(542)에 커플링될 수 있다는 것을 표시한다. 특정한 실시예에서, DSP(564), 디스플레이 제어기(526), 메모리(532), CODEC(534) 및 무선 제어기(540)는 시스템-인-패키지 또는 시스템-온-칩 디바이스(522)에 포함된다.
특정한 실시예에서, 입력 디바이스(530) 및 전원(544)이 시스템-온-칩 디바이스(522)에 커플링된다. 또한, 특정한 실시예에서, 도 5에서 예시된 바와 같이, 디스플레이(528), 입력 디바이스(530), 스피커(536), 마이크로폰(538), 무선 안테나(542) 및 전원(544)이 시스템-온-칩 디바이스(522) 외부에 있다. 그러나, 디스플레이(528), 입력 디바이스(530), 스피커(536), 마이크로폰(538), 무선 안테나(542) 및 전원(544) 각각이 인터페이스 또는 제어기와 같이 시스템-온-칩 디바이스(522)의 컴포넌트에 커플링될 수 있다.
도 5가 무선 통신 디바이스를 도시하지만, DSP(564) 및 메모리(532)는 또한 셋-톱 박스, 음악 재생기, 비디오 재생기, 엔터테인먼트 유닛, 네비게이션 디바이스, 개인용 디지털 보조기기(PDA), 고정 위치 데이터 유닛 또는 컴퓨터 내에 통합될 수 있다는 것이 주의되어야 한다. 프로세서(예를 들어, DSP(564))는 또한 이러한 디바이스 내로 통합될 수 있다.
이에 따라, 본 발명의 실시예는 프로세서의 실행 모드들 간에 스위칭하기 위한 방법을 실현하는 컴퓨터 판독 가능한 매체들을 포함할 수 있다. 이에 따라 본 발명은 예시된 예들로 제한되지 않으며, 본 명세서에서 설명된 기능을 수행하기 위한 임의의 수단은 본 발명의 실시예들에 포함된다.
전술한 개시는 본 발명의 예시적인 실시예들을 나타내지만, 다양한 변화들 및 변형들이 첨부된 청구항들에 의해 정의된 바와 같은 본 발명의 범위를 벗어나지 않으면서 본 명세서에서 행해질 수 있음을 유의해야 한다. 본 명세서에 설명된 본 발명의 실시예들에 따른 방법 청구항들의 기능들, 단계들 및/또는 동작들이 임의의 특정한 순서로 수행될 필요는 없다. 또한, 본 발명의 엘리먼트들이 단수형으로 설명되거나 청구될 수도 있지만, 단수형으로의 제한이 명시적으로 언급되지 않는 한 복수형이 고려된다.
Claims (23)
- 프로세서의 실행 모드들 간에 스위칭하는 방법으로서,
상기 프로세서가 제 1 실행 모드에서 동작하고 있을 때, 타겟 어드레스(target address)에서의 명령으로의 흐름의 변화를 야기하는 제 1 콜(call) 또는 리턴(return) 명령을 검출하는 단계;
상기 타겟 어드레스의 두 정렬 비트들을 분석하는 단계 ― 상기 정렬 비트들은 상기 타겟 어드레스의 두 개의 최하위 비트들이고 그리고 32-비트 바운더리(boundary)에 대한 정렬을 나타냄 ―;
상기 프로세서가 상기 제 1 실행 모드에서 동작하고 있을 때:
적어도 하나의 정렬 비트가 비-제로(non-zero) 값을 갖는 경우 상기 제 1 실행 모드로부터 제 2 실행 모드로 상기 프로세서의 동작을 스위칭하기로 결정하는 단계;
상기 프로세서가 상기 제 2 실행 모드에서 동작하고 있을 때:
두 정렬 비트들이 제로 값을 갖는 경우 상기 제 2 실행 모드로부터 상기 제 1 실행 모드로 상기 프로세서의 동작을 스위칭하기로 결정하는 단계
를 포함하고,
상기 제 1 실행 모드에서, 명령들의 정렬은 대응하는 바이트-어드레싱 가능한(byte-addressable) 메모리 어드레스 공간에서 32-비트 바운더리들로 억제되고, 그리고
상기 제 2 실행 모드에서, 명령들은 정렬되지 않은,
프로세서의 실행 모드들 간에 스위칭하는 방법. - 제 1 항에 있어서,
상기 정렬 비트들은 상기 명령들이 상기 바운더리에 대해 정렬되는 모드에서 "00"이고, 그리고 상기 정렬 비트들은 상기 명령들이 상기 바운더리에 대해 정렬되지 않는 모드에서 "01", "10", 또는 "11" 중 하나인,
프로세서의 실행 모드들 간에 스위칭하는 방법. - 제 1 항에 있어서,
상기 타겟 어드레스를 포함하는 레지스터가 특정되는,
프로세서의 실행 모드들 간에 스위칭하는 방법. - 제 1 항에 있어서,
상기 정렬 비트들에 기초하여, 상기 프로세서가 동작하고 있는 실행 모드의 표시를, 사용자 상태 레지스터에서 제공하는 단계를 더 포함하는,
프로세서의 실행 모드들 간에 스위칭하는 방법. - 프로세싱 시스템으로서,
제 1 실행 모드 및 제 2 실행 모드를 포함하는 적어도 두 개의 실행 모드들에서 명령들을 실행하기 위한 수단;
상기 제 1 실행 모드에서의 실행 동안 제 1 콜 또는 리턴 명령을 검출하기 위한 수단 ― 상기 제 1 콜 또는 리턴 명령은 프로세서가 제 1 실행 모드에서 동작하고 있을 때 타겟 어드레스에서의 명령으로의 흐름의 변화를 야기함 ―;
제 1 명령 어드레스의 상기 타겟 어드레스의 두 정렬 비트들을 분석하기 위한 수단 ― 상기 정렬 비트들은 상기 타겟 어드레스의 두 개의 최하위 비트들이고 그리고 32-비트 바운더리에 대한 정렬을 나타냄 ―;
상기 프로세서가 상기 제 1 실행 모드에서 동작하고 있고 그리고 적어도 하나의 정렬 비트가 비-제로 값을 갖는 경우 상기 제 1 실행 모드로부터 상기 제 2 실행 모드로 상기 프로세서의 동작을 스위칭하기로 결정하기 위한 수단; 및
상기 프로세서가 상기 제 2 실행 모드에서 동작하고 있고 그리고 두 정렬 비트들이 제로 값을 갖는 경우 상기 제 2 실행 모드로부터 상기 제 1 실행 모드로 상기 프로세서의 동작을 스위칭하기로 결정하기 위한 수단
을 포함하고,
상기 제 1 실행 모드에서, 명령들의 정렬은 대응하는 바이트-어드레싱 가능한 메모리 어드레스 공간에서 32-비트 바운더리들로 억제되고, 그리고
상기 제 2 실행 모드에서 명령들은 정렬되지 않은,
프로세싱 시스템. - 코드를 포함하는 비-일시적 컴퓨터-판독가능 저장 매체로서,
상기 코드는 프로세서상에서 실행되는 경우 상기 프로세서로 하여금 제 1 항의 방법을 수행하게 하는, 비-일시적 컴퓨터-판독가능 저장 매체.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261595773P | 2012-02-07 | 2012-02-07 | |
US61/595,773 | 2012-02-07 | ||
US13/655,499 US10055227B2 (en) | 2012-02-07 | 2012-10-19 | Using the least significant bits of a called function's address to switch processor modes |
US13/655,499 | 2012-10-19 | ||
PCT/US2013/025187 WO2013119842A1 (en) | 2012-02-07 | 2013-02-07 | Using the least significant bits of a called function's address to switch processor modes |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140123576A KR20140123576A (ko) | 2014-10-22 |
KR101847889B1 true KR101847889B1 (ko) | 2018-04-11 |
Family
ID=48903962
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147025017A KR101847889B1 (ko) | 2012-02-07 | 2013-02-07 | 프로세서 모드들을 스위칭하기 위해 호출된 함수의 어드레스의 최하위 비트들의 이용 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10055227B2 (ko) |
EP (1) | EP2812792B1 (ko) |
JP (1) | JP6189866B2 (ko) |
KR (1) | KR101847889B1 (ko) |
CN (1) | CN104106044B (ko) |
WO (1) | WO2013119842A1 (ko) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160117961A (ko) | 2015-04-01 | 2016-10-11 | 에스케이케미칼주식회사 | 이차 전지용 전해액 조성물 및 이를 포함하는 이차 전지 |
US10152338B2 (en) * | 2016-12-14 | 2018-12-11 | International Business Machines Corporation | Marking external sibling caller routines |
FR3097345B1 (fr) * | 2019-06-13 | 2021-06-25 | Stmicroelectronics Grand Ouest Sas | Procede de gestion du fonctionnement d’une unite de calcul capable de fonctionner avec des instructions de tailles differentes et circuit integre correspondant |
US10802854B2 (en) * | 2019-08-30 | 2020-10-13 | Alibaba Group Holding Limited | Method and apparatus for interpreting bytecode instruction stream |
CN114020330B (zh) * | 2021-11-04 | 2023-11-03 | 苏州睿芯集成电路科技有限公司 | Risc-v处理器验证中模式切换的方法、电子设备以及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6209079B1 (en) * | 1996-09-13 | 2001-03-27 | Mitsubishi Denki Kabushiki Kaisha | Processor for executing instruction codes of two different lengths and device for inputting the instruction codes |
JP3442100B2 (ja) * | 1992-03-25 | 2003-09-02 | インテル・コーポレーション | コンピュータシステムのシステムイメージをセーブする方法及びこの方法を実施するコンピュータシステム |
EP1065586B1 (en) * | 1999-06-29 | 2008-05-07 | Kabushiki Kaisha Toshiba | Computer system comprising a plurality of parallel processors |
US20100312991A1 (en) * | 2008-05-08 | 2010-12-09 | Mips Technologies, Inc. | Microprocessor with Compact Instruction Set Architecture |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6496922B1 (en) | 1994-10-31 | 2002-12-17 | Sun Microsystems, Inc. | Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation |
US5867681A (en) | 1996-05-23 | 1999-02-02 | Lsi Logic Corporation | Microprocessor having register dependent immediate decompression |
US6189090B1 (en) * | 1997-09-17 | 2001-02-13 | Sony Corporation | Digital signal processor with variable width instructions |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
KR100308211B1 (ko) * | 1999-03-27 | 2001-10-29 | 윤종용 | 압축 명령을 갖는 마이크로 컴퓨터 시스템 |
US6449712B1 (en) * | 1999-10-01 | 2002-09-10 | Hitachi, Ltd. | Emulating execution of smaller fixed-length branch/delay slot instructions with a sequence of larger fixed-length instructions |
JP2001142692A (ja) * | 1999-10-01 | 2001-05-25 | Hitachi Ltd | 2つの異なる固定長命令セットを実行するマイクロプロセッサ、マイクロコンピュータおよび命令実行方法 |
US7093108B2 (en) * | 2001-02-01 | 2006-08-15 | Arm Limited | Apparatus and method for efficiently incorporating instruction set information with instruction addresses |
US20050144427A1 (en) * | 2001-10-23 | 2005-06-30 | Ip-First Llc | Processor including branch prediction mechanism for far jump and far call instructions |
US7376812B1 (en) | 2002-05-13 | 2008-05-20 | Tensilica, Inc. | Vector co-processor for configurable and extensible processor architecture |
US7340588B2 (en) | 2003-11-24 | 2008-03-04 | International Business Machines Corporation | Extending the number of instruction bits in processors with fixed length instructions, in a manner compatible with existing code |
US20060174089A1 (en) | 2005-02-01 | 2006-08-03 | International Business Machines Corporation | Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture |
US7421568B2 (en) | 2005-03-04 | 2008-09-02 | Qualcomm Incorporated | Power saving methods and apparatus to selectively enable cache bits based on known processor state |
GB2435116B (en) * | 2006-02-10 | 2010-04-07 | Imagination Tech Ltd | Selecting between instruction sets in a microprocessors |
ATE466331T1 (de) | 2006-09-06 | 2010-05-15 | Silicon Hive Bv | Datenverarbeitungsschaltung mit mehreren anweisungsarten, verfahren zum betrieb einer solchen datenschaltung und scheduling-verfahren für eine solche datenschaltung |
US7711927B2 (en) * | 2007-03-14 | 2010-05-04 | Qualcomm Incorporated | System, method and software to preload instructions from an instruction set other than one currently executing |
CN102077195A (zh) | 2008-05-08 | 2011-05-25 | Mips技术公司 | 具有紧凑指令集架构的微处理器 |
-
2012
- 2012-10-19 US US13/655,499 patent/US10055227B2/en active Active
-
2013
- 2013-02-07 JP JP2014555869A patent/JP6189866B2/ja not_active Expired - Fee Related
- 2013-02-07 WO PCT/US2013/025187 patent/WO2013119842A1/en active Application Filing
- 2013-02-07 KR KR1020147025017A patent/KR101847889B1/ko active IP Right Grant
- 2013-02-07 CN CN201380008133.7A patent/CN104106044B/zh not_active Expired - Fee Related
- 2013-02-07 EP EP13706805.2A patent/EP2812792B1/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3442100B2 (ja) * | 1992-03-25 | 2003-09-02 | インテル・コーポレーション | コンピュータシステムのシステムイメージをセーブする方法及びこの方法を実施するコンピュータシステム |
US6209079B1 (en) * | 1996-09-13 | 2001-03-27 | Mitsubishi Denki Kabushiki Kaisha | Processor for executing instruction codes of two different lengths and device for inputting the instruction codes |
EP1065586B1 (en) * | 1999-06-29 | 2008-05-07 | Kabushiki Kaisha Toshiba | Computer system comprising a plurality of parallel processors |
US20100312991A1 (en) * | 2008-05-08 | 2010-12-09 | Mips Technologies, Inc. | Microprocessor with Compact Instruction Set Architecture |
Also Published As
Publication number | Publication date |
---|---|
WO2013119842A1 (en) | 2013-08-15 |
CN104106044A (zh) | 2014-10-15 |
EP2812792A1 (en) | 2014-12-17 |
US10055227B2 (en) | 2018-08-21 |
JP6189866B2 (ja) | 2017-08-30 |
KR20140123576A (ko) | 2014-10-22 |
EP2812792B1 (en) | 2017-10-18 |
US20130205115A1 (en) | 2013-08-08 |
JP2015511358A (ja) | 2015-04-16 |
CN104106044B (zh) | 2017-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9003422B2 (en) | Microprocessor architecture having extendible logic | |
KR101847889B1 (ko) | 프로세서 모드들을 스위칭하기 위해 호출된 함수의 어드레스의 최하위 비트들의 이용 | |
US7620802B2 (en) | Instruction execution device, debugging method, debugging device, and debugging program | |
US20120204008A1 (en) | Processor with a Hybrid Instruction Queue with Instruction Elaboration Between Sections | |
US20140258696A1 (en) | Strided target address predictor (stap) for indirect branches | |
JP6796717B2 (ja) | 分岐ターゲットバッファの圧縮 | |
US20120284489A1 (en) | Methods and Apparatus for Constant Extension in a Processor | |
US20140156978A1 (en) | Detecting and Filtering Biased Branches in Global Branch History | |
EP2972791B1 (en) | Method and apparatus for forwarding literal generated data to dependent instructions more efficiently using a constant cache | |
CN104346132A (zh) | 应用于智能卡虚拟机运行的控制装置及智能卡虚拟机 | |
EP3198400B1 (en) | Dependency-prediction of instructions | |
CN115576608A (zh) | 处理器核、处理器、芯片、控制设备和指令融合方法 | |
EP2972789B1 (en) | Method to improve speed of executing return branch instructions in a processor | |
US20040158694A1 (en) | Method and apparatus for hazard detection and management in a pipelined digital processor | |
WO2019005458A1 (en) | BRANCH PREDICTION FOR FIXED STEERING BRANCH INSTRUCTIONS | |
US20170046160A1 (en) | Efficient handling of register files | |
CN112740175A (zh) | 基于加载路径历史的分支预测 | |
US20120144165A1 (en) | Sideband payloads in pseudo no-operation instructions | |
US6922760B2 (en) | Distributed result system for high-performance wide-issue superscalar processor | |
US20120079248A1 (en) | Aliased Parameter Passing Between Microcode Callers and Microcode Subroutines | |
JP2012221086A (ja) | 情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |