KR20080014062A - 마이크로프로세서에서의 효율적인 서브프로그램 복귀 - Google Patents

마이크로프로세서에서의 효율적인 서브프로그램 복귀 Download PDF

Info

Publication number
KR20080014062A
KR20080014062A KR1020077029999A KR20077029999A KR20080014062A KR 20080014062 A KR20080014062 A KR 20080014062A KR 1020077029999 A KR1020077029999 A KR 1020077029999A KR 20077029999 A KR20077029999 A KR 20077029999A KR 20080014062 A KR20080014062 A KR 20080014062A
Authority
KR
South Korea
Prior art keywords
return
readable storage
storage medium
processor readable
microprocessor
Prior art date
Application number
KR1020077029999A
Other languages
English (en)
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 KR20080014062A publication Critical patent/KR20080014062A/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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/394Routing
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Debugging And Monitoring (AREA)
  • Microcomputers (AREA)

Abstract

서브루틴 복귀 동작들을 수행하기 위한 방법 및 매체가 제공된다. 테스트 동작들(88, 90)이 복귀 동작(98)의 다른 동작들(92, 94)과 병렬적으로 수행된다. 이러한 테스트 동작들(88, 90) 및 상기 복귀 동작들(96, 98)은 단일 명령(86)에 응답하여 수행된다.

Description

