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

udivdi3.S (4833B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
      3
      4This file is part of GNU CC.
      5
      6 */
      7
      8	.text
      9	.align 4
     10	.globl __udivdi3
     11__udivdi3:
     12	save %sp,-104,%sp
     13	mov %i3,%o3
     14	cmp %i2,0
     15	bne .LL40
     16	mov %i1,%i3
     17	cmp %o3,%i0
     18	bleu .LL41
     19	mov %i3,%o1
     20	! Inlined udiv_qrnnd
     21	mov	32,%g1
     22	subcc	%i0,%o3,%g0
     231:	bcs	5f
     24	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
     25	sub	%i0,%o3,%i0	! this kills msb of n
     26	addx	%i0,%i0,%i0	! so this cannot give carry
     27	subcc	%g1,1,%g1
     282:	bne	1b
     29	 subcc	%i0,%o3,%g0
     30	bcs	3f
     31	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
     32	b	3f
     33	 sub	%i0,%o3,%i0	! this kills msb of n
     344:	sub	%i0,%o3,%i0
     355:	addxcc	%i0,%i0,%i0
     36	bcc	2b
     37	 subcc	%g1,1,%g1
     38! Got carry from n.  Subtract next step to cancel this carry.
     39	bne	4b
     40	 addcc	%o1,%o1,%o1	! shift n1n0 and a 0-bit in lsb
     41	sub	%i0,%o3,%i0
     423:	xnor	%o1,0,%o1
     43	! End of inline udiv_qrnnd
     44	b .LL45
     45	mov 0,%o2
     46.LL41:
     47	cmp %o3,0
     48	bne .LL77
     49	mov %i0,%o2
     50	mov 1,%o0
     51	mov 0,%o1
     52	wr %g0, 0, %y
     53	udiv %o0, %o1, %o0
     54	mov %o0,%o3
     55	mov %i0,%o2
     56.LL77:
     57	mov 0,%o4
     58	! Inlined udiv_qrnnd
     59	mov	32,%g1
     60	subcc	%o4,%o3,%g0
     611:	bcs	5f
     62	 addxcc %o2,%o2,%o2	! shift n1n0 and a q-bit in lsb
     63	sub	%o4,%o3,%o4	! this kills msb of n
     64	addx	%o4,%o4,%o4	! so this cannot give carry
     65	subcc	%g1,1,%g1
     662:	bne	1b
     67	 subcc	%o4,%o3,%g0
     68	bcs	3f
     69	 addxcc %o2,%o2,%o2	! shift n1n0 and a q-bit in lsb
     70	b	3f
     71	 sub	%o4,%o3,%o4	! this kills msb of n
     724:	sub	%o4,%o3,%o4
     735:	addxcc	%o4,%o4,%o4
     74	bcc	2b
     75	 subcc	%g1,1,%g1
     76! Got carry from n.  Subtract next step to cancel this carry.
     77	bne	4b
     78	 addcc	%o2,%o2,%o2	! shift n1n0 and a 0-bit in lsb
     79	sub	%o4,%o3,%o4
     803:	xnor	%o2,0,%o2
     81	! End of inline udiv_qrnnd
     82	mov %o4,%i0
     83	mov %i3,%o1
     84	! Inlined udiv_qrnnd
     85	mov	32,%g1
     86	subcc	%i0,%o3,%g0
     871:	bcs	5f
     88	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
     89	sub	%i0,%o3,%i0	! this kills msb of n
     90	addx	%i0,%i0,%i0	! so this cannot give carry
     91	subcc	%g1,1,%g1
     922:	bne	1b
     93	 subcc	%i0,%o3,%g0
     94	bcs	3f
     95	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
     96	b	3f
     97	 sub	%i0,%o3,%i0	! this kills msb of n
     984:	sub	%i0,%o3,%i0
     995:	addxcc	%i0,%i0,%i0
    100	bcc	2b
    101	 subcc	%g1,1,%g1
    102! Got carry from n.  Subtract next step to cancel this carry.
    103	bne	4b
    104	 addcc	%o1,%o1,%o1	! shift n1n0 and a 0-bit in lsb
    105	sub	%i0,%o3,%i0
    1063:	xnor	%o1,0,%o1
    107	! End of inline udiv_qrnnd
    108	b .LL78
    109	mov %o1,%l1
    110.LL40:
    111	cmp %i2,%i0
    112	bleu .LL46
    113	sethi %hi(65535),%o0
    114	b .LL73
    115	mov 0,%o1
    116.LL46:
    117	or %o0,%lo(65535),%o0
    118	cmp %i2,%o0
    119	bgu .LL53
    120	mov %i2,%o1
    121	cmp %i2,256
    122	addx %g0,-1,%o0
    123	b .LL59
    124	and %o0,8,%o2
    125.LL53:
    126	sethi %hi(16777215),%o0
    127	or %o0,%lo(16777215),%o0
    128	cmp %o1,%o0
    129	bgu .LL59
    130	mov 24,%o2
    131	mov 16,%o2
    132.LL59:
    133	srl %o1,%o2,%o1
    134	sethi %hi(__clz_tab),%o0
    135	or %o0,%lo(__clz_tab),%o0
    136	ldub [%o1+%o0],%o0
    137	add %o0,%o2,%o0
    138	mov 32,%o1
    139	subcc %o1,%o0,%o2
    140	bne,a .LL67
    141	mov 32,%o0
    142	cmp %i0,%i2
    143	bgu .LL69
    144	cmp %i3,%o3
    145	blu .LL73
    146	mov 0,%o1
    147.LL69:
    148	b .LL73
    149	mov 1,%o1
    150.LL67:
    151	sub %o0,%o2,%o0
    152	sll %i2,%o2,%i2
    153	srl %o3,%o0,%o1
    154	or %i2,%o1,%i2
    155	sll %o3,%o2,%o3
    156	srl %i0,%o0,%o1
    157	sll %i0,%o2,%i0
    158	srl %i3,%o0,%o0
    159	or %i0,%o0,%i0
    160	sll %i3,%o2,%i3
    161	mov %i0,%o5
    162	mov %o1,%o4
    163	! Inlined udiv_qrnnd
    164	mov	32,%g1
    165	subcc	%o4,%i2,%g0
    1661:	bcs	5f
    167	 addxcc %o5,%o5,%o5	! shift n1n0 and a q-bit in lsb
    168	sub	%o4,%i2,%o4	! this kills msb of n
    169	addx	%o4,%o4,%o4	! so this cannot give carry
    170	subcc	%g1,1,%g1
    1712:	bne	1b
    172	 subcc	%o4,%i2,%g0
    173	bcs	3f
    174	 addxcc %o5,%o5,%o5	! shift n1n0 and a q-bit in lsb
    175	b	3f
    176	 sub	%o4,%i2,%o4	! this kills msb of n
    1774:	sub	%o4,%i2,%o4
    1785:	addxcc	%o4,%o4,%o4
    179	bcc	2b
    180	 subcc	%g1,1,%g1
    181! Got carry from n.  Subtract next step to cancel this carry.
    182	bne	4b
    183	 addcc	%o5,%o5,%o5	! shift n1n0 and a 0-bit in lsb
    184	sub	%o4,%i2,%o4
    1853:	xnor	%o5,0,%o5
    186	! End of inline udiv_qrnnd
    187	mov %o4,%i0
    188	mov %o5,%o1
    189	! Inlined umul_ppmm
    190	wr	%g0,%o1,%y	! SPARC has 0-3 delay insn after a wr
    191	sra	%o3,31,%g2	! Do not move this insn
    192	and	%o1,%g2,%g2	! Do not move this insn
    193	andcc	%g0,0,%g1	! Do not move this insn
    194	mulscc	%g1,%o3,%g1
    195	mulscc	%g1,%o3,%g1
    196	mulscc	%g1,%o3,%g1
    197	mulscc	%g1,%o3,%g1
    198	mulscc	%g1,%o3,%g1
    199	mulscc	%g1,%o3,%g1
    200	mulscc	%g1,%o3,%g1
    201	mulscc	%g1,%o3,%g1
    202	mulscc	%g1,%o3,%g1
    203	mulscc	%g1,%o3,%g1
    204	mulscc	%g1,%o3,%g1
    205	mulscc	%g1,%o3,%g1
    206	mulscc	%g1,%o3,%g1
    207	mulscc	%g1,%o3,%g1
    208	mulscc	%g1,%o3,%g1
    209	mulscc	%g1,%o3,%g1
    210	mulscc	%g1,%o3,%g1
    211	mulscc	%g1,%o3,%g1
    212	mulscc	%g1,%o3,%g1
    213	mulscc	%g1,%o3,%g1
    214	mulscc	%g1,%o3,%g1
    215	mulscc	%g1,%o3,%g1
    216	mulscc	%g1,%o3,%g1
    217	mulscc	%g1,%o3,%g1
    218	mulscc	%g1,%o3,%g1
    219	mulscc	%g1,%o3,%g1
    220	mulscc	%g1,%o3,%g1
    221	mulscc	%g1,%o3,%g1
    222	mulscc	%g1,%o3,%g1
    223	mulscc	%g1,%o3,%g1
    224	mulscc	%g1,%o3,%g1
    225	mulscc	%g1,%o3,%g1
    226	mulscc	%g1,0,%g1
    227	add	%g1,%g2,%o0
    228	rd	%y,%o2
    229	cmp %o0,%i0
    230	bgu,a .LL73
    231	add %o1,-1,%o1
    232	bne,a .LL45
    233	mov 0,%o2
    234	cmp %o2,%i3
    235	bleu .LL45
    236	mov 0,%o2
    237	add %o1,-1,%o1
    238.LL73:
    239	mov 0,%o2
    240.LL45:
    241	mov %o1,%l1
    242.LL78:
    243	mov %o2,%l0
    244	mov %l0,%i0
    245	mov %l1,%i1
    246	ret
    247	restore