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 éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    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 : 32
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Pour gcc la syntaxe assembleur est : asm()
    http://www.haypocalc.com/wiki/Gcc#Gcc_et_l.27assembleur

  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
    Points : 18 681
    Points
    18 681
    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

  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 : 32
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Je n'ai toujours vue que la forme que je pensait être la seul.
    Merci de l'info.

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, 20h10
  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, 10h24
  3. GCC - ASM inline
    Par Edouard Kaiser dans le forum Linux
    Réponses: 2
    Dernier message: 11/07/2005, 10h22
  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, 01h23
  5. [DevC++]Assembleur inline
    Par Lung dans le forum Dev-C++
    Réponses: 6
    Dernier message: 21/08/2003, 17h45

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