마이크로프로세서에서의 효율적인 서브프로그램 복귀{EFFICIENT SUBPROGRAM RETURN IN MICROPROCESSORS}
본 발명은 마이크로프로세서에서의 서브프로그램 복귀 동작에 관한 것이다.
프로그램들은 특정 직무를 수행하는 서브루틴(subroutine)들로 빈번하게 특징지어진다. 그 직무가 수행된 후에, 프로그램 플로우는 서브루틴으로부터 메인 프로그램으로 복귀한다. 서브루틴 복귀를 수행하는 일 매커니즘은 복귀 어드레스 레지스터의 컨텐츠를 프로그램 카운터 내로 조건적으로 또는 비조건적으로 이동시키고, 그 다음, 프로그램 실행을 계속하는 것을 포함한다. 복귀 값 레지스터는 또한 불린(Boolean) 값을 나타내는 일정한 상수(literal)로 갱신될 수 있다. 서브프로그램 복귀에 대한 다른 접근 방식은 복귀 어드레스를 스택(stack)으로부터 프로그램 카운터 내로 “파핑(pop)"하고, 그곳에서부터 프로그램 실행을 계속하는 것이다. 또한 이 동작은 임의의 스풀-아웃(spooled-out) 레지스터 파일 컨텐츠를 스택으로부터 레지스터 파일 내로 파핑(pop)할 수 있다.
서브루틴 복귀를 수행하는 이러한 방법들은 여러 실행 사이클을 취한다. 도 1에는, 전통적인 복귀(“RET") 명령이 전형적인 파이프라인식 CPU 내에서 실행되고, 5개의 사이클(10)이 명령을 실행하는데 요구된다. 도 2에는, 전형적인 파이프 라인식 CPU가 프로그램 카운터("PC")(42)와 명령 메모리(44)를 포함한다. CPU는 상이한 파이프라인 단계들을 분리하는 4개의 상이한 파이프라인 레지스터(46, 52, 56, 60)들을 구비한다. 명령 디코드(Decode) 단계(레지스터 46과 52 사이)는 현재의 명령을 디코딩하고 제어 신호를 생성하는 제어/디코드 유닛("CU")(48)과 레지스터 파일(50) 둘 다(both) 구비한다. 실행 단계(레지스터 52와 56 사이)는 산술 논리 유닛(Arithmetic Logic Unit, "ALU")(54)을 포함한다. 메모리 단계(레지스터 56과 60 사이)는 데이터 메모리(58)를 포함한다. 도 1을 다시 참조하면, 사이클 1 동안 명령 페치(Instruction Fetch, "IF") 단계(12)에서 RET 명령이 페치된다(fetched)(블럭 22). 사이클 2에서는 명령 디코드("ID") 단계(14)에서 정정 제어 신호들이 생성되고 복귀 어드레스 레지스터가 레지스터 파일로부터 판독된다(블록 24). 사이클 3에서 실행("EX") 단계(16)에서는 복귀 어드레스 레지스터 컨텐트가 산술 논리 유닛("ALU")을 통해 변화없이 기록된다(블록 26). 사이클 4 동안 메모리("MEM") 단계에서는 복귀 어드레스 레지스터 컨텐트가 데이터 메모리를 지나서 기록된다. 마지막으로 사이클 5에서는 라이트백(Writeback, "WB")(20) 단계에서 복귀 어드레스 레지스터 컨텐트가 프로그램 카운터("PC")에 기록되고, 파이프라인(pipeline)이 플러시된다(flused)(블럭 30). 파이프라인이 플러시되고 나면, 파이프라인은 복귀 어드레스에서의 명령이 프로그램 메모리로부터 판독될때까지 어떤 명령도 포함하지 않는다. 그러므로, 여러 클럭 사이클은 파이프라인 플러시(flush) 프로세스에서 낭비된다.
메모리의 스택으로부터 복귀 어드레스 레지스터를 파핑하는 복귀 인트스럭 션("RETMEM")에 대해서 유사한 문제가 존재한다. 도 3에 도시된 바와 같이, 사이클 1에서 IF 단계에서는 RETMEM 명령이 페치된다(블럭 32). 사이클 2 동안 ID 단계에서는 정정 제어 신호들이 생성된다. 사이클 3에서 EX 단계 동안 데이터 메모리에 대한 제어 신호들이 ALU를 지나 라우트된다(블럭 36). 사이클 4에서 MEM 단계에서는 복귀 어드레스가 데이터 메모리로부터 판독된다(블럭 38). 마지막으로 사이클 5에서 WB 단계에서는 메모리로부터 판독된 복귀 어드레스가 PC에 기록되고 파이프라인이 플러시된다(블럭 40). 도 1에서 복귀 명령에 대해 설명된 바와 같이, 파이프라인 플러시 후에 여러 사이클이 낭비된다.
더욱 효율적인 서브루틴 복귀 동작을 제공하는 것이 바람직하다.
일 실시예에서, 복귀 동작을 필요로 하는 명령이 페치되고 복귀 값 레지스터의 컨텐츠에 기초하여 상태 플래그를 설정한다. 복귀 명령을 처리하는데 요구되는 적어도 하나의 다른 동작과 병렬적으로 상태 플래그가 설정된다. 상태 플래그는, (i) 복귀 어드레스 레지스터의 컨텐츠가 프로그램 카운터 내로 이동되는 경우 또는, (ii) 복귀 어드레스가 스택으로부터 프로그램 카운터 내로 파핑되는 경우 중 어느 하나가 일어나기 전에 설정된다. 다른 실시예에서, 프로세서 판독가능한 저장 매체는 프로세서가 이러한 서브루틴 복귀 동작을 수행하도록 한다.
본 발명의 또다른 실시예에서는, 서브루틴 복귀 동작은 복귀 어드레스를 프로그램 카운터 내로 위치시킨다. 테스트 동작이 복귀 값 레지스터 상에서 실행된다; 테스트 동작은 복귀 동작을 처리하는데 요구되는 하나 이상의 다른 동작과 병렬적으로 수행된다. 프로그램 플로우는 목표 어드레스로 변경된다. 전술한 단계들 각각은 단일 명령에 응답하여 수행된다. 일실시예에서, 프로세서 판독가능한 저장 매체는 프로세서가 이러한 서브루틴 복귀 동작을 수행하도록 하는 명령을 저장한다.
도 1은 종래 기술에서 복귀 명령이 실행되는 방법을 도시하는 챠트.
도 2는 종래 기술에서의 파이프라인식 CPU의 블록 다이어그램.
도 3은 종래 기술에서 복귀 어드레스 레지스터를 메모리의 스택으로부터 파핑하는 복귀 명령이 실행되는 방법을 도시하는 챠트.
도 4는 본 발명의 실시예에서의 파이프라인식 CPU의 블록 다이어그램.
도 5은 본 발명의 실시예에서의 복귀 명령의 예시적인 실행을 도시하는 챠트.
도 6은 본 발명의 실시예에서 복귀 어드레스 레지스터를 메모리의 스택으로부터 파핑하는 복귀 명령의 예시적인 실행을 도시하는 챠트.
서브루틴 복귀 동작 동안 복귀 값 레지스터의 테스트에 따라 (프로세서의 상태 레지스터에 있는) 상태 플래그가 갱신되는 더욱 효율적인 서브루틴 복귀 동작이 제공된다. 종래 기술에서는, 예컨대 복귀 값 레지스터의 테스트와 같은 테스트 동작들은 별도의 명령에 응답하여 수행된다. 일 실시예에서, 복귀 동작을 통합하는 단일 명령들 뿐만 아니라 조건적인 복귀 명령들과 같은 단일 명령들을 실행하는 동 작들과 병렬적으로 상태 플래그들이 설정된다. 명령들은 프로세서 판독가능한 매체 내에 저장되며, 프로세서 판독가능한 매체는 전자 회로, 반도체 메모리 장치, ROM, 플래시 메모리, 플로피 디스켓, 컴팩트 디스크, 광학 디스트 등과 같이 정보를 저장하거나 전달할 수 있는 어떤 매체든지 포함한다.
이러한 명령들은 기존의 하드웨어에 의해 실행될 수 있다. 도 4에서, 이러한 명령들을 실행하는 예시적인 CPU는 PC(62) 및 명령 메모리(64)를 포함한다. CPU는 상이한 단계들을 분리시키는 4개의 파이프라인 레지스터(IF/ID(66), ID/EX(70), EX/MEM(74), MEM/WB(78))를 포함한다. 레지스터 66과 70 사이의 ID 단계는 현재 명령을 디코딩하고 정정 제어 신호들을 생성하는 제어/디코드 유닛(68)을 포함한다. ID 단계는 또한 레지스터 파일(132)을 포함한다. 레지스터 70과 74 사이의 EX 단계는 ALU(72) 및 플래그 레지스터(84)를 포함한다. 레지스터 74와 78 사이의 MEM 단계는 데이터 메모리(76)를 포함한다. 어드레스가 (레지스터(78) 후의) WB 단계에 다다르면, 파이프라인은 플러시되고 페치 어드레스는 PC(62)에 기록된다. 멀티플렉서(118)는 어떤 어드레스가 레지스터 파일 또는 프로그램 카운터 내로 기록되는지를 결정한다(이는 이하에서 더욱 자세히 설명된다). 다른 실시예들에서, 프로세서는 데이터 포워딩과 같은 다른 특징들을 가질 수 있다; 전술한 바와 같이, 도 4에 도시된 CPU는 예시적인 것이고, 여기서 기술되는 보다 효율적인 서브루틴 복귀 동작을 실행할 수 있는 오직 하나의 프로세서는 아니다.
본 발명의 일 실시예에서, 테스트 동작들은 보다 효율적인 서브루틴 복귀 동작을 갖는 명령들의 실행 동안 다른 동작들과 병렬적으로 수행된다. 일 실시예에 서, 도 5에 도시된 바와 같이, 복귀("return_with_test") 명령이 실행되면, IF 단계에서 사이클 1 동안 return_with_test 명령이 페치된다(블럭 86). 사이클 2에서, return_with_test는 ID 단계로 들어가고, 정정 제어 신호들이 생성되며, 복귀 어드레스 레지스터가 레지스터 파일로부터 판독된다(블럭 88). 사이클 3에서, return_with_test는 ID 단계에서 추가적인 사이클(일 실시예에서, 이는 명령을 두개의 “마이크로 동작들”로 나눔으로써 디코드 단계에서 수행될 수 있다. 하나의 마이크로 동작은 테스트 동작을 수행하고, 다른 마이크로 동작은 복귀 동작을 수행한다)로 유지된다; 이 두 번째 사이클에서, 복귀 값 레지스터는 레지스터 파일로부터 판독되고, 테스트 동작을 수행하기 위해 ALU에게 명령하는 제어 신호들이 생성된다(블럭 90). 사이클 3에서 EX 단계에서는, 복귀 어드레스 컨텐츠가 ALU를 통해 변화없이 기록된다(블럭 92). 사이클 4동안 EX 단계에서는, ALU가 값 레지스터의 테스트에 대응하는 플래그들을 설정한다(블럭 94). 이 실시예에서, 상태 플래그들은 복귀 값 레지스터의 컨텐츠와 제로를 비교한 것에 따라 설정된다. 이 실시예에서 사용되는 상태 플래그들은 오버플로우("V"), 음의 값("N"), 0의 결과("Z"), 그리고 산술 또는 논리 동작 후의 자리올림(carry)("C")을 나타낸다. 다른 상태 플래그들이 다른 실시예들에서 사용될 수 있으며, 다른 실시예들에서 상태 플래그들이 상이하게 설정될 수 있다. 사이클 4 동안 MEM 단계에서는, 복귀 어드레스 레지스터 컨텐트가 데이터 메모리를 지나 기록된다(블럭 96). 사이클 5 동안 WB단계에서는, 복귀 어드레스 레지스터 컨텐트가 PC에 기록되고 파이프라인이 플러시된다(블럭 98). 테스트 동작은 사이클들을 사용하여 수행되고, 그렇지 않은 경우 파이프라인 플러시에 기인하여 사용되지 않을 것이다.
다른 실시예에서, 테스트 동작은 복귀 어드레스 레지스터를 메모리의 스택으로부터 파핑하는 복귀 명령("pop_with_test")의 실행 동안 수행될 수 있다. 도 6에서, 사이클 1에서 IF 단계에서는, pop_with_test 명령이 페치된다(블럭 100). 사이클 2동안 ID 단계에서는 정정 제어 신호들이 생성된다(블럭 102). 사이클 3에서 pop_with_test는 ID에서 추가의 사이클로 유지되고(일 실시예에서, 명령은 ID 단계에서 두개의 마이크로 동작들(서브루틴 복귀 동작 및 테스트 동작)로 디코드된다); 복귀 값 레지스터는 레지스터 파일로부터 판독되고, 테스트 동작을 수행하기 위해 ALU를 명령하는 제어 신호들이 생성된다(블럭 104). 사이클 3에서 EX 단계에서는, 데이터 메모리에 대한 제어 신호들이 ALU를 지나 라우트된다(블럭 106). 사이클 4에서 EX 단계에서는 ALU는 복귀 값 레지스터의 테스트에 대응하는 플래그들을 설정한다(블럭 108). 동일 사이클 동안 MEM 단계에서는, 복귀 어드레스가 데이터 메모리로부터 판독된다(블럭 110). 사이클 5에서 WB 단계에서는, 메모리로부터 판독된 복귀 어드레스가 PC에 기록되고, 파이프라인이 플러시된다(블럭 112).
본 발명의 다른 실시예들은 전술한 실시예들로부터 다양화될 수 있다. 이러한 실시예들은 명령들을 실행하는 보다 적은 수의 또는 추가의 클럭 사이클들을 필요로 할 수 있다. 다른 실시예들은 명령들을 실행하는 다른 하드웨어를 필요로 할 수 있다. 또 다른 실시예들은 다른 서브프로그램 복귀 동작 및 명령들로 통합될 수 있다.
도 5 및 6은 "return_with_test" 및 "pop_with_test" 명령의 예시적인 실시 예들을 각각 도시한다. "return_with_test" 명령에서, "return"은 복귀 값 레지스터의 값을 테스트하는 동작과 함께 수행된다. "test"는 특정된 레지스터를 테스트하고 그에 따라 조건 코드 플래그들을 설정한다. "pop_with_test" 명령은 "pop"(스택으로부터 특정된 레지스터 또는 프로그램 카운터 내로 워드(word)를 로드하고 PC로 파핑하는 것은, 파이프라인을 플러시하고, 스택으로부터 로드된 어드레스로부터 페칭 명령을 시작한다)을 복귀 값 레지스터의 값을 테스트하는 동작과 함께 수행한다.
다양한 신호들이 제어/디코드 유닛으로부터 요구될 수 있다. 도 4를 다시 참조하면, 일 실시예에서 요구되는 신호들은 이하와 같다.
pcmux_sel 114 - 프로그램 카운터가 순차적인 프로그램 어드레스 또는 복귀 명령에 의해 주어진 어드레스와 함께 갱신될 것인지 여부를 선택하는데 사용되는 선택기 신호.
wbmux_sel 116 - 어떤 어드레스가 레지스터 파일 또는 프로그램 카운터 내로 기록될 지를 결정하기 위해 라이트백(writeback) 단계에 의해 사용되는 선택기 신호. 신호가 논리 "0"이면, 어드레스는 EX/MEM 파이프라인 단계로부터의 ALU 결과로부터 온다. 신호가 논리 "1"이면, 어드레스는 데이터 메모리로부터 온다.
as_ctrl 120 - ALU 내의 합산기(adder)가 레지스터 파일로부터의 연산수(operand)들에 대한 감산 또는 가산을 수행할 지를 선택하는 데 사용되는 제어 신호.
zeromux_sel 122 - ALU에 대한 입력 연산수 B를 정수 값 0으로 만드는 데 사 용되는 신호.
readreg1 124 - 연산수 1에 대한 레지스터 파일 레지스터 수.
readreg2 126 - 연산수 2에 대한 레지스터 파일 레지스터.
loadflag 128 - 상태 레지스터가 플래그 설정을 갱신하도록 하는 제어 신호.
writeaddr130 - 결과가 라이트 백되는 레지스터에 대한 레지스터 파일 레지스터 수.
이하 도시된 테이블은 RET 명령의 사이클들에 있는 제어/디코드 유닛으로부터의 예시적인 출력들을 열거한다. 테이블에 있는 레지스터들은 다음과 같다.
R12 - 복귀 값 레지스터. 테스트 동작들은 이 레지스터 상에서 수행된다.
LR - 링크(Link) 레지스터. 서브프로그램이 완료된 후에 어드레스를 복귀하도록 유지한다. LR은 또한 복귀 어드레스 레지스터(RAR)로도 불릴 수 있다.
PC - 프로그램 카운터. 현재 실행중인 명령의 어드레스를 갖고 있다.
이하 도시되는 테이블은 return_with_test 명령의 사이클들에서의 제어/디코드 유닛으로부터의 예시적인 출력들을 열거한다.
Figure 112007092139410-PCT00001
이하의 테이블은 pop_with_test 명령의 사이클들에서의 제어/디코드 유닛으로부터의 예시적인 출력들을 열거한다.
Figure 112007092139410-PCT00002
"return_with_test" 및 "pop_with_test" 명령은 다른 명령의 부분으로서 실행될 수도 있다. 예컨대, "return_with_test" 명령은 특정한 조건이 참(true)일 경우 서브루틴으로부터의 복귀가 있는 조건적 복귀 명령의 부분으로서 실행될 수 있다. 값들이 복귀 레지스터 내로 이동하고, 복귀 값은 테스트되며, 플래그들이 설정된다. 이 명령의 특정 예는 ATMEL AVR32 명령 세트의 "retcond4" 명령이다. 이하의 유사코드(pseudocode)는 retcond4 명령을 기술한다(SP는 스택 포인터 레지스터이다):
Figure 112007092139410-PCT00003
이하의 테이블은 위에서 사용된 몇몇 기억용 명령 코드(mnemonic) 및 "Load Multiple Registers" 명령에 대한 유사코드를 설명한다.
Figure 112007092139410-PCT00004
동작 CP R12에서, 0은 동작이 없는 비교 또는 감산 동작이다. 이 특정 케이스에서, 동작의 결과는 R12-0 이다.
"return_with_test" 동작이 이용될 수 있는 다른 명령은 AVR32 명령 세트로부터의 "Load Multiple Registers" 명령이다. 이 명령은 레지스터 포인터에 의해 포인트된 연속적인 워드들을 명령에서 특정된 레지스터 내로 로드한다. PC가 로드될 수 있고, 이는 로드된 목표 어드레스로의 점프로 귀결된다. PC가 로드되면, R12 내의 복귀 값이 테스트되고 플래그들이 갱신된다. 복귀 값은 선택적으로 -1, 0, 또는 1로 설정될 수 있다. 이하의 유사코드는 이 명령을 기술한다(SP는 스택 포인터이다):
Figure 112007092139410-PCT00005
Figure 112007092139410-PCT00006
"pop_with_test" 동작을 사용하는 유사한 명령들이 SP에 의해 포이트된 워드들이 명령에서 특정된 레지스터들 내로 로드되는 데에 이용될 수 있다.
"pop_with_test" 동작이 이용될 수 있는 명령은 AVR32 명령 세트의 스택으로부터의 팝 다중 레지스터("POPM") 인스트럭션이다. 이 명령은 SP에 의해 포인트된 연속적인 워드들을 명령에서 특정된 레지스터들 내로 로드한다.
어떻게 서브루틴 복귀 동작이 다른 명령들에서 이요될 수 있는지 보여주는 특정 예들이 전술된 반면, 다른 실시예들은 서브루틴 동작을 다른 명령들에 통합할 수 있다.
보다 효율적인 서브루틴 복귀 동작들의 일 이점은 코드 사이즈의 감소이다. 이는 테스트 동작이 복귀 동작에 의해 내재적으로 수행될 수 있어 명백한 "test return register" 명령이 제거될 수 있기 때문이다. 다른 이점은 복귀 레지스터 테스트가 프로그래이 복귀될 명령의 페칭 동작과 병렬적으로 수행되기 때문에 실행 시간이 감소된다는 점이다.
전술한 명령들 및 동작들은 RISC 및 CISC 기계들에 사용될 수 있다.
본 발명이 특정 예시적인 실시예들의 관점에서 기술되었지만, 당업자라면 본 발명의 원리로부터 벗어나지 않는 한 실시예들에 대한 변화 및 추가가 행해질 수 있다는 것을 인지할 수 있을 것이다. 예컨대, 복귀 동작들은 실행되는 더 많은 또는 더 적은 사이클들을 필요로 할 수 있으며, 복귀 동작들이 다른 명령들의 부분이 될 l수 있으며, 또는 복귀 동작을 실행하는 프로세서들이 다른 아키텍쳐들을 가질 수 있다. 다른 실시예에서, 복귀 동작이 하나의 사이클에서 완료되도록 하기 위해 더 많은 하드웨어가 추가될 수 있다(즉, 단일 명령에 응답하여 수행되는 두개의 마이크로 동작이 하나의 사이클 내에서 완료된다).

Claims (27)

  1. 서브루틴 복귀 동작을 수행하는 방법에 있어서,
    a) 상기 복귀 동작을 요구하는 명령을 페치하는(fetch) 단계; 및
    b) 상기 복귀 동작을 처리하는 데 요구되는 적어도 하나의 다른 동작과 병렬적으로 복귀 값 레지스터의 컨텐츠에 기초하여 상태 플래그들을 설정하는 단계를 포함하고,
    상기 상태 플래그들은, i) 복귀 어드레스 레지스터의 컨텐츠가 프로그램 카운터 내로 이동되는 동작, 또는 ii) 복귀 어드레스가 스택(stack)으로부터 상기 프로그램 카운터 내로 파핑(pop)되는 동작 중 어느 하나가 발생하기 전에 설정되는 것인 서브루틴 복귀 동작 수행 방법.
  2. 제1항에 있어서, 테스트 동작이 복귀 조건들이 만족되는 것으로 판정하는 경우에만, 상기 복귀 어드레스 레지스터의 컨텐츠가 상기 프로그램 카운터 내로 이동하거나, 상기 복귀 어드레스가 상기 스택으로부터 상기 프로그램 카운터 내로 파핑되는 것인 서브루틴 복귀 동작 수행 방법.
  3. 제1항에 있어서, 상기 복귀 동작은 두개의 마이크로 동작들로 분리되고, 하나의 마이크로 동작은 상기 복귀 동작을 수행하기 위한 것이고, 다른 마이크로 동작은 테스트 동작을 수행하기 위한 것인 서브루틴 복귀 동작 수행 방법.
  4. 제1항에 있어서, 상기 상태 플래그들은, 마이크로프로세서의 산술 논리 유닛(Arithmetic Logic Unit)을 통하여 복귀 어드레스 레지스터의 컨텐츠를 기록하는 것과 병렬적으로 설정되는 것인 서브루틴 복귀 동작 수행 방법.
  5. 제1항에 있어서, 상기 상태 플래그들은, 상기 마이크로프로세서의 산술 논리 유닛을 지나 마이크로프로세서의 데이터 메모리에 대한 제어 신호들을 라우팅하는 것과 병렬적으로 설정되는 것인 서브루틴 복귀 동작 수행 방법.
  6. 제1항에 있어서, 단계 a) 및 b)는 단일 명령에 응답하여 수행되는 것인 서브루틴 복귀 동작 수행 방법.
  7. 프로세서에 의해 실행될 때 상기 프로세서가 서브루틴 복귀 동작을 수행하는 방법을 실행하도록 하는 명령을 저장하는 프로세서 판독가능한 저장 매체에 있어서, 상기 서브루틴 복귀 동작 수행 방법은,
    a) 상기 복귀 동작을 요구하는 명령을 페치하는 단계; 및
    b) 상기 복귀 동작을 처리하는 데 요구되는 적어도 하나의 다른 동작과 병렬적으로, 복귀 값 레지스터의 컨텐츠에 기초하여 상태 플래그들을 설정하는 단계를 포함하고,
    상기 상태 플래그들은, i) 복귀 어드레스 레지스터의 컨텐츠가 프로그램 카 운터 내로 이동되는 동작, 또는 ii) 복귀 어드레스가 스택으로부터 상기 프로그램 카운터 내로 파핑되는 동작 중 어느 하나가 발생하기 전에 설정되는 것인, 프로세서 판독가능한 저장 매체.
  8. 제7항에 있어서, 테스트 동작이 복귀 조건들이 만족되는 것으로 판정할 경우에만, 상기 복귀 어드레스 레지스터의 컨텐츠가 상기 프로그램 카운터 내로 이동하거나, 상기 복귀 어드레스가 상기 스택으로부터 상기 프로그램 카운터 내로 파핑되는 것인 프로세서 판독가능한 저장 매체.
  9. 제7항에 있어서, 상기 복귀 동작은 두개의 마이크로 동작들로 분리되고, 하나의 마이크로 동작은 상기 복귀 동작을 수행하기 위한 것이고, 다른 마이크로 동작은 테스트 동작을 수행하기 위한 것인 프로세서 판독가능한 저장 매체.
  10. 제7항에 있어서, 상기 상태 플래그들은 마이크로프로세서의 산술 논리 유닛(Arithmetic Logic Unit)을 통하여 복귀 어드레스 레지스터의 컨텐츠를 기록하는 것과 병렬적으로 설정되는 것인 프로세서 판독가능한 저장 매체.
  11. 제7항에 있어서, 상기 상태 플래그들은 상기 마이크로프로세서의 산술 논리 유닛을 지나 마이크로프로세서의 데이터 메모리에 대한 제어 신호들을 라우팅하는 것과 병렬적으로 설정되는 것인 프로세서 판독가능한 저장 매체.
  12. 제7항에 있어서, 상기 방법은, 상기 복귀 어드레스 레지스터의 컨텐츠 또는 상기 복귀 어드레스가 상기 프로그램 카운터 내로 기록되기 전에, 파이프라인을 플러시하는(flush) 단계를 더 포함하는 것인, 프로세서 판독가능한 저장 매체.
  13. 제7항에 있어서, 상기 단계 a) 및 b)는 단일 명령에 응답하여 수행되는 것인, 프로세서 판독가능한 저장 매체.
  14. 서브루틴 복귀 동작을 수행하는 방법에 있어서,
    a) 복귀 어드레스를 프로그램 카운터 내로 위치시키는 단계;
    b) 복귀 값 레지스터에 대한 테스트 동작을 실행하는 단계로서, 상기 테스트 동작은 복귀 동작을 처리하는 데 요구되는 적어도 하나의 다른 동작과 병렬적으로 수행되는 것인 상기 테스트 동작 실행 단계;
    c) 프로그램의 플로우를 목표 어드레스로 변경하는 단계; 및
    d) 상기 단계 a), b), 및 c)를 단일 명령에 응답하여 수행하는 단계
    를 포함하는 서브루틴 복귀 동작 수행 방법.
  15. 제14항에 있어서, 상기 프로그램 플로우 변경 단계는 상기 테스트 동작이 복귀 조건들이 만족되는 것으로 판정하는 경우에만 수행되는 것인 서브루틴 복귀 동작 수행 방법.
  16. 제14항에 있어서, 상기 서브루틴 복귀 동작은 추가적인 사이클 동안 명령 디코드 단계에서 유지되는 것인 서브루틴 복귀 동작 수행 방법.
  17. 제14항에 있어서, 상기 테스트 동작에 관한 상기 상태 플래그들은 마이크로프로세서의 산술 논리 유닛(Arithmetic Logic Unit)을 통하여 복귀 어드레스 레지스터의 컨텐츠를 기록하는 것과 병렬적으로 설정되는 것인 서브루틴 복귀 동작 수행 방법.
  18. 제14항에 있어서, 상기 테스트 동작에 관한 상태 플래그들은 상기 마이크로프로세서의 산술 논리 유닛의 다운스트림에 위치된, 마이크로프로세서의 데이터 메모리에 대한 제어 신호들을 라우팅하는 것과 병렬적으로 설정되는 것인 서브루틴 복귀 동작 수행 방법.
  19. 제14항에 있어서, 다중(multiple) 레지스터들을 로드하는 단계를 더 포함하는 서브루틴 복귀 동작 수행 방법.
  20. 제14항에 있어서, 복귀 값 레지스터에 있는 복귀 값을 설정하는 단계를 더 포함하는 서브루틴 복귀 동작 수행 방법.
  21. 프로세서에 의해 실행될 때 상기 프로세서가 서브루틴 복귀 동작을 수행하는 방법을 수행하도록 하는 명령을 저장하는 프로세서 판독가능한 저장 매체에 있어서, 상기 서브루틴 복귀 동작 수행 방법은,
    a) 복귀 어드레스를 프로그램 카운터 내로 위치시키는 단계;
    b) 복귀 값 레지스터에 대한 테스트 동작을 실행하는 단계로서, 상기 테스트 동작은 복귀 동작을 처리하는 데 요구되는 적어도 하나의 다른 동작과 병렬적으로 수행되는 것인 상기 테스트 동작 실행 단계;
    c) 프로그램의 플로우를 목표 어드레스로 변경하는 단계; 및
    d) 상기 단계 a), b), 및 c)를 단일 명령에 응답하여 수행하는 단계
    를 포함하는 것인, 프로세서 판독가능한 저장 매체.
  22. 제21항에 있어서, 상기 프로그램 플로우 변경 단계는 상기 테스트 동작이 복귀 조건들이 만족되는 것으로 판정하는 경우에만 수행되는 것인, 프로세서 판독가능한 저장 매체.
  23. 제21항에 있어서, 상기 복귀 동작은 추가적인 사이클 동안 명령 디코드 단계에서 유지되는 것인, 프로세서 판독가능한 저장 매체.
  24. 제21항에 있어서, 상기 테스트 동작에 관한 상기 상태 플래그들은 마이크로프로세서의 산술 논리 유닛(Arithmetic Logic Unit)을 통하여 복귀 어드레스 레지 스터의 컨텐츠를 기록하는 것과 병렬적으로 설정되는 것인, 프로세서 판독가능한 저장 매체.
  25. 제21항에 있어서, 상기 테스트 동작에 관한 상태 플래그들은 상기 마이크로프로세서의 산술 논리 유닛의 다운스트림에 위치된, 상기 마이크로프로세서의 데이터 메모리에 대한 제어 신호들을 라우팅하는 것과 병렬적으로 설정되는 것인, 프로세서 판독가능한 저장 매체.
  26. 제23항에 있어서, 상기 방법은 다중 레지스터들을 로드하는 단계를 더 포함하는 것인, 프로세서 판독가능한 저장 매체.
  27. 제23항에 있어서, 상기 방법은 복귀 값 레지스터에 있는 복귀 값을 설정하는 단계를 더 포함하는 것인, 프로세서 판독가능한 저장 매체.
