LONGINT/LONGCARD were aliases of the 32-bit int family; now they
are real 64-bit values (QBE l). Suite 100/100. LL(1)-clean, zero
gm2 warnings.
FLong and descriptor dLong; LONGINT/LONGCARD
predefine to it. New class ClLong (13).IsLongFamily; TypeSize(FLong) = 8.ArithCheck promotes long/long and long/int → dLong;
UnaryCheck long → dLong; Assignable allows int → long
(widening) but not long → int; EqCheck/OrdCheck accept long
pairs.ResClass(ClLong) = "l"; ElemSize/ElemLoad/ElemStore treat
long as 8-byte (loadl/storel); AllocLocal gives long locals
an 8-byte slot; module-level long data emits { l 0 }.LoadLong/StoreLong (same-scope, up-level, and global paths);
WidenLong (extsw, INTEGER → LONGINT); CmpLong
(ceql/cnel/csltl/cslel/csgtl/csgel).Design loads long vars via LoadLong; assignment stores via
StoreLong and widens int sources; SimExpr/Term use Op3L
(add/sub/mul/div/rem at l width) and widen int
operands; Expr uses CmpLong and widens int operands; VarDecl
accepts ClLong.t_long → 42: 1_000_000 * 1_000_000 (= 10^12, past 32 bits),
divide back, compare, and +5. Image shows extsw, =l mul/div,
ceql/csgtl.
FOR bounds stay integer-family (IsIntFamily excludes long);
the loop variable must be INTEGER/CARDINAL.TRUNC/VAL)
are not yet wired — assignment long → int is 210.