2009-05-04 14 views
0

J'utilise l'assemblage en ligne pour iphone, je travaille pour le mode de débogage de l'appareil.erreur d'assemblage en ligne

L'instruction est la suivante:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp)); 

Et je reçois une erreur:

error : expected ')' before tokedn '(' error: unknown register name 'r' in 'asm'

J'utilise X code 3.0 et gcc 4.0. Des idées?

Répondre

0

une correction de l'instruction est asm ("smlatb% 0,% 1,% 2,% 3 \ n \ t": "= r" (Temp): "r" (treg5): « r "(fac5):" r "(Temp));

+0

J'ai corrigé la question originale pour inclure cette information mise à jour. – unwind

0

Je crois que vous devriez faire quelque chose comme ceci:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp)); 

Voir this Stack Overflow question pour plus de détails.

+0

Salut Je l'ai fait c'est-à-dire ajouté 2 caractères de soulignement avant et après asm encore je reçois la même erreur. – Manish

0

I ajouté assemblage en ligne de style CodeWarrior __asm ​​{
smlatb Temp, treg5, fac5, Temp} et dans les paramètres de prject sous l'onglet de construction sous la langue GCC 4.0 J'ai choisi l'option Autoriser l'assembleur en ligne CodeWarrior-Style également sélectionné permettre 'asm' 'inline' 'typeof' options et le code a finalement fonctionné

0

Vous avez trop de : (deux points). Ils sont utilisés comme séparateurs. Donc, vous devriez en avoir un pour séparer le code d'assemblage avec la variable de sortie, et un pour séparer la variable de sortie des variables d'entrée. C'est quelque chose comme asm ("assembly" : <output> : <inputs> : [extra attributes]). Recherchez «assembly inline» pour GCC et vous verrez quelques exemples.

+0

Merci de regarder des exemples résolus mon problème – Manish

+0

Mec, au moins en place ou d'accepter une réponse. :) – sybreon

1

Il devrait y avoir seulement trois colons, pas quatre.

Les arguments suivant le premier deux-points spécifient les entrées, puis les sorties, puis la liste de regroupement.

Si vous avez plusieurs paramètres, vous pouvez utiliser une virgule pour les séparer plutôt que deux-points.

Dans votre exemple. Je suppose, que temp est votre sortie et treg5, fac5 sont vos entrées. Vous voulez probablement quelque chose comme ça.

__asm__("smlatb %0, %1, %2, %0 \n\t" 
     : "=r"(Temp) 
     : "0"(Temp), "r"(treg5), "r"(fac5) 
     :); 

BTW, il y a quelques bons exemples d'assemblage iphone ARM dans la bibliothèque vfpmath.