162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#ifndef _ASM_ASMMACRO_H 662306a36Sopenharmony_ci#define _ASM_ASMMACRO_H 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <asm/asm-offsets.h> 962306a36Sopenharmony_ci#include <asm/regdef.h> 1062306a36Sopenharmony_ci#include <asm/fpregdef.h> 1162306a36Sopenharmony_ci#include <asm/loongarch.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci .macro cpu_save_nonscratch thread 1462306a36Sopenharmony_ci stptr.d s0, \thread, THREAD_REG23 1562306a36Sopenharmony_ci stptr.d s1, \thread, THREAD_REG24 1662306a36Sopenharmony_ci stptr.d s2, \thread, THREAD_REG25 1762306a36Sopenharmony_ci stptr.d s3, \thread, THREAD_REG26 1862306a36Sopenharmony_ci stptr.d s4, \thread, THREAD_REG27 1962306a36Sopenharmony_ci stptr.d s5, \thread, THREAD_REG28 2062306a36Sopenharmony_ci stptr.d s6, \thread, THREAD_REG29 2162306a36Sopenharmony_ci stptr.d s7, \thread, THREAD_REG30 2262306a36Sopenharmony_ci stptr.d s8, \thread, THREAD_REG31 2362306a36Sopenharmony_ci stptr.d sp, \thread, THREAD_REG03 2462306a36Sopenharmony_ci stptr.d fp, \thread, THREAD_REG22 2562306a36Sopenharmony_ci .endm 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci .macro cpu_restore_nonscratch thread 2862306a36Sopenharmony_ci ldptr.d s0, \thread, THREAD_REG23 2962306a36Sopenharmony_ci ldptr.d s1, \thread, THREAD_REG24 3062306a36Sopenharmony_ci ldptr.d s2, \thread, THREAD_REG25 3162306a36Sopenharmony_ci ldptr.d s3, \thread, THREAD_REG26 3262306a36Sopenharmony_ci ldptr.d s4, \thread, THREAD_REG27 3362306a36Sopenharmony_ci ldptr.d s5, \thread, THREAD_REG28 3462306a36Sopenharmony_ci ldptr.d s6, \thread, THREAD_REG29 3562306a36Sopenharmony_ci ldptr.d s7, \thread, THREAD_REG30 3662306a36Sopenharmony_ci ldptr.d s8, \thread, THREAD_REG31 3762306a36Sopenharmony_ci ldptr.d ra, \thread, THREAD_REG01 3862306a36Sopenharmony_ci ldptr.d sp, \thread, THREAD_REG03 3962306a36Sopenharmony_ci ldptr.d fp, \thread, THREAD_REG22 4062306a36Sopenharmony_ci .endm 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci .macro fpu_save_csr thread tmp 4362306a36Sopenharmony_ci movfcsr2gr \tmp, fcsr0 4462306a36Sopenharmony_ci stptr.w \tmp, \thread, THREAD_FCSR 4562306a36Sopenharmony_ci#ifdef CONFIG_CPU_HAS_LBT 4662306a36Sopenharmony_ci /* TM bit is always 0 if LBT not supported */ 4762306a36Sopenharmony_ci andi \tmp, \tmp, FPU_CSR_TM 4862306a36Sopenharmony_ci beqz \tmp, 1f 4962306a36Sopenharmony_ci /* Save FTOP */ 5062306a36Sopenharmony_ci x86mftop \tmp 5162306a36Sopenharmony_ci stptr.w \tmp, \thread, THREAD_FTOP 5262306a36Sopenharmony_ci /* Turn off TM to ensure the order of FPR in memory independent of TM */ 5362306a36Sopenharmony_ci x86clrtm 5462306a36Sopenharmony_ci1: 5562306a36Sopenharmony_ci#endif 5662306a36Sopenharmony_ci .endm 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci .macro fpu_restore_csr thread tmp0 tmp1 5962306a36Sopenharmony_ci ldptr.w \tmp0, \thread, THREAD_FCSR 6062306a36Sopenharmony_ci movgr2fcsr fcsr0, \tmp0 6162306a36Sopenharmony_ci#ifdef CONFIG_CPU_HAS_LBT 6262306a36Sopenharmony_ci /* TM bit is always 0 if LBT not supported */ 6362306a36Sopenharmony_ci andi \tmp0, \tmp0, FPU_CSR_TM 6462306a36Sopenharmony_ci beqz \tmp0, 2f 6562306a36Sopenharmony_ci /* Restore FTOP */ 6662306a36Sopenharmony_ci ldptr.w \tmp0, \thread, THREAD_FTOP 6762306a36Sopenharmony_ci andi \tmp0, \tmp0, 0x7 6862306a36Sopenharmony_ci la.pcrel \tmp1, 1f 6962306a36Sopenharmony_ci alsl.d \tmp1, \tmp0, \tmp1, 3 7062306a36Sopenharmony_ci jr \tmp1 7162306a36Sopenharmony_ci1: 7262306a36Sopenharmony_ci x86mttop 0 7362306a36Sopenharmony_ci b 2f 7462306a36Sopenharmony_ci x86mttop 1 7562306a36Sopenharmony_ci b 2f 7662306a36Sopenharmony_ci x86mttop 2 7762306a36Sopenharmony_ci b 2f 7862306a36Sopenharmony_ci x86mttop 3 7962306a36Sopenharmony_ci b 2f 8062306a36Sopenharmony_ci x86mttop 4 8162306a36Sopenharmony_ci b 2f 8262306a36Sopenharmony_ci x86mttop 5 8362306a36Sopenharmony_ci b 2f 8462306a36Sopenharmony_ci x86mttop 6 8562306a36Sopenharmony_ci b 2f 8662306a36Sopenharmony_ci x86mttop 7 8762306a36Sopenharmony_ci2: 8862306a36Sopenharmony_ci#endif 8962306a36Sopenharmony_ci .endm 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci .macro fpu_save_cc thread tmp0 tmp1 9262306a36Sopenharmony_ci movcf2gr \tmp0, $fcc0 9362306a36Sopenharmony_ci move \tmp1, \tmp0 9462306a36Sopenharmony_ci movcf2gr \tmp0, $fcc1 9562306a36Sopenharmony_ci bstrins.d \tmp1, \tmp0, 15, 8 9662306a36Sopenharmony_ci movcf2gr \tmp0, $fcc2 9762306a36Sopenharmony_ci bstrins.d \tmp1, \tmp0, 23, 16 9862306a36Sopenharmony_ci movcf2gr \tmp0, $fcc3 9962306a36Sopenharmony_ci bstrins.d \tmp1, \tmp0, 31, 24 10062306a36Sopenharmony_ci movcf2gr \tmp0, $fcc4 10162306a36Sopenharmony_ci bstrins.d \tmp1, \tmp0, 39, 32 10262306a36Sopenharmony_ci movcf2gr \tmp0, $fcc5 10362306a36Sopenharmony_ci bstrins.d \tmp1, \tmp0, 47, 40 10462306a36Sopenharmony_ci movcf2gr \tmp0, $fcc6 10562306a36Sopenharmony_ci bstrins.d \tmp1, \tmp0, 55, 48 10662306a36Sopenharmony_ci movcf2gr \tmp0, $fcc7 10762306a36Sopenharmony_ci bstrins.d \tmp1, \tmp0, 63, 56 10862306a36Sopenharmony_ci stptr.d \tmp1, \thread, THREAD_FCC 10962306a36Sopenharmony_ci .endm 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci .macro fpu_restore_cc thread tmp0 tmp1 11262306a36Sopenharmony_ci ldptr.d \tmp0, \thread, THREAD_FCC 11362306a36Sopenharmony_ci bstrpick.d \tmp1, \tmp0, 7, 0 11462306a36Sopenharmony_ci movgr2cf $fcc0, \tmp1 11562306a36Sopenharmony_ci bstrpick.d \tmp1, \tmp0, 15, 8 11662306a36Sopenharmony_ci movgr2cf $fcc1, \tmp1 11762306a36Sopenharmony_ci bstrpick.d \tmp1, \tmp0, 23, 16 11862306a36Sopenharmony_ci movgr2cf $fcc2, \tmp1 11962306a36Sopenharmony_ci bstrpick.d \tmp1, \tmp0, 31, 24 12062306a36Sopenharmony_ci movgr2cf $fcc3, \tmp1 12162306a36Sopenharmony_ci bstrpick.d \tmp1, \tmp0, 39, 32 12262306a36Sopenharmony_ci movgr2cf $fcc4, \tmp1 12362306a36Sopenharmony_ci bstrpick.d \tmp1, \tmp0, 47, 40 12462306a36Sopenharmony_ci movgr2cf $fcc5, \tmp1 12562306a36Sopenharmony_ci bstrpick.d \tmp1, \tmp0, 55, 48 12662306a36Sopenharmony_ci movgr2cf $fcc6, \tmp1 12762306a36Sopenharmony_ci bstrpick.d \tmp1, \tmp0, 63, 56 12862306a36Sopenharmony_ci movgr2cf $fcc7, \tmp1 12962306a36Sopenharmony_ci .endm 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci .macro fpu_save_double thread tmp 13262306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 13362306a36Sopenharmony_ci PTR_ADD \tmp, \tmp, \thread 13462306a36Sopenharmony_ci fst.d $f0, \tmp, THREAD_FPR0 - THREAD_FPR0 13562306a36Sopenharmony_ci fst.d $f1, \tmp, THREAD_FPR1 - THREAD_FPR0 13662306a36Sopenharmony_ci fst.d $f2, \tmp, THREAD_FPR2 - THREAD_FPR0 13762306a36Sopenharmony_ci fst.d $f3, \tmp, THREAD_FPR3 - THREAD_FPR0 13862306a36Sopenharmony_ci fst.d $f4, \tmp, THREAD_FPR4 - THREAD_FPR0 13962306a36Sopenharmony_ci fst.d $f5, \tmp, THREAD_FPR5 - THREAD_FPR0 14062306a36Sopenharmony_ci fst.d $f6, \tmp, THREAD_FPR6 - THREAD_FPR0 14162306a36Sopenharmony_ci fst.d $f7, \tmp, THREAD_FPR7 - THREAD_FPR0 14262306a36Sopenharmony_ci fst.d $f8, \tmp, THREAD_FPR8 - THREAD_FPR0 14362306a36Sopenharmony_ci fst.d $f9, \tmp, THREAD_FPR9 - THREAD_FPR0 14462306a36Sopenharmony_ci fst.d $f10, \tmp, THREAD_FPR10 - THREAD_FPR0 14562306a36Sopenharmony_ci fst.d $f11, \tmp, THREAD_FPR11 - THREAD_FPR0 14662306a36Sopenharmony_ci fst.d $f12, \tmp, THREAD_FPR12 - THREAD_FPR0 14762306a36Sopenharmony_ci fst.d $f13, \tmp, THREAD_FPR13 - THREAD_FPR0 14862306a36Sopenharmony_ci fst.d $f14, \tmp, THREAD_FPR14 - THREAD_FPR0 14962306a36Sopenharmony_ci fst.d $f15, \tmp, THREAD_FPR15 - THREAD_FPR0 15062306a36Sopenharmony_ci fst.d $f16, \tmp, THREAD_FPR16 - THREAD_FPR0 15162306a36Sopenharmony_ci fst.d $f17, \tmp, THREAD_FPR17 - THREAD_FPR0 15262306a36Sopenharmony_ci fst.d $f18, \tmp, THREAD_FPR18 - THREAD_FPR0 15362306a36Sopenharmony_ci fst.d $f19, \tmp, THREAD_FPR19 - THREAD_FPR0 15462306a36Sopenharmony_ci fst.d $f20, \tmp, THREAD_FPR20 - THREAD_FPR0 15562306a36Sopenharmony_ci fst.d $f21, \tmp, THREAD_FPR21 - THREAD_FPR0 15662306a36Sopenharmony_ci fst.d $f22, \tmp, THREAD_FPR22 - THREAD_FPR0 15762306a36Sopenharmony_ci fst.d $f23, \tmp, THREAD_FPR23 - THREAD_FPR0 15862306a36Sopenharmony_ci fst.d $f24, \tmp, THREAD_FPR24 - THREAD_FPR0 15962306a36Sopenharmony_ci fst.d $f25, \tmp, THREAD_FPR25 - THREAD_FPR0 16062306a36Sopenharmony_ci fst.d $f26, \tmp, THREAD_FPR26 - THREAD_FPR0 16162306a36Sopenharmony_ci fst.d $f27, \tmp, THREAD_FPR27 - THREAD_FPR0 16262306a36Sopenharmony_ci fst.d $f28, \tmp, THREAD_FPR28 - THREAD_FPR0 16362306a36Sopenharmony_ci fst.d $f29, \tmp, THREAD_FPR29 - THREAD_FPR0 16462306a36Sopenharmony_ci fst.d $f30, \tmp, THREAD_FPR30 - THREAD_FPR0 16562306a36Sopenharmony_ci fst.d $f31, \tmp, THREAD_FPR31 - THREAD_FPR0 16662306a36Sopenharmony_ci .endm 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci .macro fpu_restore_double thread tmp 16962306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 17062306a36Sopenharmony_ci PTR_ADD \tmp, \tmp, \thread 17162306a36Sopenharmony_ci fld.d $f0, \tmp, THREAD_FPR0 - THREAD_FPR0 17262306a36Sopenharmony_ci fld.d $f1, \tmp, THREAD_FPR1 - THREAD_FPR0 17362306a36Sopenharmony_ci fld.d $f2, \tmp, THREAD_FPR2 - THREAD_FPR0 17462306a36Sopenharmony_ci fld.d $f3, \tmp, THREAD_FPR3 - THREAD_FPR0 17562306a36Sopenharmony_ci fld.d $f4, \tmp, THREAD_FPR4 - THREAD_FPR0 17662306a36Sopenharmony_ci fld.d $f5, \tmp, THREAD_FPR5 - THREAD_FPR0 17762306a36Sopenharmony_ci fld.d $f6, \tmp, THREAD_FPR6 - THREAD_FPR0 17862306a36Sopenharmony_ci fld.d $f7, \tmp, THREAD_FPR7 - THREAD_FPR0 17962306a36Sopenharmony_ci fld.d $f8, \tmp, THREAD_FPR8 - THREAD_FPR0 18062306a36Sopenharmony_ci fld.d $f9, \tmp, THREAD_FPR9 - THREAD_FPR0 18162306a36Sopenharmony_ci fld.d $f10, \tmp, THREAD_FPR10 - THREAD_FPR0 18262306a36Sopenharmony_ci fld.d $f11, \tmp, THREAD_FPR11 - THREAD_FPR0 18362306a36Sopenharmony_ci fld.d $f12, \tmp, THREAD_FPR12 - THREAD_FPR0 18462306a36Sopenharmony_ci fld.d $f13, \tmp, THREAD_FPR13 - THREAD_FPR0 18562306a36Sopenharmony_ci fld.d $f14, \tmp, THREAD_FPR14 - THREAD_FPR0 18662306a36Sopenharmony_ci fld.d $f15, \tmp, THREAD_FPR15 - THREAD_FPR0 18762306a36Sopenharmony_ci fld.d $f16, \tmp, THREAD_FPR16 - THREAD_FPR0 18862306a36Sopenharmony_ci fld.d $f17, \tmp, THREAD_FPR17 - THREAD_FPR0 18962306a36Sopenharmony_ci fld.d $f18, \tmp, THREAD_FPR18 - THREAD_FPR0 19062306a36Sopenharmony_ci fld.d $f19, \tmp, THREAD_FPR19 - THREAD_FPR0 19162306a36Sopenharmony_ci fld.d $f20, \tmp, THREAD_FPR20 - THREAD_FPR0 19262306a36Sopenharmony_ci fld.d $f21, \tmp, THREAD_FPR21 - THREAD_FPR0 19362306a36Sopenharmony_ci fld.d $f22, \tmp, THREAD_FPR22 - THREAD_FPR0 19462306a36Sopenharmony_ci fld.d $f23, \tmp, THREAD_FPR23 - THREAD_FPR0 19562306a36Sopenharmony_ci fld.d $f24, \tmp, THREAD_FPR24 - THREAD_FPR0 19662306a36Sopenharmony_ci fld.d $f25, \tmp, THREAD_FPR25 - THREAD_FPR0 19762306a36Sopenharmony_ci fld.d $f26, \tmp, THREAD_FPR26 - THREAD_FPR0 19862306a36Sopenharmony_ci fld.d $f27, \tmp, THREAD_FPR27 - THREAD_FPR0 19962306a36Sopenharmony_ci fld.d $f28, \tmp, THREAD_FPR28 - THREAD_FPR0 20062306a36Sopenharmony_ci fld.d $f29, \tmp, THREAD_FPR29 - THREAD_FPR0 20162306a36Sopenharmony_ci fld.d $f30, \tmp, THREAD_FPR30 - THREAD_FPR0 20262306a36Sopenharmony_ci fld.d $f31, \tmp, THREAD_FPR31 - THREAD_FPR0 20362306a36Sopenharmony_ci .endm 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci .macro lsx_save_data thread tmp 20662306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 20762306a36Sopenharmony_ci PTR_ADD \tmp, \thread, \tmp 20862306a36Sopenharmony_ci vst $vr0, \tmp, THREAD_FPR0 - THREAD_FPR0 20962306a36Sopenharmony_ci vst $vr1, \tmp, THREAD_FPR1 - THREAD_FPR0 21062306a36Sopenharmony_ci vst $vr2, \tmp, THREAD_FPR2 - THREAD_FPR0 21162306a36Sopenharmony_ci vst $vr3, \tmp, THREAD_FPR3 - THREAD_FPR0 21262306a36Sopenharmony_ci vst $vr4, \tmp, THREAD_FPR4 - THREAD_FPR0 21362306a36Sopenharmony_ci vst $vr5, \tmp, THREAD_FPR5 - THREAD_FPR0 21462306a36Sopenharmony_ci vst $vr6, \tmp, THREAD_FPR6 - THREAD_FPR0 21562306a36Sopenharmony_ci vst $vr7, \tmp, THREAD_FPR7 - THREAD_FPR0 21662306a36Sopenharmony_ci vst $vr8, \tmp, THREAD_FPR8 - THREAD_FPR0 21762306a36Sopenharmony_ci vst $vr9, \tmp, THREAD_FPR9 - THREAD_FPR0 21862306a36Sopenharmony_ci vst $vr10, \tmp, THREAD_FPR10 - THREAD_FPR0 21962306a36Sopenharmony_ci vst $vr11, \tmp, THREAD_FPR11 - THREAD_FPR0 22062306a36Sopenharmony_ci vst $vr12, \tmp, THREAD_FPR12 - THREAD_FPR0 22162306a36Sopenharmony_ci vst $vr13, \tmp, THREAD_FPR13 - THREAD_FPR0 22262306a36Sopenharmony_ci vst $vr14, \tmp, THREAD_FPR14 - THREAD_FPR0 22362306a36Sopenharmony_ci vst $vr15, \tmp, THREAD_FPR15 - THREAD_FPR0 22462306a36Sopenharmony_ci vst $vr16, \tmp, THREAD_FPR16 - THREAD_FPR0 22562306a36Sopenharmony_ci vst $vr17, \tmp, THREAD_FPR17 - THREAD_FPR0 22662306a36Sopenharmony_ci vst $vr18, \tmp, THREAD_FPR18 - THREAD_FPR0 22762306a36Sopenharmony_ci vst $vr19, \tmp, THREAD_FPR19 - THREAD_FPR0 22862306a36Sopenharmony_ci vst $vr20, \tmp, THREAD_FPR20 - THREAD_FPR0 22962306a36Sopenharmony_ci vst $vr21, \tmp, THREAD_FPR21 - THREAD_FPR0 23062306a36Sopenharmony_ci vst $vr22, \tmp, THREAD_FPR22 - THREAD_FPR0 23162306a36Sopenharmony_ci vst $vr23, \tmp, THREAD_FPR23 - THREAD_FPR0 23262306a36Sopenharmony_ci vst $vr24, \tmp, THREAD_FPR24 - THREAD_FPR0 23362306a36Sopenharmony_ci vst $vr25, \tmp, THREAD_FPR25 - THREAD_FPR0 23462306a36Sopenharmony_ci vst $vr26, \tmp, THREAD_FPR26 - THREAD_FPR0 23562306a36Sopenharmony_ci vst $vr27, \tmp, THREAD_FPR27 - THREAD_FPR0 23662306a36Sopenharmony_ci vst $vr28, \tmp, THREAD_FPR28 - THREAD_FPR0 23762306a36Sopenharmony_ci vst $vr29, \tmp, THREAD_FPR29 - THREAD_FPR0 23862306a36Sopenharmony_ci vst $vr30, \tmp, THREAD_FPR30 - THREAD_FPR0 23962306a36Sopenharmony_ci vst $vr31, \tmp, THREAD_FPR31 - THREAD_FPR0 24062306a36Sopenharmony_ci .endm 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci .macro lsx_restore_data thread tmp 24362306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 24462306a36Sopenharmony_ci PTR_ADD \tmp, \thread, \tmp 24562306a36Sopenharmony_ci vld $vr0, \tmp, THREAD_FPR0 - THREAD_FPR0 24662306a36Sopenharmony_ci vld $vr1, \tmp, THREAD_FPR1 - THREAD_FPR0 24762306a36Sopenharmony_ci vld $vr2, \tmp, THREAD_FPR2 - THREAD_FPR0 24862306a36Sopenharmony_ci vld $vr3, \tmp, THREAD_FPR3 - THREAD_FPR0 24962306a36Sopenharmony_ci vld $vr4, \tmp, THREAD_FPR4 - THREAD_FPR0 25062306a36Sopenharmony_ci vld $vr5, \tmp, THREAD_FPR5 - THREAD_FPR0 25162306a36Sopenharmony_ci vld $vr6, \tmp, THREAD_FPR6 - THREAD_FPR0 25262306a36Sopenharmony_ci vld $vr7, \tmp, THREAD_FPR7 - THREAD_FPR0 25362306a36Sopenharmony_ci vld $vr8, \tmp, THREAD_FPR8 - THREAD_FPR0 25462306a36Sopenharmony_ci vld $vr9, \tmp, THREAD_FPR9 - THREAD_FPR0 25562306a36Sopenharmony_ci vld $vr10, \tmp, THREAD_FPR10 - THREAD_FPR0 25662306a36Sopenharmony_ci vld $vr11, \tmp, THREAD_FPR11 - THREAD_FPR0 25762306a36Sopenharmony_ci vld $vr12, \tmp, THREAD_FPR12 - THREAD_FPR0 25862306a36Sopenharmony_ci vld $vr13, \tmp, THREAD_FPR13 - THREAD_FPR0 25962306a36Sopenharmony_ci vld $vr14, \tmp, THREAD_FPR14 - THREAD_FPR0 26062306a36Sopenharmony_ci vld $vr15, \tmp, THREAD_FPR15 - THREAD_FPR0 26162306a36Sopenharmony_ci vld $vr16, \tmp, THREAD_FPR16 - THREAD_FPR0 26262306a36Sopenharmony_ci vld $vr17, \tmp, THREAD_FPR17 - THREAD_FPR0 26362306a36Sopenharmony_ci vld $vr18, \tmp, THREAD_FPR18 - THREAD_FPR0 26462306a36Sopenharmony_ci vld $vr19, \tmp, THREAD_FPR19 - THREAD_FPR0 26562306a36Sopenharmony_ci vld $vr20, \tmp, THREAD_FPR20 - THREAD_FPR0 26662306a36Sopenharmony_ci vld $vr21, \tmp, THREAD_FPR21 - THREAD_FPR0 26762306a36Sopenharmony_ci vld $vr22, \tmp, THREAD_FPR22 - THREAD_FPR0 26862306a36Sopenharmony_ci vld $vr23, \tmp, THREAD_FPR23 - THREAD_FPR0 26962306a36Sopenharmony_ci vld $vr24, \tmp, THREAD_FPR24 - THREAD_FPR0 27062306a36Sopenharmony_ci vld $vr25, \tmp, THREAD_FPR25 - THREAD_FPR0 27162306a36Sopenharmony_ci vld $vr26, \tmp, THREAD_FPR26 - THREAD_FPR0 27262306a36Sopenharmony_ci vld $vr27, \tmp, THREAD_FPR27 - THREAD_FPR0 27362306a36Sopenharmony_ci vld $vr28, \tmp, THREAD_FPR28 - THREAD_FPR0 27462306a36Sopenharmony_ci vld $vr29, \tmp, THREAD_FPR29 - THREAD_FPR0 27562306a36Sopenharmony_ci vld $vr30, \tmp, THREAD_FPR30 - THREAD_FPR0 27662306a36Sopenharmony_ci vld $vr31, \tmp, THREAD_FPR31 - THREAD_FPR0 27762306a36Sopenharmony_ci .endm 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci .macro lsx_save_all thread tmp0 tmp1 28062306a36Sopenharmony_ci fpu_save_cc \thread, \tmp0, \tmp1 28162306a36Sopenharmony_ci fpu_save_csr \thread, \tmp0 28262306a36Sopenharmony_ci lsx_save_data \thread, \tmp0 28362306a36Sopenharmony_ci .endm 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci .macro lsx_restore_all thread tmp0 tmp1 28662306a36Sopenharmony_ci lsx_restore_data \thread, \tmp0 28762306a36Sopenharmony_ci fpu_restore_cc \thread, \tmp0, \tmp1 28862306a36Sopenharmony_ci fpu_restore_csr \thread, \tmp0, \tmp1 28962306a36Sopenharmony_ci .endm 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci .macro lsx_save_upper vd base tmp off 29262306a36Sopenharmony_ci vpickve2gr.d \tmp, \vd, 1 29362306a36Sopenharmony_ci st.d \tmp, \base, (\off+8) 29462306a36Sopenharmony_ci .endm 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci .macro lsx_save_all_upper thread base tmp 29762306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 29862306a36Sopenharmony_ci PTR_ADD \base, \thread, \tmp 29962306a36Sopenharmony_ci lsx_save_upper $vr0, \base, \tmp, (THREAD_FPR0-THREAD_FPR0) 30062306a36Sopenharmony_ci lsx_save_upper $vr1, \base, \tmp, (THREAD_FPR1-THREAD_FPR0) 30162306a36Sopenharmony_ci lsx_save_upper $vr2, \base, \tmp, (THREAD_FPR2-THREAD_FPR0) 30262306a36Sopenharmony_ci lsx_save_upper $vr3, \base, \tmp, (THREAD_FPR3-THREAD_FPR0) 30362306a36Sopenharmony_ci lsx_save_upper $vr4, \base, \tmp, (THREAD_FPR4-THREAD_FPR0) 30462306a36Sopenharmony_ci lsx_save_upper $vr5, \base, \tmp, (THREAD_FPR5-THREAD_FPR0) 30562306a36Sopenharmony_ci lsx_save_upper $vr6, \base, \tmp, (THREAD_FPR6-THREAD_FPR0) 30662306a36Sopenharmony_ci lsx_save_upper $vr7, \base, \tmp, (THREAD_FPR7-THREAD_FPR0) 30762306a36Sopenharmony_ci lsx_save_upper $vr8, \base, \tmp, (THREAD_FPR8-THREAD_FPR0) 30862306a36Sopenharmony_ci lsx_save_upper $vr9, \base, \tmp, (THREAD_FPR9-THREAD_FPR0) 30962306a36Sopenharmony_ci lsx_save_upper $vr10, \base, \tmp, (THREAD_FPR10-THREAD_FPR0) 31062306a36Sopenharmony_ci lsx_save_upper $vr11, \base, \tmp, (THREAD_FPR11-THREAD_FPR0) 31162306a36Sopenharmony_ci lsx_save_upper $vr12, \base, \tmp, (THREAD_FPR12-THREAD_FPR0) 31262306a36Sopenharmony_ci lsx_save_upper $vr13, \base, \tmp, (THREAD_FPR13-THREAD_FPR0) 31362306a36Sopenharmony_ci lsx_save_upper $vr14, \base, \tmp, (THREAD_FPR14-THREAD_FPR0) 31462306a36Sopenharmony_ci lsx_save_upper $vr15, \base, \tmp, (THREAD_FPR15-THREAD_FPR0) 31562306a36Sopenharmony_ci lsx_save_upper $vr16, \base, \tmp, (THREAD_FPR16-THREAD_FPR0) 31662306a36Sopenharmony_ci lsx_save_upper $vr17, \base, \tmp, (THREAD_FPR17-THREAD_FPR0) 31762306a36Sopenharmony_ci lsx_save_upper $vr18, \base, \tmp, (THREAD_FPR18-THREAD_FPR0) 31862306a36Sopenharmony_ci lsx_save_upper $vr19, \base, \tmp, (THREAD_FPR19-THREAD_FPR0) 31962306a36Sopenharmony_ci lsx_save_upper $vr20, \base, \tmp, (THREAD_FPR20-THREAD_FPR0) 32062306a36Sopenharmony_ci lsx_save_upper $vr21, \base, \tmp, (THREAD_FPR21-THREAD_FPR0) 32162306a36Sopenharmony_ci lsx_save_upper $vr22, \base, \tmp, (THREAD_FPR22-THREAD_FPR0) 32262306a36Sopenharmony_ci lsx_save_upper $vr23, \base, \tmp, (THREAD_FPR23-THREAD_FPR0) 32362306a36Sopenharmony_ci lsx_save_upper $vr24, \base, \tmp, (THREAD_FPR24-THREAD_FPR0) 32462306a36Sopenharmony_ci lsx_save_upper $vr25, \base, \tmp, (THREAD_FPR25-THREAD_FPR0) 32562306a36Sopenharmony_ci lsx_save_upper $vr26, \base, \tmp, (THREAD_FPR26-THREAD_FPR0) 32662306a36Sopenharmony_ci lsx_save_upper $vr27, \base, \tmp, (THREAD_FPR27-THREAD_FPR0) 32762306a36Sopenharmony_ci lsx_save_upper $vr28, \base, \tmp, (THREAD_FPR28-THREAD_FPR0) 32862306a36Sopenharmony_ci lsx_save_upper $vr29, \base, \tmp, (THREAD_FPR29-THREAD_FPR0) 32962306a36Sopenharmony_ci lsx_save_upper $vr30, \base, \tmp, (THREAD_FPR30-THREAD_FPR0) 33062306a36Sopenharmony_ci lsx_save_upper $vr31, \base, \tmp, (THREAD_FPR31-THREAD_FPR0) 33162306a36Sopenharmony_ci .endm 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci .macro lsx_restore_upper vd base tmp off 33462306a36Sopenharmony_ci ld.d \tmp, \base, (\off+8) 33562306a36Sopenharmony_ci vinsgr2vr.d \vd, \tmp, 1 33662306a36Sopenharmony_ci .endm 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_ci .macro lsx_restore_all_upper thread base tmp 33962306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 34062306a36Sopenharmony_ci PTR_ADD \base, \thread, \tmp 34162306a36Sopenharmony_ci lsx_restore_upper $vr0, \base, \tmp, (THREAD_FPR0-THREAD_FPR0) 34262306a36Sopenharmony_ci lsx_restore_upper $vr1, \base, \tmp, (THREAD_FPR1-THREAD_FPR0) 34362306a36Sopenharmony_ci lsx_restore_upper $vr2, \base, \tmp, (THREAD_FPR2-THREAD_FPR0) 34462306a36Sopenharmony_ci lsx_restore_upper $vr3, \base, \tmp, (THREAD_FPR3-THREAD_FPR0) 34562306a36Sopenharmony_ci lsx_restore_upper $vr4, \base, \tmp, (THREAD_FPR4-THREAD_FPR0) 34662306a36Sopenharmony_ci lsx_restore_upper $vr5, \base, \tmp, (THREAD_FPR5-THREAD_FPR0) 34762306a36Sopenharmony_ci lsx_restore_upper $vr6, \base, \tmp, (THREAD_FPR6-THREAD_FPR0) 34862306a36Sopenharmony_ci lsx_restore_upper $vr7, \base, \tmp, (THREAD_FPR7-THREAD_FPR0) 34962306a36Sopenharmony_ci lsx_restore_upper $vr8, \base, \tmp, (THREAD_FPR8-THREAD_FPR0) 35062306a36Sopenharmony_ci lsx_restore_upper $vr9, \base, \tmp, (THREAD_FPR9-THREAD_FPR0) 35162306a36Sopenharmony_ci lsx_restore_upper $vr10, \base, \tmp, (THREAD_FPR10-THREAD_FPR0) 35262306a36Sopenharmony_ci lsx_restore_upper $vr11, \base, \tmp, (THREAD_FPR11-THREAD_FPR0) 35362306a36Sopenharmony_ci lsx_restore_upper $vr12, \base, \tmp, (THREAD_FPR12-THREAD_FPR0) 35462306a36Sopenharmony_ci lsx_restore_upper $vr13, \base, \tmp, (THREAD_FPR13-THREAD_FPR0) 35562306a36Sopenharmony_ci lsx_restore_upper $vr14, \base, \tmp, (THREAD_FPR14-THREAD_FPR0) 35662306a36Sopenharmony_ci lsx_restore_upper $vr15, \base, \tmp, (THREAD_FPR15-THREAD_FPR0) 35762306a36Sopenharmony_ci lsx_restore_upper $vr16, \base, \tmp, (THREAD_FPR16-THREAD_FPR0) 35862306a36Sopenharmony_ci lsx_restore_upper $vr17, \base, \tmp, (THREAD_FPR17-THREAD_FPR0) 35962306a36Sopenharmony_ci lsx_restore_upper $vr18, \base, \tmp, (THREAD_FPR18-THREAD_FPR0) 36062306a36Sopenharmony_ci lsx_restore_upper $vr19, \base, \tmp, (THREAD_FPR19-THREAD_FPR0) 36162306a36Sopenharmony_ci lsx_restore_upper $vr20, \base, \tmp, (THREAD_FPR20-THREAD_FPR0) 36262306a36Sopenharmony_ci lsx_restore_upper $vr21, \base, \tmp, (THREAD_FPR21-THREAD_FPR0) 36362306a36Sopenharmony_ci lsx_restore_upper $vr22, \base, \tmp, (THREAD_FPR22-THREAD_FPR0) 36462306a36Sopenharmony_ci lsx_restore_upper $vr23, \base, \tmp, (THREAD_FPR23-THREAD_FPR0) 36562306a36Sopenharmony_ci lsx_restore_upper $vr24, \base, \tmp, (THREAD_FPR24-THREAD_FPR0) 36662306a36Sopenharmony_ci lsx_restore_upper $vr25, \base, \tmp, (THREAD_FPR25-THREAD_FPR0) 36762306a36Sopenharmony_ci lsx_restore_upper $vr26, \base, \tmp, (THREAD_FPR26-THREAD_FPR0) 36862306a36Sopenharmony_ci lsx_restore_upper $vr27, \base, \tmp, (THREAD_FPR27-THREAD_FPR0) 36962306a36Sopenharmony_ci lsx_restore_upper $vr28, \base, \tmp, (THREAD_FPR28-THREAD_FPR0) 37062306a36Sopenharmony_ci lsx_restore_upper $vr29, \base, \tmp, (THREAD_FPR29-THREAD_FPR0) 37162306a36Sopenharmony_ci lsx_restore_upper $vr30, \base, \tmp, (THREAD_FPR30-THREAD_FPR0) 37262306a36Sopenharmony_ci lsx_restore_upper $vr31, \base, \tmp, (THREAD_FPR31-THREAD_FPR0) 37362306a36Sopenharmony_ci .endm 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_ci .macro lsx_init_upper vd tmp 37662306a36Sopenharmony_ci vinsgr2vr.d \vd, \tmp, 1 37762306a36Sopenharmony_ci .endm 37862306a36Sopenharmony_ci 37962306a36Sopenharmony_ci .macro lsx_init_all_upper tmp 38062306a36Sopenharmony_ci not \tmp, zero 38162306a36Sopenharmony_ci lsx_init_upper $vr0 \tmp 38262306a36Sopenharmony_ci lsx_init_upper $vr1 \tmp 38362306a36Sopenharmony_ci lsx_init_upper $vr2 \tmp 38462306a36Sopenharmony_ci lsx_init_upper $vr3 \tmp 38562306a36Sopenharmony_ci lsx_init_upper $vr4 \tmp 38662306a36Sopenharmony_ci lsx_init_upper $vr5 \tmp 38762306a36Sopenharmony_ci lsx_init_upper $vr6 \tmp 38862306a36Sopenharmony_ci lsx_init_upper $vr7 \tmp 38962306a36Sopenharmony_ci lsx_init_upper $vr8 \tmp 39062306a36Sopenharmony_ci lsx_init_upper $vr9 \tmp 39162306a36Sopenharmony_ci lsx_init_upper $vr10 \tmp 39262306a36Sopenharmony_ci lsx_init_upper $vr11 \tmp 39362306a36Sopenharmony_ci lsx_init_upper $vr12 \tmp 39462306a36Sopenharmony_ci lsx_init_upper $vr13 \tmp 39562306a36Sopenharmony_ci lsx_init_upper $vr14 \tmp 39662306a36Sopenharmony_ci lsx_init_upper $vr15 \tmp 39762306a36Sopenharmony_ci lsx_init_upper $vr16 \tmp 39862306a36Sopenharmony_ci lsx_init_upper $vr17 \tmp 39962306a36Sopenharmony_ci lsx_init_upper $vr18 \tmp 40062306a36Sopenharmony_ci lsx_init_upper $vr19 \tmp 40162306a36Sopenharmony_ci lsx_init_upper $vr20 \tmp 40262306a36Sopenharmony_ci lsx_init_upper $vr21 \tmp 40362306a36Sopenharmony_ci lsx_init_upper $vr22 \tmp 40462306a36Sopenharmony_ci lsx_init_upper $vr23 \tmp 40562306a36Sopenharmony_ci lsx_init_upper $vr24 \tmp 40662306a36Sopenharmony_ci lsx_init_upper $vr25 \tmp 40762306a36Sopenharmony_ci lsx_init_upper $vr26 \tmp 40862306a36Sopenharmony_ci lsx_init_upper $vr27 \tmp 40962306a36Sopenharmony_ci lsx_init_upper $vr28 \tmp 41062306a36Sopenharmony_ci lsx_init_upper $vr29 \tmp 41162306a36Sopenharmony_ci lsx_init_upper $vr30 \tmp 41262306a36Sopenharmony_ci lsx_init_upper $vr31 \tmp 41362306a36Sopenharmony_ci .endm 41462306a36Sopenharmony_ci 41562306a36Sopenharmony_ci .macro lasx_save_data thread tmp 41662306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 41762306a36Sopenharmony_ci PTR_ADD \tmp, \thread, \tmp 41862306a36Sopenharmony_ci xvst $xr0, \tmp, THREAD_FPR0 - THREAD_FPR0 41962306a36Sopenharmony_ci xvst $xr1, \tmp, THREAD_FPR1 - THREAD_FPR0 42062306a36Sopenharmony_ci xvst $xr2, \tmp, THREAD_FPR2 - THREAD_FPR0 42162306a36Sopenharmony_ci xvst $xr3, \tmp, THREAD_FPR3 - THREAD_FPR0 42262306a36Sopenharmony_ci xvst $xr4, \tmp, THREAD_FPR4 - THREAD_FPR0 42362306a36Sopenharmony_ci xvst $xr5, \tmp, THREAD_FPR5 - THREAD_FPR0 42462306a36Sopenharmony_ci xvst $xr6, \tmp, THREAD_FPR6 - THREAD_FPR0 42562306a36Sopenharmony_ci xvst $xr7, \tmp, THREAD_FPR7 - THREAD_FPR0 42662306a36Sopenharmony_ci xvst $xr8, \tmp, THREAD_FPR8 - THREAD_FPR0 42762306a36Sopenharmony_ci xvst $xr9, \tmp, THREAD_FPR9 - THREAD_FPR0 42862306a36Sopenharmony_ci xvst $xr10, \tmp, THREAD_FPR10 - THREAD_FPR0 42962306a36Sopenharmony_ci xvst $xr11, \tmp, THREAD_FPR11 - THREAD_FPR0 43062306a36Sopenharmony_ci xvst $xr12, \tmp, THREAD_FPR12 - THREAD_FPR0 43162306a36Sopenharmony_ci xvst $xr13, \tmp, THREAD_FPR13 - THREAD_FPR0 43262306a36Sopenharmony_ci xvst $xr14, \tmp, THREAD_FPR14 - THREAD_FPR0 43362306a36Sopenharmony_ci xvst $xr15, \tmp, THREAD_FPR15 - THREAD_FPR0 43462306a36Sopenharmony_ci xvst $xr16, \tmp, THREAD_FPR16 - THREAD_FPR0 43562306a36Sopenharmony_ci xvst $xr17, \tmp, THREAD_FPR17 - THREAD_FPR0 43662306a36Sopenharmony_ci xvst $xr18, \tmp, THREAD_FPR18 - THREAD_FPR0 43762306a36Sopenharmony_ci xvst $xr19, \tmp, THREAD_FPR19 - THREAD_FPR0 43862306a36Sopenharmony_ci xvst $xr20, \tmp, THREAD_FPR20 - THREAD_FPR0 43962306a36Sopenharmony_ci xvst $xr21, \tmp, THREAD_FPR21 - THREAD_FPR0 44062306a36Sopenharmony_ci xvst $xr22, \tmp, THREAD_FPR22 - THREAD_FPR0 44162306a36Sopenharmony_ci xvst $xr23, \tmp, THREAD_FPR23 - THREAD_FPR0 44262306a36Sopenharmony_ci xvst $xr24, \tmp, THREAD_FPR24 - THREAD_FPR0 44362306a36Sopenharmony_ci xvst $xr25, \tmp, THREAD_FPR25 - THREAD_FPR0 44462306a36Sopenharmony_ci xvst $xr26, \tmp, THREAD_FPR26 - THREAD_FPR0 44562306a36Sopenharmony_ci xvst $xr27, \tmp, THREAD_FPR27 - THREAD_FPR0 44662306a36Sopenharmony_ci xvst $xr28, \tmp, THREAD_FPR28 - THREAD_FPR0 44762306a36Sopenharmony_ci xvst $xr29, \tmp, THREAD_FPR29 - THREAD_FPR0 44862306a36Sopenharmony_ci xvst $xr30, \tmp, THREAD_FPR30 - THREAD_FPR0 44962306a36Sopenharmony_ci xvst $xr31, \tmp, THREAD_FPR31 - THREAD_FPR0 45062306a36Sopenharmony_ci .endm 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_ci .macro lasx_restore_data thread tmp 45362306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 45462306a36Sopenharmony_ci PTR_ADD \tmp, \thread, \tmp 45562306a36Sopenharmony_ci xvld $xr0, \tmp, THREAD_FPR0 - THREAD_FPR0 45662306a36Sopenharmony_ci xvld $xr1, \tmp, THREAD_FPR1 - THREAD_FPR0 45762306a36Sopenharmony_ci xvld $xr2, \tmp, THREAD_FPR2 - THREAD_FPR0 45862306a36Sopenharmony_ci xvld $xr3, \tmp, THREAD_FPR3 - THREAD_FPR0 45962306a36Sopenharmony_ci xvld $xr4, \tmp, THREAD_FPR4 - THREAD_FPR0 46062306a36Sopenharmony_ci xvld $xr5, \tmp, THREAD_FPR5 - THREAD_FPR0 46162306a36Sopenharmony_ci xvld $xr6, \tmp, THREAD_FPR6 - THREAD_FPR0 46262306a36Sopenharmony_ci xvld $xr7, \tmp, THREAD_FPR7 - THREAD_FPR0 46362306a36Sopenharmony_ci xvld $xr8, \tmp, THREAD_FPR8 - THREAD_FPR0 46462306a36Sopenharmony_ci xvld $xr9, \tmp, THREAD_FPR9 - THREAD_FPR0 46562306a36Sopenharmony_ci xvld $xr10, \tmp, THREAD_FPR10 - THREAD_FPR0 46662306a36Sopenharmony_ci xvld $xr11, \tmp, THREAD_FPR11 - THREAD_FPR0 46762306a36Sopenharmony_ci xvld $xr12, \tmp, THREAD_FPR12 - THREAD_FPR0 46862306a36Sopenharmony_ci xvld $xr13, \tmp, THREAD_FPR13 - THREAD_FPR0 46962306a36Sopenharmony_ci xvld $xr14, \tmp, THREAD_FPR14 - THREAD_FPR0 47062306a36Sopenharmony_ci xvld $xr15, \tmp, THREAD_FPR15 - THREAD_FPR0 47162306a36Sopenharmony_ci xvld $xr16, \tmp, THREAD_FPR16 - THREAD_FPR0 47262306a36Sopenharmony_ci xvld $xr17, \tmp, THREAD_FPR17 - THREAD_FPR0 47362306a36Sopenharmony_ci xvld $xr18, \tmp, THREAD_FPR18 - THREAD_FPR0 47462306a36Sopenharmony_ci xvld $xr19, \tmp, THREAD_FPR19 - THREAD_FPR0 47562306a36Sopenharmony_ci xvld $xr20, \tmp, THREAD_FPR20 - THREAD_FPR0 47662306a36Sopenharmony_ci xvld $xr21, \tmp, THREAD_FPR21 - THREAD_FPR0 47762306a36Sopenharmony_ci xvld $xr22, \tmp, THREAD_FPR22 - THREAD_FPR0 47862306a36Sopenharmony_ci xvld $xr23, \tmp, THREAD_FPR23 - THREAD_FPR0 47962306a36Sopenharmony_ci xvld $xr24, \tmp, THREAD_FPR24 - THREAD_FPR0 48062306a36Sopenharmony_ci xvld $xr25, \tmp, THREAD_FPR25 - THREAD_FPR0 48162306a36Sopenharmony_ci xvld $xr26, \tmp, THREAD_FPR26 - THREAD_FPR0 48262306a36Sopenharmony_ci xvld $xr27, \tmp, THREAD_FPR27 - THREAD_FPR0 48362306a36Sopenharmony_ci xvld $xr28, \tmp, THREAD_FPR28 - THREAD_FPR0 48462306a36Sopenharmony_ci xvld $xr29, \tmp, THREAD_FPR29 - THREAD_FPR0 48562306a36Sopenharmony_ci xvld $xr30, \tmp, THREAD_FPR30 - THREAD_FPR0 48662306a36Sopenharmony_ci xvld $xr31, \tmp, THREAD_FPR31 - THREAD_FPR0 48762306a36Sopenharmony_ci .endm 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_ci .macro lasx_save_all thread tmp0 tmp1 49062306a36Sopenharmony_ci fpu_save_cc \thread, \tmp0, \tmp1 49162306a36Sopenharmony_ci fpu_save_csr \thread, \tmp0 49262306a36Sopenharmony_ci lasx_save_data \thread, \tmp0 49362306a36Sopenharmony_ci .endm 49462306a36Sopenharmony_ci 49562306a36Sopenharmony_ci .macro lasx_restore_all thread tmp0 tmp1 49662306a36Sopenharmony_ci lasx_restore_data \thread, \tmp0 49762306a36Sopenharmony_ci fpu_restore_cc \thread, \tmp0, \tmp1 49862306a36Sopenharmony_ci fpu_restore_csr \thread, \tmp0, \tmp1 49962306a36Sopenharmony_ci .endm 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_ci .macro lasx_save_upper xd base tmp off 50262306a36Sopenharmony_ci /* Nothing */ 50362306a36Sopenharmony_ci .endm 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_ci .macro lasx_save_all_upper thread base tmp 50662306a36Sopenharmony_ci /* Nothing */ 50762306a36Sopenharmony_ci .endm 50862306a36Sopenharmony_ci 50962306a36Sopenharmony_ci .macro lasx_restore_upper xd base tmp0 tmp1 off 51062306a36Sopenharmony_ci vld \tmp0, \base, (\off+16) 51162306a36Sopenharmony_ci xvpermi.q \xd, \tmp1, 0x2 51262306a36Sopenharmony_ci .endm 51362306a36Sopenharmony_ci 51462306a36Sopenharmony_ci .macro lasx_restore_all_upper thread base tmp 51562306a36Sopenharmony_ci li.w \tmp, THREAD_FPR0 51662306a36Sopenharmony_ci PTR_ADD \base, \thread, \tmp 51762306a36Sopenharmony_ci /* Save $vr31 ($xr31 lower bits) with xvpickve2gr */ 51862306a36Sopenharmony_ci xvpickve2gr.d $r17, $xr31, 0 51962306a36Sopenharmony_ci xvpickve2gr.d $r18, $xr31, 1 52062306a36Sopenharmony_ci lasx_restore_upper $xr0, \base, $vr31, $xr31, (THREAD_FPR0-THREAD_FPR0) 52162306a36Sopenharmony_ci lasx_restore_upper $xr1, \base, $vr31, $xr31, (THREAD_FPR1-THREAD_FPR0) 52262306a36Sopenharmony_ci lasx_restore_upper $xr2, \base, $vr31, $xr31, (THREAD_FPR2-THREAD_FPR0) 52362306a36Sopenharmony_ci lasx_restore_upper $xr3, \base, $vr31, $xr31, (THREAD_FPR3-THREAD_FPR0) 52462306a36Sopenharmony_ci lasx_restore_upper $xr4, \base, $vr31, $xr31, (THREAD_FPR4-THREAD_FPR0) 52562306a36Sopenharmony_ci lasx_restore_upper $xr5, \base, $vr31, $xr31, (THREAD_FPR5-THREAD_FPR0) 52662306a36Sopenharmony_ci lasx_restore_upper $xr6, \base, $vr31, $xr31, (THREAD_FPR6-THREAD_FPR0) 52762306a36Sopenharmony_ci lasx_restore_upper $xr7, \base, $vr31, $xr31, (THREAD_FPR7-THREAD_FPR0) 52862306a36Sopenharmony_ci lasx_restore_upper $xr8, \base, $vr31, $xr31, (THREAD_FPR8-THREAD_FPR0) 52962306a36Sopenharmony_ci lasx_restore_upper $xr9, \base, $vr31, $xr31, (THREAD_FPR9-THREAD_FPR0) 53062306a36Sopenharmony_ci lasx_restore_upper $xr10, \base, $vr31, $xr31, (THREAD_FPR10-THREAD_FPR0) 53162306a36Sopenharmony_ci lasx_restore_upper $xr11, \base, $vr31, $xr31, (THREAD_FPR11-THREAD_FPR0) 53262306a36Sopenharmony_ci lasx_restore_upper $xr12, \base, $vr31, $xr31, (THREAD_FPR12-THREAD_FPR0) 53362306a36Sopenharmony_ci lasx_restore_upper $xr13, \base, $vr31, $xr31, (THREAD_FPR13-THREAD_FPR0) 53462306a36Sopenharmony_ci lasx_restore_upper $xr14, \base, $vr31, $xr31, (THREAD_FPR14-THREAD_FPR0) 53562306a36Sopenharmony_ci lasx_restore_upper $xr15, \base, $vr31, $xr31, (THREAD_FPR15-THREAD_FPR0) 53662306a36Sopenharmony_ci lasx_restore_upper $xr16, \base, $vr31, $xr31, (THREAD_FPR16-THREAD_FPR0) 53762306a36Sopenharmony_ci lasx_restore_upper $xr17, \base, $vr31, $xr31, (THREAD_FPR17-THREAD_FPR0) 53862306a36Sopenharmony_ci lasx_restore_upper $xr18, \base, $vr31, $xr31, (THREAD_FPR18-THREAD_FPR0) 53962306a36Sopenharmony_ci lasx_restore_upper $xr19, \base, $vr31, $xr31, (THREAD_FPR19-THREAD_FPR0) 54062306a36Sopenharmony_ci lasx_restore_upper $xr20, \base, $vr31, $xr31, (THREAD_FPR20-THREAD_FPR0) 54162306a36Sopenharmony_ci lasx_restore_upper $xr21, \base, $vr31, $xr31, (THREAD_FPR21-THREAD_FPR0) 54262306a36Sopenharmony_ci lasx_restore_upper $xr22, \base, $vr31, $xr31, (THREAD_FPR22-THREAD_FPR0) 54362306a36Sopenharmony_ci lasx_restore_upper $xr23, \base, $vr31, $xr31, (THREAD_FPR23-THREAD_FPR0) 54462306a36Sopenharmony_ci lasx_restore_upper $xr24, \base, $vr31, $xr31, (THREAD_FPR24-THREAD_FPR0) 54562306a36Sopenharmony_ci lasx_restore_upper $xr25, \base, $vr31, $xr31, (THREAD_FPR25-THREAD_FPR0) 54662306a36Sopenharmony_ci lasx_restore_upper $xr26, \base, $vr31, $xr31, (THREAD_FPR26-THREAD_FPR0) 54762306a36Sopenharmony_ci lasx_restore_upper $xr27, \base, $vr31, $xr31, (THREAD_FPR27-THREAD_FPR0) 54862306a36Sopenharmony_ci lasx_restore_upper $xr28, \base, $vr31, $xr31, (THREAD_FPR28-THREAD_FPR0) 54962306a36Sopenharmony_ci lasx_restore_upper $xr29, \base, $vr31, $xr31, (THREAD_FPR29-THREAD_FPR0) 55062306a36Sopenharmony_ci lasx_restore_upper $xr30, \base, $vr31, $xr31, (THREAD_FPR30-THREAD_FPR0) 55162306a36Sopenharmony_ci lasx_restore_upper $xr31, \base, $vr31, $xr31, (THREAD_FPR31-THREAD_FPR0) 55262306a36Sopenharmony_ci /* Restore $vr31 ($xr31 lower bits) with xvinsgr2vr */ 55362306a36Sopenharmony_ci xvinsgr2vr.d $xr31, $r17, 0 55462306a36Sopenharmony_ci xvinsgr2vr.d $xr31, $r18, 1 55562306a36Sopenharmony_ci .endm 55662306a36Sopenharmony_ci 55762306a36Sopenharmony_ci .macro lasx_init_upper xd tmp 55862306a36Sopenharmony_ci xvinsgr2vr.d \xd, \tmp, 2 55962306a36Sopenharmony_ci xvinsgr2vr.d \xd, \tmp, 3 56062306a36Sopenharmony_ci .endm 56162306a36Sopenharmony_ci 56262306a36Sopenharmony_ci .macro lasx_init_all_upper tmp 56362306a36Sopenharmony_ci not \tmp, zero 56462306a36Sopenharmony_ci lasx_init_upper $xr0 \tmp 56562306a36Sopenharmony_ci lasx_init_upper $xr1 \tmp 56662306a36Sopenharmony_ci lasx_init_upper $xr2 \tmp 56762306a36Sopenharmony_ci lasx_init_upper $xr3 \tmp 56862306a36Sopenharmony_ci lasx_init_upper $xr4 \tmp 56962306a36Sopenharmony_ci lasx_init_upper $xr5 \tmp 57062306a36Sopenharmony_ci lasx_init_upper $xr6 \tmp 57162306a36Sopenharmony_ci lasx_init_upper $xr7 \tmp 57262306a36Sopenharmony_ci lasx_init_upper $xr8 \tmp 57362306a36Sopenharmony_ci lasx_init_upper $xr9 \tmp 57462306a36Sopenharmony_ci lasx_init_upper $xr10 \tmp 57562306a36Sopenharmony_ci lasx_init_upper $xr11 \tmp 57662306a36Sopenharmony_ci lasx_init_upper $xr12 \tmp 57762306a36Sopenharmony_ci lasx_init_upper $xr13 \tmp 57862306a36Sopenharmony_ci lasx_init_upper $xr14 \tmp 57962306a36Sopenharmony_ci lasx_init_upper $xr15 \tmp 58062306a36Sopenharmony_ci lasx_init_upper $xr16 \tmp 58162306a36Sopenharmony_ci lasx_init_upper $xr17 \tmp 58262306a36Sopenharmony_ci lasx_init_upper $xr18 \tmp 58362306a36Sopenharmony_ci lasx_init_upper $xr19 \tmp 58462306a36Sopenharmony_ci lasx_init_upper $xr20 \tmp 58562306a36Sopenharmony_ci lasx_init_upper $xr21 \tmp 58662306a36Sopenharmony_ci lasx_init_upper $xr22 \tmp 58762306a36Sopenharmony_ci lasx_init_upper $xr23 \tmp 58862306a36Sopenharmony_ci lasx_init_upper $xr24 \tmp 58962306a36Sopenharmony_ci lasx_init_upper $xr25 \tmp 59062306a36Sopenharmony_ci lasx_init_upper $xr26 \tmp 59162306a36Sopenharmony_ci lasx_init_upper $xr27 \tmp 59262306a36Sopenharmony_ci lasx_init_upper $xr28 \tmp 59362306a36Sopenharmony_ci lasx_init_upper $xr29 \tmp 59462306a36Sopenharmony_ci lasx_init_upper $xr30 \tmp 59562306a36Sopenharmony_ci lasx_init_upper $xr31 \tmp 59662306a36Sopenharmony_ci .endm 59762306a36Sopenharmony_ci 59862306a36Sopenharmony_ci.macro not dst src 59962306a36Sopenharmony_ci nor \dst, \src, zero 60062306a36Sopenharmony_ci.endm 60162306a36Sopenharmony_ci 60262306a36Sopenharmony_ci.macro la_abs reg, sym 60362306a36Sopenharmony_ci#ifndef CONFIG_RELOCATABLE 60462306a36Sopenharmony_ci la.abs \reg, \sym 60562306a36Sopenharmony_ci#else 60662306a36Sopenharmony_ci 766: 60762306a36Sopenharmony_ci lu12i.w \reg, 0 60862306a36Sopenharmony_ci ori \reg, \reg, 0 60962306a36Sopenharmony_ci lu32i.d \reg, 0 61062306a36Sopenharmony_ci lu52i.d \reg, \reg, 0 61162306a36Sopenharmony_ci .pushsection ".la_abs", "aw", %progbits 61262306a36Sopenharmony_ci .dword 766b 61362306a36Sopenharmony_ci .dword \sym 61462306a36Sopenharmony_ci .popsection 61562306a36Sopenharmony_ci#endif 61662306a36Sopenharmony_ci.endm 61762306a36Sopenharmony_ci 61862306a36Sopenharmony_ci#endif /* _ASM_ASMMACRO_H */ 619