|
|
@@ -257,11 +257,18 @@ my %globals; |
|
|
|
$self->{base} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/; |
|
|
|
|
|
|
|
# Solaris /usr/ccs/bin/as can't handle multiplications |
|
|
|
# in $self->{label}, new gas requires sign extension... |
|
|
|
# in $self->{label}... |
|
|
|
use integer; |
|
|
|
$self->{label} =~ s/(?<![\w\$\.])(0x?[0-9a-f]+)/oct($1)/egi; |
|
|
|
$self->{label} =~ s/\b([0-9]+\s*[\*\/\%]\s*[0-9]+)\b/eval($1)/eg; |
|
|
|
$self->{label} =~ s/\b([0-9]+)\b/$1<<32>>32/eg; |
|
|
|
|
|
|
|
# Some assemblers insist on signed presentation of 32-bit |
|
|
|
# offsets, but sign extension is a tricky business in perl... |
|
|
|
if ((1<<31)<<1) { |
|
|
|
$self->{label} =~ s/\b([0-9]+)\b/$1<<32>>32/eg; |
|
|
|
} else { |
|
|
|
$self->{label} =~ s/\b([0-9]+)\b/$1>>0/eg; |
|
|
|
} |
|
|
|
|
|
|
|
if (!$self->{label} && $self->{index} && $self->{scale}==1 && |
|
|
|
$self->{base} =~ /(rbp|r13)/) { |
|
|
|