mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 00:09:26 +02:00
* AVR: take care of CPUAVR_HAS_MOVW in assembler routines
git-svn-id: trunk@44131 -
This commit is contained in:
parent
04ad607bb4
commit
925979c6e4
@ -31,7 +31,7 @@ procedure fpc_cpuinit;{$ifdef SYSTEMINLINE}inline;{$endif}
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{$ifndef CPUAVR_16_REGS}
|
{$if not(defined(CPUAVR_16_REGS)) and defined(CPUAVR_HAS_MOVW)}
|
||||||
{$define FPC_SYSTEM_HAS_MOVE}
|
{$define FPC_SYSTEM_HAS_MOVE}
|
||||||
procedure Move(const source;var dest;count:SizeInt);[public, alias: 'FPC_MOVE']; assembler; nostackframe;
|
procedure Move(const source;var dest;count:SizeInt);[public, alias: 'FPC_MOVE']; assembler; nostackframe;
|
||||||
asm
|
asm
|
||||||
@ -71,7 +71,7 @@ asm
|
|||||||
pop r29
|
pop r29
|
||||||
pop r28
|
pop r28
|
||||||
end;
|
end;
|
||||||
{$endif CPUAVR_16_REGS}
|
{$endif not(defined(CPUAVR_16_REGS)) and defined(CPUAVR_HAS_MOVW)}
|
||||||
|
|
||||||
{$define FPC_SYSTEM_HAS_FILLCHAR}
|
{$define FPC_SYSTEM_HAS_FILLCHAR}
|
||||||
Procedure FillChar(var x;count:SizeInt;value:byte);
|
Procedure FillChar(var x;count:SizeInt;value:byte);
|
||||||
|
@ -42,7 +42,7 @@ finish:
|
|||||||
mov R24, R22 // Move result from R22 to R24
|
mov R24, R22 // Move result from R22 to R24
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$ifdef CPUAVR_16_REGS}
|
{$if defined(CPUAVR_16_REGS) or not(defined(CPUAVR_HAS_MOVW))}
|
||||||
function fpc_divmod_word(n, z: word): word; assembler; nostackframe;
|
function fpc_divmod_word(n, z: word): word; assembler; nostackframe;
|
||||||
label
|
label
|
||||||
div1, div2, div3, finish;
|
div1, div2, div3, finish;
|
||||||
@ -85,7 +85,7 @@ label
|
|||||||
div1, div2, div3, finish;
|
div1, div2, div3, finish;
|
||||||
asm
|
asm
|
||||||
end;
|
end;
|
||||||
{$else CPUAVR_16_REGS}
|
{$else defined(CPUAVR_16_REGS) or not(defined(CPUAVR_HAS_MOVW))}
|
||||||
// z in Ra, n in Rb, 0 in Rp
|
// z in Ra, n in Rb, 0 in Rp
|
||||||
function fpc_divmod_word(n, z: word): word; assembler; nostackframe;
|
function fpc_divmod_word(n, z: word): word; assembler; nostackframe;
|
||||||
label
|
label
|
||||||
@ -179,4 +179,4 @@ finish:
|
|||||||
pop R16
|
pop R16
|
||||||
pop R17
|
pop R17
|
||||||
end;
|
end;
|
||||||
{$endif CPUAVR_16_REGS}
|
{$endif defined(CPUAVR_16_REGS) or not(defined(CPUAVR_HAS_MOVW))}
|
||||||
|
@ -110,7 +110,7 @@ asm
|
|||||||
rcall fpc_divmod_word
|
rcall fpc_divmod_word
|
||||||
{$endif CPUAVR_HAS_JMP_CALL}
|
{$endif CPUAVR_HAS_JMP_CALL}
|
||||||
|
|
||||||
{$ifdef CPUAVR_16_REGS}
|
{$if not(defined(CPUAVR_HAS_MOVW))}
|
||||||
mov R24, R20
|
mov R24, R20
|
||||||
mov R25, R21
|
mov R25, R21
|
||||||
{$else CPUAVR_16_REGS}
|
{$else CPUAVR_16_REGS}
|
||||||
@ -150,12 +150,12 @@ asm
|
|||||||
rcall fpc_divmod_word
|
rcall fpc_divmod_word
|
||||||
{$endif CPUAVR_HAS_JMP_CALL}
|
{$endif CPUAVR_HAS_JMP_CALL}
|
||||||
|
|
||||||
{$ifdef CPUAVR_16_REGS}
|
{$if not(defined(CPUAVR_HAS_MOVW))}
|
||||||
mov R24, R20
|
mov R24, R20
|
||||||
mov R25, R21
|
mov R25, R21
|
||||||
{$else CPUAVR_16_REGS}
|
{$else not(defined(CPUAVR_HAS_MOVW))}
|
||||||
movw R24, R20
|
movw R24, R20
|
||||||
{$endif CPUAVR_16_REGS}
|
{$endif not(defined(CPUAVR_HAS_MOVW))}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{It is a compilerproc (systemh.inc), make an alias for internal use.}
|
{It is a compilerproc (systemh.inc), make an alias for internal use.}
|
||||||
@ -194,15 +194,15 @@ asm
|
|||||||
rcall fpc_divmod_dword
|
rcall fpc_divmod_dword
|
||||||
{$endif CPUAVR_HAS_JMP_CALL}
|
{$endif CPUAVR_HAS_JMP_CALL}
|
||||||
|
|
||||||
{$ifdef CPUAVR_16_REGS}
|
{$if not(defined(CPUAVR_HAS_MOVW))}
|
||||||
mov R22, R18 // Move result from R18:R21 to R22:R25
|
mov R22, R18 // Move result from R18:R21 to R22:R25
|
||||||
mov R23, R19 // Move result from R18:R21 to R22:R25
|
mov R23, R19 // Move result from R18:R21 to R22:R25
|
||||||
mov R24, R20
|
mov R24, R20
|
||||||
mov R25, R21
|
mov R25, R21
|
||||||
{$else CPUAVR_16_REGS}
|
{$else not(defined(CPUAVR_HAS_MOVW))}
|
||||||
movw R22, R18 // Move result from R18:R21 to R22:R25
|
movw R22, R18 // Move result from R18:R21 to R22:R25
|
||||||
movw R24, R20
|
movw R24, R20
|
||||||
{$endif CPUAVR_16_REGS}
|
{$endif not(defined(CPUAVR_HAS_MOVW))}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{It is a compilerproc (systemh.inc), make an alias for internal use.}
|
{It is a compilerproc (systemh.inc), make an alias for internal use.}
|
||||||
|
Loading…
Reference in New Issue
Block a user