Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7667 → Rev 7666

/programs/develop/oberon07/Compiler.kex
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/programs/develop/oberon07/Source/AMD64.ob07
666,7 → 666,6
reg: INTEGER;
max: INTEGER;
loop: INTEGER;
param2: INTEGER;
 
BEGIN
loop := 1;
731,38 → 730,11
 
|CODE.opCALL, CODE.opCALLP, CODE.opCALLI,
CODE.opWIN64CALL, CODE.opWIN64CALLP, CODE.opWIN64CALLI,
CODE.opSYSVCALL, CODE.opSYSVCALLP, CODE.opSYSVCALLI,
 
CODE.opSAVES, CODE.opRSET, CODE.opRSETR,
CODE.opRSETL, CODE.opRSET1,
CODE.opEQS .. CODE.opGES,
CODE.opEQS2 .. CODE.opGES2,
CODE.opEQSW .. CODE.opGESW,
CODE.opEQSW2 .. CODE.opGESW2,
CODE.opCOPY, CODE.opMOVE, CODE.opCOPYA,
CODE.opCOPYS, CODE.opCOPYS2, CODE.opROT,
CODE.opNEW, CODE.opDISP, CODE.opISREC,
CODE.opIS, CODE.opTYPEGR, CODE.opTYPEGP,
CODE.opCASET, CODE.opDIV,
CODE.opDIVL, CODE.opMOD,
CODE.opMODL, CODE.opLENGTH, CODE.opLENGTHW:
CODE.opSYSVCALL, CODE.opSYSVCALLP, CODE.opSYSVCALLI:
leaf := FALSE
 
|CODE.opDIVR, CODE.opMODR:
param2 := cur.param2;
IF param2 >= 1 THEN
param2 := X86.log2(param2)
ELSIF param2 <= -1 THEN
param2 := X86.log2(-param2)
ELSE
param2 := -1
END;
IF param2 < 0 THEN
leaf := FALSE
END
 
ELSE
 
