Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
#! /usr/bin/perl -w
use strict;
sub gendefine
{
my($hash)=@_;
for (sort keys %{$hash})
{
printf TUNE "#define __%-30s %s\n",$_,$hash->{$_};
}
}
sub gendefinefile
{
my($file,$hash32,$hash64)=@_;
open TUNE, ">$file";
print TUNE "#ifdef LONG_IS_64BIT\n";
gendefine $hash64;
print TUNE "#else\n";
gendefine $hash32;
print TUNE "#endif\n";
close TUNE;
}
sub gentune
{
my (%none32, %none64, %gmp32, %gmp64, @list);
while(<>)
{
/^#/ and next;
my($tunable,$none32,$gmp32,$none64,$gmp64) = split(' ');
push @list,$tunable;
$none32{$tunable}=$none32;
$gmp32{$tunable}=$gmp32;
$none64{$tunable}=$none64;
$gmp64{$tunable}=$gmp64;
}
open TUNE, ">src/headers/paritune.h";
print TUNE <<EOF;
#define PARI_TUNE
#ifdef PARI_TUNE
EOF
for (@list)
{
print TUNE "extern long $_;\n";
}
print TUNE "#else\n";
for (@list)
{
printf TUNE "# define %-30s __%s\n",$_,$_;
}
print TUNE "#endif\n";
close TUNE;
open TUNE, ">src/kernel/none/tune-gen.h";
print TUNE "#ifdef PARI_TUNE\n";
for (@list)
{
printf TUNE "long %-30s = __%s;\n",$_,$_;
}
print TUNE "#endif\n";
close TUNE;
gendefinefile "src/kernel/none/tune.h",\%none32,\%none64;
gendefinefile "src/kernel/gmp/tune.h",\%gmp32,\%gmp64;
}
sub gendesc
{
my ($file,$hash32,$hash64)=@_;
open DESC, "<$file";
my $hash = $hash64;
while(<DESC>)
{
/^#else/ and $hash=$hash32;
/#define[ \t]+__([^ ]+)[ \t]+([0-9]+)/ and $hash->{$1}=$2;
}
close DESC;
}
sub cc
{
my $v = $_[0];
return $v if (defined $v);
return -1;
}
sub gendescfile
{
my (%none32, %none64, %gmp32, %gmp64);
gendesc "src/kernel/none/tune.h",\%none32,\%none64;
gendesc "src/kernel/gmp/tune.h",\%gmp32,\%gmp64;
my %hlist=map {$_=>1} (keys %none32, keys %none64, keys %gmp32, keys %gmp64);
my @list = sort keys %hlist;
printf "%-30s %7s %7s %7s %7s\n","#LIMIT","none32","gmp32","none64","gmp64";
for $_ (@list)
{
printf "%-30s %7s %7s %7s %7s\n",$_,cc($none32{$_}),cc($gmp32{$_}),
cc($none64{$_}),cc($gmp64{$_});
}
}
my $arg = shift;
if ($arg eq "--gendesc")
{
&gendescfile;
}
elsif ($arg eq "--gentune")
{
&gentune;
} else
{
die("Error: gentune --gendesc|--gentune\n");
}