RepeatBegin: push the enclosing frame, then iteration 0, the count from
operand 0, the first body record, and the number of body records found by
scanning forward to the matching RepeatEnd (tag 10) or RepeatEndWhen (tag
22); a nested RepeatBegin (tag 9) deepens the scan. Running off the image
is a malformed record. A count of zero skips the body, nested bodies
included: the records left lose the body's and this one, the frame is
popped, and the advance steps past the end -- so a count read from the
state makes a block conditional.
Both forward branches and repeat-boundary search traverse unexecuted
records. Validate before every load/advance: malformed extents must fail,
never wrap the cursor or leave a zero-length scan spinning indefinitely.
Registers are distinct; pointer and extent survive, scratch/field are dead.
2545def nativePhysicalNativeScanRecord =
2546 (lambda unrestricted pointer : (family X86NativeRegister64) .
2547 (lambda unrestricted extent : (family X86NativeRegister64) .
2548 (lambda unrestricted scratch : (family X86NativeRegister64) .
2549 (lambda unrestricted field : (family X86NativeRegister64) .
2550 (lambda unrestricted tail : (family X86NativeAssembly) .
2551 (npCompare
2552 npR12
2553 pointer
2554 (nativePhysicalNativeJumpCondition
2555 npBelow
2556 nativePhysicalNativeLabelFatalBounds
2557 (npMove
2558 scratch
2559 npR12
2560 (nativePhysicalNativeEmit
2561 (nativePhysicalNativeSubtract pointer scratch)
2562 (npCompareImmediate
2563 scratch
2564 (nativePhysicalNativeI32Byte
2565 (nat-to-byte nativePhysicalImageCommandHeaderBytes))
2566 (nativePhysicalNativeJumpCondition
2567 npBelow
2568 nativePhysicalNativeLabelFatalRecord
2569 (npLoad64
2570 extent
2571 pointer
2572 nativePhysicalNativeD8
2573 (npCompareImmediate
2574 extent
2575 (nativePhysicalNativeI32Byte
2576 (nat-to-byte nativePhysicalImageCommandHeaderBytes))
2577 (nativePhysicalNativeJumpCondition
2578 npBelow
2579 nativePhysicalNativeLabelFatalRecord
2580 (npCompare
2581 scratch
2582 extent
2583 (nativePhysicalNativeJumpCondition
2584 npBelow
2585 nativePhysicalNativeLabelFatalBounds
2586 (npMove
2587 scratch
2588 extent
2589 (nativePhysicalNativeScanFixedPart
2590 pointer
2591 scratch
2592 field
2593 (npLoad64
2594 field
2595 pointer
2596 (npD (byte 32))
2597 (npCompare
2598 scratch
2599 field
2600 (nativePhysicalNativeJumpCondition
2601 npBelow
2602 nativePhysicalNativeLabelFatalRecord
2603 (nativePhysicalNativeEmit
2604 (nativePhysicalNativeSubtract field scratch)
2605 (npLoad64
2606 field
2607 pointer
2608 (npD (byte 40))
2609 (npCompare
2610 scratch
2611 field
2612 (nativePhysicalNativeJumpCondition
2613 npBelow
2614 nativePhysicalNativeLabelFatalRecord
2615 (nativePhysicalNativeEmit
2616 (nativePhysicalNativeSubtract field scratch)
2617 (npLoad64
2618 field
2619 pointer
2620 (npD (byte 48))
2621 (npCompare
2622 scratch
2623 field
2624 (nativePhysicalNativeJumpCondition
2625 npBelow
2626 nativePhysicalNativeLabelFatalRecord
2627 (nativePhysicalNativeEmit
2628 (nativePhysicalNativeSubtract field scratch)
2629 (npTest
2630 scratch
2631 (nativePhysicalNativeJumpCondition
2632 npNotZero
2633 nativePhysicalNativeLabelFatalRecord
2634 (npLoad64
2635 field
2636 pointer
2637 nativePhysicalNativeD0
2638 (npCompareImmediate
2639 field
2640 (nativePhysicalNativeI32Byte (byte 1))
2641 (nativePhysicalNativeJumpCondition
2642 npBelow
2643 nativePhysicalNativeLabelFatalRecord
2644 (npCompareImmediate
2645 field
2646 (nativePhysicalNativeI32Byte (byte 23))
2647 (nativePhysicalNativeJumpCondition
2648 (constructor X86NativeCondition X86NativeConditionAbove)
2649 nativePhysicalNativeLabelFatalRecord
2650 tail)))))))))))))))))))))))))))))))))))))The compiler supplied declaration spans and resolved links from this source snapshot. This page does not assert that this file belongs to a checked closure.