github.com/zxy12/go_duplicate_112_new@v0.0.0-20200807091221-747231827200/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 // 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))))