4 my $in = shift or die "No input name";
5 my $out = shift or die "No output name";
6 open(IN, $in) or die "Cannot open input $in: $!";
7 open(OUT, "> $out") or die "Cannot create $out: $!";
9 # AUTOMATICALLY GENERATED BY regops.perl
10 package Imager::Regops;
13 use vars qw(@ISA @EXPORT @EXPORT_OK %Attr $MaxOperands $PackCode);
15 @EXPORT_OK = qw(%Attr $MaxOperands $PackCode);
24 if (/^\s*rbc_(\w+)/) {
26 push(@ops, uc "RBC_$op");
27 # each line has a comment with the registers used - find the maximum
28 # I could probably do this as one line, but let's not
29 my @parms = /\b([rp][a-z])\b/g;
30 $max_opr = @parms if @parms > $max_opr;
31 my $types = join("", map {substr($_,0,1)} @parms);
32 my ($result) = /->\s*([rp])/;
33 $attr{$op} = { parms=>scalar @parms,
39 print OUT "use constant RBC_\U$op\E => $opcode;\n";
42 if (/^\#define RM_WORD_PACK \"(.)\"/) {
46 print OUT "\n\@EXPORT = qw(@ops);\n\n";
47 print OUT Data::Dumper->Dump([\%attr],["*Attr"]);
48 print OUT "\$MaxOperands = $max_opr;\n";
49 print OUT qq/\$PackCode = "$reg_pack";\n/;
57 Imager::Regops - generated information about the register based VM
62 $Imager::Regops::Attr{$opname}->{opcode} # opcode for given operator
63 $Imager::Regops::Attr{$opname}->{parms} # number of parameters
64 $Imager::Regops::Attr{$opname}->{types} # types of parameters
65 $Imager::Regops::Attr{$opname}->{func} # operator is a function
66 $Imager::Regops::Attr{$opname}->{result} # r for numeric, p for pixel result
67 $Imager::Regops::MaxOperands; # maximum number of operands
71 This module is generated automatically from regmach.h so we don't need to
72 maintain the same information in at least one extra place.
74 At least that's the idea.
78 Tony Cook, tony@develop-help.com
82 perl(1), Imager(3), http://www.eecs.umich.edu/~addi/perl/Imager/
87 close(OUT) or die "Cannot close $out: $!";