12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2003 by the Free Pascal development team.
- SetJmp and LongJmp implementation for exception handling
- 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.
- **********************************************************************}
- {$ifdef fpc_abi_call0}
- function fpc_setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP']; compilerproc; nostackframe;
- asm
- s32i.n a0,S.a0
- s32i.n a1,S.a1
- s32i.n a8,S.a8
- s32i.n a12,S.a12
- s32i.n a13,S.a13
- s32i.n a14,S.a14
- s32i.n a15,S.a15
- movi.n a2,0
- end;
- procedure fpc_longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP']; compilerproc; nostackframe;
- asm
- l32i.n a0,S.a0
- l32i.n a1,S.a1
- l32i.n a8,S.a8
- l32i.n a12,S.a12
- l32i.n a13,S.a13
- l32i.n a14,S.a14
- l32i.n a15,S.a15
- movi.n a2,1
- movnez a2,value,value
- end;
- {$elseif defined(freertos) and defined(fpc_abi_windowed)}
- function fpc_setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP']; compilerproc; nostackframe;
- asm
- j.l setjmp,a15
- end;
- procedure fpc_longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP']; compilerproc; nostackframe;
- asm
- j.l longjmp,a15
- end;
- {$else}
- function fpc_setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP']; compilerproc; nostackframe;
- asm
- entry a1,16
- movi.n a2,0
- end;
- procedure fpc_longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP']; compilerproc; nostackframe;
- asm
- entry a1,16
- movi.n a2,1
- movnez a2,value,value
- end;
- {$endif}
|