2014-07-10 7 views
0

J'ai un code assembler pour 32bit ppc et j'ai confondu comme comment le convertir pour 64bit. Peut-on montrer les liens sur les ABI pour 64bit ppc.Assembler le code pour ppc64

Voici une exemple de fonction, à quoi ressemblerait la version 64 bits?

SLEAF(cpu_save_context) 

stw r0, 0(ARG0) 
stw sp, 4(ARG0) /* Stack frame pointer */ 

stw  r2, 8(ARG0) 
stw  r3, 12(ARG0) 
stw  r4, 16(ARG0) 
stw  r5, 20(ARG0) 
stw  r6, 24(ARG0) 
stw  r7, 28(ARG0) 
stw  r8, 32(ARG0) 
stw  r9, 36(ARG0) 
stw r10, 40(ARG0) 
stw r11, 44(ARG0) 
stw  r12, 48(ARG0) 

stw r13, 52(ARG0) /* Small data area pointer */ 

stw r14, 56(ARG0) /* C-registers */ 
stw r15, 60(ARG0) 
stw r16, 64(ARG0) 
stw r17, 68(ARG0) 
stw r18, 72(ARG0) 
stw r19, 76(ARG0) 
stw r20, 80(ARG0) 
stw r21, 84(ARG0) 
stw r22, 88(ARG0) 
stw r23, 92(ARG0) 
stw r24, 96(ARG0) 
stw r25, 100(ARG0) 
stw r26, 104(ARG0) 
stw r27, 108(ARG0) 
stw r28, 112(ARG0) 
stw r29, 116(ARG0) 
stw r30, 120(ARG0) 
stw r31, 124(ARG0) 

mfcr r0  /* Fetch condition register */ 
stw r0, 128(ARG0) 

mflr r0  /* Fetch link register */ 
stw r0, 132(ARG0) 

mfctr r0  /* Fetch count register */ 
stw r0, 136(ARG0) 

mfxer r0,  /* Fetch fixed-point exception Register */ 
stw r0, 140(ARG0) 

li ARG0, 1 /* Return TRUE to caller. */ 
blr 

END(cpu_save_context 
+0

http://pds.twi.tudelft.nl/vakken/in101/labcourse/instruction-set/? –

Répondre

0

Au lieu de STW (mot de magasin) sur les registres à usage général (r0, sp, r2-R31) et les registres ad hoc LR, CTR, XER, vous devez utiliser std (magasin double mot). Et vous devez changer les décalages codés en dur d'ARG0 pour stocker 8 octets, donc les décalages seraient "0, 8, 16, 24, ..." au lieu de "0, 4, 8, 12, ...". Vous devrez peut-être également déterminer s'il existe un espace alloué au pointeur ARG0 pour le stockage supplémentaire requis pour les mots doubles au lieu des mots.

Par exemple:

std r0, 0(ARG0) 
std sp, 8(ARG0) /* Stack frame pointer (offset was previously 4) */ 
1

Il y a beaucoup de matériel en ce qui concerne la nouvelle ppc64 ABI, alias, ABI v2.

La plus importante est la spécification officielle ELFv2 ABI. Il y a aussi une présentation à ce sujet. Tous se trouvent sur l'URL suivante.

https://wiki.debian.org/ppc64el#ABI_Documentation

Questions connexes