projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #5714 from alexischr/update_bockbuild
[mono.git]
/
mono
/
mini
/
genmdesc.pl
diff --git
a/mono/mini/genmdesc.pl
b/mono/mini/genmdesc.pl
old mode 100644
(file)
new mode 100755
(executable)
index
26975df
..
ae49ecb
--- a/
mono/mini/genmdesc.pl
+++ b/
mono/mini/genmdesc.pl
@@
-13,16
+13,20
@@
sub INST_SRC2 () {return 2;}
sub INST_SRC3 () {return 3;}
sub INST_LEN () {return 4;}
sub INST_CLOB () {return 5;}
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_NACL () {return 6;}
-sub INST_MAX () {return
7
;}
+sub INST_MAX () {return
6
;}
# this must include all the #defines used in mini-ops.h
my @defines = qw (__i386__ __x86_64__ __ppc__ __powerpc__ __ppc64__ __arm__
# this must include all the #defines used in mini-ops.h
my @defines = qw (__i386__ __x86_64__ __ppc__ __powerpc__ __ppc64__ __arm__
- __sparc__ sparc __s390__ s390 __
ia64__ __alpha__ __mips
__);
+ __sparc__ sparc __s390__ s390 __
alpha__ __mips__ __aarch64__ __wasm
__);
my %table =();
my %template_table =();
my @opcodes = ();
my %table =();
my %template_table =();
my @opcodes = ();
+my $nacl = 0;
+
sub parse_file
{
my ($define, $file) = @_;
sub parse_file
{
my ($define, $file) = @_;
@@
-75,13
+79,18
@@
sub load_opcodes
if ($arch =~ "__i386__") {
$arch_define = "TARGET_X86";
}
if ($arch =~ "__i386__") {
$arch_define = "TARGET_X86";
}
- if ($arch =~ "
__x86_64__") {
+ if ($arch =~ "__x86_64__") {
$arch_define = "TARGET_AMD64";
}
if ($arch =~ "__arm__") {
$arch_define = "TARGET_ARM";
}
$arch_define = "TARGET_AMD64";
}
if ($arch =~ "__arm__") {
$arch_define = "TARGET_ARM";
}
-
+ if ($arch =~ "__aarch64__") {
+ $arch_define = "TARGET_ARM64";
+ }
+ if ($arch =~ "__wasm__") {
+ $arch_define = "TARGET_WASM";
+ }
parse_file ($arch_define, "$srcdir/mini-ops.h");
return;
$cpp .= " -D$arch_define $srcdir/mini-ops.h|";
parse_file ($arch_define, "$srcdir/mini-ops.h");
return;
$cpp .= " -D$arch_define $srcdir/mini-ops.h|";
@@
-167,14
+176,18
@@
sub build_spec {
my $res = "";
my $n = 0;
for (my $i = 0; $i < @vals; ++$i) {
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) {
$n = $vals [$i];
if (defined $vals [$i]) {
if ($i == INST_LEN) {
$n = $vals [$i];
- if (defined $vals [INST_NACL]){
- $n += $vals [INST_NACL];
+ if ($n =~ /[^0-9]/) {
+ die "Invalid instruction length $n\n";
+ }
+ if ((defined $vals [INST_NACL]) and $nacl == 1){
+ $n = $vals [INST_NACL];
}
$res .= sprintf ("\\x%x\" \"", + $n);
}
$res .= sprintf ("\\x%x\" \"", + $n);
- }
if ($i != INST_NACL)
{
+ }
else
{
if ($vals [$i] =~ /^[a-zA-Z0-9]$/) {
$res .= $vals [$i];
} else {
if ($vals [$i] =~ /^[a-zA-Z0-9]$/) {
$res .= $vals [$i];
} else {
@@
-192,11
+205,11
@@
sub build_table {
my ($fname, $name) = @_;
my $i;
my $idx;
my ($fname, $name) = @_;
my $i;
my $idx;
- my $idx_array = "const guint16 ${name}_idx [] = {\n";
+ my $idx_array = "const guint16
mono_
${name}_idx [] = {\n";
open (OUT, ">$fname") || die "Cannot open file $fname: $!";
print OUT "/* File automatically generated by genmdesc, don't change */\n\n";
open (OUT, ">$fname") || die "Cannot open file $fname: $!";
print OUT "/* File automatically generated by genmdesc, don't change */\n\n";
- print OUT "const char $name [] = {\n";
+ print OUT "const char
mono_
$name [] = {\n";
print OUT "\t\"" . ("\\x0" x INST_MAX) . "\"\t/* null entry */\n";
$idx = 1;
print OUT "\t\"" . ("\\x0" x INST_MAX) . "\"\t/* null entry */\n";
$idx = 1;
@@
-221,12
+234,17
@@
sub build_table {
}
sub usage {
}
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 ();
}
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;
my $name = shift || usage ();
usage () unless @ARGV;
my @files = @ARGV;