Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
51a6c5b3
Commit
51a6c5b3
authored
Apr 04, 2007
by
Richard Henderson
Committed by
Richard Henderson
Apr 04, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* config/alpha/lib1funcs.asm: Remove unused file.
From-SVN: r123510
parent
5a05e7d4
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
4 additions
and
320 deletions
+4
-320
gcc/ChangeLog
+4
-0
gcc/config/alpha/lib1funcs.asm
+0
-320
No files found.
gcc/ChangeLog
View file @
51a6c5b3
2007-04-04 Richard Henderson <rth@redhat.com>
* config/alpha/lib1funcs.asm: Remove unused file.
2007-04-04 Brooks Moses <brooks.moses@codesourcery.com>
PR other/31356
...
...
gcc/config/alpha/lib1funcs.asm
deleted
100644 → 0
View file @
5a05e7d4
/*
DEC
Alpha
division
and
remainder
support
.
Copyright
(
C
)
1994
,
1999
Free
Software
Foundation
,
Inc
.
This
file
is
free
software
; you can redistribute it and/or modify it
under
the
terms
of
the
GNU
General
Public
License
as
published
by
the
Free
Software
Foundation
; either version 2, or (at your option) any
later
version
.
In
addition
to
the
permissions
in
the
GNU
General
Public
License
,
the
Free
Software
Foundation
gives
you
unlimited
permission
to
link
the
compiled
version
of
this
file
into
combinations
with
other
programs
,
and
to
distribute
those
combinations
without
any
restriction
coming
from
the
use
of
this
file
.
(
The
General
Public
License
restrictions
do
apply
in
other
respects
; for example, they cover modification of
the
file
,
and
distribution
when
not
linked
into
a
combine
executable
.)
This
file
is
distributed
in
the
hope
that
it
will
be
useful
,
but
WITHOUT
ANY
WARRANTY
; without even the implied warranty of
MERCHANTABILITY
or
FITNESS
FOR
A
PARTICULAR
PURPOSE
.
See
the
GNU
General
Public
License
for
more
details
.
You
should
have
received
a
copy
of
the
GNU
General
Public
License
along
with
this
program
; see the file COPYING. If not, write to
the
Free
Software
Foundation
,
51
Franklin
Street
,
Fifth
Floor
,
Boston
,
MA
02110
-
1301
,
USA
.
*/
/*
This
had
to
be
written
in
assembler
because
the
division
functions
use
a
non
-
standard
calling
convention
.
This
file
provides
an
implementation
of
__divqu
,
__divq
,
__divlu
,
__divl
,
__remqu
,
__remq
,
__remlu
and
__reml
.
CPP
macros
control
the
exact
operation
.
Operation
performed
:
$
27
:=
$
24
o
$
25
,
clobber
$
28
,
return
address
to
caller
in
$
23
,
where
o
one
of
the
operations
.
The
following
macros
need
to
be
defined
:
SIZE
,
the
number
of
bits
,
32
or
64
.
TYPE
,
either
UNSIGNED
or
SIGNED
OPERATION
,
either
DIVISION
or
REMAINDER
SPECIAL_CALLING_CONVENTION
,
0
or
1
.
It
is
useful
for
debugging
to
define
this
to
0
.
That
removes
the
`
__
'
prefix
to
make
the
function
name
not
collide
with
the
existing
libc
.
a
names
,
and
uses
the
standard
Alpha
procedure
calling
convention
.
*/
#
ifndef
SPECIAL_CALLING_CONVENTION
#
define
SPECIAL_CALLING_CONVENTION
1
#
endif
#
ifdef
L_divl
#
if
SPECIAL_CALLING_CONVENTION
#
define
FUNCTION_NAME
__divl
#
else
#
define
FUNCTION_NAME
divl
#
endif
#
define
SIZE
32
#
define
TYPE
SIGNED
#
define
OPERATION
DIVISION
#
endif
#
ifdef
L_divlu
#
if
SPECIAL_CALLING_CONVENTION
#
define
FUNCTION_NAME
__divlu
#
else
#
define
FUNCTION_NAME
divlu
#
endif
#
define
SIZE
32
#
define
TYPE
UNSIGNED
#
define
OPERATION
DIVISION
#
endif
#
ifdef
L_divq
#
if
SPECIAL_CALLING_CONVENTION
#
define
FUNCTION_NAME
__divq
#
else
#
define
FUNCTION_NAME
divq
#
endif
#
define
SIZE
64
#
define
TYPE
SIGNED
#
define
OPERATION
DIVISION
#
endif
#
ifdef
L_divqu
#
if
SPECIAL_CALLING_CONVENTION
#
define
FUNCTION_NAME
__divqu
#
else
#
define
FUNCTION_NAME
divqu
#
endif
#
define
SIZE
64
#
define
TYPE
UNSIGNED
#
define
OPERATION
DIVISION
#
endif
#
ifdef
L_reml
#
if
SPECIAL_CALLING_CONVENTION
#
define
FUNCTION_NAME
__reml
#
else
#
define
FUNCTION_NAME
reml
#
endif
#
define
SIZE
32
#
define
TYPE
SIGNED
#
define
OPERATION
REMAINDER
#
endif
#
ifdef
L_remlu
#
if
SPECIAL_CALLING_CONVENTION
#
define
FUNCTION_NAME
__remlu
#
else
#
define
FUNCTION_NAME
remlu
#
endif
#
define
SIZE
32
#
define
TYPE
UNSIGNED
#
define
OPERATION
REMAINDER
#
endif
#
ifdef
L_remq
#
if
SPECIAL_CALLING_CONVENTION
#
define
FUNCTION_NAME
__remq
#
else
#
define
FUNCTION_NAME
remq
#
endif
#
define
SIZE
64
#
define
TYPE
SIGNED
#
define
OPERATION
REMAINDER
#
endif
#
ifdef
L_remqu
#
if
SPECIAL_CALLING_CONVENTION
#
define
FUNCTION_NAME
__remqu
#
else
#
define
FUNCTION_NAME
remqu
#
endif
#
define
SIZE
64
#
define
TYPE
UNSIGNED
#
define
OPERATION
REMAINDER
#
endif
#
define
tmp0
$
3
#
define
tmp1
$
28
#
define
cnt
$
1
#
define
result_sign
$
2
#
if
SPECIAL_CALLING_CONVENTION
#
define
N
$
24
#
define
D
$
25
#
define
Q
RETREG
#
define
RETREG
$
27
#
else
#
define
N
$
16
#
define
D
$
17
#
define
Q
RETREG
#
define
RETREG
$
0
#
endif
/*
Misc
symbols
to
make
alpha
assembler
easier
to
read
.
*/
#
define
zero
$
31
#
define
sp
$
30
/*
Symbols
to
make
interface
nicer
.
*/
#
define
UNSIGNED
0
#
define
SIGNED
1
#
define
DIVISION
0
#
define
REMAINDER
1
.
set
noreorder
.
set
noat
.
text
.
align
3
.
globl
FUNCTION_NAME
.
ent
FUNCTION_NAME
FUNCTION_NAME
:
.
frame
$
30
,
0
,
$
26
,
0
.
prologue
0
/*
Under
the
special
calling
convention
,
we
have
to
preserve
all
register
values
but
$
23
and
$
28
.
*/
#
if
SPECIAL_CALLING_CONVENTION
lda
sp
,
-
64
(
sp
)
#
if
OPERATION
==
DIVISION
stq
N
,
0
(
sp
)
#
endif
stq
D
,
8
(
sp
)
stq
cnt
,
16
(
sp
)
stq
result_sign
,
24
(
sp
)
stq
tmp0
,
32
(
sp
)
#
endif
/*
If
we
are
computing
the
remainder
,
move
N
to
the
register
that
is
used
for
the
return
value
,
and
redefine
what
register
is
used
for
N
.
*/
#
if
OPERATION
==
REMAINDER
bis
N
,
N
,
RETREG
#
undef
N
#
define
N
RETREG
#
endif
/*
Perform
conversion
from
32
-
bit
types
to
64
-
bit
types
.
*/
#
if
SIZE
==
32
#
if
TYPE
==
SIGNED
/*
If
there
are
problems
with
the
signed
case
,
add
these
instructions
.
The
caller
should
already
have
done
this
.
addl
N
,
0
,
N
#
sign
extend
N
addl
D
,
0
,
D
#
sign
extend
D
*/
#
else
/*
UNSIGNED
*/
zap
N
,
0xf0
,
N
#
zero
extend
N
(
caller
required
to
sign
extend
)
zap
D
,
0xf0
,
D
#
zero
extend
D
#
endif
#
endif
/*
Check
for
divide
by
zero
.
*/
bne
D
,
$
34
lda
$
16
,
-
2
(
zero
)
call_pal
0xaa
$
34
:
#
if
TYPE
==
SIGNED
#
if
OPERATION
==
DIVISION
xor
N
,
D
,
result_sign
#
else
bis
N
,
N
,
result_sign
#
endif
/*
Get
the
absolute
values
of
N
and
D
.
*/
subq
zero
,
N
,
tmp0
cmovlt
N
,
tmp0
,
N
subq
zero
,
D
,
tmp0
cmovlt
D
,
tmp0
,
D
#
endif
/*
Compute
CNT
=
ceil
(
log2
(
N
))
-
ceil
(
log2
(
D
)).
This
is
the
number
of
divide
iterations
we
will
have
to
perform
.
Should
you
wish
to
optimize
this
,
check
a
few
bits
at
a
time
,
preferably
using
zap
/
zapnot
.
Be
careful
though
,
this
code
runs
fast
fro
the
most
common
cases
,
when
the
quotient
is
small
.
*/
bge
N
,
$
35
bis
zero
,
1
,
cnt
blt
D
,
$
40
.
align
3
$
39
:
addq
D
,
D
,
D
addl
cnt
,
1
,
cnt
bge
D
,
$
39
br
zero
,
$
40
$
35
:
cmpult
N
,
D
,
tmp0
bis
zero
,
zero
,
cnt
bne
tmp0
,
$
42
.
align
3
$
44
:
addq
D
,
D
,
D
cmpult
N
,
D
,
tmp0
addl
cnt
,
1
,
cnt
beq
tmp0
,
$
44
$
42
:
srl
D
,
1
,
D
$
40
:
subl
cnt
,
1
,
cnt
/*
Actual
divide
.
Could
be
optimized
with
unrolling
.
*/
#
if
OPERATION
==
DIVISION
bis
zero
,
zero
,
Q
#
endif
blt
cnt
,
$
46
.
align
3
$
49
:
cmpule
D
,
N
,
tmp1
subq
N
,
D
,
tmp0
srl
D
,
1
,
D
subl
cnt
,
1
,
cnt
cmovne
tmp1
,
tmp0
,
N
#
if
OPERATION
==
DIVISION
addq
Q
,
Q
,
Q
bis
Q
,
tmp1
,
Q
#
endif
bge
cnt
,
$
49
$
46
:
/*
The
result
is
now
in
RETREG
.
NOTE
!
It
was
written
to
RETREG
using
either
N
or
Q
as
a
synonym
!
*/
/*
Change
the
sign
of
the
result
as
needed
.
*/
#
if
TYPE
==
SIGNED
subq
zero
,
RETREG
,
tmp0
cmovlt
result_sign
,
tmp0
,
RETREG
#
endif
/*
Restore
clobbered
registers
.
*/
#
if
SPECIAL_CALLING_CONVENTION
#
if
OPERATION
==
DIVISION
ldq
N
,
0
(
sp
)
#
endif
ldq
D
,
8
(
sp
)
ldq
cnt
,
16
(
sp
)
ldq
result_sign
,
24
(
sp
)
ldq
tmp0
,
32
(
sp
)
lda
sp
,
64
(
sp
)
#
endif
/*
Sign
extend
an
*
unsigned
*
32
-
bit
result
,
as
required
by
the
Alpha
conventions
.
*/
#
if
TYPE
==
UNSIGNED
&&
SIZE
==
32
/*
This
could
be
avoided
by
adding
some
CPP
hair
to
the
divide
loop
.
It
is
probably
not
worth
the
added
complexity
.
*/
addl
RETREG
,
0
,
RETREG
#
endif
#
if
SPECIAL_CALLING_CONVENTION
ret
zero
,(
$
23
),
1
#
else
ret
zero
,(
$
26
),
1
#
endif
.
end
FUNCTION_NAME
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment