Rev 7983 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7983 | Rev 8097 | ||
---|---|---|---|
Line 614... | Line 614... | ||
614 | END genbc; |
614 | END genbc; |
Line 615... | Line 615... | ||
615 | 615 | ||
616 | 616 | ||
617 | PROCEDURE SetIV (idx, label, CodeAdr: INTEGER); |
617 | PROCEDURE SetIV (idx, label, CodeAdr: INTEGER); |
Line 618... | Line 618... | ||
618 | VAR |
618 | VAR |
619 | l, h: ANYCODE; |
619 | l, h: LISTS.ITEM; |
620 | 620 | ||
621 | BEGIN |
621 | BEGIN |
622 | l := CodeList.first(ANYCODE); |
622 | l := CodeList.first; |
623 | h := l.next(ANYCODE); |
623 | h := l.next; |
624 | WHILE idx > 0 DO |
624 | WHILE idx > 0 DO |
625 | l := h.next(ANYCODE); |
625 | l := h.next; |
626 | h := l.next(ANYCODE); |
626 | h := l.next; |
627 | DEC(idx) |
627 | DEC(idx) |
628 | END; |
628 | END; |
Line 782... | Line 782... | ||
782 | END mov; |
782 | END mov; |
Line 783... | Line 783... | ||
783 | 783 | ||
784 | 784 | ||
785 | PROCEDURE xchg (r1, r2: INTEGER); |
785 | PROCEDURE xchg (r1, r2: INTEGER); |
786 | BEGIN |
786 | BEGIN |
- | 787 | push(r1); |
|
787 | push(r1); push(r2); |
788 | mov(r1, r2); |
Line 788... | Line 789... | ||
788 | pop(r1); pop(r2) |
789 | pop(r2) |
789 | END xchg; |
790 | END xchg; |
Line 1090... | Line 1091... | ||
1090 | |IL.opCALL: |
1091 | |IL.opCALL: |
1091 | call(param1) |
1092 | call(param1) |
Line 1092... | Line 1093... | ||
1092 | 1093 | ||
1093 | |IL.opCALLP: |
1094 | |IL.opCALLP: |
1094 | UnOp(r1); |
1095 | UnOp(r1); |
1095 | AddImm8(r1, 1); |
1096 | AddImm8(r1, 1); (* Thumb mode *) |
1096 | gen5(3, TRUE, FALSE, r1, 0); (* blx r1 *) |
1097 | gen5(3, TRUE, FALSE, r1, 0); (* blx r1 *) |
1097 | drop; |
1098 | drop; |
Line 1098... | Line 1099... | ||
1098 | ASSERT(R.top = -1) |
1099 | ASSERT(R.top = -1) |
Line 1174... | Line 1175... | ||
1174 | jmp(param1) |
1175 | jmp(param1) |
Line 1175... | Line 1176... | ||
1175 | 1176 | ||
1176 | |IL.opERR: |
1177 | |IL.opERR: |
Line 1177... | Line 1178... | ||
1177 | call(genTrap) |
1178 | call(genTrap) |
Line 1178... | Line 1179... | ||
1178 | 1179 | ||
1179 | |IL.opNOP: |
1180 | |IL.opNOP, IL.opAND, IL.opOR: |
Line 1180... | Line 1181... | ||
1180 | 1181 | ||
Line 1345... | Line 1346... | ||
1345 | SetCC(je, r1) |
1346 | SetCC(je, r1) |
1346 | ELSE |
1347 | ELSE |
1347 | SetCC(jne, r1) |
1348 | SetCC(jne, r1) |
1348 | END |
1349 | END |
Line 1349... | Line -... | ||
1349 | - | ||
1350 | |IL.opACC: |
- | |
1351 | IF (R.top # 0) OR (R.stk[0] # ACC) THEN |
- | |
1352 | PushAll(0); |
- | |
1353 | GetRegA; |
- | |
1354 | pop(ACC); |
- | |
1355 | DEC(R.pushed) |
- | |
1356 | END |
- | |
1357 | 1350 | ||
1358 | |IL.opDROP: |
1351 | |IL.opDROP: |
1359 | UnOp(r1); |
1352 | UnOp(r1); |
Line 1360... | Line 1353... | ||
1360 | drop |
1353 | drop |
1361 | 1354 | ||
1362 | |IL.opJNZ: |
1355 | |IL.opJNZ1: |
Line 1363... | Line -... | ||
1363 | UnOp(r1); |
- | |
1364 | cbnz(r1, param1) |
- | |
1365 | - | ||
1366 | |IL.opJZ: |
- | |
1367 | UnOp(r1); |
1356 | UnOp(r1); |
1368 | cbz(r1, param1) |
1357 | cbnz(r1, param1) |
1369 | 1358 | ||
1370 | |IL.opJG: |
1359 | |IL.opJG: |
Line 1371... | Line 1360... | ||
1371 | UnOp(r1); |
1360 | UnOp(r1); |
1372 | Tst(r1); |
1361 | Tst(r1); |
1373 | jcc(jg, param1) |
1362 | jcc(jg, param1) |
1374 | 1363 | ||
Line 1375... | Line 1364... | ||
1375 | |IL.opJE: |
1364 | |IL.opJNZ: |
1376 | UnOp(r1); |
1365 | UnOp(r1); |
1377 | cbnz(r1, param1); |
1366 | cbnz(r1, param1); |
1378 | drop |
1367 | drop |
Line 1379... | Line 1368... | ||
1379 | 1368 | ||
Line 1433... | Line 1422... | ||
1433 | 1422 | ||
1434 | drop; |
1423 | drop; |
1435 | cc := cond(opcode); |
1424 | cc := cond(opcode); |
Line 1436... | Line 1425... | ||
1436 | next := cmd.next(COMMAND); |
1425 | next := cmd.next(COMMAND); |
1437 | 1426 | ||
1438 | IF next.opcode = IL.opJE THEN |
1427 | IF next.opcode = IL.opJNZ THEN |
1439 | jcc(cc, next.param1); |
1428 | jcc(cc, next.param1); |
1440 | cmd := next |
1429 | cmd := next |
1441 | ELSIF next.opcode = IL.opJNE THEN |
1430 | ELSIF next.opcode = IL.opJZ THEN |
1442 | jcc(inv0(cc), next.param1); |
1431 | jcc(inv0(cc), next.param1); |
1443 | cmd := next |
1432 | cmd := next |
1444 | ELSE |
1433 | ELSE |
Line 1485... | Line 1474... | ||
1485 | ELSE |
1474 | ELSE |
1486 | AddReg(r1, r1, r2) |
1475 | AddReg(r1, r1, r2) |
1487 | END; |
1476 | END; |
1488 | drop |
1477 | drop |
Line 1489... | Line 1478... | ||
1489 | 1478 | ||
1490 | |IL.opADDL, IL.opADDR: |
1479 | |IL.opADDC: |
1491 | UnOp(r1); |
1480 | UnOp(r1); |
Line 1492... | Line 1481... | ||
1492 | AddConst(r1, param2) |
1481 | AddConst(r1, param2) |
1493 | 1482 | ||
Line 1759... | Line 1748... | ||
1759 | |IL.opSUBS: |
1748 | |IL.opSUBS: |
1760 | BinOp(r1, r2); |
1749 | BinOp(r1, r2); |
1761 | gen4(14, r2, r1); (* bic r1, r2 *) |
1750 | gen4(14, r2, r1); (* bic r1, r2 *) |
1762 | drop |
1751 | drop |
Line 1763... | Line 1752... | ||
1763 | 1752 | ||
1764 | |IL.opADDSL, IL.opADDSR: |
1753 | |IL.opADDSC: |
1765 | MovConst(GetAnyReg(), param2); |
1754 | MovConst(GetAnyReg(), param2); |
1766 | BinOp(r1, r2); |
1755 | BinOp(r1, r2); |
1767 | gen4(12, r2, r1); (* orr r1, r2 *) |
1756 | gen4(12, r2, r1); (* orr r1, r2 *) |
Line 2012... | Line 2001... | ||
2012 | |IL.opDIVFI: |
2001 | |IL.opDIVFI: |
2013 | PushAll(2); |
2002 | PushAll(2); |
2014 | CallRTL(IL._fdivi, 2); |
2003 | CallRTL(IL._fdivi, 2); |
2015 | GetRegA |
2004 | GetRegA |
Line 2016... | Line 2005... | ||
2016 | 2005 | ||
2017 | |IL.opADDF, IL.opADDFI: |
2006 | |IL.opADDF: |
2018 | PushAll(2); |
2007 | PushAll(2); |
2019 | CallRTL(IL._fadd, 2); |
2008 | CallRTL(IL._fadd, 2); |
Line 2020... | Line 2009... | ||
2020 | GetRegA |
2009 | GetRegA |
Line 2334... | Line 2323... | ||
2334 | 2323 | ||
Line 2335... | Line 2324... | ||
2335 | ram, rom: INTEGER; |
2324 | ram, rom: INTEGER; |
Line 2336... | Line -... | ||
2336 | - | ||
2337 | DataAdr, BssAdr, DataSize, BssSize, CodeSize: INTEGER; |
- | |
2338 | 2325 | ||
2339 | File: WR.FILE; |
2326 | DataAdr, BssAdr, DataSize, BssSize, CodeSize: INTEGER; |
2340 | 2327 | ||
2341 | BEGIN |
2328 | BEGIN |
Line 2385... | Line 2372... | ||
2385 | 2372 | ||
2386 | IF DataSize > ram - Target.MinStack THEN |
2373 | IF DataSize > ram - Target.MinStack THEN |
2387 | ERRORS.Error(204) |
2374 | ERRORS.Error(204) |
Line 2388... | Line 2375... | ||
2388 | END; |
2375 | END; |
Line 2389... | Line 2376... | ||
2389 | 2376 | ||
2390 | File := WR.Create(outname); |
2377 | WR.Create(outname); |
Line 2391... | Line 2378... | ||
2391 | 2378 | ||
Line 2392... | Line 2379... | ||
2392 | HEX.Data2(File, program.code, 0, CodeSize, high(Target.FlashAdr)); |
2379 | HEX.Data2(program.code, 0, CodeSize, high(Target.FlashAdr)); |
2393 | HEX.End(File); |
2380 | HEX.End; |
2394 | 2381 | ||
2395 | WR.Close(File); |
2382 | WR.Close; |