Add SYSTEM.SET32 and 64 types. Fix 32 bit build.

This commit is contained in:
David Brown 2016-09-28 18:48:56 +01:00
parent 212bcd58b9
commit 25d99fd36a
8 changed files with 51 additions and 26 deletions

View file

@ -157,7 +157,7 @@ full: configuration
@make -f src/tools/make/oberon.mk -s browsercmd MODEL=2
@printf "\n\n--- Library build started ---\n\n"
@make -f src/tools/make/oberon.mk -s O2library
@make -f src/tools/make/oberon.mk -s OakwoodLibrary MODEL=C
@make -f src/tools/make/oberon.mk -s runtime MODEL=C
@printf "\n\n--- Library build successfull ---\n\n"
@make -f src/tools/make/oberon.mk -s sourcechanges
@make -f src/tools/make/oberon.mk -s install
@ -192,7 +192,13 @@ browsercmd: configuration
# library: build all directories under src/library
library: configuration
@make -f src/tools/make/oberon.mk -s O2library
@make -f src/tools/make/oberon.mk -s OakwoodLibrary MODEL=C
@make -f src/tools/make/oberon.mk -s runtime MODEL=C
runtime: configuration
@make -f src/tools/make/oberon.mk -s runtime MODEL=C
# Individual library components
v4: configuration

View file

@ -55,7 +55,6 @@ MODULE Compiler; (* J. Templ 3.2.95 *)
BEGIN
OPT.sysptrtyp.size := OPM.AddressSize;
OPT.adrtyp.size := OPM.AddressSize;
OPT.settyp.size := OPM.SetSize;
adrinttyp := OPT.IntType(OPM.AddressSize);
OPT.adrtyp.strobj := adrinttyp.strobj;
@ -68,6 +67,13 @@ MODULE Compiler; (* J. Templ 3.2.95 *)
OPT.intobj.typ := OPT.inttyp;
OPT.lintobj.typ := OPT.linttyp;
(*OPT.settyp.size := OPM.SetSize;*)
CASE OPM.LongintSize OF
|4: OPT.settyp := OPT.set32typ
ELSE OPT.settyp := OPT.set64typ
END;
OPT.setobj.typ := OPT.settyp;
(* Enable or disable (non-system) BYTE type *)
IF OPM.Model = "C" THEN
OPT.cpbytetyp.strobj.name[4] := 0X (* Enable Component Pascal non-system BYTE type *)

View file

