Subversion Repositories Kolibri OS

Rev

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)