Subversion Repositories Kolibri OS

Rev

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;