| 설계 기업 및 설계자 | 썬 마이크로시스템즈 (현오라클)[1][2] |
|---|---|
| 비트 | 64비트 (32 → 64) |
| 발표 | 1986년(40년 전)(1986) (생산) 1987년(39년 전)(1987) (출하) |
| 버전 | V9 (1993) / OSA2017 |
| 구조 | RISC |
| 유형 | 로드-스토어 |
| 인코딩 | 고정 |
| 분기 | 조건 코드 |
| 엔디언 | 바이엔디언 (Big → Bi) |
| 페이지 크기 | 8 KB (4 KB → 8 KB) |
| 확장 | VIS 1.0, 2.0, 3.0, 4.0 |
| 개방 여부 | 예 (로열티 무료) |
| 레지스터 | |
| 범용 목적 | 31 (G0 = 0; 비전역 레지스터는레지스터 윈도 사용) |
| 부동소수점 | 32 (32개의 단정밀도, 32개의 배정밀도, 또는 16개의 4배정밀도로 사용 가능) |

SPARC(스팍,Scalable Processor ARChitecture, 확장형 프로세서 아키텍처)는썬 마이크로시스템즈가 원래 개발한축소 명령어 집합 컴퓨터 (RISC)명령어 집합 아키텍처이다. 그 설계는 1980년대 초에 개발된 실험적인버클리 RISC 시스템의 영향을 강하게 받았다. 1986년에 처음 개발되어 1987년에 출시된 SPARC은 초기 상업용 RISC 시스템 중 가장 성공적인 것 중 하나였으며, 그 성공으로 1980년대와 1990년대에 걸쳐 많은 업체에서 유사한 RISC 설계를 도입하게 되었다. 썬을 인수한 후,오라클은 2017년에 SPARC 개발을 종료했다.
1980년대 중반까지 컴퓨터 업계의 합의는RISC가 전통적인CISC 아키텍처보다 훨씬 더 나은가격 대비 성능비를 갖는다는 것이었다.워크스테이션 공급업체인썬 마이크로시스템즈는모토로라 68000 시리즈 프로세서에서 가능한 한 빨리 RISC로 전환하기로 결정했다.[3]
원래의32비트 아키텍처(SPARC V7)의 첫 번째 구현은 썬의Sun-4 컴퓨터워크스테이션 및서버 시스템에 사용되었으며, 모토로라 68000 시리즈 기반의 이전Sun-3 시스템을 대체했다. 1992년에 출시된SuperSPARC 시리즈 프로세서의 일부로 여러 개선 사항이 추가된 SPARC V8이 등장했다. 1993년에 발표된 SPARC V9은64비트 아키텍처를 도입했으며, 1995년 썬의울트라스팍 프로세서에서 처음으로 구현되었다. 이후 SPARC 프로세서는 썬,솔본,후지쯔 등이 생산한대칭형 다중 처리 (SMP) 및불균일 기억 장치 접근 (CC-NUMA) 서버에 사용되었다.
이 설계는 1989년에 SPARC 인터내셔널(SPARC International) 무역 그룹으로 넘어갔으며, 그 이후 아키텍처는 회원사들에 의해 개발되었다. SPARC 인터내셔널은 또한 SPARC 아키텍처의 라이선스 공여 및 홍보, SPARC 상표 관리(소유권 포함), 그리고적합성 테스트 제공을 담당한다. SPARC 인터내셔널은 SPARC 아키텍처를 성장시켜 더 큰 생태계를 조성하고자 했으며, 이에 따라 SPARC은아트멜,바이폴라 인티그레이티드 테크놀로지(BIT),사이프러스 세미컨덕터,후지쯔,마쓰시타,텍사스 인스트루먼트를 포함한 여러 제조업체에 라이선스가 공여되었다. SPARC 인터내셔널 덕분에 SPARC은 완전히 개방되어 있으며 비독점적이고 로열티가 없다.
2024년 기준, 최신 상업용 하이엔드 SPARC 프로세서는후지쯔의SPARC64 XII(2017년 9월 SPARC M12 서버용으로 도입)와 2017년 9월 하이엔드 서버용으로 도입된오라클의SPARC M8이다.
2017년 9월 1일, 2016년 11월 오라클 랩스에서 시작된 해고 조치 이후, 오라클은 M8 개발을 완료한 뒤 SPARC 설계를 종료했다. 텍사스주 오스틴의 프로세서 코어 개발 그룹의 상당수와 캘리포니아주 산타클라라, 매사추세츠주 벌링턴의 팀들이 해고되었다.[4][5]
후지쯔 또한 SPARC 생산을 중단할 예정이다(이미 자체ARM 기반 CPU 생산으로 전환함). 2020~22년에 이전 SPARC M12 서버의 "강화" 버전을 출시한 후(당초 2021년 계획), 2029년에 UNIX 서버 판매를 종료하고 1년 후에는메인프레임 판매를 종료하며, "고객 현대화 촉진"을 위해 2034년에 지원을 종료할 계획이다.[6]
SPARC 아키텍처는캘리포니아 대학교 버클리의버클리 RISC I 및 II와IBM 801을 포함한 초기 RISC 설계의 영향을 크게 받았다. 이러한 초기 RISC 설계는 미니멀리즘을 지향하여 가능한 한 적은 기능이나 연산 코드(op-code)를 포함하고클럭 주기당 거의 하나의 명령어를 실행하는 것을 목표로 했다. 이로 인해 곱셈이나 나눗셈 명령어가 부족한 등 여러 면에서MIPS 아키텍처와 유사했다. 이 초기 RISC 운동의 영향을 받은 SPARC의 또 다른 특징은분기 지연 슬롯이다.
SPARC 프로세서는 대개 160개에 달하는범용 레지스터를 포함한다. "오라클 SPARC 아키텍처 2015" 사양에 따르면 "구현에 따라 72개에서 640개의 범용 64비트" 레지스터를 포함할 수 있다.[7] 어떤 시점에서도 소프트웨어에는 32개만 즉시 보이는데, 8개는 전역 레지스터 세트(그중 하나인g0은 하드웨어적으로 0에 고정되어 있어 7개만 사용 가능)이고 나머지 24개는 레지스터스택에서 가져온 것이다. 이 24개의 레지스터는레지스터 윈도라고 불리는 것을 형성하며, 함수 호출/반환 시 이 윈도는 레지스터 스택 위아래로 이동한다. 각 윈도는 8개의 지역 레지스터를 가지며 인접한 각 윈도와 8개의 레지스터를 공유한다. 공유 레지스터는 함수 매개변수 전달 및 값 반환에 사용되고, 지역 레지스터는 함수 호출 간에 지역 값을 유지하는 데 사용된다.
SPARC의 "Scalable(확장 가능)"이라는 이름은 SPARC 사양이 임베디드 프로세서에서 대형 서버 프로세서까지 확장이 가능하며, 모두 동일한 코어(비특권) 명령어 집합을 공유한다는 사실에서 유래했다. 확장 가능한 아키텍처 매개변수 중 하나는 구현된 레지스터 윈도의 수이다. 사양은 3개에서 32개 사이의 윈도 구현을 허용하므로, 구현 시 최대콜 스택 효율성을 위해 32개를 모두 구현하거나 설계 비용과 복잡성을 줄이기 위해 3개만 구현하거나 그 사이의 숫자를 선택할 수 있다. 유사한레지스터 파일 기능을 포함하는 다른 아키텍처로는인텔 i960,IA-64,AMD Am29000이 있다.
아키텍처는 여러 번의 개정을 거쳤다. 버전 8에서 하드웨어 곱셈 및 나눗셈 기능을 얻었다. 1994년에 발표된 버전 9 SPARC 사양에서64비트(주소 지정 및 데이터)가 추가되었다.[8]
SPARC 버전 8에서부동소수점 레지스터 파일은 16개의배정밀도 레지스터를 가진다. 각각은 두 개의단정밀도 레지스터로 사용될 수 있어 총 32개의 단정밀도 레지스터를 제공한다. 짝수-홀수 번호 쌍의 배정밀도 레지스터는4배정밀도 레지스터로 사용될 수 있어 8개의 4배정밀도 레지스터를 허용한다. SPARC 버전 9은 16개의 배정밀도 레지스터를 추가로 도입했으며(이 또한 8개의 4배정밀도 레지스터로 접근 가능), 이 추가 레지스터들은 단정밀도 레지스터로 접근할 수 없다. 2024년 기준 하드웨어에서 4배정밀도 연산을 구현한 SPARC CPU는 없다.[9]
태그형 덧셈 및 뺄셈 명령어는 두 피연산자의 하위 2비트가 0인지 확인하고 그렇지 않으면 오버플로를 보고하면서 연산을 수행한다. 이는 태그형 정수 형식을 사용하는ML,리스프, 그리고 유사한 언어의런타임 구현에 유용할 수 있다.
32비트 SPARC V8 아키텍처의엔디언은 순수하게 빅 엔디언이다. 64비트 SPARC V9 아키텍처는 빅 엔디언 명령어를 사용하지만, 애플리케이션 명령어(로드-스토어) 수준이나메모리 페이지 수준(MMU 설정을 통해)에서 선택하여 빅 엔디언 또는 리틀 엔디언 바이트 순서로 데이터에 접근할 수 있다. 후자는 대개 PCI 버스에 있는 장치들과 같이 본질적으로 리틀 엔디언인 장치에서 데이터에 접근할 때 사용된다.
v7 → v8 → v9 (64비트) → JPS1 → JPS2 (멀티코어) → UA2005 (sun4v) → UA2007 → OSA2011 → OSA2015 → OSA2017
이 아키텍처에는 세 가지 주요 개정판이 있다. 첫 번째 발표 버전은 1986년의 32비트 SPARC 버전 7 (V7)이었다. 향상된 SPARC 아키텍처 정의인 SPARC 버전 8 (V8)은 1990년에 출시되었다. V7과 V8의 주요 차이점은 정수 곱셈 및 나눗셈 명령어의 추가와 80비트 "확장 정밀도" 부동소수점 연산에서 128비트 "4배정밀도" 연산으로의 업그레이드였다. SPARC V8은 32비트 마이크로프로세서 아키텍처를 위한IEEE 표준인 IEEE 표준 1754-1994의 기초가 되었다.
64비트 SPARC 아키텍처인 SPARC 버전 9 (V9)은 1993년에 SPARC 인터내셔널에 의해 출시되었다. 이는암달 코퍼레이션,후지쯔,ICL,LSI 코퍼레이션,마쓰시타,필립스,로스 테크놀로지,썬 마이크로시스템즈,텍사스 인스트루먼트로 구성된 SPARC 아키텍처 위원회에 의해 개발되었다. 최신 사양은 항상 완전한 SPARC V9 레벨 1 사양을 준수한다.
2002년, 후지쯔와 썬에 의해 SPARC Joint Programming Specification 1 (JPS1)이 출시되었으며, 양사 CPU에서 동일하게 구현된 프로세서 기능("공통성")을 설명했다. JPS1을 준수한 첫 번째 CPU는 썬의 울트라스팍 III와 후지쯔의 SPARC64 V였다. JPS1에서 다루지 않는 기능은 각 프로세서의 "구현 보충서(Implementation Supplements)"에 기록되어 있다.
2003년 말, 멀티 코어 CPU를 지원하기 위해 Joint Programming Specification 2 (JPS2)가 출시되었다. JPS2를 준수한 첫 번째 CPU는 썬의 울트라스팍 IV와 후지쯔의 SPARC64 VI였다.
2006년 초, 썬은 확장된 아키텍처 사양인 UltraSPARC Architecture 2005 (UA2005)를 발표했다. 여기에는 SPARC V9의 비특권 및 대부분의 특권 부분뿐만 아니라 울트라스팍 III, IV, IV+ 프로세서 세대를 통해 개발된 모든 아키텍처 확장과울트라스팍 T1 구현부터 시작된 칩 멀티스레딩(CMT) 확장이 포함되었다.
2007년, 썬은울트라스팍 T2 구현이 준수하는 업데이트된 사양인 UltraSPARC Architecture 2007 (UA2007)을 발표했다.
2007년 12월, 썬은 또한오픈스팍 프로젝트를 통해울트라스팍 T2 프로세서의 RTL을 공개했다.[10] 이는 GNU 일반 공중 사용 허가서 v2로도 출시되었다.[11] 오픈스팍 T2는 8코어 16파이프라인 64스레드 구조이다.
2012년 8월, 오라클은 새로운 사양인 Oracle SPARC Architecture 2011 (OSA2011)을 공개했으며, 이는 참조용 전반적인 업데이트 외에도 2007년 사양에 VIS 3 명령어 집합 확장과하이퍼특권 모드를 추가했다.[12]
2015년 10월, 오라클은 새로운 Oracle SPARC Architecture 2015 (OSA2015) 사양을 기반으로 한 최초의 프로세서인SPARC M7을 출시했다.[7][13] 이 개정판에는 VIS 4 명령어 집합 확장과 하드웨어 가속 암호화 및 실리콘 보안 메모리(SSM)가 포함되었다.[14]
2017년 9월, 오라클은 새로운 Oracle SPARC Architecture 2017 (OSA2017) 사양을 기반으로 한 최초의 프로세서인SPARC M8을 출시했다.
SPARC 아키텍처는 1987년 첫 SPARC V7 구현부터 썬 울트라스팍 아키텍처 구현에 이르기까지 지속적인 애플리케이션 바이너리 호환성을 제공해 왔다.
SPARC의 다양한 구현 중 썬의 SuperSPARC와 UltraSPARC-I은 매우 인기가 높았으며SPEC CPU95 및 CPU2000 벤치마크의 참조 시스템으로 사용되었다. 296 MHz UltraSPARC-II는 SPEC CPU2006 벤치마크의 참조 시스템이다.
SPARC은로드-스토어 아키텍처(레지스터-레지스터 아키텍처라고도 함)이다.메모리 접근에 사용되는 로드/스토어 명령어를 제외한 모든 명령어는 RISC 설계 원칙에 따라 레지스터에서 작동한다.
SPARC 프로세서는 정수 로드, 스토어 및 산술 연산을 수행하는 정수 유닛(IU)을 포함한다.[15]: 9 [8]: 15–16 또한 부동소수점 연산을 수행하는부동소수점 장치(FPU)를 포함할 수 있으며,[15]: 9 [8]: 15–16 SPARC V8의 경우 보조 프로세서 전용 연산을 수행하는 코프로세서(CP)를 포함할 수 있다. 아키텍처는 로드 및 스토어 연산 외에 코프로세서가 수행할 기능을 명시하지 않는다.[15]: 9
SPARC 아키텍처는 중첩된 레지스터 윈도 체계를 가지고 있다. 어떤 순간에도 32개의 범용 레지스터가 보인다. 하드웨어의 CWP(Current Window Pointer) 변수가 현재 세트를 가리킨다. 레지스터 파일의 총 크기는 아키텍처의 일부가 아니므로 기술이 향상됨에 따라 더 많은 레지스터를 추가할 수 있다. SPARC V7 및 V8에서는 CWP가 5비트이고 PSR 레지스터의 일부이므로 최대 32개의 윈도가 가능하다.
SPARC V7 및 V8에서 CWP는 일반적으로 SAVE 명령어(함수 호출 시 새 스택 프레임을 열고 레지스터 윈도를 전환하는 데 사용됨)에 의해 감소하거나, RESTORE 명령어(반환 전 호출자로 돌아가기 위해 전환)에 의해 증가한다. 트랩 이벤트(인터럽트, 예외 또는 TRAP 명령어)와 RETT 명령어(트랩에서 복귀)도 CWP를 변경한다. SPARC V9의 경우 CWP 레지스터는 RESTORE 명령어 중에 감소하고 SAVE 명령어 중에 증가한다. 이는 SPARC V8의 PSR.CWP 동작과 반대이다. 이 변경은 비특권 명령어에는 영향을 미치지 않는다.
| 레지스터 그룹 | 약어 | 레지스터 주소 | 가용성 |
|---|---|---|---|
| 전역(global) | G0...G7 | R[00]...R[07] | 항상 동일한 레지스터, G0은 항상 0 |
| 출력(out) | O0...O7 | R[08]...R[15] | 호출된 서브루틴에 "in"으로 전달 및 반환됨 |
| 지역(local) | L0...L7 | R[16]...R[23] | 현재 서브루틴에 진정으로 지역적인 레지스터 |
| 입력(in) | I0...I7 | R[24]...R[31] | 호출자로부터 "out"으로 전달 및 반환됨 |
SPARC 레지스터는 위 표와 같이 구성된다.
또한 곱셈 단계, 정수 곱셈 및 정수 나눗셈 명령어에 사용되는 비윈도형 Y 레지스터가 있다.[15]: 32
FPU가 있는 SPARC V8 프로세서는 32개의 32비트 부동소수점 레지스터를 포함하며, 각각 하나의 단정밀도IEEE 754 부동소수점 수를 가질 수 있다. 짝수-홀수 쌍의 부동소수점 레지스터는 하나의 배정밀도 IEEE 754 부동소수점 수를 가질 수 있고, 4개로 정렬된 그룹은 하나의 4배정밀도 IEEE 754 부동소수점 수를 가질 수 있다.[15]: 10
FPU가 있는 SPARC V9 프로세서는 다음을 포함한다:[8]: 36–40
이 레지스터들은 64개의 32비트 레지스터 세트로 구성되며, 처음 32개는 32비트 부동소수점 레지스터로 사용되고, 64개 전체의 짝수-홀수 쌍은 64비트 부동소수점 레지스터로, 4개로 정렬된 그룹은 128비트 부동소수점 레지스터로 사용된다.
부동소수점 레지스터는 윈도 방식이 아니며 모두 전역 레지스터이다.[8]: 36–40
모두 SPARC 명령어는 전체 32비트워드를 차지하며 워드 경계에서 시작한다. 첫 두 비트로 구분되는 네 가지 형식이 사용된다. 모든 산술 및 논리 명령어는 2개의 소스 피연산자와 1개의 목적지 피연산자를 갖는다.[16] RD는 연산 결과가 저장되는 "목적지 레지스터"이다. 대부분의 SPARC 명령어는 적어도 이 레지스터를 가지므로 명령어 형식의 "앞쪽"에 배치된다. RS1과 RS2는 "소스 레지스터"이며, 존재할 수도 있고 상수로 대체될 수도 있다.
| 유형 | 비트 | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| SETHI 형식 | 00 | RD | 100 | 직접 상수 22 비트 | ||||||||||||||||||||||||||||
| I 분기 형식 | 00 | A | icc | 010 | 변위 상수 22 비트 | |||||||||||||||||||||||||||
| F 분기 형식 | 00 | A | fcc | 110 | 변위 상수 22 비트 | |||||||||||||||||||||||||||
| C 분기 형식 | 00 | A | ccc | 111 | 변위 상수 22 비트 | |||||||||||||||||||||||||||
| CALL 변위 | 01 | PC-상대 변위 | ||||||||||||||||||||||||||||||
| 산술 레지스터 | 10 | RD | opcode | RS1 | 0 | 0 | RS2 | |||||||||||||||||||||||||
| 산술 직접 상수 | 10 | RD | opcode | RS1 | 1 | 직접 상수 13 비트 | ||||||||||||||||||||||||||
| FPU 연산 | 10 | FD | 110100/110101 | FS1 | opf | FS2 | ||||||||||||||||||||||||||
| CP 연산 | 10 | RD | 110110/110111 | RS1 | opc | RS2 | ||||||||||||||||||||||||||
| JMPL 레지스터 | 10 | RD | 111000 | RS1 | 0 | 0 | RS2 | |||||||||||||||||||||||||
| JMPL 직접 상수 | 10 | RD | 111000 | RS1 | 1 | 직접 상수 13 비트 | ||||||||||||||||||||||||||
| LD/ST 레지스터 | 11 | RD | opcode | RS1 | 0 | 0 | RS2 | |||||||||||||||||||||||||
| LD/ST 직접 상수 | 11 | RD | opcode | RS1 | 1 | 직접 상수 13 비트 | ||||||||||||||||||||||||||
로드 및 스토어 명령어는 주소에 대한 두 개의 피연산자와 읽거나 쓸 레지스터에 대한 하나의 피연산자를 갖는 3-피연산자 형식이다. 주소는 두 주소 피연산자를 더하여 생성된다. 두 번째 주소 피연산자는 상수이거나 레지스터일 수 있다. 로드는 해당 주소의 값을 가져와 세 번째 피연산자로 지정된 레지스터에 배치하는 반면, 스토어는 첫 번째 피연산자로 지정된 레지스터의 값을 가져와 해당 주소에 배치한다. 이를 명확하게 하기 위해어셈블리어는 피연산자를 쉼표로 구분하는 대신 대괄호를 사용하고 주소 피연산자 사이에 더하기 기호를 사용한다. 예:[16]
ld [%L1+%L2],%L3 !주소 %L1+%L2의 32비트 값을 로드하여 %L3에 넣음ld [%L1+8],%L2 !%L1+8 주소의 값을 %L2로 로드ld [%L1],%L2 !위와 같으나 오프셋이 없음 (+%G0와 동일)st %L1,[%I2] !%L1의 값을 %I2에 저장된 위치에 스토어st %G0,[%I1+8] !%I1+8 위치의 메모리를 0으로 지움
16비트나 8비트 정수 데이터, 문자열의 8비트 바이트 등 32비트가 아닌 데이터가 널리 사용되므로, 32비트 워드뿐만 아니라 16비트 하프워드와 8비트 바이트를 로드하고 저장하는 명령어가 있다. 로드 중에 이러한 명령어는 표시된 위치의 바이트 또는 하프워드만 읽은 다음 대상 레지스터의 나머지 부분을 0으로 채우거나(부호 없는 로드) 바이트 또는 하프워드의 최상위 비트 값으로 채운다(부호 있는 로드). 스토어 중에 이러한 명령어는 레지스터의 상위 비트를 버리고 하위 비트만 저장한다. 또한부동소수점 연산에 사용되는 배정밀도 값을 로드하는 명령어도 있는데, 표시된 레지스터와 "다음" 레지스터에서 8바이트를 읽거나 쓴다. 예를 들어 로드 대상이 L1이면 L1과 L2가 설정된다. 32비트 SPARC에서 범용 레지스터를 위한 로드 및 스토어 명령어의 전체 목록은LD,ST,LDUB (부호 없는 바이트),LDSB (부호 있는 바이트),LDUH (부호 없는 하프워드),LDSH (부호 있는 하프워드),LDD (더블 로드),STB (바이트 스토어),STH (하프워드 스토어),STD (더블 스토어)이다.[16]
SPARC V9에서 레지스터는 64비트이며,LD 명령어는LDUW로 이름이 변경되어 레지스터의 상위 32비트를 지우고 하위 32비트에 값을 로드한다.ST 명령어는STW로 이름이 변경되어 상위 32비트를 버리고 하위 32비트만 저장한다. 새로운LDSW 명령어는 레지스터의 상위 비트를 워드의 최상위 비트 값으로 설정하고 하위 비트에 32비트 값을 로드한다. 새로운LDX 명령어는 64비트 값을 레지스터에 로드하고,STX 명령어는 레지스터의 64비트 전체를 저장한다.
LDF,LDDF,LDQF 명령어는 메모리에서 단정밀도, 배정밀도, 또는 4배정밀도 값을 부동소수점 레지스터로 로드한다.STF,STDF,STQF 명령어는 단정밀도, 배정밀도, 또는 4배정밀도 부동소수점 레지스터 값을 메모리에 저장한다.
메모리 배리어 명령어인 MEMBAR는 두 가지 상호 연관된 목적을 수행한다. 메모리 참조 간의 순서 제약을 명시하고 메모리 참조 완료에 대한 명시적 제어를 용이하게 한다. 예를 들어, MEMBAR 명령어 이전에 나타나는 스토어의 모든 효과는 MEMBAR 이후의 로드가 실행되기 전에 모든 프로세서에 보여야 한다.[17]
산술 및 논리 명령어도 3-피연산자 형식을 사용하며, 처음 두 개는 피연산자이고 마지막은 결과를 저장할 위치이다. 중간 피연산자는 레지스터이거나 13비트 부호 있는 정수 상수일 수 있으며, 다른 피연산자들은 레지스터이다. 결과 레지스터를 G0로 지정하면 결과가 버려지며, 이는 테스트 목적으로 사용될 수 있다. 예시는 다음과 같다:[16]
add %L1,%L2,%L3 !%L1과 %L2 값을 더해 %L3에 저장add %L1,1,%L1 !%L1 증가add %G0,%G0,%L4 !%L4의 모든 값을 0으로 지움
수학 명령어 목록은ADD,SUB,AND,OR,XOR와 이들의 부정 버전인ANDN,ORN,XNOR이다. SPARC 설계의 한 가지 특징은 대부분의 산술 명령어가 쌍으로 제공된다는 것이다. 하나는상태 레지스터의 NZVC 조건 코드 비트를 설정하고 다른 하나는 설정하지 않으며, 기본값은 설정하지 않는 것이다. 이는 컴파일러가 지연 슬롯을 채우려 할 때 명령어를 이동할 수 있는 방법을 제공하기 위해서이다. 조건 코드가 설정되기를 원하면 명령어에cc를 추가한다:[16]
subcc %L1,10,%G0 !%L1과 10을 비교하고 결과는 무시하되 플래그를 설정
add 및 sub에는 연산이 캐리 비트를 설정해야 하는지를 나타내는 다른 수식어 X도 있다.
addx %L1,100,%L1 !%L1 값에 100을 더하고 캐리를 추적
SPARC V7에는 곱셈이나 나눗셈 명령어가 없지만, 한 비트를 테스트하고 조건부로 피승수를 곱에 더하는 한 단계의 곱셈을 수행하는MULSCC가 있다. 이는 RISC 철학에 따라MULSCC가 한 클럭 주기 내에 완료될 수 있기 때문이었다. SPARC V8에서는UMUL (부호 없는 곱셈),SMUL (부호 있는 곱셈),UDIV (부호 없는 나눗셈),SDIV (부호 있는 나눗셈) 명령어가 추가되었으며, 조건 코드를 업데이트하는 버전과 업데이트하지 않는 버전이 모두 있다.MULSCC와 곱셈 명령어는 Y 레지스터를 사용하여 곱의 상위 32비트를 저장하고, 나눗셈 명령어는 이를 사용하여 피제수의 상위 32비트를 저장한다.RDY 명령어는 Y 레지스터의 값을 범용 레지스터로 읽어오고,WRY 명령어는 범용 레지스터의 값을 Y 레지스터에 쓴다.[15]: 32 SPARC V9에서는 두 64비트 값을 곱하여 64비트 결과를 생성하는MULX, 64비트 부호 있는 피제수를 64비트 부호 있는 제수로 나누어 64비트 부호 있는 몫을 생성하는SDIVX, 64비트 부호 없는 피제수를 64비트 부호 없는 제수로 나누어 64비트 부호 있는 몫을 생성하는UDIVX가 추가되었으며, 이들 명령어는 Y 레지스터를 사용하지 않는다.[8]: 199
조건부 분기는IBM 시스템/360 아키텍처 및 그 후속 제품들과X86 아키텍처와 같이상태 레지스터의 조건 코드를 테스트한다. 이는 테스트와 분기가 일반적으로 두 개의 명령어로 수행됨을 의미한다. 첫 번째는 조건 코드를 설정하는 ALU 명령어이고, 그 다음은 해당 플래그를 검사하는 분기 명령어이다. SPARC에는 특수 테스트 명령어가 없으며, 목적지를 %G0로 설정한 일반 ALU 명령어를 사용하여 테스트를 수행한다. 예를 들어, 레지스터가 10 값을 가지고 있는지 테스트하고 처리 코드로 분기하려면 다음과 같이 한다:
subcc %L1,10,%G0 !%L1에서 10을 빼고 %L1이 10이면 제로 플래그를 설정be WASEQUAL !제로 플래그가 설정되어 있으면 WASEQUAL 주소로 분기
조건부 분기 명령어에서icc 또는fcc 필드는 테스트되는 조건을 지정한다. 22비트 변위 필드는 현재 PC를 기준으로 한 대상의 주소(워드 단위)이므로, 조건부 분기는 앞뒤로 최대 8메가바이트까지 이동할 수 있다. ANNUL (A) 비트는 일부 지연 슬롯을 제거하는 데 사용된다. 조건부 분기에서 이 비트가 0이면 지연 슬롯이 평소처럼 실행된다. 1이면 분기가 일어날 때만 지연 슬롯이 실행된다. 분기가 일어나지 않으면 조건부 분기 다음의 명령어는 건너뛴다.
다양한 조건부 분기가 있다:BA (무조건 분기, 본질적으로 jmp),BN (분기 안 함),BE (같음),BNE (같지 않음),BL (작음),BLE (작거나 같음),BLEU (작거나 같음, 부호 없음),BG (큼),BGE (크거나 같음),BGU (큼, 부호 없음),BPOS (양수),BNEG (음수),BCC (캐리 클리어),BCS (캐리 설정),BVC (오버플로 클리어),BVS (오버플로 설정).[15]: 119–120
FPU와 CP는 정수 조건 코드와 서로 독립적인 조건 코드 세트를 가지고 있다. 이러한 조건 코드를 테스트하기 위해 두 가지 추가 분기 명령어 세트가 정의되었다. 위 목록의 분기 명령어 앞에 F를 추가하면 FPU의 조건 코드에 대해 테스트를 수행하며,[15]: 121–122 SPARC V8에서 C를 추가하면 정의되지 않은 CP의 플래그를 테스트한다.[15]: 123–124
CALL (서브루틴 호출) 명령어는 30비트프로그램 카운터-상대 워드 오프셋을 사용한다. 대상 주소는 바이트가 아닌 워드 시작을 지정하므로 30비트만으로도 4기가바이트 주소 공간의 모든 주소에 도달할 수 있다.[16] CALL 명령어는 반환 주소를 레지스터 R15(출력 레지스터 O7)에 저장한다.
JMPL (점프 및 링크) 명령어는 대상 주소를 나타내는 두 개의 피연산자와 반환 주소를 저장할 레지스터에 대한 하나의 피연산자를 갖는 3-피연산자 명령어이다. 주소는 두 주소 피연산자를 더하여 32비트 주소로 생성된다. 두 번째 주소 피연산자는 상수이거나 레지스터일 수 있다.
명령어 opcode가 32비트 명령어 워드의 일부를 차지하므로, 단일 명령어를 사용하여 32비트 상수를 로드할 수 있는 방법은 없다. 주소는 레지스터를 통해 조작되고 32비트이므로 이는 중요하다. 이를 돕기 위해 특수 목적의SETHI 명령어는 22비트 직접 피연산자를 지정된 레지스터의 상위 22비트에 복사하고 하위 10비트를 0으로 설정한다. 일반적으로 SETHI 다음에는 하위 10비트만 설정된 or 명령어가 뒤따른다. 이를 용이하게 하기 위해 어셈블러는%hi(X) 및%lo(X) 매크로를 포함한다. 예시:[16]
sethi %hi(0x89ABCDEF),%L1 !L1의 상위 22비트 설정or %L1,%lo(0x89ABCDEF),%L1 !L1의 하위 10비트를 OR 연산으로 설정
hi 및 lo 매크로는 런타임이 아닌 어셈블 시간에서 수행되므로 성능 저하가 없으며 L1이 두 개의 관련 없는 값이 아닌 단일 값으로 설정됨을 명확하게 해준다. 이를 더 쉽게 하기 위해 어셈블러는 "의사 명령어(synthetic instruction)"인set을 포함하여 이 두 연산을 한 줄로 수행한다.
set 0x89ABCDEF,% L1
값이 13비트보다 크면 위 두 명령어를 출력하고, 그렇지 않으면 단일ld 명령어를 내보낸다.[16]
앞서 언급했듯이 SPARC 어셈블러는 일반적인 코딩 작업을 쉽게 하기 위해 "의사 명령어"를 사용한다. 추가 예시는 다음과 같다:
| 약어 | 실제 출력 | 목적 |
|---|---|---|
nop | sethi0,%g0 | 아무것도 하지 않음 |
clr%reg | or%g0,%g0,%reg | 레지스터를 0으로 설정 |
clr[address] | st%g0,[address] | 메모리 주소를 0으로 설정 |
clrh[address] | sth%g0,[address] | 메모리 주소의 하프워드를 0으로 설정 |
clrb[address] | stb%g0,[address] | 메모리 주소의 바이트를 0으로 설정 |
cmp%reg1,%reg2 | subcc%reg1,%reg2,%g0 | 두 레지스터 비교, 코드 설정 후 결과 무시 |
cmp%reg,const | subcc%reg,const,%g0 | 레지스터와 상수 비교 |
mov%reg1,%reg2 | or%g0,%reg1,%reg2 | 한 레지스터 값을 다른 레지스터로 복사 |
movconst,%reg | or%g0,const,%reg | 상수 값을 레지스터로 복사 |
inc%reg | add%reg,1,%reg | 레지스터 증가 |
inccc%reg | addcc%reg,1,%reg | 레지스터 증가 및 조건 설정 |
dec%reg | sub%reg,1,%reg | 레지스터 감소 |
deccc%reg | subcc%reg,1,%reg | 레지스터 감소 및 조건 설정 |
not%reg | xnor%reg,%g0,%reg | 레지스터의 비트 반전 |
neg%reg | sub%g0,%reg,%reg | 레지스터의 2의 보수 취하기 |
tst%reg | orcc%reg,%g0,%g0 | 레지스터 값이 0보다 큰지, 0인지, 작은지 테스트 |
인텔은80386의 유일한 생산자였으며, 이는 가격을 매우 비싸게 만들었고 업계가단일 공급원 CPU에 대해 경계하게 만들었다. 썬이 1987년에 SPARC을 발표했을 때, 회사는 여러 공급원에서 이를 사용할 수 있을 것이라고 밝혔다. 후지쯔가 첫 번째 SPARC 벤더였고 사이프러스 세미컨덕터가 두 번째 라이선스 보유자였다.1989년 02월 기준[update] 기준으로 이들의 SPARC CPU와 텍사스 인스트루먼트의 FPU가 시중에 나와 있었다.[18] 다음 조직들이 SPARC 아키텍처 라이선스를 취득했다:
| 이름 (코드명) | 모델 | 주파수 (MHz) | 아키텍처 버전 | 연도 | 총 스레드 수[note 1] | 공정 (nm) | 트랜지스터 (백만) | 다이 크기 (mm2) | IO 핀 | 전력 (W) | 전압 (V) | L1 데이터 캐시 (KB) | L1 명령 캐시 (KB) | L2 캐시 (KB) | L3 캐시 (KB) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| SPARC MB86900 | 후지쯔[1][19][2] | 14.28–33 | V7 | 1986 | 1×1=1 | 1300 | 0.11 | 빈칸 | 256 | 빈칸 | 빈칸 | 0–128 (통합) | 없음 | 없음 | |
| SPARC | 다수[note 2] | 14.28–40 | V7 | 1989–1992 | 1×1=1 | 800–1300 | ~0.1–1.8 | 빈칸 | 160–256 | 빈칸 | 빈칸 | 0–128 (통합) | 없음 | 없음 | |
| MN10501 (KAP) | 솔본 컴퓨터, 마쓰시타[20] | 33–36 | V8 | 1990–1991 | 1x1=1 | 빈칸 | 1.0[21] | 빈칸 | 빈칸 | 빈칸 | 빈칸 | 8 | 8 | 0–256 | 없음 |
| microSPARC I (Tsunami) | TI TMS390S10 | 40–50 | V8 | 1992 | 1×1=1 | 800 | 0.8 | 225? | 288 | 2.5 | 5 | 2 | 4 | 없음 | 없음 |
| SuperSPARC I (Viking) | TI TMX390Z50 / Sun STP1020 | 33–60 | V8 | 1992 | 1×1=1 | 800 | 3.1 | 빈칸 | 293 | 14.3 | 5 | 16 | 20 | 0–2048 | 없음 |
| SPARClite | Fujitsu MB8683x | 66–108 | V8E | 1992 | 1×1=1 | 빈칸 | 빈칸 | 빈칸 | 144, 176 | 빈칸 | 2.5/3.3–5.0 V, 2.5–3.3 V | 1, 2, 8, 16 | 1, 2, 8, 16 | 없음 | 없음 |
| hyperSPARC (Colorado 1) | Ross RT620A | 40–90 | V8 | 1993 | 1×1=1 | 500 | 1.5 | 빈칸 | 빈칸 | 빈칸 | 5? | 0 | 8 | 128–256 | 없음 |
| microSPARC II (Swift) | Fujitsu MB86904 / Sun STP1012 | 60–125 | V8 | 1994 | 1×1=1 | 500 | 2.3 | 233 | 321 | 5 | 3.3 | 8 | 16 | 없음 | 없음 |
| hyperSPARC (Colorado 2) | Ross RT620B | 90–125 | V8 | 1994 | 1×1=1 | 400 | 1.5 | 빈칸 | 빈칸 | 빈칸 | 3.3 | 0 | 8 | 128–256 | 없음 |
| SuperSPARC II (Voyager) | Sun STP1021 | 75–90 | V8 | 1994 | 1×1=1 | 800 | 3.1 | 299 | 빈칸 | 16 | 빈칸 | 16 | 20 | 1024–2048 | 없음 |
| hyperSPARC (Colorado 3) | Ross RT620C | 125–166 | V8 | 1995 | 1×1=1 | 350 | 1.5 | 빈칸 | 빈칸 | 빈칸 | 3.3 | 0 | 8 | 512–1024 | 없음 |
| TurboSPARC | Fujitsu MB86907 | 160–180 | V8 | 1996 | 1×1=1 | 350 | 3.0 | 132 | 416 | 7 | 3.5 | 16 | 16 | 512 | 없음 |
| 울트라스팍 (Spitfire) | Sun STP1030 | 143–167 | V9 | 1995 | 1×1=1 | 470 | 3.8 | 315 | 521 | 30[note 3] | 3.3 | 16 | 16 | 512–1024 | 없음 |
| 울트라스팍 (Hornet) | Sun STP1030 | 200 | V9 | 1995 | 1×1=1 | 420 | 5.2 | 265 | 521 | 빈칸 | 3.3 | 16 | 16 | 512–1024 | 없음 |
| hyperSPARC (Colorado 4) | Ross RT620D | 180–200 | V8 | 1996 | 1×1=1 | 350 | 1.7 | 빈칸 | 빈칸 | 빈칸 | 3.3 | 16 | 16 | 512 | 없음 |
| SPARC64 | Fujitsu (HAL) | 101–118 | V9 | 1995 | 1×1=1 | 400 | 빈칸 | Multichip | 286 | 50 | 3.8 | 128 | 128 | 빈칸 | 빈칸 |
| SPARC64 II | Fujitsu (HAL) | 141–161 | V9 | 1996 | 1×1=1 | 350 | 빈칸 | Multichip | 286 | 64 | 3.3 | 128 | 128 | 빈칸 | 빈칸 |
| SPARC64 III | Fujitsu (HAL) MBCS70301 | 250–330 | V9 | 1998 | 1×1=1 | 240 | 17.6 | 240 | 빈칸 | 빈칸 | 2.5 | 64 | 64 | 8192 | 빈칸 |
| 울트라스팍 IIs (Blackbird) | Sun STP1031 | 250–400 | V9 | 1997 | 1×1=1 | 350 | 5.4 | 149 | 521 | 25[note 4] | 2.5 | 16 | 16 | 1024 or 4096 | 없음 |
| 울트라스팍 IIs (Sapphire-Black) | Sun SME1032 / STP1034 | 360–480 | V9 | 1999 | 1×1=1 | 250 | 5.4 | 126 | 521 | 21[note 5] | 1.9 | 16 | 16 | 1024–8192 | 없음 |
| UltraSPARC IIi (Sabre) | Sun SME1040 | 270–360 | V9 | 1997 | 1×1=1 | 350 | 5.4 | 156 | 587 | 21 | 1.9 | 16 | 16 | 256–2048 | 없음 |
| UltraSPARC IIi (Sapphire-Red) | Sun SME1430 | 333–480 | V9 | 1998 | 1×1=1 | 250 | 5.4 | 빈칸 | 587 | 21[note 6] | 1.9 | 16 | 16 | 2048 | 없음 |
| UltraSPARC IIe (Hummingbird) | Sun SME1701 | 400–500 | V9 | 1999 | 1×1=1 | 180 Al | 빈칸 | 빈칸 | 370 | 13[note 7] | 1.5–1.7 | 16 | 16 | 256 | 없음 |
| UltraSPARC IIi (IIe+) (Phantom) | Sun SME1532 | 550–650 | V9 | 2000 | 1×1=1 | 180 Cu | 빈칸 | 빈칸 | 370 | 17.6 | 1.7 | 16 | 16 | 512 | 없음 |
| SPARC64 GP | Fujitsu SFCB81147 | 400–563 | V9 | 2000 | 1×1=1 | 180 | 30.2 | 217 | 빈칸 | 빈칸 | 1.8 | 128 | 128 | 8192 | 빈칸 |
| SPARC64 GP | -- | 600–810 | V9 | 빈칸 | 1×1=1 | 150 | 30.2 | 빈칸 | 빈칸 | 빈칸 | 1.5 | 128 | 128 | 8192 | 빈칸 |
| SPARC64 IV | Fujitsu MBCS80523 | 450–810 | V9 | 2000 | 1×1=1 | 130 | 빈칸 | 빈칸 | 빈칸 | 빈칸 | 빈칸 | 128 | 128 | 2048 | 빈칸 |
| 울트라스팍 III (Cheetah) | Sun SME1050 | 600 | JPS1 | 2001 | 1×1=1 | 180 Al | 29 | 330 | 1368 | 53 | 1.6 | 64 | 32 | 8192 | 없음 |
| 울트라스팍 III (Cheetah) | Sun SME1052 | 750–900 | JPS1 | 2001 | 1×1=1 | 130 Al | 29 | 빈칸 | 1368 | 빈칸 | 1.6 | 64 | 32 | 8192 | 없음 |
| UltraSPARC III Cu (Cheetah+) | Sun SME1056 | 900–1200 | JPS1 | 2001 | 1×1=1 | 130 Cu | 29 | 232 | 1368 | 50[note 8] | 1.6 | 64 | 32 | 8192 | 없음 |
| 울트라스팍 IIIi (Jalapeño) | Sun SME1603 | 1064–1593 | JPS1 | 2003 | 1×1=1 | 130 | 87.5 | 206 | 959 | 52 | 1.3 | 64 | 32 | 1024 | 없음 |
| SPARC64 V (Zeus) | 후지쯔 | 1100–1350 | JPS1 | 2003 | 1×1=1 | 130 | 190 | 289 | 269 | 40 | 1.2 | 128 | 128 | 2048 | 빈칸 |
| SPARC64 V+ (Olympus-B) | 후지쯔 | 1650–2160 | JPS1 | 2004 | 1×1=1 | 90 | 400 | 297 | 279 | 65 | 1 | 128 | 128 | 4096 | 빈칸 |
| 울트라스팍 IV (Jaguar) | Sun SME1167 | 1050–1350 | JPS2 | 2004 | 1×2=2 | 130 | 66 | 356 | 1368 | 108 | 1.35 | 64 | 32 | 16384 | 없음 |
| 울트라스팍 IV+ (Panther) | Sun SME1167A | 1500–2100 | JPS2 | 2005 | 1×2=2 | 90 | 295 | 336 | 1368 | 90 | 1.1 | 64 | 64 | 2048 | 32768 |
| 울트라스팍 T1 (Niagara) | Sun SME1905 | 1000–1400 | UA2005 | 2005 | 4×8=32 | 90 | 300 | 340 | 1933 | 72 | 1.3 | 8 | 16 | 3072 | 없음 |
| SPARC64 VI (Olympus-C) | 후지쯔 | 2150–2400 | JPS2 | 2007 | 2×2=4 | 90 | 540 | 422 | 빈칸 | 120–150 | 1.1 | 128×2 | 128×2 | 4096–6144 | 없음 |
| 울트라스팍 T2 (Niagara 2) | Sun SME1908A | 1000–1600 | UA2007 | 2007 | 8×8=64 | 65 | 503 | 342 | 1831 | 95 | 1.1–1.5 | 8 | 16 | 4096 | 없음 |
| UltraSPARC T2 Plus (Victoria Falls) | Sun SME1910A | 1200–1600 | UA2007 | 2008 | 8×8=64 | 65 | 503 | 342 | 1831 | 빈칸 | 빈칸 | 8 | 16 | 4096 | 없음 |
| SPARC64 VII (Jupiter)[22] | 후지쯔 | 2400–2880 | JPS2 | 2008 | 2×4=8 | 65 | 600 | 445 | 빈칸 | 150 | 빈칸 | 64×4 | 64×4 | 6144 | 없음 |
| UltraSPARC "RK" (Rock)[23] | Sun SME1832 | 2300 | ? | 취소됨[24] | 2×16=32 | 65 | ? | 396 | 2326 | ? | ? | 32 | 32 | 2048 | ? |
| SPARC64 VIIIfx (Venus)[25][26] | 후지쯔 | 2000 | JPS1 / HPC-ACE | 2009 | 1×8=8 | 45 | 760 | 513 | 1271 | 58 | ? | 32×8 | 32×8 | 6144 | 없음 |
| LEON2FT | Atmel AT697F | 100 | V8 | 2009 | 1×1=1 | 180 | 빈칸 | 빈칸 | 196 | 1 | 1.8/3.3 | 16 | 32 | 빈칸 | none |
| SPARC T3 (Rainbow Falls) | 오라클/썬 | 1650 | UA2007 | 2010 | 8×16=128 | 40[27] | ? | 371 | ? | 139 | ? | 8 | 16 | 6144 | 없음 |
| Galaxy FT-1500 | NUDT (중국) | 1800 | UA2007 | 2013 | 8×16=128 | 40 | ? | ? | ? | 65 | ? | 16×16 | 16×16 | 512×16 | 4096 |
| SPARC64 VII+ (Jupiter-E또는 M3)[28][29] | 후지쯔 | 2667–3000 | JPS2 | 2010 | 2×4=8 | 65 | 빈칸 | 빈칸 | 빈칸 | 160 | 빈칸 | 64×4 | 64×4 | 12288 | 없음 |
| LEON3FT | Cobham Gaisler GR712RC | 100 | V8E | 2011 | 1×2=2 | 180 | 빈칸 | 빈칸 | 빈칸 | 1.5[note 9] | 1.8/3.3 | 4x4Kb | 4x4Kb | 없음 | 없음 |
| R1000 | MCST (러시아) | 1000 | ? | 2011 | 1×4=4 | 90 | 180 | 128 | 빈칸 | 15 | 1, 1.8, 2.5 | 32 | 16 | 2048 | 없음 |
| SPARC T4 (Yosemite Falls)[30] | 오라클 | 2850–3000 | OSA2011 | 2011 | 8×8=64 | 40 | 855 | 403 | ? | 240 | ? | 16×8 | 16×8 | 128×8 | 4096 |
| SPARC64 IXfx[31][32][33] | 후지쯔 | 1850 | JPS1 / HPC-ACE | 2012 | 1x16=16 | 40 | 1870 | 484 | 1442 | 110 | ? | 32×16 | 32×16 | 12288 | 없음 |
| SPARC64 X (Athena)[34] | 후지쯔 | 2800 | OSA2011 / HPC-ACE | 2012 | 2×16=32 | 28 | 2950 | 587.5 | 1500 | 270 | ? | 64×16 | 64×16 | 24576 | 없음 |
| SPARC T5 | 오라클 | 3600 | OSA2011 | 2013 | 8×16=128 | 28 | 1500 | 478 | ? | ? | ? | 16×16 | 16×16 | 128×16 | 8192 |
| SPARC M5[35] | 오라클 | 3600 | OSA2011 | 2013 | 8×6=48 | 28 | 3900 | 511 | ? | ? | ? | 16×6 | 16×6 | 128×6 | 49152 |
| SPARC M6[36] | 오라클 | 3600 | OSA2011 | 2013 | 8×12=96 | 28 | 4270 | 643 | ? | ? | ? | 16×12 | 16×12 | 128×12 | 49152 |
| SPARC64 X+ (Athena+)[37] | 후지쯔 | 3200–3700 | OSA2011 / HPC-ACE | 2014 | 2×16=32 | 28 | 2990 | 600 | 1500 | 392 | ? | 64×16 | 64×16 | 24M | 없음 |
| SPARC64 XIfx[38] | 후지쯔 | 2200 | OSA2011 / HPC-ACE2 | 2014 | 1×(32+2)=34 | 20 | 3750 | ? | 1001 | ? | ? | 64×34 | 64×34 | 12M×2 | 없음 |
| SPARC M7[39][40] | 오라클 | 4133 | OSA2015 | 2015 | 8×32=256 | 20 | >10,000 | ? | ? | ? | ? | 16×32 | 16×32 | 256×24 | 65536 |
| SPARC S7[41][42] | 오라클 | 4270 | OSA2015 | 2016 | 8×8=64 | 20 | ? | ? | ? | ? | ? | 16×8 | 16×8 | 256×2+256×4 | 16384 |
| SPARC64 XII[43] | 후지쯔 | 4250 | OSA2011 / HPC-ACE | 2017 | 8×12=96 | 20 | 5500 | 795 | 1860 | ? | ? | 64×12 | 64×12 | 512×12 | 32768 |
| SPARC M8[44][45] | 오라클 | 5000 | OSA2017 | 2017 | 8×32=256 | 20 | ? | ? | ? | ? | ? | 32×32 | 16×32 | 128×32+256×8 | 65536 |
| LEON4 | Cobham Gaisler GR740 | 250[note 10] | V8E | 2017 | 1×4=4 | 32 | 빈칸 | 빈칸 | 빈칸 | 빈칸 | 1.2/2.5/3.3 | 4x4 | 4x4 | 2048 | 없음 |
| R2000 | MCST (러시아) | 2000 | ? | 2018 | 1×8=8 | 28 | 500 | ? | 빈칸 | ? | ? | ? | ? | ? | 없음 |
| LEON5 | Cobham Gaisler | 빈칸 | V8E | 2019 | ? | ? | 빈칸 | 빈칸 | 빈칸 | 빈칸 | 빈칸 | ? | ? | 16–8192 | 없음 |
| 이름 (코드명) | 모델 | 주파수 (MHz) | 아키텍처 버전 | 연도 | 총 스레드 수[note 1] | 공정 (nm) | 트랜지스터 (백만) | 다이 크기 (mm2) | IO 핀 | 전력 (W) | 전압 (V) | L1 데이터 캐시 (KB) | L1 명령 캐시 (KB) | L2 캐시 (KB) | L3 캐시 (KB) |
비고:
SPARC 장비는 일반적으로 썬의썬OS,솔라리스,자바OS 또는일루모스와오픈인디애나를 포함한 파생 버전인오픈솔라리스를 사용해 왔지만,NeXTSTEP,RTEMS,FreeBSD,OpenBSD,NetBSD,리눅스와 같은 다른운영체제도 사용되었다.
1993년에인터그래프는 SPARC 아키텍처로의윈도우 NT 이식을 발표했으나,[46] 나중에 취소되었다.
2015년 10월, 오라클은 "SPARC용 리눅스 참조 플랫폼"을 발표했다.[47]
SPARC 아키텍처의 여러 완전한오픈 소스 하드웨어 구현이 존재한다:
SPARC 아키텍처를 위한 완전한오픈 소스 소프트웨어 시뮬레이터도 존재한다:
HPC 부하를 위해 후지쯔는 HPC-ACE (High Performance Computing – Arithmetic Computational Extensions)라는 새로운 명령어 확장 세트를 갖춘 전문SPARC64 fx 프로세서를 구축한다.
후지쯔의K 컴퓨터는 2011년 6월과 11월TOP500 목록에서1위를 차지했다. 이는 각각 8개의 코어를 가진 88,128개의 SPARC64VIIIfx CPU를 결합하여 총 705,024개의 코어를 갖추었는데, 이는 당시 TOP500의 다른 어떤 시스템보다 거의 두 배나 많은 수치였다. K 컴퓨터는 목록의 다음 5개 시스템을 합친 것보다 더 강력했으며, 모든 슈퍼컴퓨터 시스템 중 가장 높은 전력 대비 성능비를 기록했다.[48] 또한 2011년 6월그린500 목록에서 824.56 MFLOPS/W의 점수로6위에 올랐다.[49] 2012년 11월 TOP500 발표에서 K 컴퓨터는 상위 3개 중 가장 많은 전력을 사용하며3위를 기록했다.[50] 해당 시기그린500 발표에서는85위를 차지했다.[51] 최신 HPC 프로세서인IXfx 및XIfx는 최근의PRIMEHPC FX10 및 FX100 슈퍼컴퓨터에 포함되었다.
Tianhe-2 (2014년 11월 기준TOP5001위[52])는 중국에서 개발된Galaxy FT-1500오픈스팍 기반 프로세서를 탑재한 다수의 노드를 보유하고 있다. 그러나 이 프로세서들은LINPACK 점수에는 기여하지 않았다.[53][54]
There are four situations, however, when the hardware will not successfully complete a floating-point instruction: ... The instruction is not implemented by the hardware (such as ... quad-precision instructions on any SPARC FPU).