KR1020077029999A 2005-06-10 2006-05-25 마이크로프로세서에서의 효율적인 서브프로그램 복귀 KR20080014062A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/149,611 2005-06-10
US11/149,611 US20060282821A1 (en) 2005-06-10 2005-06-10 Efficient subprogram return in microprocessors

Publications (1)

Publication Number Publication Date
KR20080014062A true KR20080014062A (ko) 2008-02-13

Family

ID=37525517

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077029999A KR20080014062A (ko) 2005-06-10 2006-05-25 마이크로프로세서에서의 효율적인 서브프로그램 복귀

Country Status (7)

Country Link
US (2) US20060282821A1 (ko)
EP (1) EP1891519B1 (ko)
JP (1) JP2009508180A (ko)
KR (1) KR20080014062A (ko)
CN (1) CN101194228B (ko)
TW (1) TW200709043A (ko)
WO (1) WO2006135549A2 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060282821A1 (en) * 2005-06-10 2006-12-14 Renno Erik K Efficient subprogram return in microprocessors
CN100442226C (zh) * 2007-07-02 2008-12-10 美的集团有限公司 微波炉返回键的设定方法
US10802990B2 (en) * 2008-10-06 2020-10-13 International Business Machines Corporation Hardware based mandatory access control
CN101551749B (zh) * 2009-05-11 2012-08-22 中国科学院计算技术研究所 随机测试程序生成方法和系统以及设计验证方法
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
CN109358948B (zh) 2013-03-15 2022-03-25 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE94999T1 (de) * 1984-11-21 1993-10-15 Harris Corp Mikroprozessor fuer forth-aehnliche sprache.
US4814976C1 (en) * 1986-12-23 2002-06-04 Mips Tech Inc Risc computer with unaligned reference handling and method for the same
US4891754A (en) * 1987-07-02 1990-01-02 General Datacomm Inc. Microinstruction sequencer for instructing arithmetic, logical and data move operations in a conditional manner
US4926355A (en) * 1987-07-02 1990-05-15 General Datacomm, Inc. Digital signal processor architecture with an ALU and a serial processing section operating in parallel
US5193205A (en) * 1988-03-01 1993-03-09 Mitsubishi Denki Kabushiki Kaisha Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
JP2796590B2 (ja) * 1991-08-07 1998-09-10 三菱電機株式会社 メモリ装置及びそれを使用したデータ処理装置
US5386563A (en) * 1992-10-13 1995-01-31 Advanced Risc Machines Limited Register substitution during exception processing
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
US5925125A (en) * 1993-06-24 1999-07-20 International Business Machines Corporation Apparatus and method for pre-verifying a computer instruction set to prevent the initiation of the execution of undefined instructions
GB2281986B (en) * 1993-09-15 1997-08-06 Advanced Risc Mach Ltd Data processing reset
JP3543181B2 (ja) * 1994-11-09 2004-07-14 株式会社ルネサステクノロジ データ処理装置
US5701493A (en) * 1995-08-03 1997-12-23 Advanced Risc Machines Limited Exception handling method and apparatus in data processing systems
WO1997013201A1 (en) * 1995-10-06 1997-04-10 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5926642A (en) * 1995-10-06 1999-07-20 Advanced Micro Devices, Inc. RISC86 instruction set
US5778208A (en) * 1995-12-18 1998-07-07 International Business Machines Corporation Flexible pipeline for interlock removal
US5884089A (en) * 1997-10-14 1999-03-16 Motorola, Inc. Method for calculating an L1 norm and parallel computer processor
US6434584B1 (en) * 1998-06-04 2002-08-13 Texas Instruments Incorporated Flexible accumulator register file for use in high performance microprocessors
US7472259B2 (en) * 2000-12-06 2008-12-30 Analog Devices, Inc. Multi-cycle instructions
US6954849B2 (en) * 2002-02-21 2005-10-11 Intel Corporation Method and system to use and maintain a return buffer
US7051190B2 (en) * 2002-06-25 2006-05-23 Intel Corporation Intra-instruction fusion
CN1266595C (zh) * 2002-06-28 2006-07-26 联想(北京)有限公司 一种嵌入式操作系统半开放自动升级的方法
US7571258B2 (en) * 2002-12-12 2009-08-04 Adaptec, Inc. Method and apparatus for a pipeline architecture
US20060282821A1 (en) 2005-06-10 2006-12-14 Renno Erik K Efficient subprogram return in microprocessors

