emuspeed.c revision 1.2
11.2Sperry/* $NetBSD: emuspeed.c,v 1.2 1998/01/09 08:03:56 perry Exp $ */ 21.2Sperry 31.1Sis#include <setjmp.h> 41.1Sis#include <signal.h> 51.1Sis#include <stdlib.h> 61.1Sis#include <stdio.h> 71.1Sis#include <time.h> 81.1Sis#include <unistd.h> 91.1Sis 101.1Sis#include "speed.h" 111.1Sis 121.1Sisconst struct test { 131.1Sis char *name; 141.1Sis void (*func)__P((int)); 151.1Sis char *comment; 161.1Sis int count; 171.1Sis} testlist[] = { 181.1Sis {"Illegal", illegal, "(test: unimplemented)", 1}, 191.1Sis {"mulsl Da,Db", mul32sreg, "(test: should be native)", 200000000}, 201.1Sis {"mulsl sp@(8),Da", mul32smem, "(test: should be native)\n", 211.1Sis 200000000}, 221.1Sis 231.1Sis {"mulsl Dn,Da:Db", mul64sreg, "emulated on 68060", 2000000}, 241.1Sis {"mulul Dn,Da:Db", mul64ureg, "\t\"", 2000000}, 251.1Sis {"mulsl sp@(8),Da:Db", mul64smem, "\t\"", 1000000}, 261.1Sis {"mulul sp@(8),Da:Db", mul64umem, "\t\"\n", 1000000}, 271.1Sis 281.1Sis {"divsl Da:Db,Dn", div64sreg, "\t\"", 500000}, 291.1Sis {"divul Da:Db,Dn", div64ureg, "\t\"", 500000}, 301.1Sis {"divsl Da:Db,sp@(8)", div64smem, "\t\"", 300000}, 311.1Sis {"divul Da:Db,sp@(8)", div64umem, "\t\"\n", 300000}, 321.1Sis 331.1Sis {NULL, NULL, NULL} 341.1Sis}; 351.1Sis 361.1Sisjmp_buf jbuf; 371.1Sisvoid illhand (int); 381.1Sis 391.1Sisint 401.1Sismain(argc, argv) 411.1Sis int argc; 421.1Sis char *argv[]; 431.1Sis{ 441.1Sis const struct test *t; 451.1Sis clock_t start, stop; 461.1Sis 471.1Sis 481.1Sis if (signal(SIGILL, &illhand)) 491.1Sis warn("%s: can't install illegal instruction handler.", 501.1Sis argv[0]); 511.1Sis 521.1Sis printf("Speed of instructions which are emulated on some cpus:\n\n"); 531.1Sis (void)sleep(1); 541.1Sis for (t=testlist; t->name; t++) { 551.1Sis printf("%-20s", t->name); 561.1Sis fflush(stdout); 571.1Sis 581.1Sis if (setjmp(jbuf)) { 591.1Sis printf("%15s %s\n", "[unimplemented]", t->comment); 601.1Sis continue; 611.1Sis } 621.1Sis 631.1Sis start = clock(); 641.1Sis t->func(t->count); 651.1Sis stop = clock(); 661.1Sis printf("%13d/s %s\n", 671.1Sis CLOCKS_PER_SEC*(t->count /(stop - start)), 681.1Sis t->comment); 691.1Sis } 701.1Sis exit (0); 711.1Sis} 721.1Sis 731.1Sisvoid 741.1Sisillhand(int i) 751.1Sis{ 761.1Sis longjmp(jbuf, 1); 771.1Sis} 78