Presentations
tisnik 0x40 centrum 0x2e czPC, CPSR, 5xSPSRr0..r14r13 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-r7r8-r15B: BranchBL: Branch and linkOP 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 - 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 LECS CC (carry)PL MI HI LSCMP 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ýMULDIVCRCADD, MULf0..f7
FPSR
FPCR
d0..d15 (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;
^