@ -111,9 +111,11 @@ MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *)
IF hashtab[h] >= 0 THEN
IF keytab[hashtab[h]] = obj^.name THEN OPM.Write('_') END
END
ELSIF (mode = OPT.Typ) & (obj.typ.form = OPT.Int) THEN
ELSIF (mode = OPT.Typ) & (obj.typ.form IN {OPT.Int, OPT.Set}) THEN
IF obj.typ = OPT.adrtyp THEN OPM.WriteString("address")
ELSE OPM.WriteString("int"); OPM.WriteInt(obj.typ.size*8)
ELSE
IF obj.typ.form = OPT.Int THEN OPM.WriteString("int") ELSE OPM.WriteString("uint") END;
OPM.WriteInt(obj.typ.size*8)
END
ELSE
IF (mode # OPT.Typ) OR (obj^.linkadr # PredefinedType) THEN

View file

@ -155,10 +155,11 @@ VAR
bytetyp*, cpbytetyp*, booltyp*, chartyp*,
sinttyp*, inttyp*, linttyp*, hinttyp*,
int8typ*, int16typ*, int32typ*, int64typ*,
realtyp*, lrltyp*, settyp*, stringtyp*,
settyp*, set32typ*, set64typ*,
realtyp*, lrltyp*, stringtyp*,
adrtyp*, sysptrtyp*: Struct;
sintobj*, intobj*, lintobj*: Object;
sintobj*, intobj*, lintobj*, setobj*: Object;
nofGmod*: SHORTINT; (*nof imports*)
GlbMod*: ARRAY maxImps OF Object; (* ^.right = first object, ^.name = module import name (not alias) *)
@ -229,6 +230,12 @@ BEGIN
RETURN int64typ
END IntType;
PROCEDURE SetType*(size: LONGINT): Struct;
BEGIN
IF size = set32typ.size THEN RETURN set32typ END;
RETURN set64typ
END SetType;
PROCEDURE ShorterOrLongerType*(x: Struct; dir: INTEGER): Struct;
VAR i: INTEGER;
BEGIN
@ -803,10 +810,9 @@ END InTProc;
PROCEDURE InTyp(tag: LONGINT): Struct;
BEGIN
IF tag = Int THEN
RETURN IntType(OPM.SymRInt())
ELSE
RETURN impCtxt.ref[tag]
IF tag = Int THEN RETURN IntType(OPM.SymRInt())
ELSIF tag = Set THEN RETURN SetType(OPM.SymRInt())
ELSE RETURN impCtxt.ref[tag]
END
END InTyp;
@ -1124,7 +1130,7 @@ END Import;
VAR strobj: Object;
BEGIN
IF (typ^.ref < expCtxt.ref) THEN OPM.SymWInt(-typ^.ref);
IF typ.ref = Int THEN OPM.SymWInt(typ.size) END
IF typ.ref IN {Int, Set} THEN OPM.SymWInt(typ.size) END
ELSE
OPM.SymWInt(Sstruct);
typ^.ref := expCtxt.ref; INC(expCtxt.ref);
@ -1170,7 +1176,7 @@ END Import;
| Bool,
Char: OPM.SymWCh(CHR(obj^.conval^.intval))
| Int: OPM.SymWInt(obj^.conval^.intval); OPM.SymWInt(obj.typ.size)
| Set: OPM.SymWSet(obj^.conval^.setval)
| Set: OPM.SymWSet(obj^.conval^.setval); OPM.SymWInt(obj.typ.size)
| Real: rval := SHORT(obj^.conval^.realval); OPM.SymWReal(rval)
| LReal: OPM.SymWLReal(obj^.conval^.realval)
| String: OutName(obj^.conval^.ext^)
@ -1301,6 +1307,8 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
EnterTyp("INT16", Int, 2, int16typ);
EnterTyp("INT32", Int, 4, int32typ);
EnterTyp("INT64", Int, 8, int64typ);
EnterTyp("SET32", Set, 4, set32typ);
EnterTyp("SET64", Set, 8, set64typ);
EnterProc("ADR", adrfn);
EnterProc("CC", ccfn);
@ -1321,7 +1329,7 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
EnterTyp("BOOLEAN", Bool, 1, booltyp);
EnterTyp("CHAR", Char, 1, chartyp);
EnterTyp("SET", Set, -1, settyp); (* Size set in Compiler.PropagateElementaryTypeSize *)
(*EnterTyp("SET", Set, -1, settyp);*) (* Size set in Compiler.PropagateElementaryTypeSize *)
EnterTyp("REAL", Real, 4, realtyp);
EnterTyp("LONGREAL", LReal, 8, lrltyp);
EnterTyp("HUGEINT", Int, 8, hinttyp);
@ -1330,6 +1338,8 @@ BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0;
EnterTypeAlias("SHORTINT", sintobj);
EnterTypeAlias("INTEGER", intobj);
EnterTypeAlias("LONGINT", lintobj);
EnterTypeAlias("SET", setobj);
EnterBoolConst("FALSE", 0); (* 0 and 1 are compiler internal representation only *)
EnterBoolConst("TRUE", 1);

View file

@ -145,6 +145,8 @@ MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
OPT.int16typ^.strobj^.linkadr := PredefinedType;
OPT.int32typ^.strobj^.linkadr := PredefinedType;
OPT.int64typ^.strobj^.linkadr := PredefinedType;
OPT.set32typ^.strobj^.linkadr := PredefinedType;
OPT.set64typ^.strobj^.linkadr := PredefinedType;
OPT.hinttyp.strobj.linkadr := PredefinedType;
OPT.lrltyp^.strobj^.linkadr := PredefinedType;
OPT.booltyp^.strobj^.linkadr := PredefinedType;

View file

@ -73,6 +73,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
PROCEDURE -IdxTrap "__HALT(-1)";
PROCEDURE -ToAdr(x: SYSTEM.INT64): SYSTEM.ADDRESS "(address)x";
PROCEDURE^ Finalize(o: SYSTEM.PTR);
@ -427,7 +428,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
restInBuf := buf.size - offset;
IF restInBuf = 0 THEN r.res := n; r.eof := TRUE; RETURN
ELSIF n > restInBuf THEN min := restInBuf ELSE min := n END;
SYSTEM.MOVE(SYSTEM.ADR(buf.data) + offset, SYSTEM.ADR(x) + xpos, min);
SYSTEM.MOVE(SYSTEM.ADR(buf.data) + ToAdr(offset), SYSTEM.ADR(x) + ToAdr(xpos), min);
INC(offset, min); r.offset := offset; INC(xpos, min); DEC(n, min)
END;
r.res := 0; r.eof := FALSE
@ -465,7 +466,7 @@ MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files
END;
restInBuf := bufsize - offset;
IF n > restInBuf THEN min := restInBuf ELSE min := n END;
SYSTEM.MOVE(SYSTEM.ADR(x) + xpos, SYSTEM.ADR(buf.data) + offset, min);
SYSTEM.MOVE(SYSTEM.ADR(x) + ToAdr(xpos), SYSTEM.ADR(buf.data) + ToAdr(offset), min);
INC(offset, min); r.offset := offset;
IF offset > buf.size THEN INC(buf.f.len, offset - buf.size); buf.size := offset END;
INC(xpos, min); DEC(n, min); buf.chg := TRUE

View file

@ -389,7 +389,7 @@ END ReadBuf;
PROCEDURE -writefile(fd: LONGINT; p: SYSTEM.ADDRESS; l: SYSTEM.ADDRESS): SYSTEM.ADDRESS
PROCEDURE -writefile(fd: LONGINT; p: SYSTEM.ADDRESS; l: LONGINT): SYSTEM.ADDRESS
"write(fd, (void*)(address)(p), l)";
PROCEDURE Write*(h: FileHandle; p: SYSTEM.ADDRESS; l: LONGINT): ErrorCode;

View file

@ -189,7 +189,9 @@ uninstall:
runtime:
@printf "\nMaking v4 library for -O$(MODEL)\n"
@printf "\nMaking run time library for -O$(MODEL)\n"
mkdir -p $(BUILDDIR)/$(MODEL)
cp src/system/*.[ch] $(BUILDDIR)/$(MODEL)
cd $(BUILDDIR)/$(MODEL) && $(COMPILE) -c SYSTEM.c
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Platform$(PLATFORM).Mod
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Heap.Mod
@ -204,6 +206,10 @@ runtime:
# cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/MathL.Mod
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Texts.Mod
cd $(BUILDDIR)/$(MODEL); $(ROOTDIR)/$(OBECOMP) -Ffs -O$(MODEL) ../../../src/runtime/Oberon.Mod
@printf "\nMaking lib$(ONAME)$(MODEL)\n"
ar rcs "$(BUILDDIR)/$(MODEL)/lib$(ONAME)$(MODEL).a" $(BUILDDIR)/$(MODEL)/*.o
@cd $(BUILDDIR)/$(MODEL) && $(COMPILE) -shared -o lib$(ONAME)$(MODEL).so *.o
v4:
@ -369,14 +375,6 @@ O2library: v4 ooc2 ooc ulm pow32 misc s3
OakwoodLibrary:
@printf "\nMaking lib$(ONAME)$(MODEL)\n"
mkdir -p $(BUILDDIR)/$(MODEL)
cp src/system/*.[ch] $(BUILDDIR)/$(MODEL)
@make -f src/tools/make/oberon.mk -s runtime MODEL=$(MODEL)
ar rcs "$(BUILDDIR)/$(MODEL)/lib$(ONAME)$(MODEL).a" $(BUILDDIR)/$(MODEL)/*.o
@cd $(BUILDDIR)/$(MODEL) && $(COMPILE) -shared -o lib$(ONAME)$(MODEL).so *.o