x86_64-xlate.pl (194206) | x86_64-xlate.pl (205128) |
---|---|
1#!/usr/bin/env perl 2 3# Ascetic x86_64 AT&T to MASM assembler translator by <appro>. 4# 5# Why AT&T to MASM and not vice versa? Several reasons. Because AT&T 6# format is way easier to parse. Because it's simpler to "gear" from 7# Unix ABI to Windows one [see cross-reference "card" at the end of 8# file]. Because Linux targets were available first... --- 175 unchanged lines hidden (view full) --- 184 # elder GNU assembler and results in more compact code, 185 # *but* most importantly AES module depends on this feature! 186 $self->{index} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/; 187 $self->{base} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/; 188 189 if (!$masm) { 190 # Solaris /usr/ccs/bin/as can't handle multiplications 191 # in $self->{label} | 1#!/usr/bin/env perl 2 3# Ascetic x86_64 AT&T to MASM assembler translator by <appro>. 4# 5# Why AT&T to MASM and not vice versa? Several reasons. Because AT&T 6# format is way easier to parse. Because it's simpler to "gear" from 7# Unix ABI to Windows one [see cross-reference "card" at the end of 8# file]. Because Linux targets were available first... --- 175 unchanged lines hidden (view full) --- 184 # elder GNU assembler and results in more compact code, 185 # *but* most importantly AES module depends on this feature! 186 $self->{index} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/; 187 $self->{base} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/; 188 189 if (!$masm) { 190 # Solaris /usr/ccs/bin/as can't handle multiplications 191 # in $self->{label} |
192 use integer; |
|
192 $self->{label} =~ s/(?<![0-9a-f])(0[x0-9a-f]+)/oct($1)/egi; 193 $self->{label} =~ s/([0-9]+\s*[\*\/\%]\s*[0-9]+)/eval($1)/eg; | 193 $self->{label} =~ s/(?<![0-9a-f])(0[x0-9a-f]+)/oct($1)/egi; 194 $self->{label} =~ s/([0-9]+\s*[\*\/\%]\s*[0-9]+)/eval($1)/eg; |
195 $self->{label} =~ s/([0-9]+)/$1<<32>>32/eg; |
|
194 195 if (defined($self->{index})) { 196 sprintf "%s(%%%s,%%%s,%d)", 197 $self->{label},$self->{base}, 198 $self->{index},$self->{scale}; 199 } else { 200 sprintf "%s(%%%s)", $self->{label},$self->{base}; 201 } --- 353 unchanged lines hidden --- | 196 197 if (defined($self->{index})) { 198 sprintf "%s(%%%s,%%%s,%d)", 199 $self->{label},$self->{base}, 200 $self->{index},$self->{scale}; 201 } else { 202 sprintf "%s(%%%s)", $self->{label},$self->{base}; 203 } --- 353 unchanged lines hidden --- |