]> git.ipfire.org Git - thirdparty/openssl.git/blame - crypto/des/des_opts.c
Run util/openssl-format-source -v -c .
[thirdparty/openssl.git] / crypto / des / des_opts.c
CommitLineData
d02b48c6 1/* crypto/des/des_opts.c */
58964a49 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
d02b48c6
RE
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
40720ce3 8 *
d02b48c6
RE
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
40720ce3 15 *
d02b48c6
RE
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
40720ce3 22 *
d02b48c6
RE
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
40720ce3 37 * 4. If you include any Windows specific code (or a derivative thereof) from
d02b48c6
RE
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40720ce3 40 *
d02b48c6
RE
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
40720ce3 52 *
d02b48c6
RE
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
40720ce3
MC
59/*
60 * define PART1, PART2, PART3 or PART4 to build only with a few of the
61 * options. This is for machines with 64k code segment size restrictions.
62 */
d02b48c6 63
70d70a3c 64#if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX)
40720ce3 65# define TIMES
d02b48c6
RE
66#endif
67
68#include <stdio.h>
bc36ee62 69#ifndef OPENSSL_SYS_MSDOS
40720ce3
MC
70# include <openssl/e_os2.h>
71# include OPENSSL_UNISTD
d02b48c6 72#else
40720ce3 73# include <io.h>
d02b48c6
RE
74extern void exit();
75#endif
4d8743f4
RL
76
77#ifndef OPENSSL_SYS_NETWARE
40720ce3 78# include <signal.h>
4d8743f4
RL
79#endif
80
d02b48c6 81#ifndef _IRIX
40720ce3 82# include <time.h>
d02b48c6
RE
83#endif
84#ifdef TIMES
40720ce3
MC
85# include <sys/types.h>
86# include <sys/times.h>
d02b48c6 87#endif
7d7d2cbc 88
40720ce3
MC
89/*
90 * Depending on the VMS version, the tms structure is perhaps defined. The
91 * __TMS macro will show if it was. If it wasn't defined, we should undefine
92 * TIMES, since that tells the rest of the program how things should be
93 * handled. -- Richard Levitte
94 */
bc36ee62 95#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
40720ce3 96# undef TIMES
d02b48c6 97#endif
7d7d2cbc 98
d02b48c6 99#ifndef TIMES
40720ce3 100# include <sys/timeb.h>
d02b48c6
RE
101#endif
102
dfeab068 103#if defined(sun) || defined(__ultrix)
40720ce3
MC
104# define _POSIX_SOURCE
105# include <limits.h>
106# include <sys/param.h>
d02b48c6
RE
107#endif
108
ec577822 109#include <openssl/des.h>
d02b48c6
RE
110#include "spr.h"
111
112#define DES_DEFAULT_OPTIONS
113
114#if !defined(PART1) && !defined(PART2) && !defined(PART3) && !defined(PART4)
40720ce3
MC
115# define PART1
116# define PART2
117# define PART3
118# define PART4
d02b48c6
RE
119#endif
120
121#ifdef PART1
122
40720ce3
MC
123# undef DES_UNROLL
124# undef DES_RISC1
125# undef DES_RISC2
126# undef DES_PTR
127# undef D_ENCRYPT
128# define DES_encrypt1 des_encrypt_u4_cisc_idx
129# define DES_encrypt2 des_encrypt2_u4_cisc_idx
130# define DES_encrypt3 des_encrypt3_u4_cisc_idx
131# define DES_decrypt3 des_decrypt3_u4_cisc_idx
132# undef HEADER_DES_LOCL_H
133# include "des_enc.c"
134
135# define DES_UNROLL
136# undef DES_RISC1
137# undef DES_RISC2
138# undef DES_PTR
139# undef D_ENCRYPT
140# undef DES_encrypt1
141# undef DES_encrypt2
142# undef DES_encrypt3
143# undef DES_decrypt3
144# define DES_encrypt1 des_encrypt_u16_cisc_idx
145# define DES_encrypt2 des_encrypt2_u16_cisc_idx
146# define DES_encrypt3 des_encrypt3_u16_cisc_idx
147# define DES_decrypt3 des_decrypt3_u16_cisc_idx
148# undef HEADER_DES_LOCL_H
149# include "des_enc.c"
150
151# undef DES_UNROLL
152# define DES_RISC1
153# undef DES_RISC2
154# undef DES_PTR
155# undef D_ENCRYPT
156# undef DES_encrypt1
157# undef DES_encrypt2
158# undef DES_encrypt3
159# undef DES_decrypt3
160# define DES_encrypt1 des_encrypt_u4_risc1_idx
161# define DES_encrypt2 des_encrypt2_u4_risc1_idx
162# define DES_encrypt3 des_encrypt3_u4_risc1_idx
163# define DES_decrypt3 des_decrypt3_u4_risc1_idx
164# undef HEADER_DES_LOCL_H
165# include "des_enc.c"
d02b48c6
RE
166
167#endif
168
169#ifdef PART2
170
40720ce3
MC
171# undef DES_UNROLL
172# undef DES_RISC1
173# define DES_RISC2
174# undef DES_PTR
175# undef D_ENCRYPT
176# undef DES_encrypt1
177# undef DES_encrypt2
178# undef DES_encrypt3
179# undef DES_decrypt3
180# define DES_encrypt1 des_encrypt_u4_risc2_idx
181# define DES_encrypt2 des_encrypt2_u4_risc2_idx
182# define DES_encrypt3 des_encrypt3_u4_risc2_idx
183# define DES_decrypt3 des_decrypt3_u4_risc2_idx
184# undef HEADER_DES_LOCL_H
185# include "des_enc.c"
186
187# define DES_UNROLL
188# define DES_RISC1
189# undef DES_RISC2
190# undef DES_PTR
191# undef D_ENCRYPT
192# undef DES_encrypt1
193# undef DES_encrypt2
194# undef DES_encrypt3
195# undef DES_decrypt3
196# define DES_encrypt1 des_encrypt_u16_risc1_idx
197# define DES_encrypt2 des_encrypt2_u16_risc1_idx
198# define DES_encrypt3 des_encrypt3_u16_risc1_idx
199# define DES_decrypt3 des_decrypt3_u16_risc1_idx
200# undef HEADER_DES_LOCL_H
201# include "des_enc.c"
202
203# define DES_UNROLL
204# undef DES_RISC1
205# define DES_RISC2
206# undef DES_PTR
207# undef D_ENCRYPT
208# undef DES_encrypt1
209# undef DES_encrypt2
210# undef DES_encrypt3
211# undef DES_decrypt3
212# define DES_encrypt1 des_encrypt_u16_risc2_idx
213# define DES_encrypt2 des_encrypt2_u16_risc2_idx
214# define DES_encrypt3 des_encrypt3_u16_risc2_idx
215# define DES_decrypt3 des_decrypt3_u16_risc2_idx
216# undef HEADER_DES_LOCL_H
217# include "des_enc.c"
d02b48c6
RE
218
219#endif
220
221#ifdef PART3
222
40720ce3
MC
223# undef DES_UNROLL
224# undef DES_RISC1
225# undef DES_RISC2
226# define DES_PTR
227# undef D_ENCRYPT
228# undef DES_encrypt1
229# undef DES_encrypt2
230# undef DES_encrypt3
231# undef DES_decrypt3
232# define DES_encrypt1 des_encrypt_u4_cisc_ptr
233# define DES_encrypt2 des_encrypt2_u4_cisc_ptr
234# define DES_encrypt3 des_encrypt3_u4_cisc_ptr
235# define DES_decrypt3 des_decrypt3_u4_cisc_ptr
236# undef HEADER_DES_LOCL_H
237# include "des_enc.c"
238
239# define DES_UNROLL
240# undef DES_RISC1
241# undef DES_RISC2
242# define DES_PTR
243# undef D_ENCRYPT
244# undef DES_encrypt1
245# undef DES_encrypt2
246# undef DES_encrypt3
247# undef DES_decrypt3
248# define DES_encrypt1 des_encrypt_u16_cisc_ptr
249# define DES_encrypt2 des_encrypt2_u16_cisc_ptr
250# define DES_encrypt3 des_encrypt3_u16_cisc_ptr
251# define DES_decrypt3 des_decrypt3_u16_cisc_ptr
252# undef HEADER_DES_LOCL_H
253# include "des_enc.c"
254
255# undef DES_UNROLL
256# define DES_RISC1
257# undef DES_RISC2
258# define DES_PTR
259# undef D_ENCRYPT
260# undef DES_encrypt1
261# undef DES_encrypt2
262# undef DES_encrypt3
263# undef DES_decrypt3
264# define DES_encrypt1 des_encrypt_u4_risc1_ptr
265# define DES_encrypt2 des_encrypt2_u4_risc1_ptr
266# define DES_encrypt3 des_encrypt3_u4_risc1_ptr
267# define DES_decrypt3 des_decrypt3_u4_risc1_ptr
268# undef HEADER_DES_LOCL_H
269# include "des_enc.c"
d02b48c6
RE
270
271#endif
272
273#ifdef PART4
274
40720ce3
MC
275# undef DES_UNROLL
276# undef DES_RISC1
277# define DES_RISC2
278# define DES_PTR
279# undef D_ENCRYPT
280# undef DES_encrypt1
281# undef DES_encrypt2
282# undef DES_encrypt3
283# undef DES_decrypt3
284# define DES_encrypt1 des_encrypt_u4_risc2_ptr
285# define DES_encrypt2 des_encrypt2_u4_risc2_ptr
286# define DES_encrypt3 des_encrypt3_u4_risc2_ptr
287# define DES_decrypt3 des_decrypt3_u4_risc2_ptr
288# undef HEADER_DES_LOCL_H
289# include "des_enc.c"
290
291# define DES_UNROLL
292# define DES_RISC1
293# undef DES_RISC2
294# define DES_PTR
295# undef D_ENCRYPT
296# undef DES_encrypt1
297# undef DES_encrypt2
298# undef DES_encrypt3
299# undef DES_decrypt3
300# define DES_encrypt1 des_encrypt_u16_risc1_ptr
301# define DES_encrypt2 des_encrypt2_u16_risc1_ptr
302# define DES_encrypt3 des_encrypt3_u16_risc1_ptr
303# define DES_decrypt3 des_decrypt3_u16_risc1_ptr
304# undef HEADER_DES_LOCL_H
305# include "des_enc.c"
306
307# define DES_UNROLL
308# undef DES_RISC1
309# define DES_RISC2
310# define DES_PTR
311# undef D_ENCRYPT
312# undef DES_encrypt1
313# undef DES_encrypt2
314# undef DES_encrypt3
315# undef DES_decrypt3
316# define DES_encrypt1 des_encrypt_u16_risc2_ptr
317# define DES_encrypt2 des_encrypt2_u16_risc2_ptr
318# define DES_encrypt3 des_encrypt3_u16_risc2_ptr
319# define DES_decrypt3 des_decrypt3_u16_risc2_ptr
320# undef HEADER_DES_LOCL_H
321# include "des_enc.c"
d02b48c6
RE
322
323#endif
324
325/* The following if from times(3) man page. It may need to be changed */
326#ifndef HZ
327# ifndef CLK_TCK
40720ce3
MC
328# ifndef _BSD_CLK_TCK_ /* FreeBSD fix */
329# define HZ 100.0
330# else /* _BSD_CLK_TCK_ */
d02b48c6
RE
331# define HZ ((double)_BSD_CLK_TCK_)
332# endif
40720ce3 333# else /* CLK_TCK */
d02b48c6
RE
334# define HZ ((double)CLK_TCK)
335# endif
336#endif
337
40720ce3
MC
338#define BUFSIZE ((long)1024)
339long run = 0;
d02b48c6 340
d02b48c6 341double Time_F(int s);
d02b48c6 342#ifdef SIGALRM
40720ce3
MC
343# if defined(__STDC__) || defined(sgi)
344# define SIGRETTYPE void
345# else
346# define SIGRETTYPE int
347# endif
d02b48c6 348
d02b48c6 349SIGRETTYPE sig_done(int sig);
6b691a5c 350SIGRETTYPE sig_done(int sig)
40720ce3
MC
351{
352 signal(SIGALRM, sig_done);
353 run = 0;
354# ifdef LINT
355 sig = sig;
356# endif
357}
d02b48c6
RE
358#endif
359
40720ce3
MC
360#define START 0
361#define STOP 1
d02b48c6 362
6b691a5c 363double Time_F(int s)
40720ce3
MC
364{
365 double ret;
d02b48c6 366#ifdef TIMES
40720ce3
MC
367 static struct tms tstart, tend;
368
369 if (s == START) {
370 times(&tstart);
371 return (0);
372 } else {
373 times(&tend);
374 ret = ((double)(tend.tms_utime - tstart.tms_utime)) / HZ;
375 return ((ret == 0.0) ? 1e-6 : ret);
376 }
377#else /* !times() */
378 static struct timeb tstart, tend;
379 long i;
380
381 if (s == START) {
382 ftime(&tstart);
383 return (0);
384 } else {
385 ftime(&tend);
386 i = (long)tend.millitm - (long)tstart.millitm;
387 ret = ((double)(tend.time - tstart.time)) + ((double)i) / 1000.0;
388 return ((ret == 0.0) ? 1e-6 : ret);
389 }
d02b48c6 390#endif
40720ce3 391}
d02b48c6
RE
392
393#ifdef SIGALRM
40720ce3 394# define print_name(name) fprintf(stderr,"Doing %s's for 10 seconds\n",name); alarm(10);
d02b48c6 395#else
40720ce3 396# define print_name(name) fprintf(stderr,"Doing %s %ld times\n",name,cb);
d02b48c6 397#endif
40720ce3 398
d02b48c6 399#define time_it(func,name,index) \
40720ce3
MC
400 print_name(name); \
401 Time_F(START); \
402 for (count=0,run=1; COND(cb); count++) \
403 { \
404 unsigned long d[2]; \
405 func(d,&sch,DES_ENCRYPT); \
406 } \
407 tm[index]=Time_F(STOP); \
408 fprintf(stderr,"%ld %s's in %.2f second\n",count,name,tm[index]); \
409 tm[index]=((double)COUNT(cb))/tm[index];
d02b48c6
RE
410
411#define print_it(name,index) \
40720ce3
MC
412 fprintf(stderr,"%s bytes per sec = %12.2f (%5.1fuS)\n",name, \
413 tm[index]*8,1.0e6/tm[index]);
d02b48c6 414
6b691a5c 415int main(int argc, char **argv)
40720ce3
MC
416{
417 long count;
418 static unsigned char buf[BUFSIZE];
419 static DES_cblock key =
420 { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 };
421 static DES_cblock key2 =
422 { 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12 };
423 static DES_cblock key3 =
424 { 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34 };
425 DES_key_schedule sch, sch2, sch3;
426 double d, tm[16], max = 0;
427 int rank[16];
428 char *str[16];
429 int max_idx = 0, i, num = 0, j;
d02b48c6 430#ifndef SIGALARM
40720ce3 431 long ca, cb, cc, cd, ce;
d02b48c6
RE
432#endif
433
40720ce3
MC
434 for (i = 0; i < 12; i++) {
435 tm[i] = 0.0;
436 rank[i] = 0;
437 }
d02b48c6
RE
438
439#ifndef TIMES
40720ce3
MC
440 fprintf(stderr, "To get the most accurate results, try to run this\n");
441 fprintf(stderr, "program when this computer is idle.\n");
d02b48c6
RE
442#endif
443
40720ce3
MC
444 DES_set_key_unchecked(&key, &sch);
445 DES_set_key_unchecked(&key2, &sch2);
446 DES_set_key_unchecked(&key3, &sch3);
d02b48c6
RE
447
448#ifndef SIGALRM
40720ce3
MC
449 fprintf(stderr, "First we calculate the approximate speed ...\n");
450 DES_set_key_unchecked(&key, sch);
451 count = 10;
452 do {
453 long i;
454 unsigned long data[2];
455
456 count *= 2;
457 Time_F(START);
458 for (i = count; i; i--)
459 DES_encrypt1(data, &(sch[0]), DES_ENCRYPT);
460 d = Time_F(STOP);
461 } while (d < 3.0);
462 ca = count;
463 cb = count * 3;
464 cc = count * 3 * 8 / BUFSIZE + 1;
465 cd = count * 8 / BUFSIZE + 1;
466
467 ce = count / 20 + 1;
468# define COND(d) (count != (d))
469# define COUNT(d) (d)
d02b48c6 470#else
40720ce3
MC
471# define COND(c) (run)
472# define COUNT(d) (count)
473 signal(SIGALRM, sig_done);
474 alarm(10);
d02b48c6
RE
475#endif
476
477#ifdef PART1
40720ce3
MC
478 time_it(des_encrypt_u4_cisc_idx, "des_encrypt_u4_cisc_idx ", 0);
479 time_it(des_encrypt_u16_cisc_idx, "des_encrypt_u16_cisc_idx ", 1);
480 time_it(des_encrypt_u4_risc1_idx, "des_encrypt_u4_risc1_idx ", 2);
481 num += 3;
d02b48c6
RE
482#endif
483#ifdef PART2
40720ce3
MC
484 time_it(des_encrypt_u16_risc1_idx, "des_encrypt_u16_risc1_idx", 3);
485 time_it(des_encrypt_u4_risc2_idx, "des_encrypt_u4_risc2_idx ", 4);
486 time_it(des_encrypt_u16_risc2_idx, "des_encrypt_u16_risc2_idx", 5);
487 num += 3;
d02b48c6
RE
488#endif
489#ifdef PART3
40720ce3
MC
490 time_it(des_encrypt_u4_cisc_ptr, "des_encrypt_u4_cisc_ptr ", 6);
491 time_it(des_encrypt_u16_cisc_ptr, "des_encrypt_u16_cisc_ptr ", 7);
492 time_it(des_encrypt_u4_risc1_ptr, "des_encrypt_u4_risc1_ptr ", 8);
493 num += 3;
d02b48c6
RE
494#endif
495#ifdef PART4
40720ce3
MC
496 time_it(des_encrypt_u16_risc1_ptr, "des_encrypt_u16_risc1_ptr", 9);
497 time_it(des_encrypt_u4_risc2_ptr, "des_encrypt_u4_risc2_ptr ", 10);
498 time_it(des_encrypt_u16_risc2_ptr, "des_encrypt_u16_risc2_ptr", 11);
499 num += 3;
d02b48c6
RE
500#endif
501
502#ifdef PART1
40720ce3
MC
503 str[0] = " 4 c i";
504 print_it("des_encrypt_u4_cisc_idx ", 0);
505 max = tm[0];
506 max_idx = 0;
507 str[1] = "16 c i";
508 print_it("des_encrypt_u16_cisc_idx ", 1);
509 if (max < tm[1]) {
510 max = tm[1];
511 max_idx = 1;
512 }
513 str[2] = " 4 r1 i";
514 print_it("des_encrypt_u4_risc1_idx ", 2);
515 if (max < tm[2]) {
516 max = tm[2];
517 max_idx = 2;
518 }
d02b48c6
RE
519#endif
520#ifdef PART2
40720ce3
MC
521 str[3] = "16 r1 i";
522 print_it("des_encrypt_u16_risc1_idx", 3);
523 if (max < tm[3]) {
524 max = tm[3];
525 max_idx = 3;
526 }
527 str[4] = " 4 r2 i";
528 print_it("des_encrypt_u4_risc2_idx ", 4);
529 if (max < tm[4]) {
530 max = tm[4];
531 max_idx = 4;
532 }
533 str[5] = "16 r2 i";
534 print_it("des_encrypt_u16_risc2_idx", 5);
535 if (max < tm[5]) {
536 max = tm[5];
537 max_idx = 5;
538 }
d02b48c6
RE
539#endif
540#ifdef PART3
40720ce3
MC
541 str[6] = " 4 c p";
542 print_it("des_encrypt_u4_cisc_ptr ", 6);
543 if (max < tm[6]) {
544 max = tm[6];
545 max_idx = 6;
546 }
547 str[7] = "16 c p";
548 print_it("des_encrypt_u16_cisc_ptr ", 7);
549 if (max < tm[7]) {
550 max = tm[7];
551 max_idx = 7;
552 }
553 str[8] = " 4 r1 p";
554 print_it("des_encrypt_u4_risc1_ptr ", 8);
555 if (max < tm[8]) {
556 max = tm[8];
557 max_idx = 8;
558 }
d02b48c6
RE
559#endif
560#ifdef PART4
40720ce3
MC
561 str[9] = "16 r1 p";
562 print_it("des_encrypt_u16_risc1_ptr", 9);
563 if (max < tm[9]) {
564 max = tm[9];
565 max_idx = 9;
566 }
567 str[10] = " 4 r2 p";
568 print_it("des_encrypt_u4_risc2_ptr ", 10);
569 if (max < tm[10]) {
570 max = tm[10];
571 max_idx = 10;
572 }
573 str[11] = "16 r2 p";
574 print_it("des_encrypt_u16_risc2_ptr", 11);
575 if (max < tm[11]) {
576 max = tm[11];
577 max_idx = 11;
578 }
d02b48c6 579#endif
40720ce3
MC
580 printf("options des ecb/s\n");
581 printf("%s %12.2f 100.0%%\n", str[max_idx], tm[max_idx]);
582 d = tm[max_idx];
583 tm[max_idx] = -2.0;
584 max = -1.0;
585 for (;;) {
586 for (i = 0; i < 12; i++) {
587 if (max < tm[i]) {
588 max = tm[i];
589 j = i;
590 }
591 }
592 if (max < 0.0)
593 break;
594 printf("%s %12.2f %4.1f%%\n", str[j], tm[j], tm[j] / d * 100.0);
595 tm[j] = -2.0;
596 max = -1.0;
597 }
598
599 switch (max_idx) {
600 case 0:
601 printf("-DDES_DEFAULT_OPTIONS\n");
602 break;
603 case 1:
604 printf("-DDES_UNROLL\n");
605 break;
606 case 2:
607 printf("-DDES_RISC1\n");
608 break;
609 case 3:
610 printf("-DDES_UNROLL -DDES_RISC1\n");
611 break;
612 case 4:
613 printf("-DDES_RISC2\n");
614 break;
615 case 5:
616 printf("-DDES_UNROLL -DDES_RISC2\n");
617 break;
618 case 6:
619 printf("-DDES_PTR\n");
620 break;
621 case 7:
622 printf("-DDES_UNROLL -DDES_PTR\n");
623 break;
624 case 8:
625 printf("-DDES_RISC1 -DDES_PTR\n");
626 break;
627 case 9:
628 printf("-DDES_UNROLL -DDES_RISC1 -DDES_PTR\n");
629 break;
630 case 10:
631 printf("-DDES_RISC2 -DDES_PTR\n");
632 break;
633 case 11:
634 printf("-DDES_UNROLL -DDES_RISC2 -DDES_PTR\n");
635 break;
636 }
637 exit(0);
bc36ee62 638#if defined(LINT) || defined(OPENSSL_SYS_MSDOS)
40720ce3 639 return (0);
d02b48c6 640#endif
40720ce3 641}