나는 사소한 질문에 대한 답을 찾고 있다고 생각합니다. MIPS 아키텍처가 레지스터 자체에 대해 XOR을 수행하여 동일한 결과를 얻을 수있을 때 레지스터에서 명시 적 "0"값을 사용하는 이유를 이해하려고합니다. 작업이 이미 완료되었다고 말할 수 있습니다. 그러나 많은 "제로"값을 사용하는 상황을 실제로 상상할 수 없습니다. 나는 Hennessey의 원본 논문을 읽었으며, 정당한 정당화없이 사실의 문제로 0을 할당합니다.
하드 코딩 된 이진 할당이 0 인 논리적 이유가 있습니까?
업데이트 : PIC32MZ의 MIPS 코어 용 xc32-gcc 실행 파일의 8k에서 "0"이라는 단일 인스턴스가 있습니다.
add t3,t1,zero
실제 답변 : MIPS 및 조건 코드에 대한 정보를 보유한 사람에게 현상금을 수여했습니다. 정답은 실제로 조건에 대한 MIPS 아키텍처에 있습니다. 처음에 이것에 시간을 할당하고 싶지는 않았지만 opensparc , MIPS-V 및 OpenPOWER (이 문서는 내부에 있음)의 아키텍처를 검토했으며 요약 결과는 다음과 같습니다. R0 레지스터는 파이프 라인 아키텍처로 인해 분기를 비교하는 데 필요합니다.
- 0과 분기에 대한 정수 비교 (bgez, bgtz, blez, bltz)
- 두 레지스터와 분기를 정수로 비교 (beq, bne)
- 정수는 두 레지스터와 트랩을 비교합니다 (teq, tge, tlt, tne)
- 정수 비교 레지스터 및 즉시 및 트랩 (teqi, tgei, tlti, tnei)
단순히 하드웨어가 구현 방식에 따라 달라집니다. MIPS-V 매뉴얼에는 68 페이지의 참조되지 않은 인용문이 있습니다.
조건부 분기는 조건 코드 (x86, ARM, SPARC, PowerPC)를 사용하지 않고 두 레지스터 (PA-RISC 및 Xtensa ISA에서도 수행됨) 간의 산술 비교 연산을 포함하거나 하나의 레지스터 만 0과 비교하도록 설계되었습니다 ( Alpha, MIPS) 또는 동등성 (MIPS) 전용의 두 레지스터. 이 설계는 결합 된 비교 및 분기 명령을 일반 파이프 라인으로 통합하고 추가 조건 코드 상태 또는 임시 레지스터 사용을 피하며 정적 코드 크기 및 동적 명령 페치 트랙을 줄인다는 관찰에 동기를 부여했습니다. 또 다른 요점은 0에 대한 비교에는 사소한 회로 지연이 필요하며 (특히 고급 프로세스에서 정적 논리로 이동 한 후) 산술 크기 비교만큼 비용이 많이 든다는 것입니다. 융합 비교 및 분기 명령의 또 다른 장점은 분기가 프런트 엔드 명령 스트림에서 더 일찍 관찰되므로 더 일찍 예측할 수 있다는 것입니다. 동일한 조건 코드를 기반으로 여러 분기를 수행 할 수있는 경우 조건 코드가있는 설계에 이점이있을 수 있지만이 경우는 비교적 드문 것으로 판단됩니다.
인용 된 섹션의 작성자에게 MIPS-V 문서가 적중되지 않습니다. 시간과 배려에 감사합니다.