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

divdi3.S (5084B)


      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#include <asm/export.h>
      9	.text
     10	.align 4
     11	.globl __divdi3
     12__divdi3:
     13	save %sp,-104,%sp
     14	cmp %i0,0
     15	bge .LL40
     16	mov 0,%l4
     17	mov -1,%l4
     18	sub %g0,%i1,%o0
     19	mov %o0,%o5
     20	subcc %g0,%o0,%g0
     21	sub %g0,%i0,%o0
     22	subx %o0,0,%o4
     23	mov %o4,%i0
     24	mov %o5,%i1
     25.LL40:
     26	cmp %i2,0
     27	bge .LL84
     28	mov %i3,%o4
     29	xnor %g0,%l4,%l4
     30	sub %g0,%i3,%o0
     31	mov %o0,%o3
     32	subcc %g0,%o0,%g0
     33	sub %g0,%i2,%o0
     34	subx %o0,0,%o2
     35	mov %o2,%i2
     36	mov %o3,%i3
     37	mov %i3,%o4
     38.LL84:
     39	cmp %i2,0
     40	bne .LL45
     41	mov %i1,%i3
     42	cmp %o4,%i0
     43	bleu .LL46
     44	mov %i3,%o1
     45	mov	32,%g1
     46	subcc	%i0,%o4,%g0
     471:	bcs	5f
     48	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
     49	sub	%i0,%o4,%i0	! this kills msb of n
     50	addx	%i0,%i0,%i0	! so this cannot give carry
     51	subcc	%g1,1,%g1
     522:	bne	1b
     53	 subcc	%i0,%o4,%g0
     54	bcs	3f
     55	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
     56	b	3f
     57	 sub	%i0,%o4,%i0	! this kills msb of n
     584:	sub	%i0,%o4,%i0
     595:	addxcc	%i0,%i0,%i0
     60	bcc	2b
     61	 subcc	%g1,1,%g1
     62! Got carry from n.  Subtract next step to cancel this carry.
     63	bne	4b
     64	 addcc	%o1,%o1,%o1	! shift n1n0 and a 0-bit in lsb
     65	sub	%i0,%o4,%i0
     663:	xnor	%o1,0,%o1
     67	b .LL50
     68	mov 0,%o2
     69.LL46:
     70	cmp %o4,0
     71	bne .LL85
     72	mov %i0,%o2
     73	mov 1,%o0
     74	mov 0,%o1
     75	wr %g0, 0, %y
     76	udiv %o0, %o1, %o0
     77	mov %o0,%o4
     78	mov %i0,%o2
     79.LL85:
     80	mov 0,%g3
     81	mov	32,%g1
     82	subcc	%g3,%o4,%g0
     831:	bcs	5f
     84	 addxcc %o2,%o2,%o2	! shift n1n0 and a q-bit in lsb
     85	sub	%g3,%o4,%g3	! this kills msb of n
     86	addx	%g3,%g3,%g3	! so this cannot give carry
     87	subcc	%g1,1,%g1
     882:	bne	1b
     89	 subcc	%g3,%o4,%g0
     90	bcs	3f
     91	 addxcc %o2,%o2,%o2	! shift n1n0 and a q-bit in lsb
     92	b	3f
     93	 sub	%g3,%o4,%g3	! this kills msb of n
     944:	sub	%g3,%o4,%g3
     955:	addxcc	%g3,%g3,%g3
     96	bcc	2b
     97	 subcc	%g1,1,%g1
     98! Got carry from n.  Subtract next step to cancel this carry.
     99	bne	4b
    100	 addcc	%o2,%o2,%o2	! shift n1n0 and a 0-bit in lsb
    101	sub	%g3,%o4,%g3
    1023:	xnor	%o2,0,%o2
    103	mov %g3,%i0
    104	mov %i3,%o1
    105	mov	32,%g1
    106	subcc	%i0,%o4,%g0
    1071:	bcs	5f
    108	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
    109	sub	%i0,%o4,%i0	! this kills msb of n
    110	addx	%i0,%i0,%i0	! so this cannot give carry
    111	subcc	%g1,1,%g1
    1122:	bne	1b
    113	 subcc	%i0,%o4,%g0
    114	bcs	3f
    115	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
    116	b	3f
    117	 sub	%i0,%o4,%i0	! this kills msb of n
    1184:	sub	%i0,%o4,%i0
    1195:	addxcc	%i0,%i0,%i0
    120	bcc	2b
    121	 subcc	%g1,1,%g1
    122! Got carry from n.  Subtract next step to cancel this carry.
    123	bne	4b
    124	 addcc	%o1,%o1,%o1	! shift n1n0 and a 0-bit in lsb
    125	sub	%i0,%o4,%i0
    1263:	xnor	%o1,0,%o1
    127	b .LL86
    128	mov %o1,%l1
    129.LL45:
    130	cmp %i2,%i0
    131	bleu .LL51
    132	sethi %hi(65535),%o0
    133	b .LL78
    134	mov 0,%o1
    135.LL51:
    136	or %o0,%lo(65535),%o0
    137	cmp %i2,%o0
    138	bgu .LL58
    139	mov %i2,%o1
    140	cmp %i2,256
    141	addx %g0,-1,%o0
    142	b .LL64
    143	and %o0,8,%o2
    144.LL58:
    145	sethi %hi(16777215),%o0
    146	or %o0,%lo(16777215),%o0
    147	cmp %i2,%o0
    148	bgu .LL64
    149	mov 24,%o2
    150	mov 16,%o2
    151.LL64:
    152	srl %o1,%o2,%o0
    153	sethi %hi(__clz_tab),%o1
    154	or %o1,%lo(__clz_tab),%o1
    155	ldub [%o0+%o1],%o0
    156	add %o0,%o2,%o0
    157	mov 32,%o1
    158	subcc %o1,%o0,%o3
    159	bne,a .LL72
    160	sub %o1,%o3,%o1
    161	cmp %i0,%i2
    162	bgu .LL74
    163	cmp %i3,%o4
    164	blu .LL78
    165	mov 0,%o1
    166.LL74:
    167	b .LL78
    168	mov 1,%o1
    169.LL72:
    170	sll %i2,%o3,%o2
    171	srl %o4,%o1,%o0
    172	or %o2,%o0,%i2
    173	sll %o4,%o3,%o4
    174	srl %i0,%o1,%o2
    175	sll %i0,%o3,%o0
    176	srl %i3,%o1,%o1
    177	or %o0,%o1,%i0
    178	sll %i3,%o3,%i3
    179	mov %i0,%o1
    180	mov	32,%g1
    181	subcc	%o2,%i2,%g0
    1821:	bcs	5f
    183	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
    184	sub	%o2,%i2,%o2	! this kills msb of n
    185	addx	%o2,%o2,%o2	! so this cannot give carry
    186	subcc	%g1,1,%g1
    1872:	bne	1b
    188	 subcc	%o2,%i2,%g0
    189	bcs	3f
    190	 addxcc %o1,%o1,%o1	! shift n1n0 and a q-bit in lsb
    191	b	3f
    192	 sub	%o2,%i2,%o2	! this kills msb of n
    1934:	sub	%o2,%i2,%o2
    1945:	addxcc	%o2,%o2,%o2
    195	bcc	2b
    196	 subcc	%g1,1,%g1
    197! Got carry from n.  Subtract next step to cancel this carry.
    198	bne	4b
    199	 addcc	%o1,%o1,%o1	! shift n1n0 and a 0-bit in lsb
    200	sub	%o2,%i2,%o2
    2013:	xnor	%o1,0,%o1
    202	mov %o2,%i0
    203	wr	%g0,%o1,%y	! SPARC has 0-3 delay insn after a wr
    204	sra	%o4,31,%g2	! Do not move this insn
    205	and	%o1,%g2,%g2	! Do not move this insn
    206	andcc	%g0,0,%g1	! Do not move this insn
    207	mulscc	%g1,%o4,%g1
    208	mulscc	%g1,%o4,%g1
    209	mulscc	%g1,%o4,%g1
    210	mulscc	%g1,%o4,%g1
    211	mulscc	%g1,%o4,%g1
    212	mulscc	%g1,%o4,%g1
    213	mulscc	%g1,%o4,%g1
    214	mulscc	%g1,%o4,%g1
    215	mulscc	%g1,%o4,%g1
    216	mulscc	%g1,%o4,%g1
    217	mulscc	%g1,%o4,%g1
    218	mulscc	%g1,%o4,%g1
    219	mulscc	%g1,%o4,%g1
    220	mulscc	%g1,%o4,%g1
    221	mulscc	%g1,%o4,%g1
    222	mulscc	%g1,%o4,%g1
    223	mulscc	%g1,%o4,%g1
    224	mulscc	%g1,%o4,%g1
    225	mulscc	%g1,%o4,%g1
    226	mulscc	%g1,%o4,%g1
    227	mulscc	%g1,%o4,%g1
    228	mulscc	%g1,%o4,%g1
    229	mulscc	%g1,%o4,%g1
    230	mulscc	%g1,%o4,%g1
    231	mulscc	%g1,%o4,%g1
    232	mulscc	%g1,%o4,%g1
    233	mulscc	%g1,%o4,%g1
    234	mulscc	%g1,%o4,%g1
    235	mulscc	%g1,%o4,%g1
    236	mulscc	%g1,%o4,%g1
    237	mulscc	%g1,%o4,%g1
    238	mulscc	%g1,%o4,%g1
    239	mulscc	%g1,0,%g1
    240	add	%g1,%g2,%o0
    241	rd	%y,%o2
    242	cmp %o0,%i0
    243	bgu,a .LL78
    244	add %o1,-1,%o1
    245	bne,a .LL50
    246	mov 0,%o2
    247	cmp %o2,%i3
    248	bleu .LL50
    249	mov 0,%o2
    250	add %o1,-1,%o1
    251.LL78:
    252	mov 0,%o2
    253.LL50:
    254	mov %o1,%l1
    255.LL86:
    256	mov %o2,%l0
    257	mov %l0,%i0
    258	mov %l1,%i1
    259	cmp %l4,0
    260	be .LL81
    261	sub %g0,%i1,%o0
    262	mov %o0,%l3
    263	subcc %g0,%o0,%g0
    264	sub %g0,%i0,%o0
    265	subx %o0,0,%l2
    266	mov %l2,%i0
    267	mov %l3,%i1
    268.LL81:
    269	ret
    270	restore
    271EXPORT_SYMBOL(__divdi3)