1*cb15e657SMikhail Gudim; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv32 < %s | FileCheck %s -check-prefix=RV32I 3*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 < %s | FileCheck %s -check-prefix=RV64I 4*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+xventanacondops < %s | FileCheck %s -check-prefix=RV64XVENTANACONDOPS 5*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+xtheadcondmov < %s | FileCheck %s -check-prefix=RV64XTHEADCONDMOV 6*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv32 -mattr=+experimental-zicond < %s | FileCheck %s -check-prefix=RV32ZICOND 7*cb15e657SMikhail Gudim; RUN: llc -mtriple=riscv64 -mattr=+experimental-zicond < %s | FileCheck %s -check-prefix=RV64ZICOND 8*cb15e657SMikhail Gudim 9*cb15e657SMikhail Gudimdefine i32 @shl32(i32 %x, i32 %y, i1 %c) { 10*cb15e657SMikhail Gudim; RV32I-LABEL: shl32: 11*cb15e657SMikhail Gudim; RV32I: # %bb.0: 12*cb15e657SMikhail Gudim; RV32I-NEXT: andi a2, a2, 1 13*cb15e657SMikhail Gudim; RV32I-NEXT: beqz a2, .LBB0_2 14*cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 15*cb15e657SMikhail Gudim; RV32I-NEXT: sll a0, a0, a1 16*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB0_2: 17*cb15e657SMikhail Gudim; RV32I-NEXT: ret 18*cb15e657SMikhail Gudim; 19*cb15e657SMikhail Gudim; RV64I-LABEL: shl32: 20*cb15e657SMikhail Gudim; RV64I: # %bb.0: 21*cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 22*cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB0_2 23*cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 24*cb15e657SMikhail Gudim; RV64I-NEXT: sllw a0, a0, a1 25*cb15e657SMikhail Gudim; RV64I-NEXT: .LBB0_2: 26*cb15e657SMikhail Gudim; RV64I-NEXT: ret 27*cb15e657SMikhail Gudim; 28*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: shl32: 29*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 30*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 31*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sllw a1, a0, a1 32*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 33*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 34*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 35*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 36*cb15e657SMikhail Gudim; 37*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: shl32: 38*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 39*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 40*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sllw a1, a0, a1 41*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 42*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 43*cb15e657SMikhail Gudim; 44*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: shl32: 45*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 46*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 47*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sll a1, a0, a1 48*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a2 49*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 50*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a1, a0 51*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 52*cb15e657SMikhail Gudim; 53*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: shl32: 54*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 55*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 56*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: sllw a1, a0, a1 57*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 58*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 59*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 60*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 61*cb15e657SMikhail Gudim %binop = shl i32 %x, %y 62*cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 63*cb15e657SMikhail Gudim ret i32 %select_ 64*cb15e657SMikhail Gudim} 65*cb15e657SMikhail Gudim 66*cb15e657SMikhail Gudimdefine i32 @ashr32(i32 %x, i32 %y, i1 %c) { 67*cb15e657SMikhail Gudim; RV32I-LABEL: ashr32: 68*cb15e657SMikhail Gudim; RV32I: # %bb.0: 69*cb15e657SMikhail Gudim; RV32I-NEXT: andi a2, a2, 1 70*cb15e657SMikhail Gudim; RV32I-NEXT: beqz a2, .LBB1_2 71*cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 72*cb15e657SMikhail Gudim; RV32I-NEXT: sra a0, a0, a1 73*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB1_2: 74*cb15e657SMikhail Gudim; RV32I-NEXT: ret 75*cb15e657SMikhail Gudim; 76*cb15e657SMikhail Gudim; RV64I-LABEL: ashr32: 77*cb15e657SMikhail Gudim; RV64I: # %bb.0: 78*cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 79*cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB1_2 80*cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 81*cb15e657SMikhail Gudim; RV64I-NEXT: sraw a0, a0, a1 82*cb15e657SMikhail Gudim; RV64I-NEXT: .LBB1_2: 83*cb15e657SMikhail Gudim; RV64I-NEXT: ret 84*cb15e657SMikhail Gudim; 85*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: ashr32: 86*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 87*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 88*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sraw a1, a0, a1 89*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 90*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 91*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 92*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 93*cb15e657SMikhail Gudim; 94*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: ashr32: 95*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 96*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 97*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sraw a1, a0, a1 98*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 99*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 100*cb15e657SMikhail Gudim; 101*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: ashr32: 102*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 103*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 104*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sra a1, a0, a1 105*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a2 106*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 107*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a1, a0 108*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 109*cb15e657SMikhail Gudim; 110*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: ashr32: 111*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 112*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 113*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: sraw a1, a0, a1 114*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 115*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 116*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 117*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 118*cb15e657SMikhail Gudim %binop = ashr i32 %x, %y 119*cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 120*cb15e657SMikhail Gudim ret i32 %select_ 121*cb15e657SMikhail Gudim} 122*cb15e657SMikhail Gudim 123*cb15e657SMikhail Gudimdefine i32 @lshr32(i32 %x, i32 %y, i1 %c) { 124*cb15e657SMikhail Gudim; RV32I-LABEL: lshr32: 125*cb15e657SMikhail Gudim; RV32I: # %bb.0: 126*cb15e657SMikhail Gudim; RV32I-NEXT: andi a2, a2, 1 127*cb15e657SMikhail Gudim; RV32I-NEXT: beqz a2, .LBB2_2 128*cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 129*cb15e657SMikhail Gudim; RV32I-NEXT: srl a0, a0, a1 130*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB2_2: 131*cb15e657SMikhail Gudim; RV32I-NEXT: ret 132*cb15e657SMikhail Gudim; 133*cb15e657SMikhail Gudim; RV64I-LABEL: lshr32: 134*cb15e657SMikhail Gudim; RV64I: # %bb.0: 135*cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 136*cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB2_2 137*cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 138*cb15e657SMikhail Gudim; RV64I-NEXT: srlw a0, a0, a1 139*cb15e657SMikhail Gudim; RV64I-NEXT: .LBB2_2: 140*cb15e657SMikhail Gudim; RV64I-NEXT: ret 141*cb15e657SMikhail Gudim; 142*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: lshr32: 143*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 144*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 145*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: srlw a1, a0, a1 146*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 147*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 148*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 149*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 150*cb15e657SMikhail Gudim; 151*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: lshr32: 152*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 153*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 154*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: srlw a1, a0, a1 155*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 156*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 157*cb15e657SMikhail Gudim; 158*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: lshr32: 159*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 160*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 161*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: srl a1, a0, a1 162*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a2 163*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 164*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a1, a0 165*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 166*cb15e657SMikhail Gudim; 167*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: lshr32: 168*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 169*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 170*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: srlw a1, a0, a1 171*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 172*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 173*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 174*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 175*cb15e657SMikhail Gudim %binop = lshr i32 %x, %y 176*cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 177*cb15e657SMikhail Gudim ret i32 %select_ 178*cb15e657SMikhail Gudim} 179*cb15e657SMikhail Gudim 180*cb15e657SMikhail Gudimdefine i32 @sub32(i32 %x, i32 %y, i1 %c) { 181*cb15e657SMikhail Gudim; RV32I-LABEL: sub32: 182*cb15e657SMikhail Gudim; RV32I: # %bb.0: 183*cb15e657SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 184*cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 185*cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 186*cb15e657SMikhail Gudim; RV32I-NEXT: sub a0, a0, a1 187*cb15e657SMikhail Gudim; RV32I-NEXT: ret 188*cb15e657SMikhail Gudim; 189*cb15e657SMikhail Gudim; RV64I-LABEL: sub32: 190*cb15e657SMikhail Gudim; RV64I: # %bb.0: 191*cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 192*cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 193*cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 194*cb15e657SMikhail Gudim; RV64I-NEXT: subw a0, a0, a1 195*cb15e657SMikhail Gudim; RV64I-NEXT: ret 196*cb15e657SMikhail Gudim; 197*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: sub32: 198*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 199*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 200*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 201*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: subw a0, a0, a1 202*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 203*cb15e657SMikhail Gudim; 204*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: sub32: 205*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 206*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 207*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 208*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: subw a0, a0, a1 209*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 210*cb15e657SMikhail Gudim; 211*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: sub32: 212*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 213*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 214*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 215*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sub a0, a0, a1 216*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 217*cb15e657SMikhail Gudim; 218*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: sub32: 219*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 220*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 221*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 222*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: subw a0, a0, a1 223*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 224*cb15e657SMikhail Gudim %binop = sub i32 %x, %y 225*cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 226*cb15e657SMikhail Gudim ret i32 %select_ 227*cb15e657SMikhail Gudim} 228*cb15e657SMikhail Gudim 229*cb15e657SMikhail Gudimdefine i32 @and32(i32 %x, i32 %y, i1 %c) { 230*cb15e657SMikhail Gudim; RV32I-LABEL: and32: 231*cb15e657SMikhail Gudim; RV32I: # %bb.0: 232*cb15e657SMikhail Gudim; RV32I-NEXT: andi a2, a2, 1 233*cb15e657SMikhail Gudim; RV32I-NEXT: beqz a2, .LBB4_2 234*cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 235*cb15e657SMikhail Gudim; RV32I-NEXT: and a0, a0, a1 236*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB4_2: 237*cb15e657SMikhail Gudim; RV32I-NEXT: ret 238*cb15e657SMikhail Gudim; 239*cb15e657SMikhail Gudim; RV64I-LABEL: and32: 240*cb15e657SMikhail Gudim; RV64I: # %bb.0: 241*cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 242*cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB4_2 243*cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 244*cb15e657SMikhail Gudim; RV64I-NEXT: and a0, a0, a1 245*cb15e657SMikhail Gudim; RV64I-NEXT: .LBB4_2: 246*cb15e657SMikhail Gudim; RV64I-NEXT: ret 247*cb15e657SMikhail Gudim; 248*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: and32: 249*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 250*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 251*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: and a1, a0, a1 252*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 253*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 254*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 255*cb15e657SMikhail Gudim; 256*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: and32: 257*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 258*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 259*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: and a1, a0, a1 260*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 261*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 262*cb15e657SMikhail Gudim; 263*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: and32: 264*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 265*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 266*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: and a1, a0, a1 267*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a2 268*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a1, a0 269*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 270*cb15e657SMikhail Gudim; 271*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: and32: 272*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 273*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 274*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: and a1, a0, a1 275*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 276*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 277*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 278*cb15e657SMikhail Gudim %binop = and i32 %x, %y 279*cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 280*cb15e657SMikhail Gudim ret i32 %select_ 281*cb15e657SMikhail Gudim} 282*cb15e657SMikhail Gudim 283*cb15e657SMikhail Gudim 284*cb15e657SMikhail Gudimdefine i32 @add32(i32 %x, i32 %y, i1 %c) { 285*cb15e657SMikhail Gudim; RV32I-LABEL: add32: 286*cb15e657SMikhail Gudim; RV32I: # %bb.0: 287*cb15e657SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 288*cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 289*cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 290*cb15e657SMikhail Gudim; RV32I-NEXT: add a0, a0, a1 291*cb15e657SMikhail Gudim; RV32I-NEXT: ret 292*cb15e657SMikhail Gudim; 293*cb15e657SMikhail Gudim; RV64I-LABEL: add32: 294*cb15e657SMikhail Gudim; RV64I: # %bb.0: 295*cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 296*cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 297*cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 298*cb15e657SMikhail Gudim; RV64I-NEXT: addw a0, a0, a1 299*cb15e657SMikhail Gudim; RV64I-NEXT: ret 300*cb15e657SMikhail Gudim; 301*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: add32: 302*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 303*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 304*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 305*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: addw a0, a0, a1 306*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 307*cb15e657SMikhail Gudim; 308*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: add32: 309*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 310*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 311*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 312*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: addw a0, a0, a1 313*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 314*cb15e657SMikhail Gudim; 315*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: add32: 316*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 317*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 318*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 319*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: add a0, a0, a1 320*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 321*cb15e657SMikhail Gudim; 322*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: add32: 323*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 324*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 325*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 326*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: addw a0, a0, a1 327*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 328*cb15e657SMikhail Gudim %binop = add i32 %x, %y 329*cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 330*cb15e657SMikhail Gudim ret i32 %select_ 331*cb15e657SMikhail Gudim} 332*cb15e657SMikhail Gudim 333*cb15e657SMikhail Gudim 334*cb15e657SMikhail Gudimdefine i32 @or32(i32 %x, i32 %y, i1 %c) { 335*cb15e657SMikhail Gudim; RV32I-LABEL: or32: 336*cb15e657SMikhail Gudim; RV32I: # %bb.0: 337*cb15e657SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 338*cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 339*cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 340*cb15e657SMikhail Gudim; RV32I-NEXT: or a0, a0, a1 341*cb15e657SMikhail Gudim; RV32I-NEXT: ret 342*cb15e657SMikhail Gudim; 343*cb15e657SMikhail Gudim; RV64I-LABEL: or32: 344*cb15e657SMikhail Gudim; RV64I: # %bb.0: 345*cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 346*cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 347*cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 348*cb15e657SMikhail Gudim; RV64I-NEXT: or a0, a0, a1 349*cb15e657SMikhail Gudim; RV64I-NEXT: ret 350*cb15e657SMikhail Gudim; 351*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: or32: 352*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 353*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 354*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 355*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a0, a1 356*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 357*cb15e657SMikhail Gudim; 358*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: or32: 359*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 360*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 361*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 362*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: or a0, a0, a1 363*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 364*cb15e657SMikhail Gudim; 365*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: or32: 366*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 367*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 368*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 369*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a0, a1 370*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 371*cb15e657SMikhail Gudim; 372*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: or32: 373*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 374*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 375*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 376*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a0, a1 377*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 378*cb15e657SMikhail Gudim %binop = or i32 %x, %y 379*cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 380*cb15e657SMikhail Gudim ret i32 %select_ 381*cb15e657SMikhail Gudim} 382*cb15e657SMikhail Gudim 383*cb15e657SMikhail Gudimdefine i32 @xor32(i32 %x, i32 %y, i1 %c) { 384*cb15e657SMikhail Gudim; RV32I-LABEL: xor32: 385*cb15e657SMikhail Gudim; RV32I: # %bb.0: 386*cb15e657SMikhail Gudim; RV32I-NEXT: slli a2, a2, 31 387*cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a2, 31 388*cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a2, a1 389*cb15e657SMikhail Gudim; RV32I-NEXT: xor a0, a0, a1 390*cb15e657SMikhail Gudim; RV32I-NEXT: ret 391*cb15e657SMikhail Gudim; 392*cb15e657SMikhail Gudim; RV64I-LABEL: xor32: 393*cb15e657SMikhail Gudim; RV64I: # %bb.0: 394*cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 395*cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 396*cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 397*cb15e657SMikhail Gudim; RV64I-NEXT: xor a0, a0, a1 398*cb15e657SMikhail Gudim; RV64I-NEXT: ret 399*cb15e657SMikhail Gudim; 400*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: xor32: 401*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 402*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 403*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 404*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: xor a0, a0, a1 405*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 406*cb15e657SMikhail Gudim; 407*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: xor32: 408*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 409*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 410*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 411*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: xor a0, a0, a1 412*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 413*cb15e657SMikhail Gudim; 414*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: xor32: 415*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 416*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a2, a2, 1 417*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a1, a1, a2 418*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: xor a0, a0, a1 419*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 420*cb15e657SMikhail Gudim; 421*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: xor32: 422*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 423*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 424*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 425*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: xor a0, a0, a1 426*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 427*cb15e657SMikhail Gudim %binop = xor i32 %x, %y 428*cb15e657SMikhail Gudim %select_ = select i1 %c, i32 %binop, i32 %x 429*cb15e657SMikhail Gudim ret i32 %select_ 430*cb15e657SMikhail Gudim} 431*cb15e657SMikhail Gudim 432*cb15e657SMikhail Gudimdefine i64 @shl64(i64 %x, i64 %y, i1 %c) { 433*cb15e657SMikhail Gudim; RV32I-LABEL: shl64: 434*cb15e657SMikhail Gudim; RV32I: # %bb.0: 435*cb15e657SMikhail Gudim; RV32I-NEXT: andi a4, a4, 1 436*cb15e657SMikhail Gudim; RV32I-NEXT: addi a5, a2, -32 437*cb15e657SMikhail Gudim; RV32I-NEXT: sll a3, a0, a2 438*cb15e657SMikhail Gudim; RV32I-NEXT: bltz a5, .LBB8_3 439*cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 440*cb15e657SMikhail Gudim; RV32I-NEXT: mv a2, a3 441*cb15e657SMikhail Gudim; RV32I-NEXT: beqz a4, .LBB8_4 442*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB8_2: 443*cb15e657SMikhail Gudim; RV32I-NEXT: srai a0, a5, 31 444*cb15e657SMikhail Gudim; RV32I-NEXT: and a0, a0, a3 445*cb15e657SMikhail Gudim; RV32I-NEXT: mv a1, a2 446*cb15e657SMikhail Gudim; RV32I-NEXT: ret 447*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB8_3: 448*cb15e657SMikhail Gudim; RV32I-NEXT: sll a6, a1, a2 449*cb15e657SMikhail Gudim; RV32I-NEXT: not a2, a2 450*cb15e657SMikhail Gudim; RV32I-NEXT: srli a7, a0, 1 451*cb15e657SMikhail Gudim; RV32I-NEXT: srl a2, a7, a2 452*cb15e657SMikhail Gudim; RV32I-NEXT: or a2, a6, a2 453*cb15e657SMikhail Gudim; RV32I-NEXT: bnez a4, .LBB8_2 454*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB8_4: 455*cb15e657SMikhail Gudim; RV32I-NEXT: ret 456*cb15e657SMikhail Gudim; 457*cb15e657SMikhail Gudim; RV64I-LABEL: shl64: 458*cb15e657SMikhail Gudim; RV64I: # %bb.0: 459*cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 460*cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB8_2 461*cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 462*cb15e657SMikhail Gudim; RV64I-NEXT: sll a0, a0, a1 463*cb15e657SMikhail Gudim; RV64I-NEXT: .LBB8_2: 464*cb15e657SMikhail Gudim; RV64I-NEXT: ret 465*cb15e657SMikhail Gudim; 466*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: shl64: 467*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 468*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 469*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sll a1, a0, a1 470*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 471*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 472*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 473*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 474*cb15e657SMikhail Gudim; 475*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: shl64: 476*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 477*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 478*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sll a1, a0, a1 479*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 480*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 481*cb15e657SMikhail Gudim; 482*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: shl64: 483*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 484*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 485*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sll a3, a1, a2 486*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: not a5, a2 487*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: srli a6, a0, 1 488*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: srl a5, a6, a5 489*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a3, a3, a5 490*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: addi a5, a2, -32 491*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: slti a5, a5, 0 492*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a3, a3, a5 493*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sll a2, a0, a2 494*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a6, a2, a5 495*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a3, a3, a6 496*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a5 497*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a4 498*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 499*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a2, a0 500*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a3, a4 501*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a1, a1, a4 502*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a1, a2, a1 503*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 504*cb15e657SMikhail Gudim; 505*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: shl64: 506*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 507*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 508*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: sll a1, a0, a1 509*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 510*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 511*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 512*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 513*cb15e657SMikhail Gudim %binop = shl i64 %x, %y 514*cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 515*cb15e657SMikhail Gudim ret i64 %select_ 516*cb15e657SMikhail Gudim} 517*cb15e657SMikhail Gudim 518*cb15e657SMikhail Gudimdefine i64 @ashr64(i64 %x, i64 %y, i1 %c) { 519*cb15e657SMikhail Gudim; RV32I-LABEL: ashr64: 520*cb15e657SMikhail Gudim; RV32I: # %bb.0: 521*cb15e657SMikhail Gudim; RV32I-NEXT: andi a5, a4, 1 522*cb15e657SMikhail Gudim; RV32I-NEXT: addi a3, a2, -32 523*cb15e657SMikhail Gudim; RV32I-NEXT: sra a4, a1, a2 524*cb15e657SMikhail Gudim; RV32I-NEXT: bltz a3, .LBB9_2 525*cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 526*cb15e657SMikhail Gudim; RV32I-NEXT: srai a2, a1, 31 527*cb15e657SMikhail Gudim; RV32I-NEXT: mv a3, a4 528*cb15e657SMikhail Gudim; RV32I-NEXT: mv a4, a2 529*cb15e657SMikhail Gudim; RV32I-NEXT: beqz a5, .LBB9_3 530*cb15e657SMikhail Gudim; RV32I-NEXT: j .LBB9_4 531*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB9_2: 532*cb15e657SMikhail Gudim; RV32I-NEXT: srl a3, a0, a2 533*cb15e657SMikhail Gudim; RV32I-NEXT: not a2, a2 534*cb15e657SMikhail Gudim; RV32I-NEXT: slli a6, a1, 1 535*cb15e657SMikhail Gudim; RV32I-NEXT: sll a2, a6, a2 536*cb15e657SMikhail Gudim; RV32I-NEXT: or a3, a3, a2 537*cb15e657SMikhail Gudim; RV32I-NEXT: bnez a5, .LBB9_4 538*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB9_3: 539*cb15e657SMikhail Gudim; RV32I-NEXT: mv a3, a0 540*cb15e657SMikhail Gudim; RV32I-NEXT: mv a4, a1 541*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB9_4: 542*cb15e657SMikhail Gudim; RV32I-NEXT: mv a0, a3 543*cb15e657SMikhail Gudim; RV32I-NEXT: mv a1, a4 544*cb15e657SMikhail Gudim; RV32I-NEXT: ret 545*cb15e657SMikhail Gudim; 546*cb15e657SMikhail Gudim; RV64I-LABEL: ashr64: 547*cb15e657SMikhail Gudim; RV64I: # %bb.0: 548*cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 549*cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB9_2 550*cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 551*cb15e657SMikhail Gudim; RV64I-NEXT: sra a0, a0, a1 552*cb15e657SMikhail Gudim; RV64I-NEXT: .LBB9_2: 553*cb15e657SMikhail Gudim; RV64I-NEXT: ret 554*cb15e657SMikhail Gudim; 555*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: ashr64: 556*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 557*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 558*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sra a1, a0, a1 559*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 560*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 561*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 562*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 563*cb15e657SMikhail Gudim; 564*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: ashr64: 565*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 566*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 567*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sra a1, a0, a1 568*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 569*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 570*cb15e657SMikhail Gudim; 571*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: ashr64: 572*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 573*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 574*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: srl a3, a0, a2 575*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: not a5, a2 576*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: slli a6, a1, 1 577*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sll a5, a6, a5 578*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a3, a3, a5 579*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: addi a5, a2, -32 580*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: slti a5, a5, 0 581*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a3, a3, a5 582*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sra a2, a1, a2 583*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a6, a2, a5 584*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a3, a3, a6 585*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: srai a6, a1, 31 586*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a6, a6, a5 587*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a5 588*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a2, a2, a6 589*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 590*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a1, a1, a4 591*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a1, a2, a1 592*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a3, a4 593*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a4 594*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a2, a0 595*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 596*cb15e657SMikhail Gudim; 597*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: ashr64: 598*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 599*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 600*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: sra a1, a0, a1 601*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 602*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 603*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 604*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 605*cb15e657SMikhail Gudim %binop = ashr i64 %x, %y 606*cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 607*cb15e657SMikhail Gudim ret i64 %select_ 608*cb15e657SMikhail Gudim} 609*cb15e657SMikhail Gudim 610*cb15e657SMikhail Gudimdefine i64 @lshr64(i64 %x, i64 %y, i1 %c) { 611*cb15e657SMikhail Gudim; RV32I-LABEL: lshr64: 612*cb15e657SMikhail Gudim; RV32I: # %bb.0: 613*cb15e657SMikhail Gudim; RV32I-NEXT: andi a4, a4, 1 614*cb15e657SMikhail Gudim; RV32I-NEXT: addi a5, a2, -32 615*cb15e657SMikhail Gudim; RV32I-NEXT: srl a3, a1, a2 616*cb15e657SMikhail Gudim; RV32I-NEXT: bltz a5, .LBB10_3 617*cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 618*cb15e657SMikhail Gudim; RV32I-NEXT: mv a2, a3 619*cb15e657SMikhail Gudim; RV32I-NEXT: beqz a4, .LBB10_4 620*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB10_2: 621*cb15e657SMikhail Gudim; RV32I-NEXT: srai a1, a5, 31 622*cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a1, a3 623*cb15e657SMikhail Gudim; RV32I-NEXT: mv a0, a2 624*cb15e657SMikhail Gudim; RV32I-NEXT: ret 625*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB10_3: 626*cb15e657SMikhail Gudim; RV32I-NEXT: srl a6, a0, a2 627*cb15e657SMikhail Gudim; RV32I-NEXT: not a2, a2 628*cb15e657SMikhail Gudim; RV32I-NEXT: slli a7, a1, 1 629*cb15e657SMikhail Gudim; RV32I-NEXT: sll a2, a7, a2 630*cb15e657SMikhail Gudim; RV32I-NEXT: or a2, a6, a2 631*cb15e657SMikhail Gudim; RV32I-NEXT: bnez a4, .LBB10_2 632*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB10_4: 633*cb15e657SMikhail Gudim; RV32I-NEXT: ret 634*cb15e657SMikhail Gudim; 635*cb15e657SMikhail Gudim; RV64I-LABEL: lshr64: 636*cb15e657SMikhail Gudim; RV64I: # %bb.0: 637*cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 638*cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB10_2 639*cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 640*cb15e657SMikhail Gudim; RV64I-NEXT: srl a0, a0, a1 641*cb15e657SMikhail Gudim; RV64I-NEXT: .LBB10_2: 642*cb15e657SMikhail Gudim; RV64I-NEXT: ret 643*cb15e657SMikhail Gudim; 644*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: lshr64: 645*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 646*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 647*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: srl a1, a0, a1 648*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 649*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 650*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 651*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 652*cb15e657SMikhail Gudim; 653*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: lshr64: 654*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 655*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 656*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: srl a1, a0, a1 657*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 658*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 659*cb15e657SMikhail Gudim; 660*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: lshr64: 661*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 662*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 663*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: srl a3, a0, a2 664*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: not a5, a2 665*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: slli a6, a1, 1 666*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sll a5, a6, a5 667*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a3, a3, a5 668*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: addi a5, a2, -32 669*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: slti a5, a5, 0 670*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a3, a3, a5 671*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: srl a2, a1, a2 672*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a6, a2, a5 673*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a3, a3, a6 674*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a5 675*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a1, a1, a4 676*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 677*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a1, a2, a1 678*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a3, a4 679*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a4 680*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a2, a0 681*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 682*cb15e657SMikhail Gudim; 683*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: lshr64: 684*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 685*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 686*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: srl a1, a0, a1 687*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 688*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 689*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 690*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 691*cb15e657SMikhail Gudim %binop = lshr i64 %x, %y 692*cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 693*cb15e657SMikhail Gudim ret i64 %select_ 694*cb15e657SMikhail Gudim} 695*cb15e657SMikhail Gudim 696*cb15e657SMikhail Gudimdefine i64 @sub64(i64 %x, i64 %y, i1 %c) { 697*cb15e657SMikhail Gudim; RV32I-LABEL: sub64: 698*cb15e657SMikhail Gudim; RV32I: # %bb.0: 699*cb15e657SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 700*cb15e657SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 701*cb15e657SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 702*cb15e657SMikhail Gudim; RV32I-NEXT: sltu a5, a0, a2 703*cb15e657SMikhail Gudim; RV32I-NEXT: and a3, a4, a3 704*cb15e657SMikhail Gudim; RV32I-NEXT: sub a1, a1, a3 705*cb15e657SMikhail Gudim; RV32I-NEXT: sub a1, a1, a5 706*cb15e657SMikhail Gudim; RV32I-NEXT: sub a0, a0, a2 707*cb15e657SMikhail Gudim; RV32I-NEXT: ret 708*cb15e657SMikhail Gudim; 709*cb15e657SMikhail Gudim; RV64I-LABEL: sub64: 710*cb15e657SMikhail Gudim; RV64I: # %bb.0: 711*cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 712*cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 713*cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 714*cb15e657SMikhail Gudim; RV64I-NEXT: sub a0, a0, a1 715*cb15e657SMikhail Gudim; RV64I-NEXT: ret 716*cb15e657SMikhail Gudim; 717*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: sub64: 718*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 719*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 720*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 721*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: sub a0, a0, a1 722*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 723*cb15e657SMikhail Gudim; 724*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: sub64: 725*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 726*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 727*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 728*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: sub a0, a0, a1 729*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 730*cb15e657SMikhail Gudim; 731*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: sub64: 732*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 733*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 734*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 735*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sltu a5, a0, a2 736*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a3, a3, a4 737*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sub a1, a1, a3 738*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sub a1, a1, a5 739*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sub a0, a0, a2 740*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 741*cb15e657SMikhail Gudim; 742*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: sub64: 743*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 744*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 745*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 746*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: sub a0, a0, a1 747*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 748*cb15e657SMikhail Gudim %binop = sub i64 %x, %y 749*cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 750*cb15e657SMikhail Gudim ret i64 %select_ 751*cb15e657SMikhail Gudim} 752*cb15e657SMikhail Gudim 753*cb15e657SMikhail Gudimdefine i64 @and64(i64 %x, i64 %y, i1 %c) { 754*cb15e657SMikhail Gudim; RV32I-LABEL: and64: 755*cb15e657SMikhail Gudim; RV32I: # %bb.0: 756*cb15e657SMikhail Gudim; RV32I-NEXT: andi a4, a4, 1 757*cb15e657SMikhail Gudim; RV32I-NEXT: beqz a4, .LBB12_2 758*cb15e657SMikhail Gudim; RV32I-NEXT: # %bb.1: 759*cb15e657SMikhail Gudim; RV32I-NEXT: and a1, a1, a3 760*cb15e657SMikhail Gudim; RV32I-NEXT: and a0, a0, a2 761*cb15e657SMikhail Gudim; RV32I-NEXT: .LBB12_2: 762*cb15e657SMikhail Gudim; RV32I-NEXT: ret 763*cb15e657SMikhail Gudim; 764*cb15e657SMikhail Gudim; RV64I-LABEL: and64: 765*cb15e657SMikhail Gudim; RV64I: # %bb.0: 766*cb15e657SMikhail Gudim; RV64I-NEXT: andi a2, a2, 1 767*cb15e657SMikhail Gudim; RV64I-NEXT: beqz a2, .LBB12_2 768*cb15e657SMikhail Gudim; RV64I-NEXT: # %bb.1: 769*cb15e657SMikhail Gudim; RV64I-NEXT: and a0, a0, a1 770*cb15e657SMikhail Gudim; RV64I-NEXT: .LBB12_2: 771*cb15e657SMikhail Gudim; RV64I-NEXT: ret 772*cb15e657SMikhail Gudim; 773*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: and64: 774*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 775*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 776*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: and a1, a0, a1 777*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2 778*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0 779*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 780*cb15e657SMikhail Gudim; 781*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: and64: 782*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 783*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 784*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: and a1, a0, a1 785*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2 786*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 787*cb15e657SMikhail Gudim; 788*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: and64: 789*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 790*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 791*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: and a3, a1, a3 792*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: and a2, a0, a2 793*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a0, a0, a4 794*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a2, a0 795*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.nez a1, a1, a4 796*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a1, a3, a1 797*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 798*cb15e657SMikhail Gudim; 799*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: and64: 800*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 801*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 802*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: and a1, a0, a1 803*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.nez a0, a0, a2 804*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a1, a0 805*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 806*cb15e657SMikhail Gudim %binop = and i64 %x, %y 807*cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 808*cb15e657SMikhail Gudim ret i64 %select_ 809*cb15e657SMikhail Gudim} 810*cb15e657SMikhail Gudim 811*cb15e657SMikhail Gudim 812*cb15e657SMikhail Gudimdefine i64 @add64(i64 %x, i64 %y, i1 %c) { 813*cb15e657SMikhail Gudim; RV32I-LABEL: add64: 814*cb15e657SMikhail Gudim; RV32I: # %bb.0: 815*cb15e657SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 816*cb15e657SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 817*cb15e657SMikhail Gudim; RV32I-NEXT: and a3, a4, a3 818*cb15e657SMikhail Gudim; RV32I-NEXT: add a1, a1, a3 819*cb15e657SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 820*cb15e657SMikhail Gudim; RV32I-NEXT: add a2, a0, a2 821*cb15e657SMikhail Gudim; RV32I-NEXT: sltu a0, a2, a0 822*cb15e657SMikhail Gudim; RV32I-NEXT: add a1, a1, a0 823*cb15e657SMikhail Gudim; RV32I-NEXT: mv a0, a2 824*cb15e657SMikhail Gudim; RV32I-NEXT: ret 825*cb15e657SMikhail Gudim; 826*cb15e657SMikhail Gudim; RV64I-LABEL: add64: 827*cb15e657SMikhail Gudim; RV64I: # %bb.0: 828*cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 829*cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 830*cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 831*cb15e657SMikhail Gudim; RV64I-NEXT: add a0, a0, a1 832*cb15e657SMikhail Gudim; RV64I-NEXT: ret 833*cb15e657SMikhail Gudim; 834*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: add64: 835*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 836*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 837*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 838*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: add a0, a0, a1 839*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 840*cb15e657SMikhail Gudim; 841*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: add64: 842*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 843*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 844*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 845*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: add a0, a0, a1 846*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 847*cb15e657SMikhail Gudim; 848*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: add64: 849*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 850*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 851*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a3, a3, a4 852*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: add a1, a1, a3 853*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 854*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: add a2, a0, a2 855*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: sltu a0, a2, a0 856*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: add a1, a1, a0 857*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: mv a0, a2 858*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 859*cb15e657SMikhail Gudim; 860*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: add64: 861*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 862*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 863*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 864*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: add a0, a0, a1 865*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 866*cb15e657SMikhail Gudim %binop = add i64 %x, %y 867*cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 868*cb15e657SMikhail Gudim ret i64 %select_ 869*cb15e657SMikhail Gudim} 870*cb15e657SMikhail Gudim 871*cb15e657SMikhail Gudim 872*cb15e657SMikhail Gudimdefine i64 @or64(i64 %x, i64 %y, i1 %c) { 873*cb15e657SMikhail Gudim; RV32I-LABEL: or64: 874*cb15e657SMikhail Gudim; RV32I: # %bb.0: 875*cb15e657SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 876*cb15e657SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 877*cb15e657SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 878*cb15e657SMikhail Gudim; RV32I-NEXT: or a0, a0, a2 879*cb15e657SMikhail Gudim; RV32I-NEXT: and a3, a4, a3 880*cb15e657SMikhail Gudim; RV32I-NEXT: or a1, a1, a3 881*cb15e657SMikhail Gudim; RV32I-NEXT: ret 882*cb15e657SMikhail Gudim; 883*cb15e657SMikhail Gudim; RV64I-LABEL: or64: 884*cb15e657SMikhail Gudim; RV64I: # %bb.0: 885*cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 886*cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 887*cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 888*cb15e657SMikhail Gudim; RV64I-NEXT: or a0, a0, a1 889*cb15e657SMikhail Gudim; RV64I-NEXT: ret 890*cb15e657SMikhail Gudim; 891*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: or64: 892*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 893*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 894*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 895*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: or a0, a0, a1 896*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 897*cb15e657SMikhail Gudim; 898*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: or64: 899*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 900*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 901*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 902*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: or a0, a0, a1 903*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 904*cb15e657SMikhail Gudim; 905*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: or64: 906*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 907*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 908*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 909*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a0, a0, a2 910*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a3, a4 911*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: or a1, a1, a2 912*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 913*cb15e657SMikhail Gudim; 914*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: or64: 915*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 916*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 917*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 918*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: or a0, a0, a1 919*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 920*cb15e657SMikhail Gudim %binop = or i64 %x, %y 921*cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 922*cb15e657SMikhail Gudim ret i64 %select_ 923*cb15e657SMikhail Gudim} 924*cb15e657SMikhail Gudim 925*cb15e657SMikhail Gudimdefine i64 @xor64(i64 %x, i64 %y, i1 %c) { 926*cb15e657SMikhail Gudim; RV32I-LABEL: xor64: 927*cb15e657SMikhail Gudim; RV32I: # %bb.0: 928*cb15e657SMikhail Gudim; RV32I-NEXT: slli a4, a4, 31 929*cb15e657SMikhail Gudim; RV32I-NEXT: srai a4, a4, 31 930*cb15e657SMikhail Gudim; RV32I-NEXT: and a2, a4, a2 931*cb15e657SMikhail Gudim; RV32I-NEXT: xor a0, a0, a2 932*cb15e657SMikhail Gudim; RV32I-NEXT: and a3, a4, a3 933*cb15e657SMikhail Gudim; RV32I-NEXT: xor a1, a1, a3 934*cb15e657SMikhail Gudim; RV32I-NEXT: ret 935*cb15e657SMikhail Gudim; 936*cb15e657SMikhail Gudim; RV64I-LABEL: xor64: 937*cb15e657SMikhail Gudim; RV64I: # %bb.0: 938*cb15e657SMikhail Gudim; RV64I-NEXT: slli a2, a2, 63 939*cb15e657SMikhail Gudim; RV64I-NEXT: srai a2, a2, 63 940*cb15e657SMikhail Gudim; RV64I-NEXT: and a1, a2, a1 941*cb15e657SMikhail Gudim; RV64I-NEXT: xor a0, a0, a1 942*cb15e657SMikhail Gudim; RV64I-NEXT: ret 943*cb15e657SMikhail Gudim; 944*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-LABEL: xor64: 945*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS: # %bb.0: 946*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: andi a2, a2, 1 947*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2 948*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: xor a0, a0, a1 949*cb15e657SMikhail Gudim; RV64XVENTANACONDOPS-NEXT: ret 950*cb15e657SMikhail Gudim; 951*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-LABEL: xor64: 952*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV: # %bb.0: 953*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: andi a2, a2, 1 954*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: th.mveqz a1, zero, a2 955*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: xor a0, a0, a1 956*cb15e657SMikhail Gudim; RV64XTHEADCONDMOV-NEXT: ret 957*cb15e657SMikhail Gudim; 958*cb15e657SMikhail Gudim; RV32ZICOND-LABEL: xor64: 959*cb15e657SMikhail Gudim; RV32ZICOND: # %bb.0: 960*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: andi a4, a4, 1 961*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a2, a4 962*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: xor a0, a0, a2 963*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: czero.eqz a2, a3, a4 964*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: xor a1, a1, a2 965*cb15e657SMikhail Gudim; RV32ZICOND-NEXT: ret 966*cb15e657SMikhail Gudim; 967*cb15e657SMikhail Gudim; RV64ZICOND-LABEL: xor64: 968*cb15e657SMikhail Gudim; RV64ZICOND: # %bb.0: 969*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: andi a2, a2, 1 970*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: czero.eqz a1, a1, a2 971*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: xor a0, a0, a1 972*cb15e657SMikhail Gudim; RV64ZICOND-NEXT: ret 973*cb15e657SMikhail Gudim %binop = xor i64 %x, %y 974*cb15e657SMikhail Gudim %select_ = select i1 %c, i64 %binop, i64 %x 975*cb15e657SMikhail Gudim ret i64 %select_ 976*cb15e657SMikhail Gudim} 977