]> gcc.gnu.org Git - gcc.git/blob - gcc/config/i370/README
56c6342dc64675d91fed1431520d6b17f2ffbac4
[gcc.git] / gcc / config / i370 / README
1
2 This directory contains code for building a compiler for the
3 32-bit ESA/390 architecture. It supports three different styles
4 of assembly:
5
6 -- MVS for use with the HLASM assembler
7 -- Open Edition (USS Unix System Services)
8 -- ELF/Linux for use with the binutils/gas GNU assembler.
9
10
11 Cross-compiling Hints
12 ---------------------
13 When building a cross-compiler on AIX, set the environment variable CC
14 and be sure to set the -ma and -qcpluscmt flags; i.e.
15
16 export CC="cc -ma -qcpluscmt"
17
18 do this *before* running configure, e.g.
19
20 configure --target=i370-ibm-linux --prefix=/where/to/install/usr
21
22 The Objective-C and FORTRAN front ends don't build. To avoid looking at
23 errors, do only
24
25 make LANGUAGES=c
26
27
28 OpenEdition Hints
29 -----------------
30 The shell script "install" is handy for users of OpenEdition.
31
32
33 The ELF ABI
34 -----------
35 This compiler, in conjunction with the gas/binutils assembler, defines
36 a defacto ELF-based ABI for the ESA/390 architecture. Be warned: this
37 ABI has several major faults. It should be fixed. As it is fixed,
38 it is subject to change without warning. You should not commit to major
39 software systems without further exploring and fixing these problems.
40 Here are some of the problems:
41
42 -- No support for shared libraries or dynamically loadable objects.
43 This is because the compiler currently places address literals in
44 the text section. Although the GAS assembler supports a syntax for
45 USING that will place address literals in the data section, this forces
46 the use of two base registers, one for branches and one for the literal
47 pool. Work is needed to redesign the function prologue, epilogue and the
48 base register reloads to minimize the currently excessive use of reserved
49 registers.
50
51 I beleive the best solution would be to add a toc or plt, and extending
52 the meaning of the USING directive to encompass this. This would
53 allow the continued use of the human-readable and familiar practice
54 of using =A() and =F'' to denote address literals, as opposed to more
55 difficult jump-table notation.
56
57 -- the stackframe is almost twice as big as it needs to be.
58
59 -- currently, r15 is used to return 32-bit values. Because this is the
60 last register, it prevents 64-bit ints and small structures from being
61 returned in registers, forcing return in memory. It would be more
62 efficient to use r14 to return 32-bit values, and r14+r15 to return
63 64-bit values.
64
65 -- all arguments are currently passed in memory. It would be more efficient
66 to pass arguments in registers.
67
68
69
70
71 ChangeLog
72 ---------
73 Oct98-Dec98 -- add ELF back end; work on getting ABI more or less functional.
74 98.12.05 -- fix numerous MVC bugs
75 99.02.06 -- multiply insn sometimes not generated when needed.
76 -- extendsidi bugs, bad literal values printed
77 -- remove broken adddi subdi patterns
78 99.02.15 -- add clrstrsi pattern
79 -- fix -O2 divide bug
80 99.03.04 -- base & index reg usage bugs
81 99.03.15 -- fixes for returning long longs and structs (struct value return)
82 99.03.29 -- fix handling & alignment of shorts
83 99.03.31 -- clobbered register 14 is not always clobbered
84 99.04.02 -- operand constraints for cmphi
85 99.04.07 -- function pointer fixes for call, call_value patterns,
86 function pointers derefed once too often.
87 99.04.14 -- add pattern to print double-wide int
88 -- check intval<4096 for misc operands
89 -- add clrstrsi pattern
90 -- movstrsi fixes
91 99.04.16 -- use r2 to pass args into r11 in subroutine call.
92 -- fixes to movsi; some operand combinations impossible;
93 rework constraints
94 -- start work on forward jump optimization
95 -- char alignment bug
96 99.04.25 -- add untyped_call pattern so that builtin_apply works
97 99.04.27 -- fixes to compare logical under mask
98 99.04.28 -- reg 2 is clobbered by calls
99 99.04.30 -- fix rare mulsi bug
100 99.04.30 -- add constraints so that all RS, SI, SS forms insns have valid
101 addressing modes
102 99.04.30 -- major condition code fixes. The old code was just way off
103 w.r.t. which insns set condition code, and the codes that
104 were set. The extent of this damage was unbeleivable.
105 99.05.01 -- restructuring of operand constraints on many patterns,
106 many lead to invalid instructions being genned.
107 99.05.02 -- float pt fixes
108 -- fix movdi issue bugs
109 99.05.03 -- fix divide insn; was dividing incorrectly
110 99.05.05 -- fix sign extension problems on andhi
111 -- deprecate some constraints
112 99.05.06 -- add set_attr insn lengths; fix misc litpool sizes
113 -- add notes about how unsigned jumps work (i.e.
114 arithmetic vs. logical vs. signed vs unsigned).
115 99.05.11 -- use insn length to predict forward branch target;
116 use relative branchining where possible,
117 remove un-needed base register reload.
118 99.05.15 -- fix movstrsi, clrstrsi, cmpstrsi patterns as per conversation
119 w/ Richard Henderson
120
121
122
123
124
125
This page took 0.040135 seconds and 4 git commands to generate.