no locale;
# must keep in sync with mini.h
-my @spec_names = qw(dest src1 src2 src3 len clob);
+my @spec_names = qw(dest src1 src2 src3 len clob nacl);
sub INST_DEST () {return 0;}
sub INST_SRC1 () {return 1;}
sub INST_SRC2 () {return 2;}
sub INST_SRC3 () {return 3;}
sub INST_LEN () {return 4;}
sub INST_CLOB () {return 5;}
+# making INST_NACL the same as INST_MAX is not a mistake,
+# INST_NACL writes over INST_LEN, it's not its own field
+sub INST_NACL () {return 6;}
sub INST_MAX () {return 6;}
# this must include all the #defines used in mini-ops.h
my %template_table =();
my @opcodes = ();
+my $nacl = 0;
+
sub parse_file
{
my ($define, $file) = @_;
if ($arch =~ "__i386__") {
$arch_define = "TARGET_X86";
}
- if ($arch =~ " __x86_64__") {
+ if ($arch =~ "__x86_64__") {
$arch_define = "TARGET_AMD64";
}
if ($arch =~ "__arm__") {
}
#print "vals: " . join (' ', @vals) . "\n";
my $res = "";
+ my $n = 0;
for (my $i = 0; $i < @vals; ++$i) {
+ next if $i == INST_NACL;
if (defined $vals [$i]) {
if ($i == INST_LEN) {
- $res .= sprintf ("\\x%x\" \"", +$vals [$i]);
+ $n = $vals [$i];
+ if ((defined $vals [INST_NACL]) and $nacl == 1){
+ $n = $vals [INST_NACL];
+ }
+ $res .= sprintf ("\\x%x\" \"", + $n);
} else {
if ($vals [$i] =~ /^[a-zA-Z0-9]$/) {
$res .= $vals [$i];
}
sub usage {
- die "genmdesc.pl arch srcdir output name desc [desc2 ...]\n";
+ die "genmdesc.pl arch srcdir [--nacl] output name desc [desc2 ...]\n";
}
my $arch = shift || usage ();
my $srcdir = shift || usage ();
my $output = shift || usage ();
+if ($output eq "--nacl")
+{
+ $nacl = 1;
+ $output = shift || usage();
+}
my $name = shift || usage ();
usage () unless @ARGV;
my @files = @ARGV;