END;
cur := cur.next(COMMAND)
UNTIL leave OR ~leaf;
1455,14 → 1427,6
PushAll(n)
END
|CODE.opACC:
IF (R.top # 0) OR (R.stk[0] # rax) THEN
PushAll(0);
GetRegA;
pop(rax);
DEC(R.pushed)
END
 
|CODE.opJNZ:
UnOp(reg1);
test(reg1);
/programs/develop/oberon07/Source/CODE.ob07
90,9 → 90,7
opWIN64CALL* = 238; opWIN64CALLI* = 239; opWIN64CALLP* = 240; opLOOP* = 241; opENDLOOP* = 242;
opSYSVCALL* = 243; opSYSVCALLI* = 244; opSYSVCALLP* = 245; opSYSVALIGN16* = 246; opWIN64ALIGN16* = 247;
opACC* = 248;
 
 
opSADR_PARAM* = 1000; opLOAD64_PARAM* = 1001; opLLOAD64_PARAM* = 1002; opGLOAD64_PARAM* = 1003;
opVADR_PARAM* = 1004; opCONST_PARAM* = 1005; opGLOAD32_PARAM* = 1006; opLLOAD32_PARAM* = 1007;
opLOAD32_PARAM* = 1008;
/programs/develop/oberon07/Source/STATEMENTS.ob07
1861,7 → 1861,6
IF e.obj = eCONST THEN
CODE.AddCmd(CODE.opCONST, ORD(ARITH.getBool(e.value)))
END;
CODE.AddCmd0(CODE.opACC);
CODE.AddJmpCmd(CODE.opJZ, label);
CODE.drop
END
1984,9 → 1983,8
e.obj := eEXPR;
IF e1.obj = eCONST THEN
CODE.AddCmd(CODE.opCONST, ORD(ARITH.getBool(e1.value)))
END;
CODE.AddCmd0(CODE.opACC)
END
END
 
END
END;
2058,7 → 2056,6
IF e.obj = eCONST THEN
CODE.AddCmd(CODE.opCONST, ORD(ARITH.getBool(e.value)))
END;
CODE.AddCmd0(CODE.opACC);
CODE.AddJmpCmd(CODE.opJNZ, label);
CODE.drop
END
2125,9 → 2122,8
e.obj := eEXPR;
IF e1.obj = eCONST THEN
CODE.AddCmd(CODE.opCONST, ORD(ARITH.getBool(e1.value)))
END;
CODE.AddCmd0(CODE.opACC)
END
END
 
END
END;
/programs/develop/oberon07/Source/STRINGS.ob07
1,7 → 1,7
(*
BSD 2-Clause License
 
Copyright (c) 2018, 2019, Anton Krotov
Copyright (c) 2018, Anton Krotov
All rights reserved.
*)
 
255,19 → 255,19
|0C1X..0DFX:
u := LSL(ORD(c) - 0C0H, 6);
IF i + 1 < srclen THEN
INC(i);
INC(u, ORD(BITS(ORD(src[i])) * {0..5}))
u := u + ROR(LSL(ORD(src[i + 1]), 26), 26);
INC(i)
END
 
|0E1X..0EFX:
u := LSL(ORD(c) - 0E0H, 12);
IF i + 1 < srclen THEN
INC(i);
INC(u, ORD(BITS(ORD(src[i])) * {0..5}) * 64)
u := u + ROR(LSL(ORD(src[i + 1]), 26), 20);
INC(i)
END;
IF i + 1 < srclen THEN
INC(i);
INC(u, ORD(BITS(ORD(src[i])) * {0..5}))
u := u + ROR(LSL(ORD(src[i + 1]), 26), 26);
INC(i)
END
(*
|0F1X..0F7X:
/programs/develop/oberon07/Source/X86.ob07
308,12 → 308,6
END setcc;
 
 
PROCEDURE xor (reg1, reg2: INTEGER);
BEGIN
OutByte2(31H, 0C0H + reg2 * 8 + reg1) // xor reg1, reg2
END xor;
 
 
PROCEDURE drop;
BEGIN
REG.Drop(R)
943,7 → 937,7
ELSIF a = -1 THEN
neg(reg1)
ELSIF a = 0 THEN
xor(reg1, reg1)
OutByte2(31H, 0C0H + reg1 * 9) // xor reg1, reg1
ELSE
IF n > 0 THEN
IF a < 0 THEN
1086,7 → 1080,7
reg1 := REG.GetAnyReg(R);
setcc(cc + 16, reg1);
andrc(reg1, 1)
END
END;
 
|CODE.opGT, CODE.opGE, CODE.opLT,
CODE.opLE, CODE.opEQ, CODE.opNE:
1135,14 → 1129,6
END;
andrc(reg1, 1)
|CODE.opACC:
IF (R.top # 0) OR (R.stk[0] # eax) THEN
PushAll(0);
GetRegA;
pop(eax);
DEC(R.pushed)
END
 
|CODE.opDROP:
UnOp(reg1);
drop
1358,7 → 1344,7
 
|CODE.opDIVS:
BinOp(reg1, reg2);
xor(reg1, reg2);
OutByte2(31H, 0C0H + reg2 * 8 + reg1); // xor reg1, reg2
drop
 
|CODE.opDIVSC:
1492,7 → 1478,7
BinOp(reg1, reg2);
cmprc(reg1, 32);
OutByte2(72H, 4); // jb L
xor(reg1, reg1);
OutByte2(31H, 0C0H + reg1 * 9); // xor reg1, reg1
jmp(label);
//L:
OutByte3(0FH, 0A3H, 0C0H + reg2 + 8 * reg1); // bt reg2, reg1
1507,7 → 1493,7
reg2 := REG.GetAnyReg(R);
cmprc(reg1, 32);
OutByte2(72H, 4); // jb L
xor(reg1, reg1);
OutByte2(31H, 0C0H + reg1 * 9); // xor reg1, reg1
jmp(label);
//L:
movrc(reg2, param2);
1645,7 → 1631,7
 
IF ABS(a) = 1 THEN
UnOp(reg1);
xor(reg1, reg1)
OutByte2(31H, 0C0H + reg1 * 9) // xor reg1, reg1
ELSE
IF n > 0 THEN
UnOp(reg1);