// Copyright (c) 2026 Petr Balvín (https://petrbalvin.org) // SPDX-License-Identifier: BSD-3-Clause // Differential kernel for the arm64 system instructions: barriers, // cache maintenance, the system register accesses, supervisor calls, // breakpoints and prefetches. Every function is byte-compared against // go tool asm. #include "textflag.h" // func barriers() TEXT ·barriers(SB), NOSPLIT, $0-0 DMB $15 DMB $1 DSB $15 DSB $4 ISB $15 ISB $1 RET // func cacheOps() TEXT ·cacheOps(SB), NOSPLIT, $0-0 DC ZVA, R4 DC IVAC, R1 DC CVAC, R2 DC CVAU, R3 DC CIVAC, R7 RET // func sysRegs() TEXT ·sysRegs(SB), NOSPLIT, $0-0 MRS DCZID_EL0, R3 MRS CNTVCT_EL0, R0 MRS CNTPCT_EL0, R1 MRS CNTFRQ_EL0, R2 MRS MIDR_EL1, R0 MRS ID_AA64PFR0_EL1, R0 MRS ID_AA64ISAR0_EL1, R0 MRS ID_AA64ISAR1_EL1, R0 MRS DIT, R0 MSR $3, SPSel MSR $9, DAIFSet MSR $6, DAIFClr MSR $1, DIT RET // func exceptions() TEXT ·exceptions(SB), NOSPLIT, $0-0 SVC $0 SVC $7165 BRK BRK $35943 RET // func prefetch() TEXT ·prefetch(SB), NOSPLIT, $0-0 PRFM (R0), PLDL1KEEP PRFM (R3), PLDL3KEEP PRFM (R4), PSTL1KEEP PRFM (R2), $25 RET