]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile: implement LEAQ2/LEAQ4/LEAQ8 opcodes
authorTodd Neal <todd@tneal.org>
Fri, 24 Jul 2015 01:01:40 +0000 (20:01 -0500)
committerTodd Neal <todd@tneal.org>
Fri, 24 Jul 2015 15:16:23 +0000 (15:16 +0000)
Change-Id: I8da76b9a4c5c80e8515e69e105d6349fe3ad9281
Reviewed-on: https://go-review.googlesource.com/12611
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
src/cmd/compile/internal/gc/ssa.go

index d29da9d042f522b90461c419d284b9ef777dee5f..0ea5aa41f175d4d2d4ba3bd2719f16660adfc2d0 100644 (file)
@@ -1538,11 +1538,20 @@ func genValue(v *ssa.Value) {
                p.From.Type = obj.TYPE_REG
                p.To.Type = obj.TYPE_REG
                p.To.Reg = r
-       case ssa.OpAMD64LEAQ1:
+       case ssa.OpAMD64LEAQ1, ssa.OpAMD64LEAQ2, ssa.OpAMD64LEAQ4, ssa.OpAMD64LEAQ8:
                p := Prog(x86.ALEAQ)
                p.From.Type = obj.TYPE_MEM
                p.From.Reg = regnum(v.Args[0])
-               p.From.Scale = 1
+               switch v.Op {
+               case ssa.OpAMD64LEAQ1:
+                       p.From.Scale = 1
+               case ssa.OpAMD64LEAQ2:
+                       p.From.Scale = 2
+               case ssa.OpAMD64LEAQ4:
+                       p.From.Scale = 4
+               case ssa.OpAMD64LEAQ8:
+                       p.From.Scale = 8
+               }
                p.From.Index = regnum(v.Args[1])
                addAux(&p.From, v)
                p.To.Type = obj.TYPE_REG