mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 04:48:07 +02: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;
|
||||
|
||||
{$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