14f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// Copyright 2015 The Go Authors. All rights reserved. 24f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// Use of this source code is governed by a BSD-style 34f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// license that can be found in the LICENSE file. 44f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 54f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen#include "textflag.h" 64f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 74f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// No need for _rt0_arm64_darwin as darwin/arm64 only 84f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// supports external linking. 94f7f559a4b744258a796dd591b11bd88e4a6dc7Dan WillemsenTEXT _rt0_arm64_darwin(SB),NOSPLIT,$-8 104f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $42, R0 114f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $1, R16 // SYS_exit 124f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen SVC $0x80 134f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 144f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// When linking with -buildmode=c-archive or -buildmode=c-shared, 154f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// this symbol is called from a global initialization function. 164f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// 174f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// Note that all currently shipping darwin/arm64 platforms require 184f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen// cgo and do not support c-shared. 194f7f559a4b744258a796dd591b11bd88e4a6dc7Dan WillemsenTEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$168 204f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen // Preserve callee-save registers. 214f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R19, 24(RSP) 224f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R20, 32(RSP) 234f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R21, 40(RSP) 244f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R22, 48(RSP) 254f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R23, 56(RSP) 264f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R24, 64(RSP) 274f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R25, 72(RSP) 284f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R26, 80(RSP) 294f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R27, 88(RSP) 304f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD F8, 96(RSP) 314f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD F9, 104(RSP) 324f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD F10, 112(RSP) 334f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD F11, 120(RSP) 344f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD F12, 128(RSP) 354f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD F13, 136(RSP) 364f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD F14, 144(RSP) 374f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD F15, 152(RSP) 384f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 394f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R0, _rt0_arm64_darwin_lib_argc<>(SB) 404f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD R1, _rt0_arm64_darwin_lib_argv<>(SB) 414f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 424f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen // Synchronous initialization. 434f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $runtime·libpreinit(SB), R4 444f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen BL (R4) 454f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 464f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen // Create a new thread to do the runtime initialization and return. 474f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD _cgo_sys_thread_create(SB), R4 484f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $_rt0_arm64_darwin_lib_go(SB), R0 494f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $0, R1 504f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen BL (R4) 514f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 524f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen // Restore callee-save registers. 534f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 24(RSP), R19 544f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 32(RSP), R20 554f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 40(RSP), R21 564f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 48(RSP), R22 574f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 56(RSP), R23 584f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 64(RSP), R24 594f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 72(RSP), R25 604f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 80(RSP), R26 614f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD 88(RSP), R27 624f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD 96(RSP), F8 634f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD 104(RSP), F9 644f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD 112(RSP), F10 654f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD 120(RSP), F11 664f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD 128(RSP), F12 674f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD 136(RSP), F13 684f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD 144(RSP), F14 694f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen FMOVD 152(RSP), F15 704f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen RET 714f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 724f7f559a4b744258a796dd591b11bd88e4a6dc7Dan WillemsenTEXT _rt0_arm64_darwin_lib_go(SB),NOSPLIT,$0 734f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD _rt0_arm64_darwin_lib_argc<>(SB), R0 744f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD _rt0_arm64_darwin_lib_argv<>(SB), R1 754f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $runtime·rt0_go(SB), R4 764f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen B (R4) 774f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 784f7f559a4b744258a796dd591b11bd88e4a6dc7Dan WillemsenDATA _rt0_arm64_darwin_lib_argc<>(SB)/8, $0 794f7f559a4b744258a796dd591b11bd88e4a6dc7Dan WillemsenGLOBL _rt0_arm64_darwin_lib_argc<>(SB),NOPTR, $8 804f7f559a4b744258a796dd591b11bd88e4a6dc7Dan WillemsenDATA _rt0_arm64_darwin_lib_argv<>(SB)/8, $0 814f7f559a4b744258a796dd591b11bd88e4a6dc7Dan WillemsenGLOBL _rt0_arm64_darwin_lib_argv<>(SB),NOPTR, $8 824f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen 834f7f559a4b744258a796dd591b11bd88e4a6dc7Dan WillemsenTEXT main(SB),NOSPLIT,$-8 844f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $runtime·rt0_go(SB), R2 854f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen BL (R2) 864f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsenexit: 874f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $0, R0 884f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen MOVD $1, R16 // sys_exit 894f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen SVC $0x80 904f7f559a4b744258a796dd591b11bd88e4a6dc7Dan Willemsen B exit 91