summaryrefslogtreecommitdiff
path: root/content/projects/archs.md
blob: 2d3c0a72b286b452af133eff9c4e387bb8156807 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
+++
title = "Processors main architecture instruction set"
date = 2026-01-06
+++

---

A brief and non-exhaustive compilation of common processors' [ISA](https://en.wikipedia.org/wiki/Instruction_set_architecture);
most of them are [RISC](https://en.wikipedia.org/wiki/Reduced_instruction_set_computer)-based except for the older ones which are more [CISC](https://en.wikipedia.org/wiki/Complex_instruction_set_computer)-based.

This collection is mostly base on the GNU/Linux architectures' support (see [kernel arch](https://github.com/torvalds/linux/tree/master/arch)), with an additional AVR mention (just not enough juiced for a full OS).

## TOC

- [alpha](#alpha-dec-digital-equipment-corporation)
- [arc](#arc-arc-international-argonaut-risc-core)
- [arm and arm64](#arm-and-arm64-arm-advanced-risc-machine-prev-acorn-risc-machine)
- [avr](#avr-atmel)
- [csky](#csky-c-sky)
- [hexagon](#hexagon-qualcomm)
- [loongarch](#loongarch-loongson-technology)
- [m68k](#m68k-motorola)
- [microblaze](#microblaze-xilinx)
- [mips](#mips-mips-technologies-microprocessor-without-interlocked-pipelined-stages)
- [nios2](#nios2-altera)
- [openrisc](#openrisc-open-source)
- [parisc](#parisc-hewlett-packard-hp)
- [powerpc](#powerpc-ibm-international-business-machines)
- [riscv](#riscv-open-source-berkeley)
- [s390](#s390-ibm-international-business-machines)
- [sh](#sh-hitachi)
- [sparc](#sparc-sun-microsystems)
- [x86](#x86-intel-amd)
- [xtensa](#xtensa-espressif-systems)
- [`C` detection function example](#c-detection-function-example)

## alpha - DEC (Digital Equipment Corporation)

Initially Alpha AXP - RISC - 64 bit.
[Wiki link.](https://en.wikipedia.org/wiki/DEC_Alpha)

- EV4: DEC 21064
- LCA4: DEC 21066 and 21068
- EV5: DEC 21164
- PCA5: DEC 21164
- EV6: DEC 21264
- EV7: DEC 21364

## arc - ARC International (Argonaut RISC Core)

RISC - 32 and 64 bit.
[Wiki link.](<https://en.wikipedia.org/wiki/ARC_(processor)>)

## arm and arm64 - ARM (Advanced RISC Machine; prev. Acorn RISC Machine)

RISC - 32 and 64 bit.
[Wiki link.](https://en.wikipedia.org/wiki/ARM_architecture_family)

### Naming conventions

- 64 bit -> aarch64 (ARM arch 64-bit) or arm64; introduced with ARMv8-A
- 32 bit -> arm, aarch32 or armeabi; ARM default architecture
- A specification: Application architecture
- M specification: Microcontroller architecture
- R specification: Real-time architecture

### Architectures - All RISC

- ARMv1 - 32 bit:
  - ARM1
- ARMv2 - 32 bit:
  - ARM2 and ARM3
  - OpenCores Amber
- ARMv3 - 32 bit:
  - ARM6 and ARM7
- ARMv4 - 32 bit:
  - ARM8
  - DEC StrongARM
- ARMv4T - 32 bit:
  - ARM7TDMI and ARM9TDMI
- ARMv5TE - 32 bit:
  - ARM7EJ, ARM9E and ARM10E
  - Intel XScale
- ARMv6 - 32 bit:
  - ARM11
- ARMv6-M - 32 bit:
  - ARM Cortex M0, M0+ and M1
- ARMv7-M - 32 bit:
  - ARM Cortex M3
  - Apple M7
- ARMv7E-M - 32 bit:
  - ARM Cortex M4 and M7
- ARMv8-M - 32 bit:
  - ARM Cortex M23 and M33
- ARMv8.1-M - 32 bit:
  - ARM Cortex M55 and M85
- ARMv7-R - 32 bit:
  - ARM Cortex R4, R5, R7 and R8
- ARMv8-R - 32 and 64 bit:
  - ARM Cortex R52 (aarch32)
  - ARM Cortex R82 (aarch64)
- ARMv7-A - 32 bit:
  - ARM Cortex A5, A7, A8, A9, A12, A15 and A17
  - Qualcomm Scorpion
  - Apple Swift (A6)
- ARMv8-A - 32 and 64 bit:
  - ARM Cortex A32 (aarch32)
  - ARM Cortex A35, A53, A57, A72 and A73 (both aarch32 and aarch64)
  - ARM Cortex A34 (aarch64)
  - Nvidia Denver (both aarch)
  - AMD K12 (both aarch)
  - Apple Cyclone A7, Typhoon A8, Twister A9 and Hurricane/Zephyr A10 (both aarch)
  - Samsung M1, M2 and M3 (both aarch)
- ARMv8.2-A - 32 and 64 bit:
  - ARM Cortex A55, A75, A76, A77, A78 and X1 (both aarch32 and aarch64)
  - ARM Cortex A65 (aarch64)
  - Nvidia Carmel (both aarch)
  - Samsung M4 (both aarch)
  - Apple Monsoon/Mistral A11 (aarch64)
- ARMv8.4-A - 64 bit:
  - ARM Neoverse V1
  - Apple Lightning/Thunder A13 and FireStorm/Icestrom A14/M1
- ARMv8.6-A - 64 bit:
  - Apple Avalanche/Blizzard A15/M2 and Everest/Sawtooth A16/A17
- ARMv9.0-A - 64 bit:
  - ARM Cortex A510, A710, A715, X2 and X3
  - ARM Neoverse E2, N2 and V2
- ARMv9.2-A - 64 bit:
  - ARM Cortex A520, A720 and X4
  - ARM Neoverse V3
  - Apple A18/M4

## avr - Atmel

RISC - 8 or 32 bit.
[Wiki link.](https://en.wikipedia.org/wiki/AVR_microcontrollers)

- tinyAVR - 8 bit:
  - Atmel ATtiny
- megaAVR - 8 bit:
  - Atmel ATmega
- AVR Dx - 8 bit:
  - Atmel AVR DA
  - Atmel AVR DB
  - Atmel AVR DD
  - Atmel AVR EA
- XMEGA - 8 bit:
  - Atmel ATxmega
- 32 bit AVRs:
  - Atmel AVR32

## csky - C-SKY

Chinese CPU ISA designed for embedded Linux with a [Buildroot](https://buildroot.org) support.
[Github link.](https://github.com/c-sky)

## hexagon - Qualcomm

Known as QDSP6 (Qualcomm Digital Signal Processing, 6th gen.) - VLIW - 32 and 64 bit.
[Wiki link.](https://en.wikipedia.org/wiki/Qualcomm_Hexagon)

- QDSP6 V1
- QDSP6 V2
- QDSP6 V3, 1st and 2nd gen.
- QDSP6 V4:
  - Qualcomm Snapdragon 600
- QDSP6 V5:
  - Qualcomm Snapdragon 410/412/800/801
- QSP6 V6:
  - Qualcomm Snapdragon 820/821/636/660
- QDSP6 V7:
  - Qualcomm Snapdragon 778G/778G+/780G/782G/888/888+

## loongarch - Loongson Technology

RISC - 32 and 64 bit.
[Doc. link.](https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html)

- LA32 - 32 bit
- LA64 - 64 bit

## m68k - Motorola

Known as the Motorola 68000 series, 680x0, m68000 or 68k - CISC - 32 bit.
[Wiki link.](https://en.wikipedia.org/wiki/Motorola_68000_series)

- Gen. 1 - 16 or 32 bit:
  - Motorola 68000 and 68010
- Gen. 2 - 32 bit:
  - Motorola 68010 and 68020
- Gen. 3 - 32 bit:
  - Motorola 68040
- Gen. 4 - 32 bit:
  - Motorola 68060

## microblaze - Xilinx

Designed for the PS part of FPGA chips (AXI support) - RISC - 32 or 64 bit.
[Wiki link.](https://en.wikipedia.org/wiki/MicroBlaze)

## mips - MIPS Technologies (Microprocessor without Interlocked Pipelined Stages)

RISC - 32 or 64 bit.

- MIPS I - 32 bit
- MIPS II - 32 bit
- MIPS III - 64 bit
- MIPS IV - 64 bit
- MIPS V - 64 bit
- MIPS32/MIPS64 - 32 or 64 bit
- microMIPS - 16 or 32 bit

## nios2 - Altera

Designed for the PS part of FPGA chips (Avalon support) - RISC - 32 bit.

- NiosII/f
- NiosII/s
- NiosII/e

## openrisc - open-source

Currently one version: OR1k - RISC - 32 or 64 bit.
[Wiki link.](https://en.wikipedia.org/wiki/OpenRISC)

## parisc - Hewlett-Packard (HP)

Known as PA-RISC (Precision Architecture RISC), HP/PA or HPPA (Hewlett Packard Precision Architecture) - RISC - 32 or 64 bit.

- TS, CS and NS series
- PCX series
- Mako
- Shortfin

## powerpc - IBM (International Business Machines)

Derived from Power ISA, known as the IBM RS64 family - RISC - 64 bit.

- RS64 or A35
  - IBM Apache
- RS64-II or A50
  - IBM Northstar
- RS64-III
  - IBM Pulsar and later IStar
- RS64-IV
  - IBM Sstar

## riscv - open-source (Berkeley)

Not yet implemented in real hardware - RISC - 32, 64 or 128 bit.
[Wiki link.](https://en.wikipedia.org/wiki/RISC-V)

## s390 - IBM (International Business Machines)

Known as the IBM System/390 family, 5th gen. of the System/360 ISA - CISC - 32 bit.
[Wiki link.](https://en.wikipedia.org/wiki/IBM_System/390)

## sh - Hitachi

Known as SuperH or SH - RISC - 32 bit.
[Wiki link.](https://en.wikipedia.org/wiki/SuperH)

- SH-1 -2 -3
- SH-4 - co-designed with STMicroelectronics

## sparc - Sun Microsystems

SPARC (Scalable Processor ARChitecture) - RISC - 64 bit.
[Wiki link.](https://en.wikipedia.org/wiki/SPARC)

## x86 - Intel, AMD

Known as 80x86, 8086, IA (Intel Architecture) or x86abi family.

- x86-16 - 16 bit CISC:
  - Intel 8086
  - Intel 8088
- IA-32 - 32 bit RISC/APIC -> known as x86, x86_32, win32, ix86 or i386:
  - Intel Pentium
  - Cyrix Cx5x86
  - Intel Celeron
  - AMD K6
- IA-64 - 64 bit EPIC:
  - Intel Itanium
- x86-64 - 64 bit RISC → extension of IA-32; known as x86_64, x64, AMD64 or Intel64; most common arch in modern PCs:
  - Intel Atom
  - Intel Core series
  - Intel Xeon
  - AMD Ryzen series
  - AMD APU series
  - Zhaoxin WuDaoKou

## xtensa - Espressif Systems

Known for the ESP32 series (XTensa LX6) - post-RISC - 32 bit.
[Doc. link](https://github.com/espressif/xtensa-isa-doc)

## `C` detection function example

```C
/* Get current architecture, detects nearly every architecture. */
const char *getBuild(void)
{
#if defined(__x86_64__) || defined(_M_X64)
        return "x86_64";
#elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
        return "x86_32";
#elif defined(__ARM_ARCH_2__)
        return "ARMv2";
#elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__)
        return "ARMv3";
#elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T)
        return "ARMv4T";
#elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5E__)
        return "ARMv5"
#elif defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6T2__)
        return "ARMv6T2";
#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
        return "ARMv6";
#elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARMv7";
#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARMv7A";
#elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARMv7R";
#elif defined(__ARM_ARCH_7M__)
        return "ARMv7M";
#elif defined(__ARM_ARCH_7S__)
        return "ARMv7S";
#elif defined(__aarch64__) || defined(_M_ARM64)
        return "ARM64";
#elif defined(mips) || defined(__mips__) || defined(__mips)
        return "MIPS";
#elif defined(__sh__)
        return "SUPERH";
#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
        return "POWERPC";
#elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64)
        return "POWERPC64";
#elif defined(__sparc__) || defined(__sparc)
        return "SPARC";
#elif defined(__m68k__)
        return "M68K";
#elif defined(__riscv) || defined(__riscv32) || defined(__riscv_) || defined(_riscv)
        return "RISCV"
#else
        return "UNKNOWN";
#endif
}
```