MCPcopy Create free account
hub / github.com/HaxeFoundation/hxcpp / fcompare

Method fcompare

src/hx/cppia/CppiaCompiler.cpp:477–529  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

475
476
477 JumpId fcompare(JitCompare condition, const JitVal &v0, const JitVal &v1, LabelId andJump,bool inReverse) HXCPP_OVERRIDE
478 {
479 sljit_sw t0 = getTarget(v0);
480 sljit_sw t1 = getTarget(v1);
481 // TODO - multiple JumpId...
482 if (compiler)
483 {
484 bool jumpOnNan = condition==cmpD_NOT_EQUAL;
485 if (inReverse)
486 {
487 jumpOnNan = !jumpOnNan;
488 condition = (JitCompare)( (int)condition ^ 0x01 );
489 }
490
491 if (jumpOnNan)
492 {
493 JumpId passed = sljit_emit_fcmp(compiler, condition, t0, getData(v0), t1, getData(v1) );
494
495 // test failed, but test nan
496 JumpId notNan = sljit_emit_jump(compiler,SLJIT_ORDERED_F64);
497
498 // is nan - fallthough
499 // test passed, but was nan
500 comeFrom(passed);
501 JumpId good = sljit_emit_jump(compiler,SLJIT_JUMP);
502 if (andJump)
503 sljit_set_label(good, andJump);
504
505 comeFrom(notNan);
506 return good;
507 }
508 else
509 {
510 JumpId userCmpPassed = sljit_emit_fcmp(compiler, condition, t0, getData(v0), t1, getData(v1) );
511 // user test failed - will also fail with nan, so done.
512 JumpId userCmpFailed = sljit_emit_jump(compiler,SLJIT_JUMP);
513
514 // user test passed - unless nan ...
515 comeFrom(userCmpPassed);
516
517 // Result is not-nan when user test passed
518 JumpId notNan = sljit_emit_jump(compiler,SLJIT_ORDERED_F64);
519 if (andJump)
520 sljit_set_label(notNan, andJump);
521 // is nan ..
522
523 comeFrom(userCmpFailed);
524
525 return notNan;
526 }
527 }
528 return 0;
529 }
530
531
532 JumpId scompare(JitCompare condition, const JitVal &v0, const JitVal &v1, LabelId andJump) HXCPP_OVERRIDE

Callers 2

genCodeMethod · 0.80
genCompareMethod · 0.80

Calls 3

sljit_emit_fcmpFunction · 0.85
sljit_set_labelFunction · 0.85
sljit_emit_jumpFunction · 0.50

Tested by

no test coverage detected