blob: 521586a7189fe433e62b8ced61974b2659324f39 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Contributed by Mao Minkai <maominkai@wxiat.com>
*
* Zero user space, handling exceptions as we go.
*
* We have to make sure that $0 is always up-to-date and contains the
* right "bytes left to zero" value (and that it is updated only _after_
* a successful copy). There is also some rather minor exception setup
* stuff.
*
*/
#include <asm/export.h>
/* Allow an exception for an insn; exit if we get one. */
#define FIXUP_LDST(x,y...) \
99: x,##y; \
.section __ex_table,"a"; \
.long 99b - .; \
ldi $31, $out-99b($31); \
.previous
/*
* $7: SIMD status
* 0: not in simd loop
* 1: in simd loop
* 2: in simd_u loop
* $18: bytes left to copy
*
*/
.globl __clear_user
.ent __clear_user
__clear_user:
.prologue 0
bis $31, $31, $7
mov $17, $18
bis $31, $31, $17
#include "deep-set_template.S"
$out:
bis $31, $18, $0
beq $7, $return
$restore_simd:
RESTORE_SIMD_REGS
$return:
ret
.end __clear_user
EXPORT_SYMBOL(__clear_user)