tgsi: remove some bogus win vs. linux crud

Pass arguments properly in linux now.  Still need to change this to use
a single calling convention on both platforms.
This commit is contained in:
Keith Whitwell 2008-05-01 20:45:15 +01:00
parent 2c89b75e36
commit f067c6c452
1 changed files with 46 additions and 72 deletions

View File

@ -441,19 +441,13 @@ emit_push_gp(
{
x86_push(
func,
get_const_base() );
x86_make_reg( file_REG32, reg_AX) );
x86_push(
func,
get_input_base() );
x86_make_reg( file_REG32, reg_CX) );
x86_push(
func,
get_output_base() );
/* It is important on non-win32 platforms that temp base is pushed last.
*/
x86_push(
func,
get_temp_base() );
x86_make_reg( file_REG32, reg_DX) );
}
static void
@ -464,16 +458,13 @@ x86_pop_gp(
*/
x86_pop(
func,
get_temp_base() );
x86_make_reg( file_REG32, reg_DX) );
x86_pop(
func,
get_output_base() );
x86_make_reg( file_REG32, reg_CX) );
x86_pop(
func,
get_input_base() );
x86_pop(
func,
get_const_base() );
x86_make_reg( file_REG32, reg_AX) );
}
static void
@ -490,19 +481,23 @@ emit_func_call_dst(
emit_push_gp(
func );
#ifdef WIN32
x86_push(
func,
get_temp( TEMP_R0, 0 ) );
#endif
{
struct x86_reg ecx = x86_make_reg( file_REG32, reg_CX );
x86_lea(
func,
ecx,
get_temp( TEMP_R0, 0 ) );
x86_push( func, ecx );
x86_mov_reg_imm( func, ecx, (unsigned long) code );
x86_call( func, ecx );
#ifndef WIN32
x86_pop(func, ecx );
#endif
}
x86_pop_gp(
func );
@ -563,11 +558,7 @@ static void XSTDCALL
cos4f(
float *store )
{
#ifdef WIN32
const unsigned X = 0;
#else
const unsigned X = TEMP_R0 * 16;
#endif
store[X + 0] = cosf( store[X + 0] );
store[X + 1] = cosf( store[X + 1] );
@ -590,11 +581,8 @@ static void XSTDCALL
ex24f(
float *store )
{
#ifdef WIN32
const unsigned X = 0;
#else
const unsigned X = TEMP_R0 * 16;
#endif
store[X + 0] = powf( 2.0f, store[X + 0] );
store[X + 1] = powf( 2.0f, store[X + 1] );
store[X + 2] = powf( 2.0f, store[X + 2] );
@ -627,11 +615,8 @@ static void XSTDCALL
flr4f(
float *store )
{
#ifdef WIN32
const unsigned X = 0;
#else
const unsigned X = TEMP_R0 * 16;
#endif
store[X + 0] = floorf( store[X + 0] );
store[X + 1] = floorf( store[X + 1] );
store[X + 2] = floorf( store[X + 2] );
@ -653,11 +638,8 @@ static void XSTDCALL
frc4f(
float *store )
{
#ifdef WIN32
const unsigned X = 0;
#else
const unsigned X = TEMP_R0 * 16;
#endif
store[X + 0] -= floorf( store[X + 0] );
store[X + 1] -= floorf( store[X + 1] );
store[X + 2] -= floorf( store[X + 2] );
@ -679,11 +661,8 @@ static void XSTDCALL
lg24f(
float *store )
{
#ifdef WIN32
const unsigned X = 0;
#else
const unsigned X = TEMP_R0 * 16;
#endif
store[X + 0] = LOG2( store[X + 0] );
store[X + 1] = LOG2( store[X + 1] );
store[X + 2] = LOG2( store[X + 2] );
@ -741,11 +720,8 @@ static void XSTDCALL
pow4f(
float *store )
{
#ifdef WIN32
const unsigned X = 0;
#else
const unsigned X = TEMP_R0 * 16;
#endif
store[X + 0] = powf( store[X + 0], store[X + 4] );
store[X + 1] = powf( store[X + 1], store[X + 5] );
store[X + 2] = powf( store[X + 2], store[X + 6] );
@ -786,11 +762,8 @@ static void XSTDCALL
rsqrt4f(
float *store )
{
#ifdef WIN32
const unsigned X = 0;
#else
const unsigned X = TEMP_R0 * 16;
#endif
store[X + 0] = 1.0F / sqrtf( store[X + 0] );
store[X + 1] = 1.0F / sqrtf( store[X + 1] );
store[X + 2] = 1.0F / sqrtf( store[X + 2] );
@ -864,11 +837,8 @@ static void XSTDCALL
sin4f(
float *store )
{
#ifdef WIN32
const unsigned X = 0;
#else
const unsigned X = TEMP_R0 * 16;
#endif
store[X + 0] = sinf( store[X + 0] );
store[X + 1] = sinf( store[X + 1] );
store[X + 2] = sinf( store[X + 2] );
@ -2015,40 +1985,40 @@ emit_declaration(
}
}
static void aos_to_soa( struct x86_function *func, uint aos, uint soa, uint num, uint stride )
static void aos_to_soa( struct x86_function *func,
uint arg_aos,
uint arg_soa,
uint arg_num,
uint arg_stride )
{
struct x86_reg soa_input;
struct x86_reg aos_input;
struct x86_reg num_inputs;
struct x86_reg temp;
struct x86_reg soa_input = x86_make_reg( file_REG32, reg_AX );
struct x86_reg aos_input = x86_make_reg( file_REG32, reg_BX );
struct x86_reg num_inputs = x86_make_reg( file_REG32, reg_CX );
struct x86_reg stride = x86_make_reg( file_REG32, reg_DX );
int inner_loop;
soa_input = x86_make_reg( file_REG32, reg_AX );
aos_input = get_temp_base(); /* BX or SI */
num_inputs = x86_make_reg( file_REG32, reg_CX );
temp = x86_make_reg( file_REG32, reg_DX );
/* Save EBX */
x86_push( func, aos_input );
x86_push( func, x86_make_reg( file_REG32, reg_BX ) );
x86_mov( func, soa_input, x86_fn_arg( func, soa ) );
x86_mov( func, aos_input, x86_fn_arg( func, aos ) );
x86_mov( func, num_inputs, x86_fn_arg( func, num ) );
x86_mov( func, aos_input, x86_fn_arg( func, arg_aos ) );
x86_mov( func, soa_input, x86_fn_arg( func, arg_soa ) );
x86_mov( func, num_inputs, x86_fn_arg( func, arg_num ) );
x86_mov( func, stride, x86_fn_arg( func, arg_stride ) );
/* do */
inner_loop = x86_get_label( func );
{
x86_mov( func, temp, x86_fn_arg( func, stride ) );
x86_push( func, aos_input );
sse_movlps( func, make_xmm( 0 ), x86_make_disp( aos_input, 0 ) );
sse_movlps( func, make_xmm( 3 ), x86_make_disp( aos_input, 8 ) );
x86_add( func, aos_input, temp );
x86_add( func, aos_input, stride );
sse_movhps( func, make_xmm( 0 ), x86_make_disp( aos_input, 0 ) );
sse_movhps( func, make_xmm( 3 ), x86_make_disp( aos_input, 8 ) );
x86_add( func, aos_input, temp );
x86_add( func, aos_input, stride );
sse_movlps( func, make_xmm( 1 ), x86_make_disp( aos_input, 0 ) );
sse_movlps( func, make_xmm( 4 ), x86_make_disp( aos_input, 8 ) );
x86_add( func, aos_input, temp );
x86_add( func, aos_input, stride );
sse_movhps( func, make_xmm( 1 ), x86_make_disp( aos_input, 0 ) );
sse_movhps( func, make_xmm( 4 ), x86_make_disp( aos_input, 8 ) );
x86_pop( func, aos_input );
@ -2086,7 +2056,7 @@ static void soa_to_aos( struct x86_function *func, uint aos, uint soa, uint num,
int inner_loop;
soa_output = x86_make_reg( file_REG32, reg_AX );
aos_output = get_temp_base(); /* BX or SI */
aos_output = x86_make_reg( file_REG32, reg_BX );
num_outputs = x86_make_reg( file_REG32, reg_CX );
temp = x86_make_reg( file_REG32, reg_DX );
@ -2213,7 +2183,11 @@ tgsi_emit_sse2(
assert(parse.FullHeader.Processor.Processor == TGSI_PROCESSOR_VERTEX);
if (do_swizzles)
aos_to_soa( func, 6, 1, 7, 8 );
aos_to_soa( func,
6, /* aos_input */
1, /* machine->input */
7, /* num_inputs */
8 ); /* input_stride */
x86_mov(
func,