Source/Packages

Compiler.MachineX86NativeAssembly

packages/compiler/src/Compiler/MachineX86NativeAssembly.alpha

548 lines56 declarations22.2 KiBSHA-256 4a24f06c7be3

def · lines 390–524

x86NativeEncodeAssemblyFrom

Full file
390def x86NativeEncodeAssemblyFrom :
391  (pi unrestricted assembly : (family X86NativeAssembly) .
392    (pi unrestricted labels : (family X86NativeLabelTable) .
393      (pi unrestricted offset : (family X86NativeUnsigned32) . (family X86NativeAssemblyResult)))) =
394  (lambda unrestricted assembly : (family X86NativeAssembly) .
395    (eliminate
396      X86NativeAssembly
397      (lambda unrestricted value : (family X86NativeAssembly) .
398        (pi unrestricted labels : (family X86NativeLabelTable) .
399          (pi unrestricted offset : (family X86NativeUnsigned32) . (family X86NativeAssemblyResult))))
400      assembly
401      (branch
402        X86NativeAssemblyEnd
403        .
404        (lambda unrestricted labels : (family X86NativeLabelTable) .
405          (lambda unrestricted offset : (family X86NativeUnsigned32) .
406            (constructor X86NativeAssemblyResult X86NativeAssemblyEncoded b""))))
407      (branch
408        X86NativeAssemblyEmit
409        instruction
410        tail
411        encodeTail
412        .
413        (lambda unrestricted labels : (family X86NativeLabelTable) .
414          (lambda unrestricted offset : (family X86NativeUnsigned32) .
415            (let unrestricted encoded =
416              (x86EncodeNativeInstruction instruction)
417              in
418              (eliminate
419                X86NativeUnsigned32Result
420                (lambda unrestricted advanceResult : (family X86NativeUnsigned32Result) .
421                  (family X86NativeAssemblyResult))
422                (x86NativeAdvanceUnsigned32ByBytes offset encoded)
423                (branch
424                  X86NativeUnsigned32Success
425                  nextOffset
426                  .
427                  (x86NativePrependAssemblyBytes encoded (encodeTail labels nextOffset)))
428                (branch
429                  X86NativeUnsigned32Overflow
430                  .
431                  (constructor X86NativeAssemblyResult X86NativeAssemblyEncodeOffsetOverflow)))))))
432      (branch
433        X86NativeAssemblyLabel
434        name
435        tail
436        encodeTail
437        .
438        (lambda unrestricted labels : (family X86NativeLabelTable) .
439          (lambda unrestricted offset : (family X86NativeUnsigned32) . (encodeTail labels offset))))
440      (branch
441        X86NativeAssemblyJump
442        target
443        tail
444        encodeTail
445        .
446        (lambda unrestricted labels : (family X86NativeLabelTable) .
447          (lambda unrestricted offset : (family X86NativeUnsigned32) .
448            (eliminate
449              X86NativeUnsigned32Result
450              (lambda unrestricted advanceResult : (family X86NativeUnsigned32Result) .
451                (family X86NativeAssemblyResult))
452              (x86NativeAdvanceUnsigned32ByBytes offset (bytes 0 0 0 0 0))
453              (branch
454                X86NativeUnsigned32Success
455                nextOffset
456                .
457                (x86NativeEncodeJumpToLabel
458                  zero
459                  (constructor X86NativeCondition X86NativeConditionZero)
460                  target
461                  labels
462                  nextOffset
463                  (encodeTail labels nextOffset)))
464              (branch
465                X86NativeUnsigned32Overflow
466                .
467                (constructor X86NativeAssemblyResult X86NativeAssemblyEncodeOffsetOverflow))))))
468      (branch
469        X86NativeAssemblyJumpCondition
470        condition
471        target
472        tail
473        encodeTail
474        .
475        (lambda unrestricted labels : (family X86NativeLabelTable) .
476          (lambda unrestricted offset : (family X86NativeUnsigned32) .
477            (eliminate
478              X86NativeUnsigned32Result
479              (lambda unrestricted advanceResult : (family X86NativeUnsigned32Result) .
480                (family X86NativeAssemblyResult))
481              (x86NativeAdvanceUnsigned32ByBytes offset (bytes 0 0 0 0 0 0))
482              (branch
483                X86NativeUnsigned32Success
484                nextOffset
485                .
486                (x86NativeEncodeJumpToLabel
487                  (succ zero)
488                  condition
489                  target
490                  labels
491                  nextOffset
492                  (encodeTail labels nextOffset)))
493              (branch
494                X86NativeUnsigned32Overflow
495                .
496                (constructor X86NativeAssemblyResult X86NativeAssemblyEncodeOffsetOverflow))))))
497      (branch
498        X86NativeAssemblyLoadEffectiveAddressRIPLabel
499        destination
500        target
501        tail
502        encodeTail
503        .
504        (lambda unrestricted labels : (family X86NativeLabelTable) .
505          (lambda unrestricted offset : (family X86NativeUnsigned32) .
506            (eliminate
507              X86NativeUnsigned32Result
508              (lambda unrestricted advanceResult : (family X86NativeUnsigned32Result) .
509                (family X86NativeAssemblyResult))
510              (x86NativeAdvanceUnsigned32ByBytes offset (bytes 0 0 0 0 0 0 0))
511              (branch
512                X86NativeUnsigned32Success
513                nextOffset
514                .
515                (x86NativeEncodeLEAToLabel
516                  destination
517                  target
518                  labels
519                  nextOffset
520                  (encodeTail labels nextOffset)))
521              (branch
522                X86NativeUnsigned32Overflow
523                .
524                (constructor X86NativeAssemblyResult X86NativeAssemblyEncodeOffsetOverflow))))))))

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.