Rev 8097 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8097 | Rev 8859 | ||
---|---|---|---|
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-2020, Anton Krotov |
4 | Copyright (c) 2018-2021, Anton Krotov |
5 | All rights reserved. |
5 | All rights reserved. |
Line 6... | Line 6... | ||
6 | *) |
6 | *) |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | MODULE RTL; |
8 | MODULE RTL; |
Line 9... | Line -... | ||
9 | - | ||
10 | IMPORT SYSTEM, API; |
- | |
11 | 9 | ||
Line 12... | Line 10... | ||
12 | 10 | IMPORT SYSTEM, API; |
|
13 | CONST |
- | |
Line 14... | Line 11... | ||
14 | 11 | ||
Line 15... | Line 12... | ||
15 | bit_depth* = 32; |
12 | |
Line 70... | Line 67... | ||
70 | BEGIN |
67 | BEGIN |
71 | _move(MIN(len_dst, len_src) * chr_size, dst, src) |
68 | _move(MIN(len_dst, len_src) * chr_size, dst, src) |
72 | END _strcpy; |
69 | END _strcpy; |
Line 73... | Line 70... | ||
73 | 70 | ||
74 | - | ||
75 | PROCEDURE [stdcall] _rot* (VAR A: ARRAY OF INTEGER); |
- | |
76 | VAR |
- | |
77 | i, n, k: INTEGER; |
71 | |
78 | 72 | PROCEDURE [stdcall] _rot* (Len, Ptr: INTEGER); |
|
- | 73 | BEGIN |
|
- | 74 | SYSTEM.CODE( |
|
- | 75 | 08BH, 04DH, 008H, (* mov ecx, dword [ebp + 8] *) (* ecx <- Len *) |
|
- | 76 | 08BH, 045H, 00CH, (* mov eax, dword [ebp + 12] *) (* eax <- Ptr *) |
|
- | 77 | 049H, (* dec ecx *) |
|
- | 78 | 053H, (* push ebx *) |
|
- | 79 | 08BH, 018H, (* mov ebx, dword [eax] *) |
|
79 | BEGIN |
80 | (* L: *) |
80 | k := LEN(A) - 1; |
81 | 08BH, 050H, 004H, (* mov edx, dword [eax + 4] *) |
- | 82 | 089H, 010H, (* mov dword [eax], edx *) |
|
81 | n := A[0]; |
83 | 083H, 0C0H, 004H, (* add eax, 4 *) |
82 | i := 0; |
84 | 049H, (* dec ecx *) |
- | 85 | 075H, 0F5H, (* jnz L *) |
|
83 | WHILE i < k DO |
86 | 089H, 018H, (* mov dword [eax], ebx *) |
- | 87 | 05BH, (* pop ebx *) |
|
84 | A[i] := A[i + 1]; |
88 | 05DH, (* pop ebp *) |
85 | INC(i) |
- | |
86 | END; |
89 | 0C2H, 008H, 000H (* ret 8 *) |
Line 87... | Line 90... | ||
87 | A[k] := n |
90 | ) |
88 | END _rot; |
91 | END _rot; |
- | 92 | ||
- | 93 | ||
- | 94 | PROCEDURE [stdcall] _set* (b, a: INTEGER); (* {a..b} -> eax *) |
|
- | 95 | BEGIN |
|
- | 96 | SYSTEM.CODE( |
|
- | 97 | 08BH, 04DH, 008H, (* mov ecx, dword [ebp + 8] *) (* ecx <- b *) |
|
89 | 98 | 08BH, 045H, 00CH, (* mov eax, dword [ebp + 12] *) (* eax <- a *) |
|
- | 99 | 039H, 0C8H, (* cmp eax, ecx *) |
|
- | 100 | 07FH, 033H, (* jg L1 *) |
|
- | 101 | 083H, 0F8H, 01FH, (* cmp eax, 31 *) |
|
- | 102 | 07FH, 02EH, (* jg L1 *) |
|
- | 103 | 085H, 0C9H, (* test ecx, ecx *) |
|
- | 104 | 07CH, 02AH, (* jl L1 *) |
|
- | 105 | 083H, 0F9H, 01FH, (* cmp ecx, 31 *) |
|
- | 106 | 07EH, 005H, (* jle L3 *) |
|
- | 107 | 0B9H, 01FH, 000H, 000H, 000H, (* mov ecx, 31 *) |
|
- | 108 | (* L3: *) |
|
90 | 109 | 085H, 0C0H, (* test eax, eax *) |
|
91 | PROCEDURE [stdcall] _set* (b, a: INTEGER): INTEGER; |
110 | 07DH, 002H, (* jge L2 *) |
- | 111 | 031H, 0C0H, (* xor eax, eax *) |
|
92 | BEGIN |
112 | (* L2: *) |
93 | IF (a <= b) & (a <= MAX_SET) & (b >= 0) THEN |
113 | 089H, 0CAH, (* mov edx, ecx *) |
- | 114 | 029H, 0C2H, (* sub edx, eax *) |
|
- | 115 | 0B8H, 000H, 000H, 000H, 080H, (* mov eax, 0x80000000 *) |
|
- | 116 | 087H, 0CAH, (* xchg edx, ecx *) |
|
94 | IF b > MAX_SET THEN |
117 | 0D3H, 0F8H, (* sar eax, cl *) |
95 | b := MAX_SET |
118 | 087H, 0CAH, (* xchg edx, ecx *) |
96 | END; |
119 | 083H, 0E9H, 01FH, (* sub ecx, 31 *) |
97 | IF a < 0 THEN |
120 | 0F7H, 0D9H, (* neg ecx *) |
98 | a := 0 |
121 | 0D3H, 0E8H, (* shr eax, cl *) |
- | 122 | 05DH, (* pop ebp *) |
|
- | 123 | 0C2H, 008H, 000H, (* ret 8 *) |
|
99 | END; |
124 | (* L1: *) |
100 | a := LSR(ASR(minint, b - a), MAX_SET - b) |
- | |
101 | ELSE |
- | |
102 | a := 0 |
125 | 031H, 0C0H, (* xor eax, eax *) |
Line 103... | Line 126... | ||
103 | END |
126 | 05DH, (* pop ebp *) |
104 | 127 | 0C2H, 008H, 000H (* ret 8 *) |