Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/loongarch/include/asm/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 22 kB image not shown  

Quelle  asmmacro.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
 */

#ifndef _ASM_ASMMACRO_H
#define _ASM_ASMMACRO_H

#include <asm/asm-offsets.h>
#include <asm/regdef.h>
#include <asm/fpregdef.h>
#include <asm/loongarch.h>

 .macro cpu_save_nonscratch thread
 stptr.d s0, \thread, THREAD_REG23
 stptr.d s1, \thread, THREAD_REG24
 stptr.d s2, \thread, THREAD_REG25
 stptr.d s3, \thread, THREAD_REG26
 stptr.d s4, \thread, THREAD_REG27
 stptr.d s5, \thread, THREAD_REG28
 stptr.d s6, \thread, THREAD_REG29
 stptr.d s7, \thread, THREAD_REG30
 stptr.d s8, \thread, THREAD_REG31
 stptr.d sp, \thread, THREAD_REG03
 stptr.d fp, \thread, THREAD_REG22
 .endm

 .macro cpu_restore_nonscratch thread
 ldptr.d s0, \thread, THREAD_REG23
 ldptr.d s1, \thread, THREAD_REG24
 ldptr.d s2, \thread, THREAD_REG25
 ldptr.d s3, \thread, THREAD_REG26
 ldptr.d s4, \thread, THREAD_REG27
 ldptr.d s5, \thread, THREAD_REG28
 ldptr.d s6, \thread, THREAD_REG29
 ldptr.d s7, \thread, THREAD_REG30
 ldptr.d s8, \thread, THREAD_REG31
 ldptr.d ra, \thread, THREAD_REG01
 ldptr.d sp, \thread, THREAD_REG03
 ldptr.d fp, \thread, THREAD_REG22
 .endm

 .macro fpu_save_csr thread tmp
 movfcsr2gr \tmp, fcsr0
 stptr.w  \tmp, \thread, THREAD_FCSR
#ifdef CONFIG_CPU_HAS_LBT
 /* TM bit is always 0 if LBT not supported */
 andi  \tmp, \tmp, FPU_CSR_TM
 beqz  \tmp, 1f
 /* Save FTOP */
 x86mftop \tmp
 stptr.w  \tmp, \thread, THREAD_FTOP
 /* Turn off TM to ensure the order of FPR in memory independent of TM */
 x86clrtm
1:
#endif
 .endm

 .macro fpu_restore_csr thread tmp0 tmp1
 ldptr.w  \tmp0, \thread, THREAD_FCSR
 movgr2fcsr fcsr0, \tmp0
#ifdef CONFIG_CPU_HAS_LBT
 /* TM bit is always 0 if LBT not supported */
 andi  \tmp0, \tmp0, FPU_CSR_TM
 beqz  \tmp0, 2f
 /* Restore FTOP */
 ldptr.w  \tmp0, \thread, THREAD_FTOP
 andi  \tmp0, \tmp0, 0x7
 la.pcrel \tmp1, 1f
 alsl.d  \tmp1, \tmp0, \tmp1, 3
 jr  \tmp1
1:
 x86mttop 0
 b 2f
 x86mttop 1
 b 2f
 x86mttop 2
 b 2f
 x86mttop 3
 b 2f
 x86mttop 4
 b 2f
 x86mttop 5
 b 2f
 x86mttop 6
 b 2f
 x86mttop 7
