blob: 60ae5515fe9e0c0c5556602822f957d690396beb [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/*
2 * linux/arch/arm/lib/putuser.S
3 *
4 * Copyright (C) 2001 Russell King
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * Idea from x86 version, (C) Copyright 1998 Linus Torvalds
11 *
12 * These functions have a non-standard call interface to make
13 * them more efficient, especially as they return an error
14 * value in addition to the "real" return value.
15 *
16 * __put_user_X
17 *
18 * Inputs: r0 contains the address
19 * r1 contains the address limit, which must be preserved
20 * r2, r3 contains the value
21 * Outputs: r0 is the error code
22 * lr corrupted
23 *
24 * No other registers must be altered. (see <asm/uaccess.h>
25 * for specific ASM register usage).
26 *
27 * Note that ADDR_LIMIT is either 0 or 0xc0000000
28 * Note also that it is intended that __put_user_bad is not global.
29 */
30#include <linux/linkage.h>
31#include <asm/assembler.h>
32#include <asm/errno.h>
33#include <asm/domain.h>
34
35/*
36 *comlee
37 *
38 */
39
40ENTRY(__myput_user_1)
411: TUSER(strb) r2, [r0]
42 mov r0, #0
43 mov pc, lr
44ENDPROC(__myput_user_1)
45
46ENTRY(__myput_user_2)
47 mov ip, r2, lsr #8
48#ifdef CONFIG_THUMB2_KERNEL
49#ifndef __ARMEB__
502: TUSER(strb) r2, [r0]
513: TUSER(strb) ip, [r0, #1]
52#else
532: TUSER(strb) ip, [r0]
543: TUSER(strb) r2, [r0, #1]
55#endif
56#else /* !CONFIG_THUMB2_KERNEL */
57#ifndef __ARMEB__
582: TUSER(strb) r2, [r0], #1
593: TUSER(strb) ip, [r0]
60#else
612: TUSER(strb) ip, [r0], #1
623: TUSER(strb) r2, [r0]
63#endif
64#endif /* CONFIG_THUMB2_KERNEL */
65 mov r0, #0
66 mov pc, lr
67ENDPROC(__myput_user_2)
68
69ENTRY(__myput_user_4)
704: TUSER(str) r2, [r0]
71 mov r0, #0
72 mov pc, lr
73ENDPROC(__myput_user_4)
74
75ENTRY(__myput_user_8)
76#ifdef CONFIG_THUMB2_KERNEL
775: TUSER(str) r2, [r0]
786: TUSER(str) r3, [r0, #4]
79#else
805: TUSER(str) r2, [r0], #4
816: TUSER(str) r3, [r0]
82#endif
83 mov r0, #0
84 mov pc, lr
85ENDPROC(__myput_user_8)
86