📄 timesoftfloat.c
字号:
static void time_a_float32_z_int64( int64 function( float32 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
static void time_a_float32_z_float64( float64 function( float32 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
#ifdef FLOATX80
static void time_a_float32_z_floatx80( floatx80 function( float32 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
#endif
#ifdef FLOAT128
static void time_a_float32_z_float128( float128 function( float32 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
#endif
static void time_az_float32( float32 function( float32 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float32[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
static void time_ab_float32_z_flag( flag function( float32, float32 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNumA, inputNumB;
count = 0;
inputNumA = 0;
inputNumB = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function(
inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );
inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );
if ( inputNumA == 0 ) ++inputNumB;
inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNumA = 0;
inputNumB = 0;
startClock = clock();
for ( i = count; i; --i ) {
function(
inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );
inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );
if ( inputNumA == 0 ) ++inputNumB;
inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
static void time_abz_float32( float32 function( float32, float32 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNumA, inputNumB;
count = 0;
inputNumA = 0;
inputNumB = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function(
inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );
inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );
if ( inputNumA == 0 ) ++inputNumB;
inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNumA = 0;
inputNumB = 0;
startClock = clock();
for ( i = count; i; --i ) {
function(
inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] );
inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 );
if ( inputNumA == 0 ) ++inputNumB;
inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
static const float32 inputs_float32_pos[ numInputs_float32 ] = {
0x4EFA0000, 0x41D0B328, 0x00000000, 0x3E69A31E,
0x2F803EFF, 0x3F800000, 0x17BF8000, 0x674A301A,
0x4E010003, 0x7EE3C75D, 0x3D803FE0, 0x3FFEFF00,
0x7981F800, 0x431FFFFC, 0x4100C000, 0x3D87EFFF,
0x4103FEFE, 0x3C000007, 0x3F01F7FF, 0x4E6C6B5C,
0x4187FFFE, 0x458B9F13, 0x4F88007F, 0x5F004007,
0x37FFD7FE, 0x7E8001FB, 0x46EFFBFF, 0x31C10000,
0x5B428661, 0x33F89B1F, 0x23BFEFFF, 0x537BFFBE
};
static void time_az_float32_pos( float32 function( float32 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float32_pos[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float32_pos[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
enum {
numInputs_float64 = 32
};
static const float64 inputs_float64[ numInputs_float64 ] = {
LIT64( 0x422FFFC008000000 ),
LIT64( 0xB7E0000480000000 ),
LIT64( 0xF3FD2546120B7935 ),
LIT64( 0x3FF0000000000000 ),
LIT64( 0xCE07F766F09588D6 ),
LIT64( 0x8000000000000000 ),
LIT64( 0x3FCE000400000000 ),
LIT64( 0x8313B60F0032BED8 ),
LIT64( 0xC1EFFFFFC0002000 ),
LIT64( 0x3FB3C75D224F2B0F ),
LIT64( 0x7FD00000004000FF ),
LIT64( 0xA12FFF8000001FFF ),
LIT64( 0x3EE0000000FE0000 ),
LIT64( 0x0010000080000004 ),
LIT64( 0x41CFFFFE00000020 ),
LIT64( 0x40303FFFFFFFFFFD ),
LIT64( 0x3FD000003FEFFFFF ),
LIT64( 0xBFD0000010000000 ),
LIT64( 0xB7FC6B5C16CA55CF ),
LIT64( 0x413EEB940B9D1301 ),
LIT64( 0xC7E00200001FFFFF ),
LIT64( 0x47F00021FFFFFFFE ),
LIT64( 0xBFFFFFFFF80000FF ),
LIT64( 0xC07FFFFFE00FFFFF ),
LIT64( 0x001497A63740C5E8 ),
LIT64( 0xC4BFFFE0001FFFFF ),
LIT64( 0x96FFDFFEFFFFFFFF ),
LIT64( 0x403FC000000001FE ),
LIT64( 0xFFD00000000001F6 ),
LIT64( 0x0640400002000000 ),
LIT64( 0x479CEE1E4F789FE0 ),
LIT64( 0xC237FFFFFFFFFDFE )
};
static void time_a_float64_z_int32( int32 function( float64 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float64[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float64[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
static void time_a_float64_z_int64( int64 function( float64 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float64[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float64[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
static void time_a_float64_z_float32( float32 function( float64 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float64[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float64[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
#ifdef FLOATX80
static void time_a_float64_z_floatx80( floatx80 function( float64 ) )
{
clock_t startClock, endClock;
int32 count, i;
int8 inputNum;
count = 0;
inputNum = 0;
startClock = clock();
do {
for ( i = minIterations; i; --i ) {
function( inputs_float64[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
}
count += minIterations;
} while ( clock() - startClock < CLOCKS_PER_SEC );
inputNum = 0;
startClock = clock();
for ( i = count; i; --i ) {
function( inputs_float64[ inputNum ] );
inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 );
}
endClock = clock();
reportTime( count, endClock - startClock );
}
#endif
#ifdef FLOAT128
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -