Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
jberryman
GHC
Commits
1da969c5
Commit
1da969c5
authored
Jun 09, 2003
by
matthewc
Browse files
[project @ 2003-06-09 13:17:38 by matthewc]
Update IA64 port to work with gcc 3.3.
parent
07d43322
Changes
5
Hide whitespace changes
Inline
Side-by-side
ghc/compiler/codeGen/ClosureInfo.lhs
View file @
1da969c5
%
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
% $Id: ClosureInfo.lhs,v 1.5
7
2003/0
5/14 09:13:56 simonmar
Exp $
% $Id: ClosureInfo.lhs,v 1.5
8
2003/0
6/09 13:17:38 matthewc
Exp $
%
\section[ClosureInfo]{Data structures which describe closures}
...
...
@@ -1127,8 +1127,8 @@ represented by a label+offset expression).
\begin{code}
mkInfoTable :: ClosureInfo -> [CAddrMode]
mkInfoTable cl_info
|
opt_Unregisterised = std_info ++ extra_bits
| otherwise
= extra_bits ++ std_info
|
tablesNextToCode = extra_bits ++ std_info
| otherwise
= std_info ++ extra_bits
where
std_info = mkStdInfoTable entry_amode
ty_descr_amode cl_descr_amode cl_type srt_len layout_amode
...
...
@@ -1184,8 +1184,8 @@ mkInfoTable cl_info
(Just (arity, arg_descr)) = maybe_fun_stuff
fun_extra_bits
|
opt_Unregisterised = reverse
reg_fun_extra_bits
| otherwise
= reg_fun_extra_bits
|
tablesNextToCode =
reg_fun_extra_bits
| otherwise
=
reverse
reg_fun_extra_bits
reg_fun_extra_bits
| ArgGen slow_lbl liveness <- arg_descr
...
...
@@ -1229,8 +1229,8 @@ mkBitmapInfoTable
-> [CAddrMode]
-> [CAddrMode]
mkBitmapInfoTable entry_amode srt liveness vector
|
opt_Unregisterised = std_info ++ extra_bits
| otherwise
= extra_bits ++ std_info
|
tablesNextToCode = extra_bits ++ std_info
| otherwise
= std_info ++ extra_bits
where
std_info = mkStdInfoTable entry_amode zero_amode zero_amode
cl_type srt_len liveness_amode
...
...
@@ -1253,8 +1253,8 @@ mkBitmapInfoTable entry_amode srt liveness vector
srt_bit | needsSRT srt || not (null vector) = [srt_label]
| otherwise = []
extra_bits |
opt_Unregisterised = srt_bit ++ vector
| otherwise
= reverse vector ++ srt_bit
extra_bits |
tablesNextToCode = reverse vector ++ srt_bit
| otherwise
= srt_bit ++ vector
-- The standard bits of an info table. This part of the info table
-- corresponds to the StgInfoTable type defined in InfoTables.h.
...
...
@@ -1271,8 +1271,8 @@ mkStdInfoTable entry_lbl type_descr closure_descr cl_type srt_len layout_amode
= std_info
where
std_info
|
opt_Unregisterised = entry_lbl :
std_info'
| otherwise
= std_info'
|
tablesNextToCode =
std_info'
| otherwise
=
entry_lbl :
std_info'
std_info' =
-- par info
...
...
@@ -1312,4 +1312,12 @@ livenessToAddrMode (Liveness lbl size bits)
_ -> panic "livenessToAddrMode"
zero_amode = mkIntCLit 0
-- IA64 mangler doesn't place tables next to code
tablesNextToCode :: Bool
#ifdef ia64_TARGET_ARCH
tablesNextToCode = False
#else
tablesNextToCode = not opt_Unregisterised
#endif
\end{code}
ghc/driver/mangler/ghc-asm.lprl
View file @
1da969c5
...
...
@@ -701,12 +701,18 @@ sub mangle_asm {
} elsif ($TargetPlatform =~ /^ia64-/) {
$p =~ s/^\t\.prologue .*\n//;
$p =~ s/^\t\.save ar\.pfs, r\d+\n\talloc r\d+ = ar\.pfs, 0, 3
1
, \d+, 0\n//;
$p =~ s/^\t\.save ar\.pfs, r\d+\n\talloc r\d+ = ar\.pfs, 0, 3
[12]
, \d+, 0\n//;
$p =~ s/^\t\.fframe \d+\n\tadds r12 = -\d+, r12\n//;
$p =~ s/^\t\.save rp, r\d+\n\tmov r\d+ = b0\n//;
$p =~ s/^\t\.(mii|mmi)\n//; # bundling is no longer sensible
$p =~ s/^\t\.(mii|mmi)\n//
g
; # bundling is no longer sensible
$p =~ s/^\t;;\n//g; # discard stops
$p =~ s/^\t\/\/.*\n//g; # gcc inserts timings in // comments
# GCC 3.3 saves r1 in the prologue, move this to the body
if ($p =~ /^\tmov r\d+ = r1\n/) {
$p = $` . $';
$r = $& . $r;
}
} elsif ($TargetPlatform =~ /^m68k-/) {
$p =~ s/^\tlink a6,#-?\d.*\n//;
$p =~ s/^\tpea a6@\n\tmovel sp,a6\n//;
...
...
@@ -840,8 +846,13 @@ sub mangle_asm {
$c =~ s/^\tbl\s+L___DISCARD__\$stub\n//go if $TargetPlatform =~ /^powerpc-apple-.*/;
# IA64: mangle tailcalls into jumps here
$c =~ s/^\tbr\.call\.sptk\.many b0 = (.*)\n\t;;\n(\tmov r1 = r\d+\n)?\t;;\n\t--- TAILCALL ---\n/\tbr\.few $1\n/g
if $TargetPlatform =~ /^ia64-/;
if ($TargetPlatform =~ /^ia64-/) {
while ($c =~ s/^\tbr\.call\.sptk\.many b0 = (.*)\n(?:^\.L([0-9]*):\n)?(?:\t;;\n)?(?:\tmov r1 = r\d+\n)?(?:\t;;\n)?\t--- TAILCALL ---\n(?:\t;;\n\tbr \.L\d+\n)?/\tbr\.few $1\n/) {
# Eek, the gcc optimiser is getting smarter... if we see a jump to the --- TAILCALL ---
# marker then we reapply the substitution at the source sites
$c =~ s/^\tbr \.L$2\n/\t--- TAILCALL ---\n/g if ($2);
}
}
# MIPS: that may leave some gratuitous asm macros around
# (no harm done; but we get rid of them to be tidier)
...
...
ghc/rts/Linker.c
View file @
1da969c5
/* -----------------------------------------------------------------------------
* $Id: Linker.c,v 1.12
0
2003/0
5/30 09:06:24 simonmar
Exp $
* $Id: Linker.c,v 1.12
1
2003/0
6/09 13:17:40 matthewc
Exp $
*
* (c) The GHC Team, 2000-2003
*
...
...
@@ -553,18 +553,18 @@ typedef struct _RtsSymbolVal {
Sym(__ashrdi3) \
Sym(__lshrdi3) \
Sym(__eprintf)
#elif defined(ia64_TARGET_ARCH)
#define RTS_LIBGCC_SYMBOLS \
Sym(__divdi3) \
Sym(__udivdi3) \
Sym(__moddi3) \
Sym(__umoddi3) \
Sym(__divsf3) \
Sym(__divdf3)
#else
#define RTS_LIBGCC_SYMBOLS
#endif
#ifdef ia64_TARGET_ARCH
/* force these symbols to be present */
#define RTS_EXTRA_SYMBOLS \
Sym(__divsf3)
#else
#define RTS_EXTRA_SYMBOLS
/* nothing */
#endif
#ifdef darwin_TARGET_OS
// Symbols that don't have a leading underscore
// on Mac OS X. They have to receive special treatment,
...
...
@@ -575,12 +575,11 @@ typedef struct _RtsSymbolVal {
#endif
/* entirely bogus claims about types of these symbols */
#define Sym(vvv) extern void
(
vvv);
#define Sym(vvv) extern void vvv
(
);
#define SymX(vvv)
/**/
#define SymX_redirect(vvv,xxx)
/**/
RTS_SYMBOLS
RTS_LONG_LONG_SYMS
RTS_EXTRA_SYMBOLS
RTS_POSIX_ONLY_SYMBOLS
RTS_MINGW_ONLY_SYMBOLS
RTS_CYGWIN_ONLY_SYMBOLS
...
...
@@ -608,7 +607,6 @@ RTS_LIBGCC_SYMBOLS
static
RtsSymbolVal
rtsSyms
[]
=
{
RTS_SYMBOLS
RTS_LONG_LONG_SYMS
RTS_EXTRA_SYMBOLS
RTS_POSIX_ONLY_SYMBOLS
RTS_MINGW_ONLY_SYMBOLS
RTS_CYGWIN_ONLY_SYMBOLS
...
...
@@ -2708,8 +2706,8 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC,
#ifdef ELF_FUNCTION_DESC
/* If a function, already a function descriptor - we would
have to copy it to add an offset. */
if
(
S
&&
ELF_ST_TYPE
(
sym
.
st_info
)
==
STT_FUNC
)
assert
(
A
==
0
);
if
(
S
&&
(
ELF_ST_TYPE
(
sym
.
st_info
)
==
STT_FUNC
)
&&
(
A
!=
0
))
belch
(
"%s: function %s with addend %p"
,
oc
->
fileName
,
symbol
,
(
void
*
)
A
);
#endif
}
if
(
!
S
)
{
...
...
@@ -2768,6 +2766,9 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC,
case
R_IA64_FPTR64LSB
:
*
pP
=
value
;
break
;
case
R_IA64_PCREL64LSB
:
*
pP
=
value
-
P
;
break
;
case
R_IA64_SEGREL64LSB
:
addr
=
findElfSegment
(
ehdrC
,
value
);
*
pP
=
value
-
addr
;
...
...
@@ -2776,6 +2777,7 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC,
ia64_reloc_gprel22
(
P
,
value
);
break
;
case
R_IA64_LTOFF22
:
case
R_IA64_LTOFF22X
:
case
R_IA64_LTOFF_FPTR22
:
addr
=
allocateGOTEntry
(
value
);
ia64_reloc_gprel22
(
P
,
addr
);
...
...
@@ -2783,6 +2785,10 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC,
case
R_IA64_PCREL21B
:
ia64_reloc_pcrel21
(
P
,
S
,
oc
);
break
;
case
R_IA64_LDXMOV
:
/* This goes with R_IA64_LTOFF22X and points to the load to
* convert into a move. We don't implement relaxation. */
break
;
# endif
default:
belch
(
"%s: unhandled ELF relocation(RelA) type %d
\n
"
,
...
...
ghc/rts/RtsUtils.h
View file @
1da969c5
/* -----------------------------------------------------------------------------
* $Id: RtsUtils.h,v 1.1
6
2003/0
3/31
1
9
:1
9:34 sof
Exp $
* $Id: RtsUtils.h,v 1.1
7
2003/0
6/09
1
3
:1
7:40 matthewc
Exp $
*
* (c) The GHC Team, 1998-1999
*
...
...
@@ -27,7 +27,7 @@ extern void resetNonBlockingFd(int fd);
extern
nat
stg_strlen
(
char
*
str
);
/*Defined in Main.c, but made visible here*/
extern
void
stg_exit
(
I_
n
)
__attribute__
((
noreturn
));
extern
void
stg_exit
(
int
n
)
__attribute__
((
noreturn
));
char
*
time_str
(
void
);
char
*
ullong_format_string
(
ullong
,
char
*
,
rtsBool
);
...
...
ghc/rts/StgCRun.c
View file @
1da969c5
/* -----------------------------------------------------------------------------
* $Id: StgCRun.c,v 1.3
8
2003/0
1/31 17:29:46 wolfgang
Exp $
* $Id: StgCRun.c,v 1.3
9
2003/0
6/09 13:17:41 matthewc
Exp $
*
* (c) The GHC Team, 1998-2000
*
...
...
@@ -498,6 +498,7 @@ static void StgRunIsImplementedInAssembler(void)
loc16 - loc28: STG registers
loc29: saved ar.pfs
loc30: saved b0
loc31: saved gp (gcc 3.3 uses this slot)
-------------------------------------------------------------------------- */
#ifdef ia64_TARGET_ARCH
...
...
@@ -506,12 +507,19 @@ static void StgRunIsImplementedInAssembler(void)
#undef RESERVED_C_STACK_BYTES
#define RESERVED_C_STACK_BYTES 1024
#if ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)
/* gcc 3.3+: leave an extra slot for gp saves */
#define LOCALS 32
#else
#define LOCALS 31
#endif
static
void
StgRunIsImplementedInAssembler
(
void
)
{
__asm__
volatile
(
".global StgRun
\n
"
"StgRun:
\n
"
"
\t
alloc loc29 = ar.pfs, 0,
3
1, 8, 0
\n
"
/* setup register frame */
"
\t
alloc loc29 = ar.pfs, 0,
%
1, 8, 0
\n
"
/* setup register frame */
"
\t
ld8 r18 = [r32],8
\n
"
/* get procedure address */
"
\t
adds sp = -%0, sp ;;
\n
"
/* setup stack */
"
\t
ld8 gp = [r32]
\n
"
/* get procedure GP */
...
...
@@ -541,7 +549,7 @@ static void StgRunIsImplementedInAssembler(void)
"
\t
ldf.fill f21 = [r17],32
\n
"
"
\t
adds sp = %0, sp
\n
"
/* restore stack */
"
\t
br.ret.sptk.many b0 ;;
\n
"
/* return */
:
:
"i"
(
RESERVED_C_STACK_BYTES
+
6
*
16
));
:
:
"i"
(
RESERVED_C_STACK_BYTES
+
6
*
16
)
,
"i"
(
LOCALS
)
);
}
#endif
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment