Est. 1986 Advanced

Assembler (PA-RISC)

The assembly language of Hewlett-Packard's Precision Architecture — a load/store RISC instruction set with comma-suffixed completers standing in for a whole PDP-11-style modifier vocabulary, born as project Spectrum and shipped as the CPU behind two decades of HP 9000 and HP 3000 iron.

Created by Hewlett-Packard (the internal 'Spectrum' program at HP Laboratories); credited architects include Allen Baum, Michael J. Mahon, Ruby Bei-Loh Lee, Russel Kao, Steve Muchnick, Terrence C. Miller, David Fotland and William S. Worley

Paradigm Assembly, Imperative, Low-level, Load/store RISC
Typing None (untyped); load and store mnemonics encode operand size and signedness, as in LDW, LDH, LDB and their unsigned forms
First Appeared 1986
Latest Version No versioned language standard. The architecture itself progressed through PA-RISC 1.0 (1986), 1.1 (1991, with 1.1a-1.1e steppings through 1996) and the 64-bit PA-RISC 2.0 (1996). HP stopped selling new PA-RISC-based HP 9000 systems at the end of 2008 and ended standard support for PA-RISC servers in 2013; GCC 13 (2023) dropped its 32-bit hppa-hpux10/11 targets, but the hppa-linux target and GNU binutils and the Linux kernel's parisc port continue to be maintained

PA-RISC assembly is the machine language of Hewlett-Packard’s Precision Architecture, the load/store RISC design that carried HP’s Unix workstations and servers, and its older MPE-based business systems, from 1986 into the mid-2000s. It began life inside HP Laboratories under the codename Spectrum, and its instruction set shows the fingerprints of that origin: a clean, regular RISC core with a distinctive syntax feature — the comma-suffixed completer — that does the work PDP-11-descended assemblers spread across separate opcode variants and addressing modes.

History and Origins

Spectrum

By the early 1980s HP’s product lines were split across several incompatible instruction sets — stack-based systems for the HP 3000 business line, and various designs across its technical and scientific workstations. The Spectrum program, begun at HP Labs in Palo Alto around 1982, set out to replace all of them with a single scalable architecture, with design goals HP later summarized as leadership in price/performance, a migration path for existing customers, and one unified instruction set across the product range. A TTL implementation effort began in April 1983, simulation and refinement continued through the year, and the finished processor design was handed to HP’s software developers in July 1984.

Announcement and first machines

HP Precision Architecture — the name PA-RISC came into wide use somewhat later, once “RISC” had become the industry’s preferred label — was announced on 26 February 1986. Two systems launched with it simultaneously: the HP 3000 Series 930, extending HP’s older MPE business-computing line onto the new architecture, and the HP 9000 Model 840, the first PA-RISC Unix machine. Both used the same first-generation hardware implementation, code-named TS-1: a discrete design built from 74F-series TTL logic spread across several circuit boards (accounts vary between five and six), reflecting how new the technology still was. The HP 9000 Model 840 reportedly began shipping to customers around November 1986. The first confirmed single-chip CMOS implementation, PCX (also known internally as CMOS26B), followed in 1990 — the first PA-RISC processor small enough to fit on one die.

The Language

Registers

PA-RISC 1.0 and 1.1 define thirty-two 32-bit general registers, GR0 through GR31 (GR0 is hardwired to zero), with several given architectural roles by the calling convention rather than by the hardware itself:

RegisterAliasRole
GR1Hardwired addend for the ADDIL instruction; also the millicode return pointer by convention
GR2rpReturn pointer — where BLE and BL leave the return address
GR19–GR22arg7–arg4Argument registers in the 64-bit calling convention; caller-saved
GR23–GR26arg3–arg0Argument registers, passed in descending register number
GR27dpData pointer, used for short-displacement addressing of global data
GR28–GR29ret0, ret1Return value registers; ret1 carries the second word of a small returned structure
GR30spStack pointer
GR31Millicode return pointer; also where BLE stores the pre-branch program counter
GR3–GR18General purpose, callee-saved

PA-RISC 1.0 also defines sixteen 64-bit floating-point registers; PA-RISC 1.1 doubles that to thirty-two, and the same physical registers can be addressed as sixty-four 32-bit halves or sixteen 128-bit quad registers. PA-RISC 2.0 widens the general registers themselves to 64 bits. Seven of the general registers — GR1, GR8, GR9, GR16, GR17, GR24 and GR25 — are also designated shadow registers, which exist purely to speed interrupt handling by letting the processor save their values without an explicit store. These are distinct from the eight space registers (SR0–SR7), which hold address-space identifiers rather than shadowed general-register state — a naming collision (“SR” for both) that is easy to conflate.

Completers: the architecture’s signature idiom

