]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile: add a few more binary ops
authorJosh Bleecher Snyder <josharian@gmail.com>
Tue, 28 Jul 2015 21:14:25 +0000 (14:14 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 28 Jul 2015 23:04:40 +0000 (23:04 +0000)
With this, all non-float, non-complex
binary ops found in the standard library
are implemented.

Change-Id: I6087f115229888c0dce10ab35db3fd36a0e0a8b1
Reviewed-on: https://go-review.googlesource.com/12799
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/ssa.go

index e26412cf46e618de472f6e95c14d3d247fb2b16f..8eeb29d4bd9ee71dec904bfd0c455c95c849736e 100644 (file)
@@ -702,8 +702,10 @@ var opToSSA = map[opAndType]ssa.Op{
        opAndType{OADD, TUINT16}: ssa.OpAdd16,
        opAndType{OADD, TINT32}:  ssa.OpAdd32,
        opAndType{OADD, TUINT32}: ssa.OpAdd32,
+       opAndType{OADD, TPTR32}:  ssa.OpAdd32,
        opAndType{OADD, TINT64}:  ssa.OpAdd64,
        opAndType{OADD, TUINT64}: ssa.OpAdd64,
+       opAndType{OADD, TPTR64}:  ssa.OpAdd64,
 
        opAndType{OSUB, TINT8}:   ssa.OpSub8,
        opAndType{OSUB, TUINT8}:  ssa.OpSub8,
@@ -761,39 +763,41 @@ var opToSSA = map[opAndType]ssa.Op{
        opAndType{ORSH, TINT64}:  ssa.OpRsh64,
        opAndType{ORSH, TUINT64}: ssa.OpRsh64U,
 
-       opAndType{OEQ, TBOOL}:    ssa.OpEq8,
-       opAndType{OEQ, TINT8}:    ssa.OpEq8,
-       opAndType{OEQ, TUINT8}:   ssa.OpEq8,
-       opAndType{OEQ, TINT16}:   ssa.OpEq16,
-       opAndType{OEQ, TUINT16}:  ssa.OpEq16,
-       opAndType{OEQ, TINT32}:   ssa.OpEq32,
-       opAndType{OEQ, TUINT32}:  ssa.OpEq32,
-       opAndType{OEQ, TINT64}:   ssa.OpEq64,
-       opAndType{OEQ, TUINT64}:  ssa.OpEq64,
-       opAndType{OEQ, TPTR64}:   ssa.OpEq64,
-       opAndType{OEQ, TINTER}:   ssa.OpEqFat, // e == nil only
-       opAndType{OEQ, TARRAY}:   ssa.OpEqFat, // slice only; a == nil only
-       opAndType{OEQ, TFUNC}:    ssa.OpEqPtr,
-       opAndType{OEQ, TMAP}:     ssa.OpEqPtr,
-       opAndType{OEQ, TCHAN}:    ssa.OpEqPtr,
-       opAndType{OEQ, TUINTPTR}: ssa.OpEqPtr,
-
-       opAndType{ONE, TBOOL}:    ssa.OpNeq8,
-       opAndType{ONE, TINT8}:    ssa.OpNeq8,
-       opAndType{ONE, TUINT8}:   ssa.OpNeq8,
-       opAndType{ONE, TINT16}:   ssa.OpNeq16,
-       opAndType{ONE, TUINT16}:  ssa.OpNeq16,
-       opAndType{ONE, TINT32}:   ssa.OpNeq32,
-       opAndType{ONE, TUINT32}:  ssa.OpNeq32,
-       opAndType{ONE, TINT64}:   ssa.OpNeq64,
-       opAndType{ONE, TUINT64}:  ssa.OpNeq64,
-       opAndType{ONE, TPTR64}:   ssa.OpNeq64,
-       opAndType{ONE, TINTER}:   ssa.OpNeqFat, // e != nil only
-       opAndType{ONE, TARRAY}:   ssa.OpNeqFat, // slice only; a != nil only
-       opAndType{ONE, TFUNC}:    ssa.OpNeqPtr,
-       opAndType{ONE, TMAP}:     ssa.OpNeqPtr,
-       opAndType{ONE, TCHAN}:    ssa.OpNeqPtr,
-       opAndType{ONE, TUINTPTR}: ssa.OpNeqPtr,
+       opAndType{OEQ, TBOOL}:      ssa.OpEq8,
+       opAndType{OEQ, TINT8}:      ssa.OpEq8,
+       opAndType{OEQ, TUINT8}:     ssa.OpEq8,
+       opAndType{OEQ, TINT16}:     ssa.OpEq16,
+       opAndType{OEQ, TUINT16}:    ssa.OpEq16,
+       opAndType{OEQ, TINT32}:     ssa.OpEq32,
+       opAndType{OEQ, TUINT32}:    ssa.OpEq32,
+       opAndType{OEQ, TINT64}:     ssa.OpEq64,
+       opAndType{OEQ, TUINT64}:    ssa.OpEq64,
+       opAndType{OEQ, TPTR64}:     ssa.OpEq64,
+       opAndType{OEQ, TINTER}:     ssa.OpEqFat, // e == nil only
+       opAndType{OEQ, TARRAY}:     ssa.OpEqFat, // slice only; a == nil only
+       opAndType{OEQ, TFUNC}:      ssa.OpEqPtr,
+       opAndType{OEQ, TMAP}:       ssa.OpEqPtr,
+       opAndType{OEQ, TCHAN}:      ssa.OpEqPtr,
+       opAndType{OEQ, TUINTPTR}:   ssa.OpEqPtr,
+       opAndType{OEQ, TUNSAFEPTR}: ssa.OpEqPtr,
+
+       opAndType{ONE, TBOOL}:      ssa.OpNeq8,
+       opAndType{ONE, TINT8}:      ssa.OpNeq8,
+       opAndType{ONE, TUINT8}:     ssa.OpNeq8,
+       opAndType{ONE, TINT16}:     ssa.OpNeq16,
+       opAndType{ONE, TUINT16}:    ssa.OpNeq16,
+       opAndType{ONE, TINT32}:     ssa.OpNeq32,
+       opAndType{ONE, TUINT32}:    ssa.OpNeq32,
+       opAndType{ONE, TINT64}:     ssa.OpNeq64,
+       opAndType{ONE, TUINT64}:    ssa.OpNeq64,
+       opAndType{ONE, TPTR64}:     ssa.OpNeq64,
+       opAndType{ONE, TINTER}:     ssa.OpNeqFat, // e != nil only
+       opAndType{ONE, TARRAY}:     ssa.OpNeqFat, // slice only; a != nil only
+       opAndType{ONE, TFUNC}:      ssa.OpNeqPtr,
+       opAndType{ONE, TMAP}:       ssa.OpNeqPtr,
+       opAndType{ONE, TCHAN}:      ssa.OpNeqPtr,
+       opAndType{ONE, TUINTPTR}:   ssa.OpNeqPtr,
+       opAndType{ONE, TUNSAFEPTR}: ssa.OpNeqPtr,
 
        opAndType{OLT, TINT8}:   ssa.OpLess8,
        opAndType{OLT, TUINT8}:  ssa.OpLess8U,