github.com/corona10/go@v0.0.0-20180224231303-7a218942be57/src/cmd/compile/internal/ssa/gen/dec64.rules (about) 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 (Ctz64 x) -> 111 (Add32 <typ.UInt32> 112 (Ctz32 <typ.UInt32> (Int64Lo x)) 113 (And32 <typ.UInt32> 114 (Com32 <typ.UInt32> (Zeromask (Int64Lo x))) 115 (Ctz32 <typ.UInt32> (Int64Hi x)))) 116 117 (BitLen64 x) -> 118 (Add32 <typ.Int> 119 (BitLen32 <typ.Int> (Int64Hi x)) 120 (BitLen32 <typ.Int> 121 (Or32 <typ.UInt32> 122 (Int64Lo x) 123 (Zeromask (Int64Hi x))))) 124 125 (Bswap64 x) -> 126 (Int64Make 127 (Bswap32 <typ.UInt32> (Int64Lo x)) 128 (Bswap32 <typ.UInt32> (Int64Hi x))) 129 130 (SignExt32to64 x) -> (Int64Make (Signmask x) x) 131 (SignExt16to64 x) -> (SignExt32to64 (SignExt16to32 x)) 132 (SignExt8to64 x) -> (SignExt32to64 (SignExt8to32 x)) 133 134 (ZeroExt32to64 x) -> (Int64Make (Const32 <typ.UInt32> [0]) x) 135 (ZeroExt16to64 x) -> (ZeroExt32to64 (ZeroExt16to32 x)) 136 (ZeroExt8to64 x) -> (ZeroExt32to64 (ZeroExt8to32 x)) 137 138 (Trunc64to32 (Int64Make _ lo)) -> lo 139 (Trunc64to16 (Int64Make _ lo)) -> (Trunc32to16 lo) 140 (Trunc64to8 (Int64Make _ lo)) -> (Trunc32to8 lo) 141 142 (Lsh32x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 143 (Rsh32x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask x) 144 (Rsh32Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 145 (Lsh16x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 146 (Rsh16x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask (SignExt16to32 x)) 147 (Rsh16Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 148 (Lsh8x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 149 (Rsh8x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask (SignExt8to32 x)) 150 (Rsh8Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 151 152 (Lsh32x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh32x32 x lo) 153 (Rsh32x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh32x32 x lo) 154 (Rsh32Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh32Ux32 x lo) 155 (Lsh16x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh16x32 x lo) 156 (Rsh16x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh16x32 x lo) 157 (Rsh16Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh16Ux32 x lo) 158 (Lsh8x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh8x32 x lo) 159 (Rsh8x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh8x32 x lo) 160 (Rsh8Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh8Ux32 x lo) 161 162 (Lsh64x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0]) 163 (Rsh64x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x))) 164 (Rsh64Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0]) 165 166 (Lsh64x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh64x32 x lo) 167 (Rsh64x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh64x32 x lo) 168 (Rsh64Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh64Ux32 x lo) 169 170 // turn x64 non-constant shifts to x32 shifts 171 // if high 32-bit of the shift is nonzero, make a huge shift 172 (Lsh64x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 173 (Lsh64x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 174 (Rsh64x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 175 (Rsh64x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 176 (Rsh64Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 177 (Rsh64Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 178 (Lsh32x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 179 (Lsh32x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 180 (Rsh32x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 181 (Rsh32x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 182 (Rsh32Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 183 (Rsh32Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 184 (Lsh16x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 185 (Lsh16x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 186 (Rsh16x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 187 (Rsh16x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 188 (Rsh16Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 189 (Rsh16Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 190 (Lsh8x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 191 (Lsh8x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 192 (Rsh8x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 193 (Rsh8x32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 194 (Rsh8Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 195 (Rsh8Ux32 x (Or32 <typ.UInt32> (Zeromask hi) lo)) 196 197 // 64x left shift 198 // result.hi = hi<<s | lo>>(32-s) | lo<<(s-32) // >> is unsigned, large shifts result 0 199 // result.lo = lo<<s 200 (Lsh64x32 (Int64Make hi lo) s) -> 201 (Int64Make 202 (Or32 <typ.UInt32> 203 (Or32 <typ.UInt32> 204 (Lsh32x32 <typ.UInt32> hi s) 205 (Rsh32Ux32 <typ.UInt32> 206 lo 207 (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) 208 (Lsh32x32 <typ.UInt32> 209 lo 210 (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32])))) 211 (Lsh32x32 <typ.UInt32> lo s)) 212 (Lsh64x16 (Int64Make hi lo) s) -> 213 (Int64Make 214 (Or32 <typ.UInt32> 215 (Or32 <typ.UInt32> 216 (Lsh32x16 <typ.UInt32> hi s) 217 (Rsh32Ux16 <typ.UInt32> 218 lo 219 (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) 220 (Lsh32x16 <typ.UInt32> 221 lo 222 (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32])))) 223 (Lsh32x16 <typ.UInt32> lo s)) 224 (Lsh64x8 (Int64Make hi lo) s) -> 225 (Int64Make 226 (Or32 <typ.UInt32> 227 (Or32 <typ.UInt32> 228 (Lsh32x8 <typ.UInt32> hi s) 229 (Rsh32Ux8 <typ.UInt32> 230 lo 231 (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) 232 (Lsh32x8 <typ.UInt32> 233 lo 234 (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32])))) 235 (Lsh32x8 <typ.UInt32> lo s)) 236 237 // 64x unsigned right shift 238 // result.hi = hi>>s 239 // result.lo = lo>>s | hi<<(32-s) | hi>>(s-32) // >> is unsigned, large shifts result 0 240 (Rsh64Ux32 (Int64Make hi lo) s) -> 241 (Int64Make 242 (Rsh32Ux32 <typ.UInt32> hi s) 243 (Or32 <typ.UInt32> 244 (Or32 <typ.UInt32> 245 (Rsh32Ux32 <typ.UInt32> lo s) 246 (Lsh32x32 <typ.UInt32> 247 hi 248 (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) 249 (Rsh32Ux32 <typ.UInt32> 250 hi 251 (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32]))))) 252 (Rsh64Ux16 (Int64Make hi lo) s) -> 253 (Int64Make 254 (Rsh32Ux16 <typ.UInt32> hi s) 255 (Or32 <typ.UInt32> 256 (Or32 <typ.UInt32> 257 (Rsh32Ux16 <typ.UInt32> lo s) 258 (Lsh32x16 <typ.UInt32> 259 hi 260 (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) 261 (Rsh32Ux16 <typ.UInt32> 262 hi 263 (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32]))))) 264 (Rsh64Ux8 (Int64Make hi lo) s) -> 265 (Int64Make 266 (Rsh32Ux8 <typ.UInt32> hi s) 267 (Or32 <typ.UInt32> 268 (Or32 <typ.UInt32> 269 (Rsh32Ux8 <typ.UInt32> lo s) 270 (Lsh32x8 <typ.UInt32> 271 hi 272 (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) 273 (Rsh32Ux8 <typ.UInt32> 274 hi 275 (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32]))))) 276 277 // 64x signed right shift 278 // result.hi = hi>>s 279 // result.lo = lo>>s | hi<<(32-s) | (hi>>(s-32))&zeromask(s>>5) // hi>>(s-32) is signed, large shifts result 0/-1 280 (Rsh64x32 (Int64Make hi lo) s) -> 281 (Int64Make 282 (Rsh32x32 <typ.UInt32> hi s) 283 (Or32 <typ.UInt32> 284 (Or32 <typ.UInt32> 285 (Rsh32Ux32 <typ.UInt32> lo s) 286 (Lsh32x32 <typ.UInt32> 287 hi 288 (Sub32 <typ.UInt32> (Const32 <typ.UInt32> [32]) s))) 289 (And32 <typ.UInt32> 290 (Rsh32x32 <typ.UInt32> 291 hi 292 (Sub32 <typ.UInt32> s (Const32 <typ.UInt32> [32]))) 293 (Zeromask 294 (Rsh32Ux32 <typ.UInt32> s (Const32 <typ.UInt32> [5])))))) 295 (Rsh64x16 (Int64Make hi lo) s) -> 296 (Int64Make 297 (Rsh32x16 <typ.UInt32> hi s) 298 (Or32 <typ.UInt32> 299 (Or32 <typ.UInt32> 300 (Rsh32Ux16 <typ.UInt32> lo s) 301 (Lsh32x16 <typ.UInt32> 302 hi 303 (Sub16 <typ.UInt16> (Const16 <typ.UInt16> [32]) s))) 304 (And32 <typ.UInt32> 305 (Rsh32x16 <typ.UInt32> 306 hi 307 (Sub16 <typ.UInt16> s (Const16 <typ.UInt16> [32]))) 308 (Zeromask 309 (ZeroExt16to32 310 (Rsh16Ux32 <typ.UInt16> s (Const32 <typ.UInt32> [5]))))))) 311 (Rsh64x8 (Int64Make hi lo) s) -> 312 (Int64Make 313 (Rsh32x8 <typ.UInt32> hi s) 314 (Or32 <typ.UInt32> 315 (Or32 <typ.UInt32> 316 (Rsh32Ux8 <typ.UInt32> lo s) 317 (Lsh32x8 <typ.UInt32> 318 hi 319 (Sub8 <typ.UInt8> (Const8 <typ.UInt8> [32]) s))) 320 (And32 <typ.UInt32> 321 (Rsh32x8 <typ.UInt32> 322 hi 323 (Sub8 <typ.UInt8> s (Const8 <typ.UInt8> [32]))) 324 (Zeromask 325 (ZeroExt8to32 326 (Rsh8Ux32 <typ.UInt8> s (Const32 <typ.UInt32> [5]))))))) 327 328 // 64xConst32 shifts 329 // we probably do not need them -- lateopt may take care of them just fine 330 //(Lsh64x32 _ (Const32 [c])) && uint32(c) >= 64 -> (Const64 [0]) 331 //(Rsh64x32 x (Const32 [c])) && uint32(c) >= 64 -> (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x))) 332 //(Rsh64Ux32 _ (Const32 [c])) && uint32(c) >= 64 -> (Const64 [0]) 333 // 334 //(Lsh64x32 x (Const32 [c])) && c < 64 && c > 32 -> 335 // (Int64Make 336 // (Lsh32x32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [c-32])) 337 // (Const32 <typ.UInt32> [0])) 338 //(Rsh64x32 x (Const32 [c])) && c < 64 && c > 32 -> 339 // (Int64Make 340 // (Signmask (Int64Hi x)) 341 // (Rsh32x32 <typ.Int32> (Int64Hi x) (Const32 <typ.UInt32> [c-32]))) 342 //(Rsh64Ux32 x (Const32 [c])) && c < 64 && c > 32 -> 343 // (Int64Make 344 // (Const32 <typ.UInt32> [0]) 345 // (Rsh32Ux32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [c-32]))) 346 // 347 //(Lsh64x32 x (Const32 [32])) -> (Int64Make (Int64Lo x) (Const32 <typ.UInt32> [0])) 348 //(Rsh64x32 x (Const32 [32])) -> (Int64Make (Signmask (Int64Hi x)) (Int64Hi x)) 349 //(Rsh64Ux32 x (Const32 [32])) -> (Int64Make (Const32 <typ.UInt32> [0]) (Int64Hi x)) 350 // 351 //(Lsh64x32 x (Const32 [c])) && c < 32 && c > 0 -> 352 // (Int64Make 353 // (Or32 <typ.UInt32> 354 // (Lsh32x32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [c])) 355 // (Rsh32Ux32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [32-c]))) 356 // (Lsh32x32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [c]))) 357 //(Rsh64x32 x (Const32 [c])) && c < 32 && c > 0 -> 358 // (Int64Make 359 // (Rsh32x32 <typ.Int32> (Int64Hi x) (Const32 <typ.UInt32> [c])) 360 // (Or32 <typ.UInt32> 361 // (Rsh32Ux32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [c])) 362 // (Lsh32x32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [32-c])))) 363 //(Rsh64Ux32 x (Const32 [c])) && c < 32 && c > 0 -> 364 // (Int64Make 365 // (Rsh32Ux32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [c])) 366 // (Or32 <typ.UInt32> 367 // (Rsh32Ux32 <typ.UInt32> (Int64Lo x) (Const32 <typ.UInt32> [c])) 368 // (Lsh32x32 <typ.UInt32> (Int64Hi x) (Const32 <typ.UInt32> [32-c])))) 369 // 370 //(Lsh64x32 x (Const32 [0])) -> x 371 //(Rsh64x32 x (Const32 [0])) -> x 372 //(Rsh64Ux32 x (Const32 [0])) -> x 373 374 (Const64 <t> [c]) && t.IsSigned() -> 375 (Int64Make (Const32 <typ.Int32> [c>>32]) (Const32 <typ.UInt32> [int64(int32(c))])) 376 (Const64 <t> [c]) && !t.IsSigned() -> 377 (Int64Make (Const32 <typ.UInt32> [c>>32]) (Const32 <typ.UInt32> [int64(int32(c))])) 378 379 (Eq64 x y) -> 380 (AndB 381 (Eq32 (Int64Hi x) (Int64Hi y)) 382 (Eq32 (Int64Lo x) (Int64Lo y))) 383 384 (Neq64 x y) -> 385 (OrB 386 (Neq32 (Int64Hi x) (Int64Hi y)) 387 (Neq32 (Int64Lo x) (Int64Lo y))) 388 389 (Less64U x y) -> 390 (OrB 391 (Less32U (Int64Hi x) (Int64Hi y)) 392 (AndB 393 (Eq32 (Int64Hi x) (Int64Hi y)) 394 (Less32U (Int64Lo x) (Int64Lo y)))) 395 396 (Leq64U x y) -> 397 (OrB 398 (Less32U (Int64Hi x) (Int64Hi y)) 399 (AndB 400 (Eq32 (Int64Hi x) (Int64Hi y)) 401 (Leq32U (Int64Lo x) (Int64Lo y)))) 402 403 (Greater64U x y) -> 404 (OrB 405 (Greater32U (Int64Hi x) (Int64Hi y)) 406 (AndB 407 (Eq32 (Int64Hi x) (Int64Hi y)) 408 (Greater32U (Int64Lo x) (Int64Lo y)))) 409 410 (Geq64U x y) -> 411 (OrB 412 (Greater32U (Int64Hi x) (Int64Hi y)) 413 (AndB 414 (Eq32 (Int64Hi x) (Int64Hi y)) 415 (Geq32U (Int64Lo x) (Int64Lo y)))) 416 417 (Less64 x y) -> 418 (OrB 419 (Less32 (Int64Hi x) (Int64Hi y)) 420 (AndB 421 (Eq32 (Int64Hi x) (Int64Hi y)) 422 (Less32U (Int64Lo x) (Int64Lo y)))) 423 424 (Leq64 x y) -> 425 (OrB 426 (Less32 (Int64Hi x) (Int64Hi y)) 427 (AndB 428 (Eq32 (Int64Hi x) (Int64Hi y)) 429 (Leq32U (Int64Lo x) (Int64Lo y)))) 430 431 (Greater64 x y) -> 432 (OrB 433 (Greater32 (Int64Hi x) (Int64Hi y)) 434 (AndB 435 (Eq32 (Int64Hi x) (Int64Hi y)) 436 (Greater32U (Int64Lo x) (Int64Lo y)))) 437 438 (Geq64 x y) -> 439 (OrB 440 (Greater32 (Int64Hi x) (Int64Hi y)) 441 (AndB 442 (Eq32 (Int64Hi x) (Int64Hi y)) 443 (Geq32U (Int64Lo x) (Int64Lo y))))