Skip to content

Commit

Permalink
Better altivec cvar handling. Should fix crashes at startup, or curious
Browse files Browse the repository at this point in the history
people that toggle it on at runtime on a G3.
  • Loading branch information
icculus committed Dec 4, 2005
1 parent dd4dce1 commit ff9c89f
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 11 deletions.
30 changes: 28 additions & 2 deletions code/qcommon/common.c
Expand Up @@ -2353,6 +2353,24 @@ static void Com_WriteCDKey( const char *filename, const char *ikey ) {
#endif


static void Com_DetectAltivec(void)
{
// Only detect if user hasn't forcibly disabled it.
if (com_altivec->integer) {
static qboolean altivec = qfalse;
static qboolean detected = qfalse;
if (!detected) {
altivec = Sys_DetectAltivec();
detected = qtrue;
}

if (!altivec) {
Cvar_Set( "com_altivec", "0" ); // we don't have it! Disable support!
}
}
}


/*
=================
Com_Init
Expand Down Expand Up @@ -2510,9 +2528,11 @@ void Com_Init( char *commandLine ) {

com_fullyInitialized = qtrue;

#if idppc_altivec
// always set the cvar, but only print the info if it makes sense.
Com_DetectAltivec();
#if idppc
Com_Printf ("Altivec support is %s\n", com_altivec->integer ? "enabled" : "disabled");
#endif
#endif

Com_Printf ("--- Common Initialization Complete ---\n");
}
Expand Down Expand Up @@ -2713,6 +2733,12 @@ void Com_Frame( void ) {
} while ( msec < minMsec );
Cbuf_Execute ();

if (com_altivec->modified)
{
Com_DetectAltivec();
com_altivec->modified = qfalse;
}

lastTime = com_frameTime;

// mess with msec if needed
Expand Down
2 changes: 2 additions & 0 deletions code/qcommon/qcommon.h
Expand Up @@ -1033,6 +1033,8 @@ unsigned int Sys_ProcessorCount( void );

int Sys_MonkeyShouldBeSpanked( void );

qboolean Sys_DetectAltivec( void );

/* This is based on the Adaptive Huffman algorithm described in Sayood's Data
* Compression book. The ranks are not actually stored, but implicitly defined
* by the location of a node within a doubly-linked list */
Expand Down
14 changes: 5 additions & 9 deletions code/unix/unix_main.c
Expand Up @@ -377,12 +377,11 @@ static void illegal_instruction(int sig)
}
#endif

static void Sys_DetectAltivec(void)
qboolean Sys_DetectAltivec( void )
{
// Only detect if user hasn't forcibly disabled it.
if (com_altivec->integer) {
#if idppc_altivec
qboolean altivec = qfalse;

#if idppc_altivec
#ifdef MACOS_X
long feat = 0;
OSErr err = Gestalt(gestaltPowerPCProcessorFeatures, &feat);
Expand All @@ -401,12 +400,9 @@ static void Sys_DetectAltivec(void)
}
signal(SIGILL, handler);
#endif

if (!altivec) {
Cvar_Set( "com_altivec", "0" ); // we don't have it! Disable support!
}
#endif
}

return altivec;
}

void Sys_Init(void)
Expand Down
7 changes: 7 additions & 0 deletions code/win32/win_main.c
Expand Up @@ -1176,6 +1176,13 @@ void Sys_Init( void ) {
}


qboolean Sys_DetectAltivec( void )
{
return qfalse; // never altivec on Windows...at least for now. :)
}



//=======================================================================

int totalMsec, countMsec;
Expand Down

0 comments on commit ff9c89f

Please sign in to comment.