Gast
#715122
Hi!
ich haben folgenden Code, der mit dem MSPGCC auch kompiliert, allerdings
finde ich nicht ganz sauber was er macht (das ret am Ende ohne return()
im C-Code). Am liebsten wäre es mir, wenn ich eine saubere return()
Funktion mit Variable haben würde und er dann zurückkehrt.
Ein weiterer Fehler ist, dass der GCC meckert wegen multiline-Assembler.
Leider habe ich noch nicht gefunden, wie man sowas umschreibt? Vor jede
Zeile ein asm?
Danke für Eure Antworten
Benjamin
CODE:
____________________________________________________
/*********************************************
* function mul16: *
-------------------------------------------
* return: int32_t *
-------------------------------------------
16bit Multiplikation
* 16x16=>32 *
* Hinweis: der Compiler legt das Ergebnis in *
* Register R9 und R10 ab. danach wird *
* zurückgesprungen. Der Rücksprungcode vom *
* gcc wird nicht erreicht, aber es gibt eine *
Compilerwarnung
*********************************************/
int32_t mul16(register int16_t x, register int16_t y)
{
__asm("mul16:
push r9
clr r13
mov r13,r15
mov r13,r9
tst r12
jge xbooth_2
mov #-1,r9
jmp xbooth_2
xbooth_6:
add r12,r15
addc r9,r13
xbooth_1:
rla r12
rlc r9
xbooth_2:
rra r14
jc xbooth_5
jne xbooth_1
jmp xbooth_4
xbooth_5:
sub r12,r15
subc r9,r13
xbooth_3:
rla r12
rlc r9
rra r14
jnc xbooth_6
cmp #0xFFFF,r14
jne xbooth_3
xbooth_4:
mov r15,r12
pop r9
ret
");
}