(XORQload x [off] {sym} ptr (MOVSDstore [off] {sym} ptr y _)) -> (XORQ x (MOVQf2i y))
(XORLload x [off] {sym} ptr (MOVSSstore [off] {sym} ptr y _)) -> (XORL x (MOVLf2i y))
-(ADDQconstmodify [valOff] {sym} ptr (MOVSDstore [ValAndOff(valOff).Off()] {sym} ptr x _)) ->
- (ADDQconst [ValAndOff(valOff).Val()] (MOVQf2i x))
-(ADDLconstmodify [valOff] {sym} ptr (MOVSSstore [ValAndOff(valOff).Off()] {sym} ptr x _)) ->
- (ADDLconst [ValAndOff(valOff).Val()] (MOVLf2i x))
-
(ADDSDload x [off] {sym} ptr (MOVQstore [off] {sym} ptr y _)) -> (ADDSD x (MOVQi2f y))
(ADDSSload x [off] {sym} ptr (MOVLstore [off] {sym} ptr y _)) -> (ADDSS x (MOVLi2f y))
(SUBSDload x [off] {sym} ptr (MOVQstore [off] {sym} ptr y _)) -> (SUBSD x (MOVQi2f y))
return false
}
func rewriteValueAMD64_OpAMD64ADDLconstmodify_0(v *Value) bool {
- b := v.Block
- _ = b
- typ := &b.Func.Config.Types
- _ = typ
// match: (ADDLconstmodify [valoff1] {sym} (ADDQconst [off2] base) mem)
// cond: ValAndOff(valoff1).canAdd(off2)
// result: (ADDLconstmodify [ValAndOff(valoff1).add(off2)] {sym} base mem)
v.AddArg(mem)
return true
}
- // match: (ADDLconstmodify [valOff] {sym} ptr (MOVSSstore [ValAndOff(valOff).Off()] {sym} ptr x _))
- // cond:
- // result: (ADDLconst [ValAndOff(valOff).Val()] (MOVLf2i x))
- for {
- valOff := v.AuxInt
- sym := v.Aux
- _ = v.Args[1]
- ptr := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpAMD64MOVSSstore {
- break
- }
- if v_1.AuxInt != ValAndOff(valOff).Off() {
- break
- }
- if v_1.Aux != sym {
- break
- }
- _ = v_1.Args[2]
- if ptr != v_1.Args[0] {
- break
- }
- x := v_1.Args[1]
- v.reset(OpAMD64ADDLconst)
- v.AuxInt = ValAndOff(valOff).Val()
- v0 := b.NewValue0(v.Pos, OpAMD64MOVLf2i, typ.UInt32)
- v0.AddArg(x)
- v.AddArg(v0)
- return true
- }
return false
}
func rewriteValueAMD64_OpAMD64ADDLload_0(v *Value) bool {
return false
}
func rewriteValueAMD64_OpAMD64ADDQconstmodify_0(v *Value) bool {
- b := v.Block
- _ = b
- typ := &b.Func.Config.Types
- _ = typ
// match: (ADDQconstmodify [valoff1] {sym} (ADDQconst [off2] base) mem)
// cond: ValAndOff(valoff1).canAdd(off2)
// result: (ADDQconstmodify [ValAndOff(valoff1).add(off2)] {sym} base mem)
v.AddArg(mem)
return true
}
- // match: (ADDQconstmodify [valOff] {sym} ptr (MOVSDstore [ValAndOff(valOff).Off()] {sym} ptr x _))
- // cond:
- // result: (ADDQconst [ValAndOff(valOff).Val()] (MOVQf2i x))
- for {
- valOff := v.AuxInt
- sym := v.Aux
- _ = v.Args[1]
- ptr := v.Args[0]
- v_1 := v.Args[1]
- if v_1.Op != OpAMD64MOVSDstore {
- break
- }
- if v_1.AuxInt != ValAndOff(valOff).Off() {
- break
- }
- if v_1.Aux != sym {
- break
- }
- _ = v_1.Args[2]
- if ptr != v_1.Args[0] {
- break
- }
- x := v_1.Args[1]
- v.reset(OpAMD64ADDQconst)
- v.AuxInt = ValAndOff(valOff).Val()
- v0 := b.NewValue0(v.Pos, OpAMD64MOVQf2i, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- return true
- }
return false
}
func rewriteValueAMD64_OpAMD64ADDQload_0(v *Value) bool {