...
Text file src/pkg/cmd/compile/internal/ssa/gen/dec64.rules
1 // Copyright 2016 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // This file contains rules to decompose [u]int64 types on 32-bit
6 // architectures. These rules work together with the decomposeBuiltIn
7 // pass which handles phis of these typ.
8
9 (Int64Hi (Int64Make hi _)) -> hi
10 (Int64Lo (Int64Make _ lo)) -> lo
11
12
13 (Load <t> ptr mem) && is64BitInt(t) && !config.BigEndian && t.IsSigned() ->
14 (Int64Make
15 (Load <typ.Int32> (OffPtr <typ.Int32Ptr> [4] ptr) mem)
16 (Load <typ.UInt32> ptr mem))
17
18 (Load <t> ptr mem) && is64BitInt(t) && !config.BigEndian && !t.IsSigned() ->
19 (Int64Make
20 (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem)
21 (Load <typ.UInt32> ptr mem))
22
23 (Load <t> ptr mem) && is64BitInt(t) && config.BigEndian && t.IsSigned() ->
24 (Int64Make
25 (Load <typ.Int32> ptr mem)
26 (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem))
27
28 (Load <t> ptr mem) && is64BitInt(t) && config.BigEndian && !t.IsSigned() ->
29 (Int64Make
30 (Load <typ.UInt32> ptr mem)
31 (Load <typ.UInt32> (OffPtr <typ.UInt32Ptr> [4] ptr) mem))
32
33 (Store {t} dst (Int64Make hi lo) mem) && t.(*types.Type).Size() == 8 && !config.BigEndian ->
34 (Store {hi.Type}
35 (OffPtr <hi.Type.PtrTo()> [4] dst)
36 hi
37 (Store {lo.Type} dst lo mem))
38
39 (Store {t} dst (Int64Make hi lo) mem) && t.(*types.Type).Size() == 8 && config.BigEndian ->
40 (Store {lo.Type}
41 (OffPtr <lo.Type.PtrTo()> [4] dst)
42 lo
43 (Store {hi.Type} dst hi mem))
44
45 (Arg {n} [off]) && is64BitInt(v.Type) && !config.BigEndian && v.Type.IsSigned() ->
46 (Int64Make
47 (Arg <typ.Int32> {n} [off+4])
48 (Arg <typ.UInt32> {n} [off]))
49 (Arg {n} [off]) && is64BitInt(v.Type) && !config.BigEndian && !v.Type.IsSigned() ->
50 (Int64Make
51 (Arg <typ.UInt32> {n} [off+4])
52 (Arg <typ.UInt32> {n} [off]))
53
54 (Arg {n} [off]) && is64BitInt(v.Type) && config.BigEndian && v.Type.IsSigned() ->
55 (Int64Make
56 (Arg <typ.Int32> {n} [off])
57 (Arg <typ.UInt32> {n} [off+4]))
58 (Arg {n} [off]) && is64BitInt(v.Type) && config.BigEndian && !v.Type.IsSigned() ->
59 (Int64Make
60 (Arg <typ.UInt32> {n} [off])
61 (Arg <typ.UInt32> {n} [off+4]))
62
63 (Add64 x y) ->
64 (Int64Make
65 (Add32withcarry <typ.Int32>
66 (Int64Hi x)
67 (Int64Hi y)
68 (Select1 <types.TypeFlags> (Add32carry (Int64Lo x) (Int64Lo y))))
69 (Select0 <typ.UInt32> (Add32carry (Int64Lo x) (Int64Lo y))))
70
71 (Sub64 x y) ->
72 (Int64Make
73 (Sub32withcarry <typ.Int32>
74 (Int64Hi x)
75 (Int64Hi y)
76 (Select1 <types.TypeFlags> (Sub32carry (Int64Lo x) (Int64Lo y))))
77 (Select0 <typ.UInt32> (Sub32carry (Int64Lo x) (Int64Lo y))))
78
79 (Mul64 x y) ->
80 (Int64Make
81 (Add32 <typ.UInt32>
82 (Mul32 <typ.UInt32> (Int64Lo x) (Int64Hi y))
83 (Add32 <typ.UInt32>
84 (Mul32 <typ.UInt32> (Int64Hi x) (Int64Lo y))
85 (Select0 <typ.UInt32> (Mul32uhilo (Int64Lo x) (Int64Lo y)))))
86 (Select1 <typ.UInt32> (Mul32uhilo (Int64Lo x) (Int64Lo y))))
87
88 (And64 x y) ->
89 (Int64Make
90 (And32 <typ.UInt32> (Int64Hi x) (Int64Hi y))
91 (And32 <typ.UInt32> (Int64Lo x) (Int64Lo y)))
92
93 (Or64 x y) ->
94 (Int64Make
95 (Or32 <typ.UInt32> (Int64Hi x) (Int64Hi y))
96 (Or32 <typ.UInt32> (Int64Lo x) (Int64Lo y)))
97
98 (Xor64 x y) ->
99 (Int64Make
100 (Xor32 <typ.UInt32> (Int64Hi x) (Int64Hi y))
101 (Xor32 <typ.UInt32> (Int64Lo x) (Int64Lo y)))
102
103 (Neg64 <t> x) -> (Sub64 (Const64 <t> [0]) x)
104
105 (Com64 x) ->
106 (Int64Make
107 (Com32 <typ.UInt32> (Int64Hi x))
108 (Com32 <typ.UInt32> (Int64Lo x)))
109
110 // Sadly, just because we know that x is non-zero,
111 // we don't know whether either component is,
112 // so just treat Ctz64NonZero the same as Ctz64.
113 (Ctz64NonZero x) -> (Ctz64 x)
114
115 (Ctz64 x) ->
116 (Add32 <typ.UInt32>
117 (Ctz32 <typ.UInt32> (Int64Lo x))
118 (And32 <typ.UInt32>
119 (Com32 <typ.UInt32> (Zeromask (Int64Lo x)))
120 (Ctz32 <typ.UInt32> (Int64Hi x))))
121
122 (BitLen64 x) ->
123 (Add32 <typ.Int>
124 (BitLen32 <typ.Int> (Int64Hi x))
125 (BitLen32 <typ.Int>
126 (Or32 <typ.UInt32>
127 (Int64Lo x)
128 (Zeromask (Int64Hi x)))))
129
130 (Bswap64 x) ->
131 (Int64Make
132 (Bswap32 <typ.UInt32> (Int64Lo x))
133 (Bswap32 <typ.UInt32> (Int64Hi x)))
134
135 (SignExt32to64 x) -> (Int64Make (Signmask x) x)
136 (SignExt16to64 x) -> (SignExt32to64 (SignExt16to32 x))
137 (SignExt8to64 x) -> (SignExt32to64 (SignExt8to32 x))
138
139 (ZeroExt32to64 x) -> (Int64Make (Const32 <typ.UInt32> [0]) x)
140 (ZeroExt16to64 x) -> (ZeroExt32to64 (ZeroExt16to32 x))
141 (ZeroExt8to64 x) -> (ZeroExt32to64 (ZeroExt8to32 x))
142
143 (Trunc64to32 (Int64Make _ lo)) -> lo
144 (Trunc64to16 (Int64Make _ lo)) -> (Trunc32to16 lo)
145 (Trunc64to8 (Int64Make _ lo)) -> (Trunc32to8 lo)
146
147 (Lsh32x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0])
148 (Rsh32x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask x)
149 (Rsh32Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0])
150 (Lsh16x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0])
151 (Rsh16x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask (SignExt16to32 x))
152 (Rsh16Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0])
153 (Lsh8x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0])
154 (Rsh8x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask (SignExt8to32 x))
155 (Rsh8Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0])
156
157 (Lsh32x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh32x32 x lo)
158 (Rsh32x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh32x32 x lo)
159 (Rsh32Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh32Ux32 x lo)
160 (Lsh16x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh16x32 x lo)
161 (Rsh16x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh16x32 x lo)
162 (Rsh16Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh16Ux32 x lo)
163 (Lsh8x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh8x32 x lo)
164 (Rsh8x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh8x32 x lo)
165 (Rsh8Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh8Ux32 x lo)
166
167 (Lsh64x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0])
168 (Rsh64x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x)))
169 (Rsh64Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0])
170
171 (Lsh64x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh64x32 x lo)
172 (Rsh64x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh64x32 x lo)
173 (Rsh64Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh64Ux32 x lo)
174
175 // turn x64 non-constant shifts to x32 shifts
176 // if high 32-bit of the shift is nonzero, make a huge shift
177 (Lsh64x64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
178 (Lsh64x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
179 (Rsh64x64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
180 (Rsh64x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
181 (Rsh64Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
182 (Rsh64Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
183 (Lsh32x64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
184 (Lsh32x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
185 (Rsh32x64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
186 (Rsh32x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
187 (Rsh32Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
188 (Rsh32Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
189 (Lsh16x64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
190 (Lsh16x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
191 (Rsh16x64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
192 (Rsh16x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
193 (Rsh16Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
194 (Rsh16Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
195 (Lsh8x64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
196 (Lsh8x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
197 (Rsh8x64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
198 (Rsh8x32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
199 (Rsh8Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 ->
200 (Rsh8Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo))
201
202 // 64x left shift
203 // result.hi = hi<<s | lo>>(32-s) | lo<<(s-32) // >> is unsigned, large shifts result 0
204 // result.lo = lo<<s
205 (Lsh64x32 (Int64Make hi lo) s) ->
206 (Int64Make
207 (Or32 <typ.UInt32>
208 (Or32 <typ.UInt32>
209 (Lsh32x32 <typ.UInt32> hi s)
210 (Rsh32Ux32 <typ.UInt32>
211 lo
212 (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s)))
213 (Lsh32x32 <typ.UInt32>
214 lo
215 (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32]))))
216 (Lsh32x32 <typ.UInt32> lo s))
217 (Lsh64x16 (Int64Make hi lo) s) ->
218 (Int64Make
219 (Or32 <typ.UInt32>
220 (Or32 <typ.UInt32>
221 (Lsh32x16 <typ.UInt32> hi s)
222 (Rsh32Ux16 <typ.UInt32>
223 lo
224 (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s)))
225 (Lsh32x16 <typ.UInt32>
226 lo
227 (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32]))))
228 (Lsh32x16 <typ.UInt32> lo s))
229 (Lsh64x8 (Int64Make hi lo) s) ->
230 (Int64Make
231 (Or32 <typ.UInt32>
232 (Or32 <typ.UInt32>
233 (Lsh32x8 <typ.UInt32> hi s)
234 (Rsh32Ux8 <typ.UInt32>
235 lo
236 (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s)))
237 (Lsh32x8 <typ.UInt32>
238 lo
239 (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32]))))
240 (Lsh32x8 <typ.UInt32> lo s))
241
242 // 64x unsigned right shift
243 // result.hi = hi>>s
244 // result.lo = lo>>s | hi<<(32-s) | hi>>(s-32) // >> is unsigned, large shifts result 0
245 (Rsh64Ux32 (Int64Make hi lo) s) ->
246 (Int64Make
247 (Rsh32Ux32 <typ.UInt32> hi s)
248 (Or32 <typ.UInt32>
249 (Or32 <typ.UInt32>
250 (Rsh32Ux32 <typ.UInt32> lo s)
251 (Lsh32x32 <typ.UInt32>
252 hi
253 (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s)))
254 (Rsh32Ux32 <typ.UInt32>
255 hi
256 (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32])))))
257 (Rsh64Ux16 (Int64Make hi lo) s) ->
258 (Int64Make
259 (Rsh32Ux16 <typ.UInt32> hi s)
260 (Or32 <typ.UInt32>
261 (Or32 <typ.UInt32>
262 (Rsh32Ux16 <typ.UInt32> lo s)
263 (Lsh32x16 <typ.UInt32>
264 hi
265 (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s)))
266 (Rsh32Ux16 <typ.UInt32>
267 hi
268 (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32])))))
269 (Rsh64Ux8 (Int64Make hi lo) s) ->
270 (Int64Make
271 (Rsh32Ux8 <typ.UInt32> hi s)
272 (Or32 <typ.UInt32>
273 (Or32 <typ.UInt32>
274 (Rsh32Ux8 <typ.UInt32> lo s)
275 (Lsh32x8 <typ.UInt32>
276 hi
277 (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s)))
278 (Rsh32Ux8 <typ.UInt32>
279 hi
280 (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32])))))
281
282 // 64x signed right shift
283 // result.hi = hi>>s
284 // result.lo = lo>>s | hi<<(32-s) | (hi>>(s-32))&zeromask(s>>5) // hi>>(s-32) is signed, large shifts result 0/-1
285 (Rsh64x32 (Int64Make hi lo) s) ->
286 (Int64Make
287 (Rsh32x32 <typ.UInt32> hi s)
288 (Or32 <typ.UInt32>
289 (Or32 <typ.UInt32>
290 (Rsh32Ux32 <typ.UInt32> lo s)
291 (Lsh32x32 <typ.UInt32>
292 hi
293 (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s)))
294 (And32 <typ.UInt32>
295 (Rsh32x32 <typ.UInt32>
296 hi
297 (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32])))
298 (Zeromask
299 (Rsh32Ux32 <typ.UInt32> s (Const32 <typ.UInt32> [5]))))))
300 (Rsh64x16 (Int64Make hi lo) s) ->
301 (Int64Make
302 (Rsh32x16 <typ.UInt32> hi s)
303 (Or32 <typ.UInt32>
304 (Or32 <typ.UInt32>
305 (Rsh32Ux16 <typ.UInt32> lo s)
306 (Lsh32x16 <typ.UInt32>
307 hi
308 (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s)))
309 (And32 <typ.UInt32>
310 (Rsh32x16 <typ.UInt32>
311 hi
312 (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32])))
313 (Zeromask
314 (ZeroExt16to32
315 (Rsh16Ux32 <typ.UInt16> s (Const32 <typ.UInt32> [5])))))))
316 (Rsh64x8 (Int64Make hi lo) s) ->
317 (Int64Make
318 (Rsh32x8 <typ.UInt32> hi s)
319 (Or32 <typ.UInt32>
320 (Or32 <typ.UInt32>
321 (Rsh32Ux8 <typ.UInt32> lo s)
322 (Lsh32x8 <typ.UInt32>
323 hi
324 (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s)))
325 (And32 <typ.UInt32>
326 (Rsh32x8 <typ.UInt32>
327 hi
328 (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32])))
329 (Zeromask
330 (ZeroExt8to32
331 (Rsh8Ux32 <typ.UInt8> s (Const32 <typ.UInt32> [5])))))))
332
333 // 64xConst32 shifts
334 // we probably do not need them -- lateopt may take care of them just fine
335 //(Lsh64x32 _ (Const32 [c])) && uint32(c) >= 64 -> (Const64 [0])
336 //(Rsh64x32 x (Const32 [c])) && uint32(c) >= 64 -> (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x)))
337 //(Rsh64Ux32 _ (Const32 [c])) && uint32(c) >= 64 -> (Const64 [0])
338 //
339 //(Lsh64x32 x (Const32 [c])) && c < 64 && c > 32 ->
340 // (Int64Make
341 // (Lsh32x32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [c-32]))
342 // (Const32 <typ.UInt32> [0]))
343 //(Rsh64x32 x (Const32 [c])) && c < 64 && c > 32 ->
344 // (Int64Make
345 // (Signmask (Int64Hi x))
346 // (Rsh32x32 <typ.Int32> (Int64Hi x) (Const32 <typ.UInt32> [c-32])))
347 //(Rsh64Ux32 x (Const32 [c])) && c < 64 && c > 32 ->
348 // (Int64Make
349 // (Const32 <typ.UInt32> [0])
350 // (Rsh32Ux32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [c-32])))
351 //
352 //(Lsh64x32 x (Const32 [32])) -> (Int64Make (Int64Lo x) (Const32 <typ.UInt32> [0]))
353 //(Rsh64x32 x (Const32 [32])) -> (Int64Make (Signmask (Int64Hi x)) (Int64Hi x))
354 //(Rsh64Ux32 x (Const32 [32])) -> (Int64Make (Const32 <typ.UInt32> [0]) (Int64Hi x))
355 //
356 //(Lsh64x32 x (Const32 [c])) && c < 32 && c > 0 ->
357 // (Int64Make
358 // (Or32 <typ.UInt32>
359 // (Lsh32x32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [c]))
360 // (Rsh32Ux32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [32-c])))
361 // (Lsh32x32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [c])))
362 //(Rsh64x32 x (Const32 [c])) && c < 32 && c > 0 ->
363 // (Int64Make
364 // (Rsh32x32 <typ.Int32> (Int64Hi x) (Const32 <typ.UInt32> [c]))
365 // (Or32 <typ.UInt32>
366 // (Rsh32Ux32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [c]))
367 // (Lsh32x32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [32-c]))))
368 //(Rsh64Ux32 x (Const32 [c])) && c < 32 && c > 0 ->
369 // (Int64Make
370 // (Rsh32Ux32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [c]))
371 // (Or32 <typ.UInt32>
372 // (Rsh32Ux32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [c]))
373 // (Lsh32x32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [32-c]))))
374 //
375 //(Lsh64x32 x (Const32 [0])) -> x
376 //(Rsh64x32 x (Const32 [0])) -> x
377 //(Rsh64Ux32 x (Const32 [0])) -> x
378
379 (Const64 <t> [c]) && t.IsSigned() ->
380 (Int64Make (Const32 <typ.Int32> [c>>32]) (Const32 <typ.UInt32> [int64(int32(c))]))
381 (Const64 <t> [c]) && !t.IsSigned() ->
382 (Int64Make (Const32 <typ.UInt32> [c>>32]) (Const32 <typ.UInt32> [int64(int32(c))]))
383
384 (Eq64 x y) ->
385 (AndB
386 (Eq32 (Int64Hi x) (Int64Hi y))
387 (Eq32 (Int64Lo x) (Int64Lo y)))
388
389 (Neq64 x y) ->
390 (OrB
391 (Neq32 (Int64Hi x) (Int64Hi y))
392 (Neq32 (Int64Lo x) (Int64Lo y)))
393
394 (Less64U x y) ->
395 (OrB
396 (Less32U (Int64Hi x) (Int64Hi y))
397 (AndB
398 (Eq32 (Int64Hi x) (Int64Hi y))
399 (Less32U (Int64Lo x) (Int64Lo y))))
400
401 (Leq64U x y) ->
402 (OrB
403 (Less32U (Int64Hi x) (Int64Hi y))
404 (AndB
405 (Eq32 (Int64Hi x) (Int64Hi y))
406 (Leq32U (Int64Lo x) (Int64Lo y))))
407
408 (Greater64U x y) ->
409 (OrB
410 (Greater32U (Int64Hi x) (Int64Hi y))
411 (AndB
412 (Eq32 (Int64Hi x) (Int64Hi y))
413 (Greater32U (Int64Lo x) (Int64Lo y))))
414
415 (Geq64U x y) ->
416 (OrB
417 (Greater32U (Int64Hi x) (Int64Hi y))
418 (AndB
419 (Eq32 (Int64Hi x) (Int64Hi y))
420 (Geq32U (Int64Lo x) (Int64Lo y))))
421
422 (Less64 x y) ->
423 (OrB
424 (Less32 (Int64Hi x) (Int64Hi y))
425 (AndB
426 (Eq32 (Int64Hi x) (Int64Hi y))
427 (Less32U (Int64Lo x) (Int64Lo y))))
428
429 (Leq64 x y) ->
430 (OrB
431 (Less32 (Int64Hi x) (Int64Hi y))
432 (AndB
433 (Eq32 (Int64Hi x) (Int64Hi y))
434 (Leq32U (Int64Lo x) (Int64Lo y))))
435
436 (Greater64 x y) ->
437 (OrB
438 (Greater32 (Int64Hi x) (Int64Hi y))
439 (AndB
440 (Eq32 (Int64Hi x) (Int64Hi y))
441 (Greater32U (Int64Lo x) (Int64Lo y))))
442
443 (Geq64 x y) ->
444 (OrB
445 (Greater32 (Int64Hi x) (Int64Hi y))
446 (AndB
447 (Eq32 (Int64Hi x) (Int64Hi y))
448 (Geq32U (Int64Lo x) (Int64Lo y))))
View as plain text