gvisor/pkg/sentry/platform/ring0/lib_arm64.s

122 lines
2.6 KiB
ArmAsm

// Copyright 2019 The gVisor Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "funcdata.h"
#include "textflag.h"
TEXT ·CPACREL1(SB),NOSPLIT,$0-8
WORD $0xd5381041 // MRS CPACR_EL1, R1
MOVD R1, ret+0(FP)
RET
TEXT ·GetFPCR(SB),NOSPLIT,$0-8
WORD $0xd53b4201 // MRS NZCV, R1
MOVD R1, ret+0(FP)
RET
TEXT ·GetFPSR(SB),NOSPLIT,$0-8
WORD $0xd53b4421 // MRS FPSR, R1
MOVD R1, ret+0(FP)
RET
TEXT ·SetFPCR(SB),NOSPLIT,$0-8
MOVD addr+0(FP), R1
WORD $0xd51b4201 // MSR R1, NZCV
RET
TEXT ·SetFPSR(SB),NOSPLIT,$0-8
MOVD addr+0(FP), R1
WORD $0xd51b4421 // MSR R1, FPSR
RET
TEXT ·SaveVRegs(SB),NOSPLIT,$0-8
MOVD addr+0(FP), R0
// Skip aarch64_ctx, fpsr, fpcr.
FMOVD F0, 16*1(R0)
FMOVD F1, 16*2(R0)
FMOVD F2, 16*3(R0)
FMOVD F3, 16*4(R0)
FMOVD F4, 16*5(R0)
FMOVD F5, 16*6(R0)
FMOVD F6, 16*7(R0)
FMOVD F7, 16*8(R0)
FMOVD F8, 16*9(R0)
FMOVD F9, 16*10(R0)
FMOVD F10, 16*11(R0)
FMOVD F11, 16*12(R0)
FMOVD F12, 16*13(R0)
FMOVD F13, 16*14(R0)
FMOVD F14, 16*15(R0)
FMOVD F15, 16*16(R0)
FMOVD F16, 16*17(R0)
FMOVD F17, 16*18(R0)
FMOVD F18, 16*19(R0)
FMOVD F19, 16*20(R0)
FMOVD F20, 16*21(R0)
FMOVD F21, 16*22(R0)
FMOVD F22, 16*23(R0)
FMOVD F23, 16*24(R0)
FMOVD F24, 16*25(R0)
FMOVD F25, 16*26(R0)
FMOVD F26, 16*27(R0)
FMOVD F27, 16*28(R0)
FMOVD F28, 16*29(R0)
FMOVD F29, 16*30(R0)
FMOVD F30, 16*31(R0)
FMOVD F31, 16*32(R0)
ISB $15
RET
TEXT ·LoadVRegs(SB),NOSPLIT,$0-8
MOVD addr+0(FP), R0
// Skip aarch64_ctx, fpsr, fpcr.
FMOVD 16*1(R0), F0
FMOVD 16*2(R0), F1
FMOVD 16*3(R0), F2
FMOVD 16*4(R0), F3
FMOVD 16*5(R0), F4
FMOVD 16*6(R0), F5
FMOVD 16*7(R0), F6
FMOVD 16*8(R0), F7
FMOVD 16*9(R0), F8
FMOVD 16*10(R0), F9
FMOVD 16*11(R0), F10
FMOVD 16*12(R0), F11
FMOVD 16*13(R0), F12
FMOVD 16*14(R0), F13
FMOVD 16*15(R0), F14
FMOVD 16*16(R0), F15
FMOVD 16*17(R0), F16
FMOVD 16*18(R0), F17
FMOVD 16*19(R0), F18
FMOVD 16*20(R0), F19
FMOVD 16*21(R0), F20
FMOVD 16*22(R0), F21
FMOVD 16*23(R0), F22
FMOVD 16*24(R0), F23
FMOVD 16*25(R0), F24
FMOVD 16*26(R0), F25
FMOVD 16*27(R0), F26
FMOVD 16*28(R0), F27
FMOVD 16*29(R0), F28
FMOVD 16*30(R0), F29
FMOVD 16*31(R0), F30
FMOVD 16*32(R0), F31
ISB $15
RET