aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2010-04-30 14:41:04 -0700
committerRobert Griesemer <gri@golang.org>2010-04-30 14:41:04 -0700
commit161b44c76a78ea2b2f04d8c3ba8c8292edac54b4 (patch)
tree57fc2a6b6b8434f6f0c61191c3177beeb24610ea
parentc66b49845c2b8915a033f9957bdcea4a57223125 (diff)
downloadgo-161b44c76a78ea2b2f04d8c3ba8c8292edac54b4.tar.gz
go-161b44c76a78ea2b2f04d8c3ba8c8292edac54b4.zip
big/arith: assembly routines for 386 long shifts (2nd round)
R=rsc CC=golang-dev https://golang.org/cl/986044
-rw-r--r--src/pkg/big/arith_386.s35
1 files changed, 16 insertions, 19 deletions
diff --git a/src/pkg/big/arith_386.s b/src/pkg/big/arith_386.s
index 4ccf217ed2..22fde9ccbf 100644
--- a/src/pkg/big/arith_386.s
+++ b/src/pkg/big/arith_386.s
@@ -101,24 +101,24 @@ E4: CMPL BX, BP // i < n
// func shlVW(z, x *Word, s Word, n int) (c Word)
TEXT ·shlVW(SB),7,$0
- NOP
- JMP ·shlVW_g(SB) // TODO(gri) remove once code below works
-
MOVL z+0(FP), DI
MOVL x+4(FP), SI
MOVL s+8(FP), CX
- MOVL n+12(FP), BP
+ MOVL n+12(FP), BX
+ LEAL (DI)(BX*4), DI
+ LEAL (SI)(BX*4), SI
+ NEGL BX // i = -n
MOVL $0, AX // c = 0
- MOVL $0, BX // i = 0
JMP E8
-L8: MOVL (SI)(BX*8), DX
+L8: MOVL (SI)(BX*4), DX
+ MOVL DX, BP
SHLL CX, DX:AX
- MOVL DX, (DI)(BX*8)
- MOVL (SI)(BX*8), AX // reload (not enough regs to save original DX)
+ MOVL DX, (DI)(BX*4)
+ MOVL BP, AX
ADDL $1, BX // i++
-E8: CMPL BX, BP // i < n
+E8: CMPL BX, $0 // i < 0
JL L8
MOVL $0, DX
@@ -129,9 +129,6 @@ E8: CMPL BX, BP // i < n
// func shrVW(z, x *Word, s Word, n int) (c Word)
TEXT ·shrVW(SB),7,$0
- NOP
- JMP ·shrVW_g(SB) // TODO(gri) remove once code below works
-
MOVL z+0(FP), DI
MOVL x+4(FP), SI
MOVL s+8(FP), CX
@@ -139,10 +136,10 @@ TEXT ·shrVW(SB),7,$0
MOVL $0, AX // c = 0
JMP E9
-L9: MOVL (SI)(BX*8), DX
+L9: MOVL (SI)(BX*4), DX
MOVL DX, BP
SHRL CX, DX:AX
- MOVL DX, (DI)(BX*8)
+ MOVL DX, (DI)(BX*4)
MOVL BP, AX
E9: SUBL $1, BX // i--
@@ -161,9 +158,9 @@ TEXT ·mulAddVWW(SB),7,$0
MOVL y+8(FP), BP
MOVL r+12(FP), CX // c = r
MOVL n+16(FP), BX
- LEAL (SI)(BX*4), SI
- LEAL (DI)(BX*4), DI
- NEGL BX // i = -n
+ LEAL (DI)(BX*4), DI
+ LEAL (SI)(BX*4), SI
+ NEGL BX // i = -n
JMP E5
L5: MOVL (SI)(BX*4), AX
@@ -187,8 +184,8 @@ TEXT ·addMulVVW(SB),7,$0
MOVL x+4(FP), SI
MOVL y+8(FP), BP
MOVL n+12(FP), BX
- LEAL (SI)(BX*4), SI
- LEAL (DI)(BX*4), DI
+ LEAL (DI)(BX*4), DI
+ LEAL (SI)(BX*4), SI
NEGL BX // i = -n
MOVL $0, CX // c = 0
JMP E6