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

movmem.S (4348B)


      1/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
      2
      3   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
      4   2004, 2005, 2006
      5   Free Software Foundation, Inc.
      6*/
      7
      8!! libgcc routines for the Renesas / SuperH SH CPUs.
      9!! Contributed by Steve Chamberlain.
     10!! sac@cygnus.com
     11
     12!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
     13!! recoded in assembly by Toshiyasu Morita
     14!! tm@netcom.com
     15
     16/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
     17   ELF local label prefixes by J"orn Rennecke
     18   amylaar@cygnus.com  */
     19
     20	.text
     21	.balign	4
     22	.global	__movmem
     23	.global __movstr
     24	.set __movstr, __movmem	
     25	/* This would be a lot simpler if r6 contained the byte count
     26	   minus 64, and we wouldn't be called here for a byte count of 64.  */
     27__movmem:
     28	sts.l	pr,@-r15
     29	shll2	r6
     30	bsr	__movmemSI52+2
     31	mov.l	@(48,r5),r0
     32	.balign	4
     33movmem_loop: /* Reached with rts */
     34	mov.l	@(60,r5),r0
     35	add	#-64,r6
     36	mov.l	r0,@(60,r4)
     37	tst	r6,r6
     38	mov.l	@(56,r5),r0
     39	bt	movmem_done
     40	mov.l	r0,@(56,r4)
     41	cmp/pl	r6
     42	mov.l	@(52,r5),r0
     43	add	#64,r5
     44	mov.l	r0,@(52,r4)
     45	add	#64,r4
     46	bt	__movmemSI52
     47! done all the large groups, do the remainder
     48! jump to movmem+
     49	mova	__movmemSI4+4,r0
     50	add	r6,r0
     51	jmp	@r0
     52movmem_done: ! share slot insn, works out aligned.
     53	lds.l	@r15+,pr
     54	mov.l	r0,@(56,r4)
     55	mov.l	@(52,r5),r0
     56	rts
     57	mov.l	r0,@(52,r4)
     58	.balign	4
     59
     60	.global	__movmemSI64
     61	.global __movstrSI64
     62	.set	__movstrSI64, __movmemSI64
     63__movmemSI64:
     64	mov.l	@(60,r5),r0
     65	mov.l	r0,@(60,r4)
     66	.global	__movmemSI60
     67	.global __movstrSI60
     68	.set	__movstrSI60, __movmemSI60
     69__movmemSI60:
     70	mov.l	@(56,r5),r0
     71	mov.l	r0,@(56,r4)
     72	.global	__movmemSI56
     73	.global __movstrSI56
     74	.set	__movstrSI56, __movmemSI56
     75__movmemSI56:
     76	mov.l	@(52,r5),r0
     77	mov.l	r0,@(52,r4)
     78	.global	__movmemSI52
     79	.global __movstrSI52
     80	.set	__movstrSI52, __movmemSI52
     81__movmemSI52:
     82	mov.l	@(48,r5),r0
     83	mov.l	r0,@(48,r4)
     84	.global	__movmemSI48
     85	.global	__movstrSI48
     86	.set	__movstrSI48, __movmemSI48
     87__movmemSI48:
     88	mov.l	@(44,r5),r0
     89	mov.l	r0,@(44,r4)
     90	.global	__movmemSI44
     91	.global	__movstrSI44
     92	.set	__movstrSI44, __movmemSI44
     93__movmemSI44:
     94	mov.l	@(40,r5),r0
     95	mov.l	r0,@(40,r4)
     96	.global	__movmemSI40
     97	.global __movstrSI40
     98	.set	__movstrSI40, __movmemSI40
     99__movmemSI40:
    100	mov.l	@(36,r5),r0
    101	mov.l	r0,@(36,r4)
    102	.global	__movmemSI36
    103	.global	__movstrSI36
    104	.set	__movstrSI36, __movmemSI36
    105__movmemSI36:
    106	mov.l	@(32,r5),r0
    107	mov.l	r0,@(32,r4)
    108	.global	__movmemSI32
    109	.global	__movstrSI32
    110	.set	__movstrSI32, __movmemSI32
    111__movmemSI32:
    112	mov.l	@(28,r5),r0
    113	mov.l	r0,@(28,r4)
    114	.global	__movmemSI28
    115	.global	__movstrSI28
    116	.set	__movstrSI28, __movmemSI28
    117__movmemSI28:
    118	mov.l	@(24,r5),r0
    119	mov.l	r0,@(24,r4)
    120	.global	__movmemSI24
    121	.global	__movstrSI24
    122	.set	__movstrSI24, __movmemSI24
    123__movmemSI24:
    124	mov.l	@(20,r5),r0
    125	mov.l	r0,@(20,r4)
    126	.global	__movmemSI20
    127	.global	__movstrSI20
    128	.set	__movstrSI20, __movmemSI20
    129__movmemSI20:
    130	mov.l	@(16,r5),r0
    131	mov.l	r0,@(16,r4)
    132	.global	__movmemSI16
    133	.global	__movstrSI16
    134	.set	__movstrSI16, __movmemSI16
    135__movmemSI16:
    136	mov.l	@(12,r5),r0
    137	mov.l	r0,@(12,r4)
    138	.global	__movmemSI12
    139	.global	__movstrSI12
    140	.set	__movstrSI12, __movmemSI12
    141__movmemSI12:
    142	mov.l	@(8,r5),r0
    143	mov.l	r0,@(8,r4)
    144	.global	__movmemSI8
    145	.global	__movstrSI8
    146	.set	__movstrSI8, __movmemSI8
    147__movmemSI8:
    148	mov.l	@(4,r5),r0
    149	mov.l	r0,@(4,r4)
    150	.global	__movmemSI4
    151	.global	__movstrSI4
    152	.set	__movstrSI4, __movmemSI4
    153__movmemSI4:
    154	mov.l	@(0,r5),r0
    155	rts
    156	mov.l	r0,@(0,r4)
    157
    158	.global	__movmem_i4_even
    159	.global	__movstr_i4_even
    160	.set	__movstr_i4_even, __movmem_i4_even
    161
    162	.global	__movmem_i4_odd
    163	.global	__movstr_i4_odd
    164	.set	__movstr_i4_odd, __movmem_i4_odd
    165
    166	.global	__movmemSI12_i4
    167	.global	__movstrSI12_i4
    168	.set	__movstrSI12_i4, __movmemSI12_i4
    169
    170	.p2align	5
    171L_movmem_2mod4_end:
    172	mov.l	r0,@(16,r4)
    173	rts
    174	mov.l	r1,@(20,r4)
    175
    176	.p2align	2
    177
    178__movmem_i4_even:
    179	mov.l	@r5+,r0
    180	bra	L_movmem_start_even
    181	mov.l	@r5+,r1
    182
    183__movmem_i4_odd:
    184	mov.l	@r5+,r1
    185	add	#-4,r4
    186	mov.l	@r5+,r2
    187	mov.l	@r5+,r3
    188	mov.l	r1,@(4,r4)
    189	mov.l	r2,@(8,r4)
    190
    191L_movmem_loop:
    192	mov.l	r3,@(12,r4)
    193	dt	r6
    194	mov.l	@r5+,r0
    195	bt/s	L_movmem_2mod4_end
    196	mov.l	@r5+,r1
    197	add	#16,r4
    198L_movmem_start_even:
    199	mov.l	@r5+,r2
    200	mov.l	@r5+,r3
    201	mov.l	r0,@r4
    202	dt	r6
    203	mov.l	r1,@(4,r4)
    204	bf/s	L_movmem_loop
    205	mov.l	r2,@(8,r4)
    206	rts
    207	mov.l	r3,@(12,r4)
    208
    209	.p2align	4
    210__movmemSI12_i4:
    211	mov.l	@r5,r0
    212	mov.l	@(4,r5),r1
    213	mov.l	@(8,r5),r2
    214	mov.l	r0,@r4
    215	mov.l	r1,@(4,r4)
    216	rts
    217	mov.l	r2,@(8,r4)