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

  1. #1
    Membre régulier
    Profil pro
    profiler
    Inscrit en
    février 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : profiler

    Informations forums :
    Inscription : février 2008
    Messages : 84
    Points : 98
    Points
    98
    Par défaut Passer les paramètres de fonction dans les registres
    Bonjour,

    Je souhaite pouvoir indiquer à GCC de mettre les paramètres de fonction directement dans des registres afin de pouvoir utiliser du code assembleur au lieu de les mettre dans la pile.
    Le contexte est d'avoir un cross compiler sur une machine Ubuntu qui produise du code "ROM" pour du Motorala 680x0.

    Par exemple le code suivant indique à GCC de mettre la variable "a" dans le registre d1 directement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    long toto(register long a __asm("d1")) {
     
        return a;
    }
    Sur la version que j'ai (m68k-elf-gcc (GCC) 6.4.0), j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    error: expected ';', ',' or ')' before '__asm'
     long toto(register long a __asm("d1")) {
    J'ai essayé de construire/utiliser plusieurs versions de GCC mais je n'arrive pas à trouver mon bonheur...

    Merci

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 353
    Points : 33 008
    Points
    33 008
    Par défaut
    Regardes ceci.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre régulier
    Profil pro
    profiler
    Inscrit en
    février 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : profiler

    Informations forums :
    Inscription : février 2008
    Messages : 84
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Regardes ceci.
    Je pourrais effectivement utiliser des "stubs" qui prennent les paramètres sur la pile et les transferent dans les registres, mais ça va alourdir/ralentir le code et ça me fait générer du code pour "rien".

    Pour avoir plus d'éléments de contexte, je (re)fais une ROM pour l'éco système Amiga en me basant sur les includes système. Et effectivement Exec (le "kernel" de l'Amiga) utilise ce principe de stubs pour communiquer avec les bibliothèques partagées.

    Le problème est que :
    • je n'arrive pas à dire à GCC d'utiliser des registres pour stocker les paramètres. J'ai un moyen de contournement qui est de passer par VBCC mais je voudrais rester sur GCC (et surtout je n'arrive pas à faire marcher VBCC et CLion en concert),
    • ça va alourdir le code qui doit idéalement < 512Ko,
    • pour chaque bibliothèque (~30aine) je vais devoir utiliser ce principe et je t'avouerai que ça ne me plait pas trop...
    • j'aimerai (au tant que faire se peut) rester dans la logique/esprit de l'époque

Discussions similaires

  1. Passer des paramètres à une fonction dans before_filter
    Par abir84 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 27/01/2008, 19h40
  2. Réponses: 10
    Dernier message: 02/02/2007, 16h00
  3. Passage de paramètre à une fonction dans un G_CALLBACK
    Par Dimitri_87 dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 15/09/2006, 11h04
  4. Passer en paramétre un tableau dans une procédure stockée
    Par killysui dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/04/2006, 11h47
  5. Passer en paramètre un chemin dans redirection
    Par croco83 dans le forum ASP
    Réponses: 5
    Dernier message: 07/05/2004, 08h30

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