2017-10-21 189 views
1

J'utilise une CPU RISC ARM966E-S et je me demandais comment utiliser les extensions d'instructions apparemment disponibles pour de meilleures performances DSP, e. g. une instruction multiplicatrice améliorée.Comment utiliser les instructions de multiplicateur améliorées du jeu d'instructions ARMv5TE

J'ai lu dans le manuel de référence technique que ces extensions d'instructions sont disponibles mais je ne sais pas comment les utiliser/les activer.

Quelqu'un peut-il aider?

Merci d'avance!

+0

Qu'est-ce qui se passe si vous compilez 'res int64_t = (int64_t) i * (int64_t) j; 'et démonter le résultat? Génère-t-il 'SMULL'? Les longues multiplications devraient juste fonctionner. Mais pour saturer et arithmétique parallèle, vous devrez utiliser intrinsèques car ils ne correspondent pas bien à "C". – NickJH

+0

Utilisez le '-march = armv5te' pour indiquer au compilateur que vous avez les instructions DSP' extended'. Le 'ARM ARM' (manuel de référence de l'architecture) contient des détails sur ce que ces choses signifient, il y a aussi les variantes 'jazelle' et 's', les 'PLD',' LDRD 'et 'MULL' sont des additions. arm arm directory] (https://gcc.gnu.org/git/?p=gcc.git;f=gcc/config/arm;hb=HEAD) qui définit la génération de code.Vous pouvez trouver les options dont vous pourriez avoir besoin pour votre Version GCC pour que le compilateur émette des trucs –

+0

Jetez un oeil à [get gcc pour émettre des instructions idiv] (https://stackoverflow.com/questions/15782089/gcc-to-emit-arm-idiv-instructions). est plus complexe que vous ne le pensez: il y a d'abord la possibilité d'utiliser les instructions, puis il est plus efficace que d'autres instructions.Le pipeline ARM et la sémantique 'C' peuvent/peuvent ne pas permettre l'utilisation des instructions. L'étape consiste à spécifier une CPU qui permettra l'émission de l'opcode (comme dans la vieille réponse timer/dwelchs), ce qui vous permet d'utiliser l'assembleur en ligne même si 'C' ne coaxialise pas pour l'utiliser. ré ef. –

Répondre

1

Pourquoi ne pas simplement l'essayer? Ou lire le manuel pour votre toolchain, par exemple avec gcc

so.s

ldrd r0,[r2] 
ldr r2,[r2] 

tests

arm-none-eabi-as so.s -o so.o 
arm-none-eabi-as -march=armv5t so.s -o so.o 
so.s: Assembler messages: 
so.s:3: Error: selected processor does not support `ldrd r0,[r2]' in ARM mode 
arm-none-eabi-as -march=armv5te so.s -o so.o 
arm-none-eabi-objdump -D so.o 

so.o:  file format elf32-littlearm 


Disassembly of section .text: 

00000000 <.text>: 
    0: e1c200d0 ldrd r0, [r2] 
    4: e5922000 ldr r2, [r2] 
+0

Mais comment puis-je utiliser les instructions rapides par défaut? Je veux dire, mon code est écrit en C. Je ne veux pas écrire Assembler. Le compilateur devrait toujours utiliser cette instruction par défaut ... – Andi

+0

-march = armv5te fonctionne également sur la ligne de commande gcc, ensuite c'est au compilateur de décider s'il veut ou non les utiliser. –

+0

Si vous n'utilisez pas le langage assembleur directement, vous devez apprendre à ajuster votre code pour que le compilateur génère ces instructions, s'il les génère (grep via les sources gcc pour voir si elles sont utilisées, quand et pourquoi) . –