1

Je sais que c'est sans doute une question pour PpHd, mais si vous connaissez la réponse n'hésitez pas.

J'aimerai savoir dans quel(s) registre(s) doit être stocké le résultat renvoyé par une méthode écrite en ASM que l'on voudrait appeler en C ?
Je sais déjà que les param. d'entrée sont dans r0, r1, etc...

2

C'est dans d0 pour une donnée et dans a0 pour une adresse

3

Ça, c'est sur 68k. On est sur ARM là. Il n'y a pas de d0 et d'a0 sur ARM.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Voilà:
/* Return the regiser number of the N'th (integer) argument.  */
#define ARG_REGISTER(N) 	(N - 1)

[...]

/* Define how to find the value returned by a library function
   assuming the value has mode MODE.  */
#define LIBCALL_VALUE(MODE)  \
  (TARGET_ARM && TARGET_HARD_FLOAT && GET_MODE_CLASS (MODE) == MODE_FLOAT \
   ? gen_rtx_REG (MODE, FIRST_ARM_FP_REGNUM) \
   : gen_rtx_REG (MODE, ARG_REGISTER (1)))

/* Define how to find the value returned by a function.
   VALTYPE is the data type of the value (as a tree).
   If the precise function being called is known, FUNC is its FUNCTION_DECL;
   otherwise, FUNC is 0.  */
#define FUNCTION_VALUE(VALTYPE, FUNC) \
  LIBCALL_VALUE (TYPE_MODE (VALTYPE))

(extrait du fichier arm.h de GCC)

En d'autres mots: les nombres à virgule flottante sont dans le premier registre de virgule flottante, tout le reste est dans r0.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

Kevin : Merci pour ta réponse. Par contre il y a bien des registres do, d1 etc... Ce sont des registres du FPU.

6

Lol. y'a pas de virgule flottante, de toute facon faut pas les utiliser, c lent.

Alors:
+ Le resultat est toujours renvoye dans r0
+ Les 4 premiers arguments sont dans r0-r3, le reste est pushe sur la pile.
+ Seuls r0-r3 / lr=r14 / ip=r12 sont detruisible. Le reste doit etre preserve.

j'ai jamais reussi a deriver la pile sans faire tout planter donc je te conseille de ne pas toucher a la pile pour liberer un registre.