Rather than give load, store, arithmetic and branch instructions separate mnemonics for each variant, PA-RISC attaches a comma-separated completer to the base mnemonic. A handful of examples:

FormMeaning
LDW,MALoad word, then modify the base register after computing the address (post-increment)
STW,MBStore word, modifying the base register before the store (pre-increment)
ADD,CAdd with carry-in from a previous add
ADD,DCAdd and propagate an accumulated carry across a multi-word sequence
COMB,<>,NCompare and branch on a given condition, nullifying the following instruction

The ,N completer that appears on branches is tied to PA-RISC’s nullification mechanism: almost any instruction can conditionally suppress (“nullify”) the effect of the instruction that follows it, which is how the architecture gets branch-delay-slot behavior and conditional execution without a separate predicate-register facility. A taken branch with ,N set nullifies its own delay-slot instruction instead of executing it — the opposite of the usual MIPS/SPARC convention where the delay slot always executes.

Addressing and pseudo-operations

Memory operands are written displacement(base), and the assembler recognizes common shorthand forms as pseudo-operations that expand to a real instruction: COPY r1,r2 assembles to OR r1,0,r2, and LDI value,r assembles to LDO value(0),r. Unlike CISC addressing, PA-RISC has no scaled-index mode that multiplies an index register by an operand’s size — array indexing has to compute the byte offset explicitly, which is a direct consequence of keeping every instruction a single, fixed 32-bit word.

Instruction set size

PA-RISC 1.0 defines about 140 instructions; PA-RISC 1.1 grows that to roughly 190, mostly through expanded floating-point and multimedia operations. That is more than many contemporary RISC designs, a consequence of PA-RISC’s compiler-target philosophy: HP’s design notes describe the set as tuned so that simple, frequently used operations execute in a single cycle, while a smaller number of multi-cycle instructions exist specifically to support languages such as COBOL and FORTRAN that the HP 3000 and HP 9000 lines needed to keep running.

Code Example

A minimal HP-UX procedure

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
        .code
        .export main,entry
main
        .proc
        .callinfo frame=64,calls,save_rp
        .entry
        stw     rp,-20(sp)      ; save return pointer into the caller's frame
        ldo     64(sp),sp       ; extend the stack frame

        ldi     42,ret0         ; ret0 (gr28) := 42

        ldw     -84(sp),rp      ; restore return pointer
        bv,n    r0(rp)          ; branch to return address, nullifying the delay slot
        .exit
        .procend

The ,MA/,MB completers mean the same effect can often be reached without a separate LDO adjusting the stack pointer — STW,MA rp,64(sp) both stores and advances the frame in one instruction, which is the pattern real HP-UX-generated prologues use.

Evolution

The architecture moved from TTL boards (TS-1, 1986) to single-chip CMOS (PCX, 1990), then through a long run of PA-7000-series 32-bit implementations: PA-7000 (1991, the first PA-RISC 1.1 part), PA-7100, the multimedia-capable PA-7100LC, which introduced HP’s first MAX SIMD extension in January 1994, and the superscalar PA-7200, which shipped in early 1995. PA-RISC 2.0, announced with the PA-8000 in January 1996, doubled the architecture to 64 bits, added out-of-order execution and a wider MAX-2 extension, and carried the line through the PA-8200, PA-8500, PA-8600, PA-8700 and finally the dual-core PA-8800 and PA-8900 of the mid-2000s. Through most of that run PA-RISC leaned on large on-chip level-one caches rather than off-chip level-two cache — only the low-cost PA-7100LC and PA-7300LC parts added one.

By the late 1990s HP had already committed the architecture’s future to Itanium, the 64-bit design jointly developed with Intel as PA-RISC’s successor. HP stopped selling new PA-RISC-based HP 9000 systems at the end of 2008 and closed out standard server support in 2013.

Current Relevance

PA-RISC production hardware is gone, but the toolchain around the assembly language has not fully followed it:

  • GNU binutils still assembles and links hppa object code, and the Linux kernel’s parisc port is actively maintained upstream, still building against current kernel releases.
  • GCC dropped its 32-bit hppa*-hpux10/hppa*-hpux11 targets in GCC 13 (2023); the hppa-linux target and the 64-bit hppa64-hp-hpux11 configuration continue to be supported.
  • Debian’s hppa port shipped as an officially supported architecture from woody (2002) through squeeze, then moved to the community-run Debian Ports project after being dropped as a release architecture following the squeeze (2011) cycle; Debian Ports has kept it building.
  • Emulation and documentation. HP’s own PA-RISC 1.1 Architecture and Instruction Set Reference Manual and related documents remain in wide circulation, and sites such as OpenPA.net catalog the processor family and surviving systems in detail for a platform that otherwise survives mainly in private collections.

