Commit bc2d66a0 authored by simonmar's avatar simonmar
Browse files

[project @ 2005-03-08 13:32:06 by simonmar]

HACK HACK HACK on x86_64

we need 16-byte aligned constants on this platform sometimes.  Don't
just 16-byte align everything, but try to detect 16-byte constants and
align just those.

All the codegen tests now go through on registerised x86_64, I'm
building a stage2 GHC now.
parent 7d116768
......@@ -223,7 +223,10 @@ sub init_TARGET_STUFF {
$T_DOT_WORD = '\.(quad|long|value|byte|zero)';
$T_DOT_GLOBAL = '\.global';
$T_HDR_literal16 = "\.section\t\.rodata.cst16\n\t.align 16\n";
$T_HDR_literal = "\.section\t\.rodata\n";
$T_HDR_misc = "\.text\n\t\.align 8\n";
$T_HDR_data = "\.data\n\t\.align 8\n";
$T_HDR_rodata = "\.section\t\.rodata\n\t\.align 8\n";
......@@ -1141,7 +1144,22 @@ sub mangle_asm {
# print out all the literal strings next
for ($i = 0; $i < $numchks; $i++) {
if ( $chkcat[$i] eq 'literal' ) {
print OUTASM $T_HDR_literal, $chk[$i];
# HACK: try to detect 16-byte constants and align them
# on a 16-byte boundary. x86_64 sometimes needs 128-bit
# aligned constants.
if ( $TargetPlatform =~ /^x86_64/ ) {
$z = $chk[$i];
if ($z =~ /(\.long.*\n.*\.long.*\n.*\.long.*\n.*\.long|\.quad.*\n.*\.quad)/) {
print OUTASM $T_HDR_literal16;
} else {
print OUTASM $T_HDR_literal;
}
} else {
print OUTASM $T_HDR_literal;
}
print OUTASM $chk[$i];
print OUTASM "; end literal\n" if $TargetPlatform =~ /^hppa/; # for the splitter
$chkcat[$i] = 'DONE ALREADY';
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment