122 lines
2.6 KiB
ArmAsm
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
|