8438824a23e7b5c0468db79fdccaeb36538031f2
[openssl.git] / crypto / perlasm / x86asm.pl
1 #!/usr/local/bin/perl
2
3 # require 'x86asm.pl';
4 # &asm_init("cpp","des-586.pl");
5 # XXX
6 # XXX
7 # main'asm_finish
8
9 sub main'asm_finish
10         {
11         &file_end();
12         &asm_finish_cpp() if $cpp;
13         print &asm_get_output();
14         }
15
16 sub main'asm_init
17         {
18         ($type,$fn,$i386)=@_;
19         $filename=$fn;
20
21         $elf=$cpp=$coff=$aout=$win32=$netware=$mwerks=0;
22         if (    ($type eq "elf"))
23                 { $elf=1; require "x86unix.pl"; }
24         elsif ( ($type eq "a.out"))
25                 { $aout=1; require "x86unix.pl"; }
26         elsif ( ($type eq "coff" or $type eq "gaswin"))
27                 { $coff=1; require "x86unix.pl"; }
28         elsif ( ($type eq "cpp"))
29                 { $cpp=1; require "x86unix.pl"; }
30         elsif ( ($type eq "win32"))
31                 { $win32=1; require "x86ms.pl"; }
32         elsif ( ($type eq "win32n"))
33                 { $win32=1; require "x86nasm.pl"; }
34         elsif ( ($type eq "nw-nasm"))
35                 { $netware=1; require "x86nasm.pl"; }
36         elsif ( ($type eq "nw-mwasm"))
37                 { $netware=1; $mwerks=1; require "x86nasm.pl"; }
38         else
39                 {
40                 print STDERR <<"EOF";
41 Pick one target type from
42         elf     - Linux, FreeBSD, Solaris x86, etc.
43         a.out   - OpenBSD, DJGPP, etc.
44         coff    - GAS/COFF such as Win32 targets
45         win32   - Windows 95/Windows NT
46         win32n  - Windows 95/Windows NT NASM format
47         nw-nasm - NetWare NASM format
48         nw-mwasm- NetWare Metrowerks Assembler
49 EOF
50                 exit(1);
51                 }
52
53         $pic=0;
54         for (@ARGV) {   $pic=1 if (/\-[fK]PIC/i);       }
55
56         &asm_init_output();
57
58 &comment("Don't even think of reading this code");
59 &comment("It was automatically generated by $filename");
60 &comment("Which is a perl program used to generate the x86 assember for");
61 &comment("any of ELF, a.out, COFF, Win32, ...");
62 &comment("eric <eay\@cryptsoft.com>");
63 &comment("");
64
65         $filename =~ s/\.pl$//;
66         &file($filename);
67         }
68
69 sub asm_finish_cpp
70         {
71         return unless $cpp;
72
73         local($tmp,$i);
74         foreach $i (&get_labels())
75                 {
76                 $tmp.="#define $i _$i\n";
77                 }
78         print <<"EOF";
79 /* Run the C pre-processor over this file with one of the following defined
80  * ELF - elf object files,
81  * OUT - a.out object files,
82  * BSDI - BSDI style a.out object files
83  * SOL - Solaris style elf
84  */
85
86 #define TYPE(a,b)       .type   a,b
87 #define SIZE(a,b)       .size   a,b
88
89 #if defined(OUT) || (defined(BSDI) && !defined(ELF))
90 $tmp
91 #endif
92
93 #ifdef OUT
94 #define OK      1
95 #define ALIGN   4
96 #if defined(__CYGWIN__) || defined(__DJGPP__) || defined(__MINGW32__)
97 #undef SIZE
98 #undef TYPE
99 #define SIZE(a,b)
100 #define TYPE(a,b)       .def a; .scl 2; .type 32; .endef
101 #endif /* __CYGWIN || __DJGPP */
102 #endif
103
104 #if defined(BSDI) && !defined(ELF)
105 #define OK              1
106 #define ALIGN           4
107 #undef SIZE
108 #undef TYPE
109 #define SIZE(a,b)
110 #define TYPE(a,b)
111 #endif
112
113 #if defined(ELF) || defined(SOL)
114 #define OK              1
115 #define ALIGN           16
116 #endif
117
118 #ifndef OK
119 You need to define one of
120 ELF - elf systems - linux-elf, NetBSD and DG-UX
121 OUT - a.out systems - linux-a.out and FreeBSD
122 SOL - solaris systems, which are elf with strange comment lines
123 BSDI - a.out with a very primative version of as.
124 #endif
125
126 /* Let the Assembler begin :-) */
127 EOF
128         }
129
130 1;