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
0426e049
Commit
0426e049
authored
Jan 06, 2001
by
Nick Clifton
Committed by
Nick Clifton
Jan 06, 2001
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Faster __mulsi routine
From-SVN: r38736
parent
f7114e17
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
53 additions
and
45 deletions
+53
-45
gcc/ChangeLog
+5
-0
gcc/config/v850/lib1funcs.asm
+48
-45
No files found.
gcc/ChangeLog
View file @
0426e049
Fri Jan 5 16:34:18 2001 Nick Clifton <nickc@redhat.com>
* config/v850/lib1funcs.asm: Replace __mulsi3 routine with faster
version supplied by Matteo Frigo.
2001-01-05 Neil Booth <neil@daikokuya.demon.co.uk>
* cpp.texi: Update for -MQ.
...
...
gcc/config/v850/lib1funcs.asm
View file @
0426e049
...
...
@@ -33,57 +33,60 @@ Boston, MA 02111-1307, USA. */
.
type
___mulsi3
,
@
function
/*
*
In
order
to
not
deal
with
negative
numbers
(
mulh
is
a
signed
multiply
*
and
we
want
an
unsigned
multiply
,
code
the
multiplication
as
a
series
*
of
7
bit
multiplies
).
*
#
define
SHIFT
12
*
#
define
MASK
((
1
<<
SHIFT
)
-
1
)
*
*
#
define
STEP
(
i
,
j
)
\
*
(
{
\
*
short
a_part
=
(
a
>>
(
i
))
&
MASK
; \
*
short
b_part
=
(
b
>>
(
j
))
&
MASK
; \
*
int
res
=
(((
int
)
a_part
)
*
((
int
)
b_part
))
; \
*
res
; \
*
}
)
*
*
int
__mulsi3
(
unsigned
a
,
unsigned
b
)
*
int
*
__mulsi3
(
unsigned
a
,
unsigned
b
)
*
{
*
int
i
,
j
;
*
int
ret
=
0
;
*
*
for
(
i
=
0
; i < 32; i += 7)
*
{
*
short
a_part
=
a
&
0x7f
;
*
unsigned
b_tmp
=
b
;
*
a
>>=
7
;
*
*
for
(
j
=
0
; (i+j) < 32; j += 7)
*
{
*
short
b_part
=
b_tmp
&
0x7f
;
*
ret
+=
(((
int
)
a_part
)
*
((
int
)
b_part
))
<<
(
i
+
j
)
;
*
b_tmp
>>=
7
;
*
}
*
}
*
*
return
ret
;
*
return
STEP
(
0
,
0
)
+
*
((
STEP
(
SHIFT
,
0
)
+
STEP
(
0
,
SHIFT
))
<<
SHIFT
)
+
*
((
STEP
(
0
,
2
*
SHIFT
)
+
STEP
(
SHIFT
,
SHIFT
)
+
STEP
(
2
*
SHIFT
,
0
))
*
<<
(
2
*
SHIFT
))
;
*
}
*/
___mulsi3
:
mov
0
,
r10
/*
total
*/
mov
0
,
r14
/*
i
=
0
,
index
for
multiply
a
'
s
part
*/
movea
lo
(
31
),
r0
,
r16
/*
upper
bounds
for
loop
*/
.
L5
:
mov
r7
,
r13
/*
b_tmp
=
b
*/
andi
0x7f
,
r6
,
r15
/*
a_part
=
(
a
&
127
)
*/
shr
7
,
r6
/*
a
>>=
7
*/
mov
r14
,
r12
/*
i
+
j
=
i
*/
.
L9
:
andi
0x7f
,
r13
,
r11
/*
b_part
=
(
b_tmp
&
127
)
*/
mulh
r15
,
r11
/*
((
int
)
a_part
)
*
((
int
)
b_part
)
*/
shr
7
,
r13
/*
b_tmp
>>=
7
*/
shl
r12
,
r11
/*
(((
int
)
a_part
)
*
((
int
)
b_part
))
<<
(
i
+
j
)
*/
add
r11
,
r10
/*
ret
+=
(((
int
)
a_part
)
*
((
int
)
b_part
))
<<
(
i
+
j
)
*/
add
7
,
r12
/*
i
+
j
+=
7
*/
cmp
r16
,
r12
/*
i
+
j
<
32
*/
ble
.
L9
add
7
,
r14
/*
i
+=
7
*/
cmp
r16
,
r14
/*
i
<
32
*/
ble
.
L5
jmp
[r31]
/*
return
*/
mov
r6
,
r13
movea
lo
(
4095
),
r0
,
r16
and
r16
,
r13
mov
r7
,
r15
and
r16
,
r15
mov
r13
,
r10
mulh
r15
,
r10
shr
12
,
r6
mov
r6
,
r14
and
r16
,
r14
mov
r14
,
r11
mulh
r15
,
r11
shr
12
,
r7
mov
r7
,
r12
and
r16
,
r12
shr
12
,
r7
and
r16
,
r7
mulh
r13
,
r7
shr
12
,
r6
mulh
r12
,
r13
and
r16
,
r6
add
r13
,
r11
shl
12
,
r11
add
r11
,
r10
mov
r14
,
r11
mulh
r12
,
r11
mulh
r15
,
r6
add
r11
,
r7
add
r6
,
r7
shl
24
,
r7
add
r7
,
r10
jmp
[r31]
.
size
___mulsi3
,.
-
___mulsi3
#
endif
...
...
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