Also Published As

Publication number Publication date
JP2009508180A (ja) 2009-02-26
EP1891519A2 (en) 2008-02-27
WO2006135549A8 (en) 2008-01-10
WO2006135549A2 (en) 2006-12-21
CN101194228A (zh) 2008-06-04
US20100250904A1 (en) 2010-09-30
US8555041B2 (en) 2013-10-08
EP1891519A4 (en) 2010-05-19
CN101194228B (zh) 2011-10-19
WO2006135549A3 (en) 2007-08-16
US20060282821A1 (en) 2006-12-14
EP1891519B1 (en) 2016-12-07
TW200709043A (en) 2007-03-01

Similar Documents

Publication Publication Date Title
US5958044A (en) Multicycle NOP
KR20080014062A (ko) 마이크로프로세서에서의 효율적인 서브프로그램 복귀
CN107450888B (zh) 嵌入式数字信号处理器中的零开销循环
US20070106889A1 (en) Configurable instruction sequence generation
KR20090061644A (ko) 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치
US7647480B2 (en) Handling of conditional instructions in a data processing apparatus
WO2002008893A1 (en) A microprocessor having an instruction format containing explicit timing information
EP1974254B1 (en) Early conditional selection of an operand
JP4607958B2 (ja) プロセッサおよびプログラム変換装置
US8464030B2 (en) Instruction cracking and issue shortening based on instruction base fields, index fields, operand fields, and various other instruction text bits
KR20070108936A (ko) 조건부 명령어가 실행되지 않을 경우 소스 오퍼랜드를대기하는 것을 중지하는 방법
US7020769B2 (en) Method and system for processing a loop of instructions
US6044460A (en) System and method for PC-relative address generation in a microprocessor with a pipeline architecture
TWI428822B (zh) 微處理器及其相關方法
JP2008299729A (ja) プロセッサ
US20050144427A1 (en) Processor including branch prediction mechanism for far jump and far call instructions
US6308262B1 (en) System and method for efficient processing of instructions using control unit to select operations
US9135006B1 (en) Early execution of conditional branch instruction with pc operand at which point target is fetched
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
US20050071830A1 (en) Method and system for processing a sequence of instructions
US20050108698A1 (en) Assembler capable of reducing size of object code, and processor for executing the object code
JP2763450B2 (ja) パイプライン処理データ処理装置
CN117453289A (zh) 一种无流水线空泡的微处理器、集成电路以及电子设备
Solutions Exercises 4 Processor Design
Chalk et al. Central processor unit operation

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid