Changeset 96282 in vbox
- Timestamp:
- Aug 18, 2022 2:52:12 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 153096
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 3 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/Makefile.kmk
r96280 r96282 1911 1911 common/math/ceilf.asm \ 1912 1912 common/math/exp.asm \ 1913 common/math/expf.asm \ 1913 1914 common/math/exp2.asm \ 1914 1915 common/math/exp2f.asm \ … … 1986 1987 common/math/ceilf.asm \ 1987 1988 common/math/exp.asm \ 1989 common/math/expf.asm \ 1988 1990 common/math/exp2.asm \ 1989 1991 common/math/exp2f.asm \ -
trunk/src/VBox/Runtime/common/math/expf.asm
r96281 r96282 1 1 ; $Id$ 2 2 ;; @file 3 ; IPRT - No-CRT exp - AMD64 & X86.3 ; IPRT - No-CRT expf - AMD64 & X86. 4 4 ; 5 5 … … 39 39 ; @returns st(0) / xmm0 40 40 ; @param rd [xSP + xCB*2] / xmm0 41 RT_NOCRT_BEGINPROC exp 41 RT_NOCRT_BEGINPROC expf 42 42 push xBP 43 43 SEH64_PUSH_xBP … … 52 52 ; 53 53 %ifdef RT_ARCH_AMD64 54 movs d[xBP - 10h], xmm055 fld qword [xBP - 10h]54 movss [xBP - 10h], xmm0 55 fld dword [xBP - 10h] 56 56 %else 57 fld qword [xBP + xCB*2]57 fld dword [xBP + xCB*2] 58 58 %endif 59 59 … … 104 104 .return_val: 105 105 %ifdef RT_ARCH_AMD64 106 fstp qword [xBP - 10h]107 movs dxmm0, [xBP - 10h]106 fstp dword [xBP - 10h] 107 movss xmm0, [xBP - 10h] 108 108 %endif 109 109 .return: … … 138 138 %endif 139 139 jmp .return 140 ENDPROC RT_NOCRT(exp )140 ENDPROC RT_NOCRT(expf) 141 141 -
trunk/src/VBox/Runtime/testcase/Makefile.kmk
r96280 r96282 644 644 ../common/math/cosl.asm \ 645 645 ../common/math/exp.asm \ 646 ../common/math/expf.asm \ 646 647 ../common/math/exp2.asm \ 647 648 ../common/math/exp2f.asm \ -
trunk/src/VBox/Runtime/testcase/tstRTNoCrt-2.cpp
r96280 r96282 385 385 } while (0) 386 386 387 #define CHECK_FLT_APPROX_SAME(a_Fn, a_Args ) do { \387 #define CHECK_FLT_APPROX_SAME(a_Fn, a_Args, a_cMaxDelta) do { \ 388 388 RTFLOAT32U uNoCrtRet, uCrtRet; \ 389 389 uNoCrtRet.r = RT_NOCRT(a_Fn) a_Args; \ 390 390 uCrtRet.r = a_Fn a_Args; \ 391 391 if ( !RTFLOAT32U_ARE_IDENTICAL(&uNoCrtRet, &uCrtRet) \ 392 && ( (uNoCrtRet.u >= uCrtRet.u ? uNoCrtRet.u - uCrtRet.u : uCrtRet.u - uNoCrtRet.u) > 1 /* off by one is okay */\392 && ( (uNoCrtRet.u >= uCrtRet.u ? uNoCrtRet.u - uCrtRet.u : uCrtRet.u - uNoCrtRet.u) > (a_cMaxDelta) \ 393 393 || RTFLOAT32U_IS_NAN(&uNoCrtRet) \ 394 394 || RTFLOAT32U_IS_NAN(&uCrtRet) ) ) \ … … 396 396 RTStrFormatR32(g_szFloat[0], sizeof(g_szFloat[0]), &uNoCrtRet, 0, 0, RTSTR_F_SPECIAL); \ 397 397 RTStrFormatR32(g_szFloat[1], sizeof(g_szFloat[0]), &uCrtRet, 0, 0, RTSTR_F_SPECIAL); \ 398 RTTestFailed(g_hTest, "line %u: %s%s: noCRT => %s; CRT => %s ", \399 __LINE__, #a_Fn, #a_Args, g_szFloat[0], g_szFloat[1] ); \398 RTTestFailed(g_hTest, "line %u: %s%s: noCRT => %s; CRT => %s (max delta %u)", \ 399 __LINE__, #a_Fn, #a_Args, g_szFloat[0], g_szFloat[1], a_cMaxDelta); \ 400 400 } \ 401 401 } while (0) … … 2438 2438 RTTestSub(g_hTest, "exp[f]"); 2439 2439 2440 CHECK_DBL( RT_NOCRT(exp)( +1.0), M_E);2441 CHECK_DBL_RANGE( RT_NOCRT(exp)( +2.0), M_E * M_E, 0.000000000000001);2442 CHECK_DBL( RT_NOCRT(exp)( +INFINITY), +INFINITY);2443 CHECK_DBL( RT_NOCRT(exp)( -INFINITY), +0.0);2444 CHECK_DBL( RT_NOCRT(exp)( +0.0), +1.0);2445 CHECK_DBL( RT_NOCRT(exp)( -0.0), +1.0);2446 CHECK_DBL_SAME( exp,( +0.0));2447 CHECK_DBL_SAME( exp,( -0.0));2448 CHECK_DBL_SAME( exp,( +1.0));2449 CHECK_DBL_SAME( exp,( +2.0));2450 CHECK_DBL_SAME( exp,( -1.0));2451 CHECK_DBL_APPROX_SAME( exp,( +0.5), 1);2452 CHECK_DBL_APPROX_SAME( exp,( -0.5), 1);2453 CHECK_DBL_APPROX_SAME( exp,( +1.5), 1);2454 CHECK_DBL_APPROX_SAME( exp,( -1.5), 1);2455 CHECK_DBL_APPROX_SAME( exp,( +3.25), 16);2456 CHECK_DBL_APPROX_SAME( exp,( 99.2559430), 16);2457 CHECK_DBL_APPROX_SAME( exp,( -99.2559430), 32);2458 CHECK_DBL_APPROX_SAME( exp,( +305.2559430), 128);2459 CHECK_DBL_APPROX_SAME( exp,( -305.2559430), 128);2460 CHECK_DBL_APPROX_SAME( exp,( +309.99884), 128);2461 CHECK_DBL_APPROX_SAME( exp,( -309.111048), 128);2462 CHECK_DBL_APPROX_SAME( exp,( +999.864597634), 1);2463 CHECK_DBL_APPROX_SAME( exp,( -999.098234837), 1);2464 CHECK_DBL_SAME( exp,( +DBL_MAX));2465 CHECK_DBL_SAME( exp,( -DBL_MAX));2466 CHECK_DBL_SAME( exp,( -DBL_MIN));2467 CHECK_DBL_SAME( exp,( +DBL_MIN));2468 CHECK_DBL_SAME( exp,( +INFINITY));2469 CHECK_DBL_SAME( exp,( -INFINITY));2440 CHECK_DBL( RT_NOCRT(exp)( +1.0), M_E); 2441 CHECK_DBL_RANGE( RT_NOCRT(exp)( +2.0), M_E * M_E, 0.000000000000001); 2442 CHECK_DBL( RT_NOCRT(exp)( +INFINITY), +INFINITY); 2443 CHECK_DBL( RT_NOCRT(exp)( -INFINITY), +0.0); 2444 CHECK_DBL( RT_NOCRT(exp)( +0.0), +1.0); 2445 CHECK_DBL( RT_NOCRT(exp)( -0.0), +1.0); 2446 CHECK_DBL_SAME( exp,( +0.0)); 2447 CHECK_DBL_SAME( exp,( -0.0)); 2448 CHECK_DBL_SAME( exp,( +1.0)); 2449 CHECK_DBL_SAME( exp,( +2.0)); 2450 CHECK_DBL_SAME( exp,( -1.0)); 2451 CHECK_DBL_APPROX_SAME( exp,( +0.5), 1); 2452 CHECK_DBL_APPROX_SAME( exp,( -0.5), 1); 2453 CHECK_DBL_APPROX_SAME( exp,( +1.5), 1); 2454 CHECK_DBL_APPROX_SAME( exp,( -1.5), 1); 2455 CHECK_DBL_APPROX_SAME( exp,( +3.25), 16); 2456 CHECK_DBL_APPROX_SAME( exp,( 99.2559430), 16); 2457 CHECK_DBL_APPROX_SAME( exp,( -99.2559430), 32); 2458 CHECK_DBL_APPROX_SAME( exp,( +305.2559430), 128); 2459 CHECK_DBL_APPROX_SAME( exp,( -305.2559430), 128); 2460 CHECK_DBL_APPROX_SAME( exp,( +309.99884), 128); 2461 CHECK_DBL_APPROX_SAME( exp,( -309.111048), 128); 2462 CHECK_DBL_APPROX_SAME( exp,( +999.864597634), 1); 2463 CHECK_DBL_APPROX_SAME( exp,( -999.098234837), 1); 2464 CHECK_DBL_SAME( exp,( +DBL_MAX)); 2465 CHECK_DBL_SAME( exp,( -DBL_MAX)); 2466 CHECK_DBL_SAME( exp,( -DBL_MIN)); 2467 CHECK_DBL_SAME( exp,( +DBL_MIN)); 2468 CHECK_DBL_SAME( exp,( +INFINITY)); 2469 CHECK_DBL_SAME( exp,( -INFINITY)); 2470 2470 CHECK_DBL_SAME( exp,(RTStrNanDouble(NULL, false))); 2471 2471 CHECK_DBL_SAME( exp,(RTStrNanDouble("ab305f", true))); 2472 2472 CHECK_DBL_SAME_RELAXED_NAN(exp,(RTStrNanDouble("fffffffff_signaling", true))); 2473 2473 CHECK_DBL_SAME_RELAXED_NAN(exp,(RTStrNanDouble("7777777777778_sig", false))); 2474 2475 CHECK_FLT( RT_NOCRT(expf)( +1.0f), (float)M_E); 2476 CHECK_FLT( RT_NOCRT(expf)( +2.0f), (float)(M_E * M_E)); 2477 CHECK_FLT( RT_NOCRT(expf)(+(float)INFINITY),+(float)INFINITY); 2478 CHECK_FLT( RT_NOCRT(expf)(-(float)INFINITY),+0.0f); 2479 CHECK_FLT( RT_NOCRT(expf)( +0.0f), +1.0f); 2480 CHECK_FLT( RT_NOCRT(expf)( -0.0f), +1.0f); 2481 CHECK_FLT_SAME( expf,( +0.0f)); 2482 CHECK_FLT_SAME( expf,( -0.0f)); 2483 CHECK_FLT_SAME( expf,( +1.0f)); 2484 CHECK_FLT_SAME( expf,( +2.0f)); 2485 CHECK_FLT_SAME( expf,( -1.0f)); 2486 CHECK_FLT_SAME( expf,( +0.5f)); 2487 CHECK_FLT_SAME( expf,( -0.5f)); 2488 CHECK_FLT_SAME( expf,( +1.5f)); 2489 CHECK_FLT_SAME( expf,( -1.5f)); 2490 CHECK_FLT_SAME( expf,( +3.25f)); 2491 CHECK_FLT_SAME( expf,( 99.2559430f)); 2492 CHECK_FLT_SAME( expf,( -99.2559430f)); 2493 CHECK_FLT_SAME( expf,( +305.2559430f)); 2494 CHECK_FLT_SAME( expf,( -305.2559430f)); 2495 CHECK_FLT_SAME( expf,( +309.99884f)); 2496 CHECK_FLT_SAME( expf,( -309.111048f)); 2497 CHECK_FLT_SAME( expf,( +999.864597634f)); 2498 CHECK_FLT_SAME( expf,( -999.098234837f)); 2499 CHECK_FLT_SAME( expf,( +FLT_MAX)); 2500 CHECK_FLT_SAME( expf,( -FLT_MAX)); 2501 CHECK_FLT_SAME( expf,( -FLT_MIN)); 2502 CHECK_FLT_SAME( expf,( +FLT_MIN)); 2503 CHECK_FLT_SAME( expf,(+(float)INFINITY)); 2504 CHECK_FLT_SAME( expf,(-(float)INFINITY)); 2505 CHECK_FLT_SAME( expf,(RTStrNanFloat(NULL, false))); 2506 CHECK_FLT_SAME( expf,(RTStrNanFloat("ab305f", true))); 2507 CHECK_FLT_SAME_RELAXED_NAN(expf,(RTStrNanFloat("fffffffff_signaling", true))); 2508 CHECK_FLT_SAME_RELAXED_NAN(expf,(RTStrNanFloat("7777777777778_sig", false))); 2474 2509 } 2475 2510 … … 2509 2544 2510 2545 2511 CHECK_FLT( RT_NOCRT(exp2f)(1.0f), 2.0f);2512 CHECK_FLT( RT_NOCRT(exp2f)(2.0f), 4.0f);2513 CHECK_FLT( RT_NOCRT(exp2f)(32.0f), 4294967296.0f);2514 CHECK_FLT( RT_NOCRT(exp2f)(-1.0f), 0.5f);2515 CHECK_FLT( RT_NOCRT(exp2f)(-3.0f), 0.125f);2516 CHECK_FLT_SAME( exp2f, (0.0f));2517 CHECK_FLT_SAME( exp2f, (+INFINITY));2518 CHECK_FLT_SAME( exp2f, (-INFINITY));2519 CHECK_FLT_SAME( exp2f, (nan("1")));2520 CHECK_FLT_SAME( exp2f,(RTStrNanFloat("ab305f", true)));2521 CHECK_FLT_SAME( exp2f,(RTStrNanFloat("3fffff_signaling", true)));2522 CHECK_FLT_SAME( exp2f,(RTStrNanFloat("79778_sig", false)));2523 CHECK_FLT_SAME( exp2f, (1.0f));2524 CHECK_FLT_SAME( exp2f, (2.0f));2525 CHECK_FLT_SAME( exp2f, (-1.0f));2526 CHECK_FLT_APPROX_SAME(exp2f, (+0.5f));2527 CHECK_FLT_APPROX_SAME(exp2f, (-0.5f));2528 CHECK_FLT_APPROX_SAME(exp2f, (+1.5f));2529 CHECK_FLT_APPROX_SAME(exp2f, (-1.5f));2530 CHECK_FLT_APPROX_SAME(exp2f, (+3.25f));2531 CHECK_FLT_APPROX_SAME(exp2f, (99.25594f));2532 CHECK_FLT_APPROX_SAME(exp2f, (-99.25594f));2533 CHECK_FLT_APPROX_SAME(exp2f, (+305.25594f));2534 CHECK_FLT_APPROX_SAME(exp2f, (-305.25594f));2535 CHECK_FLT_APPROX_SAME(exp2f, (+309.99884f));2536 CHECK_FLT_APPROX_SAME(exp2f, (-309.111048f));2537 CHECK_FLT_APPROX_SAME(exp2f, (+999.86459f));2538 CHECK_FLT_APPROX_SAME(exp2f, (-999.09823f));2546 CHECK_FLT( RT_NOCRT(exp2f)( 1.0f), 2.0f); 2547 CHECK_FLT( RT_NOCRT(exp2f)( 2.0f), 4.0f); 2548 CHECK_FLT( RT_NOCRT(exp2f)( 32.0f), 4294967296.0f); 2549 CHECK_FLT( RT_NOCRT(exp2f)( -1.0f), 0.5f); 2550 CHECK_FLT( RT_NOCRT(exp2f)( -3.0f), 0.125f); 2551 CHECK_FLT_SAME( exp2f,( 0.0f)); 2552 CHECK_FLT_SAME( exp2f,(+(float)INFINITY)); 2553 CHECK_FLT_SAME( exp2f,(-(float)INFINITY)); 2554 CHECK_FLT_SAME( exp2f,( nan("1"))); 2555 CHECK_FLT_SAME( exp2f,(RTStrNanFloat("ab305f", true))); 2556 CHECK_FLT_SAME( exp2f,(RTStrNanFloat("3fffff_signaling", true))); 2557 CHECK_FLT_SAME( exp2f,(RTStrNanFloat("79778_sig", false))); 2558 CHECK_FLT_SAME( exp2f,( 1.0f)); 2559 CHECK_FLT_SAME( exp2f,( 2.0f)); 2560 CHECK_FLT_SAME( exp2f,( -1.0f)); 2561 CHECK_FLT_APPROX_SAME(exp2f,( +0.5f), 1); 2562 CHECK_FLT_APPROX_SAME(exp2f,( -0.5f), 1); 2563 CHECK_FLT_APPROX_SAME(exp2f,( +1.5f), 1); 2564 CHECK_FLT_APPROX_SAME(exp2f,( -1.5f), 1); 2565 CHECK_FLT_APPROX_SAME(exp2f,( +3.25f), 1); 2566 CHECK_FLT_APPROX_SAME(exp2f,( 99.25594f), 1); 2567 CHECK_FLT_APPROX_SAME(exp2f,( -99.25594f), 1); 2568 CHECK_FLT_APPROX_SAME(exp2f,( +305.25594f), 1); 2569 CHECK_FLT_APPROX_SAME(exp2f,( -305.25594f), 1); 2570 CHECK_FLT_APPROX_SAME(exp2f,( +309.99884f), 1); 2571 CHECK_FLT_APPROX_SAME(exp2f,( -309.111048f), 1); 2572 CHECK_FLT_APPROX_SAME(exp2f,( +999.86459f), 1); 2573 CHECK_FLT_APPROX_SAME(exp2f,( -999.09823f), 1); 2539 2574 } 2540 2575
Note:
See TracChangeset
for help on using the changeset viewer.