Oui, je comprends bien, le seul problème est que le seul contenu de mon fichier .asm est :
- Code: Select all
assume adl=1
section .text
public reset_stack_and_registers
reset_stack_and_registers:
ret
public save_stack_and_registers
save_stack_and_registers:
ret
public switch_registers
switch_registers:
ret
public get_stack
get_stack:
ret
extern launch_process
A aucun moment je n'utilise d'instruction sbc. Et de toute façon, le log du makefile montre que les seuls fichiers compilés sont des fichiers C.
L'instruction sbc hl, iy provient de lto.src, un fichier intermédiaire créé pendant la compilation.
Cette instruction est insérée lors de la compilation de cette fonction C :
- Code: Select all
ProcessCycle* loadNextLivingProcess(ProcessCycle* pc) {
do {
pc = pc->next;
}
while (pc->process->state == Finished);
switchGlobalLocalVariables(pc->process->varsToSave);
return pc;
}
Voici le code assembleur généré (ligne 71) :
- Code: Select all
_loadNextLivingProcess:
push ix
ld ix, 0
add ix, sp
lea hl, ix - 23
ld sp, hl
ld iy, (ix + 6)
lea hl, ix - 5
ld (ix - 11), hl
BB395_1:
ld iy, (iy + 3)
ld bc, (iy)
push bc
pop hl
lea de, iy
push bc
pop iy
ld a, (iy + 56)
push de
pop iy
cp a, 2
jr z, BB395_1
ld (ix - 8), iy
push hl
pop iy
ld iy, (iy + 69)
BB395_3:
lea hl, iy
add hl, bc
or a, a
sbc hl, bc
jp z, BB395_9
ld hl, (iy)
push hl
pop bc
add hl, bc
or a, a
sbc hl, bc
jp z, BB395_9
ld (ix - 17), iy
ld de, (ix - 11)
push bc
pop iy
ld (ix - 20), iy
lea hl, iy
ld bc, 5
ldir
ld hl, (iy + 5)
ld iy, (_global_env)
ld de, (iy + 62)
ld (ix - 14), de
ld iy, (ix - 14)
ld iy, (iy + 3)
ld bc, 5
call __imulu
push hl
pop de
ld (ix - 23), de
add iy, de
push iy
call _update_if_promise
pop hl
ld iy, (ix - 14)
ld hl, (iy + 3)
ld iy, (ix - 20)
ld de, (ix - 23)
add hl, de
lea de, iy
ld bc, 5
or a, a
sbc hl, iy
add hl, iy
jr c, BB395_7
ldir
jr BB395_8
BB395_7:
add hl, bc
dec hl
ex de, hl
add hl, bc
dec hl
ex de, hl
lddr
BB395_8:
ld hl, (iy + 5)
ld iy, (_global_env)
ld iy, (iy + 62)
ld iy, (iy + 3)
ld bc, 5
call __imulu
push hl
pop de
add iy, de
lea de, iy
ld hl, (ix - 11)
ldir
ld iy, (ix - 17)
ld iy, (iy + 3)
jp BB395_3
BB395_9:
ld hl, (ix - 8)
ld sp, ix
pop ix
ret
Il s'agit d'un problème du générateur de code. Je suis donc repassé sur la version 12.1 stable de la toolchain, mais ça ne règle pas l'erreur.