Changeset 96216 in vbox
- Timestamp:
- Aug 15, 2022 11:12:09 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 153027
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/math/fabs.asm
r96014 r96216 25 25 ; 26 26 27 28 %define RT_ASM_WITH_SEH64 27 29 %include "iprt/asmdefs.mac" 30 28 31 29 32 BEGINCODE … … 34 37 ; @param rd 32-bit: [ebp + 8] 64-bit: xmm0 35 38 RT_NOCRT_BEGINPROC fabs 36 push xBP 37 mov xBP, xSP 39 push xBP 40 SEH64_PUSH_xBP 41 mov xBP, xSP 42 SEH64_SET_FRAME_xBP 0 43 SEH64_END_PROLOGUE 38 44 39 45 %ifdef RT_ARCH_AMD64 40 sub xSP, 10h 41 42 movsd [xSP], xmm0 43 fld qword [xSP] 44 45 fabs 46 47 fstp qword [xSP] 48 movsd xmm0, [xSP] 49 46 andps xmm0, [g_r64ClearSignMask xWrtRIP] 50 47 %else 51 fld qword [xBP + xCB*2]52 fabs48 fld qword [xBP + xCB*2] ; This turns SNaN into QNaN. 49 fabs 53 50 %endif 54 51 55 leave56 ret52 leave 53 ret 57 54 ENDPROC RT_NOCRT(fabs) 58 55 56 ALIGNCODE(16) 57 g_r64ClearSignMask: 58 dd 0ffffffffh 59 dd 07fffffffh 60 61 dd 0ffffffffh 62 dd 07fffffffh 63 -
trunk/src/VBox/Runtime/common/math/fabsf.asm
r96014 r96216 25 25 ; 26 26 27 28 %define RT_ASM_WITH_SEH64 27 29 %include "iprt/asmdefs.mac" 30 28 31 29 32 BEGINCODE … … 34 37 ; @param rf 32-bit: [ebp + 8] 64-bit: xmm0 35 38 RT_NOCRT_BEGINPROC fabsf 36 push xBP 37 mov xBP, xSP 39 push xBP 40 SEH64_PUSH_xBP 41 mov xBP, xSP 42 SEH64_SET_FRAME_xBP 0 43 SEH64_END_PROLOGUE 38 44 39 45 %ifdef RT_ARCH_AMD64 40 sub xSP, 10h 41 42 movsd [xSP], xmm0 43 fld dword [xSP] 44 45 fabs 46 47 fstp dword [xSP] 48 movsd xmm0, [xSP] 49 46 andps xmm0, [g_r32ClearSignMask xWrtRIP] 50 47 %else 51 fld dword [xBP + xCB*2]52 fabs48 fld dword [xBP + xCB*2] ; This turns SNaN into QNaN. 49 fabs 53 50 %endif 54 51 55 leave56 ret52 leave 53 ret 57 54 ENDPROC RT_NOCRT(fabsf) 58 55 56 ALIGNCODE(16) 57 g_r32ClearSignMask: 58 dd 07fffffffh 59 dd 07fffffffh 60 dd 07fffffffh 61 dd 07fffffffh 62 -
trunk/src/VBox/Runtime/common/math/fabsl.asm
r96014 r96216 25 25 ; 26 26 27 28 %define RT_ASM_WITH_SEH64 27 29 %include "iprt/asmdefs.mac" 30 28 31 29 32 BEGINCODE … … 34 37 ; @param lrd [xSP + xCB*2] 35 38 RT_NOCRT_BEGINPROC fabsl 36 push xBP 37 mov xBP, xSP 39 push xBP 40 SEH64_PUSH_xBP 41 mov xBP, xSP 42 SEH64_SET_FRAME_xBP 0 43 SEH64_END_PROLOGUE 38 44 39 fld tword [xBP + xCB*2]40 fabs45 fld tword [xBP + xCB*2] 46 fabs 41 47 42 .done: 43 leave 44 ret 48 leave 49 ret 45 50 ENDPROC RT_NOCRT(fabsl) 46 51 -
trunk/src/VBox/Runtime/testcase/tstRTNoCrt-2.cpp
r96215 r96216 345 345 CHECK_LONG_SAME(llabs,(LONG_MIN)); 346 346 CHECK_LONG_SAME(llabs,(LONG_MAX)); 347 } 348 349 350 void testFAbs() 351 { 352 RTTestSub(g_hTest, "fabs[fl]"); 353 354 CHECK_DBL(RT_NOCRT(fabs)( +0.0), +0.0); 355 CHECK_DBL(RT_NOCRT(fabs)( -0.0), +0.0); 356 CHECK_DBL(RT_NOCRT(fabs)( -42.5), +42.5); 357 CHECK_DBL(RT_NOCRT(fabs)( +42.5), +42.5); 358 CHECK_DBL(RT_NOCRT(fabs)(+1234.60958634e+20), +1234.60958634e+20); 359 CHECK_DBL(RT_NOCRT(fabs)(-1234.60958634e+20), +1234.60958634e+20); 360 CHECK_DBL(RT_NOCRT(fabs)( +2.1984e-310), +2.1984e-310); /* subnormal */ 361 CHECK_DBL(RT_NOCRT(fabs)( -2.1984e-310), +2.1984e-310); /* subnormal */ 362 CHECK_DBL(RT_NOCRT(fabs)(-INFINITY), +INFINITY); 363 CHECK_DBL(RT_NOCRT(fabs)(+INFINITY), +INFINITY); 364 CHECK_DBL(RT_NOCRT(fabs)(RTStrNanDouble(NULL, true)), RTStrNanDouble(NULL, true)); 365 CHECK_DBL(RT_NOCRT(fabs)(RTStrNanDouble("s", false)), RTStrNanDouble("s", true)); 366 CHECK_DBL_SAME(fabs,( -0.0)); 367 CHECK_DBL_SAME(fabs,( +0.0)); 368 CHECK_DBL_SAME(fabs,( +22.5)); 369 CHECK_DBL_SAME(fabs,( -22.5)); 370 CHECK_DBL_SAME(fabs,( +2.1984e-310)); /* subnormal */ 371 CHECK_DBL_SAME(fabs,( -2.1984e-310)); /* subnormal */ 372 CHECK_DBL_SAME(fabs,(+1234.60958634e+20)); 373 CHECK_DBL_SAME(fabs,(-1234.60958634e+20)); 374 CHECK_DBL_SAME(fabs,(-INFINITY)); 375 CHECK_DBL_SAME(fabs,(+INFINITY)); 376 CHECK_DBL_SAME(fabs,(RTStrNanDouble(NULL, true))); 377 CHECK_DBL_SAME(fabs,(RTStrNanDouble("s", false))); 378 379 CHECK_FLT(RT_NOCRT(fabsf)( +0.0f), +0.0f); 380 CHECK_FLT(RT_NOCRT(fabsf)( -0.0f), +0.0f); 381 CHECK_FLT(RT_NOCRT(fabsf)( -42.5f), +42.5f); 382 CHECK_FLT(RT_NOCRT(fabsf)( +42.5f), +42.5f); 383 CHECK_FLT(RT_NOCRT(fabsf)(+1234.60958634e+20f), +1234.60958634e+20f); 384 CHECK_FLT(RT_NOCRT(fabsf)(-1234.60958634e+20f), +1234.60958634e+20f); 385 CHECK_FLT(RT_NOCRT(fabsf)( +2.1984e-310f), +2.1984e-310f); /* subnormal */ 386 CHECK_FLT(RT_NOCRT(fabsf)( -2.1984e-310f), +2.1984e-310f); /* subnormal */ 387 CHECK_FLT(RT_NOCRT(fabsf)(-INFINITY), +INFINITY); 388 CHECK_FLT(RT_NOCRT(fabsf)(+INFINITY), +INFINITY); 389 CHECK_FLT(RT_NOCRT(fabsf)(RTStrNanFloat(NULL, true)), RTStrNanFloat(NULL, true)); 390 CHECK_FLT(RT_NOCRT(fabsf)(RTStrNanFloat("s", false)), RTStrNanFloat("s", true)); 391 CHECK_FLT_SAME(fabsf,( -0.0f)); 392 CHECK_FLT_SAME(fabsf,( +0.0f)); 393 CHECK_FLT_SAME(fabsf,( +22.5f)); 394 CHECK_FLT_SAME(fabsf,( -22.5f)); 395 CHECK_FLT_SAME(fabsf,( +2.1984e-310f)); /* subnormal */ 396 CHECK_FLT_SAME(fabsf,( -2.1984e-310f)); /* subnormal */ 397 CHECK_FLT_SAME(fabsf,(+1234.60958634e+20f)); 398 CHECK_FLT_SAME(fabsf,(-1234.60958634e+20f)); 399 CHECK_FLT_SAME(fabsf,(-INFINITY)); 400 CHECK_FLT_SAME(fabsf,(+INFINITY)); 401 CHECK_FLT_SAME(fabsf,(RTStrNanFloat(NULL, true))); 402 #if 0 /* UCRT on windows converts this to a quiet NaN, so skip it. */ 403 CHECK_FLT_SAME(fabsf,(RTStrNanFloat("s", false))); 404 #endif 347 405 } 348 406 … … 2351 2409 2352 2410 /* math.h */ 2411 testFAbs(); 2353 2412 testCopySign(); 2354 2413 testFmax();
Note:
See TracChangeset
for help on using the changeset viewer.