|
|
1.1 root 1: Tweaking the PCC to provide 64-bit integers
2: -------------------------------------------
3:
4: A 64-bit integer data type would be nice to have to implement data
5: structures such as millisecond time values, multi-gigabyte disk
6: addresses and so on.
7:
8: Since the number of bits in the type field of the compiler type word is
9: only 16 and all 16 types are used, it makes sense to pick a type which
10: is not useful and overload it for the 64-bit type. Thus we'll use LONG
11: and ULONG types to represent signed and unsigned 64-bit integers
12: internally. Externally we must provide some name other than 'long' for
13: the type or else all hell will break loose with standard width
14: definitions; it's been suggested that we use 'quad', following its use
15: in VAX assembler. (I suppose a flag could be used to signal the
16: compiler that 'long' really should be 64 bits, so we can eventually
17: convert existing code to appropriately handle three integer sizes in
18: legal C.)
19:
20: Data structures
21: ---------------
22:
23: It's probably simplest to just punt on quad constants for the time
24: being. This would eliminate the only situation in which the compiler's
25: own data structures would need to be adjusted to handle 64-bit
26: integers. Once the compiler has been bootstrapped for 64-bit
27: variables, 64-bit constants should follow with reasonable ease.
28:
29: Parameters in header files
30: --------------------------
31:
32: The size and alignment of LONG and ULONG will need to change in
33: macdefs.h. This shouldn't cause any problems (famous last words).
34:
35: Algorithm changes, file by file
36: -------------------------------
37:
38: cgram.y
39: The production for switch statements may need to change if we
40: want to allow quad type switch expressions. Do PDP-11
41: compilers permit long switch expressions? I doubt it...
42: pftn.c
43: dclstruct
44: We will probably have to permit quad size enums eventually.
45: Since the plan is to hold off on quad size constants, we can
46: punt for now.
47: code.c
48: type_move
49: MOVL must become MOVQ. Since this code is intended for
50: handling register variables, and we likely won't allow register
51: quads, we don't need to worry too hard about this.
52: local.c
53: clocal
54: PCONV and SCONV code may need be changed to know about quads.
55: The SCONV code is primarily concerned with constants (again).
56: cisreg
57: LONG and ULONG will no longer be permitted types for register
58: variables.
59: ctype
60: This routine converts 'unsupported' types into INT; now that
61: LONG and ULONG have a separate meaning from INT, the routine
62: becomes an identity function.
63: tlen
64: LONG and ULONG now have size 2. Cthulhu knows how much code
65: assumes int types will always fit in 1 register.
66: local2.c
67: tlen
68: Same as the first pass tlen.
69: prtype
70: Prints the letter ([blwfd]) which is appended to VAX
71: instructions for operations of a particular type. We need to
72: add 'q' for LONG and ULONG, although we won't be using prtype
73: very much!
74: zzzcode
75: The tough code generation issues get tougher... The 'A'
76: conversion code gets considerably more complex. The 'C' stack
77: count code needs a little adjustment to work from SZINT instead
78: of SZLONG.
79: collapsible
80: Again, conversions are a lot tougher with quads.
81: shumul
82: Pointers and arrays of quads need to be handled right.
83: order.c
84: setbin
85: setasop
86: It won't be quite so simple to rewrite quads into register to
87: make a stuck tree work.
88: sucomp
89: We need to take another look at the special case hacking for
90: various flavors of integers.
91: stab.c
92: inittypes
93: Add the 'quad' type. Does dbx know what to do with 64-bit
94: integers? I sure doubt it.
95: table.c
96: Oof. Here is where the real work is. We get to use EMUL to
97: calculate 64-bit products (the architecture handbook conveniently
98: provides the algorithm) and other kinds of fun.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.