1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 2221c007bSPaul Mundt/* 3221c007bSPaul Mundt * __clear_user_page, __clear_user, clear_page implementation of SuperH 4221c007bSPaul Mundt * 5221c007bSPaul Mundt * Copyright (C) 2001 Kaz Kojima 6221c007bSPaul Mundt * Copyright (C) 2001, 2002 Niibe Yutaka 7221c007bSPaul Mundt * Copyright (C) 2006 Paul Mundt 8221c007bSPaul Mundt */ 9221c007bSPaul Mundt#include <linux/linkage.h> 10221c007bSPaul Mundt#include <asm/page.h> 11221c007bSPaul Mundt 12221c007bSPaul MundtENTRY(__clear_user) 13221c007bSPaul Mundt ! 14221c007bSPaul Mundt mov #0, r0 15ac6a0cf6SPaul Mundt mov #0xffffffe0, r1 16221c007bSPaul Mundt ! 17221c007bSPaul Mundt ! r4..(r4+31)&~32 -------- not aligned [ Area 0 ] 18221c007bSPaul Mundt ! (r4+31)&~32..(r4+r5)&~32 -------- aligned [ Area 1 ] 19221c007bSPaul Mundt ! (r4+r5)&~32..r4+r5 -------- not aligned [ Area 2 ] 20221c007bSPaul Mundt ! 21221c007bSPaul Mundt ! Clear area 0 22221c007bSPaul Mundt mov r4, r2 23221c007bSPaul Mundt ! 24221c007bSPaul Mundt tst r1, r5 ! length < 32 25221c007bSPaul Mundt bt .Larea2 ! skip to remainder 26221c007bSPaul Mundt ! 27221c007bSPaul Mundt add #31, r2 28221c007bSPaul Mundt and r1, r2 29221c007bSPaul Mundt cmp/eq r4, r2 30221c007bSPaul Mundt bt .Larea1 31221c007bSPaul Mundt mov r2, r3 32221c007bSPaul Mundt sub r4, r3 33221c007bSPaul Mundt mov r3, r7 34221c007bSPaul Mundt mov r4, r2 35221c007bSPaul Mundt ! 36221c007bSPaul Mundt.L0: dt r3 37221c007bSPaul Mundt0: mov.b r0, @r2 38221c007bSPaul Mundt bf/s .L0 39221c007bSPaul Mundt add #1, r2 40221c007bSPaul Mundt ! 41221c007bSPaul Mundt sub r7, r5 42221c007bSPaul Mundt mov r2, r4 43221c007bSPaul Mundt.Larea1: 44221c007bSPaul Mundt mov r4, r3 45221c007bSPaul Mundt add r5, r3 46221c007bSPaul Mundt and r1, r3 47221c007bSPaul Mundt cmp/hi r2, r3 48221c007bSPaul Mundt bf .Larea2 49221c007bSPaul Mundt ! 50221c007bSPaul Mundt ! Clear area 1 51221c007bSPaul Mundt#if defined(CONFIG_CPU_SH4) 52221c007bSPaul Mundt1: movca.l r0, @r2 53221c007bSPaul Mundt#else 54221c007bSPaul Mundt1: mov.l r0, @r2 55221c007bSPaul Mundt#endif 56221c007bSPaul Mundt add #4, r2 57221c007bSPaul Mundt2: mov.l r0, @r2 58221c007bSPaul Mundt add #4, r2 59221c007bSPaul Mundt3: mov.l r0, @r2 60221c007bSPaul Mundt add #4, r2 61221c007bSPaul Mundt4: mov.l r0, @r2 62221c007bSPaul Mundt add #4, r2 63221c007bSPaul Mundt5: mov.l r0, @r2 64221c007bSPaul Mundt add #4, r2 65221c007bSPaul Mundt6: mov.l r0, @r2 66221c007bSPaul Mundt add #4, r2 67221c007bSPaul Mundt7: mov.l r0, @r2 68221c007bSPaul Mundt add #4, r2 69221c007bSPaul Mundt8: mov.l r0, @r2 70221c007bSPaul Mundt add #4, r2 71221c007bSPaul Mundt cmp/hi r2, r3 72221c007bSPaul Mundt bt/s 1b 73221c007bSPaul Mundt nop 74221c007bSPaul Mundt ! 75221c007bSPaul Mundt ! Clear area 2 76221c007bSPaul Mundt.Larea2: 77221c007bSPaul Mundt mov r4, r3 78221c007bSPaul Mundt add r5, r3 79221c007bSPaul Mundt cmp/hs r3, r2 80221c007bSPaul Mundt bt/s .Ldone 81221c007bSPaul Mundt sub r2, r3 82221c007bSPaul Mundt.L2: dt r3 83221c007bSPaul Mundt9: mov.b r0, @r2 84221c007bSPaul Mundt bf/s .L2 85221c007bSPaul Mundt add #1, r2 86221c007bSPaul Mundt ! 87221c007bSPaul Mundt.Ldone: rts 88221c007bSPaul Mundt mov #0, r0 ! return 0 as normal return 89221c007bSPaul Mundt 90221c007bSPaul Mundt ! return the number of bytes remained 91221c007bSPaul Mundt.Lbad_clear_user: 92221c007bSPaul Mundt mov r4, r0 93221c007bSPaul Mundt add r5, r0 94221c007bSPaul Mundt rts 95221c007bSPaul Mundt sub r2, r0 96221c007bSPaul Mundt 97221c007bSPaul Mundt.section __ex_table,"a" 98221c007bSPaul Mundt .align 2 99221c007bSPaul Mundt .long 0b, .Lbad_clear_user 100221c007bSPaul Mundt .long 1b, .Lbad_clear_user 101221c007bSPaul Mundt .long 2b, .Lbad_clear_user 102221c007bSPaul Mundt .long 3b, .Lbad_clear_user 103221c007bSPaul Mundt .long 4b, .Lbad_clear_user 104221c007bSPaul Mundt .long 5b, .Lbad_clear_user 105221c007bSPaul Mundt .long 6b, .Lbad_clear_user 106221c007bSPaul Mundt .long 7b, .Lbad_clear_user 107221c007bSPaul Mundt .long 8b, .Lbad_clear_user 108221c007bSPaul Mundt .long 9b, .Lbad_clear_user 109221c007bSPaul Mundt.previous 110