github.com/euank/go@v0.0.0-20160829210321-495514729181/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 types. 8 9 (Int64Hi (Int64Make hi _)) -> hi 10 (Int64Lo (Int64Make _ lo)) -> lo 11 12 // Assuming little endian (we don't support big endian 32-bit architecture yet) 13 (Load <t> ptr mem) && is64BitInt(t) && t.IsSigned() -> 14 (Int64Make 15 (Load <config.fe.TypeInt32()> (OffPtr <config.fe.TypeInt32().PtrTo()> [4] ptr) mem) 16 (Load <config.fe.TypeUInt32()> ptr mem)) 17 (Load <t> ptr mem) && is64BitInt(t) && !t.IsSigned() -> 18 (Int64Make 19 (Load <config.fe.TypeUInt32()> (OffPtr <config.fe.TypeUInt32().PtrTo()> [4] ptr) mem) 20 (Load <config.fe.TypeUInt32()> ptr mem)) 21 22 (Store [8] dst (Int64Make hi lo) mem) -> 23 (Store [4] 24 (OffPtr <hi.Type.PtrTo()> [4] dst) 25 hi 26 (Store [4] dst lo mem)) 27 28 (Arg {n} [off]) && is64BitInt(v.Type) && v.Type.IsSigned() -> 29 (Int64Make 30 (Arg <config.fe.TypeInt32()> {n} [off+4]) 31 (Arg <config.fe.TypeUInt32()> {n} [off])) 32 (Arg {n} [off]) && is64BitInt(v.Type) && !v.Type.IsSigned() -> 33 (Int64Make 34 (Arg <config.fe.TypeUInt32()> {n} [off+4]) 35 (Arg <config.fe.TypeUInt32()> {n} [off])) 36 37 (Add64 x y) -> 38 (Int64Make 39 (Add32withcarry <config.fe.TypeInt32()> 40 (Int64Hi x) 41 (Int64Hi y) 42 (Select1 <TypeFlags> (Add32carry (Int64Lo x) (Int64Lo y)))) 43 (Select0 <config.fe.TypeUInt32()> (Add32carry (Int64Lo x) (Int64Lo y)))) 44 45 (Sub64 x y) -> 46 (Int64Make 47 (Sub32withcarry <config.fe.TypeInt32()> 48 (Int64Hi x) 49 (Int64Hi y) 50 (Select1 <TypeFlags> (Sub32carry (Int64Lo x) (Int64Lo y)))) 51 (Select0 <config.fe.TypeUInt32()> (Sub32carry (Int64Lo x) (Int64Lo y)))) 52 53 (Mul64 x y) -> 54 (Int64Make 55 (Add32 <config.fe.TypeUInt32()> 56 (Mul32 <config.fe.TypeUInt32()> (Int64Lo x) (Int64Hi y)) 57 (Add32 <config.fe.TypeUInt32()> 58 (Mul32 <config.fe.TypeUInt32()> (Int64Hi x) (Int64Lo y)) 59 (Select0 <config.fe.TypeUInt32()> (Mul32uhilo (Int64Lo x) (Int64Lo y))))) 60 (Select1 <config.fe.TypeUInt32()> (Mul32uhilo (Int64Lo x) (Int64Lo y)))) 61 62 (And64 x y) -> 63 (Int64Make 64 (And32 <config.fe.TypeUInt32()> (Int64Hi x) (Int64Hi y)) 65 (And32 <config.fe.TypeUInt32()> (Int64Lo x) (Int64Lo y))) 66 67 (Or64 x y) -> 68 (Int64Make 69 (Or32 <config.fe.TypeUInt32()> (Int64Hi x) (Int64Hi y)) 70 (Or32 <config.fe.TypeUInt32()> (Int64Lo x) (Int64Lo y))) 71 72 (Xor64 x y) -> 73 (Int64Make 74 (Xor32 <config.fe.TypeUInt32()> (Int64Hi x) (Int64Hi y)) 75 (Xor32 <config.fe.TypeUInt32()> (Int64Lo x) (Int64Lo y))) 76 77 (Neg64 <t> x) -> (Sub64 (Const64 <t> [0]) x) 78 79 (Com64 x) -> 80 (Int64Make 81 (Com32 <config.fe.TypeUInt32()> (Int64Hi x)) 82 (Com32 <config.fe.TypeUInt32()> (Int64Lo x))) 83 84 (SignExt32to64 x) -> (Int64Make (Signmask x) x) 85 (SignExt16to64 x) -> (SignExt32to64 (SignExt16to32 x)) 86 (SignExt8to64 x) -> (SignExt32to64 (SignExt8to32 x)) 87 88 (ZeroExt32to64 x) -> (Int64Make (Const32 <config.fe.TypeUInt32()> [0]) x) 89 (ZeroExt16to64 x) -> (ZeroExt32to64 (ZeroExt16to32 x)) 90 (ZeroExt8to64 x) -> (ZeroExt32to64 (ZeroExt8to32 x)) 91 92 (Trunc64to32 (Int64Make _ lo)) -> lo 93 (Trunc64to16 (Int64Make _ lo)) -> (Trunc32to16 lo) 94 (Trunc64to8 (Int64Make _ lo)) -> (Trunc32to8 lo) 95 96 (Lsh32x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 97 (Rsh32x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask x) 98 (Rsh32Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 99 (Lsh16x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 100 (Rsh16x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask (SignExt16to32 x)) 101 (Rsh16Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 102 (Lsh8x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 103 (Rsh8x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Signmask (SignExt8to32 x)) 104 (Rsh8Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const32 [0]) 105 106 (Lsh32x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh32x32 x lo) 107 (Rsh32x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh32x32 x lo) 108 (Rsh32Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh32Ux32 x lo) 109 (Lsh16x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh16x32 x lo) 110 (Rsh16x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh16x32 x lo) 111 (Rsh16Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh16Ux32 x lo) 112 (Lsh8x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh8x32 x lo) 113 (Rsh8x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh8x32 x lo) 114 (Rsh8Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh8Ux32 x lo) 115 116 (Lsh64x64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0]) 117 (Rsh64x64 x (Int64Make (Const32 [c]) _)) && c != 0 -> (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x))) 118 (Rsh64Ux64 _ (Int64Make (Const32 [c]) _)) && c != 0 -> (Const64 [0]) 119 120 (Lsh64x64 x (Int64Make (Const32 [0]) lo)) -> (Lsh64x32 x lo) 121 (Rsh64x64 x (Int64Make (Const32 [0]) lo)) -> (Rsh64x32 x lo) 122 (Rsh64Ux64 x (Int64Make (Const32 [0]) lo)) -> (Rsh64Ux32 x lo) 123 124 // turn x64 non-constant shifts to x32 shifts 125 // if high 32-bit of the shift is nonzero, make a huge shift 126 (Lsh64x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 127 (Lsh64x32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 128 (Rsh64x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 129 (Rsh64x32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 130 (Rsh64Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 131 (Rsh64Ux32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 132 (Lsh32x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 133 (Lsh32x32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 134 (Rsh32x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 135 (Rsh32x32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 136 (Rsh32Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 137 (Rsh32Ux32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 138 (Lsh16x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 139 (Lsh16x32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 140 (Rsh16x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 141 (Rsh16x32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 142 (Rsh16Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 143 (Rsh16Ux32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 144 (Lsh8x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 145 (Lsh8x32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 146 (Rsh8x64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 147 (Rsh8x32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 148 (Rsh8Ux64 x (Int64Make hi lo)) && hi.Op != OpConst32 -> 149 (Rsh8Ux32 x (Or32 <config.fe.TypeUInt32()> (Zeromask hi) lo)) 150 151 // 64x left shift 152 // result.hi = hi<<s | lo>>(32-s) | lo<<(s-32) // >> is unsigned, large shifts result 0 153 // result.lo = lo<<s 154 (Lsh64x32 (Int64Make hi lo) s) -> 155 (Int64Make 156 (Or32 <config.fe.TypeUInt32()> 157 (Or32 <config.fe.TypeUInt32()> 158 (Lsh32x32 <config.fe.TypeUInt32()> hi s) 159 (Rsh32Ux32 <config.fe.TypeUInt32()> 160 lo 161 (Sub32 <config.fe.TypeUInt32()> (Const32 <config.fe.TypeUInt32()> [32]) s))) 162 (Lsh32x32 <config.fe.TypeUInt32()> 163 lo 164 (Sub32 <config.fe.TypeUInt32()> s (Const32 <config.fe.TypeUInt32()> [32])))) 165 (Lsh32x32 <config.fe.TypeUInt32()> lo s)) 166 (Lsh64x16 (Int64Make hi lo) s) -> 167 (Int64Make 168 (Or32 <config.fe.TypeUInt32()> 169 (Or32 <config.fe.TypeUInt32()> 170 (Lsh32x16 <config.fe.TypeUInt32()> hi s) 171 (Rsh32Ux16 <config.fe.TypeUInt32()> 172 lo 173 (Sub16 <config.fe.TypeUInt16()> (Const16 <config.fe.TypeUInt16()> [32]) s))) 174 (Lsh32x16 <config.fe.TypeUInt32()> 175 lo 176 (Sub16 <config.fe.TypeUInt16()> s (Const16 <config.fe.TypeUInt16()> [32])))) 177 (Lsh32x16 <config.fe.TypeUInt32()> lo s)) 178 (Lsh64x8 (Int64Make hi lo) s) -> 179 (Int64Make 180 (Or32 <config.fe.TypeUInt32()> 181 (Or32 <config.fe.TypeUInt32()> 182 (Lsh32x8 <config.fe.TypeUInt32()> hi s) 183 (Rsh32Ux8 <config.fe.TypeUInt32()> 184 lo 185 (Sub8 <config.fe.TypeUInt8()> (Const8 <config.fe.TypeUInt8()> [32]) s))) 186 (Lsh32x8 <config.fe.TypeUInt32()> 187 lo 188 (Sub8 <config.fe.TypeUInt8()> s (Const8 <config.fe.TypeUInt8()> [32])))) 189 (Lsh32x8 <config.fe.TypeUInt32()> lo s)) 190 191 // 64x unsigned right shift 192 // result.hi = hi>>s 193 // result.lo = lo>>s | hi<<(32-s) | hi>>(s-32) // >> is unsigned, large shifts result 0 194 (Rsh64Ux32 (Int64Make hi lo) s) -> 195 (Int64Make 196 (Rsh32Ux32 <config.fe.TypeUInt32()> hi s) 197 (Or32 <config.fe.TypeUInt32()> 198 (Or32 <config.fe.TypeUInt32()> 199 (Rsh32Ux32 <config.fe.TypeUInt32()> lo s) 200 (Lsh32x32 <config.fe.TypeUInt32()> 201 hi 202 (Sub32 <config.fe.TypeUInt32()> (Const32 <config.fe.TypeUInt32()> [32]) s))) 203 (Rsh32Ux32 <config.fe.TypeUInt32()> 204 hi 205 (Sub32 <config.fe.TypeUInt32()> s (Const32 <config.fe.TypeUInt32()> [32]))))) 206 (Rsh64Ux16 (Int64Make hi lo) s) -> 207 (Int64Make 208 (Rsh32Ux16 <config.fe.TypeUInt32()> hi s) 209 (Or32 <config.fe.TypeUInt32()> 210 (Or32 <config.fe.TypeUInt32()> 211 (Rsh32Ux16 <config.fe.TypeUInt32()> lo s) 212 (Lsh32x16 <config.fe.TypeUInt32()> 213 hi 214 (Sub16 <config.fe.TypeUInt16()> (Const16 <config.fe.TypeUInt16()> [32]) s))) 215 (Rsh32Ux16 <config.fe.TypeUInt32()> 216 hi 217 (Sub16 <config.fe.TypeUInt16()> s (Const16 <config.fe.TypeUInt16()> [32]))))) 218 (Rsh64Ux8 (Int64Make hi lo) s) -> 219 (Int64Make 220 (Rsh32Ux8 <config.fe.TypeUInt32()> hi s) 221 (Or32 <config.fe.TypeUInt32()> 222 (Or32 <config.fe.TypeUInt32()> 223 (Rsh32Ux8 <config.fe.TypeUInt32()> lo s) 224 (Lsh32x8 <config.fe.TypeUInt32()> 225 hi 226 (Sub8 <config.fe.TypeUInt8()> (Const8 <config.fe.TypeUInt8()> [32]) s))) 227 (Rsh32Ux8 <config.fe.TypeUInt32()> 228 hi 229 (Sub8 <config.fe.TypeUInt8()> s (Const8 <config.fe.TypeUInt8()> [32]))))) 230 231 // 64x signed right shift 232 // result.hi = hi>>s 233 // result.lo = lo>>s | hi<<(32-s) | (hi>>(s-32))&zeromask(s>>5) // hi>>(s-32) is signed, large shifts result 0/-1 234 (Rsh64x32 (Int64Make hi lo) s) -> 235 (Int64Make 236 (Rsh32x32 <config.fe.TypeUInt32()> hi s) 237 (Or32 <config.fe.TypeUInt32()> 238 (Or32 <config.fe.TypeUInt32()> 239 (Rsh32Ux32 <config.fe.TypeUInt32()> lo s) 240 (Lsh32x32 <config.fe.TypeUInt32()> 241 hi 242 (Sub32 <config.fe.TypeUInt32()> (Const32 <config.fe.TypeUInt32()> [32]) s))) 243 (And32 <config.fe.TypeUInt32()> 244 (Rsh32x32 <config.fe.TypeUInt32()> 245 hi 246 (Sub32 <config.fe.TypeUInt32()> s (Const32 <config.fe.TypeUInt32()> [32]))) 247 (Zeromask 248 (Rsh32Ux32 <config.fe.TypeUInt32()> s (Const32 <config.fe.TypeUInt32()> [5])))))) 249 (Rsh64x16 (Int64Make hi lo) s) -> 250 (Int64Make 251 (Rsh32x16 <config.fe.TypeUInt32()> hi s) 252 (Or32 <config.fe.TypeUInt32()> 253 (Or32 <config.fe.TypeUInt32()> 254 (Rsh32Ux16 <config.fe.TypeUInt32()> lo s) 255 (Lsh32x16 <config.fe.TypeUInt32()> 256 hi 257 (Sub16 <config.fe.TypeUInt16()> (Const16 <config.fe.TypeUInt16()> [32]) s))) 258 (And32 <config.fe.TypeUInt32()> 259 (Rsh32x16 <config.fe.TypeUInt32()> 260 hi 261 (Sub16 <config.fe.TypeUInt16()> s (Const16 <config.fe.TypeUInt16()> [32]))) 262 (Zeromask 263 (ZeroExt16to32 264 (Rsh16Ux32 <config.fe.TypeUInt16()> s (Const32 <config.fe.TypeUInt32()> [5]))))))) 265 (Rsh64x8 (Int64Make hi lo) s) -> 266 (Int64Make 267 (Rsh32x8 <config.fe.TypeUInt32()> hi s) 268 (Or32 <config.fe.TypeUInt32()> 269 (Or32 <config.fe.TypeUInt32()> 270 (Rsh32Ux8 <config.fe.TypeUInt32()> lo s) 271 (Lsh32x8 <config.fe.TypeUInt32()> 272 hi 273 (Sub8 <config.fe.TypeUInt8()> (Const8 <config.fe.TypeUInt8()> [32]) s))) 274 (And32 <config.fe.TypeUInt32()> 275 (Rsh32x8 <config.fe.TypeUInt32()> 276 hi 277 (Sub8 <config.fe.TypeUInt8()> s (Const8 <config.fe.TypeUInt8()> [32]))) 278 (Zeromask 279 (ZeroExt8to32 280 (Rsh8Ux32 <config.fe.TypeUInt8()> s (Const32 <config.fe.TypeUInt32()> [5]))))))) 281 282 // 64xConst32 shifts 283 // we probably do not need them -- lateopt may take care of them just fine 284 //(Lsh64x32 _ (Const32 [c])) && uint32(c) >= 64 -> (Const64 [0]) 285 //(Rsh64x32 x (Const32 [c])) && uint32(c) >= 64 -> (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x))) 286 //(Rsh64Ux32 _ (Const32 [c])) && uint32(c) >= 64 -> (Const64 [0]) 287 // 288 //(Lsh64x32 x (Const32 [c])) && c < 64 && c > 32 -> 289 // (Int64Make 290 // (Lsh32x32 <config.fe.TypeUInt32()> (Int64Lo x) (Const32 <config.fe.TypeUInt32()> [c-32])) 291 // (Const32 <config.fe.TypeUInt32()> [0])) 292 //(Rsh64x32 x (Const32 [c])) && c < 64 && c > 32 -> 293 // (Int64Make 294 // (Signmask (Int64Hi x)) 295 // (Rsh32x32 <config.fe.TypeInt32()> (Int64Hi x) (Const32 <config.fe.TypeUInt32()> [c-32]))) 296 //(Rsh64Ux32 x (Const32 [c])) && c < 64 && c > 32 -> 297 // (Int64Make 298 // (Const32 <config.fe.TypeUInt32()> [0]) 299 // (Rsh32Ux32 <config.fe.TypeUInt32()> (Int64Hi x) (Const32 <config.fe.TypeUInt32()> [c-32]))) 300 // 301 //(Lsh64x32 x (Const32 [32])) -> (Int64Make (Int64Lo x) (Const32 <config.fe.TypeUInt32()> [0])) 302 //(Rsh64x32 x (Const32 [32])) -> (Int64Make (Signmask (Int64Hi x)) (Int64Hi x)) 303 //(Rsh64Ux32 x (Const32 [32])) -> (Int64Make (Const32 <config.fe.TypeUInt32()> [0]) (Int64Hi x)) 304 // 305 //(Lsh64x32 x (Const32 [c])) && c < 32 && c > 0 -> 306 // (Int64Make 307 // (Or32 <config.fe.TypeUInt32()> 308 // (Lsh32x32 <config.fe.TypeUInt32()> (Int64Hi x) (Const32 <config.fe.TypeUInt32()> [c])) 309 // (Rsh32Ux32 <config.fe.TypeUInt32()> (Int64Lo x) (Const32 <config.fe.TypeUInt32()> [32-c]))) 310 // (Lsh32x32 <config.fe.TypeUInt32()> (Int64Lo x) (Const32 <config.fe.TypeUInt32()> [c]))) 311 //(Rsh64x32 x (Const32 [c])) && c < 32 && c > 0 -> 312 // (Int64Make 313 // (Rsh32x32 <config.fe.TypeInt32()> (Int64Hi x) (Const32 <config.fe.TypeUInt32()> [c])) 314 // (Or32 <config.fe.TypeUInt32()> 315 // (Rsh32Ux32 <config.fe.TypeUInt32()> (Int64Lo x) (Const32 <config.fe.TypeUInt32()> [c])) 316 // (Lsh32x32 <config.fe.TypeUInt32()> (Int64Hi x) (Const32 <config.fe.TypeUInt32()> [32-c])))) 317 //(Rsh64Ux32 x (Const32 [c])) && c < 32 && c > 0 -> 318 // (Int64Make 319 // (Rsh32Ux32 <config.fe.TypeUInt32()> (Int64Hi x) (Const32 <config.fe.TypeUInt32()> [c])) 320 // (Or32 <config.fe.TypeUInt32()> 321 // (Rsh32Ux32 <config.fe.TypeUInt32()> (Int64Lo x) (Const32 <config.fe.TypeUInt32()> [c])) 322 // (Lsh32x32 <config.fe.TypeUInt32()> (Int64Hi x) (Const32 <config.fe.TypeUInt32()> [32-c])))) 323 // 324 //(Lsh64x32 x (Const32 [0])) -> x 325 //(Rsh64x32 x (Const32 [0])) -> x 326 //(Rsh64Ux32 x (Const32 [0])) -> x 327 328 (Lrot64 (Int64Make hi lo) [c]) && c <= 32 -> 329 (Int64Make 330 (Or32 <config.fe.TypeUInt32()> 331 (Lsh32x32 <config.fe.TypeUInt32()> hi (Const32 <config.fe.TypeUInt32()> [c])) 332 (Rsh32Ux32 <config.fe.TypeUInt32()> lo (Const32 <config.fe.TypeUInt32()> [32-c]))) 333 (Or32 <config.fe.TypeUInt32()> 334 (Lsh32x32 <config.fe.TypeUInt32()> lo (Const32 <config.fe.TypeUInt32()> [c])) 335 (Rsh32Ux32 <config.fe.TypeUInt32()> hi (Const32 <config.fe.TypeUInt32()> [32-c])))) 336 (Lrot64 (Int64Make hi lo) [c]) && c > 32 -> (Lrot64 (Int64Make lo hi) [c-32]) 337 338 (Const64 <t> [c]) && t.IsSigned() -> 339 (Int64Make (Const32 <config.fe.TypeInt32()> [c>>32]) (Const32 <config.fe.TypeUInt32()> [int64(int32(c))])) 340 (Const64 <t> [c]) && !t.IsSigned() -> 341 (Int64Make (Const32 <config.fe.TypeUInt32()> [c>>32]) (Const32 <config.fe.TypeUInt32()> [int64(int32(c))])) 342 343 (Eq64 x y) -> 344 (AndB 345 (Eq32 (Int64Hi x) (Int64Hi y)) 346 (Eq32 (Int64Lo x) (Int64Lo y))) 347 348 (Neq64 x y) -> 349 (OrB 350 (Neq32 (Int64Hi x) (Int64Hi y)) 351 (Neq32 (Int64Lo x) (Int64Lo y))) 352 353 (Less64U x y) -> 354 (OrB 355 (Less32U (Int64Hi x) (Int64Hi y)) 356 (AndB 357 (Eq32 (Int64Hi x) (Int64Hi y)) 358 (Less32U (Int64Lo x) (Int64Lo y)))) 359 360 (Leq64U x y) -> 361 (OrB 362 (Less32U (Int64Hi x) (Int64Hi y)) 363 (AndB 364 (Eq32 (Int64Hi x) (Int64Hi y)) 365 (Leq32U (Int64Lo x) (Int64Lo y)))) 366 367 (Greater64U x y) -> 368 (OrB 369 (Greater32U (Int64Hi x) (Int64Hi y)) 370 (AndB 371 (Eq32 (Int64Hi x) (Int64Hi y)) 372 (Greater32U (Int64Lo x) (Int64Lo y)))) 373 374 (Geq64U x y) -> 375 (OrB 376 (Greater32U (Int64Hi x) (Int64Hi y)) 377 (AndB 378 (Eq32 (Int64Hi x) (Int64Hi y)) 379 (Geq32U (Int64Lo x) (Int64Lo y)))) 380 381 (Less64 x y) -> 382 (OrB 383 (Less32 (Int64Hi x) (Int64Hi y)) 384 (AndB 385 (Eq32 (Int64Hi x) (Int64Hi y)) 386 (Less32U (Int64Lo x) (Int64Lo y)))) 387 388 (Leq64 x y) -> 389 (OrB 390 (Less32 (Int64Hi x) (Int64Hi y)) 391 (AndB 392 (Eq32 (Int64Hi x) (Int64Hi y)) 393 (Leq32U (Int64Lo x) (Int64Lo y)))) 394 395 (Greater64 x y) -> 396 (OrB 397 (Greater32 (Int64Hi x) (Int64Hi y)) 398 (AndB 399 (Eq32 (Int64Hi x) (Int64Hi y)) 400 (Greater32U (Int64Lo x) (Int64Lo y)))) 401 402 (Geq64 x y) -> 403 (OrB 404 (Greater32 (Int64Hi x) (Int64Hi y)) 405 (AndB 406 (Eq32 (Int64Hi x) (Int64Hi y)) 407 (Geq32U (Int64Lo x) (Int64Lo y))))