KR100307980B1 - 산술 또는 논리 연산의 수행과 동시에 조건 코드 비트를 발생하는 방법 및 시스템 - Google Patents
산술 또는 논리 연산의 수행과 동시에 조건 코드 비트를 발생하는 방법 및 시스템 Download PDFInfo
- Publication number
- KR100307980B1 KR100307980B1 KR1019990000190A KR19990000190A KR100307980B1 KR 100307980 B1 KR100307980 B1 KR 100307980B1 KR 1019990000190 A KR1019990000190 A KR 1019990000190A KR 19990000190 A KR19990000190 A KR 19990000190A KR 100307980 B1 KR100307980 B1 KR 100307980B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- condition code
- bit
- code bits
- operand
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 17
- 238000012217 deletion Methods 0.000 claims 1
- 230000037430 deletion Effects 0.000 claims 1
- 230000006378 damage Effects 0.000 abstract description 3
- 239000000872 buffer Substances 0.000 description 34
- 238000010586 diagram Methods 0.000 description 6
- 230000015654 memory Effects 0.000 description 6
- 230000000295 complement effect Effects 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000004377 microelectronic Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
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
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
-
- 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/30094—Condition code generation, e.g. Carry, Zero flag
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
본 발명은 하나 또는 그 이상의 피연산자를 이용하는 명령어에 의해 지시되는 연산을 수행하므로써 명령어를 실행하는 유닛과, 상기 실행 유닛에 의한 명령어를 실행함과 동시에 이 명령어와 관련된 '작은(less than;이하 'LT'라 한다.)', '큰(greater than;이하 'GT'라 한다.)' 및 '동일(equal than;이하 'EQ'라 한다.)' 조건 코드 비트를 결정하는 조건 코드 로직을 적어도 포함하는 프로세서를 개시하고 있다. 일 실시예에서, 조건 코드 로직은 제 1 및 제 2 피연산자 내의 비트 위치의 개개의 비트 값을 입력으로 수신하고, 수신된 비트 값들의 각각을 논리적으로 결합하는 단일 계산 스테이지를 포함하고 있다. 이러한 계산 스테이지는 각각의 비트 위치에 대하여, LT, GT 및 EQ 조건 코드 비트의 값을 집합적으로 표시하는 전달, 발생 및 소멸 신호를 출력한다. 그후 계산 스테이지에 접속된 하나 또는 그 이상의 병합 스테이지는 전달, 발생 및 소멸 신호를 조건 코드 비트를 설정하는 출력 신호와 병합한다.
Description
본 발명은 일반적으로 데이터 처리 방법 및 시스템에 관한 것으로, 특히 조건 코드 비트(condition code bits)를 계산하는 방법 및 장치에 관한 것이다. 특히, 본 발명은 '작은(LT)', '큰(GT)' 및 '동일한(EQ)' 조건 코드 비트를 명령어수행과 동시에 계산하는 방법 및 장치에 관한 것이다.
종래 슈퍼스칼라 프로세서(superscalar processor)는, 예를 들어, 명령어를저장하는 명령어 캐시(an instruction cache), 실행을 위해 명령어 캐시로부터 인출된 명령어를 임시 저장하는 명령어 버퍼(an instruction buffer), 순차 명령어(sequential instructions)를 실행하는 하나 또는 그 이상의 실행 유닛(one or more execution units), 분기 명령어를 실행하는 분기 처리 유닛(a branch processing unit : BPU), 명령어 버퍼로부터의 순차 명령어를 특정 실행 유닛으로디스패치하는 디스패치 유닛(a dispatch unit), 및 실행은 종료했으나 완결되지 않은 순차 명령어를 임시 저장하는 종료 버퍼(a completion buffer)를 포함할 수 있다.
슈퍼스칼라 프로세서의 분기 처리 유닛(BPU)에 의해 실행되는 분기 명령어는조건부 또는 무조건부 분기 명령어로 분류될 수 있다. 무조건부 분기 명령어(unconditional branch instructions)는 프로그램 실행 흐름을 순차적인 실행 경로로부터 특정 타켓 실행 경로로 변경하며, 어떠한 이벤트의 발생에 의해 제공되는 조건에 의존하지 않는 분기 명령어이다. 그러므로 무조건부 분기 명령어에 의해 지정된 분기는 항상 이루어진다. 이에 반하여, 조건부 분기 명령어(conditional branch instructions)는 프로그램 흐름 내의 지정된 분기가 프로세서 내의 조건(예를 들어, 특정 조건 레지스터 비트의 상태 또는 카운터의 값)에 의존하여 이루어질수도 있고 이루어지지 않을 수도 있는 분기 명령어이다. 조건부 분기 명령어는 분기 처리 유닛(BPU)에 의해 계산될 때 분기가 의존하는 조건이 이용가능한 지 여부에 따라 도출식(resolved) 또는 비도출식(unresolved)으로 또한 분류될 수 있다. 도출식 조건부 분기 명령어가 의존하는 조건은 실행 전에 알려지므로, 도출식 조건부 분기 명령어는 일반적으로 실행될 수 있고, 타켓 실행 경로 내의 명령어는 순차 명령어의 실행에서 지연(delay)이 거의 없거나 전혀 없이 인출될 수 있다. 그러므로 조건부 분기 명령어가 실행 전에 해결될 수 있도록 조건 레지스터 비트, 또는 조건부 분기 명령어가 의존할 수 있는 다른 조건을 가능한 한 빨리 결정하는 것이 유리하다. 비록 조건부 분기 명령어가 그 실행 전에 해결되지 않는다 하더라도(이것은 조건부 분기가 추론적으로 예측됨을 의미함), 오측(misprediction)으로 발생된 성능 패널티(performance penalty)가 최소화되므로 조건부 명령어가 의존하는 조건을 가능한 한 빨리 계산하는 것이 유리하다.
조건부 분기 명령어가 의존할 수 있는 조건 레지스터 비트는 소정의 구조적으로 정의된 명령어(predetermined architecturally defined instructions), 예를들어, 비교 명령어(compare instructions)와 덧셈, 뺄셈 등의 산술 명령어(arithmetic instructions)와 논리 명령어(logical instructions)의 소정 '기록(recording)' 형식에 따라 설정된다. 비교 명령어와 기록 명령어에 의해 설정된 조건 레지스터 비트는 'LT' 비트, 'GT' 비트 및 'EQ' 비트를 포함하는데, 이는 특정 명령어의 결과가 0에 비해 작거나, 크거나 또는 동일한 것을 각각 가리킨다. 종래의 프로세서는 우선 명령어(예를 들어, 덧셈)의 결과를 결정하고, 그 후에 조건 레지스터 비트를 발생시키기 위하여 다음 사이클에서 그 결과를 0과 비교한다. 다음에서 설명되는 바와 같이, 이러한 직렬 구조(serial architecture)는 조건 레지스터 비트가 결정될 수 있는 속도에 대해 내재적인 한계를 갖도록 한다. 최근에 소정 유형의 명령어의 실행과 병렬적으로 EQ 비트의 값을 결정하기 위하여, 다양한 기술이 채택되었다. 비록 EQ 비트 값의 초기 결정이 종래의 직렬 방법에 비해 성능면에서 어느 정도 이점이 있지만, 분기 처리 성능을 강화하기 위해 산술 및 논리 연산과 동시에 모든 LT, QT 및 EQ 비트 값을 계산하는 방법 및 장치는 업계에서 여전히 필요하다.
따라서, 본 발명의 목적은 데이터 처리에 대한 향상된 방법 및 시스템을 제공하는 것이다.
또한 본 발명의 목적은 조건 코드 비트(condition code bits)를 계산하는 향상된 방법 및 장치를 제공하는 것이다.
또한 본 발명의 목적은 명령어의 실행과 동시에 'LT', 'GT', 'EQ' 조건 코드 비트를 계산하는 방법 및 장치를 제공하는 것이다.
상기 목적들은 지금부터 기술되는 바와 같이 달성된다. 프로세서는 하나 또는 그 이상의 피연산자(operands)를 이용하여 명령어에 의해 지시되는 연산을 수행하므로써 명령어를 실행하는 적어도 하나의 실행 유닛(at least an execution unit)과, 실행 유닛에 의해 명령어를 실행함과 동시에 명령어와 관련된 'LT', 'GT', 'EQ' 조건 코드 비트를 결정하는 조건 코드 로직(condition code logic)을 포함한다. 일 실시예에서, 조건 코드 로직은 제 1 및 제 2 피연산자 내에 있는 비트 위치의 각각에 대한 비트 값을 입력으로서 수신하고, 개개의 비트 값을 논리적으로 결합하는 단일 계산 스테이지(computation stage)를 포함한다. 이러한 단일 계산 스테이지는 각각의 비트 위치에 대하여 'LT', 'GT' 및 'EQ' 조건 코드 비트 값을 집합적으로 표시하는 전달(propagate), 발생(generate), 및 소멸(kill) 신호들을 출력시킨다. 이 계산 스테이지에 접속된 하나 또는 그 이상의 병합 스테이지(one or more merging stages)는 그후 전달, 발생, 및 소멸 신호들을 조건 코드 비트를 설정하는 출력 신호들과 병합시킨다.
본 발명의 상기 및 기타 목적(objects), 특징(features) 및 이점(advantages)은 다음의 상세한 설명에서 분명하게 될 것이다.
도 1은 본 발명의 방법 및 시스템이 이용될 수 있는 데이터 처리 시스템의 블록도.
도 2는 도 1에 도시된 프로세서의 조건 코드 유닛(condition code unit : CCU)의 블록도.
도 3은 명령어의 실행과 병렬적으로 LT, GT 및 EQ 조건 레지스터 비트를 계산하는 것을 설명하는 타이밍도.
*도면의 주요부분에 대한 부호의 설명
10 : 프로세서 12 : 버스 인터페이스 유닛
14 : 명령어 캐시 16 : 데이터 캐시
18 : 분기 처리 유닛 19 : 명령어 큐
22 : 고정소수점 유닛 24 : 조건 코드 유닛
28 : 적재 저장 유닛 30 : 부동소수점 유닛
32 : 범용 레지스터 33 : 범용 레지스터 재명명 버퍼
36 : 부동소수점 레지스터 37 : 부동소수점 레지스터 재명명 버퍼
40 : 카운트 레지스터 42 : 링크 레지스터
44 : 조건 레지스터 46 : 조건 레지스터 재명명 버퍼
이하, 첨부된 도면을 참조하여 본 발명의 실시예에 대해 상세히 설명한다.
도 1에는 첨부된 청구항에 기재된 발명에 따라 정보를 처리하는 프로세서(일반적으로 참조번호 10으로 표시)의 예시적인 블록도가 도시되어 있다. 도 1에서, 프로세서(10)는 단일 집적 회로 슈퍼스칼라 마이크로프로세서(a single integrated circuit superscalar microprocessor)로 구성된다. 따라서 이하에서 기술되는 바와같이, 프로세서(10)는 다양한 실행 유닛(execution units), 레지스터(registers), 버퍼(buffers), 메모리(memories), 및 기타 기능 유닛(functional units)을 포함하는데, 이들은 모두 집적 회로부(integrated circuitry)에 의해 형성된다. 프로세서(10)는 PowerPCTM604(주문번호 MPR604UMU-01로 IBM Microeletronics로부터 입수가능한 PowerPCTM604 RISC Microprocessor User's Manual에 상세하게 기술되어 있으며, 이는 여기에서의 인용에 의해 본 명세서에 통합됨)와 같은, IBM Microelectronics로부터 입수가능한 마이크로프로세서의 PowerPCTM계열의 하나로 구성되는 것이 바람직하다. 그러나 당업자는 다음의 설명으로부터 본 발명이 다른 적절한 프로세서 내에서도, 특히 조건부 분기 명령어를 해결하기 위하여 조건 코드 비트를 이용하는 프로세서 내에서 유리하게 구현될 수 있음을 이해할 것이다.
도 1에 도시된 바와 같이, 프로세서(10)는 버스(11)에 프로세서(10)내의 버스 인터페이스 유닛(BIU)(12)을 경유하여 접속된다. BIU(12)는 프로세서(1O)와, 주 메모리(main memory)(도시되지 않음)와 같이 버스(11)에 접속된 다른 장치 사이의 정보의 전달을 제어하며, 프로세서(10) 및 버스(11)와 함께 충분히 기능하는 데이터 처리 시스템을 형성한다. BIU(12)는 또한 프로세서(1O) 내의 명령어 캐시(14) 및 데이터 캐시(16)에 접속된다. 명령어 캐시(14) 및 데이터 캐시(16)와 같은, 고속의 캐시는 주 메모리로부터 캐시(14,16)로 이전에 전송된 데이터 또는 명령어의 서브세트(subset)에 프로세서(1O)가 상대적으로 빠르게 접근할 수 있도록 하므로써, 데이터 처리 시스템의 전체 성능을 향상시킨다. 명령어 캐시(14)는 또한 순차 인출기(sequential fetcher)(17)에 접속되는데, 이 순차 인출기는 각 사이클 동안 명령어의 캐시 라인(a cache line of instructions)을 명령어 캐시(14)로부터 인출하고, 인출된 명령어를 분기 처리 유닛(BPU)(18)과 명령어 큐(instruction queue)(19)로 전송한다. 분기 명령어들(branch instructions)은 BPU(18)에 의한 실행을 위해 유지되며 명령어 큐(19)로부터는 삭제된다. 한편, 순차 명령어들(sequential instructions)은 BPU(18)로부터 삭제되고, 프로세서(10) 내의 순차 명령어 실행 회로(sequential instruction execution circuitry)에 의한 순차 실행(sequential execution)을 위해 명령어 큐(19)내로 버퍼링된다.
BPU(18)은 카운트 레지스터(CTR)(40), 링크 레지스터(LR)(42), 및 조건 레지스터(CR)(44)를 포함하는데, 이들의 값은 조건부 분기 명령어를 해결하기 위하여 이용될 수 있다. BPU(18)는 CR 재명명 버퍼(46)를 또한 포함하는데, 이는 비교 명령어의 실행에 의해 발생되거나 또는 소정 기록 명령어의 실행과 병렬적으로 발생된 CR(44)의 재명명된 사본을 일시적으로 저장한다. 바람직한 실시예에서, CR(44)(및 CR 재명명 버퍼(46)의 각각)은 각각이 하나 또는 그 이상의 비트를 구비하고 있는 다수의 구별된 필드(fields)를 포함하고 있다. 이러한 필드 중에서 조건 코드 필드는 LT, GT, 및 EQ 비트를 구비하며, 이들은 값(일반적으로, 명령어의 결과)이 0에 비해 작은 지, 큰 지, 또는 동일한 지 여부를 각각 가리킨다. CR(44), LR(42) 또는 CTR(40) 참조에 의하여 실행 전에 해결될 수 없는 조건부 분기 명령어는 분기 이력 테이블(branch history table : BHT) 또는 분기 타겟 어드레스 캐시(branch target adress cache : BTAC)와 같은 BPU(18) 내의 종래 분기 처리 회로부를 이용하여 예측되는 것이 바림직하다.
도시된 실시예에서, 프로세서(1O)의 실행 회로부(execution circuitry)는 BPU(18) 외에도, 하나 또는 그 이상의 고정소수점 유닛(one or more fixed-point units : FXUs)(22), 적재-저장 유닛(a load-store unit : LSU)(28), 및 부동소수점 유닛(a floating-point unit : FPU)(30)을 포함하여, 순차 명령어를 위한 다수의 실행 유닛(execution units)을 구비하고 있다. 컴퓨터 업계의 당업자에게 잘 알려져 있는 바와 같이, 실행 유닛(22, 28, 30)의 각각은 일반적으로 각 프로세서 사이클 동안에 특정 유형의 순차 명령어 중에서 하나 또는 그 이상의 명령어를 실행한다. 예를 들어, FXUs(22)는 덧셈, 뺄셈, 논리곱, 논리합, 및 배타적 논리합과 같은 고정소수점 산술 및 논리 연산을 특정 범용 레지스터(general purpose register : GPRs)(32) 또는 GPR 재명명 버퍼(33)로부터 수신되는 소오스 피연산자를 이용하여 수행한다. 고정소수점 명령어의 실행에 이어서, FXU(22)는 명령어의 결과 데이터를 GPR 재명명 버퍼(33)에 출력하는데, 이 GPR 재명명 버퍼(33)는 그 결과 데이터가 하나 또는 그 이상의 GPRs(32)로 기록되기 전까지 그 결과 데이터를 일시적으로 저장한다. FPU(30)은 일반적으로 부동소수점 곱셈 및 나눗셈과 같은, 단일 정밀도(single-precision) 및 2배 정밀도(double-precision) 부동소수점 산술 및 논리 연산을 부동소수점 레지스터(FPRs)(36) 또는 FPR 재명명 버퍼(37)로부터 수신된 소오스 피연산자(source operands)에 대해 수행한다. FPU(30)은 부동소수점 명령어 실행의 결과 데이터를 소정의 FPR 재명명 버퍼(37)로 출력하는데, 이 FPR 재명명 버퍼는 결과 데이터가 소정의 FPRs(36)로 기록되기 전까지 임시적으로 그 결과 데이터를 저장한다. 그 명칭이 의미하는 바와 같이, LSU(28)는 일반적으로 메모리(즉, 데이터 캐시(16) 또는 주 메모리)로부터의 데이터를 소정의 GPRs(32) 또는 FPRs(36)으로 적재하거나 또는 GPRs(32), GPR 재명명 버퍼(33), FPRs(36) 또는 FPR 재명명 버퍼(37)의 어느 하나로부터의 데이터를 메모리로 저장하는 부동소수점 및 고정소수점 명령어를 실행한다.
실행 유닛(22, 28, 30) 뿐만 아니라, 프로세서(10)의 실행 회로부는 부호성 및 비부호성 비교 명령어(signed and unsigned compare instructions)를 직접 실행하고, 다른 실행 유닛에 의해 처리된 기록 명령어(recording instructions)에 대한 조건 코드 비트를 계산하는 조건 코드 유닛(condition code unit : CCU)(24)를 포함한다. 도시된 바와 같이, CCU(24)는 디스패치되는 각 비교 및 기록 명령어의 명령어 유형을 지시하는 4개의 제어 신호(21)를 디스패치 유닛(dispatch unit)(24)으로부터 수신한다. CCU(24)는 또한 각 비교 및 기록 명령어에 의해 특정되는 피연산자를 GPRs(32) 및 GPR 재명명 버퍼(33)(다른 소오스도 가능함)로부터 수신한다. PowerPCTM명령어 세트 구조에서 CCU(24)가 조건 코드 비트를 계산하는 비교 및 기록 명령어는 다음의 표 1에 정리된다.
표 1에서, 명령어 니모닉(instruction mnemonic)에 수반되는 마침표('.')는 그 마침표가 없는 경우 니모닉이 조건 코드 비트를 설정하지 않는 명령어의 기록 형태임을 표시한다. 피연산자 명칭에 선행하는 느낌표('!')는 피연산자의 일의 보수(one's complement)임을 표시한다. CA는 캐리인 비트(carry-in bit)로 구조적으로 정의된다. 제어신호 ADD, SUB, S_CMP 및 US_CMP는 덧셈, 뺄셈, 부호성 비교(signed compare) 및 비부호성 비교(unsigned compare) 명령어를 각각 표시한다. 본 발명에 따라서, CCU(24)는 하나의 사이클 내에서 결과적인 LT, GT, 및 EQ 조건 코드 비트를 얻기 위하여 비교 명령어를 직접 실행한다. CCU(24)는 또한 FXUs(22)에 의한 기록 명령어(recording instruction) 실행과 동시에 기록 명령어에 대한 LT, GT 및 EQ 조건 코드 비트를 단일 사이클에서 계산한다. 이러한 방식으로, 조건부 분기 명령어가 의존하는 조건들은 가능한 한 일찍 계산되므로써, 예측과정을 줄이고 분기 오측(branch misprediction)으로부터 더 빨리 회복할 수 있게 한다.
프로세서(10)는 그 슈퍼스칼라 구조의 성능을 향상시키기 위하여 명령어의 파이프라이닝(pipelining)과 순서이탈(out-of-order)실행 둘 다를 이용한다. 따라서, 명령어는 데이터 의존성(dependencies)과 반의존성(antidependencies)이 관찰되는 동안은 여하한 순서로 FXU(22), CCU(24), LSU(28), 및 FPU(3O)에 의해 틈틈이(oportunistically) 실행될 수 있다. 또한 많은 고성능 프로세서에서 일반적인 것과 같이, 각 명령어는 인출(fetch), 디코드(decoed)/디스패치(dispatch), 실행(execute), 종료(finish), 및 완결(completion)/라이트백(writeback)을 포함한, 많은 파이프라인 단계에서 처리된다.
인출 단계 동안에, 순차 인출기(17)는 명령어 캐시(14)로부터 명령어의 캐시 라인(a cash line of instructions)을 검색(retrieve)한다. 앞에서 지적한 바와 같이, 분기 명령어는 순차 명령어 스트림(sequential instructions stream)으로부터 제거(폴드아웃)되는 반면에, 명령어 캐시(14)로부터 인출된 순차 명령어는 명령어 큐(19)내로 버퍼링된다. 분기 명령어는 잔여 파이프라인 단계의 각각에서 BPU(18) 내의 회로부에 의해 처리된다.
디코드/디스패치 단계 동안에, 디스패치 유닛(20)은 명령어 큐(19)로부터의하나 또는 그 이상의 순차 명령어를 디코드하여 실행 유닛(22, 24, 28, 30)으로 디스패치한다. 디코드/디스패치 단계 동안에, 필요한 경우 디스패치 유닛(20)은 또한 GPR 재명명 버퍼(33) 또는 FPR 재명명 버퍼(37) 내의 재명명 버퍼를 각 디스패치된 명령어의 결과 데이터를 위해 할당한다. 도시된 실시예에서, 디스패치 유닛(20)에 의해 디스패치된 명령어는 또한 완결 유닛(completion unit)(40)내의 완결 버퍼(completion buffer)로 넘겨진다. 프로세서(1O)는 순서이탈 실행 동안에 완결 유닛의 완결 버퍼내의 명령어와 관련된 유일한 명령어 식별자(instruction identifier)를 이용하여 디스패치된 명령어의 프로그램 순서를 추적한다.
실행 단계 동안에, 지시된 연산에 대한 피연산자와 실행 자원(execution resources)이 이용가능하게 되면 실행 유닛(22, 24, 28, 30)은 디스패치 유닛(20)으로부터 수신된 순차 명령어를 틈틈이 실행한다. 피연산자 또는 실행 자원이 이용가능하게 될 때까지 실행 유닛(22, 24, 28, 30)의 각각은 그 실행 유닛으로 디스패치되는 명령어를 저장하는 예약 스테이션(a reservation station)을 갖추는 것이 바람직하다. 명령어 실행이 마쳐진 후에, 실행 유닛(22, 28, 3O)은 GPR 재명명 버퍼(33) 또는 FPR 재명명 버퍼(37) 내로, 명령어 유형에 의존하여 명령어의 결과 데이터를 저장한다. 한편 CCU(24)는 그것이 발생한 조건 코드 비트를 CR 재명명 버퍼(46) 중 하나의 조건 코드 필드 내로 저장한다.
다음에, 실행 유닛(22, 24, 28, 30)은 완결 유닛(40)의 완결 버퍼 내에 저장된 명령어가 실행을 종료했음을 완결 유닛(40)에 알린다. 그후 명령어가 완결(complete)된 것으로 완결 버퍼 내에서 표시하므로써, 명령어는 완결 유닛(40)에 의해 프로그램 순서로 완결된다. 그후, 라이트백 단계(완결 단계와 병합되는 것이 바람직함) 동안에, 명령어의 결과는 CR 재명명 버퍼(46)로부터 CR(44)로, 그리고 GPR 재명명 버퍼(33)와 FPR 재명명 버퍼(37)로부터 GPRs(32)와 FPRs(36)로 각각 전송된다.
도 2에는 CCU(24)의 더욱 상세한 블록도가 도시되어 있다. 도시된 바와 같이, CCU(24)는 단일 계산 스테이지(a single computation stage)(60) 및 3개의 병합 스테이지(three merging stages)(62, 64, 66)을 포함한다. 계산 스테이지(60)는 각 피연산자의 비트 위치(예를 들어, 도시된 실시예에서는 64개)에 대해 하나의 조합 엘리먼트(one combination element)(68)를 포함한다. 비트 위치 0-62의 각각에 대한 조합 엘리먼트(68)들은 디스패치 유닛(20)에 의해 발생된 4개의 제어신호(21) 뿐만 아니라, 피연산자 A와 B의 해당 비트 위치와 차위 비트 위치(next less significant bit position)의 비트들을 입력으로서 수신한다. 비트 위치 63에 대한 조합 엘리먼트(68)는 입력으로서 피연산자 A와 B의 비트 63, 제어신호(21), CA 비트와 그 보수를 수신한다. 중요한 것은 CA 비트가 덧셈 명령어의 실행에 의해 발생될 수 있는 캐리(carry)가 아니라, 대신에 구조적으로 정의된 레지스터 내의 비트라는 것이다. 이러한 입력으로부터, 계산 스테이지(60)는 다음 방정식을 이용하여 비트 위치 0-63의 각각에 대한 전달(propagate)(P), 발생(generate)(G) 및 소멸(kill)(Z) 출력을 계산한다.
전달, 발생, 및 소멸 출력, 비트 O (MSB) :
P[0] =(((!A[0] or !B[0] and ((A[0] xor !B[0]) xor
(A[0+1] or B[0+1]))) and ADD) or
(((A[0] or !B[0]) and ((A[0] xor B[0]) xor
_
전달, 발생 및 소멸 출력, 비트 1-62 :
전달, 발생, 및 소멸 출력, 비트 63 (LSB) :
계산 스테이지(60)에 의해 만들어진 64 세트의 P, G 및 Z 신호는 그후 병합 스테이지(62)로 넘겨지며, 이 병합 스테이지는 캐리 예측 덧셈기(carry look-ahead adders : CLAs)에서 흔히 발견되는 것과 같은, 종래의 병합 회로부를 이용하여 4 세트의 각 그룹을 하나의 세트의 P, G 및 Z 신호로 병합한다. 병합 스테이지(62)에 유사하게 구성된 병합 스테이지(64, 66)는 병합 스테이지(62)에 의해 출력된 16 세트의 P, G 및 Z 신호를 하나의 세트의 P, G 및 Z 출력 신호로 병합한다. 병합 스테이지(66)에 의해 출력된 P 신호는 비교, 덧셈 및 뺄셈 명령어에 대한 EQ 비트의 값을 산출한다. 한편, G 및 Z 신호는 명령어 유형에 따라 다른 의미를 갖는다. 프로세서(1O)가 PowerPCTM프로세서인 도시된 실시예에서, 병합 트리(merge tree)에 의해 출력된 G 신호는 비교 명령어에 대해서는 LT 비트의 값을, 그리고 덧셈 및 뺄셈 명령어에 대해서는 GT 비트의 값을 제공한다. 역으로, Z 신호는 비교 명령어에 대해서는 GT 비트의 값을, 그리고 덧셈 및 뺄셈 명령어에 대해서는 LT 비트의 값을 제공한다. 비교 명령어에 대하여, G 신호에 의해 제공된 LT 비트는 A<B 이면 1로 설정되고, Z 신호에 의해 제공된 GT 비트는 A>B 이면 1로 설정된다. 위에서 기술된 P, G 및 Z 신호는 다양한 프로세서 구조의 조건 코드 비트에 대한 올바른 값을 제공하지만, 각 신호의 의미는 특정 프로세서 구조가 비교 및 기록 명령어를 어떻게 구현했느냐에 따라 변할 수 있다. 일단 P, G 및 Z 신호가 CR 재명명 버퍼(46)의 하나 내에서 적절한 조건 코드 비트의 값을 설정하기 위하여 이용되었다면, 그후 조건 코드 비트는 조건부 분기 명령어를 해결하기 위하여 이용될 수 있다.
도 3에는 본 발명에 따라 명령어 실행과 병렬적으로 LT, GT 및 EQ 조건 코드비트를 계산하는 이점을 도시하는 타이밍도가 도시되어 있다. 도시된 바와 같이, 한가지 기록 형식(recording form)의 덧셈('adde.') 명령어와 적재('ld') 명령어가사이클 1 동안에 명령어 캐시(14)로부터 인출되고, '작은' 분기(a branch less than : 'blt') 명령어는 사이클 2 동안에 명령어 캐시(14)로부터 인출된다. 상기 'blt' 명령어는 덧셈 명령어에 의해 발생된 LT 비트의 상태에 의존하는 조건부 분기 명령어이다.
덧셈 명령어는 사이클 2 동안에 디스패치 유닛(20)에 의해 디코딩되며, 사이클 3 동안에 FXU(22)에 디스패치된다. 덧셈 명령어의 디스패치에 응하여, 제어신호(21) 중에서 ADD 제어신호가 단정되며(asserted), FXU(22)와 CCU(24)는 둘 다 덧셈명령어에 의하여 하나 또는 그 이상의 GPRs(32), GPR 재명명 버퍼(33) 및 CA 비트를 포함하고 있는 구조화된 레지스터로부터 특정된 피연산자를 수신한다. 사이클 4 동안에, FXU(22)는 덧셈 연산을 수행하고, 그 결과를 GPR 재명명 버퍼(33)의 하나에 저장한다. 덧셈 명령어의 실행과 병렬적으로, CCU(24)는 LT, GT 및 EQ 조건 코드 비트를 계산하여, CR 재명명 버퍼(46)의 하나에 그것들을 저장한다. 비록 'LT' 분기 명령어가 다음 사이클(예를 들어, 사이클 5) 동안에 BPU(18)에 의해 실행된다 할지라도, CR 재명명 버퍼(46)중 하나의 조건 코드 비트를 이용할 수 있는 것은 예측(speculation)없이 분기 명령어를 실행할 수 있게 한다. 반대로, 종래의 프로세서는 빨라야 사이클 5 동안에 조건 코드 비트를 결정할 수 있는데, 이는 예측에 의하여, 또는 조건이 도출될 때까지 단지 하나의 사이클이 지연되어 분기 명령어가 실행됨을 의미한다. 따라서, 본 발명은 분기 명령의 예측 실행(speculative execution)을 유리하게 감소시키므로써, 분기 오측에서 발생하는 부수의 성능 페널티(the attendant performance penalty)를 감소시킨다.
전술한 바와 같이, 본 발명은 LT, GT 및 EQ 조건 코드 비트를 계산하는 향상된 방법 및 장치를 제공한다. 본 발명에 따라, 조건 코드 유닛은 직접 부호성 및 비부호성 비교 명령어를 실행하며, 그러한 명령어 실행과 병렬적으로 기록 명령어와 관련된 조건 코드 비트를 계산한다. 조건 코드 비트를 계산하기 위하여 이용되는 회로부는 소형(compact)이며, 조건 코드 비트가 하나의 사이클 내에서 결정되도록 허용하기 위하여 단지 작은 수의 논리 레벨을 포함한다. 덧셈 및 뺄셈 명령어의경우, 조건 코드 유닛은 오버플로(overflow) 존재하에서 캐리인(carry-in : CA) 피연산자가 있거나 또는 없거나 간에 올바르게 조건 코드 비트를 계산할 수 있다.
비록 본 발명은 바람직한 실시예에 관련하여 특히 도시되고 설명되었지만, 본 발명의 정신 및 범위를 이탈하지 않고 형태 및 상세한 부분에서 다양한 변화가 만들어질 수 있음을 당업자는 이해할 것이다. 예를 들어, 본 발명은 위에서 개시된 덧셈, 뺄셈 명령어가 아닌 추가적인 유형의 기록 명령어를 포함하도록 변경될 수 있다.
전술한 바와 같은 본 발명은 명령어의 실행과 동시에 '작은'(LT), '큰'(GT), '동일한'(EQ) 조건 코드 비트를 계산할 수 있는 효과가 있다.
Claims (8)
- 프로세서에 있어서,제1 및 제2 피연산자를 이용하는 명령어에 의해 지시되는 연산을 수행함으로써 명령어를 실행하는 실행 유닛(an execution unit)-여기서, 상기 제1 및 제2 피연산자의 각각은 하나 이상 그리고 최대 M 개의 비트 위치를 포함하며, 상기 비트 위치의 각각은 비트 값을 가짐-과,상기 실행 유닛에 의해 상기 연산을 수행함과 동시에 상기 명령어와 관련된 'LT', 'GT' 및 'EQ' 조건 코드 비트를 결정하는 조건 코드 로직(condition code logic)을 구비하며,상기 조건 코드 로직은 M개의 조합 엘리먼트를 갖는 단일 계산 스테이지를 포함하며, 상기 M개의 조합 엘리먼트의 각각은 상기 제1 및 제2 피연산자 내에 있는 각각의 비트 위치에 대한 개개의 비트 값들을 입력으로서 수신하고, 상기 단일 계산 스테이지의 상기 M개의 조합 엘리먼트의 각각은 상기 개개의 비트값들을 논리적으로 결합하여, 상기 M개의 비트 위치의 각각에 대하여 전달, 생성 및 삭제 신호의 각각을 출력하며, 상기 M개의 모든 비트 위치에 대한 전달, 생성 및 삭제 신호들은 'LT', 'GT' 및 'EQ' 조건 코드 비트의 값을 집합적으로 나타내는 것을 특징으로 하는 프로세서.
- 제1항에 있어서, 상기 명령어는 상기 제 1 피연산자의 크기와 상기 제 2 피연산자의 크기를 비교하는 비교 명령어(a compare instruction)를 구비하는 것인 프로세서.
- 제1항에 있어서, 상기 명령어는 상기 제 1 피연산자와 상기 제 2 피연산자를 산술적으로 결합하는 산술 명령어(an arithmetic instruction)를 구비하는 것인 프로세서.
- 제1항에 있어서, 상기 조건 코드 로직은 상기 단일 계산 스테이지에 접속된 적어도 하나의 병합 스테이지(one merging stage)를 더 포함하며, 상기 적어도 하나의 병합 스테이지는 상기 하나 또는 그 이상의 논리 신호를 입력받고, 상기 입력된 논리 신호를 많아야 'GT' 신호, 'LT' 신호 및 'EQ' 신호와 병합하는 것인 프로세서.
- 프로세서 내에서 조건 코드 비트를 계산하는 방법에 있어서,적어도 제1 및 제2 피연산자를 사용하는 명령어에 의해 지시되는 연산을 수행함으로써 명령어를 실행하는 단계-여기서, 상기 제1 및 제2 피연산자의 각각은 하나 이상 그리고 최대 M개의 비트 위치를 포함하고, 상기 비트 위치들의 각각은 비트 값을 가짐-와,상기 연산을 수행함과 동시에, 상기 명령어와 관련된 'LT', 'GT' 및 'EQ' 조건 코드 비트를 계산하는 단계를 구비하며,상기 'LT', 'GT' 및 'EQ' 조건 코드 비트를 계산하는 단계는① 상기 제1 및 제2 피연산자 내에 있는 개개의 비트 위치들에 대한 비트 값들을 입력으로서 수신하는 단계와, ② 상기 M개의 비트 위치의 각각에 대하여 전달, 생성 및 삭제 신호를 만들기 위하여 상기 개개의 비트 값들을 논리적으로 결합하는 단계와, ③ 상기 'LT', 'GT' 및 'EQ' 조건 코드 비트에 대한 값들을 집합적으로 표시하는 하나 이상의 논리 신호를 출력하는 단계를 포함하는 것을 특징으로 하는 조건 코드 비트의 계산 방법.
- 제7항에 있어서, 상기 명령어를 실행하는 단계는 상기 제 1 피연산자의 크기와 상기 제 2 피연산자의 크기를 비교하는 비교 명령어를 실행하는 단계인 것인 조건 코드 비트의 계산 방법.
- 제7항에 있어서, 상기 명령어를 실행하는 단계는 상기 제 1 피연산자와 상기 제 2 피연산자를 산술적으로 결합하는 산술 명령어를 실행하는 단계인 것인 조건 코드 비트의 계산 방법.
- 제7항에 있어서, 상기 하나 이상의 논리 신호를 많아야 'LT' 신호, 'GT' 신호, 및 'EQ' 신호와 병합하는 단계를 더 포함하는 조건 코드 비트의 계산 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/005,471 US6035390A (en) | 1998-01-12 | 1998-01-12 | Method and apparatus for generating and logically combining less than (LT), greater than (GT), and equal to (EQ) condition code bits concurrently with the execution of an arithmetic or logical operation |
US09/005,471 | 1998-01-12 | ||
US9/005,471 | 1998-01-12 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR19990067773A KR19990067773A (ko) | 1999-08-25 |
KR100307980B1 true KR100307980B1 (ko) | 2001-09-26 |
Family
ID=21716039
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019990000190A KR100307980B1 (ko) | 1998-01-12 | 1999-01-02 | 산술 또는 논리 연산의 수행과 동시에 조건 코드 비트를 발생하는 방법 및 시스템 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6035390A (ko) |
JP (1) | JP3122420B2 (ko) |
KR (1) | KR100307980B1 (ko) |
CN (1) | CN1103957C (ko) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6598153B1 (en) | 1999-12-10 | 2003-07-22 | International Business Machines Corporation | Processor and method that accelerate evaluation of pairs of condition-setting and branch instructions |
US7028170B2 (en) * | 2000-03-08 | 2006-04-11 | Sun Microsystems, Inc. | Processing architecture having a compare capability |
US6892295B2 (en) * | 2000-03-08 | 2005-05-10 | Sun Microsystems, Inc. | Processing architecture having an array bounds check capability |
US20030154347A1 (en) * | 2002-02-12 | 2003-08-14 | Wei Ma | Methods and apparatus for reducing processor power consumption |
US20030212745A1 (en) * | 2002-05-08 | 2003-11-13 | Caughey David A. | Selective multi-step email message marketing |
US7600102B2 (en) * | 2004-06-14 | 2009-10-06 | Broadcom Corporation | Condition bits for controlling branch processing |
US7676647B2 (en) * | 2006-08-18 | 2010-03-09 | Qualcomm Incorporated | System and method of processing data using scalar/vector instructions |
US9459864B2 (en) * | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US11106466B2 (en) * | 2018-06-18 | 2021-08-31 | International Business Machines Corporation | Decoupling of conditional branches |
CN113407351A (zh) * | 2021-07-20 | 2021-09-17 | 北京百度网讯科技有限公司 | 执行运算的方法、装置、芯片、设备、介质和程序产品 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4346437A (en) * | 1979-08-31 | 1982-08-24 | Bell Telephone Laboratories, Incorporated | Microcomputer using a double opcode instruction |
US4589065A (en) * | 1983-06-30 | 1986-05-13 | International Business Machines Corporation | Mechanism for implementing one machine cycle executable trap instructions in a primitive instruction set computing system |
US4618956A (en) * | 1983-09-29 | 1986-10-21 | Tandem Computers Incorporated | Method of operating enhanced alu test hardware |
US4845659A (en) * | 1986-08-15 | 1989-07-04 | International Business Machines Corporation | Accelerated validity response permitting early issue of instructions dependent upon outcome of floating point operations |
US4951195A (en) * | 1988-02-01 | 1990-08-21 | International Business Machines Corporation | Condition code graph analysis for simulating a CPU processor |
US4924422A (en) * | 1988-02-17 | 1990-05-08 | International Business Machines Corporation | Method and apparatus for modified carry-save determination of arithmetic/logic zero results |
US4947359A (en) * | 1988-02-17 | 1990-08-07 | International Business Machines Corporation | Apparatus and method for prediction of zero arithmetic/logic results |
US5045992A (en) * | 1988-10-19 | 1991-09-03 | Hewlett-Packard Company | Apparatus for executing instruction regardless of data types and thereafter selectively branching to other instruction upon determining of incompatible data type |
US5201056A (en) * | 1990-05-02 | 1993-04-06 | Motorola, Inc. | RISC microprocessor architecture with multi-bit tag extended instructions for selectively attaching tag from either instruction or input data to arithmetic operation output |
US5287467A (en) * | 1991-04-18 | 1994-02-15 | International Business Machines Corporation | Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit |
US5511172A (en) * | 1991-11-15 | 1996-04-23 | Matsushita Electric Co. Ind, Ltd. | Speculative execution processor |
EP0718753A1 (en) * | 1994-12-22 | 1996-06-26 | Motorola, Inc. | Data processing system for evaluating fuzzy logic rules and method therefor |
US5588127A (en) * | 1995-06-07 | 1996-12-24 | Texas Instruments Incorporated | High speed microprocessor branch decision circuit |
US5860017A (en) * | 1996-06-28 | 1999-01-12 | Intel Corporation | Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction |
-
1998
- 1998-01-12 US US09/005,471 patent/US6035390A/en not_active Expired - Fee Related
- 1998-12-30 CN CN98125956A patent/CN1103957C/zh not_active Expired - Fee Related
-
1999
- 1999-01-02 KR KR1019990000190A patent/KR100307980B1/ko not_active IP Right Cessation
- 1999-01-04 JP JP11000069A patent/JP3122420B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1103957C (zh) | 2003-03-26 |
JPH11282675A (ja) | 1999-10-15 |
CN1225467A (zh) | 1999-08-11 |
US6035390A (en) | 2000-03-07 |
KR19990067773A (ko) | 1999-08-25 |
JP3122420B2 (ja) | 2001-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5740419A (en) | Processor and method for speculatively executing an instruction loop | |
EP0805390B1 (en) | Processor and method for speculatively executing a conditional branch instruction utilizing a selected one of multiple branch prediction methodologies | |
US5634103A (en) | Method and system for minimizing branch misprediction penalties within a processor | |
US6279105B1 (en) | Pipelined two-cycle branch target address cache | |
US5404473A (en) | Apparatus and method for handling string operations in a pipelined processor | |
US5961636A (en) | Checkpoint table for selective instruction flushing in a speculative execution unit | |
US5611063A (en) | Method for executing speculative load instructions in high-performance processors | |
US5699279A (en) | Optimized binary adders and comparators for inputs having different widths | |
US6728872B1 (en) | Method and apparatus for verifying that instructions are pipelined in correct architectural sequence | |
US5619664A (en) | Processor with architecture for improved pipelining of arithmetic instructions by forwarding redundant intermediate data forms | |
US5901307A (en) | Processor having a selectively configurable branch prediction unit that can access a branch prediction utilizing bits derived from a plurality of sources | |
US6598153B1 (en) | Processor and method that accelerate evaluation of pairs of condition-setting and branch instructions | |
US5898864A (en) | Method and system for executing a context-altering instruction without performing a context-synchronization operation within high-performance processors | |
US5828895A (en) | Methods and system for predecoding instructions in a superscalar data processing system | |
US5875325A (en) | Processor having reduced branch history table size through global branch history compression and method of branch prediction utilizing compressed global branch history | |
US5872948A (en) | Processor and method for out-of-order execution of instructions based upon an instruction parameter | |
US5590351A (en) | Superscalar execution unit for sequential instruction pointer updates and segment limit checks | |
US20050182918A1 (en) | Pipelined microprocessor, apparatus, and method for generating early instruction results | |
KR101528340B1 (ko) | 부동 소수점 유닛에서 오버시프트의 빠른 검출을 위한 메카니즘 | |
US5991863A (en) | Single carry/borrow propagate adder/decrementer for generating register stack addresses in a microprocessor | |
KR100307980B1 (ko) | 산술 또는 논리 연산의 수행과 동시에 조건 코드 비트를 발생하는 방법 및 시스템 | |
US5815420A (en) | Microprocessor arithmetic logic unit using multiple number representations | |
US6237085B1 (en) | Processor and method for generating less than (LT), Greater than (GT), and equal to (EQ) condition code bits concurrent with a logical or complex operation | |
US5764549A (en) | Fast floating point result alignment apparatus | |
KR100305487B1 (ko) | 특정유형의인스트럭션을동시에처리할수있는방법및데이터프로세싱시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20050714 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |