; ===--- get-cpu-context-aarch64.asm - Low-level register capture ---------=== ;
;
;  This source file is part of the Swift.org open source project
;
;  Copyright (c) 2025 Apple Inc. and the Swift project authors
;  Licensed under Apache License v2.0 with Runtime Library Exception
;
;  See https://swift.org/LICENSE.txt for license information
;  See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
;
; ===----------------------------------------------------------------------=== ;
;
;  Saves the necessary registers to an appropriate Context structure.
;
; ===----------------------------------------------------------------------=== ;

        AREA |.text|, CODE, READONLY, ARM64
        EXPORT _swift_get_cpu_context

;; On entry, x8 contains the pointer to the arm64_gprs
_swift_get_cpu_context PROC
        stp  x0,  x1, [x8, #0x00]
        stp  x2,  x3, [x8, #0x10]
        stp  x4,  x5, [x8, #0x20]
        stp  x6,  x7, [x8, #0x30]
        stp  x8,  x9, [x8, #0x40]
        stp x10, x11, [x8, #0x50]
        stp x12, x13, [x8, #0x60]
        stp x14, x15, [x8, #0x70]
        stp x16, x17, [x8, #0x80]
        stp x18, x19, [x8, #0x90]
        stp x20, x21, [x8, #0xa0]
        stp x22, x23, [x8, #0xb0]
        stp x24, x25, [x8, #0xc0]
        stp x26, x27, [x8, #0xd0]
        stp x28, x29, [x8, #0xe0]
        mov  x1, sp
        stp x30, x1,  [x8, #0xf0]
        str x30,      [x8, #0x100]
        mov  x1, #0x1ffffffff
        str  x1,      [x8, #0x108]
        ret
_swift_get_cpu_context ENDP

        END