2:
#endif
 .endm

 .macro fpu_save_cc thread tmp0 tmp1
 movcf2gr \tmp0, $fcc0
 move \tmp1, \tmp0
 movcf2gr \tmp0, $fcc1
 bstrins.d \tmp1, \tmp0, 15, 8
 movcf2gr \tmp0, $fcc2
 bstrins.d \tmp1, \tmp0, 23, 16
 movcf2gr \tmp0, $fcc3
 bstrins.d \tmp1, \tmp0, 31, 24
 movcf2gr \tmp0, $fcc4
 bstrins.d \tmp1, \tmp0, 39, 32
 movcf2gr \tmp0, $fcc5
 bstrins.d \tmp1, \tmp0, 47, 40
 movcf2gr \tmp0, $fcc6
 bstrins.d \tmp1, \tmp0, 55, 48
 movcf2gr \tmp0, $fcc7
 bstrins.d \tmp1, \tmp0, 63, 56
 stptr.d  \tmp1, \thread, THREAD_FCC
 .endm

 .macro fpu_restore_cc thread tmp0 tmp1
 ldptr.d \tmp0, \thread, THREAD_FCC
 bstrpick.d \tmp1, \tmp0, 7, 0
 movgr2cf $fcc0, \tmp1
 bstrpick.d \tmp1, \tmp0, 15, 8
 movgr2cf $fcc1, \tmp1
 bstrpick.d \tmp1, \tmp0, 23, 16
 movgr2cf $fcc2, \tmp1
 bstrpick.d \tmp1, \tmp0, 31, 24
 movgr2cf $fcc3, \tmp1
 bstrpick.d \tmp1, \tmp0, 39, 32
 movgr2cf $fcc4, \tmp1
 bstrpick.d \tmp1, \tmp0, 47, 40
 movgr2cf $fcc5, \tmp1
 bstrpick.d \tmp1, \tmp0, 55, 48
 movgr2cf $fcc6, \tmp1
 bstrpick.d \tmp1, \tmp0, 63, 56
 movgr2cf $fcc7, \tmp1
 .endm

 .macro fpu_save_double thread tmp
 li.w \tmp, THREAD_FPR0
 PTR_ADD \tmp, \tmp, \thread
 fst.d $f0, \tmp, THREAD_FPR0  - THREAD_FPR0
 fst.d $f1, \tmp, THREAD_FPR1  - THREAD_FPR0
 fst.d $f2, \tmp, THREAD_FPR2  - THREAD_FPR0
 fst.d $f3, \tmp, THREAD_FPR3  - THREAD_FPR0
 fst.d $f4, \tmp, THREAD_FPR4  - THREAD_FPR0
 fst.d $f5, \tmp, THREAD_FPR5  - THREAD_FPR0
 fst.d $f6, \tmp, THREAD_FPR6  - THREAD_FPR0
 fst.d $f7, \tmp, THREAD_FPR7  - THREAD_FPR0
 fst.d $f8, \tmp, THREAD_FPR8  - THREAD_FPR0
 fst.d $f9, \tmp, THREAD_FPR9  - THREAD_FPR0
 fst.d $f10, \tmp, THREAD_FPR10 - THREAD_FPR0
 fst.d $f11, \tmp, THREAD_FPR11 - THREAD_FPR0
 fst.d $f12, \tmp, THREAD_FPR12 - THREAD_FPR0
 fst.d $f13, \tmp, THREAD_FPR13 - THREAD_FPR0
 fst.d $f14, \tmp, THREAD_FPR14 - THREAD_FPR0
 fst.d $f15, \tmp, THREAD_FPR15 - THREAD_FPR0
 fst.d $f16, \tmp, THREAD_FPR16 - THREAD_FPR0
 fst.d $f17, \tmp, THREAD_FPR17 - THREAD_FPR0
 fst.d $f18, \tmp, THREAD_FPR18 - THREAD_FPR0
 fst.d $f19, \tmp, THREAD_FPR19 - THREAD_FPR0
 fst.d $f20, \tmp, THREAD_FPR20 - THREAD_FPR0
 fst.d $f21, \tmp, THREAD_FPR21 - THREAD_FPR0
 fst.d $f22, \tmp, THREAD_FPR22 - THREAD_FPR0
 fst.d $f23, \tmp, THREAD_FPR23 - THREAD_FPR0
 fst.d $f24, \tmp, THREAD_FPR24 - THREAD_FPR0
 fst.d $f25, \tmp, THREAD_FPR25 - THREAD_FPR0
 fst.d $f26, \tmp, THREAD_FPR26 - THREAD_FPR0
 fst.d $f27, \tmp, THREAD_FPR27 - THREAD_FPR0
 fst.d $f28, \tmp, THREAD_FPR28 - THREAD_FPR0
 fst.d $f29, \tmp, THREAD_FPR29 - THREAD_FPR0
 fst.d $f30, \tmp, THREAD_FPR30 - THREAD_FPR0
 fst.d $f31, \tmp, THREAD_FPR31 - THREAD_FPR0
 .endm

 .macro fpu_restore_double thread tmp
 li.w \tmp, THREAD_FPR0
 PTR_ADD \tmp, \tmp, \thread
 fld.d $f0, \tmp, THREAD_FPR0  - THREAD_FPR0
 fld.d $f1, \tmp, THREAD_FPR1  - THREAD_FPR0
 fld.d $f2, \tmp, THREAD_FPR2  - THREAD_FPR0
 fld.d $f3, \tmp, THREAD_FPR3  - THREAD_FPR0
 fld.d $f4, \tmp, THREAD_FPR4  - THREAD_FPR0
 fld.d $f5, \tmp, THREAD_FPR5  - THREAD_FPR0
 fld.d $f6, \tmp, THREAD_FPR6  - THREAD_FPR0
 fld.d $f7, \tmp, THREAD_FPR7  - THREAD_FPR0
 fld.d $f8, \tmp, THREAD_FPR8  - THREAD_FPR0
 fld.d $f9, \tmp, THREAD_FPR9  - THREAD_FPR0
 fld.d $f10, \tmp, THREAD_FPR10 - THREAD_FPR0
 fld.d $f11, \tmp, THREAD_FPR11 - THREAD_FPR0
 fld.d $f12, \tmp, THREAD_FPR12 - THREAD_FPR0
 fld.d $f13, \tmp, THREAD_FPR13 - THREAD_FPR0
 fld.d $f14, \tmp, THREAD_FPR14 - THREAD_FPR0
 fld.d $f15, \tmp, THREAD_FPR15 - THREAD_FPR0
 fld.d $f16, \tmp, THREAD_FPR16 - THREAD_FPR0
 fld.d $f17, \tmp, THREAD_FPR17 - THREAD_FPR0
 fld.d $f18, \tmp, THREAD_FPR18 - THREAD_FPR0
 fld.d $f19, \tmp, THREAD_FPR19 - THREAD_FPR0
 fld.d $f20, \tmp, THREAD_FPR20 - THREAD_FPR0
 fld.d $f21, \tmp, THREAD_FPR21 - THREAD_FPR0
 fld.d $f22, \tmp, THREAD_FPR22 - THREAD_FPR0
 fld.d $f23, \tmp, THREAD_FPR23 - THREAD_FPR0
 fld.d $f24, \tmp, THREAD_FPR24 - THREAD_FPR0
 fld.d $f25, \tmp, THREAD_FPR25 - THREAD_FPR0
 fld.d $f26, \tmp, THREAD_FPR26 - THREAD_FPR0
 fld.d $f27, \tmp, THREAD_FPR27 - THREAD_FPR0
 fld.d $f28, \tmp, THREAD_FPR28 - THREAD_FPR0
 fld.d $f29, \tmp, THREAD_FPR29 - THREAD_FPR0
 fld.d $f30, \tmp, THREAD_FPR30 - THREAD_FPR0
 fld.d $f31, \tmp, THREAD_FPR31 - THREAD_FPR0
 .endm

 .macro lsx_save_data thread tmp
 li.w \tmp, THREAD_FPR0
 PTR_ADD \tmp, \thread, \tmp
 vst $vr0, \tmp, THREAD_FPR0  - THREAD_FPR0
 vst $vr1, \tmp, THREAD_FPR1  - THREAD_FPR0
 vst $vr2, \tmp, THREAD_FPR2  - THREAD_FPR0
 vst $vr3, \tmp, THREAD_FPR3  - THREAD_FPR0
 vst $vr4, \tmp, THREAD_FPR4  - THREAD_FPR0
 vst $vr5, \tmp, THREAD_FPR5  - THREAD_FPR0
 vst $vr6, \tmp, THREAD_FPR6  - THREAD_FPR0
 vst $vr7, \tmp, THREAD_FPR7  - THREAD_FPR0
 vst $vr8, \tmp, THREAD_FPR8  - THREAD_FPR0
 vst $vr9, \tmp, THREAD_FPR9  - THREAD_FPR0
 vst $vr10, \tmp, THREAD_FPR10 - THREAD_FPR0
 vst $vr11, \tmp, THREAD_FPR11 - THREAD_FPR0
 vst $vr12, \tmp, THREAD_FPR12 - THREAD_FPR0
 vst $vr13, \tmp, THREAD_FPR13 - THREAD_FPR0
 vst $vr14, \tmp, THREAD_FPR14 - THREAD_FPR0
 vst $vr15, \tmp, THREAD_FPR15 - THREAD_FPR0
 vst $vr16, \tmp, THREAD_FPR16 - THREAD_FPR0
 vst $vr17, \tmp, THREAD_FPR17 - THREAD_FPR0
 vst $vr18, \tmp, THREAD_FPR18 - THREAD_FPR0
 vst $vr19, \tmp, THREAD_FPR19 - THREAD_FPR0
 vst $vr20, \tmp, THREAD_FPR20 - THREAD_FPR0
 vst $vr21, \tmp, THREAD_FPR21 - THREAD_FPR0
 vst $vr22, \tmp, THREAD_FPR22 - THREAD_FPR0
 vst $vr23, \tmp, THREAD_FPR23 - THREAD_FPR0
 vst $vr24, \tmp, THREAD_FPR24 - THREAD_FPR0
 vst $vr25, \tmp, THREAD_FPR25 - THREAD_FPR0
 vst $vr26, \tmp, THREAD_FPR26 - THREAD_FPR0
 vst $vr27, \tmp, THREAD_FPR27 - THREAD_FPR0
 vst $vr28, \tmp, THREAD_FPR28 - THREAD_FPR0
 vst $vr29, \tmp, THREAD_FPR29 - THREAD_FPR0
 vst $vr30, \tmp, THREAD_FPR30 - THREAD_FPR0
 vst $vr31, \tmp, THREAD_FPR31 - THREAD_FPR0
 .endm

 .macro lsx_restore_data thread tmp
 li.w \tmp, THREAD_FPR0
 PTR_ADD \tmp, \thread, \tmp
 vld $vr0, \tmp, THREAD_FPR0  - THREAD_FPR0
 vld $vr1, \tmp, THREAD_FPR1  - THREAD_FPR0
 vld $vr2, \tmp, THREAD_FPR2  - THREAD_FPR0
 vld $vr3, \tmp, THREAD_FPR3  - THREAD_FPR0
 vld $vr4, \tmp, THREAD_FPR4  - THREAD_FPR0
 vld $vr5, \tmp, THREAD_FPR5  - THREAD_FPR0
 vld $vr6, \tmp, THREAD_FPR6  - THREAD_FPR0
 vld $vr7, \tmp, THREAD_FPR7  - THREAD_FPR0
 vld $vr8, \tmp, THREAD_FPR8  - THREAD_FPR0
 vld $vr9, \tmp, THREAD_FPR9  - THREAD_FPR0
 vld $vr10, \tmp, THREAD_FPR10 - THREAD_FPR0
 vld $vr11, \tmp, THREAD_FPR11 - THREAD_FPR0
 vld $vr12, \tmp, THREAD_FPR12 - THREAD_FPR0
 vld $vr13, \tmp, THREAD_FPR13 - THREAD_FPR0
 vld $vr14, \tmp, THREAD_FPR14 - THREAD_FPR0
 vld $vr15, \tmp, THREAD_FPR15 - THREAD_FPR0
 vld $vr16, \tmp, THREAD_FPR16 - THREAD_FPR0
 vld $vr17, \tmp, THREAD_FPR17 - THREAD_FPR0
 vld $vr18, \tmp, THREAD_FPR18 - THREAD_FPR0
 vld $vr19, \tmp, THREAD_FPR19 - THREAD_FPR0
 vld $vr20, \tmp, THREAD_FPR20 - THREAD_FPR0
 vld $vr21, \tmp, THREAD_FPR21 - THREAD_FPR0
 vld $vr22, \tmp, THREAD_FPR22 - THREAD_FPR0
 vld $vr23, \tmp, THREAD_FPR23 - THREAD_FPR0
 vld $vr24, \tmp, THREAD_FPR24 - THREAD_FPR0
 vld $vr25, \tmp, THREAD_FPR25 - THREAD_FPR0
 vld $vr26, \tmp, THREAD_FPR26 - THREAD_FPR0
 vld $vr27, \tmp, THREAD_FPR27 - THREAD_FPR0
 vld $vr28, \tmp, THREAD_FPR28 - THREAD_FPR0
 vld $vr29, \tmp, THREAD_FPR29 - THREAD_FPR0
 vld $vr30, \tmp, THREAD_FPR30 - THREAD_FPR0
 vld $vr31, \tmp, THREAD_FPR31 - THREAD_FPR0
 .endm

 .macro lsx_save_all thread tmp0 tmp1
 fpu_save_cc  \thread, \tmp0, \tmp1
 fpu_save_csr  \thread, \tmp0
 lsx_save_data  \thread, \tmp0
 .endm

 .macro lsx_restore_all thread tmp0 tmp1
 lsx_restore_data \thread, \tmp0
 fpu_restore_cc  \thread, \tmp0, \tmp1
 fpu_restore_csr  \thread, \tmp0, \tmp1
 .endm

 .macro lsx_save_upper vd base tmp off
 vpickve2gr.d \tmp, \vd, 1
 st.d  \tmp, \base, (\off+8)
 .endm

 .macro lsx_save_all_upper thread base tmp
 li.w  \tmp, THREAD_FPR0
 PTR_ADD  \base, \thread, \tmp
 lsx_save_upper $vr0,  \base, \tmp, (THREAD_FPR0-THREAD_FPR0)
 lsx_save_upper $vr1,  \base, \tmp, (THREAD_FPR1-THREAD_FPR0)
 lsx_save_upper $vr2,  \base, \tmp, (THREAD_FPR2-THREAD_FPR0)
 lsx_save_upper $vr3,  \base, \tmp, (THREAD_FPR3-THREAD_FPR0)
 lsx_save_upper $vr4,  \base, \tmp, (THREAD_FPR4-THREAD_FPR0)
 lsx_save_upper $vr5,  \base, \tmp, (THREAD_FPR5-THREAD_FPR0)
 lsx_save_upper $vr6,  \base, \tmp, (THREAD_FPR6-THREAD_FPR0)
 lsx_save_upper $vr7,  \base, \tmp, (THREAD_FPR7-THREAD_FPR0)
 lsx_save_upper $vr8,  \base, \tmp, (THREAD_FPR8-THREAD_FPR0)
 lsx_save_upper $vr9,  \base, \tmp, (THREAD_FPR9-THREAD_FPR0)
 lsx_save_upper $vr10, \base, \tmp, (THREAD_FPR10-THREAD_FPR0)
 lsx_save_upper $vr11, \base, \tmp, (THREAD_FPR11-THREAD_FPR0)
 lsx_save_upper $vr12, \base, \tmp, (THREAD_FPR12-THREAD_FPR0)
 lsx_save_upper $vr13, \base, \tmp, (THREAD_FPR13-THREAD_FPR0)
 lsx_save_upper $vr14, \base, \tmp, (THREAD_FPR14-THREAD_FPR0)
 lsx_save_upper $vr15, \base, \tmp, (THREAD_FPR15-THREAD_FPR0)
 lsx_save_upper $vr16, \base, \tmp, (THREAD_FPR16-THREAD_FPR0)
 lsx_save_upper $vr17, \base, \tmp, (THREAD_FPR17-THREAD_FPR0)
 lsx_save_upper $vr18, \base, \tmp, (THREAD_FPR18-THREAD_FPR0)
 lsx_save_upper $vr19, \base, \tmp, (THREAD_FPR19-THREAD_FPR0)
 lsx_save_upper $vr20, \base, \tmp, (THREAD_FPR20-THREAD_FPR0)
 lsx_save_upper $vr21, \base, \tmp, (THREAD_FPR21-THREAD_FPR0)
 lsx_save_upper $vr22, \base, \tmp, (THREAD_FPR22-THREAD_FPR0)
 lsx_save_upper $vr23, \base, \tmp, (THREAD_FPR23-THREAD_FPR0)
 lsx_save_upper $vr24, \base, \tmp, (THREAD_FPR24-THREAD_FPR0)
 lsx_save_upper $vr25, \base, \tmp, (THREAD_FPR25-THREAD_FPR0)
 lsx_save_upper $vr26, \base, \tmp, (THREAD_FPR26-THREAD_FPR0)
 lsx_save_upper $vr27, \base, \tmp, (THREAD_FPR27-THREAD_FPR0)
 lsx_save_upper $vr28, \base, \tmp, (THREAD_FPR28-THREAD_FPR0)
 lsx_save_upper $vr29, \base, \tmp, (THREAD_FPR29-THREAD_FPR0)
 lsx_save_upper $vr30, \base, \tmp, (THREAD_FPR30-THREAD_FPR0)
 lsx_save_upper $vr31, \base, \tmp, (THREAD_FPR31-THREAD_FPR0)
 .endm

 .macro lsx_restore_upper vd base tmp off
 ld.d  \tmp, \base, (\off+8)
 vinsgr2vr.d \vd,  \tmp, 1
 .endm

 .macro lsx_restore_all_upper thread base tmp
 li.w    \tmp, THREAD_FPR0
 PTR_ADD    \base, \thread, \tmp
 lsx_restore_upper $vr0,  \base, \tmp, (THREAD_FPR0-THREAD_FPR0)
 lsx_restore_upper $vr1,  \base, \tmp, (THREAD_FPR1-THREAD_FPR0)
 lsx_restore_upper $vr2,  \base, \tmp, (THREAD_FPR2-THREAD_FPR0)
 lsx_restore_upper $vr3,  \base, \tmp, (THREAD_FPR3-THREAD_FPR0)
 lsx_restore_upper $vr4,  \base, \tmp, (THREAD_FPR4-THREAD_FPR0)
 lsx_restore_upper $vr5,  \base, \tmp, (THREAD_FPR5-THREAD_FPR0)
 lsx_restore_upper $vr6,  \base, \tmp, (THREAD_FPR6-THREAD_FPR0)
 lsx_restore_upper $vr7,  \base, \tmp, (THREAD_FPR7-THREAD_FPR0)
 lsx_restore_upper $vr8,  \base, \tmp, (THREAD_FPR8-THREAD_FPR0)
 lsx_restore_upper $vr9,  \base, \tmp, (THREAD_FPR9-THREAD_FPR0)
 lsx_restore_upper $vr10, \base, \tmp, (THREAD_FPR10-THREAD_FPR0)
 lsx_restore_upper $vr11, \base, \tmp, (THREAD_FPR11-THREAD_FPR0)
 lsx_restore_upper $vr12, \base, \tmp, (THREAD_FPR12-THREAD_FPR0)
 lsx_restore_upper $vr13, \base, \tmp, (THREAD_FPR13-THREAD_FPR0)
 lsx_restore_upper $vr14, \base, \tmp, (THREAD_FPR14-THREAD_FPR0)
 lsx_restore_upper $vr15, \base, \tmp, (THREAD_FPR15-THREAD_FPR0)
 lsx_restore_upper $vr16, \base, \tmp, (THREAD_FPR16-THREAD_FPR0)
 lsx_restore_upper $vr17, \base, \tmp, (THREAD_FPR17-THREAD_FPR0)
 lsx_restore_upper $vr18, \base, \tmp, (THREAD_FPR18-THREAD_FPR0)
 lsx_restore_upper $vr19, \base, \tmp, (THREAD_FPR19-THREAD_FPR0)
 lsx_restore_upper $vr20, \base, \tmp, (THREAD_FPR20-THREAD_FPR0)
 lsx_restore_upper $vr21, \base, \tmp, (THREAD_FPR21-THREAD_FPR0)
 lsx_restore_upper $vr22, \base, \tmp, (THREAD_FPR22-THREAD_FPR0)
 lsx_restore_upper $vr23, \base, \tmp, (THREAD_FPR23-THREAD_FPR0)
 lsx_restore_upper $vr24, \base, \tmp, (THREAD_FPR24-THREAD_FPR0)
 lsx_restore_upper $vr25, \base, \tmp, (THREAD_FPR25-THREAD_FPR0)
 lsx_restore_upper $vr26, \base, \tmp, (THREAD_FPR26-THREAD_FPR0)
 lsx_restore_upper $vr27, \base, \tmp, (THREAD_FPR27-THREAD_FPR0)
 lsx_restore_upper $vr28, \base, \tmp, (THREAD_FPR28-THREAD_FPR0)
 lsx_restore_upper $vr29, \base, \tmp, (THREAD_FPR29-THREAD_FPR0)
 lsx_restore_upper $vr30, \base, \tmp, (THREAD_FPR30-THREAD_FPR0)
 lsx_restore_upper $vr31, \base, \tmp, (THREAD_FPR31-THREAD_FPR0)
 .endm

 .macro lsx_init_upper vd tmp
 vinsgr2vr.d \vd, \tmp, 1
 .endm

 .macro lsx_init_all_upper tmp
 not  \tmp, zero
 lsx_init_upper $vr0 \tmp
 lsx_init_upper $vr1 \tmp
 lsx_init_upper $vr2 \tmp
 lsx_init_upper $vr3 \tmp
 lsx_init_upper $vr4 \tmp
 lsx_init_upper $vr5 \tmp
 lsx_init_upper $vr6 \tmp
 lsx_init_upper $vr7 \tmp
 lsx_init_upper $vr8 \tmp
 lsx_init_upper $vr9 \tmp
 lsx_init_upper $vr10 \tmp
 lsx_init_upper $vr11 \tmp
 lsx_init_upper $vr12 \tmp
 lsx_init_upper $vr13 \tmp
 lsx_init_upper $vr14 \tmp
 lsx_init_upper $vr15 \tmp
 lsx_init_upper $vr16 \tmp
 lsx_init_upper $vr17 \tmp
 lsx_init_upper $vr18 \tmp
 lsx_init_upper $vr19 \tmp
 lsx_init_upper $vr20 \tmp
 lsx_init_upper $vr21 \tmp
 lsx_init_upper $vr22 \tmp
 lsx_init_upper $vr23 \tmp
 lsx_init_upper $vr24 \tmp
 lsx_init_upper $vr25 \tmp
 lsx_init_upper $vr26 \tmp
 lsx_init_upper $vr27 \tmp
 lsx_init_upper $vr28 \tmp
 lsx_init_upper $vr29 \tmp
 lsx_init_upper $vr30 \tmp
 lsx_init_upper $vr31 \tmp
 .endm

 .macro lasx_save_data thread tmp
 li.w \tmp, THREAD_FPR0
 PTR_ADD \tmp, \thread, \tmp
 xvst $xr0, \tmp, THREAD_FPR0  - THREAD_FPR0
 xvst $xr1, \tmp, THREAD_FPR1  - THREAD_FPR0
 xvst $xr2, \tmp, THREAD_FPR2  - THREAD_FPR0
 xvst $xr3, \tmp, THREAD_FPR3  - THREAD_FPR0
 xvst $xr4, \tmp, THREAD_FPR4  - THREAD_FPR0
 xvst $xr5, \tmp, THREAD_FPR5  - THREAD_FPR0
 xvst $xr6, \tmp, THREAD_FPR6  - THREAD_FPR0
 xvst $xr7, \tmp, THREAD_FPR7  - THREAD_FPR0
 xvst $xr8, \tmp, THREAD_FPR8  - THREAD_FPR0
 xvst $xr9, \tmp, THREAD_FPR9  - THREAD_FPR0
 xvst $xr10, \tmp, THREAD_FPR10 - THREAD_FPR0
 xvst $xr11, \tmp, THREAD_FPR11 - THREAD_FPR0
 xvst $xr12, \tmp, THREAD_FPR12 - THREAD_FPR0
 xvst $xr13, \tmp, THREAD_FPR13 - THREAD_FPR0
 xvst $xr14, \tmp, THREAD_FPR14 - THREAD_FPR0
 xvst $xr15, \tmp, THREAD_FPR15 - THREAD_FPR0
 xvst $xr16, \tmp, THREAD_FPR16 - THREAD_FPR0
 xvst $xr17, \tmp, THREAD_FPR17 - THREAD_FPR0
 xvst $xr18, \tmp, THREAD_FPR18 - THREAD_FPR0
 xvst $xr19, \tmp, THREAD_FPR19 - THREAD_FPR0
 xvst $xr20, \tmp, THREAD_FPR20 - THREAD_FPR0
 xvst $xr21, \tmp, THREAD_FPR21 - THREAD_FPR0
 xvst $xr22, \tmp, THREAD_FPR22 - THREAD_FPR0
 xvst $xr23, \tmp, THREAD_FPR23 - THREAD_FPR0
 xvst $xr24, \tmp, THREAD_FPR24 - THREAD_FPR0
 xvst $xr25, \tmp, THREAD_FPR25 - THREAD_FPR0
 xvst $xr26, \tmp, THREAD_FPR26 - THREAD_FPR0
 xvst $xr27, \tmp, THREAD_FPR27 - THREAD_FPR0
 xvst $xr28, \tmp, THREAD_FPR28 - THREAD_FPR0
 xvst $xr29, \tmp, THREAD_FPR29 - THREAD_FPR0
 xvst $xr30, \tmp, THREAD_FPR30 - THREAD_FPR0
 xvst $xr31, \tmp, THREAD_FPR31 - THREAD_FPR0
 .endm

 .macro lasx_restore_data thread tmp
 li.w \tmp, THREAD_FPR0
 PTR_ADD \tmp, \thread, \tmp
 xvld $xr0, \tmp, THREAD_FPR0  - THREAD_FPR0
 xvld $xr1, \tmp, THREAD_FPR1  - THREAD_FPR0
 xvld $xr2, \tmp, THREAD_FPR2  - THREAD_FPR0
 xvld $xr3, \tmp, THREAD_FPR3  - THREAD_FPR0
 xvld $xr4, \tmp, THREAD_FPR4  - THREAD_FPR0
 xvld $xr5, \tmp, THREAD_FPR5  - THREAD_FPR0
 xvld $xr6, \tmp, THREAD_FPR6  - THREAD_FPR0
 xvld $xr7, \tmp, THREAD_FPR7  - THREAD_FPR0
 xvld $xr8, \tmp, THREAD_FPR8  - THREAD_FPR0
 xvld $xr9, \tmp, THREAD_FPR9  - THREAD_FPR0
 xvld $xr10, \tmp, THREAD_FPR10 - THREAD_FPR0
 xvld $xr11, \tmp, THREAD_FPR11 - THREAD_FPR0
 xvld $xr12, \tmp, THREAD_FPR12 - THREAD_FPR0
 xvld $xr13, \tmp, THREAD_FPR13 - THREAD_FPR0
 xvld $xr14, \tmp, THREAD_FPR14 - THREAD_FPR0
 xvld $xr15, \tmp, THREAD_FPR15 - THREAD_FPR0
 xvld $xr16, \tmp, THREAD_FPR16 - THREAD_FPR0
 xvld $xr17, \tmp, THREAD_FPR17 - THREAD_FPR0
 xvld $xr18, \tmp, THREAD_FPR18 - THREAD_FPR0
 xvld $xr19, \tmp, THREAD_FPR19 - THREAD_FPR0
 xvld $xr20, \tmp, THREAD_FPR20 - THREAD_FPR0
 xvld $xr21, \tmp, THREAD_FPR21 - THREAD_FPR0
 xvld $xr22, \tmp, THREAD_FPR22 - THREAD_FPR0
 xvld $xr23, \tmp, THREAD_FPR23 - THREAD_FPR0
 xvld $xr24, \tmp, THREAD_FPR24 - THREAD_FPR0
 xvld $xr25, \tmp, THREAD_FPR25 - THREAD_FPR0
 xvld $xr26, \tmp, THREAD_FPR26 - THREAD_FPR0
 xvld $xr27, \tmp, THREAD_FPR27 - THREAD_FPR0
 xvld $xr28, \tmp, THREAD_FPR28 - THREAD_FPR0
 xvld $xr29, \tmp, THREAD_FPR29 - THREAD_FPR0
 xvld $xr30, \tmp, THREAD_FPR30 - THREAD_FPR0
 xvld $xr31, \tmp, THREAD_FPR31 - THREAD_FPR0
 .endm

 .macro lasx_save_all thread tmp0 tmp1
 fpu_save_cc  \thread, \tmp0, \tmp1
 fpu_save_csr  \thread, \tmp0
 lasx_save_data  \thread, \tmp0
 .endm

 .macro lasx_restore_all thread tmp0 tmp1
 lasx_restore_data \thread, \tmp0
 fpu_restore_cc  \thread, \tmp0, \tmp1
 fpu_restore_csr  \thread, \tmp0, \tmp1
 .endm

 .macro lasx_save_upper xd base tmp off
 /* Nothing */
 .endm

 .macro lasx_save_all_upper thread base tmp
 /* Nothing */
 .endm

 .macro lasx_restore_upper xd base tmp0 tmp1 off
 vld  \tmp0, \base, (\off+16)
 xvpermi.q  \xd,   \tmp1, 0x2
 .endm

 .macro lasx_restore_all_upper thread base tmp
 li.w  \tmp, THREAD_FPR0
 PTR_ADD  \base, \thread, \tmp
 /* Save $vr31 ($xr31 lower bits) with xvpickve2gr */
 xvpickve2gr.d $r17, $xr31, 0
 xvpickve2gr.d $r18, $xr31, 1
 lasx_restore_upper $xr0, \base, $vr31, $xr31, (THREAD_FPR0-THREAD_FPR0)
 lasx_restore_upper $xr1, \base, $vr31, $xr31, (THREAD_FPR1-THREAD_FPR0)
 lasx_restore_upper $xr2, \base, $vr31, $xr31, (THREAD_FPR2-THREAD_FPR0)
 lasx_restore_upper $xr3, \base, $vr31, $xr31, (THREAD_FPR3-THREAD_FPR0)
 lasx_restore_upper $xr4, \base, $vr31, $xr31, (THREAD_FPR4-THREAD_FPR0)
 lasx_restore_upper $xr5, \base, $vr31, $xr31, (THREAD_FPR5-THREAD_FPR0)
 lasx_restore_upper $xr6, \base, $vr31, $xr31, (THREAD_FPR6-THREAD_FPR0)
 lasx_restore_upper $xr7, \base, $vr31, $xr31, (THREAD_FPR7-THREAD_FPR0)
 lasx_restore_upper $xr8, \base, $vr31, $xr31, (THREAD_FPR8-THREAD_FPR0)
 lasx_restore_upper $xr9, \base, $vr31, $xr31, (THREAD_FPR9-THREAD_FPR0)
 lasx_restore_upper $xr10, \base, $vr31, $xr31, (THREAD_FPR10-THREAD_FPR0)
 lasx_restore_upper $xr11, \base, $vr31, $xr31, (THREAD_FPR11-THREAD_FPR0)
 lasx_restore_upper $xr12, \base, $vr31, $xr31, (THREAD_FPR12-THREAD_FPR0)
 lasx_restore_upper $xr13, \base, $vr31, $xr31, (THREAD_FPR13-THREAD_FPR0)
 lasx_restore_upper $xr14, \base, $vr31, $xr31, (THREAD_FPR14-THREAD_FPR0)
 lasx_restore_upper $xr15, \base, $vr31, $xr31, (THREAD_FPR15-THREAD_FPR0)
 lasx_restore_upper $xr16, \base, $vr31, $xr31, (THREAD_FPR16-THREAD_FPR0)
 lasx_restore_upper $xr17, \base, $vr31, $xr31, (THREAD_FPR17-THREAD_FPR0)
 lasx_restore_upper $xr18, \base, $vr31, $xr31, (THREAD_FPR18-THREAD_FPR0)
 lasx_restore_upper $xr19, \base, $vr31, $xr31, (THREAD_FPR19-THREAD_FPR0)
 lasx_restore_upper $xr20, \base, $vr31, $xr31, (THREAD_FPR20-THREAD_FPR0)
 lasx_restore_upper $xr21, \base, $vr31, $xr31, (THREAD_FPR21-THREAD_FPR0)
 lasx_restore_upper $xr22, \base, $vr31, $xr31, (THREAD_FPR22-THREAD_FPR0)
 lasx_restore_upper $xr23, \base, $vr31, $xr31, (THREAD_FPR23-THREAD_FPR0)
 lasx_restore_upper $xr24, \base, $vr31, $xr31, (THREAD_FPR24-THREAD_FPR0)
 lasx_restore_upper $xr25, \base, $vr31, $xr31, (THREAD_FPR25-THREAD_FPR0)
 lasx_restore_upper $xr26, \base, $vr31, $xr31, (THREAD_FPR26-THREAD_FPR0)
 lasx_restore_upper $xr27, \base, $vr31, $xr31, (THREAD_FPR27-THREAD_FPR0)
 lasx_restore_upper $xr28, \base, $vr31, $xr31, (THREAD_FPR28-THREAD_FPR0)
 lasx_restore_upper $xr29, \base, $vr31, $xr31, (THREAD_FPR29-THREAD_FPR0)
 lasx_restore_upper $xr30, \base, $vr31, $xr31, (THREAD_FPR30-THREAD_FPR0)
 lasx_restore_upper $xr31, \base, $vr31, $xr31, (THREAD_FPR31-THREAD_FPR0)
 /* Restore $vr31 ($xr31 lower bits) with xvinsgr2vr */
 xvinsgr2vr.d $xr31, $r17, 0
 xvinsgr2vr.d $xr31, $r18, 1
 .endm

 .macro lasx_init_upper xd tmp
 xvinsgr2vr.d \xd, \tmp, 2
 xvinsgr2vr.d \xd, \tmp, 3
 .endm

 .macro lasx_init_all_upper tmp
 not  \tmp, zero
 lasx_init_upper $xr0 \tmp
 lasx_init_upper $xr1 \tmp
 lasx_init_upper $xr2 \tmp
 lasx_init_upper $xr3 \tmp
 lasx_init_upper $xr4 \tmp
 lasx_init_upper $xr5 \tmp
 lasx_init_upper $xr6 \tmp
 lasx_init_upper $xr7 \tmp
 lasx_init_upper $xr8 \tmp
 lasx_init_upper $xr9 \tmp
 lasx_init_upper $xr10 \tmp
 lasx_init_upper $xr11 \tmp
 lasx_init_upper $xr12 \tmp
 lasx_init_upper $xr13 \tmp
 lasx_init_upper $xr14 \tmp
 lasx_init_upper $xr15 \tmp
 lasx_init_upper $xr16 \tmp
 lasx_init_upper $xr17 \tmp
 lasx_init_upper $xr18 \tmp
 lasx_init_upper $xr19 \tmp
 lasx_init_upper $xr20 \tmp
 lasx_init_upper $xr21 \tmp
 lasx_init_upper $xr22 \tmp
 lasx_init_upper $xr23 \tmp
 lasx_init_upper $xr24 \tmp
 lasx_init_upper $xr25 \tmp
 lasx_init_upper $xr26 \tmp
 lasx_init_upper $xr27 \tmp
 lasx_init_upper $xr28 \tmp
 lasx_init_upper $xr29 \tmp
 lasx_init_upper $xr30 \tmp
 lasx_init_upper $xr31 \tmp
 .endm

.macro not dst src
 nor \dst, \src, zero
.endm

.macro la_abs reg, sym
#ifndef CONFIG_RELOCATABLE
 la.abs \reg, \sym
#else
 766:
 lu12i.w \reg, 0
 ori \reg, \reg, 0
 lu32i.d \reg, 0
 lu52i.d \reg, \reg, 0
 .pushsection ".la_abs""aw", %progbits
 .p2align 3
 .dword 766b
 .dword \sym
 .popsection
#endif
.endm

#endif /* _ASM_ASMMACRO_H */

Messung V0.5
C=99 H=-14 G=70

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.