1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 2478b8fecSSam Ravnborg/* 3478b8fecSSam Ravnborg * VISsave.S: Code for saving FPU register state for 4478b8fecSSam Ravnborg * VIS routines. One should not call this directly, 5478b8fecSSam Ravnborg * but use macros provided in <asm/visasm.h>. 6478b8fecSSam Ravnborg * 7478b8fecSSam Ravnborg * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz) 8478b8fecSSam Ravnborg */ 9478b8fecSSam Ravnborg 10*4cdb71b6SMasahiro Yamada#include <linux/export.h> 1173958c65SSam Ravnborg#include <linux/linkage.h> 1273958c65SSam Ravnborg 13478b8fecSSam Ravnborg#include <asm/asi.h> 14478b8fecSSam Ravnborg#include <asm/page.h> 15478b8fecSSam Ravnborg#include <asm/ptrace.h> 16478b8fecSSam Ravnborg#include <asm/visasm.h> 17478b8fecSSam Ravnborg#include <asm/thread_info.h> 18478b8fecSSam Ravnborg 19478b8fecSSam Ravnborg /* On entry: %o5=current FPRS value, %g7 is callers address */ 20478b8fecSSam Ravnborg /* May clobber %o5, %g1, %g2, %g3, %g7, %icc, %xcc */ 21478b8fecSSam Ravnborg 22478b8fecSSam Ravnborg /* Nothing special need be done here to handle pre-emption, this 23478b8fecSSam Ravnborg * FPU save/restore mechanism is already preemption safe. 24478b8fecSSam Ravnborg */ 2573958c65SSam Ravnborg .text 26478b8fecSSam Ravnborg .align 32 2773958c65SSam RavnborgENTRY(VISenter) 28478b8fecSSam Ravnborg ldub [%g6 + TI_FPDEPTH], %g1 29478b8fecSSam Ravnborg brnz,a,pn %g1, 1f 30478b8fecSSam Ravnborg cmp %g1, 1 31478b8fecSSam Ravnborg stb %g0, [%g6 + TI_FPSAVED] 32478b8fecSSam Ravnborg stx %fsr, [%g6 + TI_XFSR] 33478b8fecSSam Ravnborg9: jmpl %g7 + %g0, %g0 34478b8fecSSam Ravnborg nop 35478b8fecSSam Ravnborg1: bne,pn %icc, 2f 36478b8fecSSam Ravnborg 37478b8fecSSam Ravnborg srl %g1, 1, %g1 38478b8fecSSam Ravnborgvis1: ldub [%g6 + TI_FPSAVED], %g3 39478b8fecSSam Ravnborg stx %fsr, [%g6 + TI_XFSR] 40478b8fecSSam Ravnborg or %g3, %o5, %g3 41478b8fecSSam Ravnborg stb %g3, [%g6 + TI_FPSAVED] 42478b8fecSSam Ravnborg rd %gsr, %g3 43478b8fecSSam Ravnborg clr %g1 44478b8fecSSam Ravnborg ba,pt %xcc, 3f 45478b8fecSSam Ravnborg 46478b8fecSSam Ravnborg stx %g3, [%g6 + TI_GSR] 47478b8fecSSam Ravnborg2: add %g6, %g1, %g3 4844922150SDavid S. Miller mov FPRS_DU | FPRS_DL | FPRS_FEF, %o5 49478b8fecSSam Ravnborg sll %g1, 3, %g1 50478b8fecSSam Ravnborg stb %o5, [%g3 + TI_FPSAVED] 51478b8fecSSam Ravnborg rd %gsr, %g2 52478b8fecSSam Ravnborg add %g6, %g1, %g3 53478b8fecSSam Ravnborg stx %g2, [%g3 + TI_GSR] 54478b8fecSSam Ravnborg 55478b8fecSSam Ravnborg add %g6, %g1, %g2 56478b8fecSSam Ravnborg stx %fsr, [%g2 + TI_XFSR] 57478b8fecSSam Ravnborg sll %g1, 5, %g1 58478b8fecSSam Ravnborg3: andcc %o5, FPRS_DL|FPRS_DU, %g0 59478b8fecSSam Ravnborg be,pn %icc, 9b 60478b8fecSSam Ravnborg add %g6, TI_FPREGS, %g2 61478b8fecSSam Ravnborg andcc %o5, FPRS_DL, %g0 62478b8fecSSam Ravnborg 63478b8fecSSam Ravnborg be,pn %icc, 4f 64478b8fecSSam Ravnborg add %g6, TI_FPREGS+0x40, %g3 65478b8fecSSam Ravnborg membar #Sync 66478b8fecSSam Ravnborg stda %f0, [%g2 + %g1] ASI_BLK_P 67478b8fecSSam Ravnborg stda %f16, [%g3 + %g1] ASI_BLK_P 68478b8fecSSam Ravnborg membar #Sync 69478b8fecSSam Ravnborg andcc %o5, FPRS_DU, %g0 70478b8fecSSam Ravnborg be,pn %icc, 5f 71478b8fecSSam Ravnborg4: add %g1, 128, %g1 72478b8fecSSam Ravnborg membar #Sync 73478b8fecSSam Ravnborg stda %f32, [%g2 + %g1] ASI_BLK_P 74478b8fecSSam Ravnborg 75478b8fecSSam Ravnborg stda %f48, [%g3 + %g1] ASI_BLK_P 76478b8fecSSam Ravnborg5: membar #Sync 77478b8fecSSam Ravnborg ba,pt %xcc, 80f 78478b8fecSSam Ravnborg nop 79478b8fecSSam Ravnborg 80478b8fecSSam Ravnborg .align 32 81478b8fecSSam Ravnborg80: jmpl %g7 + %g0, %g0 82478b8fecSSam Ravnborg nop 8373958c65SSam RavnborgENDPROC(VISenter) 84d3867f04SAl ViroEXPORT_SYMBOL(VISenter) 85