Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Option Description
Par défaut Opérandes fractionnaires signés + décalage du bit signe
◼ Multiplication/MAC
◼ Transferts Ax → Dreg
◼ Transferts Dreg_hi_lo
◼ Auto-incrément/décrément Ax
Instructions parallèles
Instructions possibles sur le slot 2 et le slot 3
◼ Exemples:
R3 = A1; // R impaire
R5.L = A0
R2 = (A0 += R0.L*R1.L);
R5.H = (A1 += R1.L*R2.L);
Limitations du jeu d’instruction
2x MAC vers 2x Dreg
Les registres destination doivent êtres des paires proches:
◼ R1/R0 ou R3 et R2 …. etc…
Exemples:
Une fonction ASM appelée en C ne peut utiliser librement les registres DSP
Registres compilateur
Registres préservés
Registres indépendants
◼ Ces registres peuvent être utilisés par une fonction ASM appelée en C sans aucune restriction
particulière
Interface ASM-C/C++
Assembleur in-line
Un programme C peut utiliser la syntaxe assembleur sans faire appel à une interface ASM-
C en utilisant directement une construction asm( )
◼ asm(“R0 = W[P0];”);
◼ asm(“BITSET(R0,7);”);
◼ asm(“SSYNC;”);
L’utilisation d’instructions ASM est également possible via des fonctions C précompilées:
◼ Exemple routine assembleur MAC ASM en C :
add_fr1x32 (acc , mult_fr1x32 (in[i] , coeff[i] ) ) ;
Optimisation du code
Densité du code vs Performances
Il existe plusieurs façons d’utiliser les instructions en || afin d’optimiser son code
Exemple d’optimisation de la densité du code:
◼ R6=(A0+=R3.H*R2.H); // 32-bits
I2 -=M0 ; // 16-bits
◼ #Cycles: 2 cycles Taille du code: 6 octets
◼ #pragma optimize_for_space
…………………………….
…………………….
◼ #pragma optimize_for_space
…………………………………
……………………………….
Optimisation du code
Optimisation en ASM
L’utilisation de l’assembleur est plus efficace que la programmation en C pour les fonctions
critiques dans le code. Cela offre au programmeur plus de contrôle sur le DSP