diff options
Diffstat (limited to 'arch/arm64/include/asm/fpsimdmacros.h')
| -rw-r--r-- | arch/arm64/include/asm/fpsimdmacros.h | 35 | 
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/fpsimdmacros.h b/arch/arm64/include/asm/fpsimdmacros.h index bbec599c96b..768414d55e6 100644 --- a/arch/arm64/include/asm/fpsimdmacros.h +++ b/arch/arm64/include/asm/fpsimdmacros.h @@ -62,3 +62,38 @@  	ldr	w\tmpnr, [\state, #16 * 2 + 4]  	msr	fpcr, x\tmpnr  .endm + +.altmacro +.macro fpsimd_save_partial state, numnr, tmpnr1, tmpnr2 +	mrs	x\tmpnr1, fpsr +	str	w\numnr, [\state, #8] +	mrs	x\tmpnr2, fpcr +	stp	w\tmpnr1, w\tmpnr2, [\state] +	adr	x\tmpnr1, 0f +	add	\state, \state, x\numnr, lsl #4 +	sub	x\tmpnr1, x\tmpnr1, x\numnr, lsl #1 +	br	x\tmpnr1 +	.irp	qa, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0 +	.irp	qb, %(qa + 1) +	stp	q\qa, q\qb, [\state, # -16 * \qa - 16] +	.endr +	.endr +0: +.endm + +.macro fpsimd_restore_partial state, tmpnr1, tmpnr2 +	ldp	w\tmpnr1, w\tmpnr2, [\state] +	msr	fpsr, x\tmpnr1 +	msr	fpcr, x\tmpnr2 +	adr	x\tmpnr1, 0f +	ldr	w\tmpnr2, [\state, #8] +	add	\state, \state, x\tmpnr2, lsl #4 +	sub	x\tmpnr1, x\tmpnr1, x\tmpnr2, lsl #1 +	br	x\tmpnr1 +	.irp	qa, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0 +	.irp	qb, %(qa + 1) +	ldp	q\qa, q\qb, [\state, # -16 * \qa - 16] +	.endr +	.endr +0: +.endm  | 
