Rev 9177 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9177 | Rev 9847 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | (* |
1 | (* |
2 | BSD 2-Clause License |
2 | BSD 2-Clause License |
Line 3... | Line 3... | ||
3 | 3 | ||
4 | Copyright (c) 2018-2021, Anton Krotov |
4 | Copyright (c) 2018-2022, Anton Krotov |
5 | All rights reserved. |
5 | All rights reserved. |
Line 6... | Line 6... | ||
6 | *) |
6 | *) |
Line 13... | Line 13... | ||
13 | CONST |
13 | CONST |
Line 14... | Line 14... | ||
14 | 14 | ||
15 | call_stack* = 0; |
15 | call_stack* = 0; |
16 | call_win64* = 1; |
16 | call_win64* = 1; |
- | 17 | call_sysv* = 2; |
|
- | 18 | call_fast1* = 3; |
|
Line 17... | Line 19... | ||
17 | call_sysv* = 2; |
19 | call_fast2* = 4; |
Line 18... | Line 20... | ||
18 | 20 | ||
19 | begin_loop* = 1; end_loop* = 2; |
21 | begin_loop* = 1; end_loop* = 2; |
Line 78... | Line 80... | ||
78 | opLOAD64* = 202; opLLOAD64* = 203; opVLOAD64* = 204; opGLOAD64* = 205; opSAVE64* = 206; |
80 | opLOAD64* = 202; opLLOAD64* = 203; opVLOAD64* = 204; opGLOAD64* = 205; opSAVE64* = 206; |
Line 79... | Line 81... | ||
79 | 81 | ||
80 | opTYPEGD* = 207; opCALLI* = 208; opPUSHIP* = 209; opSAVEIP* = 210; opEQIP* = 211; opNEIP* = 212; |
82 | opTYPEGD* = 207; opCALLI* = 208; opPUSHIP* = 209; opSAVEIP* = 210; opEQIP* = 211; opNEIP* = 212; |
Line 81... | Line 83... | ||
81 | opSAVE16C* = 213; opWCHR* = 214; opHANDLER* = 215; |
83 | opSAVE16C* = 213; opWCHR* = 214; opHANDLER* = 215; |
Line 82... | Line 84... | ||
82 | 84 | ||
83 | opSYSVCALL* = 216; opSYSVCALLI* = 217; opSYSVCALLP* = 218; opFNAME* = 219; |
85 | opSYSVCALL* = 216; opSYSVCALLI* = 217; opSYSVCALLP* = 218; opFNAME* = 219; opFASTCALL* = 220; |
84 | 86 | ||
Line 798... | Line 800... | ||
798 | AddCmd0(opLEAVEC) |
800 | AddCmd0(opLEAVEC) |
799 | RETURN codes.last |
801 | RETURN codes.last |
800 | END LeaveC; |
802 | END LeaveC; |
Line -... | Line 803... | ||
- | 803 | ||
- | 804 | ||
- | 805 | PROCEDURE fastcall (VAR callconv: INTEGER); |
|
- | 806 | BEGIN |
|
- | 807 | IF callconv = call_fast1 THEN |
|
- | 808 | AddCmd(opFASTCALL, 1); |
|
- | 809 | callconv := call_stack |
|
- | 810 | ELSIF callconv = call_fast2 THEN |
|
- | 811 | AddCmd(opFASTCALL, 2); |
|
- | 812 | callconv := call_stack |
|
- | 813 | END |
|
- | 814 | END fastcall; |
|
801 | 815 | ||
802 | 816 | ||
- | 817 | PROCEDURE Call* (proc, callconv, fparams: INTEGER); |
|
803 | PROCEDURE Call* (proc, callconv, fparams: INTEGER); |
818 | BEGIN |
804 | BEGIN |
819 | fastcall(callconv); |
805 | CASE callconv OF |
820 | CASE callconv OF |
806 | |call_stack: Jmp(opCALL, proc) |
821 | |call_stack: Jmp(opCALL, proc) |
807 | |call_win64: Jmp(opWIN64CALL, proc) |
822 | |call_win64: Jmp(opWIN64CALL, proc) |
Line 811... | Line 826... | ||
811 | END Call; |
826 | END Call; |
Line 812... | Line 827... | ||
812 | 827 | ||
813 | 828 | ||
- | 829 | PROCEDURE CallImp* (proc: LISTS.ITEM; callconv, fparams: INTEGER); |
|
814 | PROCEDURE CallImp* (proc: LISTS.ITEM; callconv, fparams: INTEGER); |
830 | BEGIN |
815 | BEGIN |
831 | fastcall(callconv); |
816 | CASE callconv OF |
832 | CASE callconv OF |
817 | |call_stack: Jmp(opCALLI, proc(IMPORT_PROC).label) |
833 | |call_stack: Jmp(opCALLI, proc(IMPORT_PROC).label) |
818 | |call_win64: Jmp(opWIN64CALLI, proc(IMPORT_PROC).label) |
834 | |call_win64: Jmp(opWIN64CALLI, proc(IMPORT_PROC).label) |
Line 822... | Line 838... | ||
822 | END CallImp; |
838 | END CallImp; |
Line 823... | Line 839... | ||
823 | 839 | ||
824 | 840 | ||
- | 841 | PROCEDURE CallP* (callconv, fparams: INTEGER); |
|
825 | PROCEDURE CallP* (callconv, fparams: INTEGER); |
842 | BEGIN |
826 | BEGIN |
843 | fastcall(callconv); |
827 | CASE callconv OF |
844 | CASE callconv OF |
828 | |call_stack: AddCmd0(opCALLP) |
845 | |call_stack: AddCmd0(opCALLP) |
829 | |call_win64: AddCmd(opWIN64CALLP, fparams) |
846 | |call_win64: AddCmd(opWIN64CALLP, fparams) |