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, 5xSPSRr0..r14r13 Stack Pointerr14 Link RegisterCPSR a SPSRN - 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-r7r8-r15OP Rd, Rn, Rm
r0..r7ADD Rd, Rn, konstantaADD Rd, Rm - jeden z registrů r8..r15CMP Rm, Rn - dttoMOV Rd, Rm - dttoADD, ADC, SUB, SBCMUL, NEGAND, EOR, ORRASR, LSL, LSR, RORCMP, CMN, TSTB, BL, BX, BLX (link, exchange)MOV, MVN - move (not)POP, PUSHLDR, 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 LECS CC carryPL MI HI LSCMP 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..d15s0..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);