cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

io-readsl.S (1385B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 *  linux/arch/arm/lib/io-readsl.S
      4 *
      5 *  Copyright (C) 1995-2000 Russell King
      6 */
      7#include <linux/linkage.h>
      8#include <asm/assembler.h>
      9
     10ENTRY(__raw_readsl)
     11		teq	r2, #0		@ do we have to check for the zero len?
     12		reteq	lr
     13		ands	ip, r1, #3
     14		bne	3f
     15
     16		subs	r2, r2, #4
     17		bmi	2f
     18		stmfd	sp!, {r4, lr}
     191:		ldr	r3, [r0, #0]
     20		ldr	r4, [r0, #0]
     21		ldr	ip, [r0, #0]
     22		ldr	lr, [r0, #0]
     23		subs	r2, r2, #4
     24		stmia	r1!, {r3, r4, ip, lr}
     25		bpl	1b
     26		ldmfd	sp!, {r4, lr}
     272:		movs	r2, r2, lsl #31
     28		ldrcs	r3, [r0, #0]
     29		ldrcs	ip, [r0, #0]
     30		stmiacs	r1!, {r3, ip}
     31		ldrne	r3, [r0, #0]
     32		strne	r3, [r1, #0]
     33		ret	lr
     34
     353:		ldr	r3, [r0]
     36		cmp	ip, #2
     37		mov	ip, r3, get_byte_0
     38		strb	ip, [r1], #1
     39		bgt	6f
     40		mov	ip, r3, get_byte_1
     41		strb	ip, [r1], #1
     42		beq	5f
     43		mov	ip, r3, get_byte_2
     44		strb	ip, [r1], #1
     45
     464:		subs	r2, r2, #1
     47		mov	ip, r3, lspull #24
     48		ldrne	r3, [r0]
     49		orrne	ip, ip, r3, lspush #8
     50		strne	ip, [r1], #4
     51		bne	4b
     52		b	8f
     53
     545:		subs	r2, r2, #1
     55		mov	ip, r3, lspull #16
     56		ldrne	r3, [r0]
     57		orrne	ip, ip, r3, lspush #16
     58		strne	ip, [r1], #4
     59		bne	5b
     60		b	7f
     61
     626:		subs	r2, r2, #1
     63		mov	ip, r3, lspull #8
     64		ldrne	r3, [r0]
     65		orrne	ip, ip, r3, lspush #24
     66		strne	ip, [r1], #4
     67		bne	6b
     68
     69		mov	r3, ip, get_byte_2
     70		strb	r3, [r1, #2]
     717:		mov	r3, ip, get_byte_1
     72		strb	r3, [r1, #1]
     738:		mov	r3, ip, get_byte_0
     74		strb	r3, [r1, #0]
     75		ret	lr
     76ENDPROC(__raw_readsl)