Home | History | Annotate | Download | only in perlasm

Lines Matching full:self

78 	my	$self = shift;	# single instance in enough...
83 $self->{op} = $1;
84 $ret = $self;
87 undef $self->{sz};
88 if ($self->{op} =~ /^(movz)b.*/) { # movz is pain...
89 $self->{op} = $1;
90 $self->{sz} = "b";
91 } elsif ($self->{op} =~ /call/) {
92 $self->{sz} = ""
93 } elsif ($self->{op} =~ /([a-z]{3,})([qlwb])$/) {
94 $self->{op} = $1;
95 $self->{sz} = $2;
101 my $self = shift;
103 $self->{sz} = $sz if (defined($sz) && !defined($self->{sz}));
104 $self->{sz};
107 my $self = shift;
109 if ($self->{op} eq "movz") { # movz is pain...
110 sprintf "%s%s%s",$self->{op},$self->{sz},shift;
111 } elsif ($self->{op} =~ /^set/) {
112 "$self->{op}";
113 } elsif ($self->{op} eq "ret") {
116 "$self->{op}$self->{sz}";
119 $self->{op} =~ s/^movz/movzx/;
120 if ($self->{op} eq "ret") {
121 $self->{op} = "";
123 $self->{op} = "mov rdi,QWORD PTR 8[rsp]\t;WIN64 epilogue\n\t".
126 $self->{op} .= "DB\t0F3h,0C3h\t\t;repret";
128 $self->{op};
134 my $self = shift; # single instance in enough...
139 $self->{value} = $1;
140 $ret = $self;
146 my $self = shift;
150 # in $self->{value}
151 $self->{value} =~ s/(?<![0-9a-f])(0[x0-9a-f]+)/oct($1)/egi;
152 $self->{value} =~ s/([0-9]+\s*[\*\/\%]\s*[0-9]+)/eval($1)/eg;
153 sprintf "\$%s",$self->{value};
155 $self->{value} =~ s/0x([0-9a-f]+)/0$1h/ig;
156 sprintf "%s",$self->{value};
162 my $self = shift; # single instance in enough...
167 $self->{label} = $1;
168 ($self->{base},$self->{index},$self->{scale})=split(/,/,$2);
169 $self->{scale} = 1 if (!defined($self->{scale}));
170 $ret = $self;
173 $self->{base} =~ s/^%//;
174 $self->{index} =~ s/^%// if (defined($self->{index}));
180 my $self = shift;
186 $self->{index} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/;
187 $self->{base} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/;
191 # in $self->{label}
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;
197 if (defined($self->{index})) {
199 $self->{label},$self->{base},
200 $self->{index},$self->{scale};
202 sprintf "%s(%%%s)", $self->{label},$self->{base};
207 $self->{label} =~ s/\./\$/g;
208 $self->{label} =~ s/0x([0-9a-f]+)/0$1h/ig;
209 $self->{label} = "($self->{label})" if ($self->{label} =~ /[\*\+\-\/]/);
211 if (defined($self->{index})) {
213 $self->{label},
214 $self->{index},$self->{scale},
215 $self->{base};
216 } elsif ($self->{base} eq "rip") {
217 sprintf "%s PTR %s",$szmap{$sz},$self->{label};
220 $self->{label},$self->{base};
228 my $self = {};
233 bless $self,$class;
234 $self->{value} = $1;
235 $ret = $self;
241 my $self = shift;
244 if ($self->{value} =~ /^r[\d]+b$/i) { $ret="b"; }
245 elsif ($self->{value} =~ /^r[\d]+w$/i) { $ret="w"; }
246 elsif ($self->{value} =~ /^r[\d]+d$/i) { $ret="l"; }
247 elsif ($self->{value} =~ /^r[\w]+$/i) { $ret="q"; }
248 elsif ($self->{value} =~ /^[a-d][hl]$/i){ $ret="b"; }
249 elsif ($self->{value} =~ /^[\w]{2}l$/i) { $ret="b"; }
250 elsif ($self->{value} =~ /^[\w]{2}$/i) { $ret="w"; }
251 elsif ($self->{value} =~ /^e[a-z]{2}$/i){ $ret="l"; }
256 my $self = shift;
257 sprintf $masm?"%s":"%%%s",$self->{value};
262 my $self = shift; # single instance is enough...
267 $self->{value} = $1;
268 $ret = $self;
271 $self->{value} =~ s/\.L/\$L/ if ($masm);
276 my $self = shift;
279 $self->{value};
280 } elsif ($self->{value} ne "$current_function->{name}:") {
281 $self->{value};
302 my $self = shift; # single instance is enough...
307 $self->{value} = $1;
308 $ret = $self;
311 $self->{value} =~ s/\.L/\$L/g if ($masm);
316 my $self = shift;
317 $self->{value};
322 my $self = shift; # single instance is enough...
338 $self->{value} = $1;
342 $self->{value} = sprintf "\t.long\t0x%x,0x90000000",$opcode{$1};
344 $self->{value} = ".byte\t".join(",",unpack("C*",$1),0);
346 $self->{value} = ""; # swallow extern
348 $self->{value} = $line;
351 return $self;
355 $ret = $self;
356 undef $self->{value};
367 $self->{value} = $v;
370 /\.extern/ && do { $self->{value} = "EXTRN\t".$line.":BYTE"; last; };
371 /\.globl/ && do { $self->{value} = "PUBLIC\t".$line; last; };
385 $self->{value}="$current_function->{name}\tENDP";
390 /\.align/ && do { $self->{value} = "ALIGN\t".$line; last; };
401 $self->{value} = "\tD$sz\t";
402 for (@arr) { $self->{value} .= &$conv($_).","; }
403 $self->{value} .= &$conv($last);
406 /\.picmeup/ && do { $self->{value} = sprintf"\tDD\t 0%Xh,090000000h",$opcode{$line};
413 $self->{value}.="DB\t"
417 $self->{value}.="DB\t"
429 my $self = shift;
430 $self->{value};