X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/4e4e5a6f2694187498445a6ac6f1634ce8141119..217a6308cd6a1dc049a0bb69263bd4c91f91c4d0:/create_jit_stubs diff --git a/create_jit_stubs b/create_jit_stubs index 4d510ea..d90fa8e 100644 --- a/create_jit_stubs +++ b/create_jit_stubs @@ -22,19 +22,18 @@ use strict; use File::Basename; use Getopt::Long; -my $usage = basename($0) . " --prefix prefix [--offset offset] file"; +my $usage = basename($0) . " --prefix prefix file"; my $rtype_template = quotemeta("#rtype#"); -my $offset_template = quotemeta("#offset#"); my $op_template = quotemeta("#op#"); my $prefix; -my $offset = 32; +my $enable_dfg = 0; my $file; my $getOptionsResult = GetOptions( 'prefix=s' => \$prefix, - 'offset=i' => \$offset + 'dfg!' => \$enable_dfg ); $file = $ARGV[0]; @@ -42,28 +41,53 @@ $file = $ARGV[0]; die "$usage\n" unless ($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"; 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 ( /^$prefix\_BEGIN\((.*)\)/ ) { + $stub = $1; + print $stub . "\n"; + } if ( /^$prefix\((.*)\)/ ) { $stub_template .= $1 . "\n"; } + if ( /^$prefix\_END\((.*)\)/ ) { + $output_end .= $1 . "\n"; + } 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);