Path: blob/master/arch/loongarch/include/asm/asmmacro.h
26488 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* Copyright (C) 2020-2022 Loongson Technology Corporation Limited3*/4#ifndef _ASM_ASMMACRO_H5#define _ASM_ASMMACRO_H67#include <asm/asm-offsets.h>8#include <asm/regdef.h>9#include <asm/fpregdef.h>10#include <asm/loongarch.h>1112.macro cpu_save_nonscratch thread13stptr.d s0, \thread, THREAD_REG2314stptr.d s1, \thread, THREAD_REG2415stptr.d s2, \thread, THREAD_REG2516stptr.d s3, \thread, THREAD_REG2617stptr.d s4, \thread, THREAD_REG2718stptr.d s5, \thread, THREAD_REG2819stptr.d s6, \thread, THREAD_REG2920stptr.d s7, \thread, THREAD_REG3021stptr.d s8, \thread, THREAD_REG3122stptr.d sp, \thread, THREAD_REG0323stptr.d fp, \thread, THREAD_REG2224.endm2526.macro cpu_restore_nonscratch thread27ldptr.d s0, \thread, THREAD_REG2328ldptr.d s1, \thread, THREAD_REG2429ldptr.d s2, \thread, THREAD_REG2530ldptr.d s3, \thread, THREAD_REG2631ldptr.d s4, \thread, THREAD_REG2732ldptr.d s5, \thread, THREAD_REG2833ldptr.d s6, \thread, THREAD_REG2934ldptr.d s7, \thread, THREAD_REG3035ldptr.d s8, \thread, THREAD_REG3136ldptr.d ra, \thread, THREAD_REG0137ldptr.d sp, \thread, THREAD_REG0338ldptr.d fp, \thread, THREAD_REG2239.endm4041.macro fpu_save_csr thread tmp42movfcsr2gr \tmp, fcsr043stptr.w \tmp, \thread, THREAD_FCSR44#ifdef CONFIG_CPU_HAS_LBT45/* TM bit is always 0 if LBT not supported */46andi \tmp, \tmp, FPU_CSR_TM47beqz \tmp, 1f48/* Save FTOP */49x86mftop \tmp50stptr.w \tmp, \thread, THREAD_FTOP51/* Turn off TM to ensure the order of FPR in memory independent of TM */52x86clrtm531:54#endif55.endm5657.macro fpu_restore_csr thread tmp0 tmp158ldptr.w \tmp0, \thread, THREAD_FCSR59movgr2fcsr fcsr0, \tmp060#ifdef CONFIG_CPU_HAS_LBT61/* TM bit is always 0 if LBT not supported */62andi \tmp0, \tmp0, FPU_CSR_TM63beqz \tmp0, 2f64/* Restore FTOP */65ldptr.w \tmp0, \thread, THREAD_FTOP66andi \tmp0, \tmp0, 0x767la.pcrel \tmp1, 1f68alsl.d \tmp1, \tmp0, \tmp1, 369jr \tmp1701:71x86mttop 072b 2f73x86mttop 174b 2f75x86mttop 276b 2f77x86mttop 378b 2f79x86mttop 480b 2f81x86mttop 582b 2f83x86mttop 684b 2f85x86mttop 7862:87#endif88.endm8990.macro fpu_save_cc thread tmp0 tmp191movcf2gr \tmp0, $fcc092move \tmp1, \tmp093movcf2gr \tmp0, $fcc194bstrins.d \tmp1, \tmp0, 15, 895movcf2gr \tmp0, $fcc296bstrins.d \tmp1, \tmp0, 23, 1697movcf2gr \tmp0, $fcc398bstrins.d \tmp1, \tmp0, 31, 2499movcf2gr \tmp0, $fcc4100bstrins.d \tmp1, \tmp0, 39, 32101movcf2gr \tmp0, $fcc5102bstrins.d \tmp1, \tmp0, 47, 40103movcf2gr \tmp0, $fcc6104bstrins.d \tmp1, \tmp0, 55, 48105movcf2gr \tmp0, $fcc7106bstrins.d \tmp1, \tmp0, 63, 56107stptr.d \tmp1, \thread, THREAD_FCC108.endm109110.macro fpu_restore_cc thread tmp0 tmp1111ldptr.d \tmp0, \thread, THREAD_FCC112bstrpick.d \tmp1, \tmp0, 7, 0113movgr2cf $fcc0, \tmp1114bstrpick.d \tmp1, \tmp0, 15, 8115movgr2cf $fcc1, \tmp1116bstrpick.d \tmp1, \tmp0, 23, 16117movgr2cf $fcc2, \tmp1118bstrpick.d \tmp1, \tmp0, 31, 24119movgr2cf $fcc3, \tmp1120bstrpick.d \tmp1, \tmp0, 39, 32121movgr2cf $fcc4, \tmp1122bstrpick.d \tmp1, \tmp0, 47, 40123movgr2cf $fcc5, \tmp1124bstrpick.d \tmp1, \tmp0, 55, 48125movgr2cf $fcc6, \tmp1126bstrpick.d \tmp1, \tmp0, 63, 56127movgr2cf $fcc7, \tmp1128.endm129130.macro fpu_save_double thread tmp131li.w \tmp, THREAD_FPR0132PTR_ADD \tmp, \tmp, \thread133fst.d $f0, \tmp, THREAD_FPR0 - THREAD_FPR0134fst.d $f1, \tmp, THREAD_FPR1 - THREAD_FPR0135fst.d $f2, \tmp, THREAD_FPR2 - THREAD_FPR0136fst.d $f3, \tmp, THREAD_FPR3 - THREAD_FPR0137fst.d $f4, \tmp, THREAD_FPR4 - THREAD_FPR0138fst.d $f5, \tmp, THREAD_FPR5 - THREAD_FPR0139fst.d $f6, \tmp, THREAD_FPR6 - THREAD_FPR0140fst.d $f7, \tmp, THREAD_FPR7 - THREAD_FPR0141fst.d $f8, \tmp, THREAD_FPR8 - THREAD_FPR0142fst.d $f9, \tmp, THREAD_FPR9 - THREAD_FPR0143fst.d $f10, \tmp, THREAD_FPR10 - THREAD_FPR0144fst.d $f11, \tmp, THREAD_FPR11 - THREAD_FPR0145fst.d $f12, \tmp, THREAD_FPR12 - THREAD_FPR0146fst.d $f13, \tmp, THREAD_FPR13 - THREAD_FPR0147fst.d $f14, \tmp, THREAD_FPR14 - THREAD_FPR0148fst.d $f15, \tmp, THREAD_FPR15 - THREAD_FPR0149fst.d $f16, \tmp, THREAD_FPR16 - THREAD_FPR0150fst.d $f17, \tmp, THREAD_FPR17 - THREAD_FPR0151fst.d $f18, \tmp, THREAD_FPR18 - THREAD_FPR0152fst.d $f19, \tmp, THREAD_FPR19 - THREAD_FPR0153fst.d $f20, \tmp, THREAD_FPR20 - THREAD_FPR0154fst.d $f21, \tmp, THREAD_FPR21 - THREAD_FPR0155fst.d $f22, \tmp, THREAD_FPR22 - THREAD_FPR0156fst.d $f23, \tmp, THREAD_FPR23 - THREAD_FPR0157fst.d $f24, \tmp, THREAD_FPR24 - THREAD_FPR0158fst.d $f25, \tmp, THREAD_FPR25 - THREAD_FPR0159fst.d $f26, \tmp, THREAD_FPR26 - THREAD_FPR0160fst.d $f27, \tmp, THREAD_FPR27 - THREAD_FPR0161fst.d $f28, \tmp, THREAD_FPR28 - THREAD_FPR0162fst.d $f29, \tmp, THREAD_FPR29 - THREAD_FPR0163fst.d $f30, \tmp, THREAD_FPR30 - THREAD_FPR0164fst.d $f31, \tmp, THREAD_FPR31 - THREAD_FPR0165.endm166167.macro fpu_restore_double thread tmp168li.w \tmp, THREAD_FPR0169PTR_ADD \tmp, \tmp, \thread170fld.d $f0, \tmp, THREAD_FPR0 - THREAD_FPR0171fld.d $f1, \tmp, THREAD_FPR1 - THREAD_FPR0172fld.d $f2, \tmp, THREAD_FPR2 - THREAD_FPR0173fld.d $f3, \tmp, THREAD_FPR3 - THREAD_FPR0174fld.d $f4, \tmp, THREAD_FPR4 - THREAD_FPR0175fld.d $f5, \tmp, THREAD_FPR5 - THREAD_FPR0176fld.d $f6, \tmp, THREAD_FPR6 - THREAD_FPR0177fld.d $f7, \tmp, THREAD_FPR7 - THREAD_FPR0178fld.d $f8, \tmp, THREAD_FPR8 - THREAD_FPR0179fld.d $f9, \tmp, THREAD_FPR9 - THREAD_FPR0180fld.d $f10, \tmp, THREAD_FPR10 - THREAD_FPR0181fld.d $f11, \tmp, THREAD_FPR11 - THREAD_FPR0182fld.d $f12, \tmp, THREAD_FPR12 - THREAD_FPR0183fld.d $f13, \tmp, THREAD_FPR13 - THREAD_FPR0184fld.d $f14, \tmp, THREAD_FPR14 - THREAD_FPR0185fld.d $f15, \tmp, THREAD_FPR15 - THREAD_FPR0186fld.d $f16, \tmp, THREAD_FPR16 - THREAD_FPR0187fld.d $f17, \tmp, THREAD_FPR17 - THREAD_FPR0188fld.d $f18, \tmp, THREAD_FPR18 - THREAD_FPR0189fld.d $f19, \tmp, THREAD_FPR19 - THREAD_FPR0190fld.d $f20, \tmp, THREAD_FPR20 - THREAD_FPR0191fld.d $f21, \tmp, THREAD_FPR21 - THREAD_FPR0192fld.d $f22, \tmp, THREAD_FPR22 - THREAD_FPR0193fld.d $f23, \tmp, THREAD_FPR23 - THREAD_FPR0194fld.d $f24, \tmp, THREAD_FPR24 - THREAD_FPR0195fld.d $f25, \tmp, THREAD_FPR25 - THREAD_FPR0196fld.d $f26, \tmp, THREAD_FPR26 - THREAD_FPR0197fld.d $f27, \tmp, THREAD_FPR27 - THREAD_FPR0198fld.d $f28, \tmp, THREAD_FPR28 - THREAD_FPR0199fld.d $f29, \tmp, THREAD_FPR29 - THREAD_FPR0200fld.d $f30, \tmp, THREAD_FPR30 - THREAD_FPR0201fld.d $f31, \tmp, THREAD_FPR31 - THREAD_FPR0202.endm203204.macro lsx_save_data thread tmp205li.w \tmp, THREAD_FPR0206PTR_ADD \tmp, \thread, \tmp207vst $vr0, \tmp, THREAD_FPR0 - THREAD_FPR0208vst $vr1, \tmp, THREAD_FPR1 - THREAD_FPR0209vst $vr2, \tmp, THREAD_FPR2 - THREAD_FPR0210vst $vr3, \tmp, THREAD_FPR3 - THREAD_FPR0211vst $vr4, \tmp, THREAD_FPR4 - THREAD_FPR0212vst $vr5, \tmp, THREAD_FPR5 - THREAD_FPR0213vst $vr6, \tmp, THREAD_FPR6 - THREAD_FPR0214vst $vr7, \tmp, THREAD_FPR7 - THREAD_FPR0215vst $vr8, \tmp, THREAD_FPR8 - THREAD_FPR0216vst $vr9, \tmp, THREAD_FPR9 - THREAD_FPR0217vst $vr10, \tmp, THREAD_FPR10 - THREAD_FPR0218vst $vr11, \tmp, THREAD_FPR11 - THREAD_FPR0219vst $vr12, \tmp, THREAD_FPR12 - THREAD_FPR0220vst $vr13, \tmp, THREAD_FPR13 - THREAD_FPR0221vst $vr14, \tmp, THREAD_FPR14 - THREAD_FPR0222vst $vr15, \tmp, THREAD_FPR15 - THREAD_FPR0223vst $vr16, \tmp, THREAD_FPR16 - THREAD_FPR0224vst $vr17, \tmp, THREAD_FPR17 - THREAD_FPR0225vst $vr18, \tmp, THREAD_FPR18 - THREAD_FPR0226vst $vr19, \tmp, THREAD_FPR19 - THREAD_FPR0227vst $vr20, \tmp, THREAD_FPR20 - THREAD_FPR0228vst $vr21, \tmp, THREAD_FPR21 - THREAD_FPR0229vst $vr22, \tmp, THREAD_FPR22 - THREAD_FPR0230vst $vr23, \tmp, THREAD_FPR23 - THREAD_FPR0231vst $vr24, \tmp, THREAD_FPR24 - THREAD_FPR0232vst $vr25, \tmp, THREAD_FPR25 - THREAD_FPR0233vst $vr26, \tmp, THREAD_FPR26 - THREAD_FPR0234vst $vr27, \tmp, THREAD_FPR27 - THREAD_FPR0235vst $vr28, \tmp, THREAD_FPR28 - THREAD_FPR0236vst $vr29, \tmp, THREAD_FPR29 - THREAD_FPR0237vst $vr30, \tmp, THREAD_FPR30 - THREAD_FPR0238vst $vr31, \tmp, THREAD_FPR31 - THREAD_FPR0239.endm240241.macro lsx_restore_data thread tmp242li.w \tmp, THREAD_FPR0243PTR_ADD \tmp, \thread, \tmp244vld $vr0, \tmp, THREAD_FPR0 - THREAD_FPR0245vld $vr1, \tmp, THREAD_FPR1 - THREAD_FPR0246vld $vr2, \tmp, THREAD_FPR2 - THREAD_FPR0247vld $vr3, \tmp, THREAD_FPR3 - THREAD_FPR0248vld $vr4, \tmp, THREAD_FPR4 - THREAD_FPR0249vld $vr5, \tmp, THREAD_FPR5 - THREAD_FPR0250vld $vr6, \tmp, THREAD_FPR6 - THREAD_FPR0251vld $vr7, \tmp, THREAD_FPR7 - THREAD_FPR0252vld $vr8, \tmp, THREAD_FPR8 - THREAD_FPR0253vld $vr9, \tmp, THREAD_FPR9 - THREAD_FPR0254vld $vr10, \tmp, THREAD_FPR10 - THREAD_FPR0255vld $vr11, \tmp, THREAD_FPR11 - THREAD_FPR0256vld $vr12, \tmp, THREAD_FPR12 - THREAD_FPR0257vld $vr13, \tmp, THREAD_FPR13 - THREAD_FPR0258vld $vr14, \tmp, THREAD_FPR14 - THREAD_FPR0259vld $vr15, \tmp, THREAD_FPR15 - THREAD_FPR0260vld $vr16, \tmp, THREAD_FPR16 - THREAD_FPR0261vld $vr17, \tmp, THREAD_FPR17 - THREAD_FPR0262vld $vr18, \tmp, THREAD_FPR18 - THREAD_FPR0263vld $vr19, \tmp, THREAD_FPR19 - THREAD_FPR0264vld $vr20, \tmp, THREAD_FPR20 - THREAD_FPR0265vld $vr21, \tmp, THREAD_FPR21 - THREAD_FPR0266vld $vr22, \tmp, THREAD_FPR22 - THREAD_FPR0267vld $vr23, \tmp, THREAD_FPR23 - THREAD_FPR0268vld $vr24, \tmp, THREAD_FPR24 - THREAD_FPR0269vld $vr25, \tmp, THREAD_FPR25 - THREAD_FPR0270vld $vr26, \tmp, THREAD_FPR26 - THREAD_FPR0271vld $vr27, \tmp, THREAD_FPR27 - THREAD_FPR0272vld $vr28, \tmp, THREAD_FPR28 - THREAD_FPR0273vld $vr29, \tmp, THREAD_FPR29 - THREAD_FPR0274vld $vr30, \tmp, THREAD_FPR30 - THREAD_FPR0275vld $vr31, \tmp, THREAD_FPR31 - THREAD_FPR0276.endm277278.macro lsx_save_all thread tmp0 tmp1279fpu_save_cc \thread, \tmp0, \tmp1280fpu_save_csr \thread, \tmp0281lsx_save_data \thread, \tmp0282.endm283284.macro lsx_restore_all thread tmp0 tmp1285lsx_restore_data \thread, \tmp0286fpu_restore_cc \thread, \tmp0, \tmp1287fpu_restore_csr \thread, \tmp0, \tmp1288.endm289290.macro lsx_save_upper vd base tmp off291vpickve2gr.d \tmp, \vd, 1292st.d \tmp, \base, (\off+8)293.endm294295.macro lsx_save_all_upper thread base tmp296li.w \tmp, THREAD_FPR0297PTR_ADD \base, \thread, \tmp298lsx_save_upper $vr0, \base, \tmp, (THREAD_FPR0-THREAD_FPR0)299lsx_save_upper $vr1, \base, \tmp, (THREAD_FPR1-THREAD_FPR0)300lsx_save_upper $vr2, \base, \tmp, (THREAD_FPR2-THREAD_FPR0)301lsx_save_upper $vr3, \base, \tmp, (THREAD_FPR3-THREAD_FPR0)302lsx_save_upper $vr4, \base, \tmp, (THREAD_FPR4-THREAD_FPR0)303lsx_save_upper $vr5, \base, \tmp, (THREAD_FPR5-THREAD_FPR0)304lsx_save_upper $vr6, \base, \tmp, (THREAD_FPR6-THREAD_FPR0)305lsx_save_upper $vr7, \base, \tmp, (THREAD_FPR7-THREAD_FPR0)306lsx_save_upper $vr8, \base, \tmp, (THREAD_FPR8-THREAD_FPR0)307lsx_save_upper $vr9, \base, \tmp, (THREAD_FPR9-THREAD_FPR0)308lsx_save_upper $vr10, \base, \tmp, (THREAD_FPR10-THREAD_FPR0)309lsx_save_upper $vr11, \base, \tmp, (THREAD_FPR11-THREAD_FPR0)310lsx_save_upper $vr12, \base, \tmp, (THREAD_FPR12-THREAD_FPR0)311lsx_save_upper $vr13, \base, \tmp, (THREAD_FPR13-THREAD_FPR0)312lsx_save_upper $vr14, \base, \tmp, (THREAD_FPR14-THREAD_FPR0)313lsx_save_upper $vr15, \base, \tmp, (THREAD_FPR15-THREAD_FPR0)314lsx_save_upper $vr16, \base, \tmp, (THREAD_FPR16-THREAD_FPR0)315lsx_save_upper $vr17, \base, \tmp, (THREAD_FPR17-THREAD_FPR0)316lsx_save_upper $vr18, \base, \tmp, (THREAD_FPR18-THREAD_FPR0)317lsx_save_upper $vr19, \base, \tmp, (THREAD_FPR19-THREAD_FPR0)318lsx_save_upper $vr20, \base, \tmp, (THREAD_FPR20-THREAD_FPR0)319lsx_save_upper $vr21, \base, \tmp, (THREAD_FPR21-THREAD_FPR0)320lsx_save_upper $vr22, \base, \tmp, (THREAD_FPR22-THREAD_FPR0)321lsx_save_upper $vr23, \base, \tmp, (THREAD_FPR23-THREAD_FPR0)322lsx_save_upper $vr24, \base, \tmp, (THREAD_FPR24-THREAD_FPR0)323lsx_save_upper $vr25, \base, \tmp, (THREAD_FPR25-THREAD_FPR0)324lsx_save_upper $vr26, \base, \tmp, (THREAD_FPR26-THREAD_FPR0)325lsx_save_upper $vr27, \base, \tmp, (THREAD_FPR27-THREAD_FPR0)326lsx_save_upper $vr28, \base, \tmp, (THREAD_FPR28-THREAD_FPR0)327lsx_save_upper $vr29, \base, \tmp, (THREAD_FPR29-THREAD_FPR0)328lsx_save_upper $vr30, \base, \tmp, (THREAD_FPR30-THREAD_FPR0)329lsx_save_upper $vr31, \base, \tmp, (THREAD_FPR31-THREAD_FPR0)330.endm331332.macro lsx_restore_upper vd base tmp off333ld.d \tmp, \base, (\off+8)334vinsgr2vr.d \vd, \tmp, 1335.endm336337.macro lsx_restore_all_upper thread base tmp338li.w \tmp, THREAD_FPR0339PTR_ADD \base, \thread, \tmp340lsx_restore_upper $vr0, \base, \tmp, (THREAD_FPR0-THREAD_FPR0)341lsx_restore_upper $vr1, \base, \tmp, (THREAD_FPR1-THREAD_FPR0)342lsx_restore_upper $vr2, \base, \tmp, (THREAD_FPR2-THREAD_FPR0)343lsx_restore_upper $vr3, \base, \tmp, (THREAD_FPR3-THREAD_FPR0)344lsx_restore_upper $vr4, \base, \tmp, (THREAD_FPR4-THREAD_FPR0)345lsx_restore_upper $vr5, \base, \tmp, (THREAD_FPR5-THREAD_FPR0)346lsx_restore_upper $vr6, \base, \tmp, (THREAD_FPR6-THREAD_FPR0)347lsx_restore_upper $vr7, \base, \tmp, (THREAD_FPR7-THREAD_FPR0)348lsx_restore_upper $vr8, \base, \tmp, (THREAD_FPR8-THREAD_FPR0)349lsx_restore_upper $vr9, \base, \tmp, (THREAD_FPR9-THREAD_FPR0)350lsx_restore_upper $vr10, \base, \tmp, (THREAD_FPR10-THREAD_FPR0)351lsx_restore_upper $vr11, \base, \tmp, (THREAD_FPR11-THREAD_FPR0)352lsx_restore_upper $vr12, \base, \tmp, (THREAD_FPR12-THREAD_FPR0)353lsx_restore_upper $vr13, \base, \tmp, (THREAD_FPR13-THREAD_FPR0)354lsx_restore_upper $vr14, \base, \tmp, (THREAD_FPR14-THREAD_FPR0)355lsx_restore_upper $vr15, \base, \tmp, (THREAD_FPR15-THREAD_FPR0)356lsx_restore_upper $vr16, \base, \tmp, (THREAD_FPR16-THREAD_FPR0)357lsx_restore_upper $vr17, \base, \tmp, (THREAD_FPR17-THREAD_FPR0)358lsx_restore_upper $vr18, \base, \tmp, (THREAD_FPR18-THREAD_FPR0)359lsx_restore_upper $vr19, \base, \tmp, (THREAD_FPR19-THREAD_FPR0)360lsx_restore_upper $vr20, \base, \tmp, (THREAD_FPR20-THREAD_FPR0)361lsx_restore_upper $vr21, \base, \tmp, (THREAD_FPR21-THREAD_FPR0)362lsx_restore_upper $vr22, \base, \tmp, (THREAD_FPR22-THREAD_FPR0)363lsx_restore_upper $vr23, \base, \tmp, (THREAD_FPR23-THREAD_FPR0)364lsx_restore_upper $vr24, \base, \tmp, (THREAD_FPR24-THREAD_FPR0)365lsx_restore_upper $vr25, \base, \tmp, (THREAD_FPR25-THREAD_FPR0)366lsx_restore_upper $vr26, \base, \tmp, (THREAD_FPR26-THREAD_FPR0)367lsx_restore_upper $vr27, \base, \tmp, (THREAD_FPR27-THREAD_FPR0)368lsx_restore_upper $vr28, \base, \tmp, (THREAD_FPR28-THREAD_FPR0)369lsx_restore_upper $vr29, \base, \tmp, (THREAD_FPR29-THREAD_FPR0)370lsx_restore_upper $vr30, \base, \tmp, (THREAD_FPR30-THREAD_FPR0)371lsx_restore_upper $vr31, \base, \tmp, (THREAD_FPR31-THREAD_FPR0)372.endm373374.macro lsx_init_upper vd tmp375vinsgr2vr.d \vd, \tmp, 1376.endm377378.macro lsx_init_all_upper tmp379not \tmp, zero380lsx_init_upper $vr0 \tmp381lsx_init_upper $vr1 \tmp382lsx_init_upper $vr2 \tmp383lsx_init_upper $vr3 \tmp384lsx_init_upper $vr4 \tmp385lsx_init_upper $vr5 \tmp386lsx_init_upper $vr6 \tmp387lsx_init_upper $vr7 \tmp388lsx_init_upper $vr8 \tmp389lsx_init_upper $vr9 \tmp390lsx_init_upper $vr10 \tmp391lsx_init_upper $vr11 \tmp392lsx_init_upper $vr12 \tmp393lsx_init_upper $vr13 \tmp394lsx_init_upper $vr14 \tmp395lsx_init_upper $vr15 \tmp396lsx_init_upper $vr16 \tmp397lsx_init_upper $vr17 \tmp398lsx_init_upper $vr18 \tmp399lsx_init_upper $vr19 \tmp400lsx_init_upper $vr20 \tmp401lsx_init_upper $vr21 \tmp402lsx_init_upper $vr22 \tmp403lsx_init_upper $vr23 \tmp404lsx_init_upper $vr24 \tmp405lsx_init_upper $vr25 \tmp406lsx_init_upper $vr26 \tmp407lsx_init_upper $vr27 \tmp408lsx_init_upper $vr28 \tmp409lsx_init_upper $vr29 \tmp410lsx_init_upper $vr30 \tmp411lsx_init_upper $vr31 \tmp412.endm413414.macro lasx_save_data thread tmp415li.w \tmp, THREAD_FPR0416PTR_ADD \tmp, \thread, \tmp417xvst $xr0, \tmp, THREAD_FPR0 - THREAD_FPR0418xvst $xr1, \tmp, THREAD_FPR1 - THREAD_FPR0419xvst $xr2, \tmp, THREAD_FPR2 - THREAD_FPR0420xvst $xr3, \tmp, THREAD_FPR3 - THREAD_FPR0421xvst $xr4, \tmp, THREAD_FPR4 - THREAD_FPR0422xvst $xr5, \tmp, THREAD_FPR5 - THREAD_FPR0423xvst $xr6, \tmp, THREAD_FPR6 - THREAD_FPR0424xvst $xr7, \tmp, THREAD_FPR7 - THREAD_FPR0425xvst $xr8, \tmp, THREAD_FPR8 - THREAD_FPR0426xvst $xr9, \tmp, THREAD_FPR9 - THREAD_FPR0427xvst $xr10, \tmp, THREAD_FPR10 - THREAD_FPR0428xvst $xr11, \tmp, THREAD_FPR11 - THREAD_FPR0429xvst $xr12, \tmp, THREAD_FPR12 - THREAD_FPR0430xvst $xr13, \tmp, THREAD_FPR13 - THREAD_FPR0431xvst $xr14, \tmp, THREAD_FPR14 - THREAD_FPR0432xvst $xr15, \tmp, THREAD_FPR15 - THREAD_FPR0433xvst $xr16, \tmp, THREAD_FPR16 - THREAD_FPR0434xvst $xr17, \tmp, THREAD_FPR17 - THREAD_FPR0435xvst $xr18, \tmp, THREAD_FPR18 - THREAD_FPR0436xvst $xr19, \tmp, THREAD_FPR19 - THREAD_FPR0437xvst $xr20, \tmp, THREAD_FPR20 - THREAD_FPR0438xvst $xr21, \tmp, THREAD_FPR21 - THREAD_FPR0439xvst $xr22, \tmp, THREAD_FPR22 - THREAD_FPR0440xvst $xr23, \tmp, THREAD_FPR23 - THREAD_FPR0441xvst $xr24, \tmp, THREAD_FPR24 - THREAD_FPR0442xvst $xr25, \tmp, THREAD_FPR25 - THREAD_FPR0443xvst $xr26, \tmp, THREAD_FPR26 - THREAD_FPR0444xvst $xr27, \tmp, THREAD_FPR27 - THREAD_FPR0445xvst $xr28, \tmp, THREAD_FPR28 - THREAD_FPR0446xvst $xr29, \tmp, THREAD_FPR29 - THREAD_FPR0447xvst $xr30, \tmp, THREAD_FPR30 - THREAD_FPR0448xvst $xr31, \tmp, THREAD_FPR31 - THREAD_FPR0449.endm450451.macro lasx_restore_data thread tmp452li.w \tmp, THREAD_FPR0453PTR_ADD \tmp, \thread, \tmp454xvld $xr0, \tmp, THREAD_FPR0 - THREAD_FPR0455xvld $xr1, \tmp, THREAD_FPR1 - THREAD_FPR0456xvld $xr2, \tmp, THREAD_FPR2 - THREAD_FPR0457xvld $xr3, \tmp, THREAD_FPR3 - THREAD_FPR0458xvld $xr4, \tmp, THREAD_FPR4 - THREAD_FPR0459xvld $xr5, \tmp, THREAD_FPR5 - THREAD_FPR0460xvld $xr6, \tmp, THREAD_FPR6 - THREAD_FPR0461xvld $xr7, \tmp, THREAD_FPR7 - THREAD_FPR0462xvld $xr8, \tmp, THREAD_FPR8 - THREAD_FPR0463xvld $xr9, \tmp, THREAD_FPR9 - THREAD_FPR0464xvld $xr10, \tmp, THREAD_FPR10 - THREAD_FPR0465xvld $xr11, \tmp, THREAD_FPR11 - THREAD_FPR0466xvld $xr12, \tmp, THREAD_FPR12 - THREAD_FPR0467xvld $xr13, \tmp, THREAD_FPR13 - THREAD_FPR0468xvld $xr14, \tmp, THREAD_FPR14 - THREAD_FPR0469xvld $xr15, \tmp, THREAD_FPR15 - THREAD_FPR0470xvld $xr16, \tmp, THREAD_FPR16 - THREAD_FPR0471xvld $xr17, \tmp, THREAD_FPR17 - THREAD_FPR0472xvld $xr18, \tmp, THREAD_FPR18 - THREAD_FPR0473xvld $xr19, \tmp, THREAD_FPR19 - THREAD_FPR0474xvld $xr20, \tmp, THREAD_FPR20 - THREAD_FPR0475xvld $xr21, \tmp, THREAD_FPR21 - THREAD_FPR0476xvld $xr22, \tmp, THREAD_FPR22 - THREAD_FPR0477xvld $xr23, \tmp, THREAD_FPR23 - THREAD_FPR0478xvld $xr24, \tmp, THREAD_FPR24 - THREAD_FPR0479xvld $xr25, \tmp, THREAD_FPR25 - THREAD_FPR0480xvld $xr26, \tmp, THREAD_FPR26 - THREAD_FPR0481xvld $xr27, \tmp, THREAD_FPR27 - THREAD_FPR0482xvld $xr28, \tmp, THREAD_FPR28 - THREAD_FPR0483xvld $xr29, \tmp, THREAD_FPR29 - THREAD_FPR0484xvld $xr30, \tmp, THREAD_FPR30 - THREAD_FPR0485xvld $xr31, \tmp, THREAD_FPR31 - THREAD_FPR0486.endm487488.macro lasx_save_all thread tmp0 tmp1489fpu_save_cc \thread, \tmp0, \tmp1490fpu_save_csr \thread, \tmp0491lasx_save_data \thread, \tmp0492.endm493494.macro lasx_restore_all thread tmp0 tmp1495lasx_restore_data \thread, \tmp0496fpu_restore_cc \thread, \tmp0, \tmp1497fpu_restore_csr \thread, \tmp0, \tmp1498.endm499500.macro lasx_save_upper xd base tmp off501/* Nothing */502.endm503504.macro lasx_save_all_upper thread base tmp505/* Nothing */506.endm507508.macro lasx_restore_upper xd base tmp0 tmp1 off509vld \tmp0, \base, (\off+16)510xvpermi.q \xd, \tmp1, 0x2511.endm512513.macro lasx_restore_all_upper thread base tmp514li.w \tmp, THREAD_FPR0515PTR_ADD \base, \thread, \tmp516/* Save $vr31 ($xr31 lower bits) with xvpickve2gr */517xvpickve2gr.d $r17, $xr31, 0518xvpickve2gr.d $r18, $xr31, 1519lasx_restore_upper $xr0, \base, $vr31, $xr31, (THREAD_FPR0-THREAD_FPR0)520lasx_restore_upper $xr1, \base, $vr31, $xr31, (THREAD_FPR1-THREAD_FPR0)521lasx_restore_upper $xr2, \base, $vr31, $xr31, (THREAD_FPR2-THREAD_FPR0)522lasx_restore_upper $xr3, \base, $vr31, $xr31, (THREAD_FPR3-THREAD_FPR0)523lasx_restore_upper $xr4, \base, $vr31, $xr31, (THREAD_FPR4-THREAD_FPR0)524lasx_restore_upper $xr5, \base, $vr31, $xr31, (THREAD_FPR5-THREAD_FPR0)525lasx_restore_upper $xr6, \base, $vr31, $xr31, (THREAD_FPR6-THREAD_FPR0)526lasx_restore_upper $xr7, \base, $vr31, $xr31, (THREAD_FPR7-THREAD_FPR0)527lasx_restore_upper $xr8, \base, $vr31, $xr31, (THREAD_FPR8-THREAD_FPR0)528lasx_restore_upper $xr9, \base, $vr31, $xr31, (THREAD_FPR9-THREAD_FPR0)529lasx_restore_upper $xr10, \base, $vr31, $xr31, (THREAD_FPR10-THREAD_FPR0)530lasx_restore_upper $xr11, \base, $vr31, $xr31, (THREAD_FPR11-THREAD_FPR0)531lasx_restore_upper $xr12, \base, $vr31, $xr31, (THREAD_FPR12-THREAD_FPR0)532lasx_restore_upper $xr13, \base, $vr31, $xr31, (THREAD_FPR13-THREAD_FPR0)533lasx_restore_upper $xr14, \base, $vr31, $xr31, (THREAD_FPR14-THREAD_FPR0)534lasx_restore_upper $xr15, \base, $vr31, $xr31, (THREAD_FPR15-THREAD_FPR0)535lasx_restore_upper $xr16, \base, $vr31, $xr31, (THREAD_FPR16-THREAD_FPR0)536lasx_restore_upper $xr17, \base, $vr31, $xr31, (THREAD_FPR17-THREAD_FPR0)537lasx_restore_upper $xr18, \base, $vr31, $xr31, (THREAD_FPR18-THREAD_FPR0)538lasx_restore_upper $xr19, \base, $vr31, $xr31, (THREAD_FPR19-THREAD_FPR0)539lasx_restore_upper $xr20, \base, $vr31, $xr31, (THREAD_FPR20-THREAD_FPR0)540lasx_restore_upper $xr21, \base, $vr31, $xr31, (THREAD_FPR21-THREAD_FPR0)541lasx_restore_upper $xr22, \base, $vr31, $xr31, (THREAD_FPR22-THREAD_FPR0)542lasx_restore_upper $xr23, \base, $vr31, $xr31, (THREAD_FPR23-THREAD_FPR0)543lasx_restore_upper $xr24, \base, $vr31, $xr31, (THREAD_FPR24-THREAD_FPR0)544lasx_restore_upper $xr25, \base, $vr31, $xr31, (THREAD_FPR25-THREAD_FPR0)545lasx_restore_upper $xr26, \base, $vr31, $xr31, (THREAD_FPR26-THREAD_FPR0)546lasx_restore_upper $xr27, \base, $vr31, $xr31, (THREAD_FPR27-THREAD_FPR0)547lasx_restore_upper $xr28, \base, $vr31, $xr31, (THREAD_FPR28-THREAD_FPR0)548lasx_restore_upper $xr29, \base, $vr31, $xr31, (THREAD_FPR29-THREAD_FPR0)549lasx_restore_upper $xr30, \base, $vr31, $xr31, (THREAD_FPR30-THREAD_FPR0)550lasx_restore_upper $xr31, \base, $vr31, $xr31, (THREAD_FPR31-THREAD_FPR0)551/* Restore $vr31 ($xr31 lower bits) with xvinsgr2vr */552xvinsgr2vr.d $xr31, $r17, 0553xvinsgr2vr.d $xr31, $r18, 1554.endm555556.macro lasx_init_upper xd tmp557xvinsgr2vr.d \xd, \tmp, 2558xvinsgr2vr.d \xd, \tmp, 3559.endm560561.macro lasx_init_all_upper tmp562not \tmp, zero563lasx_init_upper $xr0 \tmp564lasx_init_upper $xr1 \tmp565lasx_init_upper $xr2 \tmp566lasx_init_upper $xr3 \tmp567lasx_init_upper $xr4 \tmp568lasx_init_upper $xr5 \tmp569lasx_init_upper $xr6 \tmp570lasx_init_upper $xr7 \tmp571lasx_init_upper $xr8 \tmp572lasx_init_upper $xr9 \tmp573lasx_init_upper $xr10 \tmp574lasx_init_upper $xr11 \tmp575lasx_init_upper $xr12 \tmp576lasx_init_upper $xr13 \tmp577lasx_init_upper $xr14 \tmp578lasx_init_upper $xr15 \tmp579lasx_init_upper $xr16 \tmp580lasx_init_upper $xr17 \tmp581lasx_init_upper $xr18 \tmp582lasx_init_upper $xr19 \tmp583lasx_init_upper $xr20 \tmp584lasx_init_upper $xr21 \tmp585lasx_init_upper $xr22 \tmp586lasx_init_upper $xr23 \tmp587lasx_init_upper $xr24 \tmp588lasx_init_upper $xr25 \tmp589lasx_init_upper $xr26 \tmp590lasx_init_upper $xr27 \tmp591lasx_init_upper $xr28 \tmp592lasx_init_upper $xr29 \tmp593lasx_init_upper $xr30 \tmp594lasx_init_upper $xr31 \tmp595.endm596597.macro not dst src598nor \dst, \src, zero599.endm600601.macro la_abs reg, sym602#ifndef CONFIG_RELOCATABLE603la.abs \reg, \sym604#else605766:606lu12i.w \reg, 0607ori \reg, \reg, 0608lu32i.d \reg, 0609lu52i.d \reg, \reg, 0610.pushsection ".la_abs", "aw", %progbits611.p2align 3612.dword 766b613.dword \sym614.popsection615#endif616.endm617618#endif /* _ASM_ASMMACRO_H */619620621