IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[GCC] Assembleur inline et instructions SSE2


Sujet :

Linux

  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut [GCC] Assembleur inline et instructions SSE2
    Bonjour à tous !
    J'essaie de faire un petit bout de code (pour apprendre) en assembleur inline avec gcc...
    Le problème c'est qu'il me génère un segmentation fault...

    Je me permets donc de copier/coller le code, afin de voir si vous décelez une erreur grossière dans l'assembleur...

    Merci d'avance !
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <iostream>
    #include <xmmintrin.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    using std::cout;
     
     
    int main(int argc, char **argv)
    {
      short *p __attribute__((aligned(16)));
      p = new short[512];
     
      short *p2 __attribute__((aligned(16)));
      p2 = new short;
     
      for (int i=0 ; i<512 ; i++)
      {
        p[i] = i;
      }
     
      __m128 *dp = (__m128 *)p;
      __m128 *dp2 = (__m128 *)p2;
     
      __asm__ ("movupd %0, %%xmm0"::"m"((__m128 *)dp));
      __asm__ ("movupd %%xmm0, %0":"=m"((__m128 *)dp2));
     
    //Theoriquement, les premiers octets de p sont dans p2...
      printf("%d %d %d %d %d %d %d %d\n", p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
      printf("%d %d %d %d %d %d %d %d\n", p2[0], p2[1], p2[2], p2[3], p2[4], p2[5], p2[6], p2[7]);
     
      delete[] p;
      delete[] p2;
      return 0;
    }

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Pour gcc la syntaxe assembleur est : asm()
    http://www.haypocalc.com/wiki/Gcc#Gcc_et_l.27assembleur
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par Davidbrcz
    Pour gcc la syntaxe assembleur est : asm()
    http://www.haypocalc.com/wiki/Gcc#Gcc_et_l.27assembleur

    asm
    __asm__
    asm volatile
    __asm__ volatile
    __asm__ __volatile__

    toutes ces formes sont valides



    en ce qui concerne le problème, je me demande si tu as vérifié que le code asm généré était correct

    gcc -S
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Je n'ai toujours vue que la forme que je pensait être la seul.
    Merci de l'info.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. Comment utiliser des instructions SSE2 dans un code c++?
    Par alexIsBack dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 22/02/2006, 19h10
  2. [boso kernel] Assembleur inline GCC - Undefined Reference
    Par Edouard Kaiser dans le forum Programmation d'OS
    Réponses: 13
    Dernier message: 29/07/2005, 09h24
  3. GCC - ASM inline
    Par Edouard Kaiser dans le forum Linux
    Réponses: 2
    Dernier message: 11/07/2005, 09h22
  4. Assembleur inline & FPO - VC++ 6.0
    Par rigobert dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 19/06/2005, 00h23
  5. [DevC++]Assembleur inline
    Par Lung dans le forum Dev-C++
    Réponses: 6
    Dernier message: 21/08/2003, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo