Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
go
Commits
73374c93
Commit
73374c93
authored
Apr 19, 2010
by
Evan Shaw
Committed by
Robert Griesemer
Apr 19, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
big: Get rid of function pointers and init function
R=rsc, gri CC=golang-dev
https://golang.org/cl/929041
parent
8df31213
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
89 deletions
+43
-89
src/pkg/big/arith.go
src/pkg/big/arith.go
+7
-53
src/pkg/big/arith_386.s
src/pkg/big/arith_386.s
+15
-15
src/pkg/big/arith_amd64.s
src/pkg/big/arith_amd64.s
+14
-14
src/pkg/big/arith_arm.s
src/pkg/big/arith_arm.s
+7
-7
No files found.
src/pkg/big/arith.go
View file @
73374c93
...
...
@@ -267,58 +267,12 @@ func divWW_g(x1, x0, y Word) (q, r Word) {
}
// ----------------------------------------------------------------------------
// Elementary operations on vectors
// All higher-level functions use these elementary vector operations.
// The function pointers f are initialized with default implementations
// f_g, written in Go for portability. The corresponding assembly routines
// f_s should be installed if they exist.
var
(
// addVV sets z and returns c such that z+c = x+y.
addVV
func
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
=
addVV_g
// subVV sets z and returns c such that z-c = x-y.
subVV
func
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
=
subVV_g
// addVW sets z and returns c such that z+c = x-y.
addVW
func
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
=
addVW_g
// subVW sets z and returns c such that z-c = x-y.
subVW
func
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
=
subVW_g
// mulAddVWW sets z and returns c such that z+c = x*y + r.
mulAddVWW
func
(
z
,
x
*
Word
,
y
,
r
Word
,
n
int
)
(
c
Word
)
=
mulAddVWW_g
// addMulVVW sets z and returns c such that z+c = z + x*y.
addMulVVW
func
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
=
addMulVVW_g
// divWVW sets z and returns r such that z-r = (xn<<(n*_W) + x) / y.
divWVW
func
(
z
*
Word
,
xn
Word
,
x
*
Word
,
y
Word
,
n
int
)
(
r
Word
)
=
divWVW_g
)
func
init
()
{
// Uncomment to use generic routines.
//return;
// Install assembly routines.
addVV
=
addVV_s
subVV
=
subVV_s
addVW
=
addVW_s
subVW
=
subVW_s
mulAddVWW
=
mulAddVWW_s
addMulVVW
=
addMulVVW_s
divWVW
=
divWVW_s
}
func
(
p
*
Word
)
at
(
i
int
)
*
Word
{
return
(
*
Word
)(
unsafe
.
Pointer
(
uintptr
(
unsafe
.
Pointer
(
p
))
+
uintptr
(
i
)
*
_S
))
}
func
addVV
_s
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
func
addVV
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
func
addVV_g
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
{
for
i
:=
0
;
i
<
n
;
i
++
{
c
,
*
z
.
at
(
i
)
=
addWW_g
(
*
x
.
at
(
i
),
*
y
.
at
(
i
),
c
)
...
...
@@ -327,7 +281,7 @@ func addVV_g(z, x, y *Word, n int) (c Word) {
}
func
subVV
_s
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
func
subVV
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
func
subVV_g
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
{
for
i
:=
0
;
i
<
n
;
i
++
{
c
,
*
z
.
at
(
i
)
=
subWW_g
(
*
x
.
at
(
i
),
*
y
.
at
(
i
),
c
)
...
...
@@ -336,7 +290,7 @@ func subVV_g(z, x, y *Word, n int) (c Word) {
}
func
addVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
func
addVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
func
addVW_g
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
{
c
=
y
for
i
:=
0
;
i
<
n
;
i
++
{
...
...
@@ -346,7 +300,7 @@ func addVW_g(z, x *Word, y Word, n int) (c Word) {
}
func
subVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
func
subVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
func
subVW_g
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
{
c
=
y
for
i
:=
0
;
i
<
n
;
i
++
{
...
...
@@ -356,7 +310,7 @@ func subVW_g(z, x *Word, y Word, n int) (c Word) {
}
func
mulAddVWW
_s
(
z
,
x
*
Word
,
y
,
r
Word
,
n
int
)
(
c
Word
)
func
mulAddVWW
(
z
,
x
*
Word
,
y
,
r
Word
,
n
int
)
(
c
Word
)
func
mulAddVWW_g
(
z
,
x
*
Word
,
y
,
r
Word
,
n
int
)
(
c
Word
)
{
c
=
r
for
i
:=
0
;
i
<
n
;
i
++
{
...
...
@@ -366,7 +320,7 @@ func mulAddVWW_g(z, x *Word, y, r Word, n int) (c Word) {
}
func
addMulVVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
func
addMulVVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
func
addMulVVW_g
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
{
for
i
:=
0
;
i
<
n
;
i
++
{
z1
,
z0
:=
mulAddWWW_g
(
*
x
.
at
(
i
),
y
,
*
z
.
at
(
i
))
...
...
@@ -377,7 +331,7 @@ func addMulVVW_g(z, x *Word, y Word, n int) (c Word) {
}
func
divWVW
_s
(
z
*
Word
,
xn
Word
,
x
*
Word
,
y
Word
,
n
int
)
(
r
Word
)
func
divWVW
(
z
*
Word
,
xn
Word
,
x
*
Word
,
y
Word
,
n
int
)
(
r
Word
)
func
divWVW_g
(
z
*
Word
,
xn
Word
,
x
*
Word
,
y
Word
,
n
int
)
(
r
Word
)
{
r
=
xn
for
i
:=
n
-
1
;
i
>=
0
;
i
--
{
...
...
src/pkg/big/arith_386.s
View file @
73374c93
...
...
@@ -5,8 +5,8 @@
//
This
file
provides
fast
assembly
versions
for
the
elementary
//
arithmetic
operations
on
vectors
implemented
in
arith
.
go
.
//
func
addVV
_s
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
TEXT
·
addVV
_s
(
SB
),7,$0
//
func
addVV
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
TEXT
·
addVV
(
SB
),7,$0
MOVL
z
+
0
(
FP
),
DI
MOVL
x
+
4
(
FP
),
SI
MOVL
y
+
8
(
FP
),
CX
...
...
@@ -29,9 +29,9 @@ E1: CMPL BX, BP // i < n
RET
//
func
subVV
_s
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
//
(
same
as
addVV
_s
except
for
SBBL
instead
of
ADCL
and
label
names
)
TEXT
·
subVV
_s
(
SB
),7,$0
//
func
subVV
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
//
(
same
as
addVV
except
for
SBBL
instead
of
ADCL
and
label
names
)
TEXT
·
subVV
(
SB
),7,$0
MOVL
z
+
0
(
FP
),
DI
MOVL
x
+
4
(
FP
),
SI
MOVL
y
+
8
(
FP
),
CX
...
...
@@ -54,8 +54,8 @@ E2: CMPL BX, BP // i < n
RET
//
func
addVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
addVW
_s
(
SB
),7,$0
//
func
addVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
addVW
(
SB
),7,$0
MOVL
z
+
0
(
FP
),
DI
MOVL
x
+
4
(
FP
),
SI
MOVL
y
+
8
(
FP
),
AX
//
c
=
y
...
...
@@ -76,8 +76,8 @@ E3: CMPL BX, BP // i < n
RET
//
func
subVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
subVW
_s
(
SB
),7,$0
//
func
subVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
subVW
(
SB
),7,$0
MOVL
z
+
0
(
FP
),
DI
MOVL
x
+
4
(
FP
),
SI
MOVL
y
+
8
(
FP
),
AX
//
c
=
y
...
...
@@ -99,8 +99,8 @@ E4: CMPL BX, BP // i < n
RET
//
func
mulAddVWW
_s
(
z
,
x
*
Word
,
y
,
r
Word
,
n
int
)
(
c
Word
)
TEXT
·
mulAddVWW
_s
(
SB
),7,$0
//
func
mulAddVWW
(
z
,
x
*
Word
,
y
,
r
Word
,
n
int
)
(
c
Word
)
TEXT
·
mulAddVWW
(
SB
),7,$0
MOVL
z
+
0
(
FP
),
DI
MOVL
x
+
4
(
FP
),
SI
MOVL
y
+
8
(
FP
),
BP
...
...
@@ -126,8 +126,8 @@ E5: CMPL BX, $0 // i < 0
RET
//
func
addMulVVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
addMulVVW
_s
(
SB
),7,$0
//
func
addMulVVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
addMulVVW
(
SB
),7,$0
MOVL
z
+
0
(
FP
),
DI
MOVL
x
+
4
(
FP
),
SI
MOVL
y
+
8
(
FP
),
BP
...
...
@@ -155,8 +155,8 @@ E6: CMPL BX, $0 // i < 0
RET
//
divWVW
_s
(
z
*
Word
,
xn
Word
,
x
*
Word
,
y
Word
,
n
int
)
(
r
Word
)
TEXT
·
divWVW
_s
(
SB
),7,$0
//
divWVW
(
z
*
Word
,
xn
Word
,
x
*
Word
,
y
Word
,
n
int
)
(
r
Word
)
TEXT
·
divWVW
(
SB
),7,$0
MOVL
z
+
0
(
FP
),
DI
MOVL
xn
+
4
(
FP
),
DX
//
r
=
xn
MOVL
x
+
8
(
FP
),
SI
...
...
src/pkg/big/arith_amd64.s
View file @
73374c93
...
...
@@ -7,8 +7,8 @@
//
TODO
(
gri
)
-
experiment
with
unrolled
loops
for
faster
execution
//
func
addVV
_s
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
TEXT
·
addVV
_s
(
SB
),7,$0
//
func
addVV
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
TEXT
·
addVV
(
SB
),7,$0
MOVQ
z
+
0
(
FP
),
R10
MOVQ
x
+
8
(
FP
),
R8
MOVQ
y
+
16
(
FP
),
R9
...
...
@@ -31,9 +31,9 @@ E1: CMPQ BX, R11 // i < n
RET
//
func
subVV
_s
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
//
func
subVV
(
z
,
x
,
y
*
Word
,
n
int
)
(
c
Word
)
//
(
same
as
addVV_s
except
for
SBBQ
instead
of
ADCQ
and
label
names
)
TEXT
·
subVV
_s
(
SB
),7,$0
TEXT
·
subVV
(
SB
),7,$0
MOVQ
z
+
0
(
FP
),
R10
MOVQ
x
+
8
(
FP
),
R8
MOVQ
y
+
16
(
FP
),
R9
...
...
@@ -56,8 +56,8 @@ E2: CMPQ BX, R11 // i < n
RET
//
func
addVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
addVW
_s
(
SB
),7,$0
//
func
addVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
addVW
(
SB
),7,$0
MOVQ
z
+
0
(
FP
),
R10
MOVQ
x
+
8
(
FP
),
R8
MOVQ
y
+
16
(
FP
),
AX
//
c
=
y
...
...
@@ -78,8 +78,8 @@ E3: CMPQ BX, R11 // i < n
RET
//
func
subVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
subVW
_s
(
SB
),7,$0
//
func
subVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
subVW
(
SB
),7,$0
MOVQ
z
+
0
(
FP
),
R10
MOVQ
x
+
8
(
FP
),
R8
MOVQ
y
+
16
(
FP
),
AX
//
c
=
y
...
...
@@ -101,8 +101,8 @@ E4: CMPQ BX, R11 // i < n
RET
//
func
mulAddVWW
_s
(
z
,
x
*
Word
,
y
,
r
Word
,
n
int
)
(
c
Word
)
TEXT
·
mulAddVWW
_s
(
SB
),7,$0
//
func
mulAddVWW
(
z
,
x
*
Word
,
y
,
r
Word
,
n
int
)
(
c
Word
)
TEXT
·
mulAddVWW
(
SB
),7,$0
MOVQ
z
+
0
(
FP
),
R10
MOVQ
x
+
8
(
FP
),
R8
MOVQ
y
+
16
(
FP
),
R9
...
...
@@ -126,8 +126,8 @@ E5: CMPQ BX, R11 // i < n
RET
//
func
addMulVVW
_s
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
addMulVVW
_s
(
SB
),7,$0
//
func
addMulVVW
(
z
,
x
*
Word
,
y
Word
,
n
int
)
(
c
Word
)
TEXT
·
addMulVVW
(
SB
),7,$0
MOVQ
z
+
0
(
FP
),
R10
MOVQ
x
+
8
(
FP
),
R8
MOVQ
y
+
16
(
FP
),
R9
...
...
@@ -153,8 +153,8 @@ E6: CMPQ BX, R11 // i < n
RET
//
divWVW
_s
(
z
*
Word
,
xn
Word
,
x
*
Word
,
y
Word
,
n
int
)
(
r
Word
)
TEXT
·
divWVW
_s
(
SB
),7,$0
//
divWVW
(
z
*
Word
,
xn
Word
,
x
*
Word
,
y
Word
,
n
int
)
(
r
Word
)
TEXT
·
divWVW
(
SB
),7,$0
MOVQ
z
+
0
(
FP
),
R10
MOVQ
xn
+
8
(
FP
),
DX
//
r
=
xn
MOVQ
x
+
16
(
FP
),
R8
...
...
src/pkg/big/arith_arm.s
View file @
73374c93
...
...
@@ -6,24 +6,24 @@
//
arithmetic
operations
on
vectors
implemented
in
arith
.
go
.
//
TODO
(
gri
)
Implement
these
routines
.
TEXT
·
addVV
_s
(
SB
),7,$0
TEXT
·
addVV
(
SB
),7,$0
B
·
addVV_g
(
SB
)
TEXT
·
subVV
_s
(
SB
),7,$0
TEXT
·
subVV
(
SB
),7,$0
B
·
subVV_g
(
SB
)
TEXT
·
addVW
_s
(
SB
),7,$0
TEXT
·
addVW
(
SB
),7,$0
B
·
addVW_g
(
SB
)
TEXT
·
subVW
_s
(
SB
),7,$0
TEXT
·
subVW
(
SB
),7,$0
B
·
subVW_g
(
SB
)
TEXT
·
mulAddVWW
_s
(
SB
),7,$0
TEXT
·
mulAddVWW
(
SB
),7,$0
B
·
mulAddVWW_g
(
SB
)
TEXT
·
addMulVVW
_s
(
SB
),7,$0
TEXT
·
addMulVVW
(
SB
),7,$0
B
·
addMulVVW_g
(
SB
)
TEXT
·
divWVW
_s
(
SB
),7,$0
TEXT
·
divWVW
(
SB
),7,$0
B
·
divWVW_g
(
SB
)
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