1/* Copyright (C) 1996-2022 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library. If not, see
16 <https://www.gnu.org/licenses/>. */
17
18#include "div_libc.h"
19
20#undef FRAME
21#ifdef __alpha_fix__
22#define FRAME 0
23#else
24#define FRAME 16
25#endif
26
27 .set noat
28
29 .align 4
30 .globl div
31 .ent div
32div:
33 .frame sp, FRAME, ra
34#if FRAME > 0
35 lda sp, -FRAME(sp)
36#endif
37#ifdef PROF
38 .set macro
39 ldgp gp, 0(pv)
40 lda AT, _mcount
41 jsr AT, (AT), _mcount
42 .set nomacro
43 .prologue 1
44#else
45 .prologue 0
46#endif
47
48 beq $18, $divbyzero
49 excb
50 mf_fpcr $f10
51
52 _ITOFT2 $17, $f0, 0, $18, $f1, 8
53
54 cvtqt $f0, $f0
55 cvtqt $f1, $f1
56 divt/c $f0, $f1, $f0
57 cvttq/c $f0, $f0
58 excb
59 mt_fpcr $f10
60 _FTOIT $f0, $0, 0
61
62 mull $0, $18, $1
63 subl $17, $1, $1
64
65 stl $0, 0(a0)
66 stl $1, 4(a0)
67 mov a0, v0
68
69#if FRAME > 0
70 lda sp, FRAME(sp)
71#endif
72 ret
73
74$divbyzero:
75 mov a0, v0
76 lda a0, GEN_INTDIV
77 call_pal PAL_gentrap
78 stl zero, 0(v0)
79 stl zero, 4(v0)
80
81#if FRAME > 0
82 lda sp, FRAME(sp)
83#endif
84 ret
85
86 .end div
87

source code of glibc/sysdeps/alpha/div.S