Why It Matters

PA-RISC’s real legacy is less any one clever instruction than the discipline behind the whole design: keep the instruction set an easy compiler target, keep most operations single-cycle, and push complexity into a small, well-defined set of completers and pseudo-operations rather than into a sprawling opcode space. That approach let one architecture span HP’s MPE business systems and its HP-UX technical workstations and servers for over two decades, scale from six-board TTL implementations to dual-core 64-bit chips, and carry compiler-generated code from COBOL and FORTRAN through to C and Fortran-90 with barely a change in the underlying instruction set’s shape. It was also, in the end, a design HP judged not worth carrying forward on its own: the joint HP/Intel decision to build Itanium as PA-RISC’s successor set the architecture’s ceiling years before the last PA-8900-based server shipped, which is why PA-RISC is remembered today as a well-engineered RISC family that ran out of runway rather than one that failed on its own terms.

Timeline

1982
Work begins at HP Laboratories in Palo Alto on the Precision Architecture, under the internal codename Spectrum, with the stated goals of leadership in price/performance, a migration path from HP's existing product lines, and a single scalable architecture across them
1984
The final processor design is delivered to HP's software developers in July, after simulation work through 1983 and a TTL implementation effort that had started in April 1983
1986
The architecture is announced on 26 February as HP Precision Architecture (later PA-RISC), launched with the HP 3000 Series 930 and HP 9000 Model 840. Both use the first hardware implementation, code-named TS-1, built from 74F-series TTL logic spread across several circuit boards (accounts vary between five and six); the HP 9000 Model 840 reportedly begins shipping around November
1990
PCX (also known by the internal name CMOS26B) ships as the first confirmed single-chip CMOS PA-RISC implementation, bringing the architecture from board-level TTL onto a single die
1991
PA-7000 ships, the first processor built to the PA-RISC 1.1 revision (stepping 1.1a) of the architecture, running at up to 66 MHz
1994
PA-7100LC ships in January, introducing MAX-1, HP's first Multimedia Acceleration eXtensions — packed-integer parallel add, subtract and shift instructions occupying well under 1% of the die
1995
The superscalar PA-7200 ships in early 1995
1996
PA-8000 ships in January as the first implementation of PA-RISC 2.0, extending the architecture to 64 bits and adding the 64-bit MAX-2 multimedia extension and out-of-order execution
1998
The Puffin Group begins an independent effort in October to port Linux to PA-RISC hardware, gaining HP's cooperation and documentation the following year; the port first boots on 25 June 1999
2002
Debian's hppa port is first included as an officially supported architecture, in the woody (3.0) release
2008
HP stops selling new PA-RISC-based HP 9000 systems at the end of the year, having already committed the platform's future to the jointly developed Itanium (IA-64) architecture
2013
HP's standard support for PA-RISC-based servers ends, closing out roughly 27 years of the architecture in production hardware

Notable Uses & Legacy

HP 9000 workstations and servers

PA-RISC was the CPU of HP's HP-UX-based HP 9000 line from the 1986 Model 840 through the PA-8900-based rp-series and Superdome servers of the mid-2000s, running everything from engineering workstations to HP's flagship enterprise servers before the platform's Itanium transition.

HP 3000 business systems

The HP 3000 Series 930, launched alongside the HP 9000 Model 840 in 1986, moved HP's MPE-based business-computing line onto PA-RISC (as MPE/XL, later MPE/iX), running commercial COBOL and IMAGE database workloads.

Convex Exemplar parallel supercomputers

Convex Computer, acquired by HP in 1995, built its Exemplar SPP1000/1200/1600 and later SPP2000 parallel systems on PA-7100, PA-7200 and PA-8000 processors, scaling to well over a hundred PA-RISC CPUs in a single machine.

Stratus Continuum fault-tolerant servers

Stratus Technologies' Continuum line of high-availability, fault-tolerant servers, sold through the 1990s and into the 2000s, was built on PA-RISC processors up through the PA-8000-based Continuum 628 and 1228 models.

NeXTSTEP 3.3 for PA-RISC

NeXT ported NeXTSTEP 3.3 (released 1995) to a handful of HP 9000 Series 700 workstations (712, 715, 725, 735 and 755), developed primarily on the 712 'pizzabox' machine; third-party uptake was limited and the port did not continue past 3.3.

PA-RISC Linux and the Debian hppa port

An independent community port (begun by the Puffin Group in 1998, first booting in June 1999) brought Linux to PA-RISC hardware; the parisc port merged into the mainline kernel and Debian carried hppa as an officially supported architecture from woody (2002) until it moved to the Debian Ports project after the squeeze (2011) release.

Language Influence

Running Today

Run examples using the official Docker image:

docker pull
Last updated: