Presentations
tisnik 0x40 centrum 0x2e cz>
ARMv1 26/32 bitů ARM1
ARMv2 26/32 bitů ARM2, ARM3
ARMv3 26/32 bitů ARM6, ARM7
ARMv4 26/32 bitů ARM8
ARMv5 32 bitů ARM7EJ, ARM9E, ARM10E
ARMv6 32 bitů ARM11
ARMv6-M 32 bitů Cortex-M0, Cortex-M0+, Cortex-M1
ARMv7-M 32 bitů Cortex-M3
ARMv7E-M 32 bitů Cortex-M4, Cortex-M7
ARMv7-R 32 bitů Cortex-R4, Cortex-R5, Cortex-R7
ARMv7-A 32 bitů Cortex-A5, Cortex-A7, Cortex-A8,
Cortex-A9, Cortex-A12,
Cortex-A15, Cortex-A17
ARMv8-A 32/64 bitů Cortex-A53, A57 a A72
ARMv1 proof of concept, funkční hned první "várka"
ARMv2 Acorn Archimedes, 1982
ARMv3
ARMv4 StrongARM
ARMv5
ARMv6 Starší (univerzální) čipy, dnes RPI apod.
ARMv6-M Mikrořadič
ARMv7-M Mikrořadič
ARMv7E-M Mikrořadič
ARMv7-R Real-time aplikace
ARMv7-A netbooky, smartphony, tablety, čtečky, desktop
ARMv8-A servery
Jádro Architektura
Cortex-M0 ARMv6-M Von Neumann
Cortex-M0+ ARMv6-M Von Neumann
Cortex-M1 ARMv6-M Von Neumann
Cortex-M3 ARMv7-M Harvardská
Cortex-M4 ARMv7E-M Harvardská
Cortex-M7 ARMv7E-M Harvardská
Jádro Dělička DSP Thumb Thumb-2
Cortex-M0 ne ne kromě 3 instrukcí částecně
Cortex-M0+ ne ne kromě 3 instrukcí částecně
Cortex-M1 ne ne kromě 3 instrukcí částecně
Cortex-M3 ano ne kompletně kompletně
Cortex-M4 ano ano kompletně kompletně
Cortex-M7 ano ano kompletně kompletně
PC
, CPSR
, 5xSPSR
r0
..r14
r13
Stack Pointerr14
Link RegisterCPSR
a SPSR
N
- negativeV
- overflowZ
- zeroC
- carryQ
- sticky (ARMv5 a výše)int gcd(int a, int b) {
while (a != b) {
if (a > b) a = a - b;
else b = b - a;
}
return a;
}
gcd CMP r0, r1
BEQ end
BLT less
SUB r0, r0, r1
B gcd
less
SUB r1, r1, r0
B gcd
end
gcd
CMP r0, r1
SUBGT r0, r0, r1
SUBLT r1, r1, r0
BNE gcd
r0
-r7
r8
-r15
OP Rd, Rn, Rm
r0
..r7
ADD Rd, Rn
, konstantaADD Rd, Rm
- jeden z registrů r8
..r15
CMP Rm, Rn
- dttoMOV Rd, Rm
- dttoADD
, ADC
, SUB
, SBC
MUL
, NEG
AND
, EOR
, ORR
ASR
, LSL
, LSR
, ROR
CMP
, CMN
, TST
B
, BL
, BX
, BLX
(link, exchange)MOV
, MVN
- move (not)POP
, PUSH
LDR
, LDRH
, LRRB
LDRSH
, LDRSB
STR
, STRH
, STRB
LDMIA
, STMIA
STXH
, STXB
, UXTH
, UXTB
IT
CBZ
CBNZ
IT{pattern} {condition}
T
-thenE
-elseT
-podmínkaE
-inverze podmínkyEQ
NE
GT
GE
LT
LE
CS
CC
carryPL
MI
HI
LS
CMP r0, r1
ITE EQ
MOVEQ r0, r2 ; větev "then"
MOVNE r0, r3 ; větev "else"
ZR
)SR
)PC
není přímo dostupnýf0
..f7
FPSR
FPCR
d0
..d15
s0
..s31
(stínové registry pro single)d0
..d31
(64bitů/registr)q0
..q15
(128 bitů/pár)gcc -mcpu=cortex-a9 -mfpu=neon ...
clang -mcpu=cortex-a9 -mfpu=neon ...
-mtune=cortex-a5 (a8, a9)
#include <arm_neon.h>
(typ)x(lanes)_t - uint8x4_t
(typ)x(lanes)x(počet_registrů)_t - uint8x2x4_t
...
uint16x4_t vadd_u16(uint16x4_t x, uint16x4_t y);
uint16x2_t vmlal_u32(uint64x2_t x, uint32x2_t, uint32x2_t);