#include "funcdata.h"
#include "textflag.h"
-#ifdef GOARM64_LSE
-DATA no_lse_msg<>+0x00(SB)/64, $"This program can only run on ARM64 processors with LSE support.\n"
-GLOBL no_lse_msg<>(SB), RODATA, $64
-#endif
-
TEXT runtime·rt0_go(SB),NOSPLIT|TOPFRAME,$0
// SP = stack; R0 = argc; R1 = argv
BL runtime·wintls(SB)
#endif
- // Check that CPU we use for execution supports instructions targeted during compile-time.
-#ifdef GOARM64_LSE
-#ifndef GOOS_openbsd
- // Read the ID_AA64ISAR0_EL1 register
- MRS ID_AA64ISAR0_EL1, R0
-
- // Extract the LSE field (bits [23:20])
- LSR $20, R0, R0
- AND $0xf, R0, R0
-
- // LSE support is indicated by a non-zero value
- CBZ R0, no_lse
-#endif
-#endif
-
MOVW 8(RSP), R0 // copy argc
MOVW R0, -8(RSP)
MOVD 16(RSP), R0 // copy argv
// start this M
BL runtime·mstart(SB)
- RET
-
-#ifdef GOARM64_LSE
-#ifndef GOOS_openbsd
-no_lse:
- MOVD $1, R0 // stderr
- MOVD R0, 8(RSP)
- MOVD $no_lse_msg<>(SB), R1 // message address
- MOVD R1, 16(RSP)
- MOVD $64, R2 // message length
- MOVD R2, 24(RSP)
- CALL runtime·write(SB)
- CALL runtime·exit(SB)
- CALL runtime·abort(SB)
- RET
-#endif
-#endif
// Prevent dead-code elimination of debugCallV2 and debugPinnerV1, which are
// intended to be called by debuggers.