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

csum_ipv6_magic.S (2980B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * arch/alpha/lib/csum_ipv6_magic.S
      4 * Contributed by Richard Henderson <rth@tamu.edu>
      5 *
      6 * unsigned short csum_ipv6_magic(struct in6_addr *saddr,
      7 *                                struct in6_addr *daddr,
      8 *                                __u32 len,
      9 *                                unsigned short proto,
     10 *                                unsigned int csum);
     11 *
     12 * Misalignment handling (which costs 16 instructions / 8 cycles)
     13 * added by Ivan Kokshaysky <ink@jurassic.park.msu.ru>
     14 */
     15
     16#include <asm/export.h>
     17	.globl csum_ipv6_magic
     18	.align 4
     19	.ent csum_ipv6_magic
     20	.frame $30,0,$26,0
     21csum_ipv6_magic:
     22	.prologue 0
     23
     24	ldq_u	$0,0($16)	# e0    : load src & dst addr words
     25	zapnot	$20,15,$20	# .. e1 : zero extend incoming csum
     26	extqh	$18,1,$4	# e0    : byte swap len & proto while we wait
     27	ldq_u	$21,7($16)	# .. e1 : handle misalignment
     28
     29	extbl	$18,1,$5	# e0	:
     30	ldq_u	$1,8($16)	# .. e1 :
     31	extbl	$18,2,$6	# e0 	:
     32	ldq_u	$22,15($16)	# .. e1 :
     33
     34	extbl	$18,3,$18	# e0	:
     35	ldq_u	$2,0($17)	# .. e1 :
     36	sra	$4,32,$4	# e0	:
     37	ldq_u	$23,7($17)	# .. e1 :
     38
     39	extql	$0,$16,$0	# e0	:
     40	ldq_u	$3,8($17)	# .. e1 :
     41	extqh	$21,$16,$21	# e0	:
     42	ldq_u	$24,15($17)	# .. e1 :
     43
     44	sll	$5,16,$5	# e0	:
     45	or	$0,$21,$0	# .. e1 : 1st src word complete
     46	extql	$1,$16,$1	# e0	:
     47	addq	$20,$0,$20	# .. e1 : begin summing the words
     48
     49	extqh	$22,$16,$22	# e0	:
     50	cmpult	$20,$0,$0	# .. e1 :
     51	sll	$6,8,$6		# e0	:
     52	or	$1,$22,$1	# .. e1 : 2nd src word complete
     53
     54	extql	$2,$17,$2	# e0	:
     55	or	$4,$18,$18	# .. e1 :
     56	extqh	$23,$17,$23	# e0	:
     57	or	$5,$6,$5	# .. e1 :
     58
     59	extql	$3,$17,$3	# e0	:
     60	or	$2,$23,$2	# .. e1 : 1st dst word complete
     61	extqh	$24,$17,$24	# e0	:
     62	or	$18,$5,$18	# .. e1 : len complete
     63
     64	extwh	$19,7,$7	# e0    :
     65	or	$3,$24,$3	# .. e1 : 2nd dst word complete
     66	extbl	$19,1,$19	# e0    :
     67	addq	$20,$1,$20	# .. e1 :
     68
     69	or	$19,$7,$19	# e0    :
     70	cmpult	$20,$1,$1	# .. e1 :
     71	sll	$19,48,$19	# e0    :
     72	nop			# .. e0 :
     73
     74	sra	$19,32,$19	# e0    : proto complete
     75	addq	$20,$2,$20	# .. e1 :
     76	cmpult	$20,$2,$2	# e0    :
     77	addq	$20,$3,$20	# .. e1 :
     78
     79	cmpult	$20,$3,$3	# e0    :
     80	addq	$20,$18,$20	# .. e1 :
     81	cmpult	$20,$18,$18	# e0    :
     82	addq	$20,$19,$20	# .. e1 :
     83
     84	cmpult	$20,$19,$19	# e0    :
     85	addq	$0,$1,$0	# .. e1 : merge the carries back into the csum
     86	addq	$2,$3,$2	# e0    :
     87	addq	$18,$19,$18	# .. e1 :
     88
     89	addq	$0,$2,$0	# e0    :
     90	addq	$20,$18,$20	# .. e1 :
     91	addq	$0,$20,$0	# e0    :
     92	unop			#       :
     93
     94	extwl	$0,2,$2		# e0    : begin folding the 64-bit value
     95	zapnot	$0,3,$3		# .. e1 :
     96	extwl	$0,4,$1		# e0    :
     97	addq	$2,$3,$3	# .. e1 :
     98
     99	extwl	$0,6,$0		# e0    :
    100	addq	$3,$1,$3	# .. e1 :
    101	addq	$0,$3,$0	# e0    :
    102	unop			#       :
    103
    104	extwl	$0,2,$1		# e0    : fold 18-bit value
    105	zapnot	$0,3,$0		# .. e1 :
    106	addq	$0,$1,$0	# e0    :
    107	unop			#       :
    108
    109	extwl	$0,2,$1		# e0    : fold 17-bit value
    110	zapnot	$0,3,$0		# .. e1 :
    111	addq	$0,$1,$0	# e0    :
    112	not	$0,$0		# .. e1 : and complement.
    113
    114	zapnot	$0,3,$0		# e0    :
    115	ret			# .. e1 :
    116
    117	.end csum_ipv6_magic
    118	EXPORT_SYMBOL(csum_ipv6_magic)