120 if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/)
121 { &::data_byte(0x66,0x0f,0x3a,0x44,0xc0|($1<<3)|$2,$imm); }
122 else
123 { &::generic("pclmulqdq",@_); }
124 }
125
126 sub ::rdrand
127 { my ($dst)=@_;
128 if ($dst =~ /(e[a-dsd][ixp])/)
129 { &::data_byte(0x0f,0xc7,0xf0|$regrm{$dst}); }
130 else
131 { &::generic("rdrand",@_); }
132 }
133
134 # label management
135 $lbdecor="L"; # local label decoration, set by package
136 $label="000";
137
138 sub ::islabel # see is argument is a known label
139 { my $i;
140 foreach $i (values %label) { return $i if ($i eq $_[0]); }
141 $label{$_[0]}; # can be undef
142 }
143
144 sub ::label # instantiate a function-scope label
145 { if (!defined($label{$_[0]}))
146 { $label{$_[0]}="${lbdecor}${label}${_[0]}"; $label++; }
147 $label{$_[0]};
148 }
149
150 sub ::LABEL # instantiate a file-scope label
151 { $label{$_[0]}=$_[1] if (!defined($label{$_[0]}));
152 $label{$_[0]};
153 }
154
155 sub ::static_label { &::LABEL($_[0],$lbdecor.$_[0]); }
156
157 sub ::set_label_B { push(@out,"@_:\n"); }
158 sub ::set_label
159 { my $label=&::label($_[0]);
239 { $elf=1; $android=1; require "x86gas.pl"; }
240 else
241 { print STDERR <<"EOF";
242 Pick one target type from
243 elf - Linux, FreeBSD, Solaris x86, etc.
244 a.out - DJGPP, elder OpenBSD, etc.
245 coff - GAS/COFF such as Win32 targets
246 win32n - Windows 95/Windows NT NASM format
247 nw-nasm - NetWare NASM format
248 macosx - Mac OS X
249 EOF
250 exit(1);
251 }
252
253 $pic=0;
254 for (@ARGV) { $pic=1 if (/\-[fK]PIC/i); }
255
256 $filename =~ s/\.pl$//;
257 &file($filename);
258 }
259
260 1;
|
120 if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/)
121 { &::data_byte(0x66,0x0f,0x3a,0x44,0xc0|($1<<3)|$2,$imm); }
122 else
123 { &::generic("pclmulqdq",@_); }
124 }
125
126 sub ::rdrand
127 { my ($dst)=@_;
128 if ($dst =~ /(e[a-dsd][ixp])/)
129 { &::data_byte(0x0f,0xc7,0xf0|$regrm{$dst}); }
130 else
131 { &::generic("rdrand",@_); }
132 }
133
134 # label management
135 $lbdecor="L"; # local label decoration, set by package
136 $label="000";
137
138 sub ::islabel # see is argument is a known label
139 { my $i;
140 if ($_[0] eq "_GLOBAL_OFFSET_TABLE_") { return $_[0]; }
141 foreach $i (values %label) { return $i if ($i eq $_[0]); }
142 $label{$_[0]}; # can be undef
143 }
144
145 sub ::label # instantiate a function-scope label
146 { if (!defined($label{$_[0]}))
147 { $label{$_[0]}="${lbdecor}${label}${_[0]}"; $label++; }
148 $label{$_[0]};
149 }
150
151 sub ::LABEL # instantiate a file-scope label
152 { $label{$_[0]}=$_[1] if (!defined($label{$_[0]}));
153 $label{$_[0]};
154 }
155
156 sub ::static_label { &::LABEL($_[0],$lbdecor.$_[0]); }
157
158 sub ::set_label_B { push(@out,"@_:\n"); }
159 sub ::set_label
160 { my $label=&::label($_[0]);
240 { $elf=1; $android=1; require "x86gas.pl"; }
241 else
242 { print STDERR <<"EOF";
243 Pick one target type from
244 elf - Linux, FreeBSD, Solaris x86, etc.
245 a.out - DJGPP, elder OpenBSD, etc.
246 coff - GAS/COFF such as Win32 targets
247 win32n - Windows 95/Windows NT NASM format
248 nw-nasm - NetWare NASM format
249 macosx - Mac OS X
250 EOF
251 exit(1);
252 }
253
254 $pic=0;
255 for (@ARGV) { $pic=1 if (/\-[fK]PIC/i); }
256
257 $filename =~ s/\.pl$//;
258 &file($filename);
259 }
260
261 sub ::hidden {}
262
263 1;
|