From WikiChip
Difference between revisions of "arm/26-bit architectures"
< arm

(Created page with "{{arm title|26-bit architectures}} '''ARM 26-bit architectures''' refers to a number of early ARM ISA versions and microarchitectures that implement them that only imp...")
 
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{arm title|26-bit architectures}}
+
{{arm title|26-bit architectures}}{{arm isa main}}
'''ARM 26-bit architectures''' refers to a number of early [[ARM]] ISA versions and [[microarchitectures]] that implement them that only implement a 26-bit address space. Those architectures have been long obsolete and are no longer supported or implemented. 26-bit ARM ISAs are known as {{arm|ARMv1}}, {{arm|ARMv2}}, and {{arm|ARMv2a}} along with the corresponding microarchitectures {{armh|ARM1}}, {{armh|ARM2}}, {{armh|ARM3}}, and the {{armh|ARM250}}.
+
'''ARM 26-bit architectures''' refers to a number of early [[ARM]] ISA versions and [[microarchitectures|implementations]] that only implement a 26-bit address space. Those architectures have been long obsolete and are no longer supported or implemented.
 +
 
 +
== Overview ==
 +
In the first few versions of [[ARM]], the [[Program Counter]] was 24 bits allowing for a 26-bit address space of up to 64 MiB of memory. The other bits were used for the {{arm|Processor Status Register}}. With the introduction of the {{arm|ARMv3}}, the ISA moved to a full 32-bit address space. ARMv3 consequently introduced a compatibility mode to support the older architectures (except for {{arm|ARMv3G}}). With the introduction of {{arm|ARMv4}}, the mode became optional on all non-T variants. {{arm|ARMv5}} dropped 26-bit compatibility entirely.
 +
 
 +
=== Major Differences ===
 +
The most major difference is in the [[Program Counter]] which only implements a 24-bit program counter in {{arm|R15}}. This allows for an address space of only up to 64 MiB (note that all instructions are {{arm|Word}}-aligned, therefore the two low bits are always zero; <code>2<sup>24</sup> << 2</code>). Any memory access attempt beyond the <math>2^{26}-1</math> byte will raise a memory access exception. On the {{arm|32-bit architectures}}, the program counter was extended to 30 bits, allowing the full 4 GiB address space to be accessible. Because addresses are only 26 bits there were no restrictions on {{arm|branches}} wrapping around either past ''0x3FFFFFF'' or backwards past 0x0000000. This would lead to 26-bit architectures having different target address than they would on a 32-bit ARM architecture. Consequently, <code>B</code> and <code>BL</code> signed 24-bit offsets can branch to any address.
 +
 
 +
The 26-bit architectures do not have a {{arm|CPSR}} or any {{arm|SPSR}}s. and only the four original modes are supported: <code>User</code>, <code>FIQ</code>, <code>IRQ</code>, and <code>Supervisor</code>. The remaining bits in the program counter are used for the condition flags (N, Z, C, and V), interrupt disable flags (I and F), and the two processor mode bits (M1 and M0). This had the effect of being able to save the process status across subroutine calls and without adding any additional instructions or overhead (e.g. special entry and exit sequence).
 +
 
 +
:<table style="text-align: center;"><tr><td>31</td><td>30</td><td>29</td><td>28</td><td>27</td><td>26</td><td>25</td><td colspan="22">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>2</td><td>1</td><td>0</td></tr><tr><td style="border: 1px solid black;">N</td><td style="border: 1px solid black;">Z</td><td style="border: 1px solid black;">C</td><td style="border: 1px solid black;">V</td><td style="border: 1px solid black;">I</td><td style="border: 1px solid black;">F</td><td style="border: 1px solid black;" colspan="24">Program Counter</td><td style="border: 1px solid black;">M1</td><td style="border: 1px solid black;">M0</td></tr></table>
 +
 
 +
* R15[25:2] = ''Program Counter'' (PC)
 +
* R15[31:26], R15[1:0] = ''Program Status Register'' (PSR)
 +
 
 +
== 26-bit ARM Architectures and implementations ==
 +
* 26-bit ARM ISAs are known as {{arm|ARMv1}}, {{arm|ARMv2}}, and {{arm|ARMv2a}}  
 +
* Implementations: {{acorn|ARM1|l=arch}}, {{acorn|ARM2|l=arch}}, {{acorn|ARM3|l=arch}}, and the {{armh|ARM250}}.
 +
 
 +
== Compatibility Mode ==
 +
{{empty section}}

Latest revision as of 08:13, 18 February 2021

v · d · e
ARM ISA
General
Variants
Extensions
Topics
Versions(all)

ARM 26-bit architectures refers to a number of early ARM ISA versions and implementations that only implement a 26-bit address space. Those architectures have been long obsolete and are no longer supported or implemented.

Overview[edit]

In the first few versions of ARM, the Program Counter was 24 bits allowing for a 26-bit address space of up to 64 MiB of memory. The other bits were used for the Processor Status Register. With the introduction of the ARMv3, the ISA moved to a full 32-bit address space. ARMv3 consequently introduced a compatibility mode to support the older architectures (except for ARMv3G). With the introduction of ARMv4, the mode became optional on all non-T variants. ARMv5 dropped 26-bit compatibility entirely.

Major Differences[edit]

The most major difference is in the Program Counter which only implements a 24-bit program counter in R15. This allows for an address space of only up to 64 MiB (note that all instructions are Word-aligned, therefore the two low bits are always zero; 224 << 2). Any memory access attempt beyond the Equation 2 Superscript 26 Baseline minus 1 byte will raise a memory access exception. On the 32-bit architectures, the program counter was extended to 30 bits, allowing the full 4 GiB address space to be accessible. Because addresses are only 26 bits there were no restrictions on branches wrapping around either past 0x3FFFFFF or backwards past 0x0000000. This would lead to 26-bit architectures having different target address than they would on a 32-bit ARM architecture. Consequently, B and BL signed 24-bit offsets can branch to any address.

The 26-bit architectures do not have a CPSR or any SPSRs. and only the four original modes are supported: User, FIQ, IRQ, and Supervisor. The remaining bits in the program counter are used for the condition flags (N, Z, C, and V), interrupt disable flags (I and F), and the two processor mode bits (M1 and M0). This had the effect of being able to save the process status across subroutine calls and without adding any additional instructions or overhead (e.g. special entry and exit sequence).

31302928272625     210
NZCVIFProgram CounterM1M0
  • R15[25:2] = Program Counter (PC)
  • R15[31:26], R15[1:0] = Program Status Register (PSR)

26-bit ARM Architectures and implementations[edit]

Compatibility Mode[edit]

New text document.svg This section is empty; you can help add the missing info by editing this page.