timesoftfloat.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,051 行 · 第 1/3 页
C
1,051 行
}enum { numInputs_float64 = 32};static const struct { bits32 high, low;} inputs_float64[ numInputs_float64 ] = { { 0x422FFFC0, 0x08000000 }, { 0xB7E00004, 0x80000000 }, { 0xF3FD2546, 0x120B7935 }, { 0x3FF00000, 0x00000000 }, { 0xCE07F766, 0xF09588D6 }, { 0x80000000, 0x00000000 }, { 0x3FCE0004, 0x00000000 }, { 0x8313B60F, 0x0032BED8 }, { 0xC1EFFFFF, 0xC0002000 }, { 0x3FB3C75D, 0x224F2B0F }, { 0x7FD00000, 0x004000FF }, { 0xA12FFF80, 0x00001FFF }, { 0x3EE00000, 0x00FE0000 }, { 0x00100000, 0x80000004 }, { 0x41CFFFFE, 0x00000020 }, { 0x40303FFF, 0xFFFFFFFD }, { 0x3FD00000, 0x3FEFFFFF }, { 0xBFD00000, 0x10000000 }, { 0xB7FC6B5C, 0x16CA55CF }, { 0x413EEB94, 0x0B9D1301 }, { 0xC7E00200, 0x001FFFFF }, { 0x47F00021, 0xFFFFFFFE }, { 0xBFFFFFFF, 0xF80000FF }, { 0xC07FFFFF, 0xE00FFFFF }, { 0x001497A6, 0x3740C5E8 }, { 0xC4BFFFE0, 0x001FFFFF }, { 0x96FFDFFE, 0xFFFFFFFF }, { 0x403FC000, 0x000001FE }, { 0xFFD00000, 0x000001F6 }, { 0x06404000, 0x02000000 }, { 0x479CEE1E, 0x4F789FE0 }, { 0xC237FFFF, 0xFFFFFDFE }};static void time_a_float64_z_int32( int32 function( float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; float64 a; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { a.low = inputs_float64[ inputNum ].low; a.high = inputs_float64[ inputNum ].high; function( a ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { a.low = inputs_float64[ inputNum ].low; a.high = inputs_float64[ inputNum ].high; function( a ); 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; float64 a; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { a.low = inputs_float64[ inputNum ].low; a.high = inputs_float64[ inputNum ].high; function( a ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { a.low = inputs_float64[ inputNum ].low; a.high = inputs_float64[ inputNum ].high; function( a ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static void time_az_float64( float64 function( float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; float64 a; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { a.low = inputs_float64[ inputNum ].low; a.high = inputs_float64[ inputNum ].high; function( a ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { a.low = inputs_float64[ inputNum ].low; a.high = inputs_float64[ inputNum ].high; function( a ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static void time_ab_float64_z_flag( flag function( float64, float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNumA, inputNumB; float64 a, b; count = 0; inputNumA = 0; inputNumB = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { a.low = inputs_float64[ inputNumA ].low; a.high = inputs_float64[ inputNumA ].high; b.low = inputs_float64[ inputNumB ].low; b.high = inputs_float64[ inputNumB ].high; function( a, b ); inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 ); if ( inputNumA == 0 ) ++inputNumB; inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNumA = 0; inputNumB = 0; startClock = clock(); for ( i = count; i; --i ) { a.low = inputs_float64[ inputNumA ].low; a.high = inputs_float64[ inputNumA ].high; b.low = inputs_float64[ inputNumB ].low; b.high = inputs_float64[ inputNumB ].high; function( a, b ); inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 ); if ( inputNumA == 0 ) ++inputNumB; inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static void time_abz_float64( float64 function( float64, float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNumA, inputNumB; float64 a, b; count = 0; inputNumA = 0; inputNumB = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { a.low = inputs_float64[ inputNumA ].low; a.high = inputs_float64[ inputNumA ].high; b.low = inputs_float64[ inputNumB ].low; b.high = inputs_float64[ inputNumB ].high; function( a, b ); inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 ); if ( inputNumA == 0 ) ++inputNumB; inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNumA = 0; inputNumB = 0; startClock = clock(); for ( i = count; i; --i ) { a.low = inputs_float64[ inputNumA ].low; a.high = inputs_float64[ inputNumA ].high; b.low = inputs_float64[ inputNumB ].low; b.high = inputs_float64[ inputNumB ].high; function( a, b ); inputNumA = ( inputNumA + 1 ) & ( numInputs_float64 - 1 ); if ( inputNumA == 0 ) ++inputNumB; inputNumB = ( inputNumB + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static const struct { bits32 high, low;} inputs_float64_pos[ numInputs_float64 ] = { { 0x422FFFC0, 0x08000000 }, { 0x37E00004, 0x80000000 }, { 0x73FD2546, 0x120B7935 }, { 0x3FF00000, 0x00000000 }, { 0x4E07F766, 0xF09588D6 }, { 0x00000000, 0x00000000 }, { 0x3FCE0004, 0x00000000 }, { 0x0313B60F, 0x0032BED8 }, { 0x41EFFFFF, 0xC0002000 }, { 0x3FB3C75D, 0x224F2B0F }, { 0x7FD00000, 0x004000FF }, { 0x212FFF80, 0x00001FFF }, { 0x3EE00000, 0x00FE0000 }, { 0x00100000, 0x80000004 }, { 0x41CFFFFE, 0x00000020 }, { 0x40303FFF, 0xFFFFFFFD }, { 0x3FD00000, 0x3FEFFFFF }, { 0x3FD00000, 0x10000000 }, { 0x37FC6B5C, 0x16CA55CF }, { 0x413EEB94, 0x0B9D1301 }, { 0x47E00200, 0x001FFFFF }, { 0x47F00021, 0xFFFFFFFE }, { 0x3FFFFFFF, 0xF80000FF }, { 0x407FFFFF, 0xE00FFFFF }, { 0x001497A6, 0x3740C5E8 }, { 0x44BFFFE0, 0x001FFFFF }, { 0x16FFDFFE, 0xFFFFFFFF }, { 0x403FC000, 0x000001FE }, { 0x7FD00000, 0x000001F6 }, { 0x06404000, 0x02000000 }, { 0x479CEE1E, 0x4F789FE0 }, { 0x4237FFFF, 0xFFFFFDFE }};static void time_az_float64_pos( float64 function( float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; float64 a; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { a.low = inputs_float64_pos[ inputNum ].low; a.high = inputs_float64_pos[ inputNum ].high; function( a ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { a.low = inputs_float64_pos[ inputNum ].low; a.high = inputs_float64_pos[ inputNum ].high; function( a ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}enum { INT32_TO_FLOAT32 = 1, INT32_TO_FLOAT64, FLOAT32_TO_INT32, FLOAT32_TO_INT32_ROUND_TO_ZERO, FLOAT32_TO_FLOAT64, FLOAT32_ROUND_TO_INT, FLOAT32_ADD, FLOAT32_SUB, FLOAT32_MUL, FLOAT32_DIV, FLOAT32_REM, FLOAT32_SQRT, FLOAT32_EQ, FLOAT32_LE, FLOAT32_LT, FLOAT32_EQ_SIGNALING, FLOAT32_LE_QUIET, FLOAT32_LT_QUIET, FLOAT64_TO_INT32, FLOAT64_TO_INT32_ROUND_TO_ZERO, FLOAT64_TO_FLOAT32, FLOAT64_ROUND_TO_INT, FLOAT64_ADD, FLOAT64_SUB, FLOAT64_MUL, FLOAT64_DIV, FLOAT64_REM, FLOAT64_SQRT, FLOAT64_EQ, FLOAT64_LE, FLOAT64_LT, FLOAT64_EQ_SIGNALING, FLOAT64_LE_QUIET, FLOAT64_LT_QUIET, NUM_FUNCTIONS};static struct { char *name; int8 numInputs; flag roundingMode, tininessMode;} functions[ NUM_FUNCTIONS ] = { { 0, 0, 0, 0 }, { "int32_to_float32", 1, TRUE, FALSE }, { "int32_to_float64", 1, FALSE, FALSE }, { "float32_to_int32", 1, TRUE, FALSE }, { "float32_to_int32_round_to_zero", 1, FALSE, FALSE }, { "float32_to_float64", 1, FALSE, FALSE }, { "float32_round_to_int", 1, TRUE, FALSE }, { "float32_add", 2, TRUE, FALSE }, { "float32_sub", 2, TRUE, FALSE }, { "float32_mul", 2, TRUE, TRUE, }, { "float32_div", 2, TRUE, FALSE }, { "float32_rem", 2, FALSE, FALSE }, { "float32_sqrt", 1, TRUE, FALSE }, { "float32_eq", 2, FALSE, FALSE }, { "float32_le", 2, FALSE, FALSE }, { "float32_lt", 2, FALSE, FALSE },
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?