Rev 7597 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7597 | Rev 7667 | ||
---|---|---|---|
Line 306... | Line 306... | ||
306 | BEGIN |
306 | BEGIN |
307 | OutByte3(0FH, cond, 0C0H + reg) // setcc reg |
307 | OutByte3(0FH, cond, 0C0H + reg) // setcc reg |
308 | END setcc; |
308 | END setcc; |
Line -... | Line 309... | ||
- | 309 | ||
- | 310 | ||
- | 311 | PROCEDURE xor (reg1, reg2: INTEGER); |
|
- | 312 | BEGIN |
|
- | 313 | OutByte2(31H, 0C0H + reg2 * 8 + reg1) // xor reg1, reg2 |
|
- | 314 | END xor; |
|
309 | 315 | ||
310 | 316 | ||
311 | PROCEDURE drop; |
317 | PROCEDURE drop; |
312 | BEGIN |
318 | BEGIN |
Line 935... | Line 941... | ||
935 | IF a = 1 THEN |
941 | IF a = 1 THEN |
Line 936... | Line 942... | ||
936 | 942 | ||
937 | ELSIF a = -1 THEN |
943 | ELSIF a = -1 THEN |
938 | neg(reg1) |
944 | neg(reg1) |
939 | ELSIF a = 0 THEN |
945 | ELSIF a = 0 THEN |
940 | OutByte2(31H, 0C0H + reg1 * 9) // xor reg1, reg1 |
946 | xor(reg1, reg1) |
941 | ELSE |
947 | ELSE |
942 | IF n > 0 THEN |
948 | IF n > 0 THEN |
943 | IF a < 0 THEN |
949 | IF a < 0 THEN |
944 | neg(reg1) |
950 | neg(reg1) |
Line 1078... | Line 1084... | ||
1078 | 1084 | ||
1079 | ELSE |
1085 | ELSE |
1080 | reg1 := REG.GetAnyReg(R); |
1086 | reg1 := REG.GetAnyReg(R); |
1081 | setcc(cc + 16, reg1); |
1087 | setcc(cc + 16, reg1); |
1082 | andrc(reg1, 1) |
1088 | andrc(reg1, 1) |
Line 1083... | Line 1089... | ||
1083 | END; |
1089 | END |
1084 | 1090 | ||
1085 | |CODE.opGT, CODE.opGE, CODE.opLT, |
1091 | |CODE.opGT, CODE.opGE, CODE.opLT, |
1086 | CODE.opLE, CODE.opEQ, CODE.opNE: |
1092 | CODE.opLE, CODE.opEQ, CODE.opNE: |
Line 1127... | Line 1133... | ||
1127 | ELSE |
1133 | ELSE |
1128 | setcc(setne, reg1) |
1134 | setcc(setne, reg1) |
1129 | END; |
1135 | END; |
1130 | andrc(reg1, 1) |
1136 | andrc(reg1, 1) |
Line -... | Line 1137... | ||
- | 1137 | ||
- | 1138 | |CODE.opACC: |
|
- | 1139 | IF (R.top # 0) OR (R.stk[0] # eax) THEN |
|
- | 1140 | PushAll(0); |
|
- | 1141 | GetRegA; |
|
- | 1142 | pop(eax); |
|
- | 1143 | DEC(R.pushed) |
|
- | 1144 | END |
|
1131 | 1145 | ||
1132 | |CODE.opDROP: |
1146 | |CODE.opDROP: |
1133 | UnOp(reg1); |
1147 | UnOp(reg1); |
Line 1134... | Line 1148... | ||
1134 | drop |
1148 | drop |
Line 1342... | Line 1356... | ||
1342 | UnOp(reg1); |
1356 | UnOp(reg1); |
1343 | andrc(reg1, param2) |
1357 | andrc(reg1, param2) |
Line 1344... | Line 1358... | ||
1344 | 1358 | ||
1345 | |CODE.opDIVS: |
1359 | |CODE.opDIVS: |
1346 | BinOp(reg1, reg2); |
1360 | BinOp(reg1, reg2); |
1347 | OutByte2(31H, 0C0H + reg2 * 8 + reg1); // xor reg1, reg2 |
1361 | xor(reg1, reg2); |
Line 1348... | Line 1362... | ||
1348 | drop |
1362 | drop |
1349 | 1363 | ||
1350 | |CODE.opDIVSC: |
1364 | |CODE.opDIVSC: |
Line 1476... | Line 1490... | ||
1476 | |CODE.opIN: |
1490 | |CODE.opIN: |
1477 | label := NewLabel(); |
1491 | label := NewLabel(); |
1478 | BinOp(reg1, reg2); |
1492 | BinOp(reg1, reg2); |
1479 | cmprc(reg1, 32); |
1493 | cmprc(reg1, 32); |
1480 | OutByte2(72H, 4); // jb L |
1494 | OutByte2(72H, 4); // jb L |
1481 | OutByte2(31H, 0C0H + reg1 * 9); // xor reg1, reg1 |
1495 | xor(reg1, reg1); |
1482 | jmp(label); |
1496 | jmp(label); |
1483 | //L: |
1497 | //L: |
1484 | OutByte3(0FH, 0A3H, 0C0H + reg2 + 8 * reg1); // bt reg2, reg1 |
1498 | OutByte3(0FH, 0A3H, 0C0H + reg2 + 8 * reg1); // bt reg2, reg1 |
1485 | setcc(setc, reg1); |
1499 | setcc(setc, reg1); |
1486 | andrc(reg1, 1); |
1500 | andrc(reg1, 1); |
Line 1491... | Line 1505... | ||
1491 | label := NewLabel(); |
1505 | label := NewLabel(); |
1492 | UnOp(reg1); |
1506 | UnOp(reg1); |
1493 | reg2 := REG.GetAnyReg(R); |
1507 | reg2 := REG.GetAnyReg(R); |
1494 | cmprc(reg1, 32); |
1508 | cmprc(reg1, 32); |
1495 | OutByte2(72H, 4); // jb L |
1509 | OutByte2(72H, 4); // jb L |
1496 | OutByte2(31H, 0C0H + reg1 * 9); // xor reg1, reg1 |
1510 | xor(reg1, reg1); |
1497 | jmp(label); |
1511 | jmp(label); |
1498 | //L: |
1512 | //L: |
1499 | movrc(reg2, param2); |
1513 | movrc(reg2, param2); |
1500 | OutByte3(0FH, 0A3H, 0C0H + reg2 + 8 * reg1); // bt reg2, reg1 |
1514 | OutByte3(0FH, 0A3H, 0C0H + reg2 + 8 * reg1); // bt reg2, reg1 |
1501 | setcc(setc, reg1); |
1515 | setcc(setc, reg1); |
Line 1629... | Line 1643... | ||
1629 | n := -1 |
1643 | n := -1 |
1630 | END; |
1644 | END; |
Line 1631... | Line 1645... | ||
1631 | 1645 | ||
1632 | IF ABS(a) = 1 THEN |
1646 | IF ABS(a) = 1 THEN |
1633 | UnOp(reg1); |
1647 | UnOp(reg1); |
1634 | OutByte2(31H, 0C0H + reg1 * 9) // xor reg1, reg1 |
1648 | xor(reg1, reg1) |
1635 | ELSE |
1649 | ELSE |
1636 | IF n > 0 THEN |
1650 | IF n > 0 THEN |
1637 | UnOp(reg1); |
1651 | UnOp(reg1); |