1cb15e657SMikhail Gudim; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv32 < %s | FileCheck %s -check-prefix=RV32I 3cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 < %s | FileCheck %s -check-prefix=RV64I 4cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+xventanacondops < %s | FileCheck %s -check-prefix=RV64XVENTANACONDOPS 5cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+xtheadcondmov < %s | FileCheck %s -check-prefix=RV64XTHEADCONDMOV 6d833b9d6SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+zicond < %s | FileCheck %s -check-prefix=RV32ZICOND 7d833b9d6SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+zicond < %s | FileCheck %s -check-prefix=RV64ZICOND 8cb15e657SMikhail Gudim 9cb15e657SMikhail Gudimdefine i32 @shl32(i32 %x, i32 %y, i1 %c) { 10cb15e657SMikhail Gudim; RV32I-LABEL: shl32: 11cb15e657SMikhail Gudim; RV32I: # %bb.0: 120fb3ebb2SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 130fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 140fb3ebb2SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 15cb15e657SMikhail Gudim; RV32I-NEXT: sll a0, a0, a1 16cb15e657SMikhail Gudim; RV32I-NEXT: ret 17cb15e657SMikhail Gudim; 18cb15e657SMikhail Gudim; RV64I-LABEL: shl32: 19cb15e657SMikhail Gudim; RV64I: # %bb.0: 200fb3ebb2SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 210fb3ebb2SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 220fb3ebb2SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 23cb15e657SMikhail Gudim; RV64I-NEXT: sllw a0, a0, a1 24cb15e657SMikhail Gudim; RV64I-NEXT: ret 25cb15e657SMikhail Gudim; 26cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: shl32: 27cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 28cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 29cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 300fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sllw a0, a0, a1 31cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 32cb15e657SMikhail Gudim; 33cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: shl32: 34cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 35cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 360fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 370fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sllw a0, a0, a1 38cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 39cb15e657SMikhail Gudim; 40cb15e657SMikhail Gudim; RV32ZICOND-LABEL: shl32: 41cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 42cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 43cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 440fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: sll a0, a0, a1 45cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 46cb15e657SMikhail Gudim; 47cb15e657SMikhail Gudim; RV64ZICOND-LABEL: shl32: 48cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 49cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 50cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 510fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT: sllw a0, a0, a1 52cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 53cb15e657SMikhail Gudim %binop = shl i32 %x, %y 54cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 55cb15e657SMikhail Gudim ret i32 %select_ 56cb15e657SMikhail Gudim} 57cb15e657SMikhail Gudim 58cb15e657SMikhail Gudimdefine i32 @ashr32(i32 %x, i32 %y, i1 %c) { 59cb15e657SMikhail Gudim; RV32I-LABEL: ashr32: 60cb15e657SMikhail Gudim; RV32I: # %bb.0: 610fb3ebb2SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 620fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 630fb3ebb2SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 64cb15e657SMikhail Gudim; RV32I-NEXT: sra a0, a0, a1 65cb15e657SMikhail Gudim; RV32I-NEXT: ret 66cb15e657SMikhail Gudim; 67cb15e657SMikhail Gudim; RV64I-LABEL: ashr32: 68cb15e657SMikhail Gudim; RV64I: # %bb.0: 690fb3ebb2SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 700fb3ebb2SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 710fb3ebb2SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 72cb15e657SMikhail Gudim; RV64I-NEXT: sraw a0, a0, a1 73cb15e657SMikhail Gudim; RV64I-NEXT: ret 74cb15e657SMikhail Gudim; 75cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: ashr32: 76cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 77cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 78cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 790fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sraw a0, a0, a1 80cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 81cb15e657SMikhail Gudim; 82cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: ashr32: 83cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 84cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 850fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 860fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sraw a0, a0, a1 87cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 88cb15e657SMikhail Gudim; 89cb15e657SMikhail Gudim; RV32ZICOND-LABEL: ashr32: 90cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 91cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 92cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 930fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: sra a0, a0, a1 94cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 95cb15e657SMikhail Gudim; 96cb15e657SMikhail Gudim; RV64ZICOND-LABEL: ashr32: 97cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 98cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 99cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 1000fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT: sraw a0, a0, a1 101cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 102cb15e657SMikhail Gudim %binop = ashr i32 %x, %y 103cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 104cb15e657SMikhail Gudim ret i32 %select_ 105cb15e657SMikhail Gudim} 106cb15e657SMikhail Gudim 107cb15e657SMikhail Gudimdefine i32 @lshr32(i32 %x, i32 %y, i1 %c) { 108cb15e657SMikhail Gudim; RV32I-LABEL: lshr32: 109cb15e657SMikhail Gudim; RV32I: # %bb.0: 1100fb3ebb2SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 1110fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 1120fb3ebb2SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 113cb15e657SMikhail Gudim; RV32I-NEXT: srl a0, a0, a1 114cb15e657SMikhail Gudim; RV32I-NEXT: ret 115cb15e657SMikhail Gudim; 116cb15e657SMikhail Gudim; RV64I-LABEL: lshr32: 117cb15e657SMikhail Gudim; RV64I: # %bb.0: 1180fb3ebb2SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 1190fb3ebb2SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 1200fb3ebb2SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 121cb15e657SMikhail Gudim; RV64I-NEXT: srlw a0, a0, a1 122cb15e657SMikhail Gudim; RV64I-NEXT: ret 123cb15e657SMikhail Gudim; 124cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: lshr32: 125cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 126cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 127cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 1280fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: srlw a0, a0, a1 129cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 130cb15e657SMikhail Gudim; 131cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: lshr32: 132cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 133cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 1340fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 1350fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: srlw a0, a0, a1 136cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 137cb15e657SMikhail Gudim; 138cb15e657SMikhail Gudim; RV32ZICOND-LABEL: lshr32: 139cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 140cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 141cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 1420fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: srl a0, a0, a1 143cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 144cb15e657SMikhail Gudim; 145cb15e657SMikhail Gudim; RV64ZICOND-LABEL: lshr32: 146cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 147cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 148cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 1490fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT: srlw a0, a0, a1 150cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 151cb15e657SMikhail Gudim %binop = lshr i32 %x, %y 152cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 153cb15e657SMikhail Gudim ret i32 %select_ 154cb15e657SMikhail Gudim} 155cb15e657SMikhail Gudim 156cb15e657SMikhail Gudimdefine i32 @sub32(i32 %x, i32 %y, i1 %c) { 157cb15e657SMikhail Gudim; RV32I-LABEL: sub32: 158cb15e657SMikhail Gudim; RV32I: # %bb.0: 159cb15e657SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 160cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 161cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 162cb15e657SMikhail Gudim; RV32I-NEXT: sub a0, a0, a1 163cb15e657SMikhail Gudim; RV32I-NEXT: ret 164cb15e657SMikhail Gudim; 165cb15e657SMikhail Gudim; RV64I-LABEL: sub32: 166cb15e657SMikhail Gudim; RV64I: # %bb.0: 167cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 168cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 169cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 170cb15e657SMikhail Gudim; RV64I-NEXT: subw a0, a0, a1 171cb15e657SMikhail Gudim; RV64I-NEXT: ret 172cb15e657SMikhail Gudim; 173cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: sub32: 174cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 175cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 176cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 177cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: subw a0, a0, a1 178cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 179cb15e657SMikhail Gudim; 180cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: sub32: 181cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 182cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 183cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 184cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: subw a0, a0, a1 185cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 186cb15e657SMikhail Gudim; 187cb15e657SMikhail Gudim; RV32ZICOND-LABEL: sub32: 188cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 189cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 190cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 191cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sub a0, a0, a1 192cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 193cb15e657SMikhail Gudim; 194cb15e657SMikhail Gudim; RV64ZICOND-LABEL: sub32: 195cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 196cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 197cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 198cb15e657SMikhail Gudim; RV64ZICOND-NEXT: subw a0, a0, a1 199cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 200cb15e657SMikhail Gudim %binop = sub i32 %x, %y 201cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 202cb15e657SMikhail Gudim ret i32 %select_ 203cb15e657SMikhail Gudim} 204cb15e657SMikhail Gudim 205cb15e657SMikhail Gudimdefine i32 @and32(i32 %x, i32 %y, i1 %c) { 206cb15e657SMikhail Gudim; RV32I-LABEL: and32: 207cb15e657SMikhail Gudim; RV32I: # %bb.0: 208cb15e657SMikhail Gudim; RV32I-NEXT: andi a2, a2, 1 209cb15e657SMikhail Gudim; RV32I-NEXT: beqz a2, .LBB4_2 210cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 211cb15e657SMikhail Gudim; RV32I-NEXT: and a0, a0, a1 212cb15e657SMikhail Gudim; RV32I-NEXT: .LBB4_2: 213cb15e657SMikhail Gudim; RV32I-NEXT: ret 214cb15e657SMikhail Gudim; 215cb15e657SMikhail Gudim; RV64I-LABEL: and32: 216cb15e657SMikhail Gudim; RV64I: # %bb.0: 217cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 218cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB4_2 219cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 220cb15e657SMikhail Gudim; RV64I-NEXT: and a0, a0, a1 221cb15e657SMikhail Gudim; RV64I-NEXT: .LBB4_2: 222cb15e657SMikhail Gudim; RV64I-NEXT: ret 223cb15e657SMikhail Gudim; 224cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: and32: 225cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 226cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 227cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: and a1, a0, a1 228cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 229cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 230cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 231cb15e657SMikhail Gudim; 232cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: and32: 233cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 234cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 235cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: and a1, a0, a1 236cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 237cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 238cb15e657SMikhail Gudim; 239cb15e657SMikhail Gudim; RV32ZICOND-LABEL: and32: 240cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 241cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 242cb15e657SMikhail Gudim; RV32ZICOND-NEXT: and a1, a0, a1 243cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a2 244cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a1, a0 245cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 246cb15e657SMikhail Gudim; 247cb15e657SMikhail Gudim; RV64ZICOND-LABEL: and32: 248cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 249cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 250cb15e657SMikhail Gudim; RV64ZICOND-NEXT: and a1, a0, a1 251cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 252cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 253cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 254cb15e657SMikhail Gudim %binop = and i32 %x, %y 255cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 256cb15e657SMikhail Gudim ret i32 %select_ 257cb15e657SMikhail Gudim} 258cb15e657SMikhail Gudim 259cb15e657SMikhail Gudim 260cb15e657SMikhail Gudimdefine i32 @add32(i32 %x, i32 %y, i1 %c) { 261cb15e657SMikhail Gudim; RV32I-LABEL: add32: 262cb15e657SMikhail Gudim; RV32I: # %bb.0: 263cb15e657SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 264cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 265cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 266cb15e657SMikhail Gudim; RV32I-NEXT: add a0, a0, a1 267cb15e657SMikhail Gudim; RV32I-NEXT: ret 268cb15e657SMikhail Gudim; 269cb15e657SMikhail Gudim; RV64I-LABEL: add32: 270cb15e657SMikhail Gudim; RV64I: # %bb.0: 271cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 272cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 273cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 274cb15e657SMikhail Gudim; RV64I-NEXT: addw a0, a0, a1 275cb15e657SMikhail Gudim; RV64I-NEXT: ret 276cb15e657SMikhail Gudim; 277cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: add32: 278cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 279cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 280cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 281cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: addw a0, a0, a1 282cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 283cb15e657SMikhail Gudim; 284cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: add32: 285cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 286cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 287cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 288cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: addw a0, a0, a1 289cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 290cb15e657SMikhail Gudim; 291cb15e657SMikhail Gudim; RV32ZICOND-LABEL: add32: 292cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 293cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 294cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 295cb15e657SMikhail Gudim; RV32ZICOND-NEXT: add a0, a0, a1 296cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 297cb15e657SMikhail Gudim; 298cb15e657SMikhail Gudim; RV64ZICOND-LABEL: add32: 299cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 300cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 301cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 302cb15e657SMikhail Gudim; RV64ZICOND-NEXT: addw a0, a0, a1 303cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 304cb15e657SMikhail Gudim %binop = add i32 %x, %y 305cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 306cb15e657SMikhail Gudim ret i32 %select_ 307cb15e657SMikhail Gudim} 308cb15e657SMikhail Gudim 309cb15e657SMikhail Gudim 310cb15e657SMikhail Gudimdefine i32 @or32(i32 %x, i32 %y, i1 %c) { 311cb15e657SMikhail Gudim; RV32I-LABEL: or32: 312cb15e657SMikhail Gudim; RV32I: # %bb.0: 313cb15e657SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 314cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 315cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 316cb15e657SMikhail Gudim; RV32I-NEXT: or a0, a0, a1 317cb15e657SMikhail Gudim; RV32I-NEXT: ret 318cb15e657SMikhail Gudim; 319cb15e657SMikhail Gudim; RV64I-LABEL: or32: 320cb15e657SMikhail Gudim; RV64I: # %bb.0: 321cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 322cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 323cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 324cb15e657SMikhail Gudim; RV64I-NEXT: or a0, a0, a1 325cb15e657SMikhail Gudim; RV64I-NEXT: ret 326cb15e657SMikhail Gudim; 327cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: or32: 328cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 329cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 330cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 331cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a0, a1 332cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 333cb15e657SMikhail Gudim; 334cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: or32: 335cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 336cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 337cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 338cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: or a0, a0, a1 339cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 340cb15e657SMikhail Gudim; 341cb15e657SMikhail Gudim; RV32ZICOND-LABEL: or32: 342cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 343cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 344cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 345cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a0, a1 346cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 347cb15e657SMikhail Gudim; 348cb15e657SMikhail Gudim; RV64ZICOND-LABEL: or32: 349cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 350cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 351cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 352cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a0, a1 353cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 354cb15e657SMikhail Gudim %binop = or i32 %x, %y 355cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 356cb15e657SMikhail Gudim ret i32 %select_ 357cb15e657SMikhail Gudim} 358cb15e657SMikhail Gudim 359cb15e657SMikhail Gudimdefine i32 @xor32(i32 %x, i32 %y, i1 %c) { 360cb15e657SMikhail Gudim; RV32I-LABEL: xor32: 361cb15e657SMikhail Gudim; RV32I: # %bb.0: 362cb15e657SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 363cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 364cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 365cb15e657SMikhail Gudim; RV32I-NEXT: xor a0, a0, a1 366cb15e657SMikhail Gudim; RV32I-NEXT: ret 367cb15e657SMikhail Gudim; 368cb15e657SMikhail Gudim; RV64I-LABEL: xor32: 369cb15e657SMikhail Gudim; RV64I: # %bb.0: 370cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 371cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 372cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 373cb15e657SMikhail Gudim; RV64I-NEXT: xor a0, a0, a1 374cb15e657SMikhail Gudim; RV64I-NEXT: ret 375cb15e657SMikhail Gudim; 376cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: xor32: 377cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 378cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 379cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 380cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: xor a0, a0, a1 381cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 382cb15e657SMikhail Gudim; 383cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: xor32: 384cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 385cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 386cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 387cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: xor a0, a0, a1 388cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 389cb15e657SMikhail Gudim; 390cb15e657SMikhail Gudim; RV32ZICOND-LABEL: xor32: 391cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 392cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 393cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 394cb15e657SMikhail Gudim; RV32ZICOND-NEXT: xor a0, a0, a1 395cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 396cb15e657SMikhail Gudim; 397cb15e657SMikhail Gudim; RV64ZICOND-LABEL: xor32: 398cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 399cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 400cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 401cb15e657SMikhail Gudim; RV64ZICOND-NEXT: xor a0, a0, a1 402cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 403cb15e657SMikhail Gudim %binop = xor i32 %x, %y 404cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 405cb15e657SMikhail Gudim ret i32 %select_ 406cb15e657SMikhail Gudim} 407cb15e657SMikhail Gudim 408cb15e657SMikhail Gudimdefine i64 @shl64(i64 %x, i64 %y, i1 %c) { 409cb15e657SMikhail Gudim; RV32I-LABEL: shl64: 410cb15e657SMikhail Gudim; RV32I: # %bb.0: 4110fb3ebb2SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 4120fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 4130fb3ebb2SMikhail Gudim; RV32I-NEXT: and a4, a4, a2 4140fb3ebb2SMikhail Gudim; RV32I-NEXT: addi a3, a4, -32 4150fb3ebb2SMikhail Gudim; RV32I-NEXT: sll a2, a0, a4 4160fb3ebb2SMikhail Gudim; RV32I-NEXT: bltz a3, .LBB8_2 417cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 418cb15e657SMikhail Gudim; RV32I-NEXT: mv a1, a2 4190fb3ebb2SMikhail Gudim; RV32I-NEXT: j .LBB8_3 4200fb3ebb2SMikhail Gudim; RV32I-NEXT: .LBB8_2: 4210fb3ebb2SMikhail Gudim; RV32I-NEXT: sll a1, a1, a4 4220fb3ebb2SMikhail Gudim; RV32I-NEXT: not a4, a4 4230fb3ebb2SMikhail Gudim; RV32I-NEXT: srli a0, a0, 1 4240fb3ebb2SMikhail Gudim; RV32I-NEXT: srl a0, a0, a4 4250fb3ebb2SMikhail Gudim; RV32I-NEXT: or a1, a1, a0 426cb15e657SMikhail Gudim; RV32I-NEXT: .LBB8_3: 4270fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a0, a3, 31 4280fb3ebb2SMikhail Gudim; RV32I-NEXT: and a0, a0, a2 429cb15e657SMikhail Gudim; RV32I-NEXT: ret 430cb15e657SMikhail Gudim; 431cb15e657SMikhail Gudim; RV64I-LABEL: shl64: 432cb15e657SMikhail Gudim; RV64I: # %bb.0: 4330fb3ebb2SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 4340fb3ebb2SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 4350fb3ebb2SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 436cb15e657SMikhail Gudim; RV64I-NEXT: sll a0, a0, a1 437cb15e657SMikhail Gudim; RV64I-NEXT: ret 438cb15e657SMikhail Gudim; 439cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: shl64: 440cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 441cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 442cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 4430fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sll a0, a0, a1 444cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 445cb15e657SMikhail Gudim; 446cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: shl64: 447cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 448cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 4490fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 4500fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sll a0, a0, a1 451cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 452cb15e657SMikhail Gudim; 453cb15e657SMikhail Gudim; RV32ZICOND-LABEL: shl64: 454cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 455cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 456*9122c523SPengcheng Wang; RV32ZICOND-NEXT: srli a3, a0, 1 457cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 458*9122c523SPengcheng Wang; RV32ZICOND-NEXT: sll a0, a0, a2 4590fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: addi a4, a2, -32 4600fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: sll a1, a1, a2 4610fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: not a2, a2 462*9122c523SPengcheng Wang; RV32ZICOND-NEXT: slti a4, a4, 0 463*9122c523SPengcheng Wang; RV32ZICOND-NEXT: srl a2, a3, a2 464*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.nez a3, a0, a4 465*9122c523SPengcheng Wang; RV32ZICOND-NEXT: or a1, a1, a2 466*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.eqz a1, a1, a4 467*9122c523SPengcheng Wang; RV32ZICOND-NEXT: or a1, a1, a3 468*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.eqz a0, a0, a4 469cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 470cb15e657SMikhail Gudim; 471cb15e657SMikhail Gudim; RV64ZICOND-LABEL: shl64: 472cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 473cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 474cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 4750fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT: sll a0, a0, a1 476cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 477cb15e657SMikhail Gudim %binop = shl i64 %x, %y 478cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 479cb15e657SMikhail Gudim ret i64 %select_ 480cb15e657SMikhail Gudim} 481cb15e657SMikhail Gudim 482cb15e657SMikhail Gudimdefine i64 @ashr64(i64 %x, i64 %y, i1 %c) { 483cb15e657SMikhail Gudim; RV32I-LABEL: ashr64: 484cb15e657SMikhail Gudim; RV32I: # %bb.0: 485cb15e657SMikhail Gudim; RV32I-NEXT: mv a3, a0 4860fb3ebb2SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 4870fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 4880fb3ebb2SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 4890fb3ebb2SMikhail Gudim; RV32I-NEXT: addi a4, a2, -32 4900fb3ebb2SMikhail Gudim; RV32I-NEXT: sra a0, a1, a2 4910fb3ebb2SMikhail Gudim; RV32I-NEXT: bltz a4, .LBB9_2 4920fb3ebb2SMikhail Gudim; RV32I-NEXT: # %bb.1: 4930fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a1, a1, 31 4940fb3ebb2SMikhail Gudim; RV32I-NEXT: ret 4950fb3ebb2SMikhail Gudim; RV32I-NEXT: .LBB9_2: 4960fb3ebb2SMikhail Gudim; RV32I-NEXT: srl a3, a3, a2 4970fb3ebb2SMikhail Gudim; RV32I-NEXT: not a2, a2 4980fb3ebb2SMikhail Gudim; RV32I-NEXT: slli a1, a1, 1 4990fb3ebb2SMikhail Gudim; RV32I-NEXT: sll a1, a1, a2 5000fb3ebb2SMikhail Gudim; RV32I-NEXT: or a3, a3, a1 5010fb3ebb2SMikhail Gudim; RV32I-NEXT: mv a1, a0 502cb15e657SMikhail Gudim; RV32I-NEXT: mv a0, a3 503cb15e657SMikhail Gudim; RV32I-NEXT: ret 504cb15e657SMikhail Gudim; 505cb15e657SMikhail Gudim; RV64I-LABEL: ashr64: 506cb15e657SMikhail Gudim; RV64I: # %bb.0: 5070fb3ebb2SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 5080fb3ebb2SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 5090fb3ebb2SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 510cb15e657SMikhail Gudim; RV64I-NEXT: sra a0, a0, a1 511cb15e657SMikhail Gudim; RV64I-NEXT: ret 512cb15e657SMikhail Gudim; 513cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: ashr64: 514cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 515cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 516cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 5170fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sra a0, a0, a1 518cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 519cb15e657SMikhail Gudim; 520cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: ashr64: 521cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 522cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 5230fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 5240fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sra a0, a0, a1 525cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 526cb15e657SMikhail Gudim; 527cb15e657SMikhail Gudim; RV32ZICOND-LABEL: ashr64: 528cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 529cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 530*9122c523SPengcheng Wang; RV32ZICOND-NEXT: slli a3, a1, 1 531*9122c523SPengcheng Wang; RV32ZICOND-NEXT: srai a5, a1, 31 532cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 533*9122c523SPengcheng Wang; RV32ZICOND-NEXT: sra a1, a1, a2 5340fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: addi a4, a2, -32 5350fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: srl a0, a0, a2 5360fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: not a2, a2 537*9122c523SPengcheng Wang; RV32ZICOND-NEXT: slti a4, a4, 0 538*9122c523SPengcheng Wang; RV32ZICOND-NEXT: sll a2, a3, a2 539*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.nez a3, a1, a4 5400fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: or a0, a0, a2 541*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.eqz a1, a1, a4 542*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.nez a2, a5, a4 5430fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a0, a0, a4 544*9122c523SPengcheng Wang; RV32ZICOND-NEXT: or a0, a0, a3 545*9122c523SPengcheng Wang; RV32ZICOND-NEXT: or a1, a1, a2 546cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 547cb15e657SMikhail Gudim; 548cb15e657SMikhail Gudim; RV64ZICOND-LABEL: ashr64: 549cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 550cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 551cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 5520fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT: sra a0, a0, a1 553cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 554cb15e657SMikhail Gudim %binop = ashr i64 %x, %y 555cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 556cb15e657SMikhail Gudim ret i64 %select_ 557cb15e657SMikhail Gudim} 558cb15e657SMikhail Gudim 559cb15e657SMikhail Gudimdefine i64 @lshr64(i64 %x, i64 %y, i1 %c) { 560cb15e657SMikhail Gudim; RV32I-LABEL: lshr64: 561cb15e657SMikhail Gudim; RV32I: # %bb.0: 5620fb3ebb2SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 5630fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 5640fb3ebb2SMikhail Gudim; RV32I-NEXT: and a4, a4, a2 5650fb3ebb2SMikhail Gudim; RV32I-NEXT: addi a3, a4, -32 5660fb3ebb2SMikhail Gudim; RV32I-NEXT: srl a2, a1, a4 5670fb3ebb2SMikhail Gudim; RV32I-NEXT: bltz a3, .LBB10_2 568cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 569cb15e657SMikhail Gudim; RV32I-NEXT: mv a0, a2 5700fb3ebb2SMikhail Gudim; RV32I-NEXT: j .LBB10_3 5710fb3ebb2SMikhail Gudim; RV32I-NEXT: .LBB10_2: 5720fb3ebb2SMikhail Gudim; RV32I-NEXT: srl a0, a0, a4 5730fb3ebb2SMikhail Gudim; RV32I-NEXT: not a4, a4 5740fb3ebb2SMikhail Gudim; RV32I-NEXT: slli a1, a1, 1 5750fb3ebb2SMikhail Gudim; RV32I-NEXT: sll a1, a1, a4 5760fb3ebb2SMikhail Gudim; RV32I-NEXT: or a0, a0, a1 577cb15e657SMikhail Gudim; RV32I-NEXT: .LBB10_3: 5780fb3ebb2SMikhail Gudim; RV32I-NEXT: srai a1, a3, 31 5790fb3ebb2SMikhail Gudim; RV32I-NEXT: and a1, a1, a2 580cb15e657SMikhail Gudim; RV32I-NEXT: ret 581cb15e657SMikhail Gudim; 582cb15e657SMikhail Gudim; RV64I-LABEL: lshr64: 583cb15e657SMikhail Gudim; RV64I: # %bb.0: 5840fb3ebb2SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 5850fb3ebb2SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 5860fb3ebb2SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 587cb15e657SMikhail Gudim; RV64I-NEXT: srl a0, a0, a1 588cb15e657SMikhail Gudim; RV64I-NEXT: ret 589cb15e657SMikhail Gudim; 590cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: lshr64: 591cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 592cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 593cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 5940fb3ebb2SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: srl a0, a0, a1 595cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 596cb15e657SMikhail Gudim; 597cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: lshr64: 598cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 599cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 6000fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 6010fb3ebb2SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: srl a0, a0, a1 602cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 603cb15e657SMikhail Gudim; 604cb15e657SMikhail Gudim; RV32ZICOND-LABEL: lshr64: 605cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 606cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 607*9122c523SPengcheng Wang; RV32ZICOND-NEXT: slli a3, a1, 1 608cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 609*9122c523SPengcheng Wang; RV32ZICOND-NEXT: srl a1, a1, a2 6100fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: addi a4, a2, -32 6110fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: srl a0, a0, a2 6120fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: not a2, a2 613*9122c523SPengcheng Wang; RV32ZICOND-NEXT: slti a4, a4, 0 614*9122c523SPengcheng Wang; RV32ZICOND-NEXT: sll a2, a3, a2 615*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.nez a3, a1, a4 616*9122c523SPengcheng Wang; RV32ZICOND-NEXT: or a0, a0, a2 6170fb3ebb2SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a0, a0, a4 618*9122c523SPengcheng Wang; RV32ZICOND-NEXT: or a0, a0, a3 619*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.eqz a1, a1, a4 620cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 621cb15e657SMikhail Gudim; 622cb15e657SMikhail Gudim; RV64ZICOND-LABEL: lshr64: 623cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 624cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 625cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 6260fb3ebb2SMikhail Gudim; RV64ZICOND-NEXT: srl a0, a0, a1 627cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 628cb15e657SMikhail Gudim %binop = lshr i64 %x, %y 629cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 630cb15e657SMikhail Gudim ret i64 %select_ 631cb15e657SMikhail Gudim} 632cb15e657SMikhail Gudim 633cb15e657SMikhail Gudimdefine i64 @sub64(i64 %x, i64 %y, i1 %c) { 634cb15e657SMikhail Gudim; RV32I-LABEL: sub64: 635cb15e657SMikhail Gudim; RV32I: # %bb.0: 636cb15e657SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 637cb15e657SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 638cb15e657SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 639cb15e657SMikhail Gudim; RV32I-NEXT: and a3, a4, a3 640*9122c523SPengcheng Wang; RV32I-NEXT: sltu a4, a0, a2 641cb15e657SMikhail Gudim; RV32I-NEXT: sub a1, a1, a3 642*9122c523SPengcheng Wang; RV32I-NEXT: sub a1, a1, a4 643cb15e657SMikhail Gudim; RV32I-NEXT: sub a0, a0, a2 644cb15e657SMikhail Gudim; RV32I-NEXT: ret 645cb15e657SMikhail Gudim; 646cb15e657SMikhail Gudim; RV64I-LABEL: sub64: 647cb15e657SMikhail Gudim; RV64I: # %bb.0: 648cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 649cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 650cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 651cb15e657SMikhail Gudim; RV64I-NEXT: sub a0, a0, a1 652cb15e657SMikhail Gudim; RV64I-NEXT: ret 653cb15e657SMikhail Gudim; 654cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: sub64: 655cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 656cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 657cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 658cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sub a0, a0, a1 659cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 660cb15e657SMikhail Gudim; 661cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: sub64: 662cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 663cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 664cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 665cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sub a0, a0, a1 666cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 667cb15e657SMikhail Gudim; 668cb15e657SMikhail Gudim; RV32ZICOND-LABEL: sub64: 669cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 670cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 671cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 672cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a3, a3, a4 673*9122c523SPengcheng Wang; RV32ZICOND-NEXT: sltu a4, a0, a2 674cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sub a1, a1, a3 675*9122c523SPengcheng Wang; RV32ZICOND-NEXT: sub a1, a1, a4 676cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sub a0, a0, a2 677cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 678cb15e657SMikhail Gudim; 679cb15e657SMikhail Gudim; RV64ZICOND-LABEL: sub64: 680cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 681cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 682cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 683cb15e657SMikhail Gudim; RV64ZICOND-NEXT: sub a0, a0, a1 684cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 685cb15e657SMikhail Gudim %binop = sub i64 %x, %y 686cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 687cb15e657SMikhail Gudim ret i64 %select_ 688cb15e657SMikhail Gudim} 689cb15e657SMikhail Gudim 690cb15e657SMikhail Gudimdefine i64 @and64(i64 %x, i64 %y, i1 %c) { 691cb15e657SMikhail Gudim; RV32I-LABEL: and64: 692cb15e657SMikhail Gudim; RV32I: # %bb.0: 693cb15e657SMikhail Gudim; RV32I-NEXT: andi a4, a4, 1 694cb15e657SMikhail Gudim; RV32I-NEXT: beqz a4, .LBB12_2 695cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 696cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a1, a3 697cb15e657SMikhail Gudim; RV32I-NEXT: and a0, a0, a2 698cb15e657SMikhail Gudim; RV32I-NEXT: .LBB12_2: 699cb15e657SMikhail Gudim; RV32I-NEXT: ret 700cb15e657SMikhail Gudim; 701cb15e657SMikhail Gudim; RV64I-LABEL: and64: 702cb15e657SMikhail Gudim; RV64I: # %bb.0: 703cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 704cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB12_2 705cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 706cb15e657SMikhail Gudim; RV64I-NEXT: and a0, a0, a1 707cb15e657SMikhail Gudim; RV64I-NEXT: .LBB12_2: 708cb15e657SMikhail Gudim; RV64I-NEXT: ret 709cb15e657SMikhail Gudim; 710cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: and64: 711cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 712cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 713cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: and a1, a0, a1 714cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 715cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 716cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 717cb15e657SMikhail Gudim; 718cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: and64: 719cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 720cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 721cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: and a1, a0, a1 722cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 723cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 724cb15e657SMikhail Gudim; 725cb15e657SMikhail Gudim; RV32ZICOND-LABEL: and64: 726cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 727cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 728cb15e657SMikhail Gudim; RV32ZICOND-NEXT: and a3, a1, a3 729cb15e657SMikhail Gudim; RV32ZICOND-NEXT: and a2, a0, a2 730cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a4 731cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a1, a1, a4 732*9122c523SPengcheng Wang; RV32ZICOND-NEXT: or a0, a2, a0 733cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a1, a3, a1 734cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 735cb15e657SMikhail Gudim; 736cb15e657SMikhail Gudim; RV64ZICOND-LABEL: and64: 737cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 738cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 739cb15e657SMikhail Gudim; RV64ZICOND-NEXT: and a1, a0, a1 740cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 741cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 742cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 743cb15e657SMikhail Gudim %binop = and i64 %x, %y 744cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 745cb15e657SMikhail Gudim ret i64 %select_ 746cb15e657SMikhail Gudim} 747cb15e657SMikhail Gudim 748cb15e657SMikhail Gudim 749cb15e657SMikhail Gudimdefine i64 @add64(i64 %x, i64 %y, i1 %c) { 750cb15e657SMikhail Gudim; RV32I-LABEL: add64: 751cb15e657SMikhail Gudim; RV32I: # %bb.0: 752cb15e657SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 753cb15e657SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 754cb15e657SMikhail Gudim; RV32I-NEXT: and a3, a4, a3 755cb15e657SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 756*9122c523SPengcheng Wang; RV32I-NEXT: add a1, a1, a3 757cb15e657SMikhail Gudim; RV32I-NEXT: add a2, a0, a2 758cb15e657SMikhail Gudim; RV32I-NEXT: sltu a0, a2, a0 759cb15e657SMikhail Gudim; RV32I-NEXT: add a1, a1, a0 760cb15e657SMikhail Gudim; RV32I-NEXT: mv a0, a2 761cb15e657SMikhail Gudim; RV32I-NEXT: ret 762cb15e657SMikhail Gudim; 763cb15e657SMikhail Gudim; RV64I-LABEL: add64: 764cb15e657SMikhail Gudim; RV64I: # %bb.0: 765cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 766cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 767cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 768cb15e657SMikhail Gudim; RV64I-NEXT: add a0, a0, a1 769cb15e657SMikhail Gudim; RV64I-NEXT: ret 770cb15e657SMikhail Gudim; 771cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: add64: 772cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 773cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 774cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 775cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: add a0, a0, a1 776cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 777cb15e657SMikhail Gudim; 778cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: add64: 779cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 780cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 781cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 782cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: add a0, a0, a1 783cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 784cb15e657SMikhail Gudim; 785cb15e657SMikhail Gudim; RV32ZICOND-LABEL: add64: 786cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 787cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 788cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a3, a3, a4 789cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 790*9122c523SPengcheng Wang; RV32ZICOND-NEXT: add a1, a1, a3 791cb15e657SMikhail Gudim; RV32ZICOND-NEXT: add a2, a0, a2 792cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sltu a0, a2, a0 793cb15e657SMikhail Gudim; RV32ZICOND-NEXT: add a1, a1, a0 794cb15e657SMikhail Gudim; RV32ZICOND-NEXT: mv a0, a2 795cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 796cb15e657SMikhail Gudim; 797cb15e657SMikhail Gudim; RV64ZICOND-LABEL: add64: 798cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 799cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 800cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 801cb15e657SMikhail Gudim; RV64ZICOND-NEXT: add a0, a0, a1 802cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 803cb15e657SMikhail Gudim %binop = add i64 %x, %y 804cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 805cb15e657SMikhail Gudim ret i64 %select_ 806cb15e657SMikhail Gudim} 807cb15e657SMikhail Gudim 808cb15e657SMikhail Gudim 809cb15e657SMikhail Gudimdefine i64 @or64(i64 %x, i64 %y, i1 %c) { 810cb15e657SMikhail Gudim; RV32I-LABEL: or64: 811cb15e657SMikhail Gudim; RV32I: # %bb.0: 812cb15e657SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 813cb15e657SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 814cb15e657SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 815cb15e657SMikhail Gudim; RV32I-NEXT: and a3, a4, a3 816*9122c523SPengcheng Wang; RV32I-NEXT: or a0, a0, a2 817cb15e657SMikhail Gudim; RV32I-NEXT: or a1, a1, a3 818cb15e657SMikhail Gudim; RV32I-NEXT: ret 819cb15e657SMikhail Gudim; 820cb15e657SMikhail Gudim; RV64I-LABEL: or64: 821cb15e657SMikhail Gudim; RV64I: # %bb.0: 822cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 823cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 824cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 825cb15e657SMikhail Gudim; RV64I-NEXT: or a0, a0, a1 826cb15e657SMikhail Gudim; RV64I-NEXT: ret 827cb15e657SMikhail Gudim; 828cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: or64: 829cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 830cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 831cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 832cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a0, a1 833cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 834cb15e657SMikhail Gudim; 835cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: or64: 836cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 837cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 838cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 839cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: or a0, a0, a1 840cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 841cb15e657SMikhail Gudim; 842cb15e657SMikhail Gudim; RV32ZICOND-LABEL: or64: 843cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 844cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 845cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 846*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.eqz a3, a3, a4 847cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a0, a2 848*9122c523SPengcheng Wang; RV32ZICOND-NEXT: or a1, a1, a3 849cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 850cb15e657SMikhail Gudim; 851cb15e657SMikhail Gudim; RV64ZICOND-LABEL: or64: 852cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 853cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 854cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 855cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a0, a1 856cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 857cb15e657SMikhail Gudim %binop = or i64 %x, %y 858cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 859cb15e657SMikhail Gudim ret i64 %select_ 860cb15e657SMikhail Gudim} 861cb15e657SMikhail Gudim 862cb15e657SMikhail Gudimdefine i64 @xor64(i64 %x, i64 %y, i1 %c) { 863cb15e657SMikhail Gudim; RV32I-LABEL: xor64: 864cb15e657SMikhail Gudim; RV32I: # %bb.0: 865cb15e657SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 866cb15e657SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 867cb15e657SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 868cb15e657SMikhail Gudim; RV32I-NEXT: and a3, a4, a3 869*9122c523SPengcheng Wang; RV32I-NEXT: xor a0, a0, a2 870cb15e657SMikhail Gudim; RV32I-NEXT: xor a1, a1, a3 871cb15e657SMikhail Gudim; RV32I-NEXT: ret 872cb15e657SMikhail Gudim; 873cb15e657SMikhail Gudim; RV64I-LABEL: xor64: 874cb15e657SMikhail Gudim; RV64I: # %bb.0: 875cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 876cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 877cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 878cb15e657SMikhail Gudim; RV64I-NEXT: xor a0, a0, a1 879cb15e657SMikhail Gudim; RV64I-NEXT: ret 880cb15e657SMikhail Gudim; 881cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: xor64: 882cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 883cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 884cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 885cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: xor a0, a0, a1 886cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 887cb15e657SMikhail Gudim; 888cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: xor64: 889cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 890cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 891cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 892cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: xor a0, a0, a1 893cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 894cb15e657SMikhail Gudim; 895cb15e657SMikhail Gudim; RV32ZICOND-LABEL: xor64: 896cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 897cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 898cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 899*9122c523SPengcheng Wang; RV32ZICOND-NEXT: czero.eqz a3, a3, a4 900cb15e657SMikhail Gudim; RV32ZICOND-NEXT: xor a0, a0, a2 901*9122c523SPengcheng Wang; RV32ZICOND-NEXT: xor a1, a1, a3 902cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 903cb15e657SMikhail Gudim; 904cb15e657SMikhail Gudim; RV64ZICOND-LABEL: xor64: 905cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 906cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 907cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 908cb15e657SMikhail Gudim; RV64ZICOND-NEXT: xor a0, a0, a1 909cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 910cb15e657SMikhail Gudim %binop = xor i64 %x, %y 911cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 912cb15e657SMikhail Gudim ret i64 %select_ 913cb15e657SMikhail Gudim} 914