1
2
3 package rewriteamd64latelower
4
5 import "internal/buildcfg"
6 import "cmd/compile/internal/ssa/ssaop"
7 import "cmd/compile/internal/ssa"
8
9 func RewriteValue(v *ssa.Value) bool {
10 switch v.Op {
11 case ssaop.OpAMD64MOVBQZX:
12 return rewriteValue_OpAMD64MOVBQZX(v)
13 case ssaop.OpAMD64MOVLQZX:
14 return rewriteValue_OpAMD64MOVLQZX(v)
15 case ssaop.OpAMD64MOVWQZX:
16 return rewriteValue_OpAMD64MOVWQZX(v)
17 case ssaop.OpAMD64SARL:
18 return rewriteValue_OpAMD64SARL(v)
19 case ssaop.OpAMD64SARQ:
20 return rewriteValue_OpAMD64SARQ(v)
21 case ssaop.OpAMD64SHLL:
22 return rewriteValue_OpAMD64SHLL(v)
23 case ssaop.OpAMD64SHLQ:
24 return rewriteValue_OpAMD64SHLQ(v)
25 case ssaop.OpAMD64SHRL:
26 return rewriteValue_OpAMD64SHRL(v)
27 case ssaop.OpAMD64SHRQ:
28 return rewriteValue_OpAMD64SHRQ(v)
29 }
30 return false
31 }
32 func rewriteValue_OpAMD64MOVBQZX(v *ssa.Value) bool {
33 v_0 := v.Args[0]
34
35
36
37 for {
38 x := v_0
39 if !(ssa.ZeroUpper56Bits(x)) {
40 break
41 }
42 v.CopyOf(x)
43 return true
44 }
45 return false
46 }
47 func rewriteValue_OpAMD64MOVLQZX(v *ssa.Value) bool {
48 v_0 := v.Args[0]
49
50
51
52 for {
53 x := v_0
54 if !(ssa.ZeroUpper32Bits(x)) {
55 break
56 }
57 v.CopyOf(x)
58 return true
59 }
60 return false
61 }
62 func rewriteValue_OpAMD64MOVWQZX(v *ssa.Value) bool {
63 v_0 := v.Args[0]
64
65
66
67 for {
68 x := v_0
69 if !(ssa.ZeroUpper48Bits(x)) {
70 break
71 }
72 v.CopyOf(x)
73 return true
74 }
75 return false
76 }
77 func rewriteValue_OpAMD64SARL(v *ssa.Value) bool {
78 v_1 := v.Args[1]
79 v_0 := v.Args[0]
80
81
82
83 for {
84 x := v_0
85 y := v_1
86 if !(buildcfg.GOAMD64 >= 3) {
87 break
88 }
89 v.Reset(ssaop.OpAMD64SARXL)
90 v.AddArg2(x, y)
91 return true
92 }
93 return false
94 }
95 func rewriteValue_OpAMD64SARQ(v *ssa.Value) bool {
96 v_1 := v.Args[1]
97 v_0 := v.Args[0]
98
99
100
101 for {
102 x := v_0
103 y := v_1
104 if !(buildcfg.GOAMD64 >= 3) {
105 break
106 }
107 v.Reset(ssaop.OpAMD64SARXQ)
108 v.AddArg2(x, y)
109 return true
110 }
111 return false
112 }
113 func rewriteValue_OpAMD64SHLL(v *ssa.Value) bool {
114 v_1 := v.Args[1]
115 v_0 := v.Args[0]
116
117
118
119 for {
120 x := v_0
121 y := v_1
122 if !(buildcfg.GOAMD64 >= 3) {
123 break
124 }
125 v.Reset(ssaop.OpAMD64SHLXL)
126 v.AddArg2(x, y)
127 return true
128 }
129 return false
130 }
131 func rewriteValue_OpAMD64SHLQ(v *ssa.Value) bool {
132 v_1 := v.Args[1]
133 v_0 := v.Args[0]
134
135
136
137 for {
138 x := v_0
139 y := v_1
140 if !(buildcfg.GOAMD64 >= 3) {
141 break
142 }
143 v.Reset(ssaop.OpAMD64SHLXQ)
144 v.AddArg2(x, y)
145 return true
146 }
147 return false
148 }
149 func rewriteValue_OpAMD64SHRL(v *ssa.Value) bool {
150 v_1 := v.Args[1]
151 v_0 := v.Args[0]
152
153
154
155 for {
156 x := v_0
157 y := v_1
158 if !(buildcfg.GOAMD64 >= 3) {
159 break
160 }
161 v.Reset(ssaop.OpAMD64SHRXL)
162 v.AddArg2(x, y)
163 return true
164 }
165 return false
166 }
167 func rewriteValue_OpAMD64SHRQ(v *ssa.Value) bool {
168 v_1 := v.Args[1]
169 v_0 := v.Args[0]
170
171
172
173 for {
174 x := v_0
175 y := v_1
176 if !(buildcfg.GOAMD64 >= 3) {
177 break
178 }
179 v.Reset(ssaop.OpAMD64SHRXQ)
180 v.AddArg2(x, y)
181 return true
182 }
183 return false
184 }
185 func RewriteBlock(b *ssa.Block) bool {
186 return false
187 }
188
View as plain text