Technical Support
On-Line Manuals
Assembler Reference
Conventions and feedback
Assembler command line options
ARM and Thumb Instructions
Instruction summary
Instruction width specifiers
Memory access instructions
General data processing instructions
Flexible second operand (Operand2)
Operand2 as a constant
Operand2 as a register with optional shift
Shift operations
Multiply instructions
Saturating instructions
Parallel instructions
Parallel add and subtract
Packing and unpacking instructions
Branch and control instructions
Coprocessor instructions
Miscellaneous instructions
ThumbEE instructions
Pseudo-instructions
Condition codes
ADD, SUB, RSB, ADC, SBC, and RSC
ADR (PC-relative)
ADR (register-relative)
ADRL pseudo-instruction
AND, ORR, EOR, BIC, and ORN
ASR, LSL, LSR, ROR, and RRX
B, BL, BX, BLX, and BXJ
BFC and BFI
BKPT
CBZ and CBNZ
CDP and CDP2
CHKA
CLREX
CLZ
CMP and CMN
CPS
CPY pseudo-instruction
DBG
DMB, DSB, and ISB
ENTERX and LEAVEX
ERET
HB, HBL, HBLP, and HBP
IT
LDC, LDC2, STC, and STC2
LDM and STM
LDR and STR (immediate offset)
LDR and STR (register offset)
LDR and STR, unprivileged
LDR (PC-relative)
LDR (register-relative)
LDR pseudo-instruction
LDREX and STREX
MAR and MRA
MCR, MCR2, MCRR, and MCRR2
MIA, MIAPH, and MIAxy
MOV and MVN
MOV32 pseudo--instruction
MOVT
MRC, MRC2, MRRC and MRRC2
MRS (system coprocessor register to ARM register)
MRS (PSR to general-purpose register)
MSR (ARM register to system coprocessor register)
MSR (general-purpose register to PSR)
MUL, MLA, and MLS
NEG pseudo-instruction
PKHBT and PKHTB
PLD, PLDW, and PLI
PUSH and POP
QADD, QSUB, QDADD, and QDSUB
REV, REV16, REVSH, and RBIT
RFE
SBFX and UBFX
SDIV and UDIV
SEL
SETEND
SEV, WFE, WFI, and YIELD
SMC
NOP
SMLAD and SMLSD
SMLALxy
SMLALD and SMLSLD
SMMUL, SMMLA, and SMMLS
SMUAD{X} and SMUSD{X}
SMULxy and SMLAxy
SMULWy and SMLAWy
SRS
SSAT and USAT
SSAT16 and USAT16
SUBS pc, lr
SVC
SWP and SWPB
SXT, SXTA, UXT, and UXTA
SYS
TBB and TBH
TST and TEQ
UMULL, UMLAL, SMULL, and SMLAL
UMAAL
UND pseudo-instruction
USAD8 and USADA8
VFP Programming
Directives Reference
|
Assembler Reference
MIA, MIAPH, and MIAxy
Multiply with internal accumulate (32-bit by 32-bit, 40-bit
accumulate). Multiply with internal accumulate, packed halfwords (16-bit
by 16-bit twice, 40-bit accumulate). Multiply with internal accumulate (16-bit by 16-bit, 40-bit
accumulate). Syntax
MIA{cond} Acc, Rn, Rm
MIAPH{cond} Acc, Rn, Rm
MIA<x><y>{cond} Acc, Rn, Rm
where: condis an optional condition code. Accis the internal accumulator. The standard name is accx,
where x is an
integer in the range 0 to n.
The value of n depends
on the processor. It is 0 in current processors. Rn, Rmare the ARM registers holding the values to be multiplied. Rn and Rm must
not be PC.
<x><y>is one of: BB, BT, TB, TT.
Usage
The MIA instruction multiplies the signed integers
from Rn and Rm,
and adds the result to the 40-bit value in Acc. The MIAPH instruction multiplies the signed integers
from the bottom halves of Rn and Rm, multiplies
the signed integers from the upper halves of Rn and Rm,
and adds the two 32-bit results to the 40-bit value in Acc. The MIAxy instruction multiplies the signed integer
from the selected half of Rs by
the signed integer from the selected half of Rm,
and adds the 32-bit result to the 40-bit value in Acc. <x> == B means
use the bottom half (bits [15:0]) of Rn, <x> == T means
use the top half (bits [31:16]) of Rn. <y> == B means
use the bottom half (bits [15:0]) of Rm, <y> == T means
use the top half (bits [31:16]) of Rm. Condition flags
These instructions do not change the flags. NoteThese instructions cannot raise an exception. If overflow
occurs on these instructions, the result wraps round without any
warning. Architectures
These ARM coprocessor 0 instructions are only available in
XScale processors. There are no Thumb versions of these instructions. Examples
MIA acc0,r5,r0
MIALE acc0,r1,r9
MIAPH acc0,r0,r7
MIAPHNE acc0,r11,r10
MIABB acc0,r8,r9
MIABT acc0,r8,r8
MIATB acc0,r5,r3
MIATT acc0,r0,r6
MIABTGT acc0,r2,r5
See also
|