X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/4e4e5a6f2694187498445a6ac6f1634ce8141119..81345200c95645a1b0d2635520f96ad55dfde63f:/create_jit_stubs diff --git a/create_jit_stubs b/create_jit_stubs index 4d510ea..404fa36 100644 --- a/create_jit_stubs +++ b/create_jit_stubs @@ -22,48 +22,80 @@ use strict; use File::Basename; use Getopt::Long; -my $usage = basename($0) . " --prefix prefix [--offset offset] file"; +my $usage = basename($0) . " --prefix prefix --header header file"; my $rtype_template = quotemeta("#rtype#"); -my $offset_template = quotemeta("#offset#"); my $op_template = quotemeta("#op#"); my $prefix; -my $offset = 32; +my $header; +my $enable_dfg = 0; my $file; my $getOptionsResult = GetOptions( 'prefix=s' => \$prefix, - 'offset=i' => \$offset + 'header=s' => \$header, + 'dfg!' => \$enable_dfg ); $file = $ARGV[0]; -die "$usage\n" unless ($prefix and $file); +die "$usage\n" unless ($header and $prefix and $file); my $stub_template = ""; +my $output_end = ""; my $stub = ""; my $rtype = ""; my $op = ""; +my $if_counter = 0; +my $dfg_begin = 0; print STDERR "Creating JIT stubs for $file \n"; -open(IN, $file) or die "No such file $file"; +open(IN, $header) or die "No such file $header"; while ( $_ = ) { + if ( /^$prefix\_BEGIN\((.*)\)/ ) { + $stub = $1; + print $stub . "\n"; + } if ( /^$prefix\((.*)\)/ ) { $stub_template .= $1 . "\n"; } + if ( /^$prefix\_END\((.*)\)/ ) { + $output_end .= $1 . "\n"; + } +} + +close(IN); +open(IN, $file) or die "No such file $file"; + +while ( $_ = ) { + if ( /^#if (.*)/ ) { + $if_counter++; + if ( $1 eq "ENABLE(DFG_JIT)" ) { + $dfg_begin = $if_counter; + } + } + if ( /^#endif/ ) { + if ( $if_counter == $dfg_begin ) { + $dfg_begin = 0; + } + $if_counter--; + } if ( /^DEFINE_STUB_FUNCTION\((.*), (.*)\)/ ) { $stub = $stub_template; $rtype = quotemeta($1); $op = quotemeta($2); - $stub =~ s/$offset_template/$offset/g; $stub =~ s/$rtype_template/$rtype/g; $stub =~ s/$op_template/$op/g; $stub =~ s/\\\*/\*/g; - print $stub; + if ( $enable_dfg == 1 || $dfg_begin == 0 ) { + print $stub; + } } } +print $output_end; + close(IN);