FR2752630A1 - Traitement de donnees multiples a une seule instruction dans un processeur de signaux multisupport - Google Patents
Traitement de donnees multiples a une seule instruction dans un processeur de signaux multisupport Download PDFInfo
- Publication number
- FR2752630A1 FR2752630A1 FR9710441A FR9710441A FR2752630A1 FR 2752630 A1 FR2752630 A1 FR 2752630A1 FR 9710441 A FR9710441 A FR 9710441A FR 9710441 A FR9710441 A FR 9710441A FR 2752630 A1 FR2752630 A1 FR 2752630A1
- Authority
- FR
- France
- Prior art keywords
- register
- vector
- data
- instruction
- bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012545 processing Methods 0.000 title claims abstract description 21
- 239000013598 vector Substances 0.000 claims abstract description 549
- 238000000034 method Methods 0.000 claims description 18
- 239000008186 active pharmaceutical agent Substances 0.000 description 82
- 239000000872 buffer Substances 0.000 description 47
- 230000001343 mnemonic effect Effects 0.000 description 45
- 238000010200 validation analysis Methods 0.000 description 27
- 238000012546 transfer Methods 0.000 description 23
- 230000000295 complement effect Effects 0.000 description 22
- 238000007792 addition Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 14
- 238000006243 chemical reaction Methods 0.000 description 13
- 238000000605 extraction Methods 0.000 description 13
- 230000008859 change Effects 0.000 description 10
- 239000000284 extract Substances 0.000 description 10
- 230000006870 function Effects 0.000 description 10
- 230000008569 process Effects 0.000 description 10
- BVRIUXYMUSKBHG-UHFFFAOYSA-N 4-[[4-(dimethylamino)phenyl]diazenyl]aniline Chemical compound C1=CC(N(C)C)=CC=C1N=NC1=CC=C(N)C=C1 BVRIUXYMUSKBHG-UHFFFAOYSA-N 0.000 description 9
- 230000003111 delayed effect Effects 0.000 description 9
- 101000641224 Homo sapiens Vimentin-type intermediate filament-associated coiled-coil protein Proteins 0.000 description 7
- 102100034331 Vimentin-type intermediate filament-associated coiled-coil protein Human genes 0.000 description 7
- 238000009825 accumulation Methods 0.000 description 7
- 239000013256 coordination polymer Substances 0.000 description 6
- 230000002441 reversible effect Effects 0.000 description 6
- 239000000725 suspension Substances 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000033001 locomotion Effects 0.000 description 5
- 101100178280 Rattus norvegicus Homer1 gene Proteins 0.000 description 4
- 210000000988 bone and bone Anatomy 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000006073 displacement reaction Methods 0.000 description 4
- 230000009977 dual effect Effects 0.000 description 4
- 101100243442 Arabidopsis thaliana PER4 gene Proteins 0.000 description 3
- 101100189940 Arabidopsis thaliana PER5 gene Proteins 0.000 description 3
- 101100463459 Arabidopsis thaliana PER6 gene Proteins 0.000 description 3
- 101100001915 Drosophila melanogaster Hmu gene Proteins 0.000 description 3
- 101001073216 Homo sapiens Period circadian protein homolog 2 Proteins 0.000 description 3
- 101000601274 Homo sapiens Period circadian protein homolog 3 Proteins 0.000 description 3
- 101100519625 Komagataella pastoris PEX2 gene Proteins 0.000 description 3
- 102100035787 Period circadian protein homolog 2 Human genes 0.000 description 3
- 102100037630 Period circadian protein homolog 3 Human genes 0.000 description 3
- 240000001987 Pyrus communis Species 0.000 description 3
- 230000015556 catabolic process Effects 0.000 description 3
- 229920006395 saturated elastomer Polymers 0.000 description 3
- 238000001356 surgical procedure Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 101100136149 Arabidopsis thaliana PER12 gene Proteins 0.000 description 2
- 101100136150 Arabidopsis thaliana PER13 gene Proteins 0.000 description 2
- 101100136151 Arabidopsis thaliana PER14 gene Proteins 0.000 description 2
- 101100136152 Arabidopsis thaliana PER15 gene Proteins 0.000 description 2
- 101100463465 Arabidopsis thaliana PER7 gene Proteins 0.000 description 2
- 101100463466 Arabidopsis thaliana PER8 gene Proteins 0.000 description 2
- 101100519531 Arabidopsis thaliana PER9 gene Proteins 0.000 description 2
- 101100269850 Caenorhabditis elegans mask-1 gene Proteins 0.000 description 2
- 101100407810 Pichia angusta PEX10 gene Proteins 0.000 description 2
- 101100297149 Pichia angusta PEX3 gene Proteins 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 2
- 239000004020 conductor Substances 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 239000003607 modifier Substances 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- WZJFKVHMXBGZBQ-PMACEKPBSA-N (2s)-1-[(5s)-5-benzamido-4-oxo-6-phenylhexanoyl]pyrrolidine-2-carboxylic acid Chemical compound OC(=O)[C@@H]1CCCN1C(=O)CCC(=O)[C@@H](NC(=O)C=1C=CC=CC=1)CC1=CC=CC=C1 WZJFKVHMXBGZBQ-PMACEKPBSA-N 0.000 description 1
- UOTMYNBWXDUBNX-UHFFFAOYSA-N 1-[(3,4-dimethoxyphenyl)methyl]-6,7-dimethoxyisoquinolin-2-ium;chloride Chemical compound Cl.C1=C(OC)C(OC)=CC=C1CC1=NC=CC2=CC(OC)=C(OC)C=C12 UOTMYNBWXDUBNX-UHFFFAOYSA-N 0.000 description 1
- 101001126533 Arabidopsis thaliana Peroxisome biogenesis factor 10 Proteins 0.000 description 1
- 101100478290 Arabidopsis thaliana SR30 gene Proteins 0.000 description 1
- 241000269420 Bufonidae Species 0.000 description 1
- 101100150278 Caenorhabditis elegans srb-5 gene Proteins 0.000 description 1
- 101100534223 Caenorhabditis elegans src-1 gene Proteins 0.000 description 1
- 101100258605 Cereibacter sphaeroides (strain ATCC 17023 / DSM 158 / JCM 6121 / CCUG 31486 / LMG 2827 / NBRC 12203 / NCIMB 8253 / ATH 2.4.1.) gltX1 gene Proteins 0.000 description 1
- 241000543381 Cliftonia monophylla Species 0.000 description 1
- 101100011399 Danio rerio eif3ea gene Proteins 0.000 description 1
- 101100535093 Dictyostelium discoideum gluS gene Proteins 0.000 description 1
- 102000008016 Eukaryotic Initiation Factor-3 Human genes 0.000 description 1
- 101000760663 Hololena curta Mu-agatoxin-Hc1a Proteins 0.000 description 1
- 101000579484 Homo sapiens Period circadian protein homolog 1 Proteins 0.000 description 1
- 101001126582 Homo sapiens Post-GPI attachment to proteins factor 3 Proteins 0.000 description 1
- 101150008815 INT6 gene Proteins 0.000 description 1
- 102100028293 Period circadian protein homolog 1 Human genes 0.000 description 1
- 101001074199 Rattus norvegicus Glycerol kinase Proteins 0.000 description 1
- 101100386054 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) CYS3 gene Proteins 0.000 description 1
- 101100212791 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) YBL068W-A gene Proteins 0.000 description 1
- 101100160255 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) YLR154C-H gene Proteins 0.000 description 1
- 101100438139 Vulpes vulpes CABYR gene Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- IFLVGRRVGPXYON-UHFFFAOYSA-N adci Chemical compound C12=CC=CC=C2C2(C(=O)N)C3=CC=CC=C3CC1N2 IFLVGRRVGPXYON-UHFFFAOYSA-N 0.000 description 1
- 238000010009 beating Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000005219 brazing Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 108010041382 compound 20 Proteins 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000002405 diagnostic procedure Methods 0.000 description 1
- 101150103988 gltX gene Proteins 0.000 description 1
- 238000002040 inelastic incoherent neutron scattering Methods 0.000 description 1
- 230000005764 inhibitory process Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 150000002500 ions Chemical class 0.000 description 1
- JILPJDVXYVTZDQ-UHFFFAOYSA-N lithium methoxide Chemical compound [Li+].[O-]C JILPJDVXYVTZDQ-UHFFFAOYSA-N 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- NRBNGHCYDWUVLC-UHFFFAOYSA-N mtep Chemical compound S1C(C)=NC(C#CC=2C=NC=CC=2)=C1 NRBNGHCYDWUVLC-UHFFFAOYSA-N 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 101150035983 str1 gene Proteins 0.000 description 1
- 238000012876 topography Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Multi Processors (AREA)
- Image Processing (AREA)
Abstract
L'invention concerne un processeur vectoriel. Selon l'invention, il comprend un fichier de registres contenant des registres vectoriels, un décodeur qui, pendant le décodage d'une instruction, identifie un registre vectoriel sélectionné et identifie une grandeur pour les éléments de données à traiter pendant l'exécution de l'instruction, et un ensemble de circuits de traitement couplés au registre vectoriel, l'ensemble de circuits de traitements, quand il exécute l'instruction, accomplissant un certain nombre d'opérations en parallèle sur la donnée du registre vectoriel sélectionné, le nombre d'opérations en parallèle étant contrôlé par la grandeur pour les éléments de données. L'invention sert notamment au traitement de données.
Description
Ce document de brevet est en rapport à et incorpore par référence, dans
leur totalité, les demandes de brevet concurremment déposées qui suivent: Demande de brevet U.S. No. INCONNU1, dossier du mandataire No. M-4354 intitulé "Multiprocessor Operation in a Multimedia Signal Processor;" Demande de brevet U.S. No. INCONNU3, dossier du mandataire No. M-4365 intitulé "Efficient Context Saving and Restoring in Multiprocessors;" Demande de brevet U.S. No. INCONNU4, dossier du mandataire No. M-4366 intitulé "System and Method for Handling Software Interrupts with Argument Passing"; Demande de brevet U.S. No. INCONNU5, dossier du mandataire No.M-4367, intitulé "System and Method for Handling Interrupts and Exception Events in an Asymetric Multiprocessor Architecture"; Demande de brevet U.S. No. INCONNU6, dossier du mandataire No. M-4368 intitulé "Methods and Apparatus for Processing Vidéo Data "; Demande de brevet U.S. No. INCONNU7, dossier du
mandataire No. M-4369 intitulé "Single-Instruction-
Multiple-Data Processing Using Multiple Banks of Vector Registers"; et Demande de brevet U.S. No. INCONNU8, dossier No. M-4370 intitulé "SingleInstruction-Multiple-Data Processing with
combined Scalar/Vector Operations".
Cette invention se rapporte à des processeurs de signaux numériques et, en particulier, à des procédés pour le traitement en parallèle d'éléments de données multiples par instruction pour des fonctions multimédia, comme le
codage et le décodage vidéo et audio.
Les processeurs de signaux numériques programmables (DSP) pour des applications multimédia comme le codage et le décodage vidéo en temps réel, nécessitent une puissance considérable de traitement pour la grande
quantité de données qu'il faut traiter en un temps limité.
Plusieurs architectures pour les processeurs de signaux numériques sont connues. Une architecture d'utilité générale, qui est employée dans la plupart des microprocesseurs, nécessite typiquement de hautes fréquences de fonctionnement pour donner un DSP ayant une puissance suffisante de calcul pour un codage ou un décodage vidéo en
temps réel. Cela rend ce DSP coûteux.
Un processeur à très long mot d'instruction (VLIW) est un DSP ayant de nombreuses unités fonctionnelles dont la plupart accomplissent des tâches différentes et relativement simples. Une seule instruction pour un DSP à VLIW peut être de 128 octets ou plus et a des parties séparées que les unités fonctionnelles séparées exécutent en parallèle. Les DSP à VLIW ont une grande puissance de calcul, parce que de nombreuses unités fonctionnelles peuvent fonctionner en parallèle. Les DSP à VLIW ont également un prix relativement bas, parce que chaque unité fonctionnelle est relativement petite et simple. Un problème pour les DSP à VLIW est l'inefficacité de la manipulation du contrôle d'entrée/sortie, de la communication avec un ordinateur hôte et autres fonctions qui ne se prêtent pas à une exécution en parallèle sur les unités fonctionnelles du DSP à VLIW. De plus, le logiciel de VLIW diffère du logiciel conventionnel et peut être difficile à développer, parce-que les outils de programmation et programmeurs familiers des architectures à
logiciel à VLIW sont rares.
Un DSP qui donnera un prix raisonnable, une grande puissance de calcul et un environnement familier de programmation est recherché pour des applications multimédia. Selon un aspect de l'invention, un processeur de signaux numériques multimédia (DSP) comporte un processeur vectoriel qui manipule des données vectorielles (i.e. des éléments de données multiples par opérande) pour donner une haute puissance de traitement. Le processeur utilise une architecture à données multiples à une seule instruction avec un groupe d'instructions du type RISC. Les programmeurs peuvent facilement s'adapter à l'environnement de programmation du processeur vectoriel, parce qu'il est similaire aux environnements de programmation des processeurs d'utilité générale avec lesquels la plupart des
programmeurs sont familiers.
Le DSP comporte un groupe de registres vectoriels d'utilité générale. Chaque registre vectoriel a une grandeur fixe, mais il est réparti en éléments séparés de données,
d'une grandeur pouvant être sélectionnée par l'utilisateur.
En conséquence, le nombre d'éléments de données stockés dans un registre vectoriel dépend de la grandeur sélectionnée pour les éléments. Par exemple, un registre à 32 octets peut être divisé en trente deux éléments de données à 8 bits, seize éléments de données à 16 bits ou huit éléments de données à 32 bits. La sélection de la grandeur des données et du type est faite par une instruction qui traite les données associées au registre vectoriel et un trajet de données d'exécution pour l'instruction accomplit un certain nombre d'opérations en parallèle qui dépendent de la
grandeur des données indiquées par une instruction.
Les instructions pour le processeur vectoriel peuvent avoir des registres vectoriels ou registres scalaires en tant qu'opérandes, et manipuler des éléments de données multiples de registres vectoriels en parallèle, donc la puissance de calcul est élevée. Un exemple de groupe d'instructions pour un processeur vectoriel selon l'invention comprend: des opérations d'interface du coprocesseur; des opérations de contrôle de circulation; des opérations de charge/enregistrement; et des opérations logiques/arithmétiques. Les opérations logiques/ arithmétiques comprennent des opérations qui combinent des éléments de données d'un registre vectoriel avec des éléments correspondants de données d'un ou plusieurs autres registres vectoriels pour générer les éléments de données d'un vecteur résultant de données. D'autres opérations logiques/arithmétiques mélangent divers éléments de données d'un ou plusieurs registres vectoriels ou combinent les éléments de données d'un registre vectoriel
avec des quantités scalaires.
Une extension de l'architecture du processeur vectoriel ajoute des registres scalaires, dont chacun contient un élément de données scalaire. La combinaison des registres scalaires et vectoriels facilite l'extension du groupe d'instructions du processeur vectoriel pour inclure des opérations qui, en parallèle, combinent chaque élément de données d'un vecteur avec une valeur scalaire. Une instruction, par exemple, multiplie les éléments de données d'un vecteur par une valeur scalaire. Les registres scalaires fournissent également un emplacement pour l'enregistrement d'un seul élément de données à extraire de, ou à enregistrer dans, un registre vectoriel. Le registre scalaire est également commode pour le passage de l'information entre le processeur vectoriel et un coprocesseur ayant une architecture qui ne prévoit que des registres scalaires et des calculs des adresses effectives
pour les opérations de charge/enregistrement.
Selon un autre aspect de l'invention, des registres vectoriels dans le processeur vectoriel sont organisés en rangées, chaque rangée peut être sélectionnée pour être la rangée "courante" alors que l'autre rangée est la rangée "alternative". Un bit de la "rangée courante" dans un registre de contrôle du processeur vectoriel indique que l'on est dans la rangée courante. Pour réduire le nombre de bits requis pour identifier un registre vectoriel, certaines instructions ne donnent qu'un numéro de registre pour identifier un registre vectoriel dans la rangée courante. Les instructions de charge/enregistrement ont un bit additionnel pour identifier un registre vectoriel de chaque rangée. En conséquence, les opérations de charge/enregistrement peuvent extraire la donnée de la rangée alternative pendant la manipulation de la donnée dans la rangée courante. Cela facilite une mise en pipeline du logiciel pour le traitement de l'image et des processus graphiques et cela réduit les retards du processeur lorsque l'on extrait des données parce que les opérations logiques/arithmétiques peuvent être accomplies en désordre avec les opérations de charge/enregistrement accédant à l'autre rangée de registre. Dans d'autres instructions, l'autre rangée permet l'utilisation de registres vectoriels de double grandeur, qui comprennent un registre vectoriel de la rangée courante et un registre vectoriel correspondant de l'autre rangée. De tels registres de double grandeur peuvent être identifiés par une syntaxe d'instructions. Un bit de contrôle dans le processeur vectoriel peut être établi de manière que la grandeur du vecteur de défaut soit un ou deux registres vectoriels. L'autre rangée permet également l'utilisation de moins d'opérandes explicites identifiés dans la syntaxe des instructions complexes comme battre, débattre, saturer et transferts conditionnels, qui ont deux
registres de source et deux de destination.
Le processeur vectoriel réalise de plus de nouvelles instructions comme moyenne quadratique, battre, débattre, maximum par paire et échange et saturé. Ces instructions accomplissent des opérations courantes dans les fonctions des multimédia comme le codage et le décodage vidéo et prennent la place de deux instructions ou plus, lesquels autres groupes d'instruction nécessiteraient de réaliser la même fonction. En conséquence, le groupe d'instructions du processeur vectoriel améliore l'efficacité et la vitesse des
programmes dans des applications multimédia.
L'invention sera mieux comprise et d'autres buts, caractéristiques, détails et avantages de celle-ci
apparaîtront plus clairement dans la description explicative
qui va suivre faite en référence aux dessins schématiques annexés donné à titre d'exemple illustrant plusieurs modes de réalisation et dans lesquels: La figure 1 donne un schéma blocs d'un processeur multimédia selon un mode de réalisation de l'invention. La figure 2 donne un schéma blocs d'un processeur vectoriel
pour le processeur multimédia de la figure 1.
La figure 3 donne un schéma blocs d'une unité d'extraction d'instruction pour le processeur vectoriel de
la figure 2.
La figure 4 donne un schéma blocs d'une unité d'extraction d'instructions pour le processeur vectoriel de
la figure 2.
les figures 5A, 5B et 5C montrent les stades d'exécution de pipelines pour une instruction registre à registre, une instruction de charge et une instruction d'enregistrement pour le processeur
vectoriel de la figure 2.
La figure 6A donne un schéma blocs pour un trajet de données d'exécution pour le processeur vectoriel de la
figure 2.
La figure 6B donne un schéma blocs d'un fichier de registre pour le trajet de données d'exécution de la
figure 6A.
La figure 6C donne un schéma blocs pour des unités logiques de traitement parallèle pour le trajet de
données d'exécution de la figure 6A.
La figure 7 donne un schéma blocs pour une unité de charge/enregistrement pour le processeur
vectoriel de la figure 2.
La figure 8 illustre des formats pour un groupe d'instructions d'un processeur vectoriel selon
un mode de réalisation de l'invention.
L'utilisation des mêmes symboles de référence sur les différentes figures indique des articles similaires ou identiques. La figure 1 montre un schéma blocs d'un mode de réalisation d'un processeur de signaux multimédia (MSP) 100 selon un mode de réalisation de l'invention. Le processeur multimédia 100 comporte un noyau de traitement 105 contenant un processeur 110 d'utilité générale et un processeur vectoriel 120. Le noyau de traitement 105 est connecté au restant du processeur multimédia 100 par un sous-système d'antémémoire 130, qui contient des SRAM 160 et 190, une ROM 170 et un contrôle d'antémémoire 180. Le contrôle d'antémémoire 180 peut configurer la SRAM 160, comme une antémémoire d'instructions 162 et une antémémoire de données 164 pour le processeur 110, et configurer la SRAM 190 comme une antémémoire d'instructions 192 et une antémémoire
de données 194 pour le processeur vectoriel 120.
Une ROM 170 sur puce contient des données et des instructions pour les processeurs 110 et 120, et elle peut également être configurée comme une antémémoire. Dans l'exemple de mode de réalisation, la ROM 170 contient: des processus de remise à l'état initial et d'initialisation; des processus de diagnostic d'auto-test; des manipulateurs d'interruption et d'exception, et des sous-routines pour l'émulation du programmateur; des sous-routines pour le traitement de signaux du modem V.34; les fonctions de téléphonie générale; des bibliothèques de sous-routines graphiques 1D et 3D; et des bibliothèques de sous-routines pour les standards audio et vidéo, comme MPEG-1, MPEG-2,
H.261, H.263, G.728 et G.723.
Le sous-système d'antémémoire 130 connecte les processeurs 110 et 120 à deux bus de système 140 et 150 et fonctionne à la fois comme une antémémoire et une station de commutation pour les processeurs 110 et 120 et les dispositifs couplés aux bus 140 et 150. Le bus 150 du système fonctionne à une plus haute fréquence d'horloge que le bus 140 et il est connecté à un contrôleur de mémoire 158, une interface de bus local 156, un contrôleur de DMA 154 et une interface de dispositif 152 qui, respectivement, forment des interfaces pour une mémoire locale externe, un bus local d'un ordinateur hôte, les accès directs à une mémoire et divers convertisseurs analogiques à numériques et numériques à analogiques. Au bus 140 sont connectés un temporisateur du système 142, un UART 144 (émetteur récepteur asynchrone universel), un processeur 146 de train de bits et un contrôleur d'interruption 148. Les demandes de brevet incorporées ci-dessus, intitulées "Multiprocessor Operation in a Multimedia Signal Processor" et "Methods and Apparatus for Processing Video Data" décrivent mieux le fonctionnement du sous-système d'antémémoire 130 et les exemples de dispositif auxquels les processeurs 110 et 120 ont accès, par
le sous-système d'antémémoire 130 et les bus 140 et 150.
Les processeurs 110 et 120 exécutent des chemins séparés de programme, sont différents par leur structure pour l'exécution plus efficace de tâches particulières qui leur sont assignées. Le processeur 110 est principalement pour des fonctions de contrôle comme l'exécution d'un système de fonctionnement en temps réel et fonctions similaires ne nécessitant pas de grands nombres de calculs répétitifs. En conséquence, le processeur 110 ne nécessite pas une forte puissance de calcul et il peut être réalisé en utilisant une
architecture de processeur conventionnel d'utilité générale.
Le processeur vectoriel 120 accomplit pour la plus grande part un certain nombre d'écrasements qui impliquent des opérations répétitives sur des blocs de données courantes dans le traitement multimédia. Pour une forte puissance de calcul et une programmation relativement simple, le processeur vectoriel 120 a une architecture de SIMD (données multiples à une seule instruction); et dans l'exemple de mode de réalisation, la plupart des trajets de données dans le processeur vectoriel 120 ont soit 288 ou 576 bits de large, pour supporter la manipulation des données vectorielles. De plus, le groupe d'instructions pour le processeur vectoriel 120 comprend des instructions particulièrement
adaptées aux problèmes multimédia.
Dans l'exemple de mode de réalisation, le processeur 110 est un processeur RISC à 32 bits qui fonctionne à 40 MHz et se conforme à l'architecture d'un processeur ARM7 comprenant
un groupe de registres tel que défini par le standard ARM7.
Une architecture et un jeu d'instructions pour un processeur RISC de ARM7 sont décrits dans le "ARM7DM Data Sheet" Numéro de Document: ARM DDI 001OG qui est disponible auprès de Advance RISC Machines Ltd. La Feuille de Données de ARM7DM
est incorporée ici par référence dans sa totalité.
L'Appendice A décrit l'extension du groupe d'instructions
d'ARM7 dans l'exemple de mode de réalisation.
Le processeur vectoriel 120 manipule des quantités vectorielles et scalaires. Dans l'exemple de mode de réalisation, le processeur vectoriel de données se compose d'un moteur RISC à pipeline qui fonctionne à 80 MHz. Les registres du processeur vectorielle 120 comprennent des registres scalaires à 32 bits, des registres d'utilité spéciale à 32 bits, et deux rangées de registres vectoriels 288 et deux registres accumulateurs vectoriels double grandeur (i.e. 576 bits). L'Appendice C décrit le groupe de registres pour l'exemple de mode de réalisation du processeur vectoriel 120. Dans l'exemple de mode de réalisation, le processeur 120 comprend 32 registres scalaires qui sont identifiés dans les instructions par des numéros de registre à 5 bits allant de 0 à 31. Il y a également 64 registres vectoriels de 288 bits qui sont organisés en deux rangées de 32 registres vectoriels. Chaque registre vectoriel peut être identifié par un numéro de la rangée à 1 bit (0 ou 1) et un numéro du registre vectoriel à 5 bits allant de 0 à 31. La plus grande partie de l'instruction n'accède qu'au registre vectoriel dans une rangée courante, comme cela est indiqué par un bit de rangée de défaut CBANK stocké dans un registre de contrôle VCSR du processeur vectoriel 120. Un second bit de contrôle VCSR 64 indique si les numéros de registre par défaut identifient un registre vectoriel double grandeur comprenant un registre de chaque rangée. La syntaxe des instructions permet de faire la distinction entre les numéros de registre identifiant un registre vectoriel et les numéros de registre identifiant un
registre scalaire.
Chaque registre vectoriel peut être réparti en éléments de données de grandeur programmable. Le tableau 1 montre les types de données supportés pour des éléments de données dans
un registre vectoriel à 288 bits.
Tableau 1:
Type Donnée Grandeur Interpretation l____ _ donnée int8 8 bits 8 bits complément à 2 entre -128 (octet) et 127 int9 9 bits 9 bits complément à 2 entre -256 (octet 9) et 255 intl6 16 bits 16 bits complément à 2 entre (demi- mots) -32 768 et 32 767 int32 32 bits 32 bits complément à 2 entre _ _ (mot) -2147483648 et 2147483647 flottement 32 bits 32 bits format précision unique (mot) IEEE 754
L'appendice D donne de plus amples descriptions des grandeurs
des données et des types supportés dans l'exemple de mode de
réalisation de l'invention.
Pour le type de données int9, des octets de 9 bits sont tassés consécutivement dans un registre vectoriel à 288 bits, mais, pour les autres types de données, tous les neuvièmes bits d'un registre vectoriel à 288 bits sont inutilisés. Un registre vectoriel à 288 bits peut contenir 32 éléments de données entier 8 et 9 bits, 16 éléments de données entier de 16 bits ou 8 éléments de données entier ou à virgule flottante de 32 bits. De plus, deux registres vectoriels peuvent être combinés pour introduire les éléments de données dans un vecteur double grandeur. Dans l'exemple de mode de réalisation de l'invention, l'établissement d'un bit de contrôle VEC64 dans un registre de contrôle et d'état VCSR place le processeur vectoriel 120 en mode VEC64 o la double grandeur (576 bits)
est la grandeur de défaut des registres vectoriels.
Le processeur multimédia 100 contient également un groupe de registres étendus 115 à 32 bits qui sont accessibles aux deux processeurs 110 et 120. L'Appendice B décrit le groupe de registres étendus ainsi que leur fonction dans l'exemple de mode de réalisation de cette invention. Les registres étendus et les registres scalaires et d'utilité spéciale du processeur vectoriel 120 sont accessibles au processeur 110 dans certaines circonstances. Deux registres étendus, spéciaux à "l'utilisateur", ont deux ports de lecture pour permettre aux processeurs 110 et 120 de lire simultanément les registres. On ne peut accéder simultanément
à d'autres registres étendus.
Le processeur vectoriel 120 a deux états alternatifs VPRUN et VPIDLE qui indiquent si le processeur vectoriel 120 fonctionne ou est inactif. Le processeur 100 peut lire ou écrire les registres scalaires ou d'utilité spéciale du processeur vectoriel 120 quand le processeur vectoriel 120 est à l'état VPIDLE mais les résultats du processeur 110 lisant ou écrivant un registre du processeur vectoriel 120 alors que le processeur vectoriel 120 est à un
état VPRUN ne sont pas définis.
L'extension du groupe d'instructions de ARM7 pour le processeur 110 comprend des instructions qui accèdent aux registres étendus et aux registres scalaires ou d'utilité spéciale du processeur vectoriel 120. Les instructions MFER et MFEP déplacent respectivement les données d'un registre étendu et d'un registre scalaire ou d'utilité spéciale dans le processeur vectoriel 120 vers un registre général dans le processeur 110. Les instructions MTER et MTEP déplacent respectivement les données d'un registre général dans le processeur 110 à un registre étendu et un registre scalaire ou d'utilité spéciale dans le processeur vectoriel 120. Une instruction TESTSET à la fois lit un registre étendu et établit le bit 30 du registre étendu à 1. L'instruction TESTSET facilite la synchronisation utilisateur/producteur en établissant le bit 30 pour signaler au processeur 120 que le
processeur 110 a lu (ou utilisé) un résultat produit.
D'autres instructions pour le processeur 110 comme STARTVP et INTVP contrôle l'état de fonctionnement du processeur
vectoriel 120.
Le processeur 110 agit comme un processeur maître pour contrôler le fonctionnement du processeur vectoriel 120. En utilisant une division asymétrique du contrôle entre les processeurs 110 et 120, cela simplifie le problème de la synchronisation des processeurs 110 et 120. Le processeur 110 initialise le processeur vectoriel 120 en écrivant une adresse d'instruction à un compteur du programme pour le processeur vectoriel 120, tandis que le processeur vectoriel 120 est à l'état VP IDLE. Le processeur 110 exécute alors une instruction STARTVP qui fait passer le processeur vectoriel 120 à l'état VP_RUN. A l'état VP_RUN, le processeur vectoriel 120 extrait les instructions à travers un sous-système d'antémémoire 130 et exécute ces instructions en parallèle avec le processeur 110 continuant à exécuter son propre programme. Après départ, le processeur vectoriel 120 continue l'exécution jusqu'à ce qu'il rencontre une exception, exécutant une instruction VCJOIN ou VCINT avec une condition appropriée satisfaite ou étant interrompu par le processeur 110. Le processeur vectoriel 120 peut faire passer les résultats de l'exécution de programme vers le processeur 110 en écrivant les résultats dans un registre étendu en écrivant les résultats à l'espace d'adresse partagé des processeurs 110 et 120 ou en laissant le résultat dans un registre scalaire ou d'utilisation spéciale, auquel processeur 110 a accès quand le processeur vectoriel 120
entre à nouveau à l'état VP _IDLE.
Le processeur vectoriel 120 ne traite pas ses propres exceptions. Lors de l'exécution d'une instruction qui provoque une exception, le processeur vectoriel 120 entre à l'état VP _IDLE et signale une demande d'interruption par une ligne directe au processeur 110. Le processeur vectoriel 120 reste à l'état VP IDLE jusqu'à ce que le processeur 110 exécute une autre instruction STARTVP. Le processeur 110 est responsable de la lecture d'un registre VISCR du processeur vectoriel 120 pour déterminer la nature de l'exception, du traitement de l'exception éventuellement par réinitialisation du processeur vectoriel 120, puis de la direction du processeur vectoriel 120 pour reprendre l'exécution, si cela
est souhaitable.
Une instruction INTVP exécutée par le processeur 110 interrompt le processeur vectoriel 120, forçant le processeur
vectoriel 120 à entrer à l'état inactif VP IDLE.
L'instruction INTVP peut par exemple être utilisée dans un système multitâches pour commuter le processeur vectoriel de l'accomplissement d'une tâche comme un décodage vidéo à
d'autres tâches comme une émulation de carte son.
Les instructions du processeur vectoriel VCINT et VCJOIN sont des instructions de contrôle de circulation qui, si une condition indiquée par l'instruction est satisfaite, arrêtent l'exécution par le processeur vectoriel 120, placent le processeur vectoriel 120 à l'état VP IDLE et émettent une demande d'interruption pour le processeur 110, à moins que de telles demandes soient masquées. Le compteur de programme (registre VPC d'utilité spéciale) du processeur vectoriel 120 indique l'adresse d'instruction après l'instruction VCINT ou VCJOIN. Le processeur 110 peut vérifier un registre de source d'interruption VISRC du processeur vectoriel 120, pour déterminer si une instruction VCINT ou VCJOIN a provoqué la demande d'interruption. Comme le processeur vectoriel 120 a de grands bus de données et est plus efficace pour mettre en réserve et restaurer ses registres, le logiciel exécuté par le processeur vectoriel 120 doit mettre en réserve et restaurer les registres pendant la commutation de contexte. La demande de brevet incorporée ci-dessus, intitulée "Efficient Context Saving and Restoring in Multiprocessors", décrit un exemple
d'un système pour la commutation de contexte.
La figure 2 montre les blocs fonctionnels primaires de
l'exemple de mode de réalisation du processeur vectoriel 120.
Le processeur vectoriel 120 comprend une unité d'extraction d'instruction (IFU) 210, un décodeur 220, un planificateur 230, un trajet de données d'exécution 240 et une unité de charge/enregistrement (LSU) 250. IFU 210 extrait les instructions et traite les instructions de contrôle de circulation, comme les branchements. Le décodeur d'instruction 220 décode une instruction par cycle dans l'ordre d'arrivée de la IFU 210 et écrit des valeurs de zone décodées de l'instruction dans une FIFO dans le planificateur 230. Le planificateur 230 sélectionne les valeurs de zone qui sont émises vers les registres de contrôle d'exécution, comme cela est requis pour les stades d'exécution des opérations. La sélection de sortie dépend de la dépendance des opérandes et de la disponibilité des ressources de traitement, comme le trajet des données d'exécution 240, ou l'unité de charge/enregistrement 250. Le trajet de données d'exécution 240 exécute des instructions logiques/arithmétiques, qui manipulent les données vectorielles ou scalaires. L'unité de charge/enregistrement 250 exécute des instructions de charge/enregistrement qui
accèdent à l'espace d'adresse du processeur vectoriel 120.
La figure 3 donne un schéma blocs d'un mode de réalisation de la IFU 210 qui contient un tampon d'instructions qui est divisé en un tampon principal d'instructions 310 et un tampon secondaire d'instructions 312. Le tampon principal 310 contient huit instructions consécutives, comprenant l'instruction correspondant au compte du programme courant. Le tampon secondaire 312 contient les huit instructions qui suivent immédiatement les instructions dans le tampon 310. La IFU 210 comprend également un tampon cible de branchement 314 contenant huit instructions consécutives comprenant la cible de l'instruction de contrôle de circulation suivante dans le tampon 310 ou 312. Dans l'exemple de mode de réalisation, le processeur vectoriel 120 utilise un groupe d'instructions du type RISC, o chaque instruction a 32 bits de long et les tampons 310, 312 et 314 sont des tampons à 8x32 bits et ils sont connectés au sous-système d'antémémoire 130 par un bus d'instructions de 256 bits. LaIFU 210 peut charger huit instructions du sous-système d'antémémoire 130 dans tout tampon 310, 312 ou 314 dans un seul cycle d'horloge. Les registres 340, 342 et 344 indiquent respectivement les adresses de base pour les instructions chargées dans les
tampons 310, 312 et 314.
Un multiplexeur 332 sélectionne l'instruction courante d'un tampon principal d'instructions 310. Si l'instruction courante n'est pas une instruction du contrôle de circulation et qu'une instruction stockée dans le registre d'instructions 330 avance à un stade d'exécution de décodage, l'instruction courante est stockée dans un registre
d'instructions 330 et le compte du programme est incrémenté.
Après avoir été incrémenté, le compte du programme sélectionne la dernière instruction dans le tampon 310, le groupe suivant de huit instructions est chargé dans le tampon 310. Si le tampon 312 contient les huit instructions souhaitées, les contenus du tampon 312 et du registre 342 sont immédiatement déplacés au tampon 310 et au registre 340 et huit instructions de plus sont pré-extraites du système d'antémémoire 130 dans le tampon secondaire 312. Un additionneur 350 détermine l'adresse du groupe suivant d'instructions de l'adresse de base dans le registre 342 et un décalage sélectionné par un multiplexeur 352. L'adresse résultante de l'additionneur 350 est enregistrée dans le registre 342, pendant ou après le passage de l'adresse du registre 342 au registre 340. L'adresse calculée est également envoyée au sous-système d'antémémoire 130 avec la demande pour huit instructions. Si un appel précédent au système de contrôle d'antémémoire n'a pas encore fourni les huit instructions suivantes vers le tampon 312, comme cela est requis par le tampon 310, les instructions demandées au préalable sont immédiatement enregistrées dans le tampon 310
quand elles sont reçues du sous-système d'antémémoire 130.
Si l'instruction courante est une instruction de contrôle de circulation, IFU 210 traite l'instruction en évaluant une condition pour l'instruction de contrôle de circulation et en remettant au point le compte du programme à
la suite de l'instruction du contrôle de circulation.
L'IFU 210 est maintenue si la condition est indéterminée, parce qu'une instruction précédente, qui peut changer la condition, n'a pas abouti. Si un branchement n'est pas effectué le compteur du programme est incrémenté et l'instruction suivante est sélectionnée comme décrit ci-dessus. Si un branchement est effectué et que le tampon cible de branchement 314 contient la cible du branchement, les contenus du tampon 314 et du registre 344 sont déplacés au tampon 310 et au registre 340, donc la IFU 210 peut continuer à appliquer les instructions au décodeur 220 sans
attendre les instructions du sous-système d'antémémoire 130.
Pour pré-extraire les instructions du tampon cible de branchement 314, un scanner 320 explore les tampons 310 et 312 pour localiser l'instruction de contrôle de circulation suivante, suivant le compte du programme courant. Si une instruction de contrôle de circulation est trouvée dans le tampon 310 ou 312, le scanner 320 détermine le décalage par rapport à l'adresse de base du tampon 310 ou 312 contenant l'instruction à un groupe aligné de huit instructions comprenant l'adresse cible de l'instruction de contrôle de circulation. Des multiplexeurs 352 et 354 procurent le décalage par rapport à l'instruction du contrôle de circulation et l'adresse de base du registre 340 ou 342 à l'additionneur 350, qui génère une nouvelle adresse de base pour le tampon 314. La nouvelle adresse de base passe au sous-système d'antémémoire 130 qui produit subséquemment les huit instructions pour le tampon cible de
branchement 314.
Dans la manipulation des instructions de contrôle de circulation comme les instructions "décrément et branchement conditionnel" VD1CBR, VD2CBR et VD3CBR et l'instruction "changement registre contrôle" VCHGCR, l'IFU 210 peut changer les valeurs des registres en plus du compte du programme. Quand la IFU 210 trouve une instruction qui n'est pas une instruction de contrôle de circulation, cette instruction passe vers le registre d'instructions 330 et, de
là, au décodeur 220.
Le décodeur 220 décode une instruction en écrivant les valeurs de contrôle dans les zones d'un tampon 410 FIFO dans le planificateur 230, comme le montre la figure 4. Le tampon 410 FIFO contient quatre rangées de flip-flops, dont chacune peut contenir cinq zones d'information pour contrôler l'exécution d'une instruction. La rangée 0 à 3 contient l'information respectivement pour les instructions de la plus ancienne à la plus nouvelle et l'information dans le tampon 410 FIFO décale vers le bas jusqu'aux rangées inférieures quand l'information la plus ancienne est retirée en tant qu'instruction complète. Le planificateur 230 émet une instruction pour un étage d'exécution en sélectionnant les zones nécessaires de l'instruction à charger dans un tuyau de contrôle 420 comprenant des registres d'exécution 421 à 427. La plupart des instructions peuvent être planifiées pour une émission et une exécution sans ordre. En particulier, l'ordre des opérations logiques/arithmétiques relatives et des opérations de charge/enregistrement est arbitraire, à moins qu'il n'y ait des dépendances des opérandes entre les opérations de charge/enregistrement et des opérations logiques / arithmétiques. Les comparaisons des valeurs des zones dans le tampon 410 FIFO indiquent s'il existe des dépendances des opérandes. La figure 5A illustre un pipeline d'exécution à six étages ou stades pour une instruction qui accomplit une opération registre à registre sans accéder à l'espace d'adresse du processeur vectoriel 120. Dans un étage 511 d'extraction d'instruction, la IFU 210 extrait une instruction comme décrit ci-dessus. L'étage d'extraction nécessite un cycle d'horloge à moins que la IFU 210 ne soit retenue par un retard dans le pipeline, une condition de branchement non résolue ou un retard dans le sous-système
d'antémémoire 130 produisant les instructions pré-extraites.
Dans l'étage de décodage 512, le décodeur 220 décode l'instruction de la IFU 210 et écrit l'information pour l'instruction au planificateur 230. L'étage de décodeur 512 nécessite également un cycle d'horloge, à moins qu'aucune rangée dans la FIFO 410 ne soit disponible pour une nouvelle opération. L'opération peut être émise pour le tuyau de contrôle 420 pendant le premier cycle dans FIFO 410, mais peut être retardée par l'émission d'opérations plus anciennes. Le trajet de données d'exécution 240 accomplit des opérations registre à registre et procure des données et des adresses pour les opérations de charge/enregistrement. La figure 6A donne un schéma blocs d'un mode de réalisation du trajet de données d'exécution 240 et est décrite en conjonction avec les étages d'exécution 514, 515 et 516. Le registre d'exécution 421 produit des signaux identifiant deux registres dans un fichier de registres 610 qui sont lus dans un cycle d'horloge pendant le stade de lecture 514. Le fichier de registres 610 comprend 32 registres scalaires et 64 registres vectoriels. La figure 6B donne un schéma blocs du fichier de registres 610. Le fichier de registres 610 a deux ports de lecture et deux ports d'écriture pour permettre jusqu'à deux lectures et deux écritures à chaque cycle d'horloge. Chaque port comporte un circuit de sélection 612, 614, 616 ou 618 et un bus de données à 288 bits 613, 615, 617 ou 619. Les circuits de sélection, tels que les circuits 612, 614, 616 et 618, sont bien connus et utilisent un signal d'adresse WRADDR1, WRADDR2, RDADDR1 OU RDADDR2, que le décodeur 220 dérive d'un numéro de registre à 5 bits qui est typiquement extrait d'une instruction, d'un bit de rangée du registre d'état de contrôle ou d'instructions VCSR et d'une syntaxe d'instructions qui indiquent si les registres sont des registres vectoriels ou des registres scalaires. La donnée lue peut être acheminée par le multiplexeur 656 vers l'unité de charge/enregistrement 250 ou par les multiplexeurs 622 et 624, par un multiplicateur 620, une unité logique arithmétique 630 ou un accumulateur 640. La plupart des opérations lisent deux registres et le stade de lecture 514 est terminé en un cycle. Cependant, certaines instructions, comme l'instruction de multiplication et d'addition VMAD et des instructions qui manipulent des vecteurs double grandeur, nécessitent des données de plus de deux registres, donc le stade de lecture 514 est plus long qu'un cycle d'horloge. Pendant le stade d'exécution 515, le multiplicateur 620, l'unité logique/arithmétique 630 et l'accumulateur 640
traitent les données déjà lues du fichier de registres 610.
Le stade d'exécution 515 peut recouvrir le stade de lecture 514 si un cycle multiple est requis pour lire la donnée nécessaire. La durée du stade d'exécution 515 dépend du type d'éléments de données (entier ou virgule ou point flottant) et de la quantité (nombre de cycles de lecture) des données traitées. Les signaux de registre d'exécution 422, 423 et 425 contrôlent l'entrée de données vers l'unité logique/arithmétique 630, l'accumulateur 640 et le multiplicateur 620 pour les premières opérations accomplies pendant le stade d'exécution. Les signaux des registres d'exécution 432, 433 et 435 contrôlent les secondes opérations accomplies pendant le stade
d'exécution 515.
La figure 6C donne un schéma blocs d'un mode de réalisation du multiplicateur 620 et de l'ALU 630. Le multiplicateur 620 est un multiplicateur d'entier qui
contient huit multiplicateurs indépendants de 36x36 bits.
Chaque multiplicateur 626 contient quatre multiplicateurs de 9x9 bits qui sont connectés ensemble par un ensemble de circuits de contrôle. Pour la grandeur d'élément de données de 8 bits et 9 bits, les signaux de contrôle du planificateur 230 déconnectent les quatre multiplicateurs de 9x9 bits les uns des autres, de manière que chaque multiplicateur 626 accomplisse quatre multiplications et que le multiplicateur 620 accomplisse 32 multiplications indépendantes pendant un cycle. Pour les éléments de données à 16 bits, l'ensemble de circuits de contrôle connecte les paires de multiplicateurs de 9x9 bits pour fonctionner ensemble et le multiplicateur 620 accomplit 16 multiplications en parallèle. Pour le type d'élément de données entier à 32 bits, huit multiplicateurs 626 accomplissent 8 multiplications en parallèle par cycle d'horloge. Les résultats d'une multiplication donnent 576 bits pour une grandeur d'élément de données de 9 bits et 512 bits pour les autres grandeurs de données. ALU 630 peut traiter le résultat obtenu de 276 bits
ou 512 bits du multiplicateur 620 en deux cycles d'horloge.
ALU 630 contient huit ALU indépendantes 636 de 36 bits.
Chaque ALU 636 contient une unité à point flottant de 32x32 bits pour des additions et multiplications à point flottant. Des éléments de circuit additionnels réalisent les
fonctions de décalage d'entiers, arithmétiques et logiques.
Pour des manipulations d'entiers, chaque ALU 636 contient quatre unités capables de manipulations indépendantes sur huit bits et neuf bits et est capable d'être enchaînée en groupes de deux ou quatre pour des éléments de données
entier à 16 bits et 32 bits.
L'accumulateur 640 accumule les résultats et comprend deux registres de 576 bits pour une précision supérieure des
résultats intermédiaires.
Pendant le stade d'écriture 516, les résultats du stade
d'exécution sont stockés dans le fichier de registres 610.
Deux registres peuvent être écrits pendant un seul cycle d'horloge, et les multiplexeurs d'entrée 602 et 605 sélectionnaient deux valeurs de données à écrire. La durée du stade d'écriture 516 pour une opération dépend de la quantité de données à écrire par suite de l'opération et de la compétition de la LSU 250 qui peut accomplir une instruction de charge en l'écrivant dans le fichier de registres 610. Les signaux des registres d'exécution 426 et 427 sélectionnent le registre dans lequel est écrite la donnée de l'unité logique 630, de
l'accumulateur 640 et du multiplicateur 620.
La figure 5B montre un pipeline d'exécution 520 pour l'exécution d'une instruction de charge. L'étage d'extraction d'instruction 511, l'étage de décodage 512 et l'étage d'émission 513 pour le pipeline d'exécution 520 sont les mêmes que ceux décrits pour une opération registre à registre. L'étage de lecture 514 est également le même que décrit ci-dessus, à l'exception que le trajet de données d'exécution 240 utilise les données du fichier de registres 610 pour déterminer une adresse pour un appel au sous-système d'antémémoire 130. Dans l'étage d'adresse 525, des multiplexeurs 652, 654 et 656 sélectionnent l'adresse qui est appliquée à l'unité de charge/enregistrement 250 pour les étages d'exécution 526, 527. L'information pour l'opération de charge reste dans FIFO 410 pendant les stades 526 et 527, alors que l'unité de
charge/enregistrement 250 traite l'opération.
La figure 7 montre un mode de réalisation de l'unité de charge/enregistrement 250. Pendant le stade 256, un appel est fait au sous-système d'antémémoire 130 pour la donnée de l'adresse déterminée à l'étage 525. Cet exemple de réalisation utilise des appels d'antémémoire basés sur une transaction, o des dispositifs multiples comprenant des processeurs 110 et 120 peuvent accéder à l'espace d'adresse local par le sous-système d'antémémoire 130. La donnée requise peut ne pas être disponible pendant plusieurs cycles après un appel au sous-système d'antémémoire 130, mais l'unité de charge/enregistrement 250 peut effectuer des appels au sous-système d'antémémoire, alors que d'autres appels sont en cours. En conséquence, l'unité de charge/enregistrement 250 n'est pas retenue. Le nombre de cycles d'horloge requis pour que le soussystème d'antémémoire 130 produise la donnée requise dépend du fait qu'il y a une correspondance ou une absence d'information
dans l'antémémoire de données 194.
A l'étage d'entraînement 527, le sous-système d'antémémoire 130 revendique un signal de données pour l'unité de charge/enregistrement 250. Le sous-système d'antémémoire 130 peut produire 256 bits (32 octets) de
données par cycle pour l'unité de charge/enregistrement 250.
Un aligneur d'octets 710 aligne chacun des 32 octets dans un emplacement de stockage correspondant de 9 bits, pour produire une valeur de 288 bits. Le format de 288 bits est commode pour des applications multimédia, comme un codage et un décodage MPEG qui, quelquefois, emploient des éléments de données de 9 bits. La valeur de 288 bits est écrite dans un tampon de données de lecture 720. Pour l'étage d'écriture 528, le planificateur 230 transfère la zone 4 du tampon 410 FIFO au registre d'exécution 426 ou 427 pour écrire la quantité de 288 bits du tampon de données 720 dans
le fichier de registres 610.
La figure 5C montre un pipeline d'exécution 530 pour l'exécution d'une instruction d'enregistrement. L'étage d'extraction d'instruction 511, l'étage de décodage 512 et l'étage d'émission 513 pour le pipeline d'exécution 530 sont les mêmes que décrits ci-dessus. L'étage de lecture 514 est également le même que décrit ci-dessus, à l'exception que l'étage de lecture lit les données à enregistrer et les données pour les calculs d'adresse. La donnée à enregistrer est écrite dans le tampon de données d'écriture 730 dans l'unité de charge/enregistrement 250. Des multiplexeurs 740 convertissent la donnée qui est sous un format produisant des octets de 9 bits en un format conventionnel ayant des octets de 8 bits. La donnée convertie du tampon 730 et l'adresse associée de l'étage de calcul d'adresse 525 sont envoyées en parallèle au sous-système d'antémémoire 130
pendant le stade de SRAM 536.
Dans l'exemple de mode de réalisation de processeur vectoriel 120, chaque instruction a 32 bits de long et a l'un des neuf formats montrés à la figure 8 marqués REAR, REAI, RRRM5, RRRR, RI, CT, RRRM9, RRRM9* et RRRM9**. L'Appendice E décrit le groupe d'instructions pour
le processeur vectoriel 120.
Certaines opérations de charge, enregistrement et antémémoire, qui utilisent des registres scalaires lors de
la détermination d'une adresse effective ont le format REAR.
Les instructions au format REAR sont identifiées par les bits 29-31 comme étant 000b et ont trois opérandes identifiés par deux numéros de registre SRb et SRi pour les registres scalaires et un numéro de registre Rn d'un registre qui peut être un registre scalaire ou vectoriel selon un bit D. Un bit de rangée B soit identifie une rangée pour le registre Rn ou bien indique si le registre vectoriel Rn est un registre vectoriel double grandeur si la grandeur du registre du vecteur de défaut est double. Une zone Op-code, Opc, identifie l'opération accomplie sur les opérandes et une zone TT indique un type de transfert comme charge ou enregistrement. Une instruction au format REAR typique est l'instruction VL qui charge le registre Rn à partir d'une adresse déterminée en ajoutant les contenus des registres scalaires SRb et Sri. Si un bit A est établi, l'adresse calculée est enregistrée dans le registre
scalaire SRb.
Les instructions au format REAI sont les mêmes que les instructions REAR, à l'exception qu'une valeur immédiate de 8 bits de la zone IMM est utilisée à la place des contenus du registre scalaire SRi. Les formats REAR et REAI
n'ont pas de zone à la grandeur de l'élément de données.
Le format RRRM5 est pour des instructions ayant deux opérandes de source et un opérande de destination. Ces instructions ont soit trois opérandes de registre ou deux opérandes de registre et une valeur immédiate de 5 bits. Un codage des zones D, S et M, comme le montre l'Appendice E, détermine si le premier opérande de source Ra est un registre scalaire ou vectoriel; si le second opérande de source Rb/IM5 est un registre scalaire, un registre vectoriel ou une valeur immédiate à 5 bits; et si le registre de destination Rd est un registre scalaire ou vectoriel. Le format RRRR est pour des instructions ayant quatre opérandes de registre. Les numéros de registre Ra et Rb indiquent les registres de source. Le numéro de registre Rd indique un registre de destination et le numéro de registre Rc indique soit un registre de source ou de destination selon Opc de la zone. Tous les opérandes sont des registres vectoriels à moins que le bit S ne soit établi pour indiquer que le registre Rb est un registre scalaire. La zone DS indique la grandeur de l'élément de données pour les registres vectoriels. La zone Opc sélectionne le type de
données pour des éléments de données à 32 bits.
Une instruction au format RI charge une valeur immédiate dans un registre. La zone IMM contient une valeur immédiate pouvant atteindre 18 bits. Le numéro de registre Rd indique le registre de destination qui est soit un registre vectoriel dans la rangée courante, soit un registre scalaire selon le bit D. Les zones DS et F indiquent respectivement une grandeur d'élément de données et un type. Pour des éléments de données entiers à 32 bits, la valeur immédiate de 18 bits est étendue au signe avant d'être chargée dans le registre Rd. Pour des éléments de données à point flottant, le bit 18, les bits 17 à 10 et les bits 9 à O indiquent respectivement le signe, l'exposant
et la mantisse d'une valeur à point flottant de 32 bits.
Le format CT est pour les instructions du contrôle d'écoulement et comprend une zone de code-op, Opc, une zone
de condition, Cond, et une valeur immédiate de 23 bits, IMM.
Un branchement est pris quand une condition indiquée par la zone de condition est vraie. Les codes possibles de condition sont "toujours", "moins que", "égal", "moins que ou égal", "plus grand que", "non égal", "plus grand que ou égal" et "débordement". Les bits GT, EQ, LT et SO dans le registre d'état et de contrôle VCSR sont utilisés pour
évaluer les conditions.
Le format RRRM9 prévoit soit trois opérandes de registre soit deux opérandes de registre et une valeur immédiate de 9 bits. Une combinaison des bits D, S et M indique lesquels des opérandes sont des registres vectoriels, des registres scalaires ou des valeurs immédiates à 9 bits. La zone DS indique une grandeur d'élément de données. Les formats RRRM9* et RRRM9** sont des cas spéciaux du format RRRM9 et distingués par la zone de code-Op Opc. Le format RRRM9* remplace un numéro de registre
de source Ra par un code de condition Cond et une zone ID.
Le format RRRM9** remplace les bits de poids fort de la valeur immédiate par un code de condition Cond et un bit K.
Une plus ample description de RRRM9 et RRRM9** est donnée à
l'Appendice E, pour ce qui concerne l'instruction de mouvement conditionnel VCMOV, les instruction de mouvement conditionnel avec le masque d'élément CMOVM et de
comparaison et d'établissement du masque CMPV.
APPENDICE A
Dans l'exemple de mode de réalisation, le processeur 110 est un processeur d'utilité générale qui est en accord avec le standard pour un processeur ARM7. On peut se référer à un document d'architecture d'ARM ou à la Feuille de Données de ARM7 (document numéro ARM DDI 0020C,
publié en décembre 1994) pour la description des registres
dans l'ARM7.
Pour coopérer avec le processeur vectoriel 120, le processeur 110: démarre et arrête le processeur vectoriel; teste l'état du processeur vectoriel, comprenant la synchronisation; transfère les données d'un registre scalaire/ d'utilité spéciale dans le processeur vectoriel 120 à un registre général dans le processeur 110; et transfère les données d'un registre général à un registre
scalaire/d'utilisation spéciale d'un processeur vectoriel.
Il n'y a pas de moyen direct de transfert entre un registre
général et un registre vectoriel d'un processeur vectoriel.
De tels transferts nécessitent une mémoire intermédiaire.
Le tableau A.1 décrit l'extension au groupe d'instructions d'ARM7 pour les interactions du processeur vectoriel. Tableau A.1: Extension du groupe d'instructions d'ARM7 Instruction Résultat STARTVP Cette instruction force le processeur vectoriel à entrer dans l'état VP _RUN mais n'a pas d'effet si le processeur vectoriel est déjà à l'état VP _RUN. STARTVP est réalisée en tant que classe d'opération de données de processeur (CDP) dans l'architecture de ARM7. Aucun résultat n'est recommuniqué à ARM7 et ARM7 continue son exécution. INTVP Cette instruction force le processeur vectoriel à entrer dans l'état VP _IDEL mais n'a pas d'effet si le processeur vectoriel est déjà à l'état VPIDLE. INTVP est réalisée en tant que classe d'opération (CDP) de données du processeur dans l'architecture de ARM7. Aucun résultat n'est recommuniqué à ARM7 et ARM7 continue son exécution. TESTSET Cette instruction lit un registre étendu à l'utilisateur et établit le bit 30 du registre à 1 pour produire un type de synchronisation producteur/consommateur entre les processeurs vectoriel et de ARM7. TESTSET est réalisée en tant que classe de transfert de registre du processeur (MRC) dans l'architecture de ARM7. L'ARM7 est à l'arrêt jusqu'à ce que l'instruction soit
exécutée (le reqistre est transféré).
MFER Passe e'un registre étendu à un registre général de ARM. MFER est réalisée en tant que classe de transfert de registre du
processeur (MRC) dans l'architecture de ARM7.
ARM7 est à l'arrêt jusqu'à ce que l'instruction soit exécutée (le registre est transféré). MFVP Passe d'un registre scalaire/d'utilité spéciale du processeur vectoriel à un registre général de ARM7. Contrairement aux autres instructions de ARM7, cette instruction doit être exécutée uniquement lorsque le processeur vectoriel est à l'état VP _IDLE. Le résultat est autrement non défini. MFVP est réalisée en tant que classe de transfert du registre du processeur (MRC) dans l'architecture de ARM7. ARM7 est à l'arrêt jusqu'à ce que l'instruction soit
exécutée (le reqistre est transféré).
Instruction Résultat MTER Passe à un registre étendu à partir d'un registre général de ARM7. MTER est réalisé en tant que classe de transfert du registre du coprocesseur (MCR) dans l'architecture de ARM7. ARM7 est à l'arrêt jusqu'à ce que l'instruction soit exécutée (le registre est transféré). MTVP Passe à un registre scalaire/d'utilité spéciale du processeur vectoriel à partir d'un registre général de ARM7. Contrairement aux autres instructions de ARM7, cette instruction ne doit être attendue que lorsque
le processeur vectoriel est à l'état VPIDLE.
Le résultat est autrement non défini. MTVP est réalisé en tant que classe de transfert du registre du coprocesseur (MCR) dans l'architecture de ARM7. ARM7 est à l'arrêt jusqu'à ce que l'instruction soit
exécutée (le registre est transféré).
CACHE Produit la gestion du logiciel de
l'antémémoire de données de ARM7.
PFTCH Pré-extrait une ligne d'antémémoire dans
l'antémémoire de données de ARM7.
WBACK Réécrit une ligne d'antémémoire de l'antémémoire de données de ARM7 dans la mémoire. Le tableau A.2 donne la liste des exceptions de ARM7, qui sont détectées et rapportées avant exécution de l'instruction défaillante. L'adresse du vecteur d'exception
est donnée en notation hexadécimale.
Tableau A.2: Exceptions de ARM7
Vecteur d'exception Description
OxOOOO00000000 Remise Etat Initial ARM7 0x00000004 Exception Instruction Non Définie ARM7 0x00000004 Exception Processeur Vectoriel Non Disponible 0x00000008 Interruption Logiciel ARM7 OxOOO0000000C Exception Seule Etape ARM7 OxOOO0000000C Exception Point de Rupture Adresse Instruction ARM7 OxO0000010 Exception Point de Rupture Adresse Donnée ARM7 OxO0000010 Exception Point de Rupture Adresse Donnée Incorrecte ARM7 Ox00000018 Exception Violation Protection ARM7 Ce qui suit décrit la syntaxe de l'extension au groupe d'instructions de ARM7. Se référer à un document d'architecture de ARM ou à la feuille de Données de ARM7 (document numéro ARM DDI 0020C, publié en
décembre 1994) pour une description de la nomenclature et
les formats d'instruction.
L'architecture de ARM offre trois formats d'instructions pour une interface avec un coprocesseur: 1. opérations pour des données de coprocesseur (CDP) 2. transferts pour des données de coprocesseur
(LDC,STC)
3. Transferts registre au processeur (MRC, MCR) Les extensions d'architecture de MSP utilisent les trois formes. Le format des opérations de données du coprocesseur (CDP) est utilisé pour les opérations qui ne
nécessitent pas une recommunication avec ARM7.
Format CDP
25 20 15 10 5 0
IiI I i II i I I I I i I iCond 11I0IPIUIUN1WILI Rn 1 CRn I CP# I décalage I
I '
X I I! I]I I [! I |
Les zones dans le format CDP ont les conventions suivantes: Zone Siqnification Cond Zone condition. Cette zone spécifie la condition
dans laquelle l'instruction doit être exécutée.
Opc Code fonctionnement coprocesseur.
CRn Registre opérande coprocesseur.
CRd Reqistre destination coprocesseur.
CP# Numéro coprocesseur. Les numéros suivants de coprocesseur sont couramment utilisés: 1111 - antémémoire données de ARM7 0111 - processeur vectoriel, registres étendus
CP Information coprocesseur.
CPm Registre opérande coprocesseur.
Le format de transfert de données du coprocesseur (LDC, STC) est utilisépour charger ou enregistrer un sous- groupe de registres du processeur vectoriel directement dans la mémoire. Le processeur de ARM7 est responsable de la fourniture de l'adresse du mot et le processeur vectoriel fournit ou accepte les données et contrôle le nombre de mots transférés. Se référer à la
Feuille de Données de ARM7 pour plus de détails.
Format LDC, STC
2 20 15 10 5 0
I i I i I I I i i I I I I I I I I 1 i 1 1 1 i l I i I i I i i I I I I I t I I it Cond 11 1I0 -,?I NWI Rn W CRL CP#n décalage I I I IIi i I I I I i I 1 1 I i r Les zones aans ie format ont les conventions suivantes Zone Signification Cond Zone condition. Cette zone spécifie la condition
dans laquelle l'instruction doit être exécutée. P Bit indexage pré/post.
U Bit haut/bas. N Longueur transfert. Comme il n'y a pas suffisamment de bits dans la zone CRd, le bit N est utilisé comme partie de l'identificateur du registre de source ou
de destination. I W Bit réécriture.
L Bit charge/enregistrement. Rn Registre de base. CRn Registre source/destination coprocesseur. CP# Numéro coprocesseur. Les numéros suivants de coprocesseur sont couramment utilisés: 1111-antémémoire données ARM7 0111-registres étendus, processeur vectoriel
Offset Décalaqe immédiat 8 bits sans signe.
* Le format de transfert de registre du coprocesseur (MRC, MCR) est utilisé pour communiquer l'information directement entre ARM7 et le processeur vectoriel. Ce format est utilisé pour un déplacement entre un registre de ARM7 et un registre scalaire ou d'utilité
spéciale du processeur vectoriel.
Format MRC, MCR
25 20 15 10 5 0
I II I I I,, I I ir I I I I I I I I I I i I I I lCond IlllICI0 Opc IL CRn Rd I CP# I CP 111 CRm i i i.i I I. I Les zones dans le format ont les conventions suivantes: Zone Signification Cond Zone condition. Cette zone spécifie la condition
dans laquelle l'instruction doit être exécutée.
Opc Code opération coprocesseur.
L Bit charge/enregistrement.
L=O signifie passage au processeur vectoriel L=1 signifie passage du processeur vectoriel CRn:Crm Registre source/destination coprocesseur. On
n'utilise que CRn<l:O>:CRm<3:0>.
Rd Registre source/destination ARM.
CP# Numéro coprocesseur. Les numéros suivants de coprocesseur sont couramment utilisés: 1111 - antémémoire données ARM7 0111 - registres étendus, processeur vectoriel
CP Information coprocesseur.
DESCRIPTION INSTRUCTIONS ETENDUES ARM
Les instructions étendues de ARM sont décrites par
ordre alphabétique.
ANTEMEMOIRE Opération antémémoire Format
25 20.5 -0 5 0
I l li" 1 1 1 1 1 1 l i I I I i L DCJ i J iI j i I I, ' I I I I i ' STC lCond III0IPIUIOIWIOI PRW, Ozc [ 1 décalage
I, I JI I I I I!
Syntaxe Assembleur STC{cond} pl5, cOpc, <adresse> CACHE{cond} Opc, <adresse> o cond = {eq, he, cs, cc, mi, pl, vs, vc, hi, Is, ge, It, gt, le, ai, nv} et Opc = {0, 1, 3}. Noter que, comme la zone CRn du format LDC/STC est utilisé pour spécifier Opc, la représentation décimale du code op doit être précédée par la lettre ' c ' (i.e. utiliser cO au lieu de O) dans la première syntaxe. Se référer à la Feuille de Données de ARM7 pour la syntaxe de mode d'adresse.
Description
Cette instruction est exécutée uniquement si Cond est vraie. Opc<3:0> spécifie les opérations suivantes: Opc<3:0> Siqnification 0000 Réécrire et invalider la ligne sale d'antémémoire spécifiée par EA. Si la ligne d'adaptation contient des données propres la ligne est invalidée sans la réécriture. Si l'on ne trouve aucune ligne d'antémémoire contenant EA, l'antémémoire de
données reste intacte.
0001 Réécrire et invalider la ligne sale d'antémémoire spécifiée par l'indice de EA. Si la ligne d'adaptation contient des données propres, la ligne
est invalidée sans la réécriture.
Utilisé par les instructions PFTCH et WBACK.
0011 Invalider la ligne d'antémémoire spécifiée par EA.
La ligne d'antémémoire est invalidée (sans
réécriture même si la ligne est sale).
C'est une opération privilégiée et provoquant une Violation de la Protection de ARM7 si elle est
tentée en mode utilisateur.
* Autres Réservé.
Opération Se référer à la Feuille de Données de ARM7 pour la
façon dont on calcule EA.
Exception
Violation de la Protection de ARM7.
INTVP Interruption Processeur Vectoriel Format
25 20 15 10 5 O
tl t lt l"l I if i ll llitt 111 11 l t-..
CDP lCond 111111101 00011 i J 0111 loi l t IIII I I I I III I! I!I l l l 1 tI Syntaxe Assembleur CDP{cond} p7, 1, cO, cO, co INTVP{cond} o cond = {eq, ne, cs, cc, mi, pl, vs, vc, hi, ls, ge, lt, gt, le, al, ns}
Description
Cette instruction n'est exécutée que si Cond est vraie.
Cette instruction signale au processeur vectoriel qu'il doit s'arrêter. ARM7 continue à exécuter l'instruction suivante sans attendre que le processeur vectoriel s'arrête. Une boucle occupé-attente MFER devrait être utilisée pour voir si le processeur vectoriel s'est arrêté après exécution de cette instruction. Cette instruction n'a pas d'effets si le processeur vectoriel est déjà à
l'état VPIDLE.
Les bits 19:22, 7:15 et 3:0 sont réservés.
Exception
Processeur vectoriel non disponible.
MFER Passer du Registre Etendu Format 3 25f_20 _5 10 5 0
j; I i i-rl] r jI jj j j j j--Tj-
MCR |Cond 11i;ilj0 010 1l PI Rd. 0!i t ERI I Ijl jf ' 'j '
I I I [
Syntaxe Assembleur MRC{cond} p7, 2, Rd, cP, cER, 0 MFER {cond} Rd, RNAME o cond = {eq, he, cs, cc, mi, pl, rs, vc, hi, ls, ge, lt, gt, le, al, nv}, Rd = {rO,..r15}, P={0, 1}, ER = {0,..15} et RNAME se rapporte à la mnémonique du registre spécifiée par l'architecture (i.e., PERO ou CSR).
Description
Cette instruction n'est exécutée que si Cond est vrai.
Le registre Rd de ARM7 est déplacé du registre ER étendu spécifié avec P:ER<3:0>, comme le montre le tableau ci-dessous. Se référer à la Section 1.2 pour
des descriptions de registres étendus.
ER<3:0> P = 0 P = 1
0000 UERO PERO
0001 UER1 PER1
UER2 PER2
0011 UER3 PER3
UER4 PER4
0101 UER5 PER5
UER6 PER6
0111 UER7 PER7
1000 UER8 PER8
1001 UER9 PER9
1010 UERl0 PERi0 1011 UERll PERil 1100 UERl2 PER12 1101 UERl3 PER13
1110 UER14 PER14
1111 UERl5 PER15
Bits 19:17 et 7:5 réservés.
Exception Violation de la protection lors d'une tentative d'accès
à PERx en mode d'utilisateur.
(SIdS-O0S) TGTIoDoA znassaoozd np aTTDoads aTTTFInP sa.lST6a Sal Tnod SI npln aie;qi es snossap-FTo aauow qsa TaToqaA anassaooad np sa4sFTfl sap aP1dp5odoI erl À saAUasa quos <z:E>uUD anb TSUT S::L SqTq Sa À saIsTba sep sqaajsuzaq sal inod IaTIOoIDA znassaoood np azsT6al ap oaewnu np UOTe4oa;3eI znod E'gú' uOT;o4S PI ? zGzga GS '<0: ú:> urdO:<0:T>uUO iaToqDoA jnassaoood np aGTelUos/aGIToGds gqTlTqn,p GZISTaia np assed Lf ap PU eZsTbGl GU À eTlA qsG puoO TS anb aeGnoexa qsa,u UoTqonasuT aqaD UOTIdTIOSaG (SDA no OdS!'a'T) aInoDeTt, IT zed eT3TDGds aqSTb5i np enbTuowmuw eT ? a4i=oddse as svNH ara { *o'... 0o}=.D {GIo''''0o})=uzo '{1z'' '0*}7=PU '{Au Te" If 4j5 'i4I as 'sI 'Tq 'OA 'SA 'Id 'JT 'oo 'sz 'au 'ba} = puoD no 4VfN'Pd {pUOD} dA]i4 0.uI3d'UiD'Pu,'Ld {puoo}D{X InalquIassv axeuÀs _, I Il I I I l l i i I Ii i II I.I IIIp1 I O I I Ipu Ii ED iT iI I II IT 2III! I I I I I I sI I I I iaToo1aA znassaZooI np zassra tAS5 *À qTuOdSTPUT ITO:OaDA infssaooi uoT ldaox À IouúT qsa ua anTaoa aun q soiez ap SDTq Zú awOD SnoEno 4 qT1 es OuS SIS! O dS îVaS gluS TITI IHISt0 ds 06SS 6 IHS 0111 ú1Esvu Ods 6 ZUS ú>1ES 1011 ZIHSH 06oS 8ZuS ZIuS 0011 IIiSVH Ods L Z1S lis IO O0IHSH odS 9 z1S 0IS 0101 6uSv 0dS __S 6MS 1001 8HSkr 0 aS >ZUS 8 Su 0001 LeSv Od0S Ez$s LUS 1110 9uSv> d0S ZHS 9HS 0110 USVUf 0oas IZus gSS 1010 Hsf Oas Oz1s ffS 0010 ú>S1f oas 6IHS úeS 1100 zs_ 0oas 8IHS ZES 0100 Ilufs oas LIHS IlS 1000 ousv> oas 9lus Ous 0000iii=<o: >uo 0i=<0:i>ul>o io=<o: I>U oo00=<o: I>uuo <o: F>NU7 6c 0ú9ZSZz MTER Passer à Registre Etendu Format
25 20:5 I0 0
MCR oCondfl10l 0_0, PI Rd 01l111l ER, p 1[ I Iz il Syntaxe Assembleur MRC{cond} p7, 2, Rd, cP, cER, 0 MFER{cond} Rd, RNAME o cond = {eq, he, cs, cc, mi, pl, rs,vc,hi, ls,ge, lt, gt, le, al, nv}, Rd = {rO,...r15}, p={0, 1}, ER = {0,..15} et RNAME se rapporte à la mnémonique du registre spécifiée dans l'architecture (i.e., PERO ou CSR)
Description
Cette instruction n'est exécutée que si Cond est vraie.
Le registre Rd de ARM7 passe du registre étendu spécifié ER avec P:ER<3:0>, comme le montre le tableau ci-dessous.
ER<3:0> P = 0 P = 1
0000 UER0 PER0
0001 UER1 PERi
UER2 PER2
0011 UER3 PER3
UER4 PER4
0101 UER5 PER5
UER6 PER6
0111 UER7 PER7
1000 UER8 PER8
1001 UER9 PER9
1010 UER10 PER10
1011 UERll PERll
1100 UER12 PER12
1101 UER13 PER13
1110 UER14 PER14
1111 UER15 PER15
Les bits 19:17 et 7:5 sont réservés.
Exception Violation de la protection lorsque l'on tente d'accéder
à PERx en mode d'utilisateur.
MTVP Passer à Processeur Vectoriel Format
25 20 15 10 5 O
"' I I I II ' iI I ' t]' i "T I
M R CIi i iI I L I, I i I\ I I I I I I-
MCR -Cond 11111101 0!o0 1l CRn Rd 1 0111 1 CRm M I I-IIj I 1 I I I f I l I I] I, 1.....f , - !. I Syntaxe Assembleur MRC{cond} p7.1.Rd.Crn.CRm.0 MFVP{cond} Rd. RNAME o cond = {eq, ne, cs, cc, mi, pl, vs, vc, hi, ls, ge, lt, gt, le, al, nv}, Rd={rO,...rl5}, Crn=({cO,...c15}, Crm=({cO,...clS} et RNAME se rapporte à la mnémonique du registre spécifiée par l'architecture (i. e., SPO ou VCS).
Description
Cette instruction n'est exécutée que si Cond est vraie.
Le registre Rd de ARM7 passe du registre d'utilité spéciale/scalaire du processeur vectoriel CRn<1:0>:CRm<3:0>.
Les bits 7:5 ainsi que Crn<3:2> sont réservés.
La topographie des registres du processeur vectoriel
est montrée ci-dessous.
CRM<3:0> CRn<1:0≥00 CRn<1:0≥01 CRn<1:0≥10 CRn<1:0≥111
0000 SRO SR16 SPO RASRO
0001 SR1 SR17 SPO RASR1
SR2 SR18 SPO RASR2
0011 SR3 SRl9 SP 0 RASR3
SR4 SR20 SP0 RASR4
0101 SR5 SR21 SPO0 RASR5
SR6 SR22 SPO0 RASR6
0111 SR7 SR23 SP0 RASR7
1000 SR8 SR24 SPO RASR8
1001 SR9 SR25 SPO RASR9
1010 SR10 SR26 SPO RASR10
1011 SR11 SR27 SPO RASR11
1100 SR12 SR28 SPO0 RASR12
1101 SR13 SR29 SPO RASR13
1110 SR14 SR30 SPO RASR14
1111 SR15 SR31 SPO RASR15
Exception Processeur vectoriel indisponible PFTCH Pré-extraction Format
25 20 15 10 5
LDC |i i i I l! | I i I II I II l STC!Cond llO1111101PIU01Wll Rn 0010 L 1111 I décalage i Il I I I I Syntaxe Assembleur LDC{cond} p15, 2, <Adresse> PFTCH{cond} <Adresse> o cond = { eq, he, cs, cc, mi, pl, rs, vc, hi, Is, ge, lt, gt, le, al, nv}. Se référer à la feuille de
données de ARM7 pour la syntaxe du mode d'adresse.
Description
Cette instruction n'est exécutée que si Cond est vrai.
La ligne d'antémémoire spécifiée par EA est pré-
extraite dans l'antémémoire de données de ARM7.
Opération Se référer à la Feuille de Données de ARM7 pour la façon
dont on calcule EA.
Exception: aucune.
STARTVP Départ Processeur Vectoriel Format
25 20 1510 5
- I I1 I I ll II I I I I I I I I I I I II i I i I II I I X i I I III II I
I IIII
I I i I II II I 1DP1ICond11|110| 0000 0111 lo i 11 1 i I J I jII Syntaxe Assembleur CDP{cond} p7, 0, cO, cO, cO STARTVP {cond} o cond = {eq, he, cs, cc, mi, pl, vs, vc, hi, Is, ge,
it, gt, le, al, nv}.
Description
Cette instruction n'est exécutée que si Cond est vrai.
Cette instruction signale au processeur vectoriel qu'il doit commencer l'exécution et s'efface automatiquement VISCR<vjp> et VISCR<vip>. ARM7 continue à exécuter l'instruction suivante sans attendre que le processeur
vectoriel commence l'exécution.
L'état du processeur vectoriel doit être réinitialisé à l'état souhaité avant que cette instruction ne soit exécutée. Cette instruction n'a pas d'effet si le
processeur vectoriel est déjà à l'état VP RUN.
Les bits 19:12, 7:5 et 3:0 sont réservés.
Exception
Processeur vectoriel indisponible.
TESTSET Tester et positionner Format
25 20 15 10 5
o IR I; t 11 i i 1 1 1 I îER i MCR Blond llllO 000; |1Rd 001 II I I tIIII I I :1 I I I III l I I t t Syntaxe Assembleur MRC{cond} p7, 0, Rd, CO, cER, O TESTSET{cond} Rd, RNAME o cond = {eq, he, cs, cc, mi, pl, rs, re, hi, is, ge, It, gt, le, al, nv}, Rd = {rO,..rl5}, ER={0,..15} et RNAME se rapporte à la mnémonique des registres spécifiée par l'architecture (i.e., UER1 ou VASYNC)
Description
Cette instruction n'est exécutée que si Cond est vraie.
Cette instruction retourne les contenus de UERx à Rd et établit UERx<30> à 1. Si le registre 15 de ARM7 est spécifié en tant que registre de destination, UERx<30> retourne au bit Z de CPSR, on peut donc réaliser une
courte boucle d'attente occupée.
Couramment, seul UER1 est défini pour travailler avec
cette instruction.
Les bits 19:17 et 7:5 sont réservés.
Exception: aucune.
APPENDICE B
L'architecture du processeur multimédia 100 définit les registres étendus auxquels le processeur 110 a accès avec les instructions MFER et MTER. Les registres étendus comprennent des registres étendus privilégiés et des
registres étendus de l'utilisateur.
Les registres étendus privilégiés sont utilisés pour la plupart pour contrôler l'opération du Processeur de Signaux
multimédia. Ils sont montrés dans le Tableau B.1.
Tableau B.1: Registres étendus privilégiés
Numéro Mnémonique Description
PERO CTR Reqistre de Contrôle PERI PVR Reqistre Version Processeur PER2 VIMSK Registre Masque Interruption Vectoriel PER3 AIABR Registre Point de Rupture Adresse Instruction ARM7 PER4 ADABR Registre Point de Rupture Adresse Donnée ARM7 PER5 SPREG Registre Zone de Travail PER6 STR Registre Etat Le Registre de Contrôle contrôle l'opération de MSP 100. Tous les bits dans CTR sont effacés à la à l'état initial. La définition des registres est montrée
au Tableau B.2.
Tableau B.2: Définition de CTR
Bit Mnémonique Description
31-13 réservé - toujours lu en tant que Os.
12 VDCI Bit Invalidation Antémémoire Données Vectorielles. Lorsqu'il est établi, cela force toute l'antémémoire de données du
processeur vectoriel à devenir invalide.
Comme l'opération d'invalidation de l'antémémoire est usuellement en conflit avec les opérations normales d'antémémoire, seule une séquence de
code d'invalidation est supportée.
11 VDE Bit Validation Antémémoire Données Vectorielles. A l'état effacé, cela inhibe l'antémémoire de données du
processeur vectoriel.
VICI Bit Invalidation Antémémoire Instructions Vectorielles. Lorsqu'il est établi, cela force toutes l'antémémoire d'instructions du processeur vectoriel à devenir invalide. Comme l'opération d'invalidation de l'antémémoire est usuellement en conflit avec les opérations normales de l'antémémoire, seule une séquence de code
d'invalidation est supportée.
9 VICE Bit Validation Antémémoire Instructions vectorielles. A l'état effacé, inhibe l'antémémoire d'instructions du
___ _ _ processeur vectoriel.
8 ADCI Bit Invalidation Antémémoire de Données ARM7. A l'état établi, force l'antémémoire de données de ARM7 à être invalide. Comme l'opération d'invalidation d'antémémoire est usuellement en conflit avec les opérations normales d'antémémoire, seule une séquence de code d'invalidation est supportée.
7 ADCE Bit Validation Antémémoire Données ARM7.
L'état effacé inhibe l'antémémoire de
données de ARM7.
Bit Mnémonique Descrivtion 6 AICI Bit Invalidation Antémémoire Instructions ARM7. A l'état établi, force toute l'antémémoire d'instructions de ARM7 à devenir invalide. Comme l'opération d'invalidation de l'antémémoire est usuellement en conflit avec des opérations normales d'antémémoire, seule une séquence de
code d'invalidation est supportée.
AICE Bit Validation Antémémoire Instructions ARM7. A l'état effacé, inhibe
l'antémémoire d'instruction de ARM7.
4 APSE Bit validation Seule Etape Processeur ARM7. A l'état établi, force le processeur de ARM7 à prendre l'exception d'une seule étape du processeur de ARM7 après exécution d'une instruction. La fonction de seule étape n'est disponible qu'en mode Utilisateur ou mode Superviseur. 3 SPAE Bit Validation Accès Zone de Travail. A l'état établi, permet à un procédé de ARM7 de charger de ou enregistrer dans la zone de travail. A l'état effacé, une tentative de charge ou d'enregistrement dans la zone de travail provoque l'exception d'Adresse de Donnée
Incorrecte de ARM7.
2 VPSE Bit Validation Seule Etape Processeur Vectoriel. A l'état établi, force le processeur vectoriel à prendre l'Exception d'une Seule Etape du Processeur Vectoriel après exécution
d'une instruction.
1 VPPE Bit Validation Pipeline Processeur Vectoriel. A l'état effacé, configure le processeur vectoriel pour fonctionner en mode non pipeline dans lequel seule une instruction est active dans le pipeline
d'exécution du processeur vectoriel.
O VPAE Bit Validation Accès Processeur Vectoriel. A l'état établi, permet à un procédé de ARM7 d'exécuter les instructions étendues de ARM7, décrites ci-dessus. A l'état effacé, empêche un procédé de ARM7 d'exécuter les instructions étendues de ARM7. Une telle tentative provoque une exception de
_____.. Processeur Vectoriel Indisponible.
Le Registre d'Etat indique l'état de MSP 100. Tous les bits dans STR de zone sont effacés à la remise à état initial. La définition du registre est montrée au
Tableau B.3.
Tableau B.3: Définition de STR
Bit Mnémonique Description
31:23 réservé - toujours lu comme Os.
22 ADAB Bit exception Point de Rupture Adresse Données ARM7 établi quand une correspondance du point de rupture
d'adresse de données de ARM7 se produit.
Cette exception est reportée par
l'interruption de Suspension de Données.
21 AIDA Une exception d'Adresse de Données Incorrectes de ARM7 se produit quand une instruction de charge ou d'enregistrement de ARM7 tente d'accéder à une adresse qui n'est pas définie ni réalisée pour une version particulière de MSP ou quand elle tente d'accéder à la zone de travail lorsque cela n'est pas permis. Cette exception est reportée par l'interruption de Suspension de Données. AIAB Bit d'exception du Point de Rupture d'Adresse d'Instruction de ARM7 établi quand une correspondance du point de rupture d'adresse d'instruction de ARM7 se produit. Cette exception est reportée
par l'interruption de Suspension de Pré-
__ __ _extraction.
19 AIIA Exception Adresse Instruction ARM7 Incorrecte. Cette exception est reportée
par l'interruption de Suspension Pré-
extraction. 18 ASTP Exception Seule Etape ARM7. Cette exception est reportée par
l'interruption de Suspension de Pré-
extraction. 17 APV Violation Protection ARM7. Cette exception est reportée par
l'interruption IRQ.
16 VPUA Exception Processeur vectoriel Indisponible. Cette exception est reportée par l'interruption de
Coprocesseur Indisponible.
-0 réservé - toujours lu comme Os.
Le Registre Version Processeur identifie la version particulière du processeur particulier de la famille de
processeurs du Processeur de Signaux Multimédia.
Le Registre de Masque d'Interruption du Processeur Vectoriel VIMSK contrôle le report des exceptions du processeur vectoriel au processeur 110. Chaque bit dans VIMSK, quand il est établi avec le bit correspondant dans le
registre VISRC, permet à l'exception d'interrompre ARM7.
Cela n'affecte pas la façon dont l'exception du processeur vectoriel est détectée mais n'affecte que le cas o l'exception doit interrompre ARM7. Tous les bits dans VIMSK sont effacés à la remise à l'état initial. La définition du
registre est montrée au Tableau B.4.
Tableau B.4: Définition de VIMSK
Bit Mnémonique Description
31 DABE Validation Interruption Point de Rupture
_,,,, _ Adresse Donnée.
IABE Validation Interruption Point de Rupture
Adresse Instruction.
29 SSTPE Validation Interruption Seule Etape.
28-14 réservé - toujours lu comme Os.
13 FOVE Validation Interruption Débordement
Point Flottant.
12 FINVE Validation Interruption Opérande
_ Incorrecte Point Flottant.
11 FDIVE Validation Interruption Division par
Zéro Point Flottant.
* IOVE Validation Interruption Débordement Entier. 9 IDIVE Validation Interruption Division par
Zéro Entier.
8-7 réservé - toujours lu comme O.
6 VIE Validation Interruption VCINT.
VJE Validation Interruption VCJOIN.
4-1 réservé - toujours lu comme zéro.
O CSE Validation Commutateur Contexte.
Le Registre du Point de Rupture d'Adresse d'Instruction de ARM7 aide à dépanner les programmes de ARM7. La
définition du registre est montrée au Tableau B.5.
Tableau B.5: Définition de AIABR
Bit Mnémonique Description
31 - 2 IADR Adresse Instruction ARM7.
1 réservé - toujours lu comme zéro.
0 IABE Validation Point de Rupture Adresse instruction. Effacé à la remise à l'état initial. Si établi, force l'exception du Point de Rupture de l'Adresse d'Instruction de ARM7 à se produire quand une adresse d'accès d'instruction de ARM7 correspond à AIABR<31:2> et que VCSR<AIAB> est effacé. VCSR<AIAB> est établi pour indiquer l'exception. Si VCSR<AIAB> est déjà établi quand la correspondance se produit, VCSR<AIAB> est effacé et une correspondance est ignorée. L'exception est reportée avant
___ _ que l'instruction ne soit exécutée.
Le Registre du Point de Rupture d'Adresse de Données de ARM7 aide à dépanner les programmes de ARM7. La définition
du registre est montrée au Tableau B.6.
Tableau B.6: Définition de ADABR
Bit Mnémonique Description
31-2 DADR Adresse Donnée ARM. Non définie lors de
la remise à l'état initial.
1 SABE Stocker Validation Point de Rupture Adresse. Effacé à la remise à l'état initial. Si établi, force l'exception du Point de Rupture de l'Adresse de Donnée de ARM7 à se produire quand les 30 bits supérieurs d'une adresse d'accès d'enregistrement de ARM7 correspondent avec ADABR<31:2> et que VCSR<ADAB> est effacé. VCSR<ADAB> est établi pour indiquer l'exception. Si VCSR<ADAB> est déjà établi quand une correspondance se produit, VCSR<ADAB> est effacé et la correspondance est ignorée. L'exception est reportée avant que l'instruction
d'enregistrement ne soit exécutée.
Bit Mnémonique DescriDtion O LABE Validation Point de Rupture d'Adresse de Charge. Effacé à la remise à l'état initial. Si établi, force l'exception du Point de Rupture d'Adresse de Donnée de ARM7 à se produire quand les 30 bits supérieurs d'une adresse d'accès de charge de ARM7 correspondent à ADABR<31:2> et que VCSR<ADAB> est effacé. VCSR<ADAB> est établi pour indiquer l'exception. Si VCSR<ADAB> est déjà établi quand une correspondance se produit, VCSR<ADAB> est effacé et la correspondance est ignorée. L'exception est reportée avant que l'instruction de
____ icharge ne soit exécutée.
Le Registre de Zone de Travail configure l'adresse et la grandeur de la zone de travail formée en utilisant la SRAM dans le sous-système d'antémémoire 130. La définition
du registre est montrée au Tableau B.7.
Tableau B.7: Définition de SPREG
Bit Mnémonique Description
31-11 SPBASE Base Zone de Travail indique les 21 bits supérieurs de l'adresse de départ de la zone de travail. Cette valeur doit être le décalage de 4M octets par rapport à
la valeur dans le registre de MSP BASE.
-2 réservé
1-0 SPSIZE Grandeur Zone de Travail.
00->OK (avec antémémoire données processeur vectoriel 4K) 01-> 2K (avec antémémoire données processeur vectoriel 2K) ->3K (avec antémémoire données processeur vectoriel 1K) 11->4K (pas d'antémémoire donnée J____ processeur vectoriel) Les registres étendus à l'utilisateur sont utilisés pour la plupart pour la synchronisation des processeurs 110 et 120. Les registres étendus à l'utilisateur sont couramment définis comme n'ayant qu'un bit, implanté au bit 30 et des instructions telles que " MFER RS15, UERx " par exemple, retournent la valeur du bit dans le drapeau Z. Les bits UERx<31> et UERx<29:0> sont toujours lus comme des zéros. Les registres étendus à l'utilisateur sont décrits au
tableau B.8.
Tableau B.8: Registre Etendu à l'Utilisateur
Numéro Mnémonique Description
UERO VPSTATE Drapeau Etat Processeur Vectoriel. Bit , quand il est établi, indique que le processeur vectoriel est à l'état VP_RUN, exécutant des instructions. Si il est effacé, cela indique que le processeur vectoriel est à l'état VP IDLE et qu'il s'est arrêté avec VPC adressant
l'instruction suivante à exécuter.
VPSTATE<30> est effacé à la remise à
l'état initial.
UER1 VASYNC Drapeau synchronisation vecteur et ARM7.
Le bit 30 est produit pour le type de synchronisation producteurconsommateur entre les processeurs vectoriel et de ARM7 120 et 110. Le processeur vectoriel 120 peut établir ou effacer ce
drapeau en utilisant l'instruction VMOV.
Ce drapeau peut également être établi ou effacé par un procédé de ARM7 en
utilisant une instruction MFER ou MTER.
De plus, le drapeau peut être lu et établi en utilisant une instruction
TESTSET.
Le Tableau B.9 montre les états des registres étendus à
la remise à l'état initial de mise en circuit.
Tableau B.9: Etat de Mise en Circuit des Registres Etendus Reqistre Remise à l'état initial
CTR 0
PVR TBD
VIMSK 0
AIABR AIABR<0≥0, tous les autres sont non définis ADABR ADABR<1:0≥0, tous les autres _____________ sont non définis
STR 0
VPSTATE VPSTATE<30≥O, tous les autres sont non définis VASYNC VASYNC<30≥0, tous les autres sont non définis
APPENDICE C
L'état d'architecture du processeur vectoriel 120 comprend: 32 registres scalaires de 32 bits; 2 rangées de 32 registres vectoriels de 288 bits; une paire de registres accumulateurs vectoriels de 576 bits; un groupe de registres d'utilité spéciale de 32 bits. Les registres scalaires, vectoriels et accumulateurs sont destinés à une programmation d'utilité générale et ils supportent de
nombreux types différents de données.
Les notations qui suivent sont utilisées dans cette section et les suivantes: VR indique un registre vectoriel; VRi indique le ième registre vectoriel (décalage zéro); VR[i] indique le ième élément de donnée dans un registre vectoriel VR; VR<a:b> indique les bits a à b dans un registre vectoriel VR; et VR[i]<a:b> indique les bits a à b
du ième élément de donnée dans un registre vectoriel VR.
Une architecture vectorielle a une dimension ajoutée de types et grandeurs de données pour les éléments multiples dans un registre vectoriel. Comme un registre vectoriel est d'une grandeur fixe, le nombre d'éléments de données qu'il
peut contenir dépend de la grandeur des éléments.
L'architecture de MSP défini cinq grandeurs d'éléments comme
le montre le Tableau C.1.
Tableau C.1: Grandeur des Eléments de Données Nom Grandeur Largeur Grandeur (bits) Booléenne 1 Octet 8 Octet 9 9 Demi-mot 16 Mot 32L'architecture de MSP interprète la donnée vectorielle selon le type et la grandeur spécifiés de la donnée dans une instruction. Couramment, deux formats en complément à deux (entier) sont supportés pour les grandeurs d'éléments d'octet, octet 9, demi-mot et mot sur la plupart des instructions arithmétiques. De plus, le format à simple précision IEEE 754 est supporté par la grandeur de l'élément
de mot pour la plupart des instructions arithmétiques.
Un programmeur est libre d'interpréter les données de toute manière souhaitée tant que la séquence d'instructions produit un résultat ayant une signification. Par exemple, le programmeur est libre d'utiliser la grandeur de l'octet 9 pour stocker des chiffres sans signe à 8 bits et qui est également libre de stocker des chiffres sans signe à 8 bits dans les éléments de données, de grandeur de l'octet et d'opérer sur eux en utilisant les instructions arithmétiques de complément à deux prévues, tant que le programme peut
traiter des résultats de " faux " débordement.
Il y a 32 registres scalaires qui sont appelés SRO à SR31. Les registres scalaires ont 32 bits de large et ils peuvent contenir un élément de donnée de toute grandeur définie. Le registre scalaire SRO est spécial par le fait que le registre SRO se lit toujours sous la forme de 32 bits
de zéros et une écriture dans le registre SRO est ignorée.
Les types de données octet, octet 9 et demi-mot sont enregistrés dans les bits de moindre poids des registres scalaires avec les bits de poids fort ayant des valeurs non définies. Comme les registres n'ont pas d'indicateur du type de donnée, les programmeurs doivent connaître le type de donnée pour les registres qui sont utilisés pour chaque instruction. Ceci est différent des autres architectures o un registre de 32 bits est supposé contenir une valeur de 32 bits. L'architecture de MSP spécifie qu'un résultat d'un type A de donnée ne modifie correctement que les bits définis pour le type de donnée A. Par exemple, le résultat d'une addition d'un octet 9 ne modifie que les 9 bits
inférieurs du registre scalaire de destination à 32 bits.
Les valeurs des 23 bits supérieurs sont non définies à moins
qu'autre chose ne soit indiqué pour une instruction.
Les 64 registres vectoriels sont organisés en deux rangées, chacune ayant 32 registres. La rangée O contient les 32 premiers registres et la rangée 1 contient les 32 seconds registres. Les deux rangées sont utilisées d'une manière o une rangée est établie en tant que rangée courante et l'autre est établie en tant que rangée alternative. Toutes les instructions vectorielles emploient les registres de la rangée courante par défaut, à l'exception des instructions de charge/enregistrement et déplacement registre qui peuvent accéder aux registres vectoriels dans l'autre rangée. Le bit CBANK dans le Registre de Contrôle et d'Etat Vectoriel VCSR est utilisé pour positionner la rangée O ou la rangée 1 à la rangée
courante. (L'autre rangée devient la rangée alternative).
Les registres vectoriels dans la rangée courante sont appelés VRO à VR31 et dans la rangée alternative, ils sont
appelés VRAO à VRA31.
Alternativement, les deux rangées peuvent être conceptuellement fusionnées pour produire 32 registres vectoriels de double grandeur de 576 bits chacun. Le bit
VEC64 dans le VCR du registre de contrôle spécifie ce mode.
En mode VEC64, il n'y a pas de rangée courante ni alternative et un numéro de registre vectoriel désigne une paire correspondantes de registres vectoriels de 288 bits des deux rangées. En effet, VRi<575:0≥VR1i<287:0>:VR0i<287:0> o VR0i et VR1i désignent les registres vectoriels ayant le numéro de registre Vri dans la rangée 1 et dans la rangée 0, respectivement. Les registres vectoriels à double grandeur
sont appelés VRO à VR31.
Les registres vectoriels peuvent recevoir des éléments multiples des grandeurs octet, octet 9, demi-mot ou mot
comme montré au Tableau C.2.
Tableau C.2: Nombre d'Eléments par Registre Vectoriel Grandeur Longueur Nombre Maximum Nombre Total Elément Elément (bits) d'Eléments de Bits Utilisés Octet 9 9 32 288 Octet 8 32 256 Demi-mot 16 16 256 Mot 32 8 256 Le mélange des grandeurs d'éléments dans un registre vectoriel n'est pas supporté. A l'exception de la grandeur
de l'élément Octet 9, l'on n'utilise que 256 des 288 bits.
En particulier, chaque neuvième bit est inutilisé.
Les 32 bits inutilisés dans les grandeurs octet, demi-mot et mot sont réservés et les programmeurs ne doivent effectuer
aucune supposition concernant leur valeur.
Le registre accumulateur vectoriel est destiné à permettre l'enregistrement d'un résultat intermédiaire qui à un degré plus haut de précision que le résultat dans un registre de destination. Le registre accumulateur vectoriel se compose de quatre registres de 288 bits, nommés VAC1H, VAClL, VACOH et VACOL. La paire VACOH:VACOL est utilisée par les trois instructions par défaut. Seulement, en mode VEC64, la paire VAClH:VAClL est utilisée pour l'émulation des 64 opérations vectorielles des octets 9. Même si la rangée 1 est établie pour être la rangée courante en mode
VEC32, la paire VACOH:VACOL est utilisée.
Pour produire un résultat de précision étendue avec le même nombre d'éléments que dans les registres vectoriels de source, des éléments de précision étendue sont réservés à travers une paire de registres, comme le montre le
Tableau C.3.
Tableau C.3: Format accumulateur vectoriel Grandeur Vue Logique Format VAC Elément Octet 9 VAC[i]<17:0> VACOH[i]<8>: VACOL[i]<8:0> pour i=0..31 et VAClH[i-32]<8:0>: VAC1L[i- 321<8:0> pour i=32..63 Octet VAC[i]<15:0> VACOH[i]<7:0>: VACOL[i]<7:0> pour i=0..31 et VAClH[i-32]<7:0>: VAC1L[i-321<7:0> pour i=32..63 Demi-mot VAC[i]<31:0> VACOH[i]<15:0>: VACOL[i]<15:0> pour i=0..15 et VAClH[i-16]<15:0>: VAClL[i-16] pour i=16..31 Mot VAC[i]<63:0> VACOH[i]<31:0>: VACOL[i]<31:0> pour
i=0.7 et VAC1H[i-8]<31:0>: VAClL[i-
81<31:0> pour i=8..15 La paire VAClH:VAC1L n'est utilisée qu'en mode VEC64 o le nombre des éléments peut être aussi grand que 64, 32 ou 16 pour l'octet 9 (et l'Octet), le Demi-mot et le Mot, respectivement. Il y a 33 registres d'utilité spéciale qui ne peuvent être chargés directement par la mémoire ou enregistrés directement dans la mémoire. Seize registres d'utilité spéciale, appelés RASRO à RASR15, forment une pile d'adresses de retour interne et ils sont utilisés par les instructions d'appel et de retour de sous-routine. Dix- sept registres d'utilité spéciale à 32 bits de plus sont montrés
au Tableau C.4.
Tableau C.4: Registres d'Utilité Spéciale.
Numéro Mnémonique Description_
SPO0 VCSR Reqistre Vectoriel Contrôle et Etat SPA VPC Compteur Proqramme Vectoriel SP2 VEPC Compteur Proqramme Exception Vectoriel SP3 VISCR Reqistre Source Interruption Vectoriel SP4 VIINS Registre Instruction Interruption Vectoriel SP5 VCR1 Registre Compte Vectoriel 1 SP6 VCR2 Reqistre Compte Vectoriel 2 SP7 VCR3 Reqistre Compte Vectoriel 3 SP8 VGMRO Reqistre Masque Global Vectoriel O SP9 VGMR1 Reqistre Masque Global Vectoriel 1 SP10 VORO Registre Débordement Vectoriel O SPll VOR1 Reqistre Débordement Vectoriel 1 SP12 VIABR Registre Point Rupture Adresse Instruction Vectoriel SP13 VDABR Registre Point Rupture Adresse Donnée Vectoriel SP14 VMMR0 Registre Masque Déplacement Vectoriel O SP15 VMMR1 Reqistre Masque Déplacement Vectoriel 1 SP16 VASYNC Registre Synchronisation Vectoriel et ARM7 La définition du Registre de Contrôle et d'Etat
Vectoriel VCSR est montrée au tableau C.5.
Tableau C.5: Définition de VCSR
Bit Mnémonique Description
31:18 réservé 17:13 VSP<4:0> Indicateur pile adresses retour. VSP est utilisé par les instructions saut à sous-routine et retour de sousroutine pour maintenir une trace du haut de la pile d'adresses retour interne. Il n'y a que 16 entrées dans la pile d'adresses de retour VSP<4> est utilisé pour détecter la condition de débordement de
la pile.
Bit Mnémonique Description
12 SO Drapeau d'état de débordement récapitulatif. Ce bit est établi quand une opération arithmétique a pour résultat un débordement. Ce bit est collant - une fois établi, il reste établi jusqu'à ce qu'il soit effacé par
une écriture de 0 à ce bit.
11 GT Drapeau plus grand que l'état. Ce bit est établi par l'instruction VSUBS quand SRa>SRb. EQ Drapeau état égal. Ce bit est établi par
l'instruction VSUBS quand on a SRa=SRb.
9 LT Drapeau moins grand que l'état. Ce bit est établi par l'instruction VSUBS quand
on a SRa<SRb.
8 SMM Sélection Déplacement Masque. Lorsque ce bit est établi, la paire VMMR0/1 devient le masque de l'élément pour les
opérations arithmétiques.
7 CEM Masque Elément Complément. Lorsque ce bit est établi, le masque d'élément est défini comme étant le complément de VGMR0/1 ou VMMR0/1, selon lequel il est configuré pour être le masque d'élément
pour une opération d'arithmétique.
Ce bit ne change pas les contenus de VGMR0/1 ou VMMR0/1 - il ne change que l'usage de ces registres. Les codages SMM:CEM spécifient: 00 - utiliser VGMR0/1 comme masque d'élément pour tout sauf VCMOVM 01 - utiliser VGMR0/1 comme masque
d'élément pour tout sauf VCMOVM-
- utiliser VMMR0/1 comme masque d'élément pour tout sauf VCMOVM 11 utiliser -VMMRO/1 comme masque d'élément pour tout sauf VCMOVM 6 OED Inhibition Exception Débordement. Quand ce bit est établi, le processeur 120 continue l'exécution lors de la détection d'une condition de débordement. ISAT Mode saturation entier. La combinaison des bits OED:ISAT spécifie: 00 - pas de saturation, report quand exception débordement se produit xl - saturation, ne peut provoquer de débordement - pas de saturation, pas de rapport quand exception débordement se produit
Bit Mnémonique Description
4:3 RMODE Mode arrondissement pour opérations avec
point flottant IEEE 754.
00 arrondir vers infini 01 arrondir vers zéro arrondir vers le plus proche 11 arrondir vers +infini 2 FSAT Bit mode saturation point flottant (mode
IEEE rapide).
1 CBANK Bit Rangée Courante. Lorsqu'il est établi, il indique que la rangée 1 est la rangée courante. Quand il est effacé il indique que la rangée 0 est la rangée courante. CBANK est ignoré quand le bit
VEC64 est établi.
0 VEC64 Bit mode vectoriel 64 octets 9.
Lorsqu'il est établi, il spécifie que les registres vectoriels et accumulateurs doivent avoir 576 bits. Le mode de défaut spécifié 32 de la grandeur de l'octet 9 que l'on appelle
_____ _mode VEC32.
Reaistre Compteur Proaramme Vectoriel VPC est l'adresse de l'instruction suivante à exécuter par le processeur vectoriel 120. Le processeur ARM7 110 doit charger le registre VPC avant d'émettre l'instruction STARTVP pour
commencer le fonctionnement du processeur vectoriel 120.
Compteur Proaramme Exception Vectoriel VEPC spécifie l'adresse de l'instruction qui aura le plus probablement provoqué l'exception la plus récente. MSP 100 ne supporte pas d'exceptions précises, d'o le terme "le plus
probablement ".
Registre Source Interruption Vectoriel VISRC indique les sources d'interruption pour le processeur ARM7 110. Le ou les bits appropriés sont établis par le matériel lors de la détection de la ou des exceptions. Le logiciel doit effacer le registre VISRC avant que le processeur vectoriel 120 ne puisse entreprendre l'exécution. Tout bit établi dans le registre VISRC force le processeur vectoriel 120 à entrer à l'état VPIDLE. Si le bit de validation de l'interruption correspondant est établi dans VIMSK, une interruption au processeur 110 est signalée. Le
Tableau C.6 définit les contenus du registre VISRC.
Tableau C.6:Définition de VISRC
Bit Mnémonique Description
31 DAB Exception Point Rupture Adresse Donnée IAB Exception Point Rupture Adresse Instruction 29 SSTP Exception Seule Etape 28-18 réservé 17 IIA Exception Adresse Instruction Incorrecte 16 IINS Exception Instruction Incorrecte IDA Exception Adresse Donnée Incorrecte 14 UDA Exception Adresse Donnée Non Alignée 13 FOV Exception Débordement Point Flottant 12 FINV Exception Opérande Incorrecte Point Flottant 11 FDIV Exception Division par Zéro Point Flottant IOV Exception Débordement Entier 9 IDIV Exception Division par Zéro Entier 48 RASO Exception Débordement Pile Adresses retour 7 RASU Exception sous-débordement pile adresses Retour 6 VIP Exception VCINT en cours. Exécution
______I instruction STARTVP efface ce bit.
VJP Exception VCJOIN en cours. Exécution
instruction STARTVP efface ce bit.
4-0 O VPEV Vecteur Exception Processeur Vectoriel.
Le Reaistre Instruction Interruption Vectoriel VIINS est remis au point par l'instruction VCINT ou VCJOIN quand l'instruction VCINT ou VCJOIN est exécutée pour interrompre
le processeur ARM7 110.
Les Registres de Compte Vectoriels VCR1, VCR2, et VCR3 sont pour l'instruction Décrément Et Branchement VD1CBR, VD2CBR, et VD3CBR et ils sont initialisés par des comptes de boucles à exécuter. Quand l'instruction VD1CBR est exécutée, le registre VCR1 est décrémenté de 1. Si la valeur de compte n'est pas zéro et que la condition spécifiée dans l'instruction correspond à VFLAG, alors le branchement est pris. Sinon le branchement n'est pas pris. Le registre VCR1 est décrémenté de 1 dans chaque cas. Les registres VCR2 et
VCR3 sont utilisés de la même manière.
Le Registre de Masque Global Vectoriel VGMRO indique les éléments du registre vectoriel de destination qui doivent être affectés en mode VEC32 et les éléments dans VR<287:0> en mode VEC64. Chaque bit dans VGMRO contrôle la remise au point des 9 bits dans le registre de destination vectoriel. Plus particulièrement, VGMRO indique<i> contrôle la remise au point de Vrd<9i+8:9i> en mode VEC32 et de VR0d<9i+8:9i> en mode VEC64. Il faut noter que VRQd désigne le registre de destination dans la rangée O en mode VEC64 et que VRd se rapporte au registre de destination dans la rangée courante, qui peut être soit la rangée O soit la rangée 1, en mode VEC32. Le registre de masque global vectoriel VGMRO est utilisé pour l'exécution de toutes les
instructions, à l'exception de l'instruction VCMOVM.
Le Registre du Masque Global Vectoriel VGMR1 indique les éléments dans VR<575:288> qui sont affectés dans le mode VEC64. Chaque bit dans le registre VGMR1 contrôle la mise au point de 9 bits dans le registre de destination vectoriel dans la rangée 1. Plus particulièrement, VGMRl<i> contrôle la remise au point de VR1<9i+8:9i>. Le registre VGMR1 n'est pas utilisé en mode VEC32 mais, en mode VEC64, il effectue l'exécution de toutes les instructions à l'exception de
l'instruction VCMOVM.
Le Registre de Débordement Vectoriel VORO indique les éléments en mode VEC32 et les éléments dans VR<287:0> en mode VEC64 qui contiennent des résultats de débordement après une opération arithmétique vectorielle. Ce registre
n'est pas modifié par une opération arithmétique scalaire.
Le bit VORO<i> étant positionné indique que le ième élément de l'octet ou de l'octet 9, le (i idiv 2)ième élément du demi-mot, ou le (i idiv 4)ième élément du mot contient un résultat de débordement. Par exemple, le bit 1 et le bit 3 seront positionnés pour indiquer un débordement du premier demi-mot et de l'élément de mot, respectivement. Cette implantation des bits dans VORO est différente de
l'implantation des bits dans VGMRO ou VGMR1.
Le Registre de Débordement Vectoriel VOR1 est utilisé pour indiquer les éléments dans VR<575:288> en mode VEC64 qui contiennent des résultats en débordement après une opération arithmétique vectorielle. Le registre VOR1 n'est pas utilisé en mode VEC32 ni modifié par une opération arithmétique scalaire. Le bit VORl<i> étant établi indique que le ième élément de l'octet ou de l'octet 9, le (i idiv 2)ième élément du demi-mot, ou le (i idiv 4)ième élément du mot contient un résultat de débordement. Par exemple, le bit 1 et le bit 3 seront positionnés pour indiquer un débordement du premier demi-mot et du mot, respectivement, dans VR<575:288>. L'implantation des bits dans VOR1 est différente de l'implantation des bits dans
VGMRO ou VGMR1.
Le Registre du Point de Rupture d'Adresse d'Instruction
Vectoriel VIABR aide à dépanner les programmes vectoriels.
La définition du registre est montrée au Tableau C.7.
Tableau C.7: Définition de VIABR
Bit Mnémonique Description
31-2 IADR Adresse Instruction Vectorielle. Non
défini à la remise à l'état initial.
1 réservé O IABE Validation Point de Rupture Adresse instruction. Non défini à la remise à l'état initial. Si établi, force l'exception du Point de Rupture de l'Adresse de l'Instruction Vectorielle à se produire quand une adresse d'accès d'instruction vectorielle correspond à VIABR<31:2>. Le bit VISCR<IAB> est
établi pour indiquer l'exception.
L'exception est reportée avant que
_ l'instruction ne soit exécutée.
Le Registre du Processeur de Rupture d'Adresse de Donnée Vectoriel VDABR aide à dépanner les programmes vectoriels. La définition de registre est montrée au
Tableau C.8.
Tableau C.8: Définition de VDABR
Bit Mnémonique Description
31-2 DADR Adresse Donnée Vectorielle. Non défini à
la remise à l'état initiale.
1 SABE Validation Point de Rupture Adresse Enregistrement. Non défini à la remise à l'état initiale. Si établi, force l'exception du Point de Rupture de l'Adresse de la Donnée Vectorielle à se produire quand une adresse d'accès d'enregistrement vectoriel correspond à VDABR<31:2>. Le bit VISRC<DAB> est
établi pour indiquer l'exception.
L'exception est reportée avant que l'instruction d'enregistrement ne soit exécutée. O LABE Validation Point de Rupture Adresse Charge. Effacé à la remise à l'état initial. Si établi, force l'exception du Point de Rupture de l'Adresse de Donnée Vectorielle à se produire quand une adresse d'accès de charge vectorielle correspond à VDABR<31:2>. VISRC<DAB> est
établi pour indiquer l'exception.
L'exception est reportée avant que l'instruction de charge ne soit exécutée. Le Reaistre Déplacement Masque Vectoriel VMMRO est utilisé par l'instruction VCMOVM en tout moment ainsi que quand VCSR<SMM> = 1 pour toutes les instructions. Le registre VMMRO indique les éléments du registre vectoriel de destination qui doivent être affectés en mode VEC32 et les éléments dans VR<287:0> en mode VEC64. Chaque bit dans VMMRO contrôle la remise au point de 9 bits dans le registre vectoriel de destination. Plus particulièrement, VMMRO<i> contrôle la remise au point de Vrd<9i+8:9i> en mode VEC32 et de VR0d<9i+8:9i> en mode VEC64. VROd désigne le registre de destination dans la rangée O en mode VEC64 et que VRd se rapporte au registre de destination dans la rangée courante, qui peut être soit la rangée 0 soit la rangée 1 en mode
VEC32.
Le Registre Déplacement Masque Vectoriel VMMR1 est utilisé par l'instruction VCMOVM en tout moment ainsi que quand VCSR<SMM> = 1 pour toutes les instructions. Le registre VMMR1 indique les éléments dans VR<575:288> qui doivent être affectés en mode VEC64. Chaque bit dans VBMMR1 contrôle la remise au point des 9 bits dans le registre vectoriel de destination dans la rangée 1. Plus particulièrement, VGMR1<i> contrôle la remise au point de VRld<9i+8:9i>. Le registre VGMR1 n'est pas utilisé en mode
VEC32.
Le Registre de Synchronisation Vectoriel et de ARM7 VASYNC produit un type de synchronisation
producteur/consommateur entre les processeurs 110 et 120.
Couramment, seul le bit 30 est défini. Un processeur de ARM7 peut accéder au registre VASYNC en utilisant les instructions MFER, MTER, et TESTSET alors le processeur vectoriel 120 est à l'état VPRUN ou l'état VP _IDLE. Le registre VASYNC n'est pas accessible au processeur ARM7 par les instructions de TVP ou MFVP car ces instructions ne peuvent accéder au-delà des seize premiers registres d'utilité spéciale du processeur vectoriel. Un processeur vectoriel peut accéder au registre VASYNC par une
instruction VMOV.
Le Tableau C9 montre l'état du processeur vectoriel
lors d'une remise à l'état initial avec mise en circuit.
Tableau C.9: Etat Remise à l'Etat Initial avec Mise en Circuit du Processeur Vectoriel Registre Etat Remise à l'état initial tSRO 0 tous les autres non définis Les registres d'utilité spéciale sont initialisés par le processeur ARM7 110 de avant que le processeur vectoriel ne
puisse exécuter une instruction.
APPENDICE D
Chaque instruction soit implique soit spécifie le type
de donnée des opérandes de source et de destination.
Certaines instructions ont une sémantique qui s'applique également à plus d'un type de donnée. Certaines instructions ont une sémantique qui prend un type de donnée pour la source et produisent un type de données différentes pour le résultat. Cet appendice décrit les types de données supportés par l'exemple de mode de réalisation. Le Tableau 1 dans la demande décrit les types de données int8, int9, int 16, int 32 et flottante qui sont supportés. Les formats d'entier sans signe ne sont pas supportés et une valeur d'un entier sans signe doit d'abord être convertie en un format de complément à 2 avant d'être utilisée. Le programmeur est libre d'utiliser les instructions arithmétiques avec un entier sans signe ou tout autre format de son choix, tant que les débordements sont bien traités. L'architecture définit les débordements uniquement des types de données d'entier en complément à 2 et à point flottant à 32 bits. L'architecture ne détecte pas la sortie de report des opérations à 8, 9 16 ou 32 bits qui est nécessaire pour détecter des débordements
sans signe.
Le Tableau D.1 montre les grandeurs des données
supportées par les opérations de charge. -
Tableau D.1: Grandeurs des Données Supportées par les Opérations de Charge Grandeurs Grandeurs Opération de Charge Donnée en Donnée en mémoire registre 8 bits 9 bits charger 8 bits, étendre signe à 9 bits (pour chargement de 8 bits en complément à deux) 8 bits 9 bits charger 8 bits, étendre avec zéro à 9 bits (pour chargement 8 bits sans siqne) 16 bits 16 bits charger 16 bits (pour chargement 16 bits sans signe ou complément à deux) 32 bits 32 bits charger 32 bits (pour chargement 32 bits sans signe, entier en complément à deux ou point flottant à 32 bits) L'architecture spécifie l'alignement des adresses de mémoire sur les limites des types de données. En effet, pour un octet, il n'y a pas de condition d'alignement. Pour un demi-mot, la condition d'alignement est la limite du demi-mot. Pour un mot, la condition d'alignement est la
limite du mot.
Le Tableau D.2 montre les grandeurs des données
supportées par les opérations d'enregistrement.
Tableau D.2: Grandeurs des Données Supportées par les Opérations d'Enregistrement Grandeurs Grandeurs Opération d'Enregistrement Données en Données en Registre Mémoire 8 bits 9 bits enregistrer 8 bits (enregistre 8 bits sans signe ou en complément à deux) 8 bits 9 bits tronquer aux 8 bits inférieurs, enregistrer 8 bits (enregistre 9 bits en complément à deux ayant une valeur entre O et 255 - sans signe) 16 bits 16 bits enregistrer 16 bits (enregistrer 16 bits sans signe ou en complément à deux) 32 bits 32 bits enregistrer 32 bits Comme plus d'un type de données est implanté dans un registre, qu'il soit scalaire ou vectoriel, il peut y avoir des bits dans le registre de destination qui n'ont pas de résultat défini pour certains types de données. En fait, à part les cas d'une opération sur une grandeur de donnée d'octet 9 sur un registre vectoriel de destination et pour une opération sur une grandeur de données du mot sur un registre de destination scalaire, il y a des bits dans un registre de destination dont les valeurs ne sont pas définies par l'opération. Pour ces bits, l'architecture spécifie que leur valeur sera non définie. Le Tableau D.3 montre les bits
qui sont non définis pour chaque grandeur de donnée.
Tableau D.3: Bits non Définis pour les Grandeurs de Données Grandeur Donnée Registre Vectoriel Registre Scalaire Destination Destination Octet VR<9i+8>, pour i=O SR<31:8> à 31 Octet 9 rien SR<31:9> Demi-mot VR<9i+8>, pour i=O SR<31:16> à 31 Mot VR<9i+8>, pour i=O rien à 31 Les programmeurs doivent être au courant des types de données des registres de source et de destination ou de la mémoire lors de la programmation. Une conversion du type de données d'une grandeur d'élément à une autre peut avoir pour résultat potentiel un nombre différent d'éléments enregistrés dans un registre vectoriel. Par exemple, la conversion d'un registre vectoriel du type de données en demi-mot au mot demande que deux registres vectoriels enregistrent le même nombre d'éléments convertis. Inversement, une conversion du type de données en mot, qui peut avoir un format défini par l'utilisateur dans le registre vectoriel, au format de demi-mot, produit le même nombre d'éléments dans une moitié d'un registre vectoriel et les bits résiduels dans l'autre moitié. Dans chaque cas, les conversions des types de données créent une issue architecturale avec l'arrangement des éléments convertis qui sont d'une grandeur différente par
rapport aux éléments de source.
En principe, l'architecture de MSP ne prévoit pas d'opérations qui changent implicitement le nombre d'éléments en résultat. L'architecture voit que le programmeur doit être au courant des conséquences du changement du nombre des éléments dans le registre de destination. L'architecture prévoit seulement des opérations qui convertissent un type de donnée à un autre type de donnée de la même grandeur et demande que le programmeur ajuste les différences des grandeurs de données lorsqu'il convertit d'un type de donnée
à un autre, d'une grandeur différente.
Des instructions spéciales, telles que VSHFLL et VUNSHFLL, telles que décrites à l'Appendice E, simplifient la conversion d'un vecteur ayant une première grandeur de donnée à un second vecteur ayant une seconde grandeur de donnée. Les étapes de base impliquées dans la conversion en un type de donnée en complément à deux d'une plus petite grandeur d'élément, int8 par exemple, dans le vecteur VRa à une plus grande grandeur, intl6 par exemple, sont: 1. Brasser les éléments dans Vra avec un autre vecteur VRb en deux vecteurs VRC:VRd en utilisant le type de donnée en octet. Les éléments dans VRa sont déplacés aux octets les plus faibles des éléments de données intl6 dans un registre à deux grandeurs VRc:VRd et les éléments de Vrb, dont les valeurs ne sont pas en rapport, sont déplacés aux octets supérieurs de VRc:VRd. Cette opération déplace effectivement une moitié des éléments de VRa dans VRc et l'autre moitié dans VRd, tout en doublant la grandeur de chaque élément de
l'octet au demi-mot.
2. Décaler arithmétiquement les éléments dans VRC:VRd
de 8 bits pour les étendre au signe.
Les étapes de base impliquées dans la conversion d'un style de donnée en complément à deux d'une grandeur plus importante d'élément, intl6 par exemple, dans le vecteur VRa à une plus petite grandeur, int8 par exemple, sont: 1. Vérifier pour s'assurer que chaque élément dans le type de donnée intl6 peut être représenté dans la grandeur de l'octet. Si nécessaire, saturer les éléments aux extrémités
pour s'adapter à la plus petite grandeur. 2. Supprimer le brassage des éléments dans VRa avec un autre vecteur VRb
en deux vecteurs VRo:VRd. Les moitiés supérieures de chaque élément dans VRa et VRb sont déplacées à VRc et les moitiés inférieures sont déplacées à VRd. Cela rassemble efficacement les moitiés inférieures de tous les
éléments dans VRa dans la moitié inférieure de VRd.
Des instructions spéciales sont données pour les conversions de types de données qui suivent: int32 en point flottant simple précision; point flottant simple précision en point fixe (notation X.Y); point flottant simple précision en
int32; int8 en int 9; int9 en intl6; et intl6 en int9.
Pour obtenir une flexibilité dans la programmation vectorielle, la plupart des instructions vectorielles utilisent un masque d'éléments pour n'opérer que sur les éléments sélectionnés dans un vecteur. Les Registres Vectoriels à Masque Global VGMRO et VGMR1 identifient les éléments qui sont modifiés dans le registre de destination et
l'accumulateur vectoriel par les instructions vectorielles.
Pour les opérations sur les grandeurs de données de l'octet et de l'octet 9, chacun des 32 bits dans VGMRO (ou VGMR1) identifie un élément sur lequel il faut opérer. Le bit VGMRO<i> étant établi indique que l'élément i de la grandeur de l'octet doit être affecté, i étant O à 31. Pour des opérations sur la grandeur de donnée du demi-mot, chaque paire des 32 bits dans VGMRO (ou VGMR1) identifie un élément sur lequel il faut opérer. Les bits VGMRO<2i:2i+1> étant établis, cela indique que l'élément i doit être affecté, i étant O à 15. Si un seul bit d'une paire dans VGMRO est
établi pour une opération sur la grandeur de donnée du demi-
mot, seuls les bits dans l'octet correspondant sont modifiés.
Pour des opérations de la grandeur de donnée du mot, chaque groupe de quatre bits dans VGMRO (ou VGMR1) identifie un élément sur lequel il faut opérer. Les bits VGMRO<4i:4i+3> étant établis, cela indique que l'élément i doit être affecté, i étant égal à O à 7. Si tous les bits dans un groupe de quatre dans VGMRO ne sont pas établis pour une opération de la grandeur du mot de donnée, seuls les bits
dans l'octet correspondant sont modifiés.
On peut établir VGMRO et VGMR1 en comparant un registre vectoriel avec un registre vectoriel ou scalaire ou avec une valeur intermédiaire en utilisant l'instruction VCMPV. Cette instruction établit bien le masque selon la grandeur de donnée spécifiée. Comme un registre scalaire est défini comme ne contenant qu'un seul élément de donnée, les opérations scalaires (c'est-à-dire que les registres de destination sont
scalaires) ne sont pas affectées par le masque d'éléments.
Pour la flexibilité dans la programmation vectorielle, la plupart des instructions de MSP supporte trois formes d'opérations vectorielles et scalaires. Ce sont: 1. Vecteur = vecteur op vecteur 2. Vecteur = vecteur op scalaire 3. Scalaire = scalaire op scalaire Pour le cas 2 o un registre scalaire est spécifié en tant qu'une opérande B, le seul élément dans le registre scalaire est reproduit autant de fois que cela est nécessaire pour adapter le nombre d'éléments dans l'opérande du vecteur A. Les éléments reproduits ont la même valeur que l'élément dans l'opérande scalaire spécifié. L'opérande scalaire peut être d'un registre scalaire ou de l'instruction, sous la forme d'un opérande immédiat. Dans le cas d'un opérande immédiat, l'extension appropriée au signe est appliquée si le type de donnée spécifié utilise une grandeur plus importante de donnée que celle disponible avec la grandeur de zone immédiate. Dans de nombreuses applications multimédia, une attention spéciale doit être portée à la précision du résultat de la source, intermédiaire et finale. De plus, les instructions de multiplication d'entiers produisent des résultats intermédiaires "double précision" qui peuvent
être enregistrés dans deux registres vectoriels.
L'architecture de MSP supporte couramment des formats d'entiers en complément à deux pour des éléments à 8, 9, 16 et 32 bits et le format simple précision IEEE 754 pour des éléments à 32 bits. Un débordement est défini comme étant un résultat qui est au-delà de la valeur la plus positive ou la
plus négative représentable par le type spécifié de donnée.
Quand un débordement se produit, la valeur écrite dans le registre de destination n'est pas un nombre correct. Un sous-débordement n'est défini que pour des opérations à point flottant. A moins qu'autre chose ne soit indiqué, toutes les opérations à point flottant utilisent l'un des quatre modes
d'arrondissement spécifiés dans les bits VCSR<RMODE>.
Certaines instructions utilisent ce que l'on connaît comme un mode d'arrondissement en partant de zéro (pair rond). Ces
instructions sont indiquées explicitement.
La saturation est une fonction importante dans de nombreuses applications multimédia. L'architecture de MSP supporte la saturation dans les quatre opérations sur entiers et à point flottant. Le bit ISAT dans le registre VCSR spécifie le mode de saturation du nombre entier. Le mode de saturation à point flottant, qui est également connu comme
mode IEEE rapide, est spécifié avec le bit FSAT dans le VCSR.
Quand le mode de saturation est validé, un résultat qui est au-delà des valeurs la plus positive ou la plus négative est établi aux valeurs la plus positive ou la plus négative, respectivement. Un débordement ne peut se produire dans ce
cas et un bit de débordement ne peut être établi.
Le Tableau D.4 donne la liste des exceptions précises, qui sont détectées et reportées avant exécution de l'instruction de défaillance. L'adresse du vecteur
d'exception est donnée en notation hexadécimale.
*Tableau D.4: Exceptions Précises
Vecteur Description
d'Exception 0x00000018 Exception Point de Rupture Adresse Instruction Processeur Vectoriel 0x00000018 Exception Point de Rupture Adresse Données Processeur Vectoriel 0x00000018 Exception Instruction Incorrecte Processeur Vectoriel 0x00000018 Exception Seule Etape Processeur Vectoriel 0x00000018 Exception Débordement Pile Adresses Retour Processeur Vectoriel 0x00000018 Exception Sous- débordement Pile Adresses Retour Processeur Vectoriel 0x00000018 Exception VCINT Processeur Vectoriel Ox00000018 Exception VCJOIN Processeur Vectoriel Le Tableau D.5 donne la liste des exceptions imprécises qui sont détectées et reportées après exécution d'un certain nombre d'instructions qui tombent plus tard dans l'ordre du
programme que l'instruction de défaillance.
Tableau D.5: Exceptions Imprécises
Vecteur Description
d'exception 0x00000018 Exception Adresse Instruction Incorrecte Processeur Vectoriel 0x00000018 Exception Adresse Donnée Incorrecte Processeur Vectoriel Ox00000018 Exception Accès Donnée non alignée Processeur Vectoriel 0x00000018 Exception Débordement Entier Processeur Vectoriel 0x00000018 Exception Débordement Point Flottant Processeur Vectoriel 0x00000018 Exception Opérande Incorrecte Point Flottant Processeur Vectoriel Ox00000018 Exception Division par Zéro Point Flottant Processeur Vectoriel 0x00000018 Exception Division par Zéro Entier Processeur Vectoriel
APPENDICE E
Le groupe d'instructions pour le processeur vectoriel
comprend onze classifications comme le montre le Tableau E.1.
Tableau E.1: Récapitulatif classe instructions vectorielles
Classe Description
Contrôle Cette classe comprend les instructions qui Circulation contrôlent la circulation du programme comprenant les instructions d'interfaces de
branchement et de ARM7.
Logique Cette classe comprend les instructions logiques (mode en mode binaire. Bien que le type de données binaire, (mode binaire, masque) soit booléen, les masque) instructions logiques utilisent le masque d'éléments pour modifier les résultats et, par
conséquent, nécessite le type de donnée.
Décaler & Cette classe comprend les instructions qui Tourner décalent et font tourner le masque dans chaque (mode élément. Cette classe différencie les grandeurs élément, d'éléments et est affectée par le masque
masque) d'éléments.
Arithméti- Cette classe comprend les instructions que (mode arithmétiques en mode d'élément. Ce (mode élément, élément, masque) est le résultat du ième élément
masque) calculé à partir des ièmes éléments des sources.
Cette classe différencie les types d'éléments et
elle est affectée par le masque d'éléments.
Multimédia Cette classe comprend des instructions qui sont (masque par optimisées pour des applications multimédia (par élément) élément, masque). Cette classe différencie les types d'éléments et est affectée par le masque d'éléments. Conversion Cette classe comprend des instructions qui Type Donnée convertissent les éléments d'un type de donnée (par (par élément, pas de masque) à un autre. Les élément, instructions de cette classe supportent un pas de groupe spécifique de types de données et elles masque) ne sont pas soumises au masque d'éléments car l'architecture ne supporte pas d'avoir plus d'un
type de données dans un reqistre.
Arithméti- Cette classe comprend des instructions qui que prennent deux éléments de positions différentes Interélé- dans les vecteurs pour produire des résultats
ments arithmétiques.
Déplacement Cette classe comprend des instructions qui Interélé- prennent deux éléments de positions différentes
ments dans les vecteurs pour réarranqer les éléments.
Classe Description
Charge/Enre- Cette classe comprend des instructions qui gistrement chargent ou enregistrent les registres. Ces instructions ne sont pas affectées par le
masque d'éléments.
Opération Cette classe comprend des instructions qui d'Anté- contrôlent les antémémoires d'instructions et mémoire de données. Ces instructions ne sont pas
affectées par le masque d'éléments.
Déplacement Cette classe comprend des instructions qui
Registre transfèrent les données entre deux registres.
Ces instructions ne sont normalement pas affectées par le masque d'éléments et certaines
_______ont l'option d'utiliser le masque d'éléments.
Le Tableau E.2 donne la liste des instructions de
contrôle de circulation.
Tableau E.2: Instructions de contrôle de Circulation
Mnémonique Description
VCBR Branchement Conditionnel VCBRI Branchement Conditionnel Indirect VDICBR Décrément VCR1 et Branchement Conditionnel VD2CBR Décrément VCR2 et Branchement Conditionnel VD3CBR Décrément VCR3 et Branchement Conditionnel VCJSR Saut Conditionnel à Sous-routine VCJSRI Saut Conditionnel à Sousroutine indirecte VCRSR Retour Conditionnel de Sous-routine VCINT Interruption Conditionnelle de ARM7 VCJOIN Jonction Conditionnelle avec ARM7 VCCS Commutateur Contexte Conditionnel VCBARR Barrière Conditionnelle VCHGCR Chanqement Reqistre Contrôle (VCSR) La classe logique supporte les types de données booléennes, qui sont affectées par le masque d'éléments. Le Tableau E.3 donne la liste des instructions de contrôle de circulation. Tableau E.3: Instructions Logiques
Mnémonique Description
VNOT NON - B
VAND ET - (A & B)
VCAND ET Complément - (-A & B) VANDC Complément ET - (A & - B)
VNAND NON-ET - (A & B)
VOR OU - (A i B) VCOR OU Complément - (-A I B) VORC Complément OU - (A I B)
VNOR NON-OU - - (A I B)
VXOR OU Exclusif - (A ^ B) VXNOR NON-OU Exclusif - (A ^ B) Les instructions de la classe décaler/tourner opèrent sur les types de données int8, int9, intl6 et int32 (pas de types de donnée flottante) et sont affectées par le masque d'éléments. Le Tableau E.4 donne la liste des instructions de
le classe décaler/Tourner.
Tableau E.4: Classe Décaler & Tourner
Mnémonique Description
VDIV2N Division par Puissance de 2 VLSL Décalage Logique à Gauche VLSR Décalage Loqique à Droite VROL Rotation à Gauche VROR Rotation à Droite Les instructions de la classe arithmétique, en général, supportent les types de données int8, int9, int16 et int32 et flottante et sont affectées par le masque d'éléments. Pour des limitations spécifiques des types de données non
supportées, il faut se référer à la description détaillée de
chaque instruction ci-dessous. L'instruction VCMPV n'est pas affectée par le masque d'éléments car elle opère sur le masque d'éléments. Le Tableau E.5 donne la liste des
instructions de la classe arithmétique.
Tableau E.5: Classe Arithmétique
Mnémonique Description
VASR Décalage Arithmétique vers la Droite VADD Addition VAVG Moyenne VSUB Soustraction VASUB Valeur Absolue de Soustraction VMUL Multiplication VMULA Multiplication à Accumulateur VMULAF Multiplication à Fraction Accumulateur VMULF Multiplication Fraction VMULFR Multiplication Fraction et Arrondissement VMULL Multiplication Valeur Basse VMAD Multiplication et Addition VMADL Multiplication et Addition Valeur Basse VADAC Addition et Accumulation VADACL Addition et Accumulation Valeur Basse VMAC Multiplication et Accumulation VMACF Multiplication et Accumulation Fraction VMACL Multiplication et Accumulation Valeur Basse VMAS Multiplication et Soustraction de l'Accumulateur VMASF Multiplication et Soustraction de la Fraction de l'Accumulateur VMASL Multiplication et Soustraction de l'Accumulateur Valeur Basse VSATU Saturation à Limite Supérieure VSATL Saturation à Limite Inférieure VSUBS Soustraction Condition Scalaire et Etablie VCMPV Comparaison Vecteur et Masque Etabli VDIVI Initialisation Division VDIVS Etape Division VASL Décalaqe Arithmétique vers la Gauche VASA Décalage Arithmétique Accumulateur de 1 bit Les instructions de MPEG sont une classe d'instructions spécialement adaptée à un codage et à un décodage MPEG, mais on peut les utiliser d'une grande variétés de façons. Les instructions de MPEG supportent les types de données int8, int9, intl6 et int32 et sont affectées par le masque d'éléments. Le Tableau E.6 donne la liste des instructions de MPEG. Tableau E.6: Classe MPEG
Mnémonique Description
VAAS3 Addition et Addition Siqne de (-1, O, 1) VASS3 Addition et Soustraction Signe de (-1, O, 1) VEXTSGN2 Extraction Signe de (-1, 1) VEXTSGN3 Extraction Siqne de (-1, O, 1) VXORALL Réunion Logique du bit de moindre poids de tous les éléments Chaque instruction de conversion de type de donnée supporte des types de données spécifiques et n'est pas affectée par le masque d'éléments car l'architecture ne supporte pas plus d'un type de donnée dans un registre. Le Tableau E.7 donne la liste des instructions de conversion de
types de donnée.
Tableau E.7: Classe Conversion Type de Donnée
Mnémonique Description
VCVTIF Convertir Entier en Point Flottant VCVTFF Convertir Point Flottant en Point Fixe VROUND Arrondir Point Flottant à Entier (supporte 4 modes d'arrondissement IEEE) VCNTLZ Compte Zéros en-tête VCVTB9 Convertir un Type de Donnée Octet 9 La classe d'instructions arithmétiques interéléments supporte les types de données int8, int9, intl6 et int32 et flottantes. Le Tableau E.8 donne la liste des instructions
dans la classe arithmétique interéléments.
Tableau E.8: Classe Arithmétique Interéléments
Mnémonique Description
VADDH Ajouter deux Eléments Adjacents VAVGH Faire la moyenne de deux Eléments Adjacents VAVGQ Faire la moyenne des Elements Quad VMAXE Echange maximum Eléments Pair/Impair La classe d'instructions déplacement interéléments supporte les grandeurs de données octet, octet 9, demi-mot et mot. Le Tableau E. 9 donne la liste de la classe
d'instructions de déplacement interéléments.
Tableau E.9: Classe Déplacement Interéléments
Mnémonique Description
VESL Décalage Elément à Gauche de 1 VESR Décalage Elément à Droite de 1 VSHFL Brassage à Elément Pair/Impair VSHFL Brassage à Elément Pair/Impair VSHFLH Brassage à Elément Pair/Impair Valeur Haute VSHFLL Brassage à Elément Pair/Impair Valeur Basse VUNSHFL Débrassage à Elément Pair/Impair VUNSHFLH Débrassage à Elément Pair/Impair Valeur Haute VUNSHFLL Débrassage à Elément Pair/Impair Valeur Basse Les instructions de charge/enregistrement supportent, en plus des grandeurs de données de l'octet, du demi-mot et du mot, des opérations sur les grandeurs de données en rapport avec l'octet 9 spéciales et ne sont affectées par le masque d'éléments. Le Tableau E.10 donne la liste des instructions
en classe de charge/enregistrement.
Tableau E.1O: Classe Charge/Enregistrement
Mnémonique Description
VL Charge VLD Charge Double VLQ Charge Quad VLCB Charge de Tampon Circulaire VLR Charqe Ordre Elément Inverse VLWS Charge avec Chevauchement VST Enregistrement VSTD Enreqistrement Double VSTQ Enregistrement Quad VSTCB Enregistrement à Tampon Circulaire VSTR Enreqistrement Ordre Elément Inverse VTSWS Enregistrement Avec Chevauchement La plupart des instructions de déplacement de registre supportent les types de données int8, int9, intl6, int32 et
flottante et ne sont pas affectées par le masque d'éléments.
Seule l'instruction VCMOVM est affectée par le masque d'éléments. Le Tableau E.11 donne la liste de la classe
d'instructions de déplacement de registre.
Tableau E.11: Classe Déplacement Registre
Mnémonique Description
VLI Charge Immédiate VMOV Déplacement VCMOV Déplacement Conditionnel VCMOVM Déplacement Conditionnel avec Masque D'Eléments VEXTRT Extraire Un Elément VINSERT Insérer Un Elément Le Tableau E.12 donne la liste des instructions dans la classe d'opérations d'antémémoire qui contrôle le
sous-système d'antémémoire 130.
Tableau E.12: Classe Opérations Antémémoire
Mnémonique Description
VCACHE Opération antémémoire à antémémoire données ou instructions VPFTCH Pré-extraction dans antémémoire données VWBACK Réécriture de antémémoire données
NOMENCLATURE DESCRIPTION INSTRUCTIONS
Pour simplifier la spécification du groupe d'instructions, une terminologie spéciale est utilisée dans tous les appendices. Par exemple, les opérandes d'instructions sont des entiers en complément à deux avec signe des grandeurs octet, octet 9, demi-mot ou mot, à moins qu'autre chose ne soit noté. Le terme " registre " est utilisé pour désigner un registre d'utilité générale (scalaire ou vectoriel). D'autres types de registres sont décrits explicitement. Dans la syntaxe du langage d'assemblage, les suffixes b, b9, h et w désignent à la fois les grandeurs des données (octet, octet 9, demi-mot et mot) et les types de données en entier (int8, int9, intl6 et int32). Par ailleurs, la terminologie et les symboles utilisés pour décrire les opérandes d'instructions, les opérations et la syntaxe du langage d'assemblage sont comme suit. Rd registre destination (vectoriel, scalaire ou d'utilité spéciale) Ra, Rb registres de source a et b (vectoriel, scalaire ou d'utilité spéciale) Rc - registre de source ou de destination c (vectoriel ou scalaire) Rs registre de source de données d'enregistrement (vectoriel ou scalaire) S registre scalaire ou d'utilité spéciale à 32 bits VR registre vectoriel rangée courante VRA registre vectoriel rangée alternative VRO registre vectoriel rangée O VR1 registre vectoriel rangée 1 VRd registre vectoriel destination (défaut à rangée courante à moins que VRA ne soit spécifié) VRa,VRb registres vectoriels source a et b VRc registre vectoriel source ou destination c VRs registre vectoriel source donnée enregistrement VACOH Registre Accumulateur Vectoriel O Etat Haut VACOL Registre Accumulateur Vectoriel O Etat Bas VAC1H Registre Accumulateur Vectoriel 1 Etat Haut VAC1L Registre Accumulateur Vectoriel 1 Etat Bas SRd registre scalaire destination SRa, SRb registres scalaires source a et b SRb+ remettre registre de base au point avec l'adresse effective SRs registre source données enregistrement scalaire SP registre utilité spéciale VR[i] ième élément dans registre vectoriel VR VR[i]<a:b> bits a à b du ième élément dans registre vectoriel VR VR[i]<msb> le bit le plus significatif du ième élément dans le registre vectoriel VR EA adresse effective pour accès mémoire MEM mémoire BYTE[EA] un octet en mémoire adressé par EA HALF[EA] demi-mot en mémoire adressé par EA. bits <15:8>
adressés par EA+1.
WORD[EA] un mot en mémoire adressé par EA. bits <31:24>
adressés par EA+3.
NumElem désigne le nombre d'éléments pour un type donné de donnée. Il est de 32, 16 ou 8 pour l'octet et l'octet 9, le demi-mot ou le mot, respectivement en mode VEC32. Il est de 64, 32 ou 16 pour les grandeurs de données de octet et octet 9, demi-mot ou mot, en mode VEC64. Pour les opérations scalaires NumElem est de O. EMASK[i] désigne le masque d'éléments pour le ième élément. Il représente 1, 2, ou 4 bits dans VGMRO/1, -VGMRO/1, VMMRO/1 ou -VMMRO/1 pour les grandeurs de données d'octet et octet 9, demi-mot ou mot, respectivement. Pour les opérations scalaires, le masque d'éléments est supposé être établi même si EMASK[i] = O. MMASK[i] désigne le masque d'éléments pour le ième élément. Il représente 1, 2, ou 4 bits dans VMMRO ou VMMR1 pour les grandeurs de données de l'octet et de l'octet 9, du demi-mot ou du mot respectivement. VCSR le Registre de Contrôle Vectoriel et d'Etat VCSR<x> désigne un bit ou des bits dans VCSR. " x " est
un nom de zone.
VPC compteur programme processeur vectoriel VECSIZE la grandeur du registre vectoriel est de 32 en
mode VEC32 et 64 en mode VEC64.
SPAD zone de travail Les constructions de programmation C sont utilisées pour décrire la circulation de contrôle des opérations. Les exceptions sont notées ci-dessous: = affectation : concaténation {x I I y} indique une sélection entre x ou y (pas un ou logique) sex étendre signe à grandeur spécifiée donnée sex_dp étendre au signe à double précision de grandeur de donnée spécifiée sign" décalage à droite avec extension signe (arithmétique) zex étendre à zéro à la grandeur spécifiée de donnée zéro" décalage à droite étendu au zéro (logique) << décalage à gauche (remplissage zéro) trnc7 tronquer 7 bits menants (à partir d'un demi-mot) trncl tronquer 1 bit menant (à partir de l'octet 9) % opérateur modulo I expression I valeur absolue de l'expression / diviser (pour type donnée flottante utiliser l'un des quatre modes d'arrondissement IEEE) // diviser (utiliser l'arrondissement à partir du mode d'arrondissement à zéro) saturer() saturer à la valeur la plus négative ou la plus positive, au lieu de générer un débordement pour des types de données d'entier. Pour un type de donnée flottante, la saturation peut être à l'infini positif, au zéro positif, au zéro
négatif ou à l'infini négatif.
Les formats d'instructions générales sont montrés à la
figure 8 et décrits ci-dessous.
Format REAR utilisé par les instructions d'opérations de charge, enregistrement et antémémoire et les zones dans le format REAR ont les significations suivantes, telles que
données au Tableau E.13.
Tableau E.13: Format REAR Champ Signification Opc<4:0> Opcode
B Identificateur rangée pour le registre Rn.
D Registre scalaire destination/source. Quand il est établi Rn<4:0> indique un registre scalaire. Les valeurs légales pour les codages B:D en mode VEC32 sont: 00 Rn est un registre vectoriel dans la rangée courante 01 Rn est un registre scalaire (dans la rangée courante) Rn est un registre vectoriel dans l'autre rangée 11 non défini Les valeurs légales pour les codages B:D en mode VEC64 sont: 00 uniquement 4, 8, 16 ou 32 octets dans le registre vectoriel Rn sont utilisés 01 Rn est un registre scalaire les 64 octets du registre vectoriel Rn sont utilisés 11 non défini TT <1:0> Type Transfert indique une opération spécifique de charge ou d'enregistrement. Voir les Tableaux de
codage LT et ST ci-dessous.
C Antémémoire hors ligne. Etablir ce bit pour court- circuiter l'Antémémoire de données pour la charge. Ce bit est établi avec la Mnémonique d'Antémémoire hors circuit des instructions de charge et enregistrement (concaténer hors ligne à la mnémonique) A Mise à jour adresse. Etablir ce bit pour remettre SRb à jour avec l'adresse effective. L'adresse
effective est calculée comme SRb+SRi.
Rn <4:0> Numéro registre destination/source SRb <4:0> Numéro registre base scalaire SRi <4:0> Numéro registre indice scalaire Les bits 17:15 sont réservés et doivent être des zéros pour assurer la compatibilité avec des extensions futures dans l'architecture. Certains codages des zones B:D et TT sont
non définis.
Le programmeur ne doit pas utiliser ces codages car l'architecture ne spécifie par le résultat attendu lorsqu'un tel codage est utilisé. Le Tableau E.14 montre des opérations de charge scalaire supportées (codées dans la
zone TT comme LT) dans les deux modes VEC32 et VEC64.
Tableau E.14: Opérations charge REAR en modes VEC32 et VEC64 D:LT Mnémonique Signification 1 00.bs9 charger 8 bits dans grandeur du octet 9, en étendant au siqne 1 01.h charger 16 bits dans la grandeur du demi-mot 1 10.bz9 charger 8 bits dans la grandeur de l'octet 9, en étendant au zéro 1 11.w charger 32 bits dans la grandeur du mot Le Tableau E.15 montre les opérations de charge vectorielle supportées (codées dans la zone TT en tant que LT) en mode VEC32 qui se présente quand le bit VCSR<0> est effacé. Tableau E.15: opérations charge REAR en mode VEC32 D:LT Mnémonique Signification 0 00.4 Charger 4 octets de la mémoire dans les 4 octets 9 inférieurs dans le registre et laisser les octets 9 restants non modifiés. Tous les 9èmes bits des octets 9 sont étendus au signe à partir du
8ème bit correspondant.
0 01.8 Charger 8 octets de la mémoire dans les 8 octets 9 inférieurs dans le registre et laisser les octets 9 restants non modifiés. Tous les 9èmes bits des octets 9 sont étendus au signe à partir du
8ème bit correspondant.
0 10.16 charger 16 octets de la mémoire dans les 16 octets 9 inférieurs du registre et laisser les octets 9 restants non modifiés. Tous les 9èmes bits, des 16 octets 9 sont étendus au signe à partir du
8ème bit correspondant.
D:LT Mnémonique Siqnification O 11il.32 charger 32 octets de la mémoire dans les 32 octets 9 inférieurs, dans le registre et laisser les
octets 9 restants non modifiés.
Tous les 9èmes bits des 32 octets 9, sont étendus au signe à partir
___ __du 8ème bit correspondant.
Le bit B est utilisé pour indiquer la rangée courante ou l'autre. Le Tableau E.16 montre des opérations de charge vectorielle supportées (codées en zone TT en tant que LT) en mode VEC64 ce qui se présente quand le bit VCSR <0> est établi. Tableau E.16: Opérations Charqe REAR en mode VEC32 B:D:LT Mnémonique Siqnification 0 0 00O.4 charger quatre octets de la mémoire dans les quatre octets 9 inférieurs du registre et laisser les octets 9 restants non modifiés. Tous les 9èmes bits des 4 octets 9 sont étendus au signe à partir du
8ème bit correspondant.
0 0 01.8 Charger 8 octets de la mémoire dans les 8 octets 9 inférieur du registre et laisser les octets 9 restants non modifiés. Tous les 9èmes bits des 8 octets 9 sont étendus au signe à partir du
8ème bit correspondant.
0 0 10.16 Charger 16 octets de la mémoire dans les 16 octets 9 inférieurs dans le registre et laisser les
octets 9 restants non modifiés.
Tous les 9èmes bits des 16 octets 9 sont étendus au signe à partir du
8ème bit correspondant.
O O 11.32 Charger 32 octets de la mémoire dans les 32 octets 9 inférieursdu registre et laisser les octets 9 restants non modifiés. Tous les 9èmes bits des 32 octets 9 sont étendus au signe à partir du
_______ ____8ème bit correspondant.
B:D:LT Mnémonique Siqnification 1 O 00 non défini 1 O 01 non défini 1 O 10 non défini 1 O 11.64 Charger les 64 octets de la mémoire dans les 64 octets 9 inférieurs du registre et laisser les octets 9 restants non modifiés. Tous les 9èmes bits des 64 octets 9, sont étendus au signe à partir du
8ème bit correspondant.
Le bit B est utilisé pour indiquer une opération vectorielle de 64 octets car le concept de la rangée courante et
alternée n'existe pas en mode VEC64.
Le Tableau E.17 donne la liste des opérations d'enregistrement scalaires supportées (codées dans la zone
TT en tant que ST) en mode VEC32 et VEC64.
Tableau E.17: opérations d'Enregistrement Scalaire REAR D:ST Mnémonique Signification 1 00.b Enregistrer grandeurs octet ou octet 9 dans 8 bits (tronquer 1 bit de l'octet 9) 1 01.h Enregistrer grandeur demi-mot dans 16 bits 1 10 non défini 1 il11.w Enregistrer grandeur mot dans
32 bits.
Le Tableau E.18 donne la liste des opérations d'enregistrement vectoriel supportée (codées en zones TT en tant que ST) en mode VEC32 ce qui se présente quand le bit
VCSR <O> est effacé.
Tableau E.18: opérations d'Enregistrement Vectoriel
REAR en mode VEC32.
D:ST Mnémonique Signification O 00.4 Enregistrer 4 octets du registre dans la mémoire. Tous les neuvièmes bits des 4 octets 9 dans
le registre sont iqnorés.
0 01.8 Enregistrer 8 octets du registre dans la mémoire. Tous les neuvièmes bits des 8 octets 9 dans
le registre sont ignorés.
0 10.16 Enregistrer 16 octets du registre dans la mémoire. Tous les 9ème bits des 16 octets 9 dans le registre
sont ignorés.
0 11.32 Enregistrer 32 octets du registre dans la mémoire. Tous les 9èmes bits des 32 octets 9 dans le
registre sont ignorés.
Le Tableau E.19 donne la liste des opérations d'enregistrement vectoriel supportées (codées en zone TT en tant que ST) en mode VEC64, ce qui se présente quand le bit
VCSR <0> est établi.
Tableau E.19: Opérations d'Enregistrement Vectoriel REAR en mode VEC32 B:D:ST Mnémonique Signification O O 00.4 Enregistrer 4 octets du registre dans la mémoire. Tous les 9èmes bits des 4 octets 9 dans le
registre sont ignorés.
0 O 01.8 Enregistrer 8 octets du registre dans la mémoire. Tous les 9èmes bits des 8 octets 9 dans le
registre sont ignorés.
0 0 10.16 Enregistrer 16 octets du registre dans la mémoire. Tous les neuvièmes bits des 16 octets 9 dans
le registre sont ignorés.
O O 11il.32 Enregistrer 32 octets du registre dans la mémoire tous les 9èmes bits des 32 octets 9 dans le registre
sont ignorés.
1 0 00 non défini 1 0 01 non défini 1 0 10 __ non défini 1 0 11.64 Enregistrer 64 octets du registre dans la mémoire. Tous les 9èmes bits des 64 octets 9 dans le
reqistre sont iqnorés.
Le bit B est utilisé pour indiquer une opération vectorielle à 64 octets car le concept de la rangée courante et alternée
n'existe pas en mode VEC64.
Le format REAI est utilisé par les instructions des opérations de charge, enregistrement et antémémoire. Le Tableau E.20 montre les significations des zones en format REAI. Tableau E.20: Format REAI Zone Siqnification Opc<4:0> Code opération B Identificateur rangée du registre Rn. Quand il est établi en mode VEC32, Rn<4:0> désigne un numéro de registre vectoriel dans l'autre rangée. Quand il est établi en mode VEC64, cela désigne une
opération vectorielle complète (64 octets).
D Registre scalaire destination/source. Quand il est
établi, Rn<4:0> désigne un registre scalaire.
Les valeurs correctes pour les codages B:D en mode VEC32 sont: 00 Rn est un registre vectoriel dans la rangée courante 01 Rn est un registre scalaire (dans la rangée courante) Rn est un registre vectoriel dans l'autre rangée 11 non défini Les valeurs correctes pour les codages B:D en mode VEC64 sont: 00 seuls 4, 8, 16 ou 32 octets du registre vectoriel Rn sont utilisés 01 Rn est un registre scalaire les 64 octets de registre vectoriel Rn sont utilisés 11 non défini TT<1:0> Type Transfert indique une opération spécifique de charge ou d'enregistrement. Voir les Tableaux de
codage de LT et ST ci-dessous.
C Antémémoire hors ligne. Etablir ce bit pour court- circuiter l'antémémoire de données pour la charge. Ce bit est établi avec la mnémonique d'antémémoire circuit des instructions de charge et d'enregistrement hors circuit(concaténer hors ligne
à la mnémonique).
A Mise à jour adresse. Etablir ce bit pour remettre à jour SRb avec l'adresse effective. L'adresse
effective est calculée en tant que SRb+IMM <7:0>.
Rn<4:0> Numéro registre destination/source SRb<4:0> Numéro registre base scalaire IMM<7:0> Un décalage immédiat de 8 bits, interprété comme un
nombre en complément à deux.
Les formats REAR et REAI utilisent des codages identiques pour les types de transfert. Se référer au format REAR pour
d'autres détails de codage.
Le format RRRM5 prévoit trois registres ou deux registres et un opérande immédiat de 5 bits. Le Tableau E.21
définit la zone pour le format RRRM5.
Tableau E.21: Format RRRM5 Zone Signification Op<4:0> Code opération D Registre scalaire destination. Quand il est
établi, Rd<4:0> désigne un registre scalaire.
Quand il est effacé, Rd<4:0> désigne un registre vectoriel. S Registre Rb scalaire. Quand il est établi
indique que Rb<4:0> est un registre scalaire.
Quand il est effacé, Rb<4:0> est un registre vectoriel. DS<l:0> Grandeur Donnée. Les codages sont: 00 octet (utilisé par type donnée int8) 01 octet 9 (utilisé par type donnée int9) demi-mot (utilisé par type donnée intl6) 11 mot (utilisé par type donnée int32 ou flottante) M Modificateur pour les bits D:S. Voir le Tableau
de codage de D:S:M ci-dessous.
Rd<4:0> Numéro registre destination D. Ra<4:0> Numéro registre source A. Rb<4:0> ou Numéro registre source B sur un immédiat de
IM5<4:0> 5 bits, déterminé par le codage D:S:M.
L'immédiat de 5 bits est interprété comme un
nombre sans signe.
Les bits 19:15 sont réservés et doivent être des zéros pour assurer la compatibilité avec des extensions futures dans l'architecture. Tous les opérandes de registre vectoriel se rapportent à la rangée courante (qui peut être soit la rangée O, soit la rangée 1), à moins qu'autre chose ne soit indiqué. Le Tableau E.22 donne la liste des codages D:S:M quand DS<l:0>
est 00, 01 ou 10.
Tableau E.22: codages D:S:M de RRRM5 pour DS qui n'est pas éqal à 11 Codaqe Rd Ra Rb/IM5 Commentaires 000 VRd VRa VRb Trois opérandes de registre vectoriel 001 Non défini VRd VRa SRb L'opérande B est un registre scalaire 011 VRd VRa IM5 L'opérande B est un immédiat à bits Non défini 101 Non défini SRd SRa SRb Trois opérandes de registre scalaire 111 SRd SRa IM5 L'opérande B est un immédiat à ___ __ _5 bits Les codages D:S:M ont les significations suivantes quand DS<1:0> est 11: Tableau E.23: Coda es D:S:M de RRRM5 pour DS égal à 11 D:S:M Rd Ra Rb/IM5 Commentaires 000 VRd VRa VRb Trois opérandes registre vectoriel (int32) 001 VRd VRa VRb Trois opérandes registre vectoriel (flottant) VRd VRa SRb L'opérande B est un registre scalaire (int32) 011 VRd VRa IM5 L'opérande B est un immédiat à bits (int32) VRd VRa SRb L'opérande B est un registre scalaire (flottant) 101 SRb SRa SRb Trois opérandes de registre scalaire (flottant) SRd SRa SRb Trois opérandes de registre scalaire (int32) 111 SRd SRa IM5 L'opérande B est un immédiat à 1_ _1_ _ 1__5bits(int32) Le format RRRR prévoit quatre opérandes de registre. Le
Tableau E.24 montre les zones dans le format RRRR.
Tableau E.24: Format RRRR Zone Signification Op<4:0> Code opération Registre Rb scalaire. Quand il est établi, cela
indique que Rb<4:0> est un registre scalaire.
Quand il est effacé, Rb<4:0> est un registre vectoriel. DS<l:O> Grandeur Donnée. Les codages sont: 00 octet (utilisé par type donnée int8) 01 octet 9 (utilisé par type donnée int9) demi-mot (utilisé par type donnée intl6) 11 mot (utilisé par type donnée int32 ou flottante) Rc<4:0> Numéro reqistre source/destination C Rd<4:0> Numéro reqistre destination D Rd<4:0> Numéro reqistre source A Rb<4:0> Numéro registre source B Tous les opérandes de registre vectoriel se rapportent à la rangée courante (qui peut être soit la rangée O ou la rangée
1) à moins qu'autre chose ne soit indiqué.
Le format RI n'est utilisé que par l'instruction immédiate de charge. Le Tableau E.25 indique les zones dans
le format RI.
Tableau E.25: format RI Zone Signification D Registre scalaire destination. Quand il est
établi, Rd<4:0> désigne un registre scalaire.
Quand il est effacé, Rd<4:0> désigne un registre
vectoriel dans la rangée courante.
F Type donnée flottante. Quand il est établi, désigne le type de donnée à point flottant et
nécessite DS<l:0> pour être 11.
DS<1:O> Grandeur Donnée. Les codages sont: 00 octet (utilisé par type donné int8) 01 octet 9 (utilisé par type donné int9) demi-mot (utilisé par type donné intl6) 11 mot (utilisé par type donné int32 ou flottante) Rd<4:0> Numéro registre destination D IMM<18:0> Valeur immédiate 19 bits Certains codages de la zone F:DS<1:O> sont non définis. Le programmeur ne doit pas utiliser ces codages car l'architecture ne spécifie pas le résultat attendu quand un tel codage est utilisé. La valeur chargée dans Rd dépend du
type de donnée comme le montre le Tableau 26.
Tableau E.26: valeurs chargées format RI Format Type donnée Opérande registre b octet (8 bits) Rd<7:0>:=Imm<7:0> b9 octet 9 (9 bits) Rd<8:0>:=Imm<8:0> h demi-mot (16 bits) Rd<15:0> :=Imm<15:0> w mot (32 bits) Rd<31:0>:= Imm<18> étendu au signe f point flottant Rd<31>:0>:=Imm<18>(signe) (32 bits) Rd<30:23>:=Imm<17:0>(exposant) Rd<22:13>:=Imm<9:0>(mantisse) Rd<12:0>:=zéros Le format CT comprend les zones montrées au Tableau E.27 Tableau E.27: format CT Zone Signification Opc<3:0> Code opération Cond<2:0> Condition branchement: 000 toujours 001 moins que égal 011 moins que ou égal plus que 101 pas égal plus que ou égal 111 débordement IMM<22:0> Un décalage de mot immédiat de 23 bits,
interprété comme un nombre en complément à deux.
Les conditions de branchement utilisent la zone VCSR [GT:EQ:LT]. La condition de débordement utilise les bits VCSR [SO] qui précédent les bits GT, EQ et LT qu'il est établi. VCCS et VCBARR interprètent la zone Cond<2:0> différemment de ce qui a été décrit ci-dessus. Se référer en
détail à leur description d'instructions.
Le format RRRM9 spécifie trois registres ou deux registres et un opérande immédiat à 9 bits. Le Tableau E.28
indique les zones du format RRRM9.
Tableau E.28: Format RRRM9 Zone Siqnification Opc<5:0> Code opération D Registre scalaire destination. Quand il est
établi, Rd<4:0> désigne un registre scalaire.
Quand il est effacé, Rd<4:0> désigne un registre vectoriel. S Registre scalaire Rb. Quand il est établi, Rd<4:0> est un registre scalaire. Quand il est effacé, Rd<4:0> désigne un reqistre vectoriel DS<l:0> Grandeur Donnée. Les codages sont: 00 octet (utilisé par type donné int8) 01 octet 9 (utilisé par type donné int9) demi-mot (utilisé par type donné intl6) 11 mot (utilisé par type donné int32 ou flottante) M Modificateur pour les bits D:S. Voir le Tableau
de codage D:S:M ci-dessous.
Rd<4:0> Numéro registre destination.
Ra<4:0> Numéro reqistre source A. Rd<4:0> ou Numéro registre source B ou immédiat à 5 bits,
IM5<4:0> déterminé par le codage D:S:M.
IM9<3:0> Avec IM5<4:0>, produit un immédiat à 9 bits,
déterminé par le codaqe D:S:M.
Les bits 19:15 sont réservés quand le codage D:S:M ne spécifie pas un opérande immédiat et doivent être des zéros
pour assurer une future compatibilité.
Tous les opérandes de registre vectoriel se rapportent à la rangée courante (qui pourrait être soit la rangée O ou la rangée 1) à moins qu'autre chose ne soit indiqué. Les codages D:S:M sont identiques à ceux montrés aux Tableaux E.22 et E.23 pour le format RRRM5, à l'exception que les valeurs immédiates extraites de la zone immédiate dépendent
du codage DS<1:O>, comme le montre le Tableau E.29.
Tableau E.29: valeurs immédiates en format RRRM9 Format Type données Opérande B concordantes 00 int8 Source B<7:0> :=Imm9<2:0>:IM5<4:0> 01 int9 Source B<8:0>:=Imm9<3:0>:IM5<4:0> intl6 Source B<15:0>:=sex(<IM9<3:0>:IM5<4:0>) il11 int32 Source B<31:0>:=sex(<IM9<3:0>:IM5<4:0>) Le format immédiat n'est pas disponible avec le type de
donnée flottante.
Dans ce qui suit, les instructions du vecteur MSP apparaissent en ordre alphabétique. Noter: 1. Une instruction est affectée par le masque d'éléments, à moins qu'autre chose ne soit noté. Les instructions au format CT ne sont pas affectées par le masque d'éléments. Les instructions au format REAR et REAI, qui consistent en les instructions de charge, enregistrement et antémémoire, ne sont pas non plus
affectées par le masque d'éléments.
2. L'opérande immédiat à 9 bits n'est pas disponible avec
le type de donnée flottante.
3. Dans la description des Opérations, seule la forme
vectorielle est donnée. Pour l'opération scalaire, on
suppose qu'un seul élément, le Oème, est défini.
* 4. Pour les formats RRRM5 et RRRM9, les codages suivants sont utilisés pour les types de données entières (b, b9, h, w): D:S:M | 000 I 010 | 011 | 110 111 l DS 00 0t 10 11 5. Pour les formats RRRM5 et RRRM9, les codages suivants sont utilisés pour les types de données flottantes: D:S:M I 001 I 100 n/a 101 n/a DS il11 6. Pour toutes les instructions qui peuvent provoquer un débordement, une saturation à int8, int9, intl6, int32, des limites maximales ou minimales sont appliquées quand le bit VCSR<ISAT> est établi. De manière correspondante, le résultat à point flottant est saturé à -infini, -zéro, +zéro ou +infini quand le bit
VCSR<FSAT> est établi.
7. Syntactiquement,.n peut être utilisé au lieu de.b9
pour désigner la grandeur de données d'octet 9.
8. Pour toutes les instructions, le résultat à point flottant retourné au registre de destination ou à l'accumulateur vectoriel est au format simple précision IEEE 754. Le résultat à point flottant est écrit à la portion inférieure de l'accumulateur et la portion
supérieure n'est pas modifiée.
VAAS3 Addition et signe d'addition de (-1.0.11 Format ao: 5 o o5 RRRM5 0oo 100 0| DSJ Rd Ra Rb olli i NH It'sHi Syntaxe Assembleur VAAS3.dt VRd, VRa, VRb VAAS3.dt VRd, VRa, SRb VAAS3.dt SRd, SRa, SRb o dt = {b, b9, h, w} Modes supportés
D:S:M V<-V @ V V<-V @ S I I <-S @ S
DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Le contenu du registre vectoriel/scalaire Ra est ajouté à Rb pour produire un résultat intermédiaire, le résultat intermédiaire est alors additionné avec le signe de Ra; et le résultat final enregistré dans le registre
vectoriel/scalaire Rd.
Opération pour (i=0;l<NumElem && EMASK[i];i++){ si (Ra[i]>0) extsgn3 = 1; autrement si (Ra[i]<0) extsgn3 = -1; autrement extsgn3 = 0; Rd[i]=Ra[i]+Rb[i]+extsgn3; } Exception Débordement. VADAC Addition et accumulation Format 20 1 t0 5 o I 11111 1111 i I Il11 RRRR 0 10 0l 00 S DS Rc Rd Ra Rb Syntaxe Assembleur VADAC.dt VRc, VRd, VRa, VRb VADAC. dt SRc, SRd, SRa, SRb o dt = {b, b9, h, w} Modes supportés
S I VR I SR
DS | int8 (b) int9 (b9) intl6 (h) int32 (w
Description
Ajouter chaque élément des opérandes Ra et Rb avec chaque élément double précision de l'accumulateur vectoriel; enregistrer la somme double précision de chaque élément à l'accumulateur vectoriel et aux registres de destination Rc et Rd. Ra et Rb utilisent le type de donnée spécifié tandis que VAC utilise le type de donnée double précision approprié (16, 18, 32 et 64 bits pour int8, int9, intl6 et int32, respectivement). Les portions supérieures de chaque élément double précision sont enregistrées dans VACH et Rc. Si Rc = Rd,
le résultat dans Rc est non défini.
Opération pour (i = 0;i < NumElem && EMASK[i];i++){ Aop[i] = {VRa[i] Il SRa} Bop[i] = {VRb[i] I| SRb} VACH[i]:VACL[i] = sex(Aop[i] + Bop[i]) + VACH[i]:VACL[i]; Rc[i] = VACH[i]; RD[i] = VACL[i]; } VADACL Addition et accumulation valeur basse Format _o 3 20 15 1 s RRRM9 O1I 000011 IDSH 9 Rd | RbIM Syntaxe Assembleur VADACL.dt VRd, VRa, VRb VADACL.dt VRd, VRa, VRb VADACL.dt VRd, VRa, #IMM VADACL.dt SRd, SRa, SRb VADACL.dt SRd, SRa, #IMM
o dt = {b, b9, h, w}.
Modes supportés D:S:M V<-V @ V V<-V @ S V<-V @ I S<-S @ S S<- S @ I DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Ajouter chaque élément des opérandes Ra et Rb/immédiats à chaque élément à précision étendue de l'accumulateur vectoriel; enregistrer la somme à la précision étendue dans l'accumulateur vectoriel; retourner la plus basse précision au registre de destination Rd. Ra et Rb/immédiat utilisent le type de donnée spécifié tandis que VAC utilise le type de donnée double précision approprié (16, 18, 32 et 64 bits pour int8, int9, intl6 et int32, respectivement). Les portions supérieures de chaque élément à précision
étendue sont enregistrées dans VACH.
Opération pour (i=0;1< NumElem && EMASK[i];i++){ Bop[i]={VRb[i] Il SRb Il sex(IMM<8:0>)}; VACH[i]:VACL[i] = sex(Ra[i] + Bop[i] + VACH[i]:VACL[i]; Rd[i] = VACL[i]; } VADD Addition Format II i.-'0 1 10 5 0 RRRM9 |1|I 000( 00 DISIDS IM9| Rd | Ra Rb/1R Syntaxe Assembleur VADD.dt VRd, VRa, VRb VADD.dt VRd, VRa, SRb VADD.dt VRd, VRa, #IMM VADD.dt SRd, SRa, SRb VADD.dt SRd, SRa, #IMM o dt = {b, b9, h, w, f} Modes supportés
D:S:M 1 V<-V @ V 1 V<-V @ S J V<-V @ I 1 S<-S @ SI S<-S Q I
DS int8 (B) int9 (b9) int16 (h) int32 (w) flottant(f)
Description
Ajouter les opérandes Ra et Rb/immédiats et retourner la somme au registre de destination Rd. Opération pour (i=0;i<NumElem && EMASK[i];i++ ){ Bopti]={VRb[i] JI SRb Il sex(IMM<8:0>)}; Rd[i]=Ra[i]+Bop[i]; } Exception Débordement, opérande point flottant incorrect. VADDH Addition de Deux Eléments Adjacents Format 3M 2n5 20 15 10 c O RRRM5 0 1 0 10100 IDISIDSH Rd Ra R Syntaxe Assembleur VADDH.dt VRd, VRa, VRb VADDH.dt VRd, VRa, SRb
o dt = {b, b9, h, w, f}.
Modes supportés v<- v1v<-v sI() D:S:M I V<-V @ V i Vc-V @ S r I I DS 7 int8 (b) lint9 (b9) intl6 (h) int32 (w) flottant f
Description
Rb Ra Bo B 0 An 1 A.2 | A2 A 1 Ao Rd.. 1 2 1 D 1D Opération pour (i=0;i<NumElem -l;i++){ Rd[i]=Ra[i]+Ra[i+l]; Rd[NumElem1]=Ra[NumElem-l]+{VRb[O] || SRb}; Exception Débordement, opérande point flottant incorrect. Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VAND ET
Format RRRM9 1 OI10&O |DDS DS IM9 Rd Rai Rb/LM Syntaxe Assembleur VAND.dt VRd, VRa, VRb VAND.dt VRd, VRa, SRb VAND.dt VRd, VRa, #IMM VAND.dt SRd, SRa, SRb VAND.dt SRd, SRa, #IMM o dt = {b, b9, h, w}. Noter que.w et.f
spécifient la même opération.
Modes su pportés D:S:M V<-V @ V V<-V @ S IV<--V @ I S@<-S @ S S<- S @ I DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Faire subir une opération ET logique aux opérandes Ra et Rb/immédiats et retourner le
résultat au registre de destination Rd.
Opération pour (i=0;i<NumElem && EMASK[i];i++){ Bop[i]={VRb[i] Il SRb I| sex(IMM<8:0>)} Rd[i]<k≥Ra[i]<k> & Bop[i]<k>, k= pour tous les bits dans l'élément i; } Exception Aucune. { aunon-j uoTqdaoxz T juqwGtugI. suep s:Tq sal snoi znod = <>[]do <>[]=<> P {(<0:8> wNI)Xas Il qUs Il [.]qaA}=[.]dog } (+± [.]SVNa SeUT waUSwnN>:.O=T) anod Uo!qe ado pu uoT2utTIsap ap G:sT6bza nie qlnsa. r zau:noa:i qa '4PeIffl F/qU ap 4uawuadmoo qe leu sepuelado xne anbTBoT l uo.eV2Gdo aun I.qns aTe UOTqdTZOSGG m) Z(U (q) 9IuT (6q)> 64uI (q) 8;UT s i
I IS->S S 0 S->S I 0 A->A S 0 A->A A 0 A->A H:S: I
s a.odans sepow UOTq2aGdO GUIGUW 2E lUal;TOGdS :uor.eldo auzau eI uaIJIoads _' qe m anb za4oN {m 'q '6q 'q} =;p no mI# '%s 'PuS 4P ' DCNlA qis 'Hus 'PuS 4P'DcNVA
WNI# 'IEA 'PEA 4P' GNVA
qHS 'eA 'PUA;P'DatNVA qA 'eA 'PUA P'OCGNiA aneTqaussf axe>uAs O, Ol 1 O; >. OE -uawa,1m oD DaIef L uei80uio u SOI VASA Aceumulateur Déealage Arithmétique Format
L 'O 20 5 7 0 0
RRRR 1011101 01100 IRIDSI I
Syntaxe Assembleur VASAL.dt VASAR.dt o dt = {b, b9, h, w} et R désigne la direction de décalage vers la gauche ou vers
la droite.
Modes supportés R Gauche Droite DS int8 (b) int9 (b9) intl6 (h) int32 (w) |
Description
Chaque élément de donnée du registre accumulateur vectoriel est décalé vers la gauche d'une position d'un bit avec remplissage par zéro à partir de la droite (si R=0) ou vers la droite à une position de un bit avec extension de signe (si R=1). Le résultat est enregistré dans l'accumulateur vectoriel. Opération pour (i=0;i<NumElem && EMASK[i];i++){ si (R = 1) VACOH[i]:VACOL[i]= VACOH[i]:VACOL[i] signe"1; autrement VACOH[i]:VACOL[i]= VACOH[i]:VACOL[i] <<1; } Exception Débordement. VASL Décalage Arithmétique à Gauche Format O1 Rd11 01 00 a DSIRd Ra RRRR15 | 0110o IDISDS1 | I I|!SRb/[M5 Syntaxe Assembleur VASL.dt VRd, VRa, SRb VASL. dt VRd, VRa, #IMM VASL.dt SRd, SRa, SRb VASL.dt SRd, SRa, #IMM o dt = {b, b9, h, w} Modes supportés D:S:M| V<-V @ S I V<-V @ I | S<-S @ S iT s-s @ I DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Chaque élément de donnée du registre vectoriel/scalaire Ra est décalé vers la gauche avec remplissage par zéro à partir de la droite, de la quantité de décalage donnée dans le registre scalaire Rb ou la zone IMM et le résultat est enregistré dans le registre vectoriel/scalaire Rd. Pour les éléments qui subissent un débordement, le résultat est saturé à la valeur la plus positive ou la plus négative, selon le signe. La quantité de décalage est défini comme étant un entier sans signe. Opération quantité_décalage = {SRb % 32 Il IMM<4:0>}; pour (i=0;i<NumElem && EMASK[i];i++){ Rd[i]=saturer(Ra[i] "quantité décalage); } Exception Aucune Note de programmation Noter que quantité décalage est pris en tant que nombre à 5 bits à partir de SRb ou IMM<4:0>. Pour les types de données en octet, octet 9, demi-mot, le programmeur est responsable de la spécification correcte de la quantité de décalage qui est plus petite que ou égale au nombre de bits dans la grandeur de donnée. Si la quantité de décalage est plus grande que la grandeur de donnée spécifiée les
éléments sont remplis de zéros.
VASR Décalage Arithmétique à Droite Format
20 1 10 5 0
RRRIM5 go! oi0010 00S D Rd R Rb/aIM5 Syntaxe Assembleur VASR.dt VRd, VRa, SRb VASR.dt VRd, VRa, #IMM VASR.dt SRd, SRa, SRb VASR.dt SRd, SRa, #IMM o dt = {b, b9, h, w} Modes supportés r D:S:M |: | V<-V @ S | V<-V @ I | S<-S @ S S<-S @ DS int8 (b) int9 (b9) int16 (h) int32 (w) D:S:M N n8<b
Description
Chaque élément de donnée du registre vectoriel/scalaire Ra est arithmétiquement décalé vers le droite avec extension du signe aux emplacements du bit le plus significatif, de la quantité de décalage donnée dans le bit le moins significatif de registre scalaire Rb ou la zone IMM est le résultat est enregistré dans le registre vectoriel/scalaire Rd. La quantité de décalage est définie comme étant
l'entier sans signe.
Opération quantité_décalage = {SRb % 32 Il IMM<4:0>}; pour (i=0; i<NumElem && EMASK[i];i++){ Rd[i]= Ra[i] signe"quantité_décalage; } Exception Aucune. Note de programmation Noter que la quantité décalage est prise en
tant que nombre à 5 bits de SRb ou IMM<4:0>.
Pour les types de données octet, octet 9, demi-mot le programmeur est responsable d'une spécification correcte de la quantité de décalage qui est plus petite que ou égale au nombre de bits dans la grandeur de donnée. Si la quantité de décalage est plus grande que la grandeur de donnée spécifiée, les éléments
sont remplis des bits de signe.
Format " 20 1 0 f 0 RRRM5 010 10000 IDSS IRd| Ra Rb Syntaxe Assembleur VASS3.dt VRd, VRa, VRb VASS3. dt VRd, VRa, SRb VASS3.dt SRd, SRa, SRb o dt = {b, b9, h, w} Modes suportés
D:S:M V<-V @ V V<-V @ S S<-S @ S
DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Le contenu du registre vectoriel/scalaire Ra est ajouté à Rb pour produire un résultat intermédiaire, le signe de Ra est alors soustrait du résultat intermédiaire; et le résultat final est enregistré dans le registre
vectoriel/scalaire Rd.
Opération pour (i=0;i<NumElem && EMASK[i];i++){ si (Ra[i]>0) extsgn3 = 1; autrement si (Ra[i]<O) extsgn3 =-1; autrement extsgn3 = 0; Rd[i]=Ra[i]+Rb[i]- extsgn3; } Exception Débordement. VASUB Absolu de Soustraction Format 2e 20 15 0 5 0 RRRM9 1111 0010 00SIDSM 19 Rd Ra Rb/LM5 Syntaxe Assembleur VASUB.dt VRd, VRa, VRb VASUB.dt VRd, VRa, SRb VASUB.dt VRd, VRa, #IMM VASUB. dt SRd, SRa, SRb VASUB.dt SRd, SRa, #IMM o dt = {b, b9, h, w} Modes supportés
D:S:M V<-V @ V V<-V @ S V<-V @ I S<-S @ S S<-S I|
I DS int8 (b) int9 (b9) intl6 (h) int32 (w) flottant (f)
Description
Le contenu du registre vectoriel/scalaire Rb ou de la zone IMM est soustrait du contenu du registre vectoriel/scalaire Ra et le résultat absolu est enregistré dans le registre
vectoriel/scalaire Rd.
Opération pour (i=O;i<NumElem && EMASK[i];i++){ Bop[i]={VRb[i] |I SRb || sex(IMM<8:0>)} Rd[i]= I Ra[i]-Bop[i] |; } Exception Débordement, opérande point flottant incorrect Note de programmation Si le résultat de la soustraction est le nombre le plus négatif, alors un débordement se produira après l'opération absolue. Si le mode de saturation est validé, le résultat de l'opération absolue sera le nombre le plus positif. VAVG Moyenne Deux Eléments Format
34 0 25 15 ID 5 0
RRRM |IlO 1!00! ID!SDSITj Rd Ra Rb Syntaxe Assembleur VAVG.dt VRd, VRa, VRb VAVG.dt VRd, VRa, SRb VAVG.dt SRd, SRa, SRb o dt = {b, b9, h, w}. Utiliser VAVGT pour spécifier le mode d'arrondissement " tronqué "
pour des types de données en entiers.
Mode supportés
D:S: SM I V<-V @ V I V<-V @S IS<-S S I
DS int8 (b) int9 (b9) intl6 (h) int32 w) flottant (f
Description
Le contenu du registre vectoriel/scalaire Ra est ajouté au contenu du registre vectoriel/scalaire Rb pour produire un résultat intermédiaire; le résultat intermédiaire est alors divisé par 2 et le résultat final est enregistré dans le registre vectoriel/scalaire Rd. Pour des types de données entières, le mode d'arrondissement est tronqué si T = 1 et arrondi à partir de 0 si T = 0 (défaut). Pour le type de donnée flottante, le mode d'arrondissement est spécifié
dans VCSR<RMODE>.
Opération pour (i=0;i<NumElem && EMASK[i];i++){ Bop[i]={VRb[i] Il SRb Il sex(IMM<8:0>)} Rd[i]=(Ra[i]+Bop[i]//2; } Exception Aucune. VAVGH Moyenne deux Eléments Adiacents Format
2 1 10 0
RRM5 0 1 |11| 1 IDS|IT I Rd Ra Rb Syntaxe Assembleur VAVGH.dt VRd, VRa, VRb VAVGH.dt VRd, VRa, SRb o dt = {b, b9, h, w}. Utiliser VAVGHT pour spécifier le mode d'arrondissement " tronqué"
pour les types de données entières.
Modes supportés
D:S:M V<-V @ V V<-V @ S
DS int8 (b) int9 (b9) intl6 (h) int32 (w) flottant (f)
Description
Pour chaque élément, moyenne de deux paires d'éléments adjacents. Pour les types de données entières, le mode d'arrondissement est tronqué si T = 1 et on arrondit à partir de zéro si T = 0 (défaut). Pour le type de donnée flottante, le mode d'arrondissement est
spécifié dans VCSR<RMODE>.
Rb Ra Bo
B,0AD-1-21... A, A1 A0 Opération pour (i=O;i<NumElem -1;i++){ Rd [i] = (Ra[i] +Ra [i+l])//2
Rd[NumElem -1]=(Ra[NumElem -l]+{VRb[0] || SRb})//2; } Exception Aucune. Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VAVGQ Moyenne Quad Format
'5 -1 1$ I0. 0
E 0 - r1 " 111 2 II 11 15r^i I II i * 1llI ï RRRM15 1010 101 11SDSHTRd VRa | VRb Syntaxe Assembleur VAVGQ.dt VRd, VRa, VRb o dt = {b, b9, h, w}. Utiliser VAVGQT pour spécifier le mode d'arrondissement " tronqué "
pour les types de données entières.
Modes supportés D:S:M V<-V @ V DS int8 (b) int9 (b9) intl6 (h) int32 <w)
Description
Cette instruction n'est pas supportée dans le
mode VEC64.
Calculer la moyenne de quatre éléments, comme montré au diagramme cidessous en utilisant le mode d'arrondissement spécifié dans T (1 pour tronquer et O pour arrondir à partir de O, le défaut), noter que l'élément le plus à gauche
(Dn1) est non défini.
Ra A.I1IAn.21 *- A2 A1 A | Rb\
2 B2 MI O
Rd Dg,., *- |D2| D- Do| Opération Opération pour (i=O; i<NumElem -1;i++){ Rd[i]=(Ra[i]+Ra[i+l]+Rb[i+l])//4; Exception Aucune. VCACHE Opération Antémémoire Format
5 0 1 5 1 5 0
REAR 101010| 10111101 I | IFCI IA| I | 1 SRb | SR; I
25 20 15 10, 0
RE.A 0|0|1 0R1 | FC IMM| SR Imm R.A001 1 Io ' Syntaxe Assembleur VCACHE.fc SRb, SRi VCACHE.fc SRb, #IMM VCACHE.fc SRb+, SRi VCACHE.fc SRb+, #IMM o fc = {0, 1}
Description
Cette instruction est prévue pour la gestion du logiciel de l'antémémoire de données vectorielles. Quand une portion ou la totalité de l'antémémoire de données est configurée en tant que zone de travail, cette instruction
n'a pas d'effet sur la zone de travail.
Les options suivantes sont supportées: FC<2:0> Signification 000 Réécrire et invalider la ligne d'antémémoire sale dont l'étiquette correspond à EA. Si la ligne de correspondance contient une donnée propre, la ligne est invalidée sans la réécriture. Si aucune ligne d'antémémoire n'est trouvée comme contenant EA,
l'antémémoire de données reste intacte.
001 Réécrire et invalider la ligne d'antémémoire sale spécifiée par l'indice de EA. Si la ligne de correspondance contient une donnée propre, la ligne
est invalidée sans la réécriture.
autres non définis Opération Exception Aucune. Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VCAND ET Comrlément Format
5 20 15 10
RRRM9 l 11 00 DISIDSH SM9 RdI Ra Rb/-M5 Syntaxe Assembleur VCAND. dt VRd, VRa, VRb VCAND.dt VRd, VRa, SRb VCAND.dt VRd, VRa, #IMM VCAND.dt SRd, SRa, SRb VCAND.dt SRd, SRa, #IMM o dt = {b, b9, h, w}. Noter que.w et .f
spécifient la même opération.
Modes suportés D:S:M V<-V @ V V<-V @ S V<-V @ I S<-S @ S iS<- s I DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Complément ET logique des opérandes Ra et Rb/immédiats et retour du résultat au registre
de destination Rd.
Opération pour (i=0;i<NumElem && EMASK[i];i++){ Bop[i]={VRb[i] Il SRb Il sex(IMM<8:0>)} Rd[i]<k≥Ra[i]<k> & Bop[i]<k>, k= pour tous les bits dans l'élément i; } Exception Aucune. VCBARR Barrière Conditionnelle Format
0 25 20 15 10 0
CT C [[ o[ n[d [I]i[I[ [ '[ I[III I tII ! 0| 1010 Cond Syntaxe Assembleur VCBARR.cond o cond = {0 - 7}. Chaque condition recevra
ultérieurement une mnémonique.
Description
Arrêter l'instruction et toutes les instructions ultérieures (celles qui apparaissent ultérieurement dans l'ordre du programme) tant que la condition tient. La zone Cond<2:0> est interprétée différemment des autres instructions conditionnelles du
format CT.
Les conditions suivantes sont généralement définies: Cond<2:0> Signification 000 Attendre pour toutes les instructions antérieures (celles qui apparaissent avant dans l'ordre du programme) pour terminer l'exécution avant d'exécuter l'une des instructions ultérieures. autres non définis Opération alors que (Cond == vrai) arrêter toutes les instructions ultérieures; Exception Aucune. Note de programmation Cette instruction est prévue pour le logiciel pour forcer la sérialisation d'exécution des instructions. Cette instruction doit être utilisée pour forcer un reportage précis d'une exception imprécise. Par exemple, si cette instruction est utilisée immédiatement après une instruction arithmétique qui pourrait provoquer une exception, l'exception sera rapportée avec le compteur de programme
adressant cette instruction.
VCBR Branchement Conditionnel Format 25 i2o 5 CT 11i o00o00 Cond 1 1ge Syntaxe Assembleur VCBR.cond #décalage o cond = {un, lt, eq, le, gt, ne, ge, ov}
Description
Branchement si Cond est vrai. Cela n'est pas
un branchement retardé.
Opération Si((Cond == VCSR[SO,GT,EQ,LT])] (Cond == un)) VPC = VPC + sex(offset<22:0>*4); autrement VPC = VPC + 4; Exception
Adresse instruction incorrecte.
*alDazoouT uoTionaisuT asseipv uQI vdazxa ! + DcA = OdA queuwaaqne 00, q:<Z:Ie>qIS = DdA ((un == puoD) i ([&I'O'9'OS]>1SDA == puoD))TS uoTaelGdo papqaz 4uewatqoupaq un sed asau eao 'Tt;se puoD TS uauietqouel uoTqdTaosaa {AO 'a 'u 'au 5, T 'ba 'ba 'un} = puoo gno [dS pUOD- ISDA anaTquassV axeauAs qus 00 01OLú1 L quezpUI IeUUOQI4pUOD 4UeletqUvaa IEdau Túl 0ú9z9gz VCCS Commutateur Contexte Conditionnel Format " 20 15 10 l CT I 1101 i Iage Syntaxe Assembleur VCCS #Décalage
Description
Sauter à la sous-routine de commutateur de contexte si VIMSK<cse> est vrai. Cela n'est
pas un branchement retardé.
Si VMISK<cse> est vrai, VPC+4 (l'adresse de retour) est mis en réserve sur la pile d'adresses de retour. Sinon l'exécution
continue avec VPC+4.
Opération si (VIMSK<cse> == 1){ si (VSP<4"15){
VISRC<RASO≥1;
Signal ARM7 avec exception RASO;
VPSTATE = VP_IDLE;
} autrement {
RSTACK[VSP<3:0>]=VPC+4;
VSP<4:0≥VSP<4:0>+1;
VPC=VPC + sex(décalage<22:0>*4); } } autrement VPC=VPC+4 Exception
Débordement pile adresses retour.
VCHGCR Registre Contr8le Changement Format r 20 10 0 CT 1001 Mode Syntaxe Assembleur VCHGCR Mode
Description
Cette instruction change le mode de
fonctionnement du processeur vectoriel.
Chaque bit en Mode spécifie ce qui suit: Mode Signification bit 1:0 Ces deux bits contrôlent le bit VCSR<CBANK>. Les codages spécifient: 00 - pas de changement 01 - effacer le bit VCSR<CBANK> - établir le bit VCSR<CBANK> 11 - basculer le bit VCSR<CBANK> bit 3:2 Ces deux bits contrôlent le bit VCSR<SMM>. Les codages spécifient: 00 - pas de changement 01 - effacer le bit VCSR<SMM> - établir le bit VCSR<SMM> 11 - basculer le bit VCSR<SMM> bit 5:4 Ces deux bits contrôlent le bit VCSR<CEM>. Les codages spécifient: 00 - pas de changement 01 - effacer le bit VCSR<CEM> - établir le bit VCSR<CEM>
11l - basculer le bit VCSR<CEM>..
autres non définis Opération Exception Aucune. Note de programmation Cette instruction est prévue pour le matériel pour changer les bits de contrôle dans VCSR d'une manière plus efficace que possible par
une instruction VMOV.
VCINT Interruption Conditionnelle ARM7 Format
( 60
CT I II II I
CTCond ICODE Syntaxe Assembleur VCINT.cond #ICODE o cond = {un, lt, eq, le, gt, ne, ge, ov]
Description
Si Cond est vrai, arrêter l'exécution et
interrompre ARM7 si elle est validée.
Opération Si((Cond == VCSR[SO,GT,EQ,LT]) I (Cond == un)) VISRC<vip≥ 1; VIINS = [VCINT.cond #ICODE instruction];
VEPC = VPC;
si (VIMSK<vie> == l)interruption signal ARM7;
VP STATE = VP IDLE
] autrement VPC = VPC + 4; Exception
Interruption VCINT.
VCJOIN Jonction Conditionnelle avec Tâche ARM7 Format
3O 25 100 $
1III I II I Il II iIIIII i 1i I j CT 11101 01 10 Cond Idaige <:> Syntaxe Assembleur VCINT.cond #Décalage o cond = {un, lt, eq, le, gt, ne, ge, ov}
Description
Si Cond est vrai, arrêter l'exécution et
interrompre ARM7 si elle est validée.
Opération Si((Cond == VCSR[SO, GT,EQ,LT]) | (Cond == un)){ VISRC<vjp≥ 1; VIINS = [VCJOIN.cond #Décalage instruction];
VEPC = VPC;
si (VIMSK<vje> == 1)interruption signal ARM7;
VP STATE = VP IDLE
} autrement VPC = VPC + 4; Exception
Interruption VCJOIN.
VCJSR Saut Conditionnel à Sous-Routine Format co0 CI||o|lilo|lI 1 11I r T| i 1' lIj s CT i 01 0100 Icond Syntaxe assembleur VCJSR.cond #Décalage o cond = {un, it, eq, le, gt, ne, ge, ov}
Description
Saut à sous-routine si Cond est vrai. Cela
n'est pas un branchement retardé.
Si Cond est vrai, VPC + 4 (l'adresse de retour) est mis en réserve sur la pile d'adresses de retour. Sinon l'exécution
continue avec VPC + 4.
Opération Si((Cond == VCSR[SO,GT,EQ,LT]) | (Cond == un)) si (VSP<4"15){
VISRC<RASO> = 1;
signal ARM7 avec exception RASO
VPSTATE = VP IDLE;
} autrement {
RSTACK[VSP<3:0>]=VPC + 4;
VSP<4:0> = VSP<4:0> + 1;
VPC = VPC + sex(Décalage<22:0>*4); } } autrement VPC = VPC + 4; Exception
Débordement pile adresses de retour.
VCJSRI Saut Conditionnel à Sous-Routine Indi rect Format 20 ".c 1 5 10 5 crIO 10 1 00 Cond S$Rb Syntaxe assembleur VCJSRI.cond SRb o cond = {un, lt, eq, le, gt, ne, ge, ov}
Description
Saut indirect à sous-routine si Cond est vrai.
Cela n'est pas un branchement retardé.
Si Cond est vrai, VPC + 4 (l'adresse de retour) est mis en réserve sur la pile d'adresses de retour. Sinon l'exécution
continue avec VPC + 4.
Opération Si((Cond == VCSR[SO,GT,EQ,LT]) | (Cond == un)){ si (VSP<4:0> 15){
VISRC<RASO> = 1;
signal ARM7 avec exception RASO
VP_STATE = VP_IDLE;
} autrement {
RSTACK[VSP<3:0>]=VPC + 4;
VSP<4:0> = VSP<4:0> + 1;
VPC = SRb<31:2>:b'00; } }autrement VPC = VPC + 4e Exception
Débordement pile adresses de retour.
VCMOV Déplacement Conditionnel Format
25 20 15 10 S0
RRRM9* 11 0100 00 IDISjDS JS 9 Rd Cond D R| M5 Syntaxe Assembleur VCMOV.dt Rd, Rb, cond VCMOV.dt Rd, #IMM, cond o dt = {b; b9, h, w}, cond = {un, lt, eq, le, gt, ne, ge, ov}. Noter que.f et.w spécifient la méme opération à l'exception que le type de donnée.f n'est pas supporté avec l'opérande
immédiat à 9 bits.
Modes supportés D:S:M V<-V V<-S V<-I S<-S S<- I DS int8 (b int9 (b9) intl6 (h) int32 (w
Description
Si Cond est vrai, le contenu du registre Rb est déplacé au registre Rd. ID<1:0> spécifie de plus les registres de source et de destination: VR registre vectoriel rangée courante SR registre scalaire SY registre de synchronisation VAC registre accumulateur vectoriel (se
référer à la description de VMOV pour le
codage du registre VAC) D:S:M ID<l:0≥00 ID<1:0≥01 ID<1:0≥10 ID<1:0≥11
V <- V VR <- VR VR <- VAC VAC<- VR
V <- S VR <- SR VAC<- SR
V<-I VR<-I _
S <- S SR<- SR
S <- I SR <- I
Opération Si((Cond == VCSR[SOV,GT,EQ,LT]) I (Cond == un)) pour (i=0; 1<NumElem;i++) Rd[i]={Rb[i] Il SRb Il sex(IMM<8:0>)}; Exception Aucune. Note de programmation Cette instruction n'est pas affectée par le masque d'éléments - VCMOVM est affecté par le
masque d'éléments.
* La représentation de précision à point flottant étendu dans l'accumulateur vectoriel utilise les 576 bits pour les 8 éléments. Par conséquent, un déplacement de registre vectoriel impliquant l'accumulateur doit
spécifier la grandeur de donnée.b9.
VCMOVM Déplacement Conditionnel avec Masque d lément Format
25 20! 5! 0
RRRM9aejl 11 010001 pSIDS| M9 | Rd Cond ID Rb/IM5 Syntaxe Assembleur VCMOVM.dt Rd, Rb, cond VCMOVM.dt Rd, #IMM, cond o dt = {b, b9, h, w}, cond = {un, lt, eq, le, gt, ne, ge, ov}. Noter que.f et.w spécifient la même opération, à l'exception que le type de donnée.f n'est pas supporté par l'opérande
immédiat à 9 bits.
Modes su portés D:S:M V<-V VS <-s I DS lint8 b ln9(b}IV< - I DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Le contenu du registre Rb est déplacé au registre Rd si Cond est vrai. ID<1:0> spécifie de plus les registres de source et de destination: VR registre vectoriel rangée courante SR registre scalaire VAC registre accumulateur vectoriel (se
référer à la description de VMOV pour le
codage du registre VAC)
D:S:M ID<1:0≥00 ID<1:0≥01 ID<1:0≥10 ID<1:0≥11
V <- V VR <- VR VR <- VAC VAC<- VR
V <- S VR <- SR VAC<- SR _
V <- I VR <- I
S <- S
S <- I _
Opération Si((Cond == VCSR[SO,GT,EQ,LT]) I (Cond == un)) pour (i=0; 1<NumElem && MMASK;i++) Rd[i]={Rb[i] i| SRb Il sex(IMM<8:0>)}; Exception Aucune. Note de programmation Cette instruction est affectée par le masque d'éléments VMMR. VCMOV n'est pas affecté par
le masque d'éléments.
La représentation à précision à point flottant étendu dans l'accumulateur vectoriel utilise les 576 bits pour les 8 éléments. Par conséquent, un déplacement de registre vectoriel impliquant l'accumulateur doit
spécifier la grandeur de données.b9.
VCMPV Comparer et Positionner Masque Format RRRHM9' s 1 s Cnd, I I i R i l I I RRR.M9='1 110101 10 DS DS&d CondR Syntaxe Assembleur VCMPV.dt VRa, SRb, cond, masque VCMPV.dt VRa, SRb, cond, masque o dt = (b, b9, h, w, f), cond = { lt, eq, le, gt, ne, ge}, masque = {VGMR, VMMR}. Si aucun
masque n'est spécifié, on suppose VGMR.
Modes supportés
D:S:M M<-V @ V V<-V @ S
DS int8 (b) int9 (b9) intl6 (h) int32 (w) flottant (f)
Description
Les contenus des registres vectoriels VRa et VRb sont comparés par éléments en accomplissant une opération de soustraction (VRa[i] - VRb[i]), et le bit #1 correspondant dans le registre de VGMR (si k=O) ou VMMR (si k=l) est établi si le résultat de la comparaison correspond à la zone Cond de l'instruction de VCMPV. Par exemple si la zone Cond est plus petite que (LT), le bit VGMR[i]
ou VMMR[i] sera établi si VRa[i]<VRb[i].
Opération pour (i = O;l<NumElem;i+*){ Bop[i]={Rb[i] Il SRb Il sex(IMM<8:0>)} relation[i]=Ra[i] ? Bop[i]; si (K ==1) MMASK[i]=(relation[i]==Cond) ? Vraie:Fausse; autrement EMASK[i]=(relation[i]==Cond) ? Vraie:Fausse; } Exception Aucune. Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VCNTLZ Compte Zéros en Tête Format
0 15 10
RRRR o01111lol,100 I ' I|' I'" | Syntaxe Assembleur VCNTLZ. dt VRd, VRb VCNTLZ.dt SRd, SRb
o dt = {b; b9, h, w}.
Modes supportés IS uj V <-VI S<-S I i DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Pour chaque élément dans Rb compter le nombre
de zéros en tête; retourner le compte dans Rd.
Opération pour (i = O;l<NumElem &&EMASK[i];i++){ Rd[i]=nombre de zéros en tête(Rb[i]); } Exception Aucune. Note de programmation Si tous les bits dans un élément sont des zéros, alors le résultat est égal à la grandeur de l'élément (8, 9, 16 ou 32 pour l'octet, l'octet 9, le. demi- mot ou le mot, respectivement). Le compte des zéros en tête est en relation inverse avec l'indice des positions des éléments (si on l'utilise après instruction VCMPR). Pour convertir à une position d'élément, soustraire le résultat de VCNTLZ de
NumElem pour le type donné de donnée.
VCOR OU Comolément Format
0 0 1] 10 S 0
Lt i lII t i I LiIILI tii I lii ti I 1 1 RRRM9 i 111111 |S DSH 1M9 Rd Ra Rb/lMS Syntaxe Assembleur VCOR.dt VRd, VRa, VRb VCOR. dt VRd, VRa, SRb VCOR.dt VRd, VRa, #IMM VCOR.dt SRd, SRa, SRb VCOR.dt SRd, SRa, #IMM o dt = {b, b9, h, w). Noter que.w et.f
spécifient la même opération.
Modes su portés D:S:M V<-V @V v<-v@ S v<-v @ I S<-S @ S S<-S @ I DS int8 (B) int9 (b9) intl6 (h) int32 (w)
Description
Complément OU logique des opérandes Ra et Rb/immédiats et retour de résultat au registre
de destination Rd.
Opération pour (i = 0;l<NumElem &&EMASK[i];i++){ Bop[i]={VRb[i] Il SRb Il sex(IMM<8:0>)}; Rd[i]<k≥-Ra[i]<k> I Bopti]<k>, k= pour tous les bits dans l'élément i; Exception Aucune. VCRSR Retour Conditionnel de Sous-Routine Format 25 0 is lo ' o Ce 1101 0101ICondII I iii II Syntaxe Assembleur VCRSR.cond
o cond = {un, lt, eq, le, gt, ne, ge, ov}.
Description
Retour de sous-routine si Cond est vrai. Cela
n'est pas un branchement retardé.
Si Cond est vrai, l'exécution continue à partir de l'adresse de retour mise en réserve dans la pile d'adresses de retour. Sinon,
l'exécution continue avec VPC + 4.
Opération Si((Cond == VCSR[SO,GT,EQ,LT]) | (Cond == un)){ si (VSP<4> == O){
VISRC<RASU> = 1;
signal ARM7 avec exception RASU
VPSTATE = VP_IDLE;
} autrement {
VSP<4:0> = VSP<4:0> - 1;
VPC = RSTACK[VSP<3:0>];
VPC<1:O> = b'00 } }autrement VPC = VPC + 4; Exception
Adresse instruction incorrecte sous-
débordement pile adresses retour.
VCVTB9 Convertir Type Donnée Octet 9 Format
S 0
IIIT IIIIi 1111 111 1 I I iI RRRR IltlllI l it_ 1 1i0|I Rb Syntaxe Assembleur VCVTB9.md VRd, VRb VCVTB9.md SRd, SRb o md = {bb9, b9h, hb9} Modes supportés S | V <-v I S <- S I MD T bb9 b9h hb9
Description
Chaque élément de Rb est converti de l'octet à l'octet 9 (bb9), de l'octet 9 au demi-mot
(b9h) ou de demi-mot à l'octet 9 (hb9).
Opération si (md<l:O≥=O){ //bb9 pour conversion d'octet à octet 9 VRd = VRb; VRd<9i+8≥VRb<9i+7>,i=O à 31 (ou 63 dans le mode VEC64)} autrement si (md<l:O≥=2) { //b9h pour conversion octet 9 à demi- mot VRd=VRb; VRd<18i+16:18i+9≥VRb<18i+8>,i=O à 15 (ou 31 en mode VEC64)} autrement si (md<l:O≥=3) //hb9 pour conversion demi-mot à octet 9 VRd<18i+8≥VRb<18i+9>,i=O à 15 (ou 31 en mode VEC64) autrement VRd = non défini; Exception Aucune Note de programmation Avant d'utiliser cette instruction avec le mode b9h, le programmeur doit ajuster pour le nombre diminué d'éléments dans le registre
vectoriel avec une opération de brassage.
Après avoir utilisé cette instruction avec le mode hb9, le programmeur doit ajuster pour le nombre augmenté d'éléments dans le registre vectoriel de destination avec une opération de débrassage. Cette instruction n'est pas
affectée par le masque d'éléments.
VCVTFF Convertir Point Flottant à Point Fixe Format o - 20 15 10 5 0 RRM5 0X M 1O0I 1 o,s 1 1lMIRd aSRbtM5 Syntaxe Assembleur VCVTFF VRd, VRa, SRb VCVTFF VRd, VRa, #IMM VCVTFF SRd, SRa, SRb VCVTFF SRd, SRa, #IMM Modes supportés | D:S:M | Iv <- V, sl V <- V, I S <- S S s <- S. I
Description
Les contenus de registres vectoriels/scalaires Ra sont convertis du point flottant à 32 bits à un nombre réel à point fixe du format <X.Y>, o la largeur de Y est spécifiée par Rb (modulo 32) ou par la zone IMM et o la largeur de X est définie par (32 - largeur de Y). X désigne la partie entière et Y désigne la partie fractionnée. Le résultat est enregistré dans le registre vectoriel/scalaire Rd. Opération grandeurY = {SRb % 32 |l IMM<4:0>}; pour (i=0;l<NumElem;i++){ Rd[i]=convertir au format <32-grandeur_Y.grandeur_Y> (Ra[i]); } Exception Débordement Note de programmation Cette instruction ne supporte que la grandeur du mot de donnée. Cette instruction n'utilise pas le masque d'éléments car l'architecture ne supporte pas des types de données multiples dans un registre. Cette instruction utilise le mode d'arrondissement à partir de zéro pour
les types de données entières.
VCVTIF Convertir Entier à Point Flottant Format l!! ilF s I 1, [ I I | I l i Ii ji i RRR i5O 001 sj Il jRd Rb Syntaxe Assembleur VCVTIF VRd, VRb VCVTIF VRd, SRb VCVTIF SRd, SRb Modes supportés
D:S:M V<-V V <-S S <- S
Description
Le contenu du registre vectoriel/scalaire Rb est converti du type de donnée int32 à flottant et le résultat est enregistré dans le
registre vectoriel/scalaire Rd.
Opération pour (i=O;l<NumElem;i++){ Rd[i]=convertir à format point flottant (Rb[i]); } Exception Aucune. Note de programmation Cette instruction ne supporte que la grandeur du mot de donnée. Cette instruction n'utilise pas le masque d'éléments car l'architecture ne supporte pas de types. de données multiples
dans un registre.
VD1CBR Décrément VCR1 et Branchement Conditionnel Format 20 15 o0 CT 1 00 01 Cond Syntaxe Assembleur VD1CBR. cond #Décalage o cond = {un, it, eq, le, gt, ne, ge, ov},
Description
Décrément VCR1 et branchement si Cond est
vrai. Cela n'est pas un branchement retardé.
Opération
VCR1 = VCR1 - 1;
si ((VCR1>0) & (Cond==VCSR[SO,GT,EQ,LT,]) I (Cond==un))) VPC = VPC + sex(Décalage<22:0>*4); autrement VPC = VPC + 4; Exception
Adresse instruction incorrecte.
Note de programmation Noter que VCR1 est décrémenté avant que la
condition de branchement ne soit vérifiée.
L'exécution de cette instruction quand VCR1 est 0 établit effectivement le compte en boucle à 232 -1 VD2CBR Décrément VCR2 et Branchement Conditionnel Format I30 2, 10 o 0 CT 1i0o 00 o0oContd I f II I Syntaxe Assembleur VD2CBR.cond #Décalage
o cond = {un, lt, eq, le, gt, ne, ge, ov}.
Description
Décrément VCR2 et branchement si Cond est
vrai. Cela n'est pas un branchement retardé.
Opération
VCR2 = VCR2 - 1;
si ((VCR2>0) & (Cond==VCSR[SO,GT,EQ,LT]) | (Cond==un))) VPC = VPC + sex(Décalage<22:0>*4); autrement VPC = VPC + 4; Exception
Adresse instruction incorrecte.
Note de programmation Noter que VCR2 est décrémenté avant que la
condition de branchement ne soit vérifiée.
L'exécution de cette instruction quand VCR2 est 0 établit effectivement le compte en
boucle à 232 -1.
VD3CBR Décrément VCR3 et Branchement Conditionnel Format
2' 20 10 S 0
Cl" ' 001 'I I l Condde l Syntaxe Assembleur VD3CBR. cond #Décalage
o cond = {un, lt, eq, le, gt, ne, ge, ov}.
Description
Décrément VCR3 et branchement si Cond est
vrai. Cela n'est pas un branchement retardé.
Opération
VCR3 = VCR3 - 1;
si ((VCR3>0) & (Cond==VCSR[SO,GT,EQ,LT]) I (Cond==un))) VPC = VPC + sex(Décalage<22:0>*4); autrement VPC = VPC + 4; Exception
Adresse instruction incorrecte.
Note de programmation Noter que VCR3 est décrémenté avant que la
condition de branchement ne soit vérifiée.
L'exécution de cette instruction quand VCR3 est 0 établit effectivement le compte en
boucle à 232 -1.
VDIV2N Diviser par 2-
Format
25 20 1510 5 O
lollo 1Ho I% ' I '"'" I'"' I'" ii RRRJ.M5 E[0 001.10 I DISIDS. Rd Ra SRb/IMl Syntaxe Assembleur VDIV2N.dt VRd, VRa, VRb VDIV2N.dt VRd, VRa, #IMM VDIV2N.dt SRd, SRa, SRb VDIV2N.dt SRd, SRa, #IMM o dt = {b, b9, h, w} Modes su portés D S:M | V<-v @ S V<-V @ I S<-S @ s S<-S @ I DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Le contenu du registre vectoriel/scalaire Ra est divisé par 2n o n est le contenu en entiers positifs du registre scalaire Rb ou IMM et le résultat final est enregistré dans le registre scalaire/vectoriel Rd. Cette instruction utilise le mode tronqué (arrondissement vers zéro) en tant que mode d'arrondissement. Opération N = {SRb % 32 Il IMM<4:0>}; pour (i=0;i<NumElem && EMASK[i];i++){ Rd[i] = Ra[i]/2N; } Exception Aucune. Note de programmation Noter que N est pris comme nombre à 5 bits à partir de SRb ou IMM<4:0>. Pour les types de données en octet, octet 9, demi-mot, le programmeur est responsable d'une spécification correcte de la valeur de N qui est plus petite que ou égale au degré de précision dans la grandeur de donnée. Si elle est plus grande que la précision de la grandeur de donnée spécifiée, les éléments sont remplis avec les bits de signe. Cette instruction utilise le mode d'arrondissement
vers zéro.
VDIV2N.F Diviser par 2 Flottant Format 2 20! o0 R. RRM5 Il 0 1 |2|SI f Iii|i Rd Ra 1 SRll Syntaxe Assembleur VDIV2N. f VRd, VRa, SRb VDIV2N.f VRd, VRa, #IMM VDIV2N.f SRd, SRa, SRb VDIV2N.f SRd, SRa, #IMM Modes supportés
D:S:M! 1 V<-V @ S I V<-V @ I | S<-S @ S | S<-S @ I
Description
Le contenu du registre vectoriel/scalaire Ra est divisé par 2n o n est le contenu en entiers positifs du registre scalaire Rb ou IMM et le résultat final est enregistré dans
le registre scalaire/vectoriel Rd.
Opération N = {SRb % 32 Il IMM<4:0>}; pour (i=0;i<NumElem && EMASK[i];i++ ){ Rd[i] = Ra[i]/2; Exception Aucune. Note de programmation Noter que N est pris comme nombre à 5 bits de
SRb ou IMM<4:0>.
VDIVI Initialisation Division Incomplète Format _Q- " '- .0i: ' I0 1 1 1 I511i 0 RRRR r01111la 1l S!0 I X IR Syntaxe Assembleur VDIVI.ds VRb VDIVI.ds SRb o ds = {b, b9, h, w} Modes supportés S VRb SRb DS int8 b int9 (b9) intl6 (h) int32 (w
Description
Accomplir l'étape initiale d'une division d'entier avec signe sans restauration. Le dividende est un entier avec signe à double précision dans l'accumulateur. Si le dividende est à simple précision, il doit être étendu au signe pour doubler la précision et être enregistré dans VACOH et VACOL. Le diviseur est un entier à signe à simple position dans Rb. Si le signe du dividende est le même que le signe du diviseur, Rb est soustrait de l'accumulateur à l'état haut. Sinon Rb est
ajouté à l'accumulateur à l'état haut.
Opération, pour (i=O;i<NumElem && EMASK[i];i++){ Bop[i] = {VRb[i] Il SRb} si (VACOH[i]<msb≥=Bop[i]<msb>) VACOH[i]=VACOH[i]-Bop[i]; autrement VACOH[i]=VACOH[i]-Bop[i]; Exception Aucune. Note de programmation Le programmeur est responsable de la détection de cas de débordement ou de division par zéro
avant les étapes de division.
VDIVS Etape Division Incomplète Format ND D 20 II 0 ' o RRRR.P OIiIi0o 1110 il s SDs '\T' Syntaxe Assembleur VDIVS.ds VRb VDIVS.ds SRb o ds = {b, b9, h, w} Modes supportés S | VRb | SRb | DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Accomplir une étape itérative d'une division avec signe sans restauration. Cette instruction doit être exécutée autant de fois que la grandeur de donnée (i.e., 8 fois pour les types de données int8, 9 pour int9, 16 pour intl6, et 32 pour int32). L'instruction VDIVI doit être utilisée une fois avant les étapes de division pour produire un reste partiel initial dans l'accumulateur. Le diviseur est un entier à signe à simple précision dans Rb. Une fois, le bit du quotient est extrait par étape et décalé vers le bit le moins significatif de l'accumulateur. Si le signe du reste partiel dans l'accumulateur est le même que le signe du diviseur dans Rb, Rb est soustrait de l'accumulateur à l'état haut. Sinon, Rb est
ajouté à l'accumulateur à l'état haut.
Le bit de quotient est 1 si le signe du reste partiel résultant (résultat de l'addition, ou de la soustraction) est le même dans
l'accumulateur que le signe du diviseur.
Sinon, le bit de quotient est O. L'accumulateur est décalé vers la gauche d'une position d'un bit avec le bit de quotient le remplissant. A la fin des étapes de division, le reste est dans l'accumulateur à l'état haut et le
quotient est dans l'accumulateur à l'état bas.
Le quotient est en forme de complément à un.
Opération VESL Décalage Elément vers la Gauche de 1 Format
2 20 15 10 5 0
RRRR 101111101 1DSSRc VRd | |Rb| Syntaxe Assembleur VESL.dt SRc, VRd, VRa, SRb o dt = {b, b9, h, w}. Noter que.w et.f
spécifient la même opération.
Modes supportés s _ SRb DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Décaler les éléments dans le registre vectoriel Ra vers la gauche d'une position, en
remplissant à partir du registre scalaire Rb.
L'élément le plus à gauche étant décalé vers l'extérieur est retourné dans le registre scalaire Rc et les autres éléments sont
retournés dans le registre vectoriel Rd.
VRaSR SRb IAna1L S.......... A2tA A1aS SRc vR
C D[..1 D-2..D. D2 |D D^ Opération VRd[O] = SRb; pour (i=l;i<NumElem-1;i++) VRd[i]=VRa[i-l];
SRc=VRa[NumElem-1] Exception Aucune. Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VESR Décalage Elément vers la Droite de 1 Format 25 20 l5 10 5 0 RRRRO11 001 10 IDS SRc 1 VRd VRa SRb Syntaxe Assembleur VESL.dt SRc, VRd, VRa, SRb o dt = {b, b9, h, w}. Noter que.w et.f
spécifient la même opération.
Modes supportés S s I SRb I
DS I int8 (b) lint9 (b9) lintl6 (h) int32 (w.
Description
Décaler les éléments dans le registre vectoriel Ra vers la droite de 1 position, en
remplissant à partir du registre scalaire Rb.
L'élément le plus à droite étant décalé vers l'extérieur et retourné dans le registre scalaire Rc et les autres éléments sont
ramenés dans le registre vectoriel Rd.
SRb VRa
B |A.A.21... A2| AI A
VRd _DD;2... D D1 Dl SRc Opération SRc = VRa[O]; pour (i = 0; i<NumElem-2; i++) VRd[i] = VRa[i+l]; VRd [NumElem-1] = SRb; Exception Aucune. Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VEXTRT Extraire Un Elément Format RRRM9, 1001 I sidsH M9| SRd | \ HI SRb Syntaxe Assembleur VEXTRT.dt SRd,VRa, SRb VEXTRT. dt SRd,VRa,#IMM o dt = {b,b9,w,f}. Noter que.f et.w
spécifient la même opération.
Modes supportés
D:S:MI I I I S<-S S<-î
DS int8(b) int9 (b9) intl6 (h) int32 (w)
Description
Extraire un élément du registre vectoriel Ra dont l'indice est spécifié par le registre scalaire Rb ou la zone IMM et l'enregistrer
dans le registre scalaire.
Opération indice32 = {SRb % 32 Il IMM<4:0>}; indice64 = {SRb % 64 Il IMM<5:0>}; indice = (VCSR<vec64>)?indice64: indice32; SRd = VRa[index]; Exception Aucune. Note de programmation Cette instruction n'est pas affectée par le masque d'éléments. VEXTSGN2 Extraire Signe de (1.- 1il Format
" 2 1 10 0
LIII - 1 lii - 1 1 RRRR 0lIl 1011 SDS Rd Ra Syntaxe Assembleur VEXTSGN2.dt VRd,VRa VEXTSGN2.dt SRd.SRa
o dt = {b,b9,h,w}.
Modes supportés
S V<-V S<-S
DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
La valeur du signe du contenu du registre vectoriel/scalaire Ra par éléments est calculée et le résultat est enregistré dans
le registre vectoriel/scalaire Rd.
Opération pour (i=0;i<NumElem&&EMASK[i];i++) { Rd[i] = (Ra[i]<0)?-l:1; } Exception Aucune. VEXTSGN3 Extraire Signe de (1, O. -11 Format
25 20 1 I0. 0
R.R.RR Io 1110 I0111 S DS Rd Ra Syntaxe Assembleur VEXTSGN3.dt VRd,VRa VEXTSGN3. dt SRd, SRa
o dt = {b,b9,h,w}.
Modes supportés I s I v<-v s<-s I DS int8 (b) int9 (b9) intl6 (h) int32(w
Description
La valeur du signe du contenu du registre vectoriel/scalaire Ra par élément est calculée et le résultat est enregistré dans
le registre vectoriel/scalaire Rd.
Opération Pour (i=O;i<NumElem&&EMASK[i];i++) { Si(Ra[i]<O) Rd[i] = 1; autrement si(Ra[i]<O) Rd[i] = 1; autrement Rd[i] = O; } Exception Aucune. VINSRT Insérer Un Elément Format RRRM9 1I 1000 00 DIS S SRa SRb 5 I i III 1SR J SRbIUi B Syntaxe Assembleur VINSRT.dt VRd,SRa, SRb VINSRT.dt VRd, SRa, #IMM o dt = {b,b9,h,w,f}. Noter que.f et.w
spécifient la même opération.
Modes Supportés D:S:M Il | V<-S | V<-I I i DS int8(b) int9 (b9) intl6 (h) int32 (w)
Description
Insérer l'élément dans le registre scalaire Ra dans le registre vectoriel Rd à l'indice spécifié par le registre scalaire Rb ou la
zone IMM.
Opération indice32 = {SRb % 32 Il IMM<4:0>}; indice64 = {SRb % 64 Il IMM<5:0>}; indice = (VCSR<vec64>)?indice64: indice32; VRd[index] = SRa; Exception Aucune Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VL Charge Format
"5 20 15 10 0
REAR 1 1 01 l 00 OW jB0 00 B C Rd SRb Spi
0') 0 15 JO 0
REAI 010 0I0000 IBLTICIAI R1d J |SRb |I M 1 Syntaxe Assembleur VL.lt Rd,SRb, SRi VL.lt Rd,SRb,#IMM VL.lt Rd.SRb+,SRi VL.lt Rd,SRb+,#IMM o it = {b, bz9, Bs9, h, w, 4, 8, 16, 32, 64}, Rd = {VRd, VRAd, SRd}.I1 faut noter que b et.bs9 spécifient la même opération et que.64 et VRAd ne peuvent être spécifiés ensemble. Utiliser VLOFF pour charge
antémémoire hors circuit.
Description
Charge un registre vectoriel dans la rangée
courante ou alternée d'un registre scalaire.
Opération EA = SRb + {SRi Il sex(IMM<7:0>)}; Si (A==1) SRb = EA: Rd = voir tableau ci-dessous; LT Opération charge bz9 SRd<8:0> zex BYTE[EA] bz9 SRd<8:0> = zex BYTE[EA] bs9 SRd<8:0> =sex BYTE[IEA] h SRd<15:;0> = HALF[EA] 4 VRd<9i+8:9i> = sex BYTE[EA+i],i=O à 3 8 VRd<9i+8:9i> = sex BYTE[EA+i],i=O à 7 16 VRd<9i+8:9i> = sex BYTE[EA+i],i=0 à 15 32 VRd<9i+8:9i> = sex BYTE[EA+ i],i=0 à 31 64 VRod<9i+8:9i> = sex BYTE[EA+i],i=0 à 31 VRid<9i+8:9i> = sex BYTE[EA+32+i],i=O à31 Exception Adresse donnée incorrecte, accès non aligné Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VCLB Charge du Tampon Circulaire Format REATT2r|o| 15 10 t 0I1 REAI 1 1 1 1 é fCAlIMM' Rd SRb I I L[21iIJ1I1Iff1CIA1 <73> <4:0>. Syntaxe Assembleur VLCB.lt Rd,SRb, SRi VLCB.lt Rd,SRb,#IMM VLCB.lt Rd.SRb+,SRi VLCB.lt Rd,SRb+,#IMM o it = {b, bz9, Bs9, h, w, 4, 8, 16, 32, 64}, Rd = {VRd, VRAd, SRd}.Il faut noter que b et.bs9 spécifient la même opération et que.64 et VRAd ne peuvent être spécifiés ensemble. Utiliser VLCBOFF pour charge
antémémoire hors circuit.
Description
Charge un registre vectoriel ou scalaire du tampon circulaire lié par l'indicateur COMMENCEMENT dans SRb+i et l'indicateur FIN
dans SRb+2.
L'adresse effective est ajustée si elle est plus grande que l'adresse FIN avant la charge ainsi que l'opération de mise à jour de l'adresse. De plus, les liaisons du tampon circulaire doivent être alignées sur les limites du demi-mot et du mot pour les charges
scalaires.h et.w, respectivement.
Opération EA = SRb + {SRi il sex(IMM<7:0>)}; COMMENCEMENT = SRb+1; FIN = SRb+2; Grandeur cb = FIN - COMMENCEMENT si (EA >FIN) EA = COMMENCEMENT + (EA - FIN); si (A==1) SRb = EA Rd = voir tableau ci-après; LT Opération charqe bz9 SRd<8:0> = zex BYTE[EA] bs9 SRd<8:0> = sex BYTE[EA] h SRd<15:0> = HALF[EA] 4 VRd<9i+8:9i> = sex BYTE[(EA+i>FIN)?EA+i-grandeurcb: EA+i],i=O à 3 8 VRd<9i+8:9i> = sex BYTE[(EA+i>FIN)?EA+i-grandeurcb: EA+i],i=O à 7 16 VRd<9i+8:9i> = sex BYTE[(EA+i>FIN)?EA+i-grandeurcb :EA+i],i=O à 15 32 VRd<9i+8:9> = sex BYTE[(EA+i>FIN)? EA+i-grandeurcb : EA+i],i= O à 31 64 VROd<9i+8:9i> =sex BYTE[(EA+i>FIN)? EA + i-grandeur cb: EA+i],i=O à 31 VR1d<9i+8:9i> =sex BYTE[(EA+32+i>FIN)? EA + 32 + i> FIN)? EA+32+i+qrandeurcb: EA+32+i], i=O à 31 Exceptions
Adresse donnée incorrecte, accès non aligné.
Note de programmation Cette instruction n'est pas affectée par le masque d'éléments. Le programmeur doit assurer la condition suivante pour que l'instruction fonctionne comme on s'y attend:
COMMENCEMENT < EA <2*FIN - COMMENCEMENT
En effet EA > COMMENCEMENT ainsi que EA -FIN <FIN -
COMMENCEMENT.
VLD Charge Double Format REAR 010101 jo]ooo IDIB LT [CIA I I | IR 1 1SIoRb1jli 1
20 110 5
| | | I'olo!" F|B|L |Cli| II I I | REAR 0 0 00 1 B C Rd SRb Imm If Syntaxe Assembleur VLD.lt Rd,SRb, SRi VLD.lt Rd,SRb, #IMM VLD.lt Rd.SRb+,SRi VLD.lt Rd,SRb+,#IMM o it = {b,bz9,Bs9,h, w,4,8,16,32,64}, Rd = {VRd, VRAd, SRd}. I1 faut noter que.b et bs9 spécifient la même opération et.64 et
VRAd ne peuvent être spécifiés ensemble.
Utiliser VLODFF pour charge antémémoire hors circuit.
Description
* Charge deux registres vectoriels dans la rangée courante ou alternée ou bien de
registres scalaires.
Opération EA = SRb + {SRill sex(IMM<7:0>)}; si (A==l) SRb = EA Rd: Rd + 1 = voir tableau ci-après; LT Opération charge bz9 SRd<8:0> = zex BYTE[EA] SRd+1<8:0> = zex BYTE[EA+1] bs9 SRd<8;O> = zex BYTEtEA] SRd+1<8:0> = zex BYTE[EA+1] h SRd<15:0> = HALF[EA] SRd+ 1<15:0> = HALF[EA+2] SRd+1<31:0> = WORD[EA+4] 4 VRd<9i+8:9i> = sex BYTE[(EA+i],i=O à 3 VRd+1<9i+8:9i> = sex BYTE[(EA+4+i],i=O à 3 8 VRd<9i+8:9i> = sex BYTE[(EA+i],i=O à 7 VRd+1<9i+8:9i> = sex BYTE[(EA+8+ i],i=O à 7 16 VRd<9i+8:9i> = sex BYTE[(EA+i],i=O à 15 VRd+1<9i+8:9i> = sex BYTEt(EA+16+i],i=O à 15 32 VRd<9i+8:9i> = sex BYTE[(EA+i],i=O à 31 VRd+1<9i+8:9i> = sex BYTE[(EA+32+i],i=O à 31 64 VROd<9i+8:9i> = sex BYTE[(EA+i],i=O à 31 VRld+1<9i+8:9i> = sex BYTE[(EA+32+i],i=O à 31 VROd+l<9i+8:9i> = sex BYTE[(EA+64+i],i=O à 31 VRld+l<9i+8:9i> = sex BYTE[(EA+96+i],i=O à 31 Exceptions Adresse donnée incorrecte, accès non aligné Note de programmation Cette instruction n'est pas affectée par le masque d'éléments. VLI Charge Immédiate Format
20 15 10 0
RI |011 IMM IDF DS | i Rd IMMC0 Syntaxe Assembleur VLI.dt VRd,#IMM VLI.dt SRd,#IMM
o dt = {b,b9,h,w,f}.
Description
Charge une valeur immédiate dans un registre
scalaire ou vectoriel.
Pour la charge d'un registre scalaire un octet, un octet9, un demi-mot ou un mot est chargé selon le type de donnée. Pour l'octet, l'octet9 et le demi-mot comme type de donnée, les octets non affectés (octets9) ne sont pas modifiés. Opération Rd = voir tableau ci-dessous DT Charqe scalaire Charge vectorielle i8 SRd<7;0≥IMM<7:0> VRd = 32 éléments int8 i9 SRd<8;0≥IMM<8:0> VRd = 32 éléments int9 i16 SRd<15;0≥IMM<15:0> VRd = 32 éléments intl6 i32 SRd<31;0≥sex IMM<18:0> VRd = 8 éléments int32 f SRd<31≥IMM<18>(signe) VRd = 8 éléments SRd<30:23> =IMM<17:0>(exposant) flottants SRd<22:13≥IMM<9:0>(mantisse) SRd<12:0> =zéros Exception Aucune. VLQ Charge Ouad Format
252 0 5 10 5 0
_TIAi _ _ -T I I RcI I I II REAR 0 1 00100 BILTIC[A_ Rd 'SRb SPd
*2 _ IS 10 5 0
REAI lo|o| l | lSo IB|LTiC|A|INM | RdI| SI R"b |1 I'M" Syntaxe Assembleur VLQ.lt Rd,SRb, SRi VLQ.lt Rd,SRb,#IMM VLQ.lt Rd. SRb+,SRi VLQ.lt Rd,SRb+,#IMM o it = {b,bz9,bs9,h,w,4,8,16,32,64}, Rd = {VRd, VRAd, SRd}.Il faut noter que.b et.bs9 spécifient la même opération et que.64 et
VRAd ne peuvent être spécifiés ensemble.
Utiliser VLQOFF pour charge antémémoire hors circuit.
Description
Charge quatre registres vectoriels dans la rangée courante ou alternée ou bien quatre
registres scalaires.
Opération EA = SRb + {SRijl sex(IMM<7:0>)}; si (A==l) SRb = EA Rd: Rd+l: Rd+2: Rd+3 = voir tableau ci-après; LT Opération charge bz9 SRd<8:0> = zex BYTE[EA] SRd+i<8:0> = zex BYTE[EA+1] SRd+2<8:0> = zex BYTE[EA+2] SRd+3<8:0> = zex BYTE[EA+3] bs9 SRd<8;0> = zex BYTE[EA] SRd+I<8:0> = zex BYTE[EA+1] SRd+2<8:0> = zex BYTE[EA+2] SRd+3<8:0> = zex BYTE[EA+3] h SRd<15:0> = HALF[EA] SRd+l<15:0> = sex HALF[EA+2] SRd+ 2<15:0> = sex HALF[EA+4] SRd+3<15:0> = sex HALF[EA+6] SRd+l<31:0> = WORD[EA+4] SRd+2<31:0> = WORD[EA+8] SRd+3<31:0> = WORD[EA+12] 4 VRd<9i+8:9i> = sex BYTE[(EA+i],i=0 à 3 VRd+l<9i+8:9i> = sex BYTE[(EA+4+ i],i=0 à 3 VRd+2<9i+8:9i> = sex BYTE[(EA+8+i],i=0 à 3 VRd+3<9i+8:9i> = sex BYTE[(EA+12+i],i=0 à 3 8 VRd<9i+8:9i> = sex BYTE[(EA+i],i=0 à 7 VRd+l<9i+8:9i> = sex BYTE[(EA+8+i],i=0 à 7 VRd+2<9i+8:9i> = sex BYTE[(EA+ 16+i],i=0 à 7 VRd+3<9i+8:9i> = sex BYTE[(EA+24+i],i=0 à 7 16 VRd<9i+ 8:9i> = sex BYTE[(EA+i],i=0 à 15 VRd+l<9i+8:9i> = sex BYTE[(EA+16+i],i=0 à 15 VRd+2<9i+8:9i> = sex BYTE[(EA+32+i],i=0 à 15 VRd+3<9i+8:9i> = sex BYTE[(EA+48+i],i=0 à 15 32 VRd<9i+8:9i> = sex BYTE[(EA+i],i=0 à 31 VRd+l<9i+8:9i> = sex BYTE[(EA+32+i],i=0 à 31 VRd+2<9i+8:9i> = sex BYTE[(EA+64+i],i=0 à 31 VRd+3<9i+8:9i> = sex BYTE[(EA+96+i],i=0 à 31 64 VROd<9i+8:9i> = sex BYTE[(EA+i],i=0 à 31 VRld<9i+8:9i> = sex BYTE[(EA+ 32+i],i=0 à 31 VROd+l<9i+8:9i> = sex BYTE[(EA+64+i],i=0 à 31 VRld+l<9i+ 8:9i> = sex BYTE[(EA+96+i],i=0 à 31 VROd+2<9i+8:9i> = sex BYTE[(EA+128+ i],i=0 à 31 VRld+2<9i+8:9i> = sex BYTE[(EA+160+i],i=0 à 31 VROd+3<9i+ 8:9i> = sex BYTE[(EA+192+i],i=0 à 31 VRld+3<9i+8:9i> = sex BYTE[(EA+224+ i],i=0 à 31 Exception Adresse données incorrecte, accès non aligné Note de programmation Cette instruction n'est pas affectée par le masque d'éléments. VLR Charge Inverse Format * 20 15 Io0 _ 0 REAR 1 0000 1B LT II IRd SRb SRi -20 15 le ioiol i,", '0,'0, iIBI' I+ l-> "[' "'4f, i, REAU |001| 1 000 0OBLT <?.|IM|R SRb; IMM 1 Syntaxe Assembleur VLR.lt Rd,SRb, SRi VLR.lt Rd,SRb,#IMM VLR.lt Rd.SRb+,SRi VLR.lt Rd,SRb+, #IMM o it = { 4,8,16,32,64}, Rd=(VRd, VRAd}.Il faut noter que.64 et VRAd ne peuvent être spécifiés ensemble. Utiliser VLROFF pour la
charge antémémoire hors circuit.
Description
Charge un registre vectoriel en ordre inverse des éléments. Cette instruction ne supporte
pas un registre de destination scalaire.
Opération EA = SRb + {SRi Il sex(IMM<7:0>)}; si (A==l) SRb = EA; Rd:= voir tableau ci-dessous LT Opération charge 4 VRd[31-i]<8;0O> = sex BYTE[(EA+i],i=O à 3 8 VRd[31-i]<8:0> = sex BYTE[(EA+i],i=O à 7 16 VRd[31-i]<8:0> = sex BYTE[(EA+i],i=O à 15 32 VRd[31-i]<8:0> = sex BYTE[(EA+i],i=O à 31 64 VROd[31-i]<8:0> = sex BYTE[(EA+32+i],i=O à 31 VRld[31-i]<8:0> = sex BYTE[(EA+i],i=O à 31 Exception
Adresse donnée incorrecte, accès non aligné.
Note de programmation Cette instruction n'est pas affectée par le masque d'éléments. VLSL Décalage Loaique A Gauche Format
20 0
RRRM5 0o 0 1 JDalSIR I $ j RS 5 Syntaxe Assembleur VLSL.dt VRd,VRa,SRb VLSL.dt VRd,VRa,#IMM VLSL.dt SRd,SRa,SRb VLSL.dt SRd.SRa+,#IMM
o dt = {b,b9,h,w}.
Modes supportés
D:S:MI V<-V @ S I V<-V @ I I S<-S @ S I S<-S @ I
DS int8(b) int9(b9) intl6(h) int32(w)
Description
Chaque élément du registre vectoriel/scalaire Ra est logiquement décalé d'un bit vers la gauche avec les zéros remplis aux emplacements du bit de moindre poids (LSB), de la quantité de décalage donnée dans le registre scalaire Rb ou la zone IMM et le résultat est enregistré dans le registre
vectoriel/scalaire Rd.
Opération quantité décalage= {SRb % 32 I IMM <4:0>)}; pour (i=O;1 <NumElem && EMASK [i]; i++){ Rd[i] = Ra[i]<quantité_décalage: } Exception Aucune. Note de programmation Noter que la quantité_décalage est prise en tant que nombre à 5 bits pour SRb ou IMM<4:0>. Pour les types de données octet, octet9 et demi-mot, le programmeur est responsable d'une spécification correcte de la quantité de décalage qui est plus petite ou égale au nombre de bits dans la grandeur de donnée. Si la quantité de décalage est plus grande que la grandeur spécifiée de donnée, les éléments seront complétés par
des zéros.
VLSR Décalage Logique A Droite Format RRRM5 l1 0 02000 0D S|DSI I RRRIM500 slis iRd Ra RbIM,5' Syntaxe Assembleur VLSR.dt VRd,VRa,SRb VLSR.dt VRd,VRa,#IMM VLSR. it SRd, SRa,SRb VLSR.lt SRd.SRa+,#IMM
o dt = {b,b9,h,w}.
Modes supportés D:S:M I | V<-V @ S i V<-V @ I S<-S @ S S<-S @ I DS int8(b) |int9(b9) intl6(h) int32(w)
Description
Chaque élément de donnée du registre vectoriel/scalaire Ra est logiquement décalé d'un bit vers la droite avec les zéros remplis aux emplacements des bits de poids fort (MSB), de la quantité de bits donnée dans le registre scalaire Rb ou la zone IMM et le résultat est enregistré dans le
registre vectoriel/scalaire Rd.
Opération quantité décalage= {SRb % 32 IIIMM <4:0>)}; pour (i=O;i <NumElem && EMASK [i]; i++){ Rd[i] = Ra[i]zéro<<quantité décalage; Exception Aucune Note de programmation Noter que la quantité_décalage est prise en tant que nombre à 5 bits pour SRb ou IMM<4:0>. Pour les types de données octet, octet9 et demi-mot, le programmeur est responsable d'une spécification correcte de la quantité de décalage qui est plus petite que ou égale au nombre de bits de la grandeur de donnée. Si la quantité de décalage est plus grande que la grandeur spécifiée de donnée, les éléments seront complétés par des zéros. VLWS Charge Avec Chevauchement Format
2 2 0!5 10 S 0
Es Hb"|IB L IFI | L | RH IIi| RER 010 0 01 t00 I0BLT C Rd SRb SRi -o 0 15 io 5 lol i,,' 1i i 1 Il REAI 01 100 BLTC Rd R iIl111 1 I <7:5> <4:Rd Syntaxe Assembleur VLWS.lt Rd,SRb, SRi VLWS.lt Rd,SRb,#IMM VLWS.lt Rd.SRb+,SRi VLWS.lt Rd,SRb+,#IMM o it = { 4,8, 16,32}, Rd={VRd, VRAd}.Il faut
noter que le mode.64 n'est pas supporté.
Utiliser VL à la place. Utiliser VLWSOFF pour
charge antémémoire hors circuit.
Description
En partant à l'adresse effective, 32 octets sont chargés de la mémoire au registre vectoriel VRd en utilisant le registre scalaire SRb+i en tant que Registre de
Contrôle de Chevauchement.
LT spécifie la grandeur du bloc, le nombre d'octets consécutifs à charger pour chaque bloc. SRB+1 spécifie le chevauchement, le nombre d'octets séparant les débuts de deux
blocs consécutifs.
Le chevauchement doit être égal à ou plus grand que la grandeur du bloc. EA doit être aligné par la grandeur des données. Le chevauchement et la grandeur du bloc doivent être des multiples de la grandeur de la donnée. Opération EA= SRb +{SRi IlI sex(IMM <7:0>)}; Si (A==l) SRb = EA: Grandeurbloc = {411811161132): Chevauchement = SRb+l<31:0>; pour (i=O;i <VECSIZE/Grandeurbloc;i++) pour (j=O; j<grandeur_block; j++) VRd[i*grandeur_bloc+j]<8:0> = sex BYTE [EA+i*chevauchement+j]; Exception
Adresse donnée incorrecte, accès non aligné.
VMAC Multiplier Et Accumuler Format IM9 Ra b/iM RRRM9 El | 10 1: 0 S lioM -N |1i tS Ra |",|t|M l|i]|E Syntaxe Assembleur VMAC.dt VRa,VRb VMAC.dt VRa,SRb VMAC.dt VRa,#IMM VMAC.dt SRa,SRb VMAC.dt SRa+,#IMM
o dt = {b,h,w,f}.
Modes supportés D:S:M IlV<-V @ V V<-V @ S V<-V @ I S<-S @ S S<- S @ I DS int8(b) intl6(h) int32(w) Flottant(f)
Description
Multiplier chaque élément de Ra par chaque élément dans Rb pour produire un résultat intermédiaire double précision; ajouter chaque élément double précision du résultat intermédiaire à chaque élément double précision de l'accumulateur vectoriel; enregistrer la somme double précision de
chaque élément dans l'accumulateur vectoriel.
Ra et Rb utilisent le type spécifié de donnée, tandis que VAC utilise le type de donnée double précision- approprié (16, 32 et 64 bits pour int8, intl6 et int32, respectivement). Les portions supérieures de chaque élément double précision sont
enregistrées dans VACH.
Pour le type de donnée flottante, tous les opérandes et les résultats sont de simple précision. Opération pour (i=0;i<NumElem &&EMASK[i];i++){ Aop [i] = {VRa[i] Il SRa}; Bop [i] = {VRb[i] Il SRb}; si (dt==flottant) VACL[i] = Aop[i] * Bop[i] + VACL[i]; autrement VACH[i]: VACL[i] Aop[i] * Bop[i] + VACH[i]:VACL[i] } Exception Débordement, opérande point flottant incorrect. Note de programmation Cette instruction ne supporte pas le type de donnée int9, utiliser à la place le type de
donnée intl6.
VMACF Multiplier Et Accumuler Fraction Format 25 20 15 10 5 o RRRM9 1 0101010 DSID S 9 Ra' Rb1M5R I I I I"'"" '"i i HI,i| ' " i"1 I" Syntaxe Assembleur VMACF.dt VRa, VRb VMACF.dt VRa,SRb VMACF.dt VRa,#IMM VMACF.dt SRa,SRb VMACF.dt SRa,#IMM
o dt = {b,h,w}.
Modes supportés
D:S:M V<-V @ V V<-V @ S V<-V @ I S<-S @ SI S<-S @ I
DS int8(b) intl6(h) int32(w)
Description
Multiplier chaque élément de VRa par chaque élément dans Rb pour produire un résultat intermédiaire double précision; décaler le résultat intermédiaire à chaque élément double précision d'un bit vers la gauche; ajouter chaque élément double précision du résultat intermédiaire décalé à chaque élément double précision de l'accumulateur vectoriel; enregistrer la somme double précision de chaque élément dans
l'accumulateur vectoriel.
VRa et Rb utilisent * le type de donnée spécifié, tandis que VAC utilise le type de donnée double précision approprié (16, 32 et 64 bits pour int8, int6 et int32, respectivement). Les portions supérieures de chaque élément double précision sont
enregistrées dans VACH.
Opération pour (i=0;i<NumElem &&EMASK[i];i++) { Bop[i] = {VRb[i] Il SRbll sex(IMM<8:0>)}; VACH[i]:VACL[i] = ((VRa[i]] * Bop[i] "1) + VACH[i]:VACL[i]; } Exception Débordement. Note de programmation Cette instruction ne supporte pas le type de donnée int9 - utiliser à la place le type de
donnée intl6.
VMACL Multiplier Et Accumuler Valeur basse Format
"< 20!5 W
RRM911 0010 1! D SDS ip Rd 1 Ra Rb/IM5 Syntaxe Assembleur VMACL.dt VRd,VRa,VRb VMACL.dt VRd,VRa,SRb VMACL.dt VRd,VRa,#IMM VMACL.dt SRd,SRa,SRb VMACL.dt SRd,SRa,#IMM
o dt = {b,h,w,f}.
Modes supportés D:S:M V<-V @ V V<-V @ S V<-V @ I S<-S @ si S<-S @ I DS int8!(b) intl6 (h) int32(w) flottant(f)
Description
Multiplier chaque élément de VRa par chaque élément de Rb pour produire un résultat intermédiaire double précision; ajouter chaque élément double précision du résultat intermédiaire à chaque élément double précision de l'accumulateur vectoriel; enregistrer la somme double précision de chaque élément dans l'accumulateur vectoriel; retourner la portion inférieure au registre
de destination Vrd.
VRa et Rb utilisent le type de donnée spécifié tandis que VAC utilise le type de donnée double précision approprié (16, 32, 64 bits pour int8, intl6 et int32, respectivement). Les portions supérieures de chaque élément double précision sont
enregistrées dans VACH.
Pour le type de donnée flottante, tous les opérandes et résultats sont de simple précision. Opération pour (i=0;i<NumElem &&EMASK[i];i++){ Bop [i] = {VRb[i] Il SRb}; si (dt==flottant) VACL[i] = VRa[i] * Bop[i] + VACL[i]; autrement VACH[i]:VACL[i] = VRa[i] * Bop[i] + VACH[i]:VACL[i]; VRd[i] = VACL[i]; } Exception Débordement, opérande point flottant incorrect. Note de programmation Cette instruction ne supporte pas le type de donnée int9. Utiliser à la place le type de
donnée intl6.
VMAD MultiPlier Et Additionner Format RRJRR biO] 10l S R d Ra Rb R.R.R.R ohho, tl Syntaxe Assembleur VMAD.dt VRc, VRd,VRa,VRb VMAD.dt SRc,SRd,SRa,SRb
o dt = {b,h,w}.
Modes supportés
S VR I SR
DS int8(b) intl6(h) int32(w)
Description
Multiplier chaque élément de Ra par chaque élément dans Rb pour produire un résultat intermédiaire double précision; ajouter chaque élément double précision du résultat intermédiaire à chaque élément de Rc; enregistrer la somme double la précision de chaque élément dans les registres de
destination Rd+l:Rd.
Opération pour (i=O;i<NumElem &&EMASK[i];i++) { Aop [i] = {VRa[i] Il SRa}; Bop [i] = {VRb[i] 1.1 SRb}; Cop [i] = {VRc[i] Il SRc}; Rd+ l[i]:Rd[i] = Aop[i] * Bop[i] + sex_dp (Cop[i]}; } Exception Aucune. VMADL Multiplier Et Ajouter Valeur Basse Format
25 20!5!0 0
RRRR O 1 01001 S |sR i R Syntaxe Assembleur VMADL. dt VRc,VRd,VRa,VRb VMADL.dt SRc,SRd,SRa,SRb
o dt = {b,h,w,f}.
Modes supportés |S Il VR I SR DS |int8(b) |flottant (f) intl6 (h) int32 (w)
Description
Multiplier chaque élément de Ra avec chaque élément dans Rb pour produire un résultat intermédiaire double précision; ajouter chaque élément double précision du résultat intermédiaire à chaque élément de Rc; retourner la portion inférieure de la somme double précision de chaque élément au
registre de destination Rd.
Pour le type de donnée flottante, tous les opérandes et les résultats sont de simple précision. Opération pour (i=O;i<NumElem &&EMASK[i];i++){ Aop [i] = {VRa[i] Il SRa}; Bop [i] = {VRb[i] Il SRb}; Cop [i] = {VRc[i] Il SRc}; Si (dt==flottant) Lo[i] = Aop[i] * Bop[i] + Cop[i]; autrement Hi[i]:Lo[i] = Aop[i] * Bop[i] + sexdp(Cop[i]); Rd[il = Lo[i]; Exception Débordement, opérande point flottant incorrect. VMAS Multiplier Et Soustraire De L 'Accumulateur Format
25 20 15 I0
lil,,, i0 H I. ' i[jII" lIi" I"')'"' 1 RRRM9 11 1011 10SDs N1M9 Ra Rb/IM5 Syntaxe Assembleur VMAS.dt VRa,VRb VMAS.dt VRa,SRb VMAS.dt VRa,#IMM VMAS.dt SRa,SRb VMAS.dt SRa,#IMM
o dt = {b,h,w,f}.
Modes supportés
D:S:!M V<-V @ VI V<-V @ S V<-V @ I S<-S @ S S<-S @ I
DS int8(b) intl6(h) int32 (w. flottant (f)
Description
Multiplier chaque élément de Ra par chaque élément de Rb pour produire un résultat intermédiaire double précision; soustraire chaque élément double précision du résultat intermédiaire du résultat intermédiaire de chaque élément double précision de l'accumulateur vectoriel; enregistrer la somme double précision de chaque élément dans
1 'accumulateur vectoriel.
Ra et Rb utilisent le type de donnée spécifié tandis que VAC utilise le type de donnée double précision approprié (16, 32, 64 bits
pour int8, intl6 et int32, respectivement).
Les portions supérieures de chaque élément
double précision sont enregistrées dans VACH.
Pour le type de donnée flottante, tous les opérandes et résultats sont de simple précision. Opération pour (i=O;i<NumElem &&EMASK[i];i+ +){ Bop [i] = {VRb[i] Il SRb};
si (dt==flottant) VACL[i] = VACL[i] -
VRa[i] * Bop[i]; autrement VACH[i]:VACL[i] = VACH[i] VACL[i] - VRa[i] * Bop[i]; } Exception Débordement, opérande point flottant incorrect. Note de programmation Cette instruction ne supporte pas le type de donnée int9. Utiliser à la place le type de
donnée intl6.
VMASF Multiplier Et Soustraire De La Fraction D'Accumulateur Format
0 25 20 15 10
MI I' II'I 'I '1- iH -I'"' 1 RRRM9 1 | 10 S1DS M9 k Ra Rb/IM5 Syntaxe Assembleur VMASF.dt VRa,VRb VMASF.dt VRa,SRb VMASF.dt VRa,#IMM VMASF.dt SRa,SRb VMASF.dt SRa,#IMM
o dt = {b,h,w}.
Modes supportés
D:S:M I V<-V @ V IV<-V @ S I V<-V @ I I- @SS<-S S S<-S @ I
DS int8(b) intl6(h) int32(w)
Description
Multiplier chaque élément de VRa avec chaque élément de Rb pour produire un résultat intermédiaire double précision; décaler le résultat intermédiaire double précision de la valeur d'un bit; soustraire chaque élément double précision du résultat intermédiaire décalé de chaque élément double précision de l'accumulateur vectoriel; enregistrer la somme double précision de chaque élément dans
l'accumulateur vectoriel.
VRa et Rb utilisent le type de donnée spécifié tandis que VAC utilise le type de donnée double précision approprié (16, 32, 64 bits pour int8, intl6 et int32, respectivement). Les portions supérieures de chaque élément double précision sont
enregistrées dans VACH.
Opération pour (i=0;i<NumElem &&EMASK[i];i++){ Bop[i]= {VRb[i] IlI SRb Il sex(IMM<8:0>};
VACH[i];VACL[i] = VACH[i]: VACL[i] -
VRa[i] * Bop[i]; Exception Débordement Note de programmation Cette instruction ne supporte pas le type de donnée int9. Utiliser à la place le type de
donnée intl6.
VMASL MultiDlier Et Soustraire de l'Accumulateur Valeur Basse Format
" 20 15 10. O
RRRM9 _ _, 001j1 il DS 1 RD Ra Rb/IM5 Syntaxe Assembleur VMASL.dt VRd,VRa,VRb VMASL.dt VRd,VRa,SRb VMASL.dt VRd,VRa,#IMM VMASL.dt SRd,SRa,SRb VMASL.dt SRd,SRa,#IMM
o dt = {b,h,w,f}.
Modes supportés sPP D:S:M Il V<-V V V<-V @ S V<-V @ I s<-s @ S S<- S @ I DS int8(b) intl6(h) int32(w) flottant(f)
Description
Multiplier chaque élément de VRa par chaque élément dans Rb pour produire un résultat intermédiaire double précision; soustraire chaque élément double précision du résultat intermédiaire de chaque élément double précision de l'accumulateur vectoriel; enregistrer la somme double précision de chaque élément dans l'accumulateur vectoriel; retourner la portion inférieure au registre
de destination VRd.
VRa et Rb utilisent le type de donnée spécifié tandis que VAC utilise le type de donnée double précision approprié (16, 32, 64 bits pour int8, intl6 et int32, respectivement). Les portions supérieures de chaque élément double précision sont
enregistrées dans VACH.
Pour le type de donnée flottante, tous les opérandes et résultats sont de simple précision. Opération pour (i=0;i<NumElem &&EMASK[i]; i++){ Bop [i] = {VRb[i] Il SRb}; si (dt==flottant) VACL[i] = VACL[i] -
VRA[i] * Bop[i]; autrement VACH[i]: VACL[i] = VACH[i]: VACL[i] - VRa[i] * Bop[i]; VRd[i] = VACL[i] } Exception Débordement, opérande point flottant incorrect. Note de programmation Cette instruction ne supporte pas le type de donnée int9. Utiliser à la place le type de
donnée intl6.
VMAXE Maximum Par Paire Et Echange Format 1.,' 1- D i?IIi I' i l I
RRR.M5 V à
RRRM lo|o! ICDIDS|DS V Rd V Ra |VRb Syntaxe Assembleur VMAXE.dt VRd,VRb
o dt = {b,b9,h,w,f}.
Modes supportés D:S:M V<-V I i DS int8(b) int8(b) intl6(h) int32(w) flottant(f)
Description
VRa doit être égal à VRb. Quand VRa est
différent de VRb, le résultat est non défini.
Chaque élément de donnée pair/impair du registre vectoriel Rb est comparé par paires et la plus grande valeur de chaque paire d'éléments de données est enregistrée à l'emplacement pair et la plus petite valeur de chaque paire d'éléments de données est enregistrée à la position impaire du registre
vectoriel Rd.
Opération pour (i=O;i<NumElem &&EMASK[i];i+2) { VRd[i] = (VRb[i] > VRb[i+ 1]) ? VRb[i]: VRb[i+l]; VRd[i+1] = (VRb[i] > VRb[i+1]) ? VRb[i+ l]: VRb[1J; } Exception Aucune. VMOV Déplacement Format RRRR 0 1 0 l 1'0 IDS Rd GrouIp Rb Syntaxe Assembleur VMOV.dt Rd, Rb o dt = {b,b9,h,w,f}. Rd et Rb désignent un
nom de registre désigné par l'architecture.
Noter que.w et.f désignent la même opération. Modes supportés | DS I int8(b) | int9 (b9) int16 (h) int32(w)
Description
Le contenu du registre Rb est déplacé au registre Rd. La zone du groupe spécifie les groupes des registres de source et de destination. La notation des groupes de registre est: VR registre vectoriel rangée courante VRA registre vectoriel autre rangée SR registre scalaire SP registre d'utilité spéciale RASP registre pile adresses retour VAC registre accumulateur vectoriel (voir tableau codage registre VAC ci-dessous) Groupe Groupe Groupe Commentaires
<3:0> Source Dest.
0000 réservé
0001 VR VRA
VRA VR
0011 VRA VRA
_ _ réservé 0101 réservé
VRA VAC
0111 VAC VRA
1000 réservé
1001 SR VRA
1010 réservé 1011 réservé
1100 SR SP
1101 SP SR _
1110 SR RASR
1111 RASR SR l l Noter qu'un registre vectoriel ne peut être déplacé à un registre scalaire par cette instruction. L'instruction
VEXTRT est prévue dans ce but.
Utiliser le tableau suivant pour le codage du registre VAC: R<2:0> Registres Commentaires 000 non défini
001 VACOL
VACOH _
011 VACO Spécifier VACOH:VACOL. Si spécifiée comme source, la paire de registres VRd+i:VRd est remise à jour. VRd doit être un registre pair. non défini
101 VACIL
VACIH
111 VACI Spécifier VAC1H:VAC1L. Si spécifiée comme source, la paire de registres VRd+l:VRd est remise à jour. VRd doit être un registre pair. tous les non défini autres Opération Rd=Rb Exception Le positionnement d'un bit d'état d'exception dans VCSR ou VISRC provoquera l'exception correspondante. Note de programmation Cette instruction n'est pas affectée par le masque d'éléments. Il faut noter que, comme le concept d'autre rangée n'existe pas en mode VEC64, cette instruction ne peut être utilisée pour passer de ou vers un registre
d'une autre rangée en mode VEC64.
VMUL Multiplier Format RRRR 0 1 il0 01000 DIJS R| R Rb Syntaxe Assembleur VMUL.dt VRc,VRd,VRa,VRb VMUL.dt SRc,SRd, SRa,SRb
o dt = {b,h,w}.
Modes supportés T s I VR I SR DSI int8(b) intl6(h) int32(w)
Description
Multiplier chaque élément de Ra avec chaque élément dans Rb pour produire un résultat intermédiaire double précision; retourner la somme double précision de chaque élément dans
les registres de destination Rc:Rd.
Ra et Rb utilisent le type de donnée spécifiée, tandis que Rc:Rd utilisent le type de donnée double précision approprié (16, 32 et 64 bits pour int8, intl6, int32, respectivement). Les portions supérieures de chaque élément double précision sont
enregistrées dans Rc.
Opération pour (i=O;i<NumElem &&EMASK[i];i++) { Aop [i] = {VRa[i] Il SRa}; Bop [i] = {VRb[i] Il SRb}; Hi[i] = Lo[i] = Aop[i]*Bop[i]: Rc[i]=Hi[i] Rd [i] =Lo[i]; } Exception Aucune. Note de programmation Cette instruction ne supporte pas le type de donnée int9, utiliser à la place de type de donnée intl6. Cette instruction ne supporte pas non plus le type de donnée flottante car le résultat étendu n'est pas un type de
donnée supportée.
VMULA Multiplier A Accumulateur Format 0I2 0 l.i o0' RRR.Nl19 M 1 X IDi S DS 1MJ 1M9 Ra Rbill RRRM9 ij I 000010 Ra Rb;%MI5] Syntaxe Assembleur VMULA.dt VRa,VRb VMULA.dt VRa,SRb VMULA.dt VRa.#IMM VMULA.dt SRa,SRb VMULA.dt SRa,#IMM
o dt = {b,h,w,f}.
Modes supportés D:S:M | V @ V v @ S V @ I S @ S S @ I DS int8(b) intl6(h) int32 (w) flottant (f)
Description
Multiplier chaque élément de VRa avec chaque élément dans Rb pour produire un résultat intermédiaire double précision; écrire le
résultat dans l'accumulateur.
Pour le type de donnée flottante tous les opérandes et les résultats sont de simple précision. Opération pour (i=0;i<NumElem &&EMASK[i];i++) { Bop [i] = {VRb[i]IISRb}; si (dt==flottant) VACL[i]=VRa[i]*Bop[i]; autrement VACH[i]:VACL[i]=VRa [i]*Bop[i]; } Exception Aucune. Note de programmation Cette instruction ne supporte pas le type de donnée int9. Utiliser à la place le type de
donnée intl6.
VMULAF Multiplier A La Fraction D ' Accumulateur Format 20 2:- 10 5 o RRRI9 |1OlOi IDSIDSIN.M9 Ra Rb,1M5 Syntaxe Assembleur VMULAF.dt VRa,VRb VMULAF.dt VRa,SRb VMULAF. dt VRa. #IMM VMULAF.dt SRa,SRb VMULAF.dt SRa,#IMM
o dt = {b,h,w}.
Modes supportés
D:S:M|| V @ V | V @ S V @ I S | S @ I
DS int8(b) intl6(h) int32 (w)
Description
Multiplier chaque élément de VRa par chaque élément dans Rb pour produire un résultat intermédiaire double précision; décaler le résultat intermédiaire double précision vers la gauche de un bit; écrire le résultat dans l'accumulateur. Opération pour (i=O;i<NumElem &&EMASK[i];i+ +){ Bop [i] = {{VRb[i]lI.ISRblIsex(IMM<8:0>)}; VACH[i]:VACL[i]=(VRa[i]*Bop[i]) " 1; } Exception Aucune. Note de programmation Cette instruction ne supporte pas le type de donnée int9. Utiliser à la place le type de
donnée intl6.
VMULF Multiplier Fraction Format RRRSI9 I 0i0100I IS, I i: I i,,I IM9 Rd Ra* RbI.M5 Syntaxe Assembleur VMULF.dt VRd,VRa, VRb VMULF.dt VRd,VRa,SRb VMULF.dt VRd,VRa, #IMM VMULF.dt SRd,SRa,SRb VMULF.dt SRd,SRa,#IMM
o dt = {b,h,w}.
Modes supportés
D:S:M IV<-V @ V IV<-V @ S IV<-V @ I I- @SS<-S @ I
DS int8(b) intl6 (h) int32 (w)
Description
Multiplier chaque élément de VRa par chaque élément dans Rb pour produire un résultat intermédiaire double précision; décaler le résultat intermédiaire double précision vers la gauche de un bit; ramener la portion supérieure du résultat au registre de destination VRd+l et la portion inférieure au registre de destination VRd. VRd doit être un
registre de numéro pair.
Opération pour (i=0;i<NumElem &&EMASK[i];i++){ Bop[i] = {VRa[i]llSRblsex(IMM<8:0>)}; Hi[i]:Lo[i]=(VRa[i]*Bop[i])"1; VRd+ l[i]=Hi[i] VRd [i]=Lo [i]; } Exception Aucune. Note de programmation Cette instruction ne supporte pas le type de donnée int9; utiliser à la place de type de
donnée intl6.
VMULFR Multiplier Fraction Et Arrondir Format e0 a. 20 5 _ 0 c o RRRM9 1I I I0, iiDS $ $M9 Rl 'Ra Rb/aM5 Syntaxe Assembleur VMULFR.dt VRd,VRa,VRb VMULFR.dt VRd,VRa,SRb VMULFR. dt VRd,VRa, #IMM VMULFR.dt SRd,SRa,SRb VMULFR.dt SRd,SRa, #IMM
o dt = {b,h,w}.
Modes supportés
I D:S:M || V<-V @ V V<-V @ S | V<-V @ I S<-S @ S S<-S @ I
DS I int8(b) intl6 (h) int32(w)
Description
Multiplier chaque élément de VRa avec chaque élément dans Rb pour produire un résultat intermédiaire double précision; décaler le résultat intermédiaire double précision vers la gauche de un bit; arrondir le résultat intermédiaire décalé à la portion supérieure; retourner la portion supérieure au registre
de destination VRd.
Opération pour (i=O;i<NumElem &&EMASK[i];i++){ Bop[i] = {VRb[ijllISRblsex(IMM<8:0>)}; Hi[i]:Lo[i]=(VRa[i]*Bop[i]l)<<1; Si (Lo[i]<msb≥=l) Hi[i]+l; VRd [i] =Hi[i]; } Exception Aucune. Note de programmation Cette instruction ne supporte pas le type de donnée int9, utiliser à la place le type de
donnée intl6.
VMULL Multiplier Valeur Basse Format
_' Y0 15 10 ' O
H Ii it t tI î i RRRN9 i 001011 DSIDS S\1 LMi9| Rd Ra Rb/I.M5 Syntaxe Assembleur VMULL.dt VRd,VRa,VRb VMULL.dt VRd,VRa,SRb VMULL.dt VRd,VRa,#IMM VMULL.dt SRd,SRa,SRb VMULL.dt SRd,SRa,#IMM
o dt = {b,h,w,f}.
*Modes supportés
D:S:M| V<-V @ V V<-V @ S I V<-V @ I S<-S @ S S<-S @ I
DS int8 (b) intl6 (h) int32 (w) flottant (f)I
Description
Multiplier chaque élément de VRa avec chaque élément dans Rb pour produire un résultat double précision; retourner la portion inférieure de résultat au registre de
destination VRd.
Pour le type de donnée flottante, tous les opérandes et les résultats sont de simple précision. Opération pour (i=0;i<NumElem &&EMASK[i];i++){ Bop [i] = {VRb[i] Il SRb}; si (dt==flottant) Lo[i]=VRa[i]*Bop[i]; autrement Hi[i]:Lo[i]=VRa[i]*Bop[i]; VRd[i] = Lo[i] } Exception Débordement, opérande point flottant incorrect. Note de programmation Cette instruction ne supporte pas le type de donnée int9, utiliser à la place le type de
donnée intl6.
VNAND NON ET
Format K5||1 KR. 0FS|S M9 O|l S!R Rb I 1'""1 t I I5 i t RRR.M9 i20R ÀÀ >0 Rb/IM5R Syntaxe Assembleur VNAND.dt VRd,VRa,VRb VNAND.dt VRd,VRa,SRb VNAND.dt VRd,VRa, #IMM VNAND.dt SRd,SRa,SRb VNAND.dt SRd,SRa,#IMM o dt = {b,b9,h,w}. Il faut noter que.w et.f
spécifient la même opération.
Modes supportés
D:S:M IV<-V @ V V<-V @ S I V<-V @ I S<-S @ S S<-S @ I
DS _ int8 (b) int9(b9) intl6(h) int32 (w)
Description
Produire l'opération logique NON ET de chaque bit de chaque élément dans Ra avec le bit correspondant dans l'opérande immédiat/Rb;
retourner le résultat dans Rd.
Opération pour (i=0;i<NumElem &&EMASK[i];i++) { Bop[i] = {VRb[i]IISRbl Isex(IMM<8:0>)}; Rd[i]<k> = -(Ra[i]<k> & Bop[i]<k>), pour k = tous les bits dans l'élément i; } Exception Aucune.
VNOR NON OU
Format 0 25 -15 Io0 5 0 RRRM9 O1II1 DI0S0DSH D Rd| Ra i R Syntaxe Assembleur VNOR.dt VRd,VRa,VRb VNOR.dt VRd,VRa,SRb VNOR.dt VRd,VRa,#IMM VNOR.dt SRd,SRa,SRb VNOR.dt SRd,SRa,#IMM o dt = {b,b9,h,w}.I1 faut noter que.w et.f
spécifient la même opération.
Modes supportés
D:S:M I V<-V V V<-V @ S I V<-V I <-S S S<-S I
DS H int8(b) b int9(b9) intl6 (h) int32(w)
Description
Produire l'opération logique NON OU de chaque bit de chaque élément dans Ra avec le bit correspondant dans l'opérande Rb/Immédiat;
retourner le résultat dans Rd.
Opération pour (i=O;i<NumElem &&EMASK[i];i++) { Bop[i] = {VRb[i]IISRbllsex(IMM<8:0">)}; Rd[i]<k>;(Ra[i]<k>lBop[i]<k≥pour k=tous les bits dans l'élément i; } Exception Aucune.
VOR OU
Format ,, 0 lS I0 III 111'li" I' i" I' I' "" RRRM9 1 101101 S S M9S Rd Ra R b/I5 Syntaxe Assembleur VOR.dt VRd,VRa,VRb VOR.dt VRd,VRa,SRb VOR.dt VRd,VRa, #IMM VOR.dt SRd,SRa,SRb VOR.dt SRd,SRa,#IMM o dt = {b,b9,h,w}.Il faut noter que.w et.f spécifient la même opération Modes supportés D:sSM I v<-V @ v l v<-V @ S I v<-V @ i I S<-S @ S S<-S @ i DS _f int8(b) int9(b9) intl6(h) int32(w)
Description
Produire le OU logique de chaque bit de chaque élément dans Ra avec le bit correspondant dans l'opérande Rb/Immédiat;
retourner le résultat dans Rd.
Opération pour (i=O;i<NumElem &&EMASK[i];i++) { Bop[i] = {VRb[i]IISRbllsex(IMM<8:0>)}; Rd[i]<k>;Ra[i]<k>lBop[i]<k≥pour k= tous les bits dans l'élément i; } Exception Aucune. VORC ComDlément OU Format
'015 10 O
RRRM9 11 d1011 ISIDSHM 9 Rd R ai bM| Syntaxe Assembleur VORC.dt VRd,VRa,VRb VORC.dt VRd,VRa,SRb VORC.dt VRd,VRa,#IMM VORC.dt SRd,SRa,SRb VORC.dt SRd,SRa,#IMM o dt = {b,b9,h,w}.Il faut noter que. w et.f spécifient la même opération Modes supportés | D:S:M V<-V @ V | V<-V @ S | V S<-V@I S<-S @ sI DS int8(b) int9 b9) intl16 h int32 (w)
Description
Produire l'opération OU logique de chaque bit de chaque élément dans Ra avec le complément du bit correspondant dans opérande
Rb/Immédiat; retourner le résultat dans Rd.
Opération pour (i=O;i<NumElem &&EMASK[i];i++) { Bop[i] = {VRb[i]IISRbllsex(IMM<8:0>)}; Rd[i]<k>;Ra[i]<k>lBop[i]<k≥pour k=tous les bits dans l'élément i; } Exception Aucune. VPFTCH Pré- extraction Format 0 u! 0 0 REAR 1o|o|l| J 110 | | |LN|OS|W1111 |l SjRlb | SIM |7
M 15 I0 5 0
REAI00 Il 01 L1I I [ d l RI l [11 1 too, ?,II I+.1 I' b. mI Syntaxe Assembleur VPFTCH.ln SRb,SRi VPFTCH. in SRb,#IMM VPFTCH. ln SRb+,SRi VPFTCH.ln SRb+,#IMM
o dt = {1,2,4,8}.
Description
Pré-extrait les multiples lignes d'antémémoire de données vectorielles en partant de l'adresse effective. Le nombre des lignes d'antémémoire est spécifié comme suit: LN<1:O≥00: 1 ligne d'antémémoire 64 octets est pré-extraite LN<l:O≥01: 2 lignes d'antémémoire 64 octets sont pré-extraites LN<l:O≥0l: 4 lignes d'antémémoire 64 octets sont pré-extraites LN<l:O≥11: 8 lignes d'antémémoire 64 octets sont pré-extraites Si l'adresse effective n'est pas sur une limite à 64 octets, elle est d'abord tronquée
pour être alignée avec la limite à 64 octets.
Opération Exception
Exception adresse donnée incorrecte.
Note de programmation EA<31:0> désigne une adresse d'octet dans la
mémoire locale.
VPFTCHSP Pré-extraction A Zone de Travail Format 25 20 15 I o | VREAR [o H110 LNSFAR SRp SRRb SRi
2 _ 1 20I -0
REAI I MM SRpI SRb[MMM f]>Jij d1'1d j 4j.jA:,. 'j,:::' REAI 00 1I 11 1 SIRI1URb M Syntaxe Assembleur VPFTCHSP. in SRp,SRb, SRi VPFTCHSP. in SRp,SRb, #IMM VPFTCHSP. in SRp, SRb+, SRi VPFTCHSP. in SRp, SRb+, #IMM o in = {1,2,4,8}. Noter que VPFTCH et
VPFTCHSP ont le même code d'opération.
Descript ion Transfère des blocs multiples de 64 octets de la mémoire à la zone de travail. L'adresse effective donne l'adresse de départ dans la mémoire et SRp donne l'adresse de départ dans la zone de travail. Le nombre de blocs de 64 octets est spécifié comme suit: LN<1:O≥00: 1 bloc de 64 octets est transféré. LN<1:O≥01: 2 blocs de 64 octets sont transférés LN<1:O≥10: 4 blocs de 64 octets sont transférés LN<l:O≥11: 8 blocs de 64 octets sont transférés. Si l'adresse effective n'est pas sur une limite à 64 octets, elle est d'abord tronquée
pour être alignée avec la limite à 64 octets.
Si l'adresse d'indicateur de zone de travail dans SRp n'est pas sur une limite à 64 octets, elle est également tronquée pour être alignée avec la limite à 64 octets. L'adresse d'indicateur de zone de travail alignée est incrémentée par le nombre d'octets transférés. Opération EA = SRb + {SRillsex(IMM<7:0)}; Si(A==l) SRb = EA; Num_bytes = {64111281125611512}; Memadrs = EA<31:6>:6b'000000; SRp = SRp<31:6>: 6b'000000 pour (i = O; i < Numbytes; i++) SPAD[SRp++] = MEM[Mem_adrs+i]; Exception
Exception adresse donnée incorrecte.
VROL Rotation à Gauche Format 23 M I.0 O o RRRM5 10loII I000 l 1 Rd IRa Rb/IM5 Syntaxe Assembleur VORL.dt VRd,VRa,SRb VORL.dt VRd,VRa,#IMM VORL.dt SRd, SRa,SRb VORL. dt SRd,SRa,#IMM
o dt = {b,b9,h,w}.
Modes supportés
D:S:M| I V<-V @ S V<-V @ I S<-S @ S I S<-S @ I
DS 1 int8(b) int9(b9) intl6(h) int32(w)
Description
Chaque élément de donnée du registre vectoriel/scalaire Ra est tourné vers la gauche de la quantité de bits donnée dans le registre scalaire Rb ou la zone IMM et le résultat est enregistré dans le registre
vectoriel/scalaire Rd.
Opération quantité_ rotation= {SRb % 321 IIMM<4:0>}; pour (i=-0; i<NumElem &&EMASK[i];i++) { Rd[i] = Ra[i] rotation rotation à gauche_quantité; } Exception Aucune. Note de programmation Noter que la quantité rotation est prise
comme un nombre à 5 bits de SRb ou IMM <4:0>.
Pour les types de données de l'octet de l'octet9, du demi-mot, le programmeur est responsable d'une spécification correcte de la quantité de rotation qui est plus petite que ou égale au nombre de bits dans la grandeur de donnée. Si la quantité de rotation est plus grande que la grandeur de
donnée spécifiée, le résultat est non défini.
Noter que la rotation à gauche de n est équivalente à la rotation à droite de ElemSize-n, o ElemSize désigne le nombre de
bits dans une grandeur donnée de donnée.
YVROR Rotation à Droite Format
2515 10 $
BRRP |0!1l0l00010 ID|S1DRid 1 1 Ra Rb/'IM5 Syntaxe Assembleur VROR. dt VRd,VRa,SRb VROR.dt VRd,VRa,#IMM VROR.dt SRd,SRa,SRb VROR.dt SRd,SRa,#IMM
o dt = {b,b9,h,w}.
Modes supportés D:S:M Il I V<-V @ S V<-V @ I S<5 @ S S<-S @ I DS Iint8 (b) 1int9 (b9) intl6 (h) int32 (w)
Description
Chaque élément de donnée du registre vectoriel/scalaire Ra est tourné vers la droite de la quantité de bits donnée dans le registre scalaire Rb ou la zone IMM et le résultat est enregistré dans le registre
vectoriel/scalaire Rd.
Opération quantité_rotation= {SRb % 3211IMM<4:0>}; pour (i=0;i<NumElem &&EMASK[i];i++); { Rd[i] = Ra[i] rotation rotation à droite_quantité; } Exception Aucune. Note de programmation Noter que la quantité rotation est prise
comme un nombre à 5 bits de SRb ou IMM <4:0>.
Pour les types de données de l'octet de l'octet9, du demi-mot, le programmeur est responsable d'une spécification correcte de la quantité de rotation qui est plus petite que ou égale au nombre de bits dans la grandeur de donnée. Si la quantité de rotation est plus grande que la grandeur de données spécifiée, le résultat est non défini. Noter que la rotation à droite de n est équivalente à la rotation à gauche de ElemSize-n, o ElemSize désigne le nombre de
bits dans une grandeur donnée de donnée.
VROUND Arrondissement Point Flottant à Entier Format
0 ' 20 1< go 1.
RRM 0 1 1Oil 10 D!S IRMH Rd Rb.
Syntaxe Assembleur VROUND.rm VRd,VRb VROUND.rm SRd,SRb
o rm = {ninf,zero,near,pinf}.
Modes supportés D:S:M V<- s<-S
Description
Le contenu du registre vectoriel/scalaire Rb dans le format de donnée à point flottant est arrondi à l'entier le plus proche à 32 bits et le résultat est enregistré dans le registre vectoriel/scalaire Rd. Le mode
d'arrondissement est défini dans RM.
RM<1:0> Mode _Signification 00 ninf arrondissement vers - infini Q01 zero arrondissement vers zéro near arrondissement vers le pair le plus Proche 11 pinf arrondissement vers + infini Opération pour (i=0;i<NumElem: i++){ Rd[il=convertir à int32 (Rb[i]); } Exception Aucune. Note de programmation Cette instruction n'est pas affectée par le
masque d'élément.
VSATL Saturer à La Limite Inférieure Format c no 1. 10. 0 1 DSDS v f1 9111111 l * 1 11 1 -1
RRRM9 I I 0011 01 0S DS L9 Rd Ra Rb/LM5.
Syntaxe Assembleur VSATL.dt VRd,VRa,VRb VSATL.dt VRd,VRa,SRb VSATL. dt VRd,VRa, #IMM VSATL.dt SRd,SRa,SRb VSATL.dt SRd,SRa,#IMM o dt = {b,b9,h,w,f}. Noter que le type de donnée.f n'est pas supporté avec l'immédiat
9 bits.
Modes supportés
D:S:M IV<-V @ V| V<-V @ S I V<-V @ I S<-S @ S S<-S 6 I-
DS int8(b) int9 (b9) intl6 (h) int32 (w) flottant (f)
Description
Chaque élément de donnée du registre vectoriel/scalaire Ra est vérifié par rapport à sa limite inférieure correspondante dans le registre vectoriel/scalaire Rb ou la zone IMM. Si la valeur de l'élément de donnée est plus petite que la limite inférieure, elle est établie égale à la limite inférieure et le résultat final est enregistré dans le
registre vectoriel/scalaire Rd.
Opération pour (i=0;i<NumElem &&EMASK[i];i++) { Bop[i] = {VRb[i]lISRbllsex(IMM<8:0>)}; Rd[i]=Ra[i]<Bop[i]? Bopti]:Ra[i]; } Exception Aucune. VSATU Saturer à La Limite Supérieure Format I 2015 Io RRRM9 I I 0100 l DSH Rd Ra Rb/1M5 Syntaxe Assembleur VSATU.dt VRd,VRa,VRb VSATU.dt VRd,VRa,SRb VSATU.dt VRd,VRa,#IMM VSATU.dt SRd,SRa,SRb VSATU.dt SRd,SRa,# IMM o dt = {b,b9,h,w,f}. Noter que le type de donnée.f n'est pas supporté avec l'immédiat
9 bits.
Modes supportés D:S:M l V<-V @ V v<-v @ S I V<-V @ I I S<S @ SI S<S @ I DS int8(b) int9 (b91 intl6 (h) int32 (w) flottant (f)
Description
Chaque élément de donnée du registre vectoriel/scalaire Ra est vérifié par rapport à sa limite supérieure correspondante dans le registre vectoriel/scalaire Rb ou la zone IMM. Si la valeur de l'élément de donnée est plus petite que la limite supérieure elle est établie égale à la limite supérieure, et le résultat final est enregistré dans le
registre vectoriel/scalaire Rd.
Opération pour (i=0;i<NumElem &&EMASK[i];i++){ Bop[i] = {VRb[i]IISRblisex(IMM<8:0>)}; Rd[i]=Ra[i]<Bop[i]? Bop[i]:Ra[i]; ) Exception Aucune. VSHFL Brassage Format
?J 1 IO 0
RVRRR ICI1SD Y 1s J4I RdI Rla) Rb Syntaxe Assembleur VSHFL.dt VRc,VRd,VRa,VRb VSHFL.dt VRc,VRd,VRa,SRb o dt = {b,b9,h,w,f}. Noter que.w et.f
spécifient la même opération.
Modes supportés IS VRb SRb DS int8 (b) int9(b9 intl6(h) int32(w)
Description
Le contenu des registres vectoriels Ra est brassé avec Rb et le résultat est enregistré dans les registres vectoriels Rc:Rd comme
montré ci-dessous.
VRa Rb VRd Opération Exception Aucune. Note de Programmation Cette instruction n'utilise pas le masque d'éléments. VSHFLH Brassage Haut Format 3025 20 IS Do 5 o RRRR | 0 I 1|0]o00 SILS| VRd |VRa | kRb Syntaxe Assembleur VSHFLH. dt VRd,VRa,VRb VSHFLH. dt VRd, VRa, SRb o dt = {b,b9,h,w,f}. Noter que.w et.f
spécifient la même opération.
Modes supportés I s Il VRb I S Rb I DS int8(b) int9(b9) intl6(h) | int32(w)
Description
Le contenu des registres vectoriels Ra est brassé avec Rb et la portion supérieure du résultat est enregistrée dans les registres
vectoriels Rc:Rd comme montré ci-dessous.
t;,..... -, ? VRa Rb Opération Exception Aucune. Note de Programmation Cette instruction n'utilise pas le masque d'éléments. VSRFLL Brassage bas Format 25.2 5 5 o RRRR 101111 1 FOI 10JsOOs1 1V 1 VR RbTb Syntaxe Assembleur VSHFLL.dt VRd, VRa, VRb VSHFLL.dt VRd, VRa, SRb o dt = {b, b9, h, w, f}. Noter que.w et.f
spécifient la même opération.
Modes su-ports S | VRb SRb DS int8 (b) int9 (b9) intl6 (h) int32 (w) I
Description
Le contenu du registre vectoriel Ra est brassé avec Rb et la partie inférieure de résultat est enregistrée dans le registre vectoriel Rd
comme montré ci-dessous.
=>Ra Rb Opération Exception Aucune. Note de programmation Cette instruction n'utilise pas le masque d'éléments. suuaiaii,p anbseui aT zed agoa;;e sed -sa,u uotruonasui aaDr uoTqueuJiboid ap aoN Àu6,TTI uou sGODe 'aqoaUaoouT a.uuop assaipv uoT;daoxz TE O- = l'<T6:L+T6>31'IA=
0 - T'<T6:L+T6>'r%3A = [7+ia+.1],.
I TE 0 = T'<T6:L+T6>s %A = [Z,+V_] _l_ _9
IT V 0 = T'<T6:L+T6>sdA = [!+V,] bT 9-
Sl e. 0 = Y'<,Z6:L+,Z6>'%{A = [,z+VW].,T. 91-
L ? 0 = T'<T6:L+T6>9'A = [T+V]a.L X 8' 0 T='<T6:L+T6>0' A = [t+, V]2.LA r' <0:1ú>yS = [v]a.OM M <0: 9>>'US = [VZ,.I g'
<0:L>'S = [(S] Lxa_ q-
uaeuaalsTbaaua,p uoT!%Zado LS : snossap-po nalqe; zTOA = [is]wJ4 V = qus (I == >) Ts :{(<0:tL>fI)XaS I 'US} + qS = 'd uoq.elado aaTyIeDs no laToqoan aqsTB6az un aqSTbsa.ug uoT;dTaosa Flno3To sioqM aTouuwa9up DOAP ueuWaSsi.6aaua,I inod aO,0SA zasFTTTn :saTqwaSuaST; Toads alir quaAnad au sVA 4a p9 anb:%a uoT raGdo atwuw eT;uat; Togds :6q' 4a q' - nb:[aON {sUS 'S UA 'sEA} = sU {t9 'ZE '91 '8 ' tM 'q4 '46q 'q} = s no WsI# '+q{s 'su S'LSA I#S '+qS 'su S' SA PIS 'qrS 'su S', SA nalTqusssV axY u1s Ot O $1 O1 ':,Z
o-. , , __ o _ >.
A i II YDI:o,1s8 1.1) 1 o 10C oz eurro, quaeW;s Ua; L.SA Z VSTCB Enregistrement à tampon circulaire Format
2S 20 15 G0 5 0
REART 4Er rn S bj tl 1i,,t1 i, iHi,i,1,, ,,i,,,,7I REAR 0O 0I0 11010BST| SRb S| J REM/00 11010 JBJsT <15M $Rb I MM Syntaxe Assembleur VSTCB.st Rs, SRb, SRi VSTCB.st Rs, SRb, #IMM VSTCB.st Rs, SRb+, SRi VSTCB.st Rs, SRb+, #IMM o st = {b, b9t, h, w, 4, 8, 16, 32, 64}, Rs = {VRs, VRAs, SRs}. Noter que.b et.b9t spécifient la même opération et que.64 et
VRAd ne peut être spécifiés ensembles.
Utiliser VSTCBOFF pour le charge antémémoire
hors circuit.
Description
Enregistre un registre vectoriel ou scalaire du tampon circulaire délimité par l'indicateur COMMENCEMENT dans SRb+l et l'indicateur FIN
dans SRb+2.
L'adresse effective est ajustée si elle est plus grande que l'adresse FIN avant l'enregistrement ainsi que l'opération de mise à jour de l'adresse. De plus, les limites du tampon circulaire doivent être alignées sur les limites du demi-mot et du mot pour les
charges scalaires.h et.w, respectivement.
Opération EA = SRb + {SR, I| sex(IMM<7:0>)}; COMMENCEMENT = SRb+l; FIN = SRb+2; grandeurcb = FIN - COMMENCEMENT si (EA>FIN)EA = COMMENCEMENT + (EA + FIN); si (A == 1) SRb = EA; MEM[EA] = voir tableau ci-dessous:
*.TNtN3NNOD - NIA > NI.
- Va anb TsuTe.NJ DNÂN0 O3<V 'JZTP-.?-4saD LNa4.ON:T,:ODO - NI. > Va >.N NNIOO : puaqe A,s uo aunuoo auuoTqDuoj UOTqonzqsuT aao nb., nod aueATns uoTqTpuoo el zafnsse qToP nauumeaboid ' squeuIel,,p anbsem al:ed ea;ajg;e sed qsa,u uoTronzrsuT 9-aD uoTqeuRIeZozd ap aON GuúTIe uou sGODe 'DGasJODUT auuop assGpV uoTzdaoxg 1ú 0 = T '<T6:L+T6> s'm = U O - T = [F+Zú++.: qU=;<aPU:qo-T+aU+V.G TNIS<T+Z+ t+V)] TL.i X3 le O = T <T6: L+T6>s %A = [TF+V: qoanapu e6-T+VSZ (NIZ<T+ Vi)].rAS 9 ' i O = T <T6: L+T6>sdA = [-F+s:qo[nepuulB-T+V. (NI.<T+ V3)]gLS 91'
L O 0 = T
<T6:L+F6>sUA = [F+vs:qoinGpuQab-T+V.c (NIA<T+V.)] LkS. 8' L.O=T
<T6: L+T6>A = (NI<T+) 8
ú. O=T
<T6: L+T6>sUA = [i+Vg:qoanGPUel6-T+V& (NI.<T+VS)].T 8' <o: l c>Ss = [Va; ] aoM M' <O: i>SI>s = [V.a]qIvH q' <O:L> US = [Vf].aL7Xa q qu1aUalSTBGluG,p uoTqvado AS OIZ Si ? O = T'<T6:L+T6>L+'UA = [T+9I+]i.T ala_
Sl e O = T'<T6:L+T6>sA. = [T+Wi]:'LT a 91-
L g O = T'<T6:L+T6>L+ UA = [T+g+Vi"] IL..E L e O = TI'<T6:L+T6>sdA = [T+ V.i"]' LS 8
E O 0 = -F '<TF6:L+T6>'+5.IA = [±,+'V] M.2T..
ú 0 = T '<T6: L+T6>s'IA = [T+V:3]. T. -
<0: I ú>LE+S = [ +V] OM
<0: >sHS = [(v]OM.-
<O:ST>5+ US = [Z+V3].ivH <0:Sl>eS = [VN]1VH q' <O: L>'+eûS = [I+Yi"l] I[i.a <0 L>g,&S = [,V.,] [T.i q' :uauwaqSTbeua,P uoTIata0o LS snossap-To neeaqq; aToA = [vY]wN2 !va = qs (T == V) Ts !{ (<o:L>wI)xas II 's} + 'us = va UOT ael.do * seaTieDs sal+sTbai xnap no equzajji no a fueanoD a9buez eI ap
JI:zled. siaeTo;DaA sa:WsTba: xnap a:zsT5azu.
uoTIdTiosaa À fTnD:TO SOq aGITOuGuwaue queuazsTb6aaua:nod aaOQLSA aSTTTql * aCquiasua sgT;TDads ai$9:uaAnad au SyWA wa 9- anb:a uoTpzado aulaui el.uaTFgToads 6q':a q' anb aoN ( {sUS 'SVUA 'SdA} = s {(9 'Zú '91 '8 ' M -'T '6q 'q} = 3s no NwI# '+cES 's' ' SA THS '+quS 'su qS'*,LSA NI# 'qus 'sU *s'GCSA T'S 'qHs 'su Is'GLSA :nalquassV axluAS tI-isÉ s{ J>ojlis'Ja X I çziolo 11 lll r 0 cg oz [, Ol raJ qaDiis 1o0 01 0 0 0-r etulaoa aiqnoa:uameasT].u ui Q&SA IIZ ST Opération d'enregistrement 32 BYTE[EA+i] = VR,<9i+7:9i>,i = O à 31 BYTE[EA+32+i] = VR.+1<9i+7:9i>,i = 0 à 31 64 BYTE[EA+i] = VR0s<9i+7:9i>,i = O à 31 BYTE[EA+32+i] = VRls<9i+7:9i>,i = O à 31 BYTE[EA+64+i] = VROs+1<9i+7:9i>, i = O à 31 BYTE[EA+96+i] = VR1l.1<9i+7:9i>,i = O à 31 Exception
Adresse donnée incorrecte, accès non aligné.
Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VSTQ Enregistrement Ouad Format 3_ 2 20 15 o o REAR 0 oj lIK 01 Di BISrICH |W W | bRb 2 I4 20 f, ô0 REAo B ST WC_?.I 1 I IS TRlI Syntaxe Assembleur VSTQ.st Rs, SRb, SRi VSTQ.st Rs, SRb, #IMM VSTQ. st Rs, SRb+,SRi VSTQ.st Rs, SRb+, #IMM o st = {b, b9t, h, w, 4, 8, 16, 32, 64}, Rs = {VRs, VRAs, SRs}. Noter que.b et.b9t spécifient la même opération et que.64 et
VRAs ne peuvent être spécifiés ensemble.
Utiliser VSTQOFF pour enregistrement
antémémoire hors circuit.
Description
Enregistre quatre registres vectoriels à partir de la rangée courante ou alternée ou
quatre registres scalaires.
Opération EA = SRb + {SRl I| sex(IMM<7:0>)}; si (A == 1) SRb = EA; MEM[EA] = voir tableau ci-dessous: ST Opération d'enregistrement b BYTE[EA] = SR3<7:O> BYTE[EA+1] = SRs+1<7:0> BYTE[EA+ 2] = SRs+2<7:O> BYTE[EA+3] = SR t<7:0> h HALF[EA] = SRs<15:0> HALF[EA+ 2] = SRs+l<15:0> HALF[EA+4] = SRs+2<15:O>
HALF[EA+6] = SR,+3<15: 0>
ST Opération d'enregistrement 4 BYTE[EA+i] = VRs<9i+ 7:9i>,i = 0 à 3 BYTE[EA+4+i] = VRs+1<9i+7:9i>,i = 0 à 3 BYTE[EA+8+i] = VRs+2<9i+7:9i>,i = 0 à 3 BYTE[EA+12+i] = VRt3<9i+7:9i>,i = 0 à 3 8 BYTE[EA+i] = VRs<9i+7:9i>,i = 0 à 7 BYTE[EA+8+i] = VRs+1<9i+7:9i>,i = 0 à 7 BYTE[EA+16+i] = VRs+2<9i+7:9i>,i = 0 à 7 BYTE[EA+24+i] = VR. <9i+ 7:9i>,i = 0 à 7 16 BYTE[EA+i] = VRs<9i+7:9i>,i = 0 à 15 BYTE[EA+16+i] = VRs+1<9i+7:9i>,i = 0 à 15 BYTE[EA+32+i] = VR,+2<9i+7:9i>,i = 0 à 15 BYTE[EA+48+i] = VR,+1<9i+7:9i>,i = O à 15 32 BYTE[EA+i] = VRs<9i+7:9i>,i = 0 à 31 BYTE[EA+32+i] = VRs+1<9i+7:9i>,i = 0 à 31 BYTE[EA+64+i] = VRs+ 2<9i+7:9i>,i = 0 à 31 BYTE[EA+96+i] = VR,.+<9i+7:9i>,i = O à 31 64 BYTE[EA+i] = VR0s<9i+7:9i>,i = 0 à 31 BYTE[EA+32+i] = VR1s<9i+7:9i>,i = 0 à 31 BYTE[EA+64+i] = VRos+l<9i+7:9i>,i = 0 à 31 BYTE[EA+96+i] = VRls+ l<9i+7:9i>,i = 0 à 31 BYTE[EA+128+i] = VROs+2<9i+7:9i>,i = 0 à 31 BYTE[EA+160+i] = VRls+2<9i+7:9i>,i = 0 à 31 BYTE[EA+192+i] = VROs+3<9i+ 7:9i>,i = 0 à 31 BYTE[EA+224+i] = VR,.+.<9i+7:9i>,i = 0 à 31 Exception
Adresse donnée incorrecte, accès non aligné.
Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VSTR Enregistrement inverse Format
30. - 20, 5 I!0, 5 0
REAR 000 B SRb SRI
25 20 15 10 5 0
1 CC1 1 ïR11 1 I,
REAI oi 1Q 1 11 1l IIR IL4.SI Syntaxe Assembleur VSTR.st Rs, SRb, SRi VSTR.st Rs, SRb, #IMM VSTR.st Rs, SRb+, SRi VSTR.st Rs, SRb+, #IMM
o st = {4, 8, 16, 32, 64}, Rs = {VRs, VRAs}.
Noter que.64 et VRAs ne peuvent être spécifiés ensemble. Utiliser VSTROFF pour
enregistrement antémémoire hors circuit.
Description
Enregistre un registre vectoriel dans l'ordre d'éléments inverses. Cette instruction ne supporte pas un registre de source de données scalaires. Opération EA = SRb + {SRi Il sex(IMM<7:O>)}; si (A == 1) SRb = EA; MEM[EA] = voir tableau ci-dessous: ST Opération d'enreqistrement 4 BYTE[EA+i] = VR,[31-i]<7:0>,i = 0 à 3 8 BYTE[EA+i] = VR_[31-i]<7:0>,i = 0 à 7 16 BYTE[EA+i] = VR,[31-i]<7:0>,i = 0 à 15 32 BYTE[EA+i] = VR,[31-i]<7:0>,i = 0 à 31 64 BYTE[EA+32+i] = VR05[31-i]<7:0> ,i = 0 à 31 BYTE[EA+i] = VR 2[31-i]<7:0>,i = 0 à 31 Exception
Adresse donnée incorrecte, accès non aligné.
Note de programmation Cette instruction n'est pas affectée par le
masque d'éléments.
VSTWS Enregistrement avec chevauchement Format
01
RZAR 0 110 oollllOIBI:HTIIIs X' C lR Ri1S 'J 20 5 Rs Rb R 0 REAS |otl ''1 00 s S Syntaxe Assembleur VSTWS. st Rs, SRb, SRi VSTWS.st Rs, SRb, #IMM VSTWS.st Rs, SRb+, SRi VSTWS.st Rs, SRb+, #IMM o st = {8, 16, 32}, Rs = {VRs, VRAs}. Noter que le mode.64 n'est pas supporté - utiliser VST à la place. Utiliser VSTWSOFF pour
enregistrement antémémoire hors circuit.
Description
En partant à l'adresse effective, 32 octets sont enregistrés à partir du registre vectoriel VRs dans la mémoire en utilisant le registre scalaire SRb+l en tant que Registre de
Contrôle de Chevauchement.
ST spécifie grandeur bloc, le nombre d'octets consécutifs enregistrés dans chaque bloc. SRb+ spécifie chevauchement, le nombre d'octets
séparant les débuts de deux blocs consécutifs.
Le chevauchement doit être égal à ou plus grand que la grandeur d'un bloc. EA doit être aligné par la grandeur de donnée. Le chevauchement et la grandeur du bloc doivent
être des multiples de la grandeur de donnée.
Opération EA = SRb + {SRi il sex(IMM<7:0>)"}; si (A == 1) SRb = EA; Grandeur_bloc = {4 il 8 Il 16 Il 32}; Chevauchement = SRb+l<31:0>; pour (i = 0;i<VECSIZE/Grandeur_bloc;i++) pour (j = 0;j<Grandeurbloc;j++) BYTE[EA+i*Chevauchement+j] = VR s[i*Grandeur_bloc+j]<7:0>; Exception
Adresse donnée incorrecte, accès non aligné.
VSUB Soustraire Format 25Io 1S o hI,,,'9',,I,, 2 1
RRRM9 111110001 00 I I T,1,,I M 1 R
Syntaxe Assembleur VSUB.dt VRd, VRa, VRb VSUB.dt VRd, VRa, SRb VSUB.dt VRd, VRa, #IMM VSUB.dt SRd, SRa, SRb VSUB.dt SRd, SRa, #IMM
o dt = {b, b9, h. w, f}.
Modes supportés
D:S:M V<-V @ V V<-V @ S V<-V @ I S<-S @ S S<-S @ I
DS int8 b? int9 (b9) intl6 (h) int32 (w) flottant (f)
Description
Le contenu du registre vectoriel/scalaire Rb est soustrait du contenu du registre vectoriel/scalaire Ra et le résultat est enregistré dans le registre vectoriel/scalaire Rd. Opération pour (i=0; i<NumElem && EMASK[i];i++){ Bop[i] = {Rb[i] Il SRb Il sex(IMM<8:0>)}; Rd[i] = Ra[i]Bop[i]; } Exception Débordement, opérande point flottant incorrect. VSUBS Soustraire et positionner Format
20 15 îO
RRRM9 | 11 010100 DIS|DSH l9 SRd SR| SRLnM5 Syntaxe Assembleur VSUBS. dt SRd, SRa, SRb VSUBS.dt SRd, SRa, #IMM
o dt = {b, b9, h, w, f}.
Modes supportés D:s:MI -S @ S S<-S I DS int8 (b) int9 (b9) intl6 (h) int32 (w) flottant (
Description
SRb est soustrait de SRa; le résultat est enregistré dans SRd et les bits VFLAG dans
VCSR sont positionnés.
Opération Bop[i]{SRb Il sex(IMM<8:0>)}; SRd = SRa - Bop; VCSR<lt,eq,gt> = état(SRa - Bop); Exception Débordement, opérande point flottant incorrect. VUNSHFL Débrassage Format
30.25 20 1 I0 5
RRR 1111o|loli||IsI | I IIII|1Q 51 II I RRRR O 00001 SDS VRc VRd Rb Syntaxe assembleur VUNSHFL.dt VRc, VRd, VRa, VRb VUNSHFL. dt VRc, VRd, VRa, SRb o dt = {b, b9, h, w, f}. Noter que.w et.f
spécifient la même opération.
Modes suportés S VRb SRb DS int8 (b) int9 (b9) intl6 (h) int32 (w I
Description
Le contenu du registre vectoriel VRa est débrassé avec Rb dans les registres vectoriels VRc:VRd comme il est montré ci-dessous: VRa Rb V,...,-, J,:..-...vl tl Opération Exception Aucune. Note de programmation Cette instruction n'utilise pas le masque d'éléments. VUNSHFL14 Débrassage valeur haute Format - 1S 20 5 o RRRR II|III| 10001 jSjDS>| VRd i VR Rb t Syntaxe Assembleur VUNSHFLH.dt VRd, VRa, VRb VUNSHFLH.dt VRd, VRa, SRb o dt = {b, b9, h, w, f}. Noter que.w et.f
spécifient la même opération.
Modes su ortés S s VRb SRb DS int8 () 9 (b9) lintl6 (h) int32 (w)
Description
Le contenu du registre vectoriel VRa est débrassé avec Rb; la portion supérieure du résultat est retournée au registre vectoriel VRd comme il est montré ci-dessous: VRa Rb
I I I '- I
41 I --'II I!
Opération Exception Aucune. Note de programmation Cette instruction n'utilise pas le masque d'éléments. VUNSHFLL D brassage valeur basse Format et 2 15 05 RRRR 1 10011 DS | VR | VRa 1 Rb Syntaxe Assembleur VUNSHFLL.dt VRd, VRa, VRb VUNSHFLL.dt VRd, VRa, SRb o dt = {b, b9, h, w, f}. Noter que.w et.f
spécifient la même opération.
Modes supportés I S I VRb I SRb I DS int8 (b) int9 (b9) intl6 (h) int32 (w) I
Description
Le contenu du registre vectoriel VRa est débrassé avec Rb; la portion inférieure du résultat est retournée au registre vectoriel VRd comme il est montré ci-dessous: Rb VRa Rb
*l À,S,., _ -
- --. -_ c, , *--. I, I Opération Exception Aucune. Note de programmation Cette instruction n'utilise pas le masque d'éléments. VWBACK Réécriture Format Es t015 10 REAR o| UO Of |011 | ILNI0N |R REAI0l 1 SRb Syntaxe Assembleur VWBACK.ln SRb, SRi VWBACK.ln SRb, #IMM VWBACK.ln SRb+, SRi VWBACK.ln SRb+, #IMM o in = {1, 2, 4, 8}
Description
La ligne de l'antémémoire dont l'indice est spécifié par EA (en opposition à celle dont l'étiquette correspond à EA) dans l'antémémoire de données vectorielles est mise à jour à la mémoire si elle contient une donnée modifiée. Si plus d'une ligne d'antémémoire est spécifiée, les lignes séquentielles suivantes d'antémémoire sont mises à jour à la mémoire si elles contiennent des données modifiées. Le nombre de lignes dans une mémoire est spécifié comme suit: LN<1:O≥00: 1 ligne antémémoire 64 octets
est écrite.
LN<l:O≥O1: 2 lignes antémémoire 64 octets
sont écrites.
LN<l:O≥10: 4 lignes antémémoire 64 octets
sont écrites.
LN<l:O≥11: 8 lignes antémémoire 64 octets
sont écrites.
Si l'adresse effective n'est pas sur une limite de 64 octets, elle est d'abord tronquée
pour être alignée à une limite de 64 octets.
Opération Exception
Exception adresse donnée incorrecte.
Note de programmation EA<31:0> désigne une adresse d'octet dans le
mémoire locale.
VWBACKSP Réécriture de la zone de travail Format
25 1 5!
l 1 11 1 10 S 01 Syntaxe Assembleur VWBACKSP. ln SRp, SRb, SRi VWBACKSP.ln SRp, SRb, #IMM VWBACKSP.ln SRp, SRb+, SRi VWBACKSP.ln SRp, SRb+, #IMM o in = {1, 2, 4, 8}. Noter que VWBACK et
VWBACKSP utilisent le même code d'opération.
Description
Transfert des blocs multiples de 64 octets de la zone de travail à la mémoire. L'adresse effective donne l'adresse de départ dans la mémoire et SRp donne l'adresse de départ dans la zone de travail. Le nombre de blocs de 64 octets est spécifié comme suit: LN<l:O≥00: 1 ligne antémémoire 64 octets
est écrite.
LN<l:O≥Ol: 2 lignes antémémoire 64 octets
sont écrites.
LN<l:O≥10: 4 lignes antémémoire 64 octets
sont écrites.
LN<l:O≥ll: 8 lignes antémémoire 64 octets
sont écrites-.
Si l'adresse effective n'est pas sur une limite de 64 octets, elle est d'abord tronquée
pour être alignée à une limite de 64 octets.
Si l'adresse d'indicateur de la zone de travail dans SRp n'est pas sur une limite de 64 octets, elle est également tronquée pour
être alignée sur la limite de 64 octets.
L'adresse de l'indicateur de la zone de travail en alignement est incrémentée par le
nombre d'octets transférés.
Opération EA = SRb + {SRi I| sex(IMM<7:0>)"}; si (A == 1) SRb = EA; Num_bytes = {64 || 128 Il 256 Il 512} Memadrs = EA<31:6>:6b'000000; SRp = SRp<31:6>:6b'000000; pour (i=O;i<Numbytes;i++) SPAD[SRp++] = MEM[MEMadrs+i]; Exception
Exception adresse donnée incorrecte.
*aunonv UOTIdaQoxs { T quatugwg,I suep sqxq sal snoq={:nod s (<> [.x] d<> [ x]) _<:> [] p {" (<0:g>pI)xas qcs I1 [T]c}=[T]dog }(++T: [T]XSVWZ qe uWaeTInN>TO0=T) anod uoTlelado -PU aeTeOeDs/laTZooDaA aalsTb6a aT suep 9zsTba2ua qsa lvqTnsqz al la cd a-FeT[Dos TaI.ToOea aasxfaz np nuaquoo ne qaoddea aud no-NON anbfBoT uoT.eaado aun qTqns eU a Files/iaF.oloa axlsT.a6 np nuaquoo arj uoTdTz.Dsaa I (m) U. I uT(q) 9IUF I (6q) 6UTF (q) 8UT I sa I
I J S->S S 0 S->S I IA->A S A->A A 0 A->A N S: G
saqocrctns sapow { M '14 '6q 'q} =;p n.o NI# 'eIS 'P"IS qP'ONXA qcs 'euS 'PuIS IP'ONXA
WNII 'PIA 'PUA 1P'%ONXA
qcdS 'eA 'PUA IP'-ONXA q'dA '"PA 'PIA 'P4P'ONXA :znaqTcuassV exeuS t(;sIDx lO NON) 2ONX IONXA VXOR XOR (OU excl usif) Format RRRM9 I I 0II 1 1H SDHR I RRd Syntaxe Assembleur VXOR.dt VRd, VRa, VRb VXOR.dt VRd, VRa, SRb VXOR.dt VRd, VRa, #IMM VXOR.dt SRd, SRa, SRb VXOR.dt SRd, SRa, #IMM
o dt = {b, b9, h, w}.
Modes su portés D:S:M V<-V @ V I V<-V @ S I V<-V @ I I S<-S @ S I S<-S @ I DS int8 (b) int9 (b9) intl6 (h) int32 (w)
Description
Le contenu du registre vectoriel/scalaire Ra subit une opération logique OU exclusif avec le contenu du registre vectoriel/scalaire Rb et le résultat est enregistré dans le registre
vectoriel/scalaire Rd.
Opération pour (i=O;i<NumElem && EMASK[i];i++)({ Bop[i]={VRb[i] Il SRb Il sex(IMM<8:0>)}; Rd[i]<k≥Ra[i]<k>^Bop[i]<k>, pour k=tous les bits dans l'élément i; } Exception Aucune. VXORALL XOR (OU exclusif) Tous les Eléments Format
3025 20 15 10 5 0
_ _ _ I1 71 1Tllll| lll* l1 RRRR O___ DS SRd VRbI Syntaxe Assembleur VXORALL.dt SRd, VRb o dt = {b, b9, h, w}. Noter que.b et.b9 spécifient la même opération Modes supportés DS I int8 (h) int9 b9 int16 (h) int32 (w)
Description
Le bit de moindre poids de chaque élément dans VRb subit une opération OU exclusif; le résultat de 1 bit est retourné en tant que bit de moindre poids de SRd. Cette instruction
n'est pas affectée par le masque d'éléments.
Opération Exception Aucune. L'invention n'est pas limitée aux exemples de réalisation représentés et décrits en détail car diverses modifications peuvent y être apportées sans sortir de son cadre.
Claims (6)
1. Processeur vectoriel, caractérisé en ce qu'il comprend: un fichier de registres (610) contenant des registres vectoriels; un décodeur (220) qui, pendant le décodage d'une instruction, identifie un registre vectoriel sélectionné dans le fichier de registres et identifie une grandeur pour les éléments de données à traiter pendant l'exécution de l'instruction; et un ensemble de circuits de traitement couplé au registre vectoriel, o l'ensemble de circuits de traitement, quand il exécute l'instruction, accomplit un certain nombre d'opérations en parallèle sur les données du registre vectoriel sélectionnées, le nombre d'opérations en parallèle
étant contrôlé par la grandeur des éléments de données.
2. Processeur vectoriel selon la revendication 1, caractérisé en ce que chaque registre vectoriel a une
grandeur fixe.
3. Processeur vectoriel selon la revendication 1, caractérisé en ce que les grandeurs possibles que le décodeur peut identifier sont 8 bits, 9 bits, 16 bits
et 32 bits.
4. Processeur vectoriel selon la revendication 1, caractérisé en ce que le décodeur, pendant le décodage d'une instruction, identifie un type pour des éléments de données
à traiter pendant l'exécution de l'instruction.
5. Processeur vectoriel selon la revendication 4, caractérisé en ce que les types possibles que le décodeur peut identifier comprennent des types de données en entier
et à point flottant.
6. Procédé de fonctionnement d'un processeur vectoriel caractérisé en ce qu'il consiste à: enregistrer la donnée dans un registre vectoriel; former une instruction qui comprend un numéro de registre identifiant le registre vectoriel et une zone de grandeur identifiant une grandeur pour les éléments de données vers le registre vectoriel; et exécuter l'instruction en accomplissant un certain nombre d'opérations en parallèle, o chacune des opérations correspond à un élément de donnée dans le registre vectoriel et la zone de grandeur contrôle le nombre d'opérations
accomplies en parallèle.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/699,597 US6058465A (en) | 1996-08-19 | 1996-08-19 | Single-instruction-multiple-data processing in a multimedia signal processor |
Publications (2)
Publication Number | Publication Date |
---|---|
FR2752630A1 true FR2752630A1 (fr) | 1998-02-27 |
FR2752630B1 FR2752630B1 (fr) | 2004-11-05 |
Family
ID=24810031
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
FR9710441A Expired - Lifetime FR2752630B1 (fr) | 1996-08-19 | 1997-08-18 | Traitement de donnees multiples a une seule instruction dans un processeur de signaux multisupport |
Country Status (7)
Country | Link |
---|---|
US (2) | US6058465A (fr) |
JP (1) | JPH10134036A (fr) |
KR (1) | KR100267091B1 (fr) |
CN (1) | CN1112635C (fr) |
DE (1) | DE19735350B4 (fr) |
FR (1) | FR2752630B1 (fr) |
TW (2) | TW358313B (fr) |
Families Citing this family (230)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5742840A (en) * | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US5953241A (en) * | 1995-08-16 | 1999-09-14 | Microunity Engeering Systems, Inc. | Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction |
US7301541B2 (en) * | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
US6643765B1 (en) * | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US6295599B1 (en) * | 1995-08-16 | 2001-09-25 | Microunity Systems Engineering | System and method for providing a wide operand architecture |
US6786420B1 (en) | 1997-07-15 | 2004-09-07 | Silverbrook Research Pty. Ltd. | Data distribution mechanism in the form of ink dots on cards |
US6618117B2 (en) | 1997-07-12 | 2003-09-09 | Silverbrook Research Pty Ltd | Image sensing apparatus including a microcontroller |
US6879341B1 (en) | 1997-07-15 | 2005-04-12 | Silverbrook Research Pty Ltd | Digital camera system containing a VLIW vector processor |
US7110024B1 (en) | 1997-07-15 | 2006-09-19 | Silverbrook Research Pty Ltd | Digital camera system having motion deblurring means |
US6690419B1 (en) | 1997-07-15 | 2004-02-10 | Silverbrook Research Pty Ltd | Utilising eye detection methods for image processing in a digital image camera |
US6624848B1 (en) | 1997-07-15 | 2003-09-23 | Silverbrook Research Pty Ltd | Cascading image modification using multiple digital cameras incorporating image processing |
US7551201B2 (en) | 1997-07-15 | 2009-06-23 | Silverbrook Research Pty Ltd | Image capture and processing device for a print on demand digital camera system |
US8489861B2 (en) * | 1997-12-23 | 2013-07-16 | Round Rock Research, Llc | Split embedded DRAM processor |
US6760833B1 (en) * | 1997-08-01 | 2004-07-06 | Micron Technology, Inc. | Split embedded DRAM processor |
US6226738B1 (en) * | 1997-08-01 | 2001-05-01 | Micron Technology, Inc. | Split embedded DRAM processor |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US7197625B1 (en) | 1997-10-09 | 2007-03-27 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US5933650A (en) * | 1997-10-09 | 1999-08-03 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
FR2770659A1 (fr) * | 1997-10-31 | 1999-05-07 | Sgs Thomson Microelectronics | Processeur de traitement perfectionne |
US6161166A (en) * | 1997-11-10 | 2000-12-12 | International Business Machines Corporation | Instruction cache for multithreaded processor |
JP4158864B2 (ja) | 1998-03-18 | 2008-10-01 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | マトリックスのコサイン変換を計算するためのデータ処理装置およびその方法 |
US6041404A (en) * | 1998-03-31 | 2000-03-21 | Intel Corporation | Dual function system and method for shuffling packed data elements |
US6282554B1 (en) | 1998-04-30 | 2001-08-28 | Intel Corporation | Method and apparatus for floating point operations and format conversion operations |
US6247116B1 (en) | 1998-04-30 | 2001-06-12 | Intel Corporation | Conversion from packed floating point data to packed 16-bit integer data in different architectural registers |
US6263426B1 (en) | 1998-04-30 | 2001-07-17 | Intel Corporation | Conversion from packed floating point data to packed 8-bit integer data in different architectural registers |
US6292815B1 (en) * | 1998-04-30 | 2001-09-18 | Intel Corporation | Data conversion between floating point packed format and integer scalar format |
US6266769B1 (en) | 1998-04-30 | 2001-07-24 | Intel Corporation | Conversion between packed floating point data and packed 32-bit integer data in different architectural registers |
AUPP702098A0 (en) | 1998-11-09 | 1998-12-03 | Silverbrook Research Pty Ltd | Image creation method and apparatus (ART73) |
US7100026B2 (en) | 2001-05-30 | 2006-08-29 | The Massachusetts Institute Of Technology | System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values |
US6269435B1 (en) * | 1998-09-14 | 2001-07-31 | The Board Of Trustees Of The Leland Stanford Junior University | System and method for implementing conditional vector operations in which an input vector containing multiple operands to be used in conditional operations is divided into two or more output vectors based on a condition vector |
US6487606B1 (en) * | 1998-11-18 | 2002-11-26 | Nortel Networks Limited | System and method for delivering messages through a totem communications system |
US7020879B1 (en) * | 1998-12-16 | 2006-03-28 | Mips Technologies, Inc. | Interrupt and exception handling for multi-streaming digital processors |
US7529907B2 (en) * | 1998-12-16 | 2009-05-05 | Mips Technologies, Inc. | Method and apparatus for improved computer load and store operations |
US6496902B1 (en) * | 1998-12-31 | 2002-12-17 | Cray Inc. | Vector and scalar data cache for a vector multiprocessor |
US6209078B1 (en) * | 1999-03-25 | 2001-03-27 | Lsi Logic Corporation | Accelerated multimedia processor |
US20080007562A1 (en) * | 1999-04-09 | 2008-01-10 | Dave Stuttard | Parallel data processing apparatus |
US7966475B2 (en) | 1999-04-09 | 2011-06-21 | Rambus Inc. | Parallel data processing apparatus |
US20080016318A1 (en) * | 1999-04-09 | 2008-01-17 | Dave Stuttard | Parallel data processing apparatus |
US20080184017A1 (en) * | 1999-04-09 | 2008-07-31 | Dave Stuttard | Parallel data processing apparatus |
US7802079B2 (en) * | 1999-04-09 | 2010-09-21 | Clearspeed Technology Limited | Parallel data processing apparatus |
US20080008393A1 (en) * | 1999-04-09 | 2008-01-10 | Dave Stuttard | Parallel data processing apparatus |
US7506136B2 (en) * | 1999-04-09 | 2009-03-17 | Clearspeed Technology Plc | Parallel data processing apparatus |
EP1181648A1 (fr) * | 1999-04-09 | 2002-02-27 | Clearspeed Technology Limited | Appareil de traitement de donnees parallele |
US8174530B2 (en) | 1999-04-09 | 2012-05-08 | Rambus Inc. | Parallel date processing apparatus |
US8169440B2 (en) * | 1999-04-09 | 2012-05-01 | Rambus Inc. | Parallel data processing apparatus |
US7526630B2 (en) * | 1999-04-09 | 2009-04-28 | Clearspeed Technology, Plc | Parallel data processing apparatus |
US8171263B2 (en) | 1999-04-09 | 2012-05-01 | Rambus Inc. | Data processing apparatus comprising an array controller for separating an instruction stream processing instructions and data transfer instructions |
US20070294510A1 (en) * | 1999-04-09 | 2007-12-20 | Dave Stuttard | Parallel data processing apparatus |
US7627736B2 (en) * | 1999-04-09 | 2009-12-01 | Clearspeed Technology Plc | Thread manager to control an array of processing elements |
US8762691B2 (en) | 1999-04-09 | 2014-06-24 | Rambus Inc. | Memory access consolidation for SIMD processing elements using transaction identifiers |
AUPQ056099A0 (en) | 1999-05-25 | 1999-06-17 | Silverbrook Research Pty Ltd | A method and apparatus (pprint01) |
US8230411B1 (en) | 1999-06-10 | 2012-07-24 | Martin Vorbach | Method for interleaving a program over a plurality of cells |
US6334180B1 (en) * | 1999-06-27 | 2001-12-25 | Sun Microsystems, Inc. | Processor coupled by visible register set to modular coprocessor including integrated multimedia unit |
US6983350B1 (en) | 1999-08-31 | 2006-01-03 | Intel Corporation | SDRAM controller for parallel processor architecture |
WO2001016702A1 (fr) | 1999-09-01 | 2001-03-08 | Intel Corporation | Ensemble de registres utilise dans une architecture de processeurs multifiliere paralleles |
EP1236097A4 (fr) * | 1999-09-01 | 2006-08-02 | Intel Corp | Instruction de branchement pour processeur |
US6574725B1 (en) * | 1999-11-01 | 2003-06-03 | Advanced Micro Devices, Inc. | Method and mechanism for speculatively executing threads of instructions |
US6532509B1 (en) | 1999-12-22 | 2003-03-11 | Intel Corporation | Arbitrating command requests in a parallel multi-threaded processing system |
US6694380B1 (en) | 1999-12-27 | 2004-02-17 | Intel Corporation | Mapping requests from a processing unit that uses memory-mapped input-output space |
US6307789B1 (en) | 1999-12-28 | 2001-10-23 | Intel Corporation | Scratchpad memory |
US6631430B1 (en) | 1999-12-28 | 2003-10-07 | Intel Corporation | Optimizations to receive packet status from fifo bus |
US6591361B1 (en) | 1999-12-28 | 2003-07-08 | International Business Machines Corporation | Method and apparatus for converting data into different ordinal types |
US6661794B1 (en) | 1999-12-29 | 2003-12-09 | Intel Corporation | Method and apparatus for gigabit packet assignment for multithreaded packet processing |
US6976095B1 (en) | 1999-12-30 | 2005-12-13 | Intel Corporation | Port blocking technique for maintaining receive packet ordering for a multiple ethernet port switch |
US7143401B2 (en) * | 2000-02-17 | 2006-11-28 | Elbrus International | Single-chip multiprocessor with cycle-precise program scheduling of parallel execution |
US6857061B1 (en) | 2000-04-07 | 2005-02-15 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
US6701424B1 (en) | 2000-04-07 | 2004-03-02 | Nintendo Co., Ltd. | Method and apparatus for efficient loading and storing of vectors |
US7343602B2 (en) * | 2000-04-19 | 2008-03-11 | Hewlett-Packard Development Company, L.P. | Software controlled pre-execution in a multithreaded processor |
US6615281B1 (en) * | 2000-05-05 | 2003-09-02 | International Business Machines Corporation | Multi-node synchronization using global timing source and interrupts following anticipatory wait state |
US7681018B2 (en) | 2000-08-31 | 2010-03-16 | Intel Corporation | Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set |
US6728866B1 (en) * | 2000-08-31 | 2004-04-27 | International Business Machines Corporation | Partitioned issue queue and allocation strategy |
US8058899B2 (en) | 2000-10-06 | 2011-11-15 | Martin Vorbach | Logic cell array and bus system |
WO2002035856A2 (fr) * | 2000-10-20 | 2002-05-02 | Bops, Inc. | Procedes et appareil permettant des mises en oeuvre efficaces de vocodeurs |
WO2002067137A1 (fr) * | 2001-02-01 | 2002-08-29 | Honeywell International Inc. | Traitement de signal vectoriel et scalaire |
US20020103847A1 (en) * | 2001-02-01 | 2002-08-01 | Hanan Potash | Efficient mechanism for inter-thread communication within a multi-threaded computer system |
US7711763B2 (en) * | 2001-02-21 | 2010-05-04 | Mips Technologies, Inc. | Microprocessor instructions for performing polynomial arithmetic operations |
US7599981B2 (en) * | 2001-02-21 | 2009-10-06 | Mips Technologies, Inc. | Binary polynomial multiplier |
US7181484B2 (en) * | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
US9250908B2 (en) | 2001-03-05 | 2016-02-02 | Pact Xpp Technologies Ag | Multi-processor bus and cache interconnection system |
US9141390B2 (en) | 2001-03-05 | 2015-09-22 | Pact Xpp Technologies Ag | Method of processing data with an array of data processors according to application ID |
US9411532B2 (en) | 2001-09-07 | 2016-08-09 | Pact Xpp Technologies Ag | Methods and systems for transferring data between a processing device and external devices |
US9552047B2 (en) | 2001-03-05 | 2017-01-24 | Pact Xpp Technologies Ag | Multiprocessor having runtime adjustable clock and clock dependent power supply |
US9436631B2 (en) | 2001-03-05 | 2016-09-06 | Pact Xpp Technologies Ag | Chip including memory element storing higher level memory data on a page by page basis |
US7210062B2 (en) * | 2001-03-14 | 2007-04-24 | Mercury Computer Systems, Inc. | Wireless communications systems and methods for nonvolatile storage of operating parameters for multiple processor based multiple user detection |
JP4529063B2 (ja) * | 2001-03-30 | 2010-08-25 | ルネサスエレクトロニクス株式会社 | システムシミュレータ、シミュレーション方法及びシミュレーションプログラム |
US6832338B2 (en) * | 2001-04-12 | 2004-12-14 | International Business Machines Corporation | Apparatus, method and computer program product for stopping processors without using non-maskable interrupts |
US10031733B2 (en) | 2001-06-20 | 2018-07-24 | Scientia Sol Mentis Ag | Method for processing data |
US7246220B1 (en) * | 2001-07-27 | 2007-07-17 | Magnum Semiconductor, Inc. | Architecture for hardware-assisted context switching between register groups dedicated to time-critical or non-time critical tasks without saving state |
US7225281B2 (en) * | 2001-08-27 | 2007-05-29 | Intel Corporation | Multiprocessor infrastructure for providing flexible bandwidth allocation via multiple instantiations of separate data buses, control buses and support mechanisms |
US6868476B2 (en) | 2001-08-27 | 2005-03-15 | Intel Corporation | Software controlled content addressable memory in a general purpose execution datapath |
CN1241106C (zh) * | 2001-10-09 | 2006-02-08 | 佳能株式会社 | 打印装置及其控制方法 |
US7032215B2 (en) * | 2001-10-11 | 2006-04-18 | Intel Corporation | Method and system for type demotion of expressions and variables by bitwise constant propagation |
JP3496009B2 (ja) | 2001-10-22 | 2004-02-09 | キヤノン株式会社 | 記録装置及びその制御方法及びプログラム |
US7818356B2 (en) | 2001-10-29 | 2010-10-19 | Intel Corporation | Bitstream buffer manipulation with a SIMD merge instruction |
GB2382673B (en) * | 2001-10-31 | 2005-10-26 | Alphamosaic Ltd | A vector processing system |
US7158964B2 (en) * | 2001-12-12 | 2007-01-02 | Intel Corporation | Queue management |
US20030126520A1 (en) * | 2001-12-31 | 2003-07-03 | Globespanvirata | System and method for separating exception vectors in a multiprocessor data processing system |
US7895239B2 (en) | 2002-01-04 | 2011-02-22 | Intel Corporation | Queue arrays in network devices |
US7500240B2 (en) * | 2002-01-15 | 2009-03-03 | Intel Corporation | Apparatus and method for scheduling threads in multi-threading processors |
US6934951B2 (en) | 2002-01-17 | 2005-08-23 | Intel Corporation | Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section |
US7181594B2 (en) | 2002-01-25 | 2007-02-20 | Intel Corporation | Context pipelines |
US7610451B2 (en) * | 2002-01-25 | 2009-10-27 | Intel Corporation | Data transfer mechanism using unidirectional pull bus and push bus |
US20100274988A1 (en) * | 2002-02-04 | 2010-10-28 | Mimar Tibet | Flexible vector modes of operation for SIMD processor |
US7035331B2 (en) * | 2002-02-20 | 2006-04-25 | Intel Corporation | Method and apparatus for performing a pixel averaging instruction |
US20110161977A1 (en) * | 2002-03-21 | 2011-06-30 | Martin Vorbach | Method and device for data processing |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
US7937559B1 (en) | 2002-05-13 | 2011-05-03 | Tensilica, Inc. | System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes |
US7376812B1 (en) | 2002-05-13 | 2008-05-20 | Tensilica, Inc. | Vector co-processor for configurable and extensible processor architecture |
US7346881B2 (en) * | 2002-05-13 | 2008-03-18 | Tensilica, Inc. | Method and apparatus for adding advanced instructions in an extensible processor architecture |
US7793084B1 (en) | 2002-07-22 | 2010-09-07 | Mimar Tibet | Efficient handling of vector high-level language conditional constructs in a SIMD processor |
AU2003250575A1 (en) | 2002-08-07 | 2004-02-25 | Mmagix Technology Limited | Apparatus, method and system for a synchronicity independent, resource delegating, power and instruction optimizing processor |
US7337275B2 (en) * | 2002-08-13 | 2008-02-26 | Intel Corporation | Free list and ring data structure management |
US6961888B2 (en) * | 2002-08-20 | 2005-11-01 | Flarion Technologies, Inc. | Methods and apparatus for encoding LDPC codes |
US7394284B2 (en) | 2002-09-06 | 2008-07-01 | Pact Xpp Technologies Ag | Reconfigurable sequencer structure |
US6978399B2 (en) * | 2002-09-12 | 2005-12-20 | International Business Machines Corporation | Debug thread termination control points |
US20040128485A1 (en) * | 2002-12-27 | 2004-07-01 | Nelson Scott R. | Method for fusing instructions in a vector processor |
US6941438B2 (en) | 2003-01-10 | 2005-09-06 | Intel Corporation | Memory interleaving |
US7126991B1 (en) * | 2003-02-03 | 2006-10-24 | Tibet MIMAR | Method for programmable motion estimation in a SIMD processor |
US20040193837A1 (en) * | 2003-03-31 | 2004-09-30 | Patrick Devaney | CPU datapaths and local memory that executes either vector or superscalar instructions |
US7392399B2 (en) | 2003-05-05 | 2008-06-24 | Sun Microsystems, Inc. | Methods and systems for efficiently integrating a cryptographic co-processor |
EP1623307B1 (fr) * | 2003-05-09 | 2015-07-01 | QUALCOMM Incorporated | Unite de reduction de processeur permettant d'accumuler de multiples operandes avec ou sans saturation |
JP3855270B2 (ja) * | 2003-05-29 | 2006-12-06 | ソニー株式会社 | アンテナ実装方法 |
JP4699685B2 (ja) * | 2003-08-21 | 2011-06-15 | パナソニック株式会社 | 信号処理装置及びそれを用いた電子機器 |
US7496921B2 (en) * | 2003-08-29 | 2009-02-24 | Intel Corporation | Processing block with integrated light weight multi-threading support |
US7739479B2 (en) | 2003-10-02 | 2010-06-15 | Nvidia Corporation | Method for providing physics simulation data |
US20050086040A1 (en) * | 2003-10-02 | 2005-04-21 | Curtis Davis | System incorporating physics processing unit |
US7895411B2 (en) * | 2003-10-02 | 2011-02-22 | Nvidia Corporation | Physics processing unit |
US7793072B2 (en) * | 2003-10-31 | 2010-09-07 | International Business Machines Corporation | Vector execution unit to process a vector instruction by executing a first operation on a first set of operands and a second operation on a second set of operands |
US8200945B2 (en) * | 2003-11-07 | 2012-06-12 | International Business Machines Corporation | Vector unit in a processor enabled to replicate data on a first portion of a data bus to primary and secondary registers |
GB2409067B (en) * | 2003-12-09 | 2006-12-13 | Advanced Risc Mach Ltd | Endianess compensation within a SIMD data processing system |
GB2411976B (en) * | 2003-12-09 | 2006-07-19 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2411973B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | Constant generation in SMD processing |
GB2409059B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2409066B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2409061B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | Table lookup operation within a data processing system |
GB2409065B (en) * | 2003-12-09 | 2006-10-25 | Advanced Risc Mach Ltd | Multiplexing operations in SIMD processing |
GB2409063B (en) * | 2003-12-09 | 2006-07-12 | Advanced Risc Mach Ltd | Vector by scalar operations |
GB2409068A (en) * | 2003-12-09 | 2005-06-15 | Advanced Risc Mach Ltd | Data element size control within parallel lanes of processing |
GB2411974C (en) * | 2003-12-09 | 2009-09-23 | Advanced Risc Mach Ltd | Data shift operations |
GB2409060B (en) * | 2003-12-09 | 2006-08-09 | Advanced Risc Mach Ltd | Moving data between registers of different register data stores |
GB2411975B (en) * | 2003-12-09 | 2006-10-04 | Advanced Risc Mach Ltd | Data processing apparatus and method for performing arithmetic operations in SIMD data processing |
GB2409062C (en) * | 2003-12-09 | 2007-12-11 | Advanced Risc Mach Ltd | Aliasing data processing registers |
GB2409064B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing in parallel a data processing operation on data elements |
GB2410097B (en) * | 2004-01-13 | 2006-11-01 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing data processing operations on floating point data elements |
GB2411978B (en) * | 2004-03-10 | 2007-04-04 | Advanced Risc Mach Ltd | Inserting bits within a data word |
US7302627B1 (en) * | 2004-04-05 | 2007-11-27 | Mimar Tibet | Apparatus for efficient LFSR calculation in a SIMD processor |
US7873812B1 (en) | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
US20050251644A1 (en) * | 2004-05-06 | 2005-11-10 | Monier Maher | Physics processing unit instruction set architecture |
US8427490B1 (en) | 2004-05-14 | 2013-04-23 | Nvidia Corporation | Validating a graphics pipeline using pre-determined schedules |
US9557994B2 (en) | 2004-07-13 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number |
GB0415851D0 (en) * | 2004-07-15 | 2004-08-18 | Imagination Tech Ltd | Microprocessor output ports and control of instructions provided therefrom |
US8624906B2 (en) | 2004-09-29 | 2014-01-07 | Nvidia Corporation | Method and system for non stalling pipeline instruction fetching from memory |
US7475001B2 (en) * | 2004-11-08 | 2009-01-06 | Nvidia Corporation | Software package definition for PPU enabled system |
US8424012B1 (en) * | 2004-11-15 | 2013-04-16 | Nvidia Corporation | Context switching on a video processor having a scalar execution unit and a vector execution unit |
JP4906734B2 (ja) * | 2004-11-15 | 2012-03-28 | エヌヴィディア コーポレイション | ビデオ処理 |
US7620530B2 (en) * | 2004-11-16 | 2009-11-17 | Nvidia Corporation | System with PPU/GPU architecture |
US7565279B2 (en) * | 2005-03-07 | 2009-07-21 | Nvidia Corporation | Callbacks in asynchronous or parallel execution of a physics simulation |
US7933405B2 (en) * | 2005-04-08 | 2011-04-26 | Icera Inc. | Data access and permute unit |
US7650266B2 (en) * | 2005-05-09 | 2010-01-19 | Nvidia Corporation | Method of simulating deformable object using geometrically motivated model |
GB2426083A (en) * | 2005-05-09 | 2006-11-15 | Sony Comp Entertainment Europe | Software emulation of a pipeline processor |
US7543136B1 (en) * | 2005-07-13 | 2009-06-02 | Nvidia Corporation | System and method for managing divergent threads using synchronization tokens and program instructions that include set-synchronization bits |
US7328330B2 (en) * | 2005-08-16 | 2008-02-05 | International Business Machines Corporation | Queue design supporting dependency checking and issue for SIMD instructions within a general purpose processor |
US9092170B1 (en) | 2005-10-18 | 2015-07-28 | Nvidia Corporation | Method and system for implementing fragment operation processing across a graphics bus interconnect |
US20070150904A1 (en) * | 2005-11-15 | 2007-06-28 | International Business Machines Corporation | Multi-threaded polling in a processing environment |
US7873953B1 (en) | 2006-01-20 | 2011-01-18 | Altera Corporation | High-level language code sequence optimization for implementing programmable chip designs |
US8307196B2 (en) * | 2006-04-05 | 2012-11-06 | Freescale Semiconductor, Inc. | Data processing system having bit exact instructions and methods therefor |
US9069547B2 (en) | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
US9223751B2 (en) * | 2006-09-22 | 2015-12-29 | Intel Corporation | Performing rounding operations responsive to an instruction |
US7627744B2 (en) * | 2007-05-10 | 2009-12-01 | Nvidia Corporation | External memory accessing DMA request scheduling in IC of parallel processing engines according to completion notification queue occupancy level |
DE102007025397B4 (de) * | 2007-05-31 | 2010-07-15 | Advanced Micro Devices, Inc., Sunnyvale | System mit mehreren Prozessoren und Verfahren zu seinem Betrieb |
US8683126B2 (en) * | 2007-07-30 | 2014-03-25 | Nvidia Corporation | Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory |
US20090049323A1 (en) * | 2007-08-14 | 2009-02-19 | Imark Robert R | Synchronization of processors in a multiprocessor system |
US8411096B1 (en) | 2007-08-15 | 2013-04-02 | Nvidia Corporation | Shader program instruction fetch |
US9024957B1 (en) | 2007-08-15 | 2015-05-05 | Nvidia Corporation | Address independent shader program loading |
US8698819B1 (en) | 2007-08-15 | 2014-04-15 | Nvidia Corporation | Software assisted shader merging |
US8659601B1 (en) | 2007-08-15 | 2014-02-25 | Nvidia Corporation | Program sequencer for generating indeterminant length shader programs for a graphics processor |
US9064333B2 (en) | 2007-12-17 | 2015-06-23 | Nvidia Corporation | Interrupt handling techniques in the rasterizer of a GPU |
US8780123B2 (en) * | 2007-12-17 | 2014-07-15 | Nvidia Corporation | Interrupt handling techniques in the rasterizer of a GPU |
CN101216756B (zh) * | 2007-12-28 | 2011-03-23 | 中国科学院计算技术研究所 | 一种risc处理器装置及其模拟浮点栈操作的方法 |
US8923385B2 (en) | 2008-05-01 | 2014-12-30 | Nvidia Corporation | Rewind-enabled hardware encoder |
US8681861B2 (en) * | 2008-05-01 | 2014-03-25 | Nvidia Corporation | Multistandard hardware video encoder |
US8102884B2 (en) * | 2008-10-15 | 2012-01-24 | International Business Machines Corporation | Direct inter-thread communication buffer that supports software controlled arbitrary vector operand selection in a densely threaded network on a chip |
US8489851B2 (en) * | 2008-12-11 | 2013-07-16 | Nvidia Corporation | Processing of read requests in a memory controller using pre-fetch mechanism |
GB0909701D0 (en) * | 2009-06-08 | 2009-07-22 | Young Arthur P | Testing completion of concurrent logical operations |
US20110055838A1 (en) * | 2009-08-28 | 2011-03-03 | Moyes William A | Optimized thread scheduling via hardware performance monitoring |
US8667042B2 (en) * | 2010-09-24 | 2014-03-04 | Intel Corporation | Functional unit for vector integer multiply add instruction |
US9092213B2 (en) | 2010-09-24 | 2015-07-28 | Intel Corporation | Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation |
US20120110303A1 (en) * | 2010-10-28 | 2012-05-03 | International Business Machines Corporation | Method for Process Synchronization of Embedded Applications in Multi-Core Systems |
CN102012803B (zh) * | 2010-11-25 | 2014-09-10 | 中国人民解放军国防科学技术大学 | 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元 |
JP5664198B2 (ja) * | 2010-12-14 | 2015-02-04 | 富士通株式会社 | 演算処理装置 |
US8423343B2 (en) * | 2011-01-24 | 2013-04-16 | National Tsing Hua University | High-parallelism synchronization approach for multi-core instruction-set simulation |
US9411585B2 (en) | 2011-09-16 | 2016-08-09 | International Business Machines Corporation | Multi-addressable register files and format conversions associated therewith |
US9727336B2 (en) * | 2011-09-16 | 2017-08-08 | International Business Machines Corporation | Fine-grained instruction enablement at sub-function granularity based on an indicated subrange of registers |
CN104011616B (zh) | 2011-12-23 | 2017-08-29 | 英特尔公司 | 改进置换指令的装置和方法 |
CN104115114B (zh) | 2011-12-23 | 2018-06-12 | 英特尔公司 | 经改进的提取指令的装置和方法 |
CN111831335A (zh) | 2011-12-23 | 2020-10-27 | 英特尔公司 | 经改进的插入指令的装置和方法 |
CN107220029B (zh) | 2011-12-23 | 2020-10-27 | 英特尔公司 | 掩码置换指令的装置和方法 |
US9946540B2 (en) | 2011-12-23 | 2018-04-17 | Intel Corporation | Apparatus and method of improved permute instructions with multiple granularities |
CN104126173A (zh) * | 2011-12-23 | 2014-10-29 | 英特尔公司 | 不会引起密码应用的算术标志的三输入操作数向量add指令 |
EP2798429A4 (fr) * | 2011-12-30 | 2016-07-27 | Intel Corp | Dispositif reconfigurable pour le repositionnement de données dans un mot de donnée |
US10289412B2 (en) * | 2012-02-09 | 2019-05-14 | Qualcomm Incorporated | Floating point constant generation instruction |
US20130227238A1 (en) * | 2012-02-28 | 2013-08-29 | Thomas VIJVERBERG | Device and method for a time and space partitioned based operating system on a multi-core processor |
JP5900061B2 (ja) * | 2012-03-19 | 2016-04-06 | 富士通株式会社 | 試験方法、試験装置及びプログラム |
US9710275B2 (en) * | 2012-11-05 | 2017-07-18 | Nvidia Corporation | System and method for allocating memory of differing properties to shared data objects |
US9804839B2 (en) * | 2012-12-28 | 2017-10-31 | Intel Corporation | Instruction for determining histograms |
US20140289498A1 (en) * | 2013-03-19 | 2014-09-25 | Apple Inc. | Enhanced macroscalar vector operations |
US9817663B2 (en) * | 2013-03-19 | 2017-11-14 | Apple Inc. | Enhanced Macroscalar predicate operations |
US20140289502A1 (en) * | 2013-03-19 | 2014-09-25 | Apple Inc. | Enhanced vector true/false predicate-generating instructions |
US20140289497A1 (en) * | 2013-03-19 | 2014-09-25 | Apple Inc. | Enhanced macroscalar comparison operations |
US9477477B2 (en) * | 2014-01-22 | 2016-10-25 | Nvidia Corporation | System, method, and computer program product for executing casting-arithmetic instructions |
US9772850B2 (en) * | 2014-11-14 | 2017-09-26 | Intel Corporation | Morton coordinate adjustment processors, methods, systems, and instructions |
US9772848B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Three-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US9772849B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Four-dimensional morton coordinate conversion processors, methods, systems, and instructions |
CN105808497B (zh) * | 2014-12-30 | 2018-09-21 | 华为技术有限公司 | 一种数据处理方法 |
US11544214B2 (en) | 2015-02-02 | 2023-01-03 | Optimum Semiconductor Technologies, Inc. | Monolithic vector processor configured to operate on variable length vectors using a vector length register |
US9817791B2 (en) | 2015-04-04 | 2017-11-14 | Texas Instruments Incorporated | Low energy accelerator processor architecture with short parallel instruction word |
US11847427B2 (en) * | 2015-04-04 | 2023-12-19 | Texas Instruments Incorporated | Load store circuit with dedicated single or dual bit shift circuit and opcodes for low power accelerator processor |
US9952865B2 (en) | 2015-04-04 | 2018-04-24 | Texas Instruments Incorporated | Low energy accelerator processor architecture with short parallel instruction word and non-orthogonal register data file |
US20170177354A1 (en) * | 2015-12-18 | 2017-06-22 | Intel Corporation | Instructions and Logic for Vector-Based Bit Manipulation |
US10503474B2 (en) | 2015-12-31 | 2019-12-10 | Texas Instruments Incorporated | Methods and instructions for 32-bit arithmetic support using 16-bit multiply and 32-bit addition |
US10401412B2 (en) | 2016-12-16 | 2019-09-03 | Texas Instruments Incorporated | Line fault signature analysis |
US10564989B2 (en) * | 2017-11-28 | 2020-02-18 | Microsoft Technology Licensing | Thread independent parametric positioning for rendering elements |
US10424041B2 (en) | 2017-12-11 | 2019-09-24 | Microsoft Technology Licensing, Llc | Thread independent scalable vector graphics operations |
CN108984426B (zh) * | 2018-08-03 | 2021-01-26 | 北京字节跳动网络技术有限公司 | 用于处理数据的方法和装置 |
US11366663B2 (en) * | 2018-11-09 | 2022-06-21 | Intel Corporation | Systems and methods for performing 16-bit floating-point vector dot product instructions |
CN115408313A (zh) * | 2021-05-26 | 2022-11-29 | 意法半导体应用有限公司 | 处理系统、相关的集成电路、设备和方法 |
US11762794B2 (en) * | 2021-05-26 | 2023-09-19 | Stmicroelectronics Application Gmbh | Processing system, related integrated circuit, device and method |
CN113741567B (zh) * | 2021-11-08 | 2022-03-29 | 广东省新一代通信与网络创新研究院 | 矢量加速器及其控制方法、装置 |
CN115167933B (zh) * | 2022-09-08 | 2022-12-02 | 深圳市恒运昌真空技术有限公司 | 一种双处理器设备及其控制方法和处理器 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0195245A2 (fr) * | 1985-03-13 | 1986-09-24 | International Business Machines Corporation | Processeur parallèle à haute preformance à configuration modifiée de registres/processeurs élémentaires |
US4760545A (en) * | 1983-12-23 | 1988-07-26 | Hitachi, Ltd. | Vector processing apparatus including vector registers having selectively accessible storage locations |
EP0395348A2 (fr) * | 1989-04-28 | 1990-10-31 | Apple Computer, Inc. | Méthode et dispositif de calcul multijauge |
EP0654733A1 (fr) * | 1993-11-23 | 1995-05-24 | Hewlett-Packard Company | Traitement de données en parallèle dans un processeur unique |
US5432728A (en) * | 1992-07-03 | 1995-07-11 | Sgs-Thomson Microelectronics S.A. | Process for performing numerical computations, and arithmetic unit for implementing this process |
EP0681236A1 (fr) * | 1994-05-05 | 1995-11-08 | Rockwell International Corporation | Chemin de données de vecteur d'espace |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5975365A (ja) * | 1982-10-22 | 1984-04-28 | Hitachi Ltd | ベクトル処理装置 |
CN85106496A (zh) * | 1985-08-29 | 1987-04-29 | 日本电气株式会社 | 向量处理系统 |
JPH0622035B2 (ja) * | 1985-11-13 | 1994-03-23 | 株式会社日立製作所 | ベクトル処理装置 |
US4916657A (en) * | 1985-12-12 | 1990-04-10 | Alcatel Usa, Corp. | Single instruction multiple data (SIMD) cellular array processing apparatus employing multiple state logic for coupling to data buses |
US5146592A (en) * | 1987-09-14 | 1992-09-08 | Visual Information Technologies, Inc. | High speed image processing computer with overlapping windows-div |
JPH02291073A (ja) * | 1989-04-19 | 1990-11-30 | Koufu Nippon Denki Kk | ベクトルデータ処理装置 |
US5327541A (en) * | 1989-10-13 | 1994-07-05 | Texas Instruments Inc. | Global rotation of data in synchronous vector processor |
JP2526691B2 (ja) * | 1990-03-02 | 1996-08-21 | 三菱電機株式会社 | プログラマブルコントロ―ラの制御方法 |
JP2651267B2 (ja) * | 1990-07-26 | 1997-09-10 | 富士通株式会社 | 演算処理装置及び演算処理方法 |
JP2791236B2 (ja) * | 1991-07-25 | 1998-08-27 | 三菱電機株式会社 | プロトコル並列処理装置 |
US5218211A (en) * | 1991-10-23 | 1993-06-08 | The United States Of America As Represented By The Secretary Of Commerce | System for sampling the sizes, geometrical distribution, and frequency of small particles accumulating on a solid surface |
US5361385A (en) * | 1992-08-26 | 1994-11-01 | Reuven Bakalash | Parallel computing system for volumetric modeling, data processing and visualization |
DE69429061T2 (de) * | 1993-10-29 | 2002-07-18 | Advanced Micro Devices, Inc. | Superskalarmikroprozessoren |
US5495588A (en) * | 1993-11-18 | 1996-02-27 | Allen-Bradley Company, Inc. | Programmable controller having joined relay language processor and general purpose processor |
US5706478A (en) * | 1994-05-23 | 1998-01-06 | Cirrus Logic, Inc. | Display list processor for operating in processor and coprocessor modes |
US5832290A (en) * | 1994-06-13 | 1998-11-03 | Hewlett-Packard Co. | Apparatus, systems and method for improving memory bandwidth utilization in vector processing systems |
US5513366A (en) * | 1994-09-28 | 1996-04-30 | International Business Machines Corporation | Method and system for dynamically reconfiguring a register file in a vector processor |
US5689653A (en) * | 1995-02-06 | 1997-11-18 | Hewlett-Packard Company | Vector memory operations |
US5706514A (en) * | 1996-03-04 | 1998-01-06 | Compaq Computer Corporation | Distributed execution of mode mismatched commands in multiprocessor computer systems |
-
1996
- 1996-08-19 US US08/699,597 patent/US6058465A/en not_active Expired - Lifetime
- 1996-08-26 US US08/703,434 patent/US5978838A/en not_active Expired - Lifetime
-
1997
- 1997-04-07 KR KR1019970012763A patent/KR100267091B1/ko not_active IP Right Cessation
- 1997-08-14 DE DE19735350A patent/DE19735350B4/de not_active Expired - Lifetime
- 1997-08-18 FR FR9710441A patent/FR2752630B1/fr not_active Expired - Lifetime
- 1997-08-19 TW TW086111969A patent/TW358313B/zh not_active IP Right Cessation
- 1997-08-19 CN CN97117404A patent/CN1112635C/zh not_active Expired - Lifetime
- 1997-08-19 TW TW086111963A patent/TW366455B/zh not_active IP Right Cessation
- 1997-08-19 JP JP9222416A patent/JPH10134036A/ja active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4760545A (en) * | 1983-12-23 | 1988-07-26 | Hitachi, Ltd. | Vector processing apparatus including vector registers having selectively accessible storage locations |
EP0195245A2 (fr) * | 1985-03-13 | 1986-09-24 | International Business Machines Corporation | Processeur parallèle à haute preformance à configuration modifiée de registres/processeurs élémentaires |
EP0395348A2 (fr) * | 1989-04-28 | 1990-10-31 | Apple Computer, Inc. | Méthode et dispositif de calcul multijauge |
US5432728A (en) * | 1992-07-03 | 1995-07-11 | Sgs-Thomson Microelectronics S.A. | Process for performing numerical computations, and arithmetic unit for implementing this process |
EP0654733A1 (fr) * | 1993-11-23 | 1995-05-24 | Hewlett-Packard Company | Traitement de données en parallèle dans un processeur unique |
EP0681236A1 (fr) * | 1994-05-05 | 1995-11-08 | Rockwell International Corporation | Chemin de données de vecteur d'espace |
Also Published As
Publication number | Publication date |
---|---|
FR2752630B1 (fr) | 2004-11-05 |
JPH10134036A (ja) | 1998-05-22 |
DE19735350B4 (de) | 2006-12-07 |
CN1180864A (zh) | 1998-05-06 |
KR100267091B1 (ko) | 2000-11-01 |
US6058465A (en) | 2000-05-02 |
KR19980018070A (ko) | 1998-06-05 |
DE19735350A1 (de) | 1998-03-12 |
CN1112635C (zh) | 2003-06-25 |
US5978838A (en) | 1999-11-02 |
TW358313B (en) | 1999-05-11 |
TW366455B (en) | 1999-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
FR2752630A1 (fr) | Traitement de donnees multiples a une seule instruction dans un processeur de signaux multisupport | |
FR2752965A1 (fr) | Traitement de donnees multiples a une seule instruction utilisant des rangees multiples de registres vectoriels | |
US8335812B2 (en) | Methods and apparatus for efficient complex long multiplication and covariance matrix implementation | |
US8024553B2 (en) | Data exchange and communication between execution units in a parallel processor | |
US6687810B2 (en) | Method and apparatus for staggering execution of a single packed data instruction using the same circuit | |
JP4879307B2 (ja) | プロセッサでの条件付き実行をサポートする装置及びその方法 | |
JPH03138759A (ja) | 信号プロセツサ | |
FR2752466A1 (fr) | Dispositif processeur integre de signaux numeriques | |
WO2000022515A1 (fr) | Unites fonctionnelles reconfigurables servant a constituer un modele hybride de programmation vliw-simd | |
US20120131308A1 (en) | System, device, and method for on-the-fly permutations of vector memories for executing intra-vector operations | |
US8977835B2 (en) | Reversing processing order in half-pumped SIMD execution units to achieve K cycle issue-to-issue latency | |
JPH10187661A (ja) | コンピュータにおけるスカラ値をベクトルに記入する方法 | |
FR2752629A1 (fr) | Traitement de donnees multiples a une seule instruction avec operations scalaires/vectorielles combinees | |
TWI241524B (en) | Method and apparatus for aligning operands for a processor | |
FR2678400A1 (fr) | Processeur de protocole destine a l'execution d'un ensemble d'instructions en un nombre reduit d'operation. | |
JP2001525966A (ja) | 命令発行速度を加速するプロセッサ・コントローラ | |
US6654870B1 (en) | Methods and apparatus for establishing port priority functions in a VLIW processor | |
US7577824B2 (en) | Methods and apparatus for storing expanded width instructions in a VLIW memory for deferred execution | |
KR19980018071A (ko) | 멀티미디어 신호 프로세서의 단일 명령 다중 데이터 처리 | |
Le | US 8,949,575 Β2 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PLFP | Fee payment |
Year of fee payment: 20 |