ARMv8 Instruction Set Overview
ARMv8 Instruction Set Overview
Architecture Group
Document number:
Date of Issue:
PRD03-GENC-010197 15.0
11 November 2011
© Copyright ARM Limited 2009-2011. All rights reserved.
Abstract
This document provides a high-level overview of the ARMv8 instructions sets, being mainly the new A64
instruction set used in AArch64 state but also those new instructions added to the A32 and T32 instruction sets
since ARMv7-A for use in AArch32 state. For A64 this document specifies the preferred architectural assembly
language notation to represent the new instruction set.
Keywords
AArch64, A64, AArch32, A32, T32, ARMv8
PRD03-GENC-010197
Copyright © 2009-2011 ARM Limited. All rights reserved.
Page 1 of 112
ARMv8 Instruction Set Overview
Proprietary Notice
This specification is protected by copyright and the practice or implementation of the information herein may be
protected by one or more patents or pending applications. No part of this specification may be reproduced in any
form by any means without the express prior written permission of ARM.
No license, express or implied, by
estoppel or otherwise to any intellectual property rights is granted by this specification.
Your access to the information in this specification is conditional upon your acceptance that you will not use or
permit others to use the information for the purposes of determining whether implementations of the ARM
architecture infringe any third party patents.
This specification is provided “as is”. ARM makes no representations or warranties, either express or implied,
included but not limited to, warranties of merchantability, fitness for a particular purpose, or non-infringement, that
the content of this specification is suitable for any particular purpose or that any practice or implementation of the
contents of the specification will not infringe any third party patents, copyrights, trade secrets, or other rights.
This specification may include technical inaccuracies or typographical errors.
To the extent not prohibited by law, in no event will ARM be liable for any damages, including without limitation
any direct loss, lost revenue, lost profits or data, special, indirect, consequential, incidental or punitive damages,
however caused and regardless of the theory of liability, arising out of or related to any furnishing, practicing,
modifying or any use of this specification, even if ARM has been advised of the possibility of such damages.
Words and logos marked with ® or TM are registered trademarks or trademarks of ARM Limited, except as
otherwise stated below in this proprietary notice. Other brands and names mentioned herein may be the
trademarks of their respective owners.
Copyright © 2009-2011 ARM Limited
110 Fulbourn Road, Cambridge, England CB1 9NJ
Restricted Rights Legend: Use, duplication or disclosure by the United States Government is subject to the
restrictions set forth in DFARS 252.227-7013 (c)(1)(ii) and FAR 52.227-19.
This document is Non-Confidential but any disclosure by you is subject to you providing notice to and the
acceptance by the recipient of, the conditions set out above.
In this document, where the term ARM is used to refer to the company it means “ARM or any of its subsidiaries as
appropriate”.
PRD03-GENC-010197
Copyright © 2009-2011 ARM Limited. All rights reserved.
Page 2 of 112
ARMv8 Instruction Set Overview
Contents
1
ABOUT THIS DOCUMENT
Change control
Current status and anticipated changes
Change history
References
Terms and abbreviations
INTRODUCTION
A64 OVERVIEW
Distinguishing 32-bit and 64-bit Instructions
Conditional Instructions
Addressing Features
Register Indexed Addressing
PC-relative Addressing
The Program Counter (PC)
Memory Load-Store
Bulk Transfers
Exclusive Accesses
Load-Acquire, Store-Release
Integer Multiply/Divide
Floating Point
Advanced SIMD
A64 ASSEMBLY LANGUAGE
Basic Structure
Instruction Mnemonics
Condition Codes
Register Names
General purpose (integer) registers
FP/SIMD registers
Load/Store Addressing Modes
A64 INSTRUCTION SET
Copyright © 2009-2011 ARM Limited. All rights reserved.
6
6
6
6
6
7
8
8
10
10
11
11
11
11
11
11
12
12
12
12
13
14
14
14
15
17
17
18
20
21
Page 3 of 112
1.1
1.1.1
1.1.2
1.2
1.3
2
3
3.1
3.2
3.3
3.3.1
3.3.2
3.4
3.5
3.5.1
3.5.2
3.5.3
3.6
3.7
3.8
4
4.1
4.2
4.3
4.4
4.4.1
4.4.2
4.5
5
PRD03-GENC-010197
ARMv8 Instruction Set Overview
5.1
5.1.1
5.1.2
5.1.3
5.2
5.2.1
5.2.2
5.2.3
5.2.4
5.2.5
5.2.6
5.2.7
5.2.8
5.2.9
5.3
5.3.1
5.3.2
5.3.3
5.3.4
5.3.5
5.3.6
5.3.7
5.3.8
5.4
5.4.1
5.4.2
5.4.3
5.4.4
5.4.5
5.4.6
5.4.7
5.5
5.5.1
5.5.2
5.6
5.6.1
5.6.2
5.6.3
5.6.4
5.6.5
5.6.6
5.6.7
5.6.8
5.6.9
5.6.10
5.6.11
5.7
5.7.1
5.7.2
5.7.3
Control Flow
Conditional Branch
Unconditional Branch (immediate)
Unconditional Branch (register)
Memory Access
Load-Store Single Register
Load-Store Single Register (unscaled offset)
Load Single Register (pc-relative, literal load)
Load-Store Pair
Load-Store Non-temporal Pair
Load-Store Unprivileged
Load-Store Exclusive
Load-Acquire / Store-Release
Prefetch Memory
Data Processing (immediate)
Arithmetic (immediate)
Logical (immediate)
Move (wide immediate)
Address Generation
Bitfield Operations
Extract (immediate)
Shift (immediate)
Sign/Zero Extend
Data Processing (register)
Arithmetic (shifted register)
Arithmetic (extending register)
Logical (shifted register)
Variable Shift
Bit Operations
Conditional Data Processing
Conditional Comparison
Integer Multiply / Divide
Multiply
Divide
Scalar Floating-point
Floating-point/SIMD Scalar Memory Access
Floating-point Move (register)
Floating-point Move (immediate)
Floating-point Convert
Floating-point Round to Integral
Floating-point Arithmetic (1 source)
Floating-point Arithmetic (2 source)
Floating-point Min/Max
Floating-point Multiply-Add
Floating-point Comparison
Floating-point Conditional Select
Advanced SIMD
Overview
Advanced SIMD Mnemonics
Data Movement
Copyright © 2009-2011 ARM Limited. All rights reserved.
22
22
22
22
23
23
24
25
25
26
27
28
29
31
32
32
33
34
35
35
37
37
37
37
38
39
40
42
43
43
45
46
46
47
48
48
51
51
51
56
57
57
58
58
59
59
60
60
61
61
Page 4 of 112
PRD03-GENC-010197
ARMv8 Instruction Set Overview
5.7.4
5.7.5
5.7.6
5.7.7
5.7.8
5.7.9
5.7.10
5.7.11
5.7.12
5.7.13
5.7.14
5.7.15
5.7.16
5.7.17
5.7.18
5.7.19
5.7.20
5.7.21
5.7.22
5.7.23
5.7.24
5.8
5.8.1
5.8.2
5.8.3
5.8.4
5.8.5
6
6.1
6.2
6.2.1
6.2.2
6.3
6.3.1
6.3.2
6.3.3
6.3.4
6.3.5
6.4
6.4.1
6.4.2
6.4.3
6.5
6.6
6.6.1
6.6.2
Vector Arithmetic
Scalar Arithmetic
Vector Widening/Narrowing Arithmetic
Scalar Widening/Narrowing Arithmetic
Vector Unary Arithmetic
Scalar Unary Arithmetic
Vector-by-element Arithmetic
Scalar-by-element Arithmetic
Vector Permute
Vector Immediate
Vector Shift (immediate)
Scalar Shift (immediate)
Vector Floating Point / Integer Convert
Scalar Floating Point / Integer Convert
Vector Reduce (across lanes)
Vector Pairwise Arithmetic
Scalar Reduce (pairwise)
Vector Table Lookup
Vector Load-Store Structure
AArch32 Equivalent Advanced SIMD Mnemonics
Crypto Extension
System Instructions
Exception Generation and Return
System Register Access
System Management
Architectural Hints
Barriers and CLREX
62
67
70
73
73
75
76
78
78
79
80
82
84
84
85
86
86
87
88
91
99
100
100
101
101
104
104
106
106
106
106
107
108
108
108
108
109
109
110
110
110
110
111
112
112
112
A32 & T32 INSTRUCTION SETS
Partial Deprecation of
IT
Load-Acquire / Store-Release
Non-Exclusive
Exclusive
VFP Scalar Floating-point
Floating-point Conditional Select
Floating-point minNum/maxNum
Floating-point Convert (floating-point to integer)
Floating-point Convert (half-precision to/from double-precision)
Floating-point Round to Integral
Advanced SIMD Floating-Point
Floating-point minNum/maxNum
Floating-point Convert
Floating-point Round to Integral
Crypto Extension
System Instructions
Halting Debug
Barriers and Hints
PRD03-GENC-010197
Copyright © 2009-2011 ARM Limited. All rights reserved.
Page 5 of 112
评论