#include "i860-opcode.h"
#include <stdio.h>
extern int32_t random();
char *controlregs[] = { "fir", "psr", "epsr", "dirbase", "db", "fsr" };
#define NCREGS (sizeof controlregs / sizeof controlregs[0])
char *textlabels[] = { "foo", "bar", "baz", "xork" };
#define NTLABELS (sizeof textlabels / sizeof textlabels[0])
char *datalabels[] = { "data1", "data2", "data3", "data4" };
#define NDLABELS (sizeof datalabels / sizeof datalabels[0])
void
main(
int argc,
char *argv[],
char *envp[])
{
int i;
const char *arg;
int r1, r2, rd;
printf( "\t.text\n%s:", textlabels[0] );
for ( i = 0; i < NUMOPCODES; ++i )
{
if ( i == (NUMOPCODES/3) )
printf( "%s:", textlabels[1] );
if ( i == (NUMOPCODES/2) )
printf( "%s:", textlabels[2] );
if ( (random() & 0x30) == 0 &&
(i860_opcodes[i].match & OP_PREFIX_MASK) == PREFIX_FPU )
{
printf( "\td.%s\t", i860_opcodes[i].name );
}
else
printf( "\t%s\t", i860_opcodes[i].name );
r1 = random() & 0x1F;
do
r2 = random() & 0x1F;
while( (r2 & 0x1E) == (r1 & 0x1E) );
do
rd = random() & 0x1F;
while( (rd & 0x1E) == (r1 & 0x1E) || (rd & 0x1E) == (r2 & 0x1E) );
for ( arg = i860_opcodes[i].args; *arg != '\0'; ++arg )
{
switch( *arg )
{
case '1':
case '2':
case 'd':
printf( "r%d", random() % 32);
break;
case 'e':
printf( "f%d", r1 );
break;
case 'f':
printf( "f%d", r2 );
break;
case 'g':
printf( "f%d", rd );
break;
case 'E':
printf( "f%d", r1 & 0x1E );
break;
case 'F':
printf( "f%d", r2 & 0x1E );
break;
case 'G':
printf( "f%d", rd & 0x1E );
break;
case 'H':
printf( "f%d", rd & 0x1C );
break;
case 'I':
printf( "h%%%s", datalabels[random() % NDLABELS] );
break;
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
printf( "l%%%s", datalabels[random() % NDLABELS] );
break;
case 'J':
printf( "ha%%%s", datalabels[random() % NDLABELS] );
break;
case 'K':
case 'L':
printf( textlabels[random() % NTLABELS] );
break;
case 'D':
case 'B':
printf( "%d", random() % 32 );
break;
case 'C':
printf( controlregs[random() % NCREGS] );
break;
default:
putchar( *arg );
break;
}
}
putchar( '\n' );
}
printf( "%s:\n", textlabels[3] );
printf( "nop\n" );
printf( "\t.text\n" );
printf( "data1: nop\n" );
printf( "data2: nop\n" );
printf( "data3: nop\n" );
printf( "data4: nop\n" );
}