mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 05:59:28 +02:00
60 lines
1.7 KiB
PHP
60 lines
1.7 KiB
PHP
{
|
|
This file is part of the Free Pascal run time library.
|
|
Copyright (c) 2015 by Jonas Maebe and other members of the
|
|
Free Pascal development team
|
|
|
|
SetJmp/Longjmp implementation for AArch64
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
**********************************************************************}
|
|
|
|
function fpc_setjmp(var S: jmp_buf): longint; assembler; [public, alias:'FPC_SETJMP']; nostackframe; compilerproc;
|
|
asm
|
|
mov x3, sp
|
|
stp x19, x20, [x0, #jmp_buf.x19]
|
|
stp x21, x22, [x0, #jmp_buf.x21]
|
|
stp x23, x24, [x0, #jmp_buf.x23]
|
|
stp x25, x26, [x0, #jmp_buf.x25]
|
|
stp x27, x28, [x0, #jmp_buf.x27]
|
|
stp x29, x30, [x0, #jmp_buf.x29]
|
|
str x3, [x0, #jmp_buf.xsp]
|
|
|
|
stp d8, d9, [x0, #jmp_buf.d8]
|
|
stp d10, d11, [x0, #jmp_buf.d10]
|
|
stp d12, d13, [x0, #jmp_buf.d12]
|
|
stp d14, d15, [x0, #jmp_buf.d14]
|
|
|
|
mov x0, xzr
|
|
end;
|
|
|
|
|
|
procedure fpc_longjmp(var S: jmp_buf ;value: longint); assembler; [public, alias:'FPC_LONGJMP']; nostackframe; compilerproc;
|
|
asm
|
|
ldr x3, [x0, #jmp_buf.xsp]
|
|
|
|
ldp x19, x20, [x0, #jmp_buf.x19]
|
|
ldp x21, x22, [x0, #jmp_buf.x21]
|
|
ldp x23, x24, [x0, #jmp_buf.x23]
|
|
ldp x25, x26, [x0, #jmp_buf.x25]
|
|
ldp x27, x28, [x0, #jmp_buf.x27]
|
|
ldp x29, x30, [x0, #jmp_buf.x29]
|
|
|
|
mov sp, x3
|
|
|
|
ldp d8, d9, [x0, #jmp_buf.d8]
|
|
ldp d10, d11, [x0, #jmp_buf.d10]
|
|
ldp d12, d13, [x0, #jmp_buf.d12]
|
|
ldp d14, d15, [x0, #jmp_buf.d14]
|
|
|
|
mov x0, x1
|
|
end;
|
|
|
|
|