Rev 8859 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8859 | 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 679... | Line 679... | ||
679 | VAR |
679 | VAR |
680 | cmd, next: COMMAND; |
680 | cmd, next: COMMAND; |
Line 681... | Line 681... | ||
681 | 681 | ||
Line 682... | Line 682... | ||
682 | opcode, param1, param2, param3, a, b, c, n, label, L, i, cc: INTEGER; |
682 | opcode, param1, param2, param3, a, b, c, n, label, L, i, cc: INTEGER; |
Line 683... | Line 683... | ||
683 | 683 | ||
Line 684... | Line 684... | ||
684 | reg1, reg2, xmm: INTEGER; |
684 | reg1, reg2, reg3, xmm: INTEGER; |
685 | 685 | ||
Line 1286... | Line 1286... | ||
1286 | |IL.opUMINS: |
1286 | |IL.opUMINS: |
1287 | UnOp(reg1); |
1287 | UnOp(reg1); |
1288 | not(reg1) |
1288 | not(reg1) |
Line 1289... | Line 1289... | ||
1289 | 1289 | ||
- | 1290 | |IL.opCOPY: |
|
- | 1291 | IF (0 < param2) & (param2 <= 256) THEN |
|
- | 1292 | BinOp(reg1, reg2); |
|
- | 1293 | reg3 := GetAnyReg(); |
|
- | 1294 | FOR n := 0 TO param2 - param2 MOD 8 - 1 BY 8 DO |
|
- | 1295 | movrm(reg3, reg1, n); |
|
- | 1296 | movmr(reg2, n, reg3) |
|
- | 1297 | END; |
|
- | 1298 | n := param2 - param2 MOD 8; |
|
- | 1299 | IF param2 MOD 8 >= 4 THEN |
|
- | 1300 | movrm32(reg3, reg1, n); |
|
- | 1301 | movmr32(reg2, n, reg3); |
|
- | 1302 | INC(n, 4); |
|
- | 1303 | DEC(param2, 4) |
|
- | 1304 | END; |
|
- | 1305 | IF param2 MOD 8 >= 2 THEN |
|
- | 1306 | X86.movrm16(reg3, reg1, n); |
|
- | 1307 | X86.movmr16(reg2, n, reg3); |
|
- | 1308 | INC(n, 2); |
|
- | 1309 | DEC(param2, 2) |
|
- | 1310 | END; |
|
- | 1311 | IF param2 MOD 8 = 1 THEN |
|
- | 1312 | X86.movrm8(reg3, reg1, n); |
|
- | 1313 | X86.movmr8(reg2, n, reg3); |
|
- | 1314 | END; |
|
- | 1315 | drop; |
|
- | 1316 | drop; |
|
- | 1317 | drop |
|
1290 | |IL.opCOPY: |
1318 | ELSE |
1291 | PushAll(2); |
1319 | PushAll(2); |
1292 | pushc(param2); |
1320 | pushc(param2); |
- | 1321 | CallRTL(IL._move) |
|
Line 1293... | Line 1322... | ||
1293 | CallRTL(IL._move) |
1322 | END |
1294 | 1323 | ||
1295 | |IL.opMOVE: |
1324 | |IL.opMOVE: |