[project @ 2000-06-13 15:35:29 by partain]
authorpartain <unknown>
Tue, 13 Jun 2000 15:35:29 +0000 (15:35 +0000)
committerpartain <unknown>
Tue, 13 Jun 2000 15:35:29 +0000 (15:35 +0000)
After Andy Gill's late-95 changes

ghc/driver/mangler/ghc-asm.lprl

index 2643ded..4a4834c 100644 (file)
@@ -1,6 +1,6 @@
 %************************************************************************
 %*                                                                     *
-\section[Driver-asm-fiddling]{Fiddling with assembler files (iX86)}
+\section[Driver-asm-fiddling]{Fiddling with assembler files}
 %*                                                                     *
 %************************************************************************
 
@@ -13,6 +13,12 @@ stuff to do with the C stack.
 Any other required tidying up.
 \end{itemize}
 
+%************************************************************************
+%*                                                                     *
+\subsection{Constants for various architectures}
+%*                                                                     *
+%************************************************************************
+
 \begin{code}
 sub init_TARGET_STUFF {
 
@@ -70,6 +76,34 @@ sub init_TARGET_STUFF {
     $T_HDR_fast            = "\.text\n\t\.align 16\n";
     $T_HDR_vector   = "\.text\n\t\.align 16\n"; # NB: requires padding
     $T_HDR_direct   = "\.text\n\t\.align 16\n";
+
+    } elsif ( $TargetPlatform =~ /^powerpc-.*/ ) {
+
+    $T_STABBY      = 0; # 1 iff .stab things (usually if a.out format)
+    $T_US          = '\.'; # _ if symbols have an underscore on the front
+    $T_DO_GC       = 'PerformGC_wrapper';
+    $T_PRE_APP     = 'NOT APPLICABLE'; # regexp that says what comes before APP/NO_APP
+    $T_CONST_LBL    = '^LC\.\.(\d+):$'; # regexp for what such a lbl looks like
+    $T_POST_LBL            = ':';
+    $T_PRE_LLBL_PAT = '\.L';
+    $T_PRE_LLBL            = '.L';
+    $T_X86_BADJMP   = 'NOT APPLICABLE';
+
+    $T_MOVE_DIRVS   = '^\s*(\.align\s+\d+(,0x90)?\n|\.globl\s+\S+\n|\.text\n|\.data\n|\.section\s+.*\n|\.type\s+.*\n|\.Lfe.*\n\t\.size\s+.*\n|\.size\s+.*\n|\.ident.*\n)';
+    $T_COPY_DIRVS   = '\.(globl)';
+
+    $T_hsc_cc_PAT   = '\.string.*\)(hsc|cc) (.*)\\\\t(.*)"';
+    $T_DOT_WORD            = '\.long';
+    $T_HDR_string   = "\.section\t\.rodata\n"; # or just use .text??? (WDP 95/11)
+    $T_HDR_misc            = "\.text\n\t\.align 16\n";
+    $T_HDR_data            = "\.data\n\t\.align 4\n"; # ToDo: change align??
+    $T_HDR_consist  = "\.text\n";
+    $T_HDR_closure  = "\.data\n\t\.align 4\n"; # ToDo: change align?
+    $T_HDR_info            = "\.text\n\t\.align 16\n"; # NB: requires padding
+    $T_HDR_entry    = "\.text\n"; # no .align so we're right next to _info (arguably wrong...?)
+    $T_HDR_fast            = "\.text\n\t\.align 16\n";
+    $T_HDR_vector   = "\.text\n\t\.align 16\n"; # NB: requires padding
+    $T_HDR_direct   = "\.text\n\t\.align 16\n";
     }
 
 if ( 0 ) {
@@ -102,6 +136,12 @@ print STDERR "T_HDR_direct: $T_HDR_direct\n";
 }
 \end{code}
 
+%************************************************************************
+%*                                                                     *
+\subsection{Mangle away}
+%*                                                                     *
+%************************************************************************
+
 \begin{code}
 sub mangle_asm {
     local($in_asmf, $out_asmf) = @_;