Linux Audio

Check our new training course

Loading...
v6.8
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 * OpenRISC string.S
  4 *
  5 * Linux architectural port borrowing liberally from similar works of
  6 * others.  All original copyrights apply as per the original source
  7 * declaration.
  8 *
  9 * Modifications for the OpenRISC architecture:
 10 * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
 11 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
 
 
 
 
 
 12 */
 13
 14#include <linux/linkage.h>
 15#include <asm/errno.h>
 16
 17	/*
 18	 * this can be optimized by doing gcc inline assemlby with
 19	 * proper constraints (no need to save args registers...)
 20	 *
 21	 */
 22
 23
 24/*
 25 *
 26 * int __copy_tofrom_user(void *to, const void *from, unsigned long size);
 27 *
 28 * NOTE: it returns number of bytes NOT copied !!!
 29 *
 30 */
 31	.global	__copy_tofrom_user
 32__copy_tofrom_user:
 33	l.addi  r1,r1,-12
 34	l.sw    0(r1),r6
 35	l.sw    4(r1),r4
 36	l.sw    8(r1),r3
 37
 38	l.addi  r11,r5,0
 392:  	l.sfeq  r11,r0
 40	l.bf    1f
 41	l.addi  r11,r11,-1
 428:    	l.lbz   r6,0(r4)
 439:    	l.sb    0(r3),r6
 44	l.addi  r3,r3,1
 45	l.j     2b
 46	l.addi  r4,r4,1
 471:
 48	l.addi  r11,r11,1               // r11 holds the return value
 49
 50	l.lwz   r6,0(r1)
 51	l.lwz   r4,4(r1)
 52	l.lwz   r3,8(r1)
 53	l.jr    r9
 54	l.addi  r1,r1,12
 55
 56	.section .fixup, "ax"
 5799:
 58		l.j     1b
 59		l.nop
 60	.previous
 61
 62	.section __ex_table, "a"
 63		.long 8b, 99b		// read fault
 64		.long 9b, 99b		// write fault
 65	.previous
 66
 67/*
 68 * unsigned long clear_user(void *addr, unsigned long size) ;
 69 *
 70 * NOTE: it returns number of bytes NOT cleared !!!
 71 */
 72	.global	__clear_user
 73__clear_user:
 74	l.addi  r1,r1,-8
 75	l.sw    0(r1),r4
 76	l.sw    4(r1),r3
 77
 782:	l.sfeq	r4,r0
 79	l.bf	1f
 80	l.addi	r4,r4,-1
 819:	l.sb	0(r3),r0
 82	l.j	2b
 83	l.addi  r3,r3,1
 84
 851:
 86	l.addi  r11,r4,1
 87
 88	l.lwz	r4,0(r1)
 89	l.lwz	r3,4(r1)
 90	l.jr	r9
 91	l.addi	r1,r1,8
 92
 93	.section .fixup, "ax"
 9499:
 95		l.j     1b
 96		l.nop
 97	.previous
 98
 99	.section __ex_table, "a"
100		.long 9b, 99b		// write fault
101	.previous
v4.10.11
 
  1/*
  2 * OpenRISC string.S
  3 *
  4 * Linux architectural port borrowing liberally from similar works of
  5 * others.  All original copyrights apply as per the original source
  6 * declaration.
  7 *
  8 * Modifications for the OpenRISC architecture:
  9 * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
 10 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
 11 *
 12 *      This program is free software; you can redistribute it and/or
 13 *      modify it under the terms of the GNU General Public License
 14 *      as published by the Free Software Foundation; either version
 15 *      2 of the License, or (at your option) any later version.
 16 */
 17
 18#include <linux/linkage.h>
 19#include <asm/errno.h>
 20
 21	/*
 22	 * this can be optimized by doing gcc inline assemlby with
 23	 * proper constraints (no need to save args registers...)
 24	 *
 25	 */
 26
 27
 28/*
 29 *
 30 * int __copy_tofrom_user(void *to, const void *from, unsigned long size);
 31 *
 32 * NOTE: it returns number of bytes NOT copied !!!
 33 *
 34 */
 35	.global	__copy_tofrom_user
 36__copy_tofrom_user:
 37	l.addi  r1,r1,-12
 38	l.sw    0(r1),r6
 39	l.sw    4(r1),r4
 40	l.sw    8(r1),r3
 41
 42	l.addi  r11,r5,0
 432:  	l.sfeq  r11,r0
 44	l.bf    1f
 45	l.addi  r11,r11,-1
 468:    	l.lbz   r6,0(r4)
 479:    	l.sb    0(r3),r6
 48	l.addi  r3,r3,1
 49	l.j     2b
 50	l.addi  r4,r4,1
 511:
 52	l.addi  r11,r11,1               // r11 holds the return value
 53
 54	l.lwz   r6,0(r1)
 55	l.lwz   r4,4(r1)
 56	l.lwz   r3,8(r1)
 57	l.jr    r9
 58	l.addi  r1,r1,12
 59
 60	.section .fixup, "ax"
 6199:
 62		l.j     1b
 63		l.nop
 64	.previous
 65
 66	.section __ex_table, "a"
 67		.long 8b, 99b		// read fault
 68		.long 9b, 99b		// write fault
 69	.previous
 70
 71/*
 72 * unsigned long clear_user(void *addr, unsigned long size) ;
 73 *
 74 * NOTE: it returns number of bytes NOT cleared !!!
 75 */
 76	.global	__clear_user
 77__clear_user:
 78	l.addi  r1,r1,-8
 79	l.sw    0(r1),r4
 80	l.sw    4(r1),r3
 81
 822:	l.sfeq	r4,r0
 83	l.bf	1f
 84	l.addi	r4,r4,-1
 859:	l.sb	0(r3),r0
 86	l.j	2b
 87	l.addi  r3,r3,1
 88
 891:
 90	l.addi  r11,r4,1
 91
 92	l.lwz	r4,0(r1)
 93	l.lwz	r3,4(r1)
 94	l.jr	r9
 95	l.addi	r1,r1,8
 96
 97	.section .fixup, "ax"
 9899:
 99		l.j     1b
100		l.nop
101	.previous
102
103	.section __ex_table, "a"
104		.long 9b, 99b		// write fault
105	.previous