1 // Code generated from _gen/PPC64latelower.rules using 'go generate'; DO NOT EDIT.
5 import "internal/buildcfg"
6 import "cmd/compile/internal/types"
8 func rewriteValuePPC64latelower(v *Value) bool {
11 return rewriteValuePPC64latelower_OpPPC64AND(v)
13 return rewriteValuePPC64latelower_OpPPC64ISEL(v)
15 return rewriteValuePPC64latelower_OpPPC64RLDICL(v)
17 return rewriteValuePPC64latelower_OpPPC64SETBC(v)
19 return rewriteValuePPC64latelower_OpPPC64SETBCR(v)
21 return rewriteValuePPC64latelower_OpSelect0(v)
25 func rewriteValuePPC64latelower_OpPPC64AND(v *Value) bool {
29 typ := &b.Func.Config.Types
30 // match: (AND <t> x:(MOVDconst [m]) n)
31 // cond: t.Size() <= 2
32 // result: (Select0 (ANDCCconst [int64(int16(m))] n))
35 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
37 if x.Op != OpPPC64MOVDconst {
40 m := auxIntToInt64(x.AuxInt)
46 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.NewTuple(typ.Int, types.TypeFlags))
47 v0.AuxInt = int64ToAuxInt(int64(int16(m)))
54 // match: (AND x:(MOVDconst [m]) n)
55 // cond: isPPC64ValidShiftMask(m)
56 // result: (RLDICL [encodePPC64RotateMask(0,m,64)] n)
58 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
60 if x.Op != OpPPC64MOVDconst {
63 m := auxIntToInt64(x.AuxInt)
65 if !(isPPC64ValidShiftMask(m)) {
68 v.reset(OpPPC64RLDICL)
69 v.AuxInt = int64ToAuxInt(encodePPC64RotateMask(0, m, 64))
75 // match: (AND x:(MOVDconst [m]) n)
76 // cond: m != 0 && isPPC64ValidShiftMask(^m)
77 // result: (RLDICR [encodePPC64RotateMask(0,m,64)] n)
79 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
81 if x.Op != OpPPC64MOVDconst {
84 m := auxIntToInt64(x.AuxInt)
86 if !(m != 0 && isPPC64ValidShiftMask(^m)) {
89 v.reset(OpPPC64RLDICR)
90 v.AuxInt = int64ToAuxInt(encodePPC64RotateMask(0, m, 64))
96 // match: (AND <t> x:(MOVDconst [m]) n)
97 // cond: t.Size() == 4 && isPPC64WordRotateMask(m)
98 // result: (RLWINM [encodePPC64RotateMask(0,m,32)] n)
101 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
103 if x.Op != OpPPC64MOVDconst {
106 m := auxIntToInt64(x.AuxInt)
108 if !(t.Size() == 4 && isPPC64WordRotateMask(m)) {
111 v.reset(OpPPC64RLWINM)
112 v.AuxInt = int64ToAuxInt(encodePPC64RotateMask(0, m, 32))
120 func rewriteValuePPC64latelower_OpPPC64ISEL(v *Value) bool {
124 // match: (ISEL [a] x (MOVDconst [0]) z)
125 // result: (ISELZ [a] x z)
127 a := auxIntToInt32(v.AuxInt)
129 if v_1.Op != OpPPC64MOVDconst || auxIntToInt64(v_1.AuxInt) != 0 {
133 v.reset(OpPPC64ISELZ)
134 v.AuxInt = int32ToAuxInt(a)
138 // match: (ISEL [a] (MOVDconst [0]) y z)
139 // result: (ISELZ [a^0x4] y z)
141 a := auxIntToInt32(v.AuxInt)
142 if v_0.Op != OpPPC64MOVDconst || auxIntToInt64(v_0.AuxInt) != 0 {
147 v.reset(OpPPC64ISELZ)
148 v.AuxInt = int32ToAuxInt(a ^ 0x4)
154 func rewriteValuePPC64latelower_OpPPC64RLDICL(v *Value) bool {
156 // match: (RLDICL [em] x:(SRDconst [s] a))
157 // cond: (em&0xFF0000) == 0
158 // result: (RLDICL [mergePPC64RLDICLandSRDconst(em, s)] a)
160 em := auxIntToInt64(v.AuxInt)
162 if x.Op != OpPPC64SRDconst {
165 s := auxIntToInt64(x.AuxInt)
167 if !((em & 0xFF0000) == 0) {
170 v.reset(OpPPC64RLDICL)
171 v.AuxInt = int64ToAuxInt(mergePPC64RLDICLandSRDconst(em, s))
177 func rewriteValuePPC64latelower_OpPPC64SETBC(v *Value) bool {
180 typ := &b.Func.Config.Types
181 // match: (SETBC [2] cmp)
182 // cond: buildcfg.GOPPC64 <= 9
183 // result: (ISELZ [2] (MOVDconst [1]) cmp)
185 if auxIntToInt32(v.AuxInt) != 2 {
189 if !(buildcfg.GOPPC64 <= 9) {
192 v.reset(OpPPC64ISELZ)
193 v.AuxInt = int32ToAuxInt(2)
194 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
195 v0.AuxInt = int64ToAuxInt(1)
199 // match: (SETBC [0] cmp)
200 // cond: buildcfg.GOPPC64 <= 9
201 // result: (ISELZ [0] (MOVDconst [1]) cmp)
203 if auxIntToInt32(v.AuxInt) != 0 {
207 if !(buildcfg.GOPPC64 <= 9) {
210 v.reset(OpPPC64ISELZ)
211 v.AuxInt = int32ToAuxInt(0)
212 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
213 v0.AuxInt = int64ToAuxInt(1)
217 // match: (SETBC [1] cmp)
218 // cond: buildcfg.GOPPC64 <= 9
219 // result: (ISELZ [1] (MOVDconst [1]) cmp)
221 if auxIntToInt32(v.AuxInt) != 1 {
225 if !(buildcfg.GOPPC64 <= 9) {
228 v.reset(OpPPC64ISELZ)
229 v.AuxInt = int32ToAuxInt(1)
230 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
231 v0.AuxInt = int64ToAuxInt(1)
237 func rewriteValuePPC64latelower_OpPPC64SETBCR(v *Value) bool {
240 typ := &b.Func.Config.Types
241 // match: (SETBCR [2] cmp)
242 // cond: buildcfg.GOPPC64 <= 9
243 // result: (ISELZ [6] (MOVDconst [1]) cmp)
245 if auxIntToInt32(v.AuxInt) != 2 {
249 if !(buildcfg.GOPPC64 <= 9) {
252 v.reset(OpPPC64ISELZ)
253 v.AuxInt = int32ToAuxInt(6)
254 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
255 v0.AuxInt = int64ToAuxInt(1)
259 // match: (SETBCR [0] cmp)
260 // cond: buildcfg.GOPPC64 <= 9
261 // result: (ISELZ [4] (MOVDconst [1]) cmp)
263 if auxIntToInt32(v.AuxInt) != 0 {
267 if !(buildcfg.GOPPC64 <= 9) {
270 v.reset(OpPPC64ISELZ)
271 v.AuxInt = int32ToAuxInt(4)
272 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
273 v0.AuxInt = int64ToAuxInt(1)
277 // match: (SETBCR [1] cmp)
278 // cond: buildcfg.GOPPC64 <= 9
279 // result: (ISELZ [5] (MOVDconst [1]) cmp)
281 if auxIntToInt32(v.AuxInt) != 1 {
285 if !(buildcfg.GOPPC64 <= 9) {
288 v.reset(OpPPC64ISELZ)
289 v.AuxInt = int32ToAuxInt(5)
290 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64)
291 v0.AuxInt = int64ToAuxInt(1)
297 func rewriteValuePPC64latelower_OpSelect0(v *Value) bool {
299 // match: (Select0 z:(ANDCCconst [m] x))
300 // cond: z.Uses == 1 && isPPC64ValidShiftMask(m)
301 // result: (RLDICL [encodePPC64RotateMask(0,m,64)] x)
304 if z.Op != OpPPC64ANDCCconst {
307 m := auxIntToInt64(z.AuxInt)
309 if !(z.Uses == 1 && isPPC64ValidShiftMask(m)) {
312 v.reset(OpPPC64RLDICL)
313 v.AuxInt = int64ToAuxInt(encodePPC64RotateMask(0, m, 64))
319 func rewriteBlockPPC64latelower(b *Block) bool {