Added POD tests and a Perl::Critic test
[nasm/perl-rewrite.git] / perl / lib / Nasm / Regs / Format / H.pm
blob97edf300a1a530dc5101fd9c3b9984f487944d03
1 =head1 NAME
3 Nasm::Regs::Format::H
5 =cut
7 package Nasm::Regs::Format::H;
8 use strict;
9 use warnings;
12 sub _format{
13 my($regs) = @_;
14 my $filename = $regs->filename;
15 my $out = <<END;
16 /* automatically generated from $filename - do not edit */
18 #ifndef NASM_REGS_H
19 #define NASM_REGS_H
20 END
21 $out .= _format_h_enum($regs);
22 $out .= "\n";
23 $out .= _format_h_define($regs);
24 $out .= "\n\n#endif /* NASM_REGS_H */\n";
25 return $out;
31 # Internal for format h
32 sub _format_h_enum{
33 my($regs) = @_;
34 my $count = 1;
35 my $out = <<END;
37 #define EXPR_REG_START $count
39 enum reg_enum {
40 R_zero = 0,
41 R_none = -1,
42 END
44 my $append = ' = EXPR_REG_START';
46 for my $name ( $regs->names ){
47 next unless $name;
48 my $reg = $regs->{$name};
49 $out .= ' R_'.uc($name).$append.",\n";
51 $append = '' if $append;
52 $count++;
54 $count--;
56 $out .= <<END;
57 REG_ENUM_LIMIT
60 #define EXPR_REG_END $count
61 END
63 return $out;
69 # Internal for format h
70 sub _format_h_define{
71 my($regs) = @_;
72 my $out = '';
73 for my $name ( $regs->names ) {
74 my $register = $regs->Register($name);
76 $out .= sprintf
77 "#define %-15s %2d\n",
78 'REG_NUM_'.uc($name),
79 $register->x86RegisterNumber;
81 return $out;