Lines Matching refs:self

106 	my	$self = shift;	# single instance in enough...
111 $self->{op} = $1;
112 $ret = $self;
115 undef $self->{sz};
116 if ($self->{op} =~ /^(movz)x?([bw]).*/) { # movz is pain...
117 $self->{op} = $1;
118 $self->{sz} = $2;
119 } elsif ($self->{op} =~ /call|jmp/) {
120 $self->{sz} = "";
121 } elsif ($self->{op} =~ /^p/ && $' !~ /^(ush|op|insrw)/) { # SSEn
122 $self->{sz} = "";
123 } elsif ($self->{op} =~ /^v/) { # VEX
124 $self->{sz} = "";
125 } elsif ($self->{op} =~ /mov[dq]/ && $line =~ /%xmm/) {
126 $self->{sz} = "";
127 } elsif ($self->{op} =~ /([a-z]{3,})([qlwb])$/) {
128 $self->{op} = $1;
129 $self->{sz} = $2;
135 my $self = shift;
137 $self->{sz} = $sz if (defined($sz) && !defined($self->{sz}));
138 $self->{sz};
141 my $self = shift;
143 if ($self->{op} eq "movz") { # movz is pain...
144 sprintf "%s%s%s",$self->{op},$self->{sz},shift;
145 } elsif ($self->{op} =~ /^set/) {
146 "$self->{op}";
147 } elsif ($self->{op} eq "ret") {
154 } elsif ($self->{op} eq "call" && !$elf && $current_segment eq ".init") {
157 "$self->{op}$self->{sz}";
160 $self->{op} =~ s/^movz/movzx/;
161 if ($self->{op} eq "ret") {
162 $self->{op} = "";
164 $self->{op} = "mov rdi,QWORD${PTR}[8+rsp]\t;WIN64 epilogue\n\t".
167 $self->{op} .= "DB\t0F3h,0C3h\t\t;repret";
168 } elsif ($self->{op} =~ /^(pop|push)f/) {
169 $self->{op} .= $self->{sz};
170 } elsif ($self->{op} eq "call" && $current_segment eq ".CRT\$XCU") {
171 $self->{op} = "\tDQ";
173 $self->{op};
177 my $self=shift;
179 $self->{op}=$op if (defined($op));
180 $self->{op};
185 my $self = shift; # single instance in enough...
190 $self->{value} = $1;
191 $ret = $self;
197 my $self = shift;
199 $self->{value} =~ s/\b(0b[0-1]+)/oct($1)/eig;
202 # in $self->{value}
203 my $value = $self->{value};
206 $self->{value} = $value;
208 sprintf "\$%s",$self->{value};
210 my $value = $self->{value};
218 my $self = shift; # single instance in enough...
224 $self->{asterisk} = $1;
225 $self->{label} = $2;
226 ($self->{base},$self->{index},$self->{scale})=split(/,/,$3);
227 $self->{scale} = 1 if (!defined($self->{scale}));
228 $ret = $self;
231 if ($win64 && $self->{label} =~ s/\@GOTPCREL//) {
235 $self->{base} =~ s/^%//;
236 $self->{index} =~ s/^%// if (defined($self->{index}));
242 my $self = shift;
245 $self->{label} =~ s/([_a-z][_a-z0-9]*)/$globals{$1} or $1/gei;
246 $self->{label} =~ s/\.L/$decor/g;
251 $self->{index} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/;
252 $self->{base} =~ s/^[er](.?[0-9xpi])[d]?$/r\1/;
255 # in $self->{label}...
257 $self->{label} =~ s/(?<![\w\$\.])(0x?[0-9a-f]+)/oct($1)/egi;
258 $self->{label} =~ s/\b([0-9]+\s*[\*\/\%]\s*[0-9]+)\b/eval($1)/eg;
263 $self->{label} =~ s/\b([0-9]+)\b/$1<<32>>32/eg;
265 $self->{label} =~ s/\b([0-9]+)\b/$1>>0/eg;
268 if (!$self->{label} && $self->{index} && $self->{scale}==1 &&
269 $self->{base} =~ /(rbp|r13)/) {
270 $self->{base} = $self->{index}; $self->{index} = $1;
274 $self->{label} =~ s/^___imp_/__imp__/ if ($flavour eq "mingw64");
276 if (defined($self->{index})) {
277 sprintf "%s%s(%s,%%%s,%d)",$self->{asterisk},
278 $self->{label},
279 $self->{base}?"%$self->{base}":"",
280 $self->{index},$self->{scale};
282 sprintf "%s%s(%%%s)", $self->{asterisk},$self->{label},$self->{base};
290 $self->{label} =~ s/\./\$/g;
291 $self->{label} =~ s/(?<![\w\$\.])0x([0-9a-f]+)/0$1h/ig;
292 $self->{label} = "($self->{label})" if ($self->{label} =~ /[\*\+\-\/]/);
294 ($self->{asterisk}) && ($sz="q") ||
300 if (defined($self->{index})) {
302 $self->{label}?"$self->{label}+":"",
303 $self->{index},$self->{scale},
304 $self->{base}?"+$self->{base}":"";
305 } elsif ($self->{base} eq "rip") {
306 sprintf "%s[%s]",$szmap{$sz},$self->{label};
309 $self->{label}?"$self->{label}+":"",
310 $self->{base};
318 my $self = {};
324 bless $self,$class;
325 $self->{asterisk} = $1;
326 $self->{value} = $2;
327 $ret = $self;
333 my $self = shift;
336 if ($self->{value} =~ /^r[\d]+b$/i) { $ret="b"; }
337 elsif ($self->{value} =~ /^r[\d]+w$/i) { $ret="w"; }
338 elsif ($self->{value} =~ /^r[\d]+d$/i) { $ret="l"; }
339 elsif ($self->{value} =~ /^r[\w]+$/i) { $ret="q"; }
340 elsif ($self->{value} =~ /^[a-d][hl]$/i){ $ret="b"; }
341 elsif ($self->{value} =~ /^[\w]{2}l$/i) { $ret="b"; }
342 elsif ($self->{value} =~ /^[\w]{2}$/i) { $ret="w"; }
343 elsif ($self->{value} =~ /^e[a-z]{2}$/i){ $ret="l"; }
348 my $self = shift;
349 if ($gas) { sprintf "%s%%%s",$self->{asterisk},$self->{value}; }
350 else { $self->{value}; }
355 my $self = shift; # single instance is enough...
360 $self->{value} = $1;
361 $ret = $self;
364 $self->{value} =~ s/^\.L/$decor/;
369 my $self = shift;
372 my $func = ($globals{$self->{value}} or $self->{value}) . ":";
374 $current_function->{name} eq $self->{value} &&
391 } elsif ($self->{value} ne "$current_function->{name}") {
392 $self->{value} .= ":" if ($masm && $ret!~m/^\$/);
393 $self->{value} . ":";
421 my $self = shift; # single instance is enough...
426 $self->{value} = $1;
427 $ret = $self;
430 $self->{value} =~ s/\@PLT// if (!$elf);
431 $self->{value} =~ s/([_a-z][_a-z0-9]*)/$globals{$1} or $1/gei;
432 $self->{value} =~ s/\.L/$decor/g;
437 my $self = shift;
439 "NEAR ".$self->{value};
441 $self->{value};
447 my $self = shift; # single instance is enough...
463 $ret = $self;
464 undef $self->{value};
509 $self->{value} = $dir . "\t" . $line;
512 $self->{value} = ""; # swallow extern
514 $self->{value} = "";
515 $self->{value} = ".def\t" . ($globals{$1} or $1) . ";\t" .
520 $self->{value} = "";
522 $self->{value} .= "${decor}SEH_end_$current_function->{name}:"
527 $self->{value} = ".p2align\t" . (log($line)/log(2));
531 if ($flavour eq "macosx") { $self->{value} = ".mod_init_func"; }
532 elsif ($flavour eq "mingw64") { $self->{value} = ".section\t.ctors"; }
537 if ($flavour eq "macosx") { $self->{value} = ".private_extern\t$prefix$line"; }
538 elsif ($flavour eq "mingw64") { $self->{value} = ""; }
540 $self->{value} = "$dir\t$prefix$line";
541 $self->{value} =~ s|,([0-9]+),([0-9]+)$|",$1,".log($2)/log(2)|e if ($flavour eq "macosx");
544 return $self;
559 $self->{value} = $v;
570 $self->{value} = $v;
596 $self->{value} = $v;
599 /\.extern/ && do { $self->{value} = "EXTERN\t".$line;
600 $self->{value} .= ":NEAR" if ($masm);
604 && do { $self->{value} = $masm?"PUBLIC":"global";
605 $self->{value} .= "\t".$line;
609 undef $self->{value};
611 $self->{value}="${decor}SEH_end_$current_function->{name}:";
612 $self->{value}.=":\n" if($masm);
614 $self->{value}.="$current_function->{name}\tENDP" if($masm && $current_function->{name});
619 /\.align/ && do { $self->{value} = "ALIGN\t".$line; last; };
633 $self->{value} = "\tD$sz\t";
634 for (@arr) { $self->{value} .= &$conv($_).","; }
635 $self->{value} .= &$conv($last);
642 $self->{value}.="DB\t"
646 $self->{value}.="DB\t"
660 $self->{value} = $v;
670 my $self = shift;
671 $self->{value};