Presentations
tisnik 0x40 centrum 0x2e cz
PC
, CPSR
, 5xSPSR
r0
..r14
r13
Stack Pointerr14
Link RegisterN
- 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
B
: BranchBL
: Branch and linkOP Rd, Rn, Rm
r0
..r7
ADD Rd, Rn, konstanta
ADD 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
- load (word, halfword, byte)LDRSH
, LDRSB
- sign extend (na word)STR
, STRH
, STRB
- store (word, halfword, byte)LDMIA
, STMIA
- vektor registrůSTXH
, STXB
, UXTH
, UXTB
- sign/zero extendCBZ
CBNZ
IT
IT{pattern} {condition}
{pattern}
T
-thenE
-else{condition}
T
-podmínkaE
-inverze podmínky{condition}
EQ NE GT GE LT LE
CS CC
(carry)PL MI HI LS
CMP r0, r1
ITE EQ
MOVEQ r0, r2 ; větev "then"
MOVNE r0, r3 ; větev "else"
Instrukční sada Délka kódu
==================================
ARM 100%
Thumb 70%
Thumb-2 74%
Instrukční sada Relativní rychlost
==================================
ARM 100%
Thumb 75%
Thumb-2 98%
ZR
)SR
)PC
není přímo dostupnýMUL
DIV
CRC
ADD
, MUL
f0
..f7
FPSR
FPCR
d0
..d1
5 (double)s0
..s31
(stínové registry pro single)d16
..d31
(double) s0..s7
s8..s15
s16..s23
s24..s31
d0..d3
d4..d7
d8..d11
d12..d15
[s5, s6, s7, s0, s1, s2]
[s1, s3, s5]
[s6, s0, s2, s4]
d0
..d31
(64bitů/registr)q0
..q15
(128 bitů/pár)Datové typy
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);
-Wdouble-promotion
-fsingle-precision-constant
__FPU_USED
- pokud je definováno:
SystemInit()
test.c: In function ‘calcVAT’:
test.c:3:16: warning: implicit conversion from ‘float’ to ‘double’ to match other operand of binary expression [-Wdouble-promotion]
return 20.0*price;
^