mirror of https://github.com/golang/go.git
cmd/compile: remove some nacl SSA rules
Updates golang/go#30439 Change-Id: I7ef5301fbd650d26a37a1241ddf7ca1ccd58b89d Reviewed-on: https://go-review.googlesource.com/c/go/+/200941 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
6adaf17eaa
commit
11d7775c9f
|
|
@ -947,13 +947,6 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
|
||||||
p.To.Sym = gc.BoundsCheckFunc[v.AuxInt]
|
p.To.Sym = gc.BoundsCheckFunc[v.AuxInt]
|
||||||
s.UseArgs(int64(2 * gc.Widthptr)) // space used in callee args area by assembly stubs
|
s.UseArgs(int64(2 * gc.Widthptr)) // space used in callee args area by assembly stubs
|
||||||
|
|
||||||
case ssa.OpAMD64LoweredPanicExtendA, ssa.OpAMD64LoweredPanicExtendB, ssa.OpAMD64LoweredPanicExtendC:
|
|
||||||
p := s.Prog(obj.ACALL)
|
|
||||||
p.To.Type = obj.TYPE_MEM
|
|
||||||
p.To.Name = obj.NAME_EXTERN
|
|
||||||
p.To.Sym = gc.ExtendCheckFunc[v.AuxInt]
|
|
||||||
s.UseArgs(int64(3 * gc.Widthptr)) // space used in callee args area by assembly stubs
|
|
||||||
|
|
||||||
case ssa.OpAMD64NEGQ, ssa.OpAMD64NEGL,
|
case ssa.OpAMD64NEGQ, ssa.OpAMD64NEGL,
|
||||||
ssa.OpAMD64BSWAPQ, ssa.OpAMD64BSWAPL,
|
ssa.OpAMD64BSWAPQ, ssa.OpAMD64BSWAPL,
|
||||||
ssa.OpAMD64NOTQ, ssa.OpAMD64NOTL:
|
ssa.OpAMD64NOTQ, ssa.OpAMD64NOTL:
|
||||||
|
|
|
||||||
|
|
@ -567,11 +567,6 @@
|
||||||
(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem)
|
(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem)
|
||||||
(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem)
|
(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem)
|
||||||
|
|
||||||
// For amd64p32
|
|
||||||
(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 0 -> (LoweredPanicExtendA [kind] hi lo y mem)
|
|
||||||
(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 1 -> (LoweredPanicExtendB [kind] hi lo y mem)
|
|
||||||
(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 2 -> (LoweredPanicExtendC [kind] hi lo y mem)
|
|
||||||
|
|
||||||
// ***************************
|
// ***************************
|
||||||
// Above: lowering rules
|
// Above: lowering rules
|
||||||
// Below: optimizations
|
// Below: optimizations
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,6 @@ func init() {
|
||||||
cx = buildReg("CX")
|
cx = buildReg("CX")
|
||||||
dx = buildReg("DX")
|
dx = buildReg("DX")
|
||||||
bx = buildReg("BX")
|
bx = buildReg("BX")
|
||||||
si = buildReg("SI")
|
|
||||||
gp = buildReg("AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15")
|
gp = buildReg("AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15")
|
||||||
fp = buildReg("X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15")
|
fp = buildReg("X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15")
|
||||||
gpsp = gp | buildReg("SP")
|
gpsp = gp | buildReg("SP")
|
||||||
|
|
@ -718,12 +717,6 @@ func init() {
|
||||||
{name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{cx, dx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go).
|
{name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{cx, dx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go).
|
||||||
{name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{ax, cx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go).
|
{name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{ax, cx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go).
|
||||||
|
|
||||||
// amd64p32 only: PanicBounds ops take 32-bit indexes.
|
|
||||||
// The Extend ops are the same as the Bounds ops except the indexes are 64-bit.
|
|
||||||
{name: "LoweredPanicExtendA", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, dx, bx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go).
|
|
||||||
{name: "LoweredPanicExtendB", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, cx, dx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go).
|
|
||||||
{name: "LoweredPanicExtendC", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, ax, cx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go).
|
|
||||||
|
|
||||||
// Constant flag values. For any comparison, there are 5 possible
|
// Constant flag values. For any comparison, there are 5 possible
|
||||||
// outcomes: the three from the signed total order (<,==,>) and the
|
// outcomes: the three from the signed total order (<,==,>) and the
|
||||||
// three from the unsigned total order. The == cases overlap.
|
// three from the unsigned total order. The == cases overlap.
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,7 @@ func init() {
|
||||||
reg: regInfo{
|
reg: regInfo{
|
||||||
inputs: []regMask{buildReg("R1"), buildReg("R0")},
|
inputs: []regMask{buildReg("R1"), buildReg("R0")},
|
||||||
outputs: []regMask{buildReg("R0"), buildReg("R1")},
|
outputs: []regMask{buildReg("R0"), buildReg("R1")},
|
||||||
clobbers: buildReg("R2 R3 R14"), // also clobbers R12 on NaCl (modified in ../config.go)
|
clobbers: buildReg("R2 R3 R14"),
|
||||||
},
|
},
|
||||||
clobberFlags: true,
|
clobberFlags: true,
|
||||||
typ: "(UInt32,UInt32)",
|
typ: "(UInt32,UInt32)",
|
||||||
|
|
|
||||||
|
|
@ -868,9 +868,6 @@ const (
|
||||||
OpAMD64LoweredPanicBoundsA
|
OpAMD64LoweredPanicBoundsA
|
||||||
OpAMD64LoweredPanicBoundsB
|
OpAMD64LoweredPanicBoundsB
|
||||||
OpAMD64LoweredPanicBoundsC
|
OpAMD64LoweredPanicBoundsC
|
||||||
OpAMD64LoweredPanicExtendA
|
|
||||||
OpAMD64LoweredPanicExtendB
|
|
||||||
OpAMD64LoweredPanicExtendC
|
|
||||||
OpAMD64FlagEQ
|
OpAMD64FlagEQ
|
||||||
OpAMD64FlagLT_ULT
|
OpAMD64FlagLT_ULT
|
||||||
OpAMD64FlagLT_UGT
|
OpAMD64FlagLT_UGT
|
||||||
|
|
@ -11317,42 +11314,6 @@ var opcodeTable = [...]opInfo{
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "LoweredPanicExtendA",
|
|
||||||
auxType: auxInt64,
|
|
||||||
argLen: 4,
|
|
||||||
reg: regInfo{
|
|
||||||
inputs: []inputInfo{
|
|
||||||
{0, 64}, // SI
|
|
||||||
{1, 4}, // DX
|
|
||||||
{2, 8}, // BX
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "LoweredPanicExtendB",
|
|
||||||
auxType: auxInt64,
|
|
||||||
argLen: 4,
|
|
||||||
reg: regInfo{
|
|
||||||
inputs: []inputInfo{
|
|
||||||
{0, 64}, // SI
|
|
||||||
{1, 2}, // CX
|
|
||||||
{2, 4}, // DX
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "LoweredPanicExtendC",
|
|
||||||
auxType: auxInt64,
|
|
||||||
argLen: 4,
|
|
||||||
reg: regInfo{
|
|
||||||
inputs: []inputInfo{
|
|
||||||
{0, 64}, // SI
|
|
||||||
{1, 1}, // AX
|
|
||||||
{2, 2}, // CX
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "FlagEQ",
|
name: "FlagEQ",
|
||||||
argLen: 0,
|
argLen: 0,
|
||||||
|
|
|
||||||
|
|
@ -990,8 +990,6 @@ func rewriteValueAMD64(v *Value) bool {
|
||||||
return rewriteValueAMD64_OpOrB_0(v)
|
return rewriteValueAMD64_OpOrB_0(v)
|
||||||
case OpPanicBounds:
|
case OpPanicBounds:
|
||||||
return rewriteValueAMD64_OpPanicBounds_0(v)
|
return rewriteValueAMD64_OpPanicBounds_0(v)
|
||||||
case OpPanicExtend:
|
|
||||||
return rewriteValueAMD64_OpPanicExtend_0(v)
|
|
||||||
case OpPopCount16:
|
case OpPopCount16:
|
||||||
return rewriteValueAMD64_OpPopCount16_0(v)
|
return rewriteValueAMD64_OpPopCount16_0(v)
|
||||||
case OpPopCount32:
|
case OpPopCount32:
|
||||||
|
|
@ -55176,69 +55174,6 @@ func rewriteValueAMD64_OpPanicBounds_0(v *Value) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
func rewriteValueAMD64_OpPanicExtend_0(v *Value) bool {
|
|
||||||
// match: (PanicExtend [kind] hi lo y mem)
|
|
||||||
// cond: boundsABI(kind) == 0
|
|
||||||
// result: (LoweredPanicExtendA [kind] hi lo y mem)
|
|
||||||
for {
|
|
||||||
kind := v.AuxInt
|
|
||||||
mem := v.Args[3]
|
|
||||||
hi := v.Args[0]
|
|
||||||
lo := v.Args[1]
|
|
||||||
y := v.Args[2]
|
|
||||||
if !(boundsABI(kind) == 0) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
v.reset(OpAMD64LoweredPanicExtendA)
|
|
||||||
v.AuxInt = kind
|
|
||||||
v.AddArg(hi)
|
|
||||||
v.AddArg(lo)
|
|
||||||
v.AddArg(y)
|
|
||||||
v.AddArg(mem)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
// match: (PanicExtend [kind] hi lo y mem)
|
|
||||||
// cond: boundsABI(kind) == 1
|
|
||||||
// result: (LoweredPanicExtendB [kind] hi lo y mem)
|
|
||||||
for {
|
|
||||||
kind := v.AuxInt
|
|
||||||
mem := v.Args[3]
|
|
||||||
hi := v.Args[0]
|
|
||||||
lo := v.Args[1]
|
|
||||||
y := v.Args[2]
|
|
||||||
if !(boundsABI(kind) == 1) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
v.reset(OpAMD64LoweredPanicExtendB)
|
|
||||||
v.AuxInt = kind
|
|
||||||
v.AddArg(hi)
|
|
||||||
v.AddArg(lo)
|
|
||||||
v.AddArg(y)
|
|
||||||
v.AddArg(mem)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
// match: (PanicExtend [kind] hi lo y mem)
|
|
||||||
// cond: boundsABI(kind) == 2
|
|
||||||
// result: (LoweredPanicExtendC [kind] hi lo y mem)
|
|
||||||
for {
|
|
||||||
kind := v.AuxInt
|
|
||||||
mem := v.Args[3]
|
|
||||||
hi := v.Args[0]
|
|
||||||
lo := v.Args[1]
|
|
||||||
y := v.Args[2]
|
|
||||||
if !(boundsABI(kind) == 2) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
v.reset(OpAMD64LoweredPanicExtendC)
|
|
||||||
v.AuxInt = kind
|
|
||||||
v.AddArg(hi)
|
|
||||||
v.AddArg(lo)
|
|
||||||
v.AddArg(y)
|
|
||||||
v.AddArg(mem)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
func rewriteValueAMD64_OpPopCount16_0(v *Value) bool {
|
func rewriteValueAMD64_OpPopCount16_0(v *Value) bool {
|
||||||
b := v.Block
|
b := v.Block
|
||||||
typ := &b.Func.Config.Types
|
typ := &b.Func.Config.Types
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue