|
@@ -57,6 +57,8 @@
|
|
|
#endif /* CONFIG_CPU_MIPSR2 */
|
|
|
|
|
|
.macro fpu_save_16even thread tmp=t0
|
|
|
+ .set push
|
|
|
+ SET_HARDFLOAT
|
|
|
cfc1 \tmp, fcr31
|
|
|
sdc1 $f0, THREAD_FPR0_LS64(\thread)
|
|
|
sdc1 $f2, THREAD_FPR2_LS64(\thread)
|
|
@@ -75,11 +77,13 @@
|
|
|
sdc1 $f28, THREAD_FPR28_LS64(\thread)
|
|
|
sdc1 $f30, THREAD_FPR30_LS64(\thread)
|
|
|
sw \tmp, THREAD_FCR31(\thread)
|
|
|
+ .set pop
|
|
|
.endm
|
|
|
|
|
|
.macro fpu_save_16odd thread
|
|
|
.set push
|
|
|
.set mips64r2
|
|
|
+ SET_HARDFLOAT
|
|
|
sdc1 $f1, THREAD_FPR1_LS64(\thread)
|
|
|
sdc1 $f3, THREAD_FPR3_LS64(\thread)
|
|
|
sdc1 $f5, THREAD_FPR5_LS64(\thread)
|
|
@@ -110,6 +114,8 @@
|
|
|
.endm
|
|
|
|
|
|
.macro fpu_restore_16even thread tmp=t0
|
|
|
+ .set push
|
|
|
+ SET_HARDFLOAT
|
|
|
lw \tmp, THREAD_FCR31(\thread)
|
|
|
ldc1 $f0, THREAD_FPR0_LS64(\thread)
|
|
|
ldc1 $f2, THREAD_FPR2_LS64(\thread)
|
|
@@ -133,6 +139,7 @@
|
|
|
.macro fpu_restore_16odd thread
|
|
|
.set push
|
|
|
.set mips64r2
|
|
|
+ SET_HARDFLOAT
|
|
|
ldc1 $f1, THREAD_FPR1_LS64(\thread)
|
|
|
ldc1 $f3, THREAD_FPR3_LS64(\thread)
|
|
|
ldc1 $f5, THREAD_FPR5_LS64(\thread)
|
|
@@ -277,6 +284,7 @@
|
|
|
.macro cfcmsa rd, cs
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
.insn
|
|
|
.word CFC_MSA_INSN | (\cs << 11)
|
|
|
move \rd, $1
|
|
@@ -286,6 +294,7 @@
|
|
|
.macro ctcmsa cd, rs
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
move $1, \rs
|
|
|
.word CTC_MSA_INSN | (\cd << 6)
|
|
|
.set pop
|
|
@@ -294,6 +303,7 @@
|
|
|
.macro ld_d wd, off, base
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
add $1, \base, \off
|
|
|
.word LDD_MSA_INSN | (\wd << 6)
|
|
|
.set pop
|
|
@@ -302,6 +312,7 @@
|
|
|
.macro st_d wd, off, base
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
add $1, \base, \off
|
|
|
.word STD_MSA_INSN | (\wd << 6)
|
|
|
.set pop
|
|
@@ -310,6 +321,7 @@
|
|
|
.macro copy_u_w rd, ws, n
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
.insn
|
|
|
.word COPY_UW_MSA_INSN | (\n << 16) | (\ws << 11)
|
|
|
/* move triggers an assembler bug... */
|
|
@@ -320,6 +332,7 @@
|
|
|
.macro copy_u_d rd, ws, n
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
.insn
|
|
|
.word COPY_UD_MSA_INSN | (\n << 16) | (\ws << 11)
|
|
|
/* move triggers an assembler bug... */
|
|
@@ -330,6 +343,7 @@
|
|
|
.macro insert_w wd, n, rs
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
/* move triggers an assembler bug... */
|
|
|
or $1, \rs, zero
|
|
|
.word INSERT_W_MSA_INSN | (\n << 16) | (\wd << 6)
|
|
@@ -339,6 +353,7 @@
|
|
|
.macro insert_d wd, n, rs
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
/* move triggers an assembler bug... */
|
|
|
or $1, \rs, zero
|
|
|
.word INSERT_D_MSA_INSN | (\n << 16) | (\wd << 6)
|
|
@@ -381,6 +396,7 @@
|
|
|
st_d 31, THREAD_FPR31, \thread
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
cfcmsa $1, MSA_CSR
|
|
|
sw $1, THREAD_MSA_CSR(\thread)
|
|
|
.set pop
|
|
@@ -389,6 +405,7 @@
|
|
|
.macro msa_restore_all thread
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
lw $1, THREAD_MSA_CSR(\thread)
|
|
|
ctcmsa MSA_CSR, $1
|
|
|
.set pop
|
|
@@ -441,6 +458,7 @@
|
|
|
.macro msa_init_all_upper
|
|
|
.set push
|
|
|
.set noat
|
|
|
+ SET_HARDFLOAT
|
|
|
not $1, zero
|
|
|
msa_init_upper 0
|
|
|
.set pop
|