mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-29 02:21:55 +01:00
+ SPARC: assembler implementation of SarInt64.
git-svn-id: trunk@26467 -
This commit is contained in:
parent
b398430b4c
commit
dd78cd5811
@ -715,3 +715,28 @@ asm
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
|
{$ifndef FPC_SYSTEM_HAS_SAR_QWORD}
|
||||||
|
{$define FPC_SYSTEM_HAS_SAR_QWORD}
|
||||||
|
function fpc_SarInt64(Const AValue : Int64;const Shift : Byte): Int64; [Public,Alias:'FPC_SARINT64']; compilerproc; assembler; nostackframe;
|
||||||
|
asm
|
||||||
|
{ %o0=high(AValue) %o1=low(AValue), result: %o0:%o1 }
|
||||||
|
and %o2,63,%o2
|
||||||
|
subcc %o2,32,%g0
|
||||||
|
bcc .L1
|
||||||
|
nop
|
||||||
|
srl %o1,%o2,%o1
|
||||||
|
subcc %o2,%g0,%g0
|
||||||
|
be .Lexit
|
||||||
|
sra %o0,%o2,%o0
|
||||||
|
sub %g0,%o2,%o3
|
||||||
|
sll %o0,%o3,%o3
|
||||||
|
ba .Lexit
|
||||||
|
or %o3,%o1,%o1
|
||||||
|
.L1:
|
||||||
|
sra %o0,%o2,%o1
|
||||||
|
sra %o0,31,%o0
|
||||||
|
.Lexit:
|
||||||
|
end;
|
||||||
|
{$endif FPC_SYSTEM_HAS_SAR_QWORD}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user