Bon je comprend decidement rien.. soit je sait plus programmer en asm soit il a un bleme....
voila une petite partie de mon code source:
// macro define //
#define XClrGPlan(y) ({ asm volatile ("move.l %0,%%a0;bsr ClrGPlan":: "a" (y): "a0");})
// Code asm //
asm("
virtual_pc:
dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
/***************************/
/* Efface un Gplan */
/***************************/
/* Input: */
/* adrr Gplan (a7) */
/***************************/
ClrGPlan:
movem.l %d0-%d7/%a1-%a7,virtual_pc
lea 8704(%a0),%a7
moveq #0,%d0
moveq #0,%d1
moveq #0,%d2
moveq #0,%d3
moveq #0,%d4
moveq #0,%d5
moveq #0,%d6
moveq #0,%d7
move.w %d0,%a0
move.w %d1,%a1
move.w %d2,%a2
move.w %d3,%a3
move.w %d4,%a4
move.w %d5,%a5
move.w %d6,%a6
bsr ClrGplan_bsr
bsr ClrGplan_bsr
bsr ClrGplan_bsr
bsr ClrGplan_bsr
bsr ClrGplan_bsr
bsr ClrGplan_bsr /* dans ce cas la, le bsr est interessant bien qu'il ait 8 cycles plus que le dbra */
bsr ClrGplan_bsr /* 8*960=7680 */
movem.l virtual_pc,%d0-%d7/%a1-%a7
rts
ClrGplan_bsr:
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7)
movem.l %d0-%d7/%a0-%a6,-(%a7) /* 16*((8+7)*4)=960 */
rts
")
Bon cette routine marche si l'on ne met pas les bsr et que l'on remplace par le contenu du bsr .. si je met le bsr j'ai une || illegal instruction ||