101b96385SPiotr Fusik; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 201b96385SPiotr Fusik; RUN: llc -mtriple=riscv32 -mattr=+zbb -verify-machineinstrs < %s \ 301b96385SPiotr Fusik; RUN: | FileCheck %s --check-prefixes=CHECK,RV32,NOZBS32 401b96385SPiotr Fusik; RUN: llc -mtriple=riscv64 -mattr=+zbb -verify-machineinstrs < %s \ 501b96385SPiotr Fusik; RUN: | FileCheck %s --check-prefixes=CHECK,RV64,NOZBS64 601b96385SPiotr Fusik; RUN: llc -mtriple=riscv32 -mattr=+zbb,+zbs -verify-machineinstrs < %s \ 787d7aebdSPiotr Fusik; RUN: | FileCheck %s --check-prefixes=CHECK,RV32,ZBS,ZBS32 801b96385SPiotr Fusik; RUN: llc -mtriple=riscv64 -mattr=+zbb,+zbs -verify-machineinstrs < %s \ 987d7aebdSPiotr Fusik; RUN: | FileCheck %s --check-prefixes=CHECK,RV64,ZBS,ZBS64 1001b96385SPiotr Fusik 1101b96385SPiotr Fusikdefine i32 @and0xabcdefff(i32 %x) { 126e7312bdSPiotr Fusik; CHECK-LABEL: and0xabcdefff: 136e7312bdSPiotr Fusik; CHECK: # %bb.0: 146e7312bdSPiotr Fusik; CHECK-NEXT: lui a1, 344865 156e7312bdSPiotr Fusik; CHECK-NEXT: andn a0, a0, a1 166e7312bdSPiotr Fusik; CHECK-NEXT: ret 1701b96385SPiotr Fusik %and = and i32 %x, -1412567041 1801b96385SPiotr Fusik ret i32 %and 1901b96385SPiotr Fusik} 2001b96385SPiotr Fusik 2101b96385SPiotr Fusikdefine i32 @orlow13(i32 %x) { 226e7312bdSPiotr Fusik; CHECK-LABEL: orlow13: 236e7312bdSPiotr Fusik; CHECK: # %bb.0: 246e7312bdSPiotr Fusik; CHECK-NEXT: lui a1, 1048574 256e7312bdSPiotr Fusik; CHECK-NEXT: orn a0, a0, a1 266e7312bdSPiotr Fusik; CHECK-NEXT: ret 2701b96385SPiotr Fusik %or = or i32 %x, 8191 2801b96385SPiotr Fusik ret i32 %or 2901b96385SPiotr Fusik} 3001b96385SPiotr Fusik 3101b96385SPiotr Fusikdefine i64 @orlow24(i64 %x) { 3201b96385SPiotr Fusik; RV32-LABEL: orlow24: 3301b96385SPiotr Fusik; RV32: # %bb.0: 346e7312bdSPiotr Fusik; RV32-NEXT: lui a2, 1044480 356e7312bdSPiotr Fusik; RV32-NEXT: orn a0, a0, a2 3601b96385SPiotr Fusik; RV32-NEXT: ret 3701b96385SPiotr Fusik; 3801b96385SPiotr Fusik; RV64-LABEL: orlow24: 3901b96385SPiotr Fusik; RV64: # %bb.0: 406e7312bdSPiotr Fusik; RV64-NEXT: lui a1, 1044480 416e7312bdSPiotr Fusik; RV64-NEXT: orn a0, a0, a1 4201b96385SPiotr Fusik; RV64-NEXT: ret 4301b96385SPiotr Fusik %or = or i64 %x, 16777215 4401b96385SPiotr Fusik ret i64 %or 4501b96385SPiotr Fusik} 4601b96385SPiotr Fusik 4701b96385SPiotr Fusikdefine i32 @xorlow16(i32 %x) { 486e7312bdSPiotr Fusik; CHECK-LABEL: xorlow16: 496e7312bdSPiotr Fusik; CHECK: # %bb.0: 506e7312bdSPiotr Fusik; CHECK-NEXT: lui a1, 1048560 516e7312bdSPiotr Fusik; CHECK-NEXT: xnor a0, a0, a1 526e7312bdSPiotr Fusik; CHECK-NEXT: ret 5301b96385SPiotr Fusik %xor = xor i32 %x, 65535 5401b96385SPiotr Fusik ret i32 %xor 5501b96385SPiotr Fusik} 5601b96385SPiotr Fusik 5701b96385SPiotr Fusikdefine i32 @xorlow31(i32 %x) { 586e7312bdSPiotr Fusik; CHECK-LABEL: xorlow31: 596e7312bdSPiotr Fusik; CHECK: # %bb.0: 606e7312bdSPiotr Fusik; CHECK-NEXT: lui a1, 524288 616e7312bdSPiotr Fusik; CHECK-NEXT: xnor a0, a0, a1 626e7312bdSPiotr Fusik; CHECK-NEXT: ret 6301b96385SPiotr Fusik %xor = xor i32 %x, 2147483647 6401b96385SPiotr Fusik ret i32 %xor 6501b96385SPiotr Fusik} 6601b96385SPiotr Fusik 6701b96385SPiotr Fusikdefine i32 @oraddlow16(i32 %x) { 6801b96385SPiotr Fusik; RV32-LABEL: oraddlow16: 6901b96385SPiotr Fusik; RV32: # %bb.0: 7001b96385SPiotr Fusik; RV32-NEXT: lui a1, 16 7101b96385SPiotr Fusik; RV32-NEXT: addi a1, a1, -1 7201b96385SPiotr Fusik; RV32-NEXT: or a0, a0, a1 7301b96385SPiotr Fusik; RV32-NEXT: add a0, a0, a1 7401b96385SPiotr Fusik; RV32-NEXT: ret 7501b96385SPiotr Fusik; 7601b96385SPiotr Fusik; RV64-LABEL: oraddlow16: 7701b96385SPiotr Fusik; RV64: # %bb.0: 7801b96385SPiotr Fusik; RV64-NEXT: lui a1, 16 7901b96385SPiotr Fusik; RV64-NEXT: addi a1, a1, -1 8001b96385SPiotr Fusik; RV64-NEXT: or a0, a0, a1 8101b96385SPiotr Fusik; RV64-NEXT: addw a0, a0, a1 8201b96385SPiotr Fusik; RV64-NEXT: ret 8301b96385SPiotr Fusik %or = or i32 %x, 65535 8401b96385SPiotr Fusik %add = add nsw i32 %or, 65535 8501b96385SPiotr Fusik ret i32 %add 8601b96385SPiotr Fusik} 8701b96385SPiotr Fusik 8801b96385SPiotr Fusikdefine i32 @addorlow16(i32 %x) { 8901b96385SPiotr Fusik; RV32-LABEL: addorlow16: 9001b96385SPiotr Fusik; RV32: # %bb.0: 9101b96385SPiotr Fusik; RV32-NEXT: lui a1, 16 9201b96385SPiotr Fusik; RV32-NEXT: addi a1, a1, -1 9301b96385SPiotr Fusik; RV32-NEXT: add a0, a0, a1 9401b96385SPiotr Fusik; RV32-NEXT: or a0, a0, a1 9501b96385SPiotr Fusik; RV32-NEXT: ret 9601b96385SPiotr Fusik; 9701b96385SPiotr Fusik; RV64-LABEL: addorlow16: 9801b96385SPiotr Fusik; RV64: # %bb.0: 9901b96385SPiotr Fusik; RV64-NEXT: lui a1, 16 10001b96385SPiotr Fusik; RV64-NEXT: addiw a1, a1, -1 10101b96385SPiotr Fusik; RV64-NEXT: addw a0, a0, a1 10201b96385SPiotr Fusik; RV64-NEXT: or a0, a0, a1 10301b96385SPiotr Fusik; RV64-NEXT: ret 10401b96385SPiotr Fusik %add = add nsw i32 %x, 65535 10501b96385SPiotr Fusik %or = or i32 %add, 65535 10601b96385SPiotr Fusik ret i32 %or 10701b96385SPiotr Fusik} 10801b96385SPiotr Fusik 10901b96385SPiotr Fusikdefine i32 @andxorlow16(i32 %x) { 11001b96385SPiotr Fusik; RV32-LABEL: andxorlow16: 11101b96385SPiotr Fusik; RV32: # %bb.0: 11201b96385SPiotr Fusik; RV32-NEXT: lui a1, 16 11301b96385SPiotr Fusik; RV32-NEXT: addi a1, a1, -1 11401b96385SPiotr Fusik; RV32-NEXT: andn a0, a1, a0 11501b96385SPiotr Fusik; RV32-NEXT: ret 11601b96385SPiotr Fusik; 11701b96385SPiotr Fusik; RV64-LABEL: andxorlow16: 11801b96385SPiotr Fusik; RV64: # %bb.0: 11901b96385SPiotr Fusik; RV64-NEXT: lui a1, 16 12001b96385SPiotr Fusik; RV64-NEXT: addiw a1, a1, -1 12101b96385SPiotr Fusik; RV64-NEXT: andn a0, a1, a0 12201b96385SPiotr Fusik; RV64-NEXT: ret 12301b96385SPiotr Fusik %and = and i32 %x, 65535 12401b96385SPiotr Fusik %xor = xor i32 %and, 65535 12501b96385SPiotr Fusik ret i32 %xor 12601b96385SPiotr Fusik} 12701b96385SPiotr Fusik 12801b96385SPiotr Fusikdefine void @orarray100(ptr %a) { 12901b96385SPiotr Fusik; RV32-LABEL: orarray100: 13001b96385SPiotr Fusik; RV32: # %bb.0: # %entry 13101b96385SPiotr Fusik; RV32-NEXT: li a1, 0 13201b96385SPiotr Fusik; RV32-NEXT: li a2, 0 1336e7312bdSPiotr Fusik; RV32-NEXT: lui a3, 1048560 13401b96385SPiotr Fusik; RV32-NEXT: .LBB8_1: # %for.body 13501b96385SPiotr Fusik; RV32-NEXT: # =>This Inner Loop Header: Depth=1 13601b96385SPiotr Fusik; RV32-NEXT: slli a4, a1, 2 13701b96385SPiotr Fusik; RV32-NEXT: addi a1, a1, 1 13801b96385SPiotr Fusik; RV32-NEXT: add a4, a0, a4 13901b96385SPiotr Fusik; RV32-NEXT: lw a5, 0(a4) 14001b96385SPiotr Fusik; RV32-NEXT: seqz a6, a1 14101b96385SPiotr Fusik; RV32-NEXT: add a2, a2, a6 14201b96385SPiotr Fusik; RV32-NEXT: xori a6, a1, 100 1436e7312bdSPiotr Fusik; RV32-NEXT: orn a5, a5, a3 14401b96385SPiotr Fusik; RV32-NEXT: or a6, a6, a2 14501b96385SPiotr Fusik; RV32-NEXT: sw a5, 0(a4) 14601b96385SPiotr Fusik; RV32-NEXT: bnez a6, .LBB8_1 14701b96385SPiotr Fusik; RV32-NEXT: # %bb.2: # %for.cond.cleanup 14801b96385SPiotr Fusik; RV32-NEXT: ret 14901b96385SPiotr Fusik; 15001b96385SPiotr Fusik; RV64-LABEL: orarray100: 15101b96385SPiotr Fusik; RV64: # %bb.0: # %entry 15201b96385SPiotr Fusik; RV64-NEXT: addi a1, a0, 400 1536e7312bdSPiotr Fusik; RV64-NEXT: lui a2, 1048560 15401b96385SPiotr Fusik; RV64-NEXT: .LBB8_1: # %for.body 15501b96385SPiotr Fusik; RV64-NEXT: # =>This Inner Loop Header: Depth=1 15601b96385SPiotr Fusik; RV64-NEXT: lw a3, 0(a0) 1576e7312bdSPiotr Fusik; RV64-NEXT: orn a3, a3, a2 15801b96385SPiotr Fusik; RV64-NEXT: sw a3, 0(a0) 15901b96385SPiotr Fusik; RV64-NEXT: addi a0, a0, 4 16001b96385SPiotr Fusik; RV64-NEXT: bne a0, a1, .LBB8_1 16101b96385SPiotr Fusik; RV64-NEXT: # %bb.2: # %for.cond.cleanup 16201b96385SPiotr Fusik; RV64-NEXT: ret 16301b96385SPiotr Fusikentry: 16401b96385SPiotr Fusik br label %for.body 16501b96385SPiotr Fusik 16601b96385SPiotr Fusikfor.cond.cleanup: 16701b96385SPiotr Fusik ret void 16801b96385SPiotr Fusik 16901b96385SPiotr Fusikfor.body: 17001b96385SPiotr Fusik %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] 17101b96385SPiotr Fusik %arrayidx = getelementptr inbounds nuw i32, ptr %a, i64 %indvars.iv 17201b96385SPiotr Fusik %1 = load i32, ptr %arrayidx, align 4 17301b96385SPiotr Fusik %or = or i32 %1, 65535 17401b96385SPiotr Fusik store i32 %or, ptr %arrayidx, align 4 17501b96385SPiotr Fusik %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 17601b96385SPiotr Fusik %exitcond.not = icmp eq i64 %indvars.iv.next, 100 17701b96385SPiotr Fusik br i1 %exitcond.not, label %for.cond.cleanup, label %for.body 17801b96385SPiotr Fusik} 17901b96385SPiotr Fusik 18001b96385SPiotr Fusikdefine void @orarray3(ptr %a) { 18101b96385SPiotr Fusik; CHECK-LABEL: orarray3: 18201b96385SPiotr Fusik; CHECK: # %bb.0: 1836e7312bdSPiotr Fusik; CHECK-NEXT: lw a1, 0(a0) 1846e7312bdSPiotr Fusik; CHECK-NEXT: lw a2, 4(a0) 1856e7312bdSPiotr Fusik; CHECK-NEXT: lw a3, 8(a0) 1866e7312bdSPiotr Fusik; CHECK-NEXT: lui a4, 1048560 1876e7312bdSPiotr Fusik; CHECK-NEXT: orn a1, a1, a4 1886e7312bdSPiotr Fusik; CHECK-NEXT: orn a2, a2, a4 1896e7312bdSPiotr Fusik; CHECK-NEXT: orn a3, a3, a4 1906e7312bdSPiotr Fusik; CHECK-NEXT: sw a1, 0(a0) 1916e7312bdSPiotr Fusik; CHECK-NEXT: sw a2, 4(a0) 1926e7312bdSPiotr Fusik; CHECK-NEXT: sw a3, 8(a0) 19301b96385SPiotr Fusik; CHECK-NEXT: ret 19401b96385SPiotr Fusik %1 = load i32, ptr %a, align 4 19501b96385SPiotr Fusik %or = or i32 %1, 65535 19601b96385SPiotr Fusik store i32 %or, ptr %a, align 4 19701b96385SPiotr Fusik %arrayidx.1 = getelementptr inbounds nuw i8, ptr %a, i64 4 19801b96385SPiotr Fusik %2 = load i32, ptr %arrayidx.1, align 4 19901b96385SPiotr Fusik %or.1 = or i32 %2, 65535 20001b96385SPiotr Fusik store i32 %or.1, ptr %arrayidx.1, align 4 20101b96385SPiotr Fusik %arrayidx.2 = getelementptr inbounds nuw i8, ptr %a, i64 8 20201b96385SPiotr Fusik %3 = load i32, ptr %arrayidx.2, align 4 20301b96385SPiotr Fusik %or.2 = or i32 %3, 65535 20401b96385SPiotr Fusik store i32 %or.2, ptr %arrayidx.2, align 4 20501b96385SPiotr Fusik ret void 20601b96385SPiotr Fusik} 20701b96385SPiotr Fusik 20801b96385SPiotr Fusikdefine i32 @andlow16(i32 %x) { 20901b96385SPiotr Fusik; CHECK-LABEL: andlow16: 21001b96385SPiotr Fusik; CHECK: # %bb.0: 21101b96385SPiotr Fusik; CHECK-NEXT: zext.h a0, a0 21201b96385SPiotr Fusik; CHECK-NEXT: ret 21301b96385SPiotr Fusik %and = and i32 %x, 65535 21401b96385SPiotr Fusik ret i32 %and 21501b96385SPiotr Fusik} 21601b96385SPiotr Fusik 21701b96385SPiotr Fusikdefine i32 @andlow24(i32 %x) { 21801b96385SPiotr Fusik; RV32-LABEL: andlow24: 21901b96385SPiotr Fusik; RV32: # %bb.0: 22001b96385SPiotr Fusik; RV32-NEXT: slli a0, a0, 8 22101b96385SPiotr Fusik; RV32-NEXT: srli a0, a0, 8 22201b96385SPiotr Fusik; RV32-NEXT: ret 22301b96385SPiotr Fusik; 22401b96385SPiotr Fusik; RV64-LABEL: andlow24: 22501b96385SPiotr Fusik; RV64: # %bb.0: 22601b96385SPiotr Fusik; RV64-NEXT: slli a0, a0, 40 22701b96385SPiotr Fusik; RV64-NEXT: srli a0, a0, 40 22801b96385SPiotr Fusik; RV64-NEXT: ret 22901b96385SPiotr Fusik %and = and i32 %x, 16777215 23001b96385SPiotr Fusik ret i32 %and 23101b96385SPiotr Fusik} 23201b96385SPiotr Fusik 23301b96385SPiotr Fusikdefine i32 @compl(i32 %x) { 23401b96385SPiotr Fusik; CHECK-LABEL: compl: 23501b96385SPiotr Fusik; CHECK: # %bb.0: 23601b96385SPiotr Fusik; CHECK-NEXT: not a0, a0 23701b96385SPiotr Fusik; CHECK-NEXT: ret 23801b96385SPiotr Fusik %not = xor i32 %x, -1 23901b96385SPiotr Fusik ret i32 %not 24001b96385SPiotr Fusik} 24101b96385SPiotr Fusik 24201b96385SPiotr Fusikdefine i32 @orlow12(i32 %x) { 24301b96385SPiotr Fusik; NOZBS32-LABEL: orlow12: 24401b96385SPiotr Fusik; NOZBS32: # %bb.0: 2456e7312bdSPiotr Fusik; NOZBS32-NEXT: lui a1, 1048575 2466e7312bdSPiotr Fusik; NOZBS32-NEXT: orn a0, a0, a1 24701b96385SPiotr Fusik; NOZBS32-NEXT: ret 24801b96385SPiotr Fusik; 24901b96385SPiotr Fusik; NOZBS64-LABEL: orlow12: 25001b96385SPiotr Fusik; NOZBS64: # %bb.0: 2516e7312bdSPiotr Fusik; NOZBS64-NEXT: lui a1, 1048575 2526e7312bdSPiotr Fusik; NOZBS64-NEXT: orn a0, a0, a1 25301b96385SPiotr Fusik; NOZBS64-NEXT: ret 25401b96385SPiotr Fusik; 25501b96385SPiotr Fusik; ZBS-LABEL: orlow12: 25601b96385SPiotr Fusik; ZBS: # %bb.0: 25701b96385SPiotr Fusik; ZBS-NEXT: ori a0, a0, 2047 25801b96385SPiotr Fusik; ZBS-NEXT: bseti a0, a0, 11 25901b96385SPiotr Fusik; ZBS-NEXT: ret 26001b96385SPiotr Fusik %or = or i32 %x, 4095 26101b96385SPiotr Fusik ret i32 %or 26201b96385SPiotr Fusik} 26301b96385SPiotr Fusik 26401b96385SPiotr Fusikdefine i32 @xorlow12(i32 %x) { 26501b96385SPiotr Fusik; NOZBS32-LABEL: xorlow12: 26601b96385SPiotr Fusik; NOZBS32: # %bb.0: 2676e7312bdSPiotr Fusik; NOZBS32-NEXT: lui a1, 1048575 2686e7312bdSPiotr Fusik; NOZBS32-NEXT: xnor a0, a0, a1 26901b96385SPiotr Fusik; NOZBS32-NEXT: ret 27001b96385SPiotr Fusik; 27101b96385SPiotr Fusik; NOZBS64-LABEL: xorlow12: 27201b96385SPiotr Fusik; NOZBS64: # %bb.0: 2736e7312bdSPiotr Fusik; NOZBS64-NEXT: lui a1, 1048575 2746e7312bdSPiotr Fusik; NOZBS64-NEXT: xnor a0, a0, a1 27501b96385SPiotr Fusik; NOZBS64-NEXT: ret 27601b96385SPiotr Fusik; 27701b96385SPiotr Fusik; ZBS-LABEL: xorlow12: 27801b96385SPiotr Fusik; ZBS: # %bb.0: 27901b96385SPiotr Fusik; ZBS-NEXT: xori a0, a0, 2047 28001b96385SPiotr Fusik; ZBS-NEXT: binvi a0, a0, 11 28101b96385SPiotr Fusik; ZBS-NEXT: ret 28201b96385SPiotr Fusik %xor = xor i32 %x, 4095 28301b96385SPiotr Fusik ret i32 %xor 28401b96385SPiotr Fusik} 28501b96385SPiotr Fusik 28601b96385SPiotr Fusikdefine i64 @andimm64(i64 %x) { 28701b96385SPiotr Fusik; RV32-LABEL: andimm64: 28801b96385SPiotr Fusik; RV32: # %bb.0: 2896e7312bdSPiotr Fusik; RV32-NEXT: lui a1, 4080 2906e7312bdSPiotr Fusik; RV32-NEXT: andn a0, a0, a1 29101b96385SPiotr Fusik; RV32-NEXT: li a1, 0 29201b96385SPiotr Fusik; RV32-NEXT: ret 29301b96385SPiotr Fusik; 29401b96385SPiotr Fusik; RV64-LABEL: andimm64: 29501b96385SPiotr Fusik; RV64: # %bb.0: 2966e7312bdSPiotr Fusik; RV64-NEXT: lui a1, 983295 29701b96385SPiotr Fusik; RV64-NEXT: slli a1, a1, 4 2986e7312bdSPiotr Fusik; RV64-NEXT: andn a0, a0, a1 29901b96385SPiotr Fusik; RV64-NEXT: ret 30001b96385SPiotr Fusik %and = and i64 %x, 4278255615 30101b96385SPiotr Fusik ret i64 %and 30201b96385SPiotr Fusik} 30301b96385SPiotr Fusik 30487d7aebdSPiotr Fusikdefine i64 @orimm64srli(i64 %x) { 30587d7aebdSPiotr Fusik; RV32-LABEL: orimm64srli: 30601b96385SPiotr Fusik; RV32: # %bb.0: 3076e7312bdSPiotr Fusik; RV32-NEXT: lui a2, 1040384 3086e7312bdSPiotr Fusik; RV32-NEXT: orn a0, a0, a2 30901b96385SPiotr Fusik; RV32-NEXT: lui a2, 917504 31001b96385SPiotr Fusik; RV32-NEXT: or a1, a1, a2 31101b96385SPiotr Fusik; RV32-NEXT: ret 31201b96385SPiotr Fusik; 31387d7aebdSPiotr Fusik; RV64-LABEL: orimm64srli: 31401b96385SPiotr Fusik; RV64: # %bb.0: 31501b96385SPiotr Fusik; RV64-NEXT: lui a1, 983040 31601b96385SPiotr Fusik; RV64-NEXT: srli a1, a1, 3 3176e7312bdSPiotr Fusik; RV64-NEXT: orn a0, a0, a1 31801b96385SPiotr Fusik; RV64-NEXT: ret 31901b96385SPiotr Fusik %or = or i64 %x, -2305843009180139521 32001b96385SPiotr Fusik ret i64 %or 32101b96385SPiotr Fusik} 32287d7aebdSPiotr Fusik 32387d7aebdSPiotr Fusikdefine i64 @andnofff(i64 %x) { 32487d7aebdSPiotr Fusik; RV32-LABEL: andnofff: 32587d7aebdSPiotr Fusik; RV32: # %bb.0: 32687d7aebdSPiotr Fusik; RV32-NEXT: lui a2, 1044480 32787d7aebdSPiotr Fusik; RV32-NEXT: and a1, a1, a2 32887d7aebdSPiotr Fusik; RV32-NEXT: andi a0, a0, 255 32987d7aebdSPiotr Fusik; RV32-NEXT: ret 33087d7aebdSPiotr Fusik; 33187d7aebdSPiotr Fusik; RV64-LABEL: andnofff: 33287d7aebdSPiotr Fusik; RV64: # %bb.0: 333*cfe5a084SPiotr Fusik; RV64-NEXT: lui a1, 1048560 334*cfe5a084SPiotr Fusik; RV64-NEXT: srli a1, a1, 8 335*cfe5a084SPiotr Fusik; RV64-NEXT: andn a0, a0, a1 33687d7aebdSPiotr Fusik; RV64-NEXT: ret 33787d7aebdSPiotr Fusik %and = and i64 %x, -72057594037927681 33887d7aebdSPiotr Fusik ret i64 %and 33987d7aebdSPiotr Fusik} 34087d7aebdSPiotr Fusik 34187d7aebdSPiotr Fusikdefine i64 @ornofff(i64 %x) { 34287d7aebdSPiotr Fusik; NOZBS32-LABEL: ornofff: 34387d7aebdSPiotr Fusik; NOZBS32: # %bb.0: 34487d7aebdSPiotr Fusik; NOZBS32-NEXT: lui a2, 524288 34587d7aebdSPiotr Fusik; NOZBS32-NEXT: or a1, a1, a2 34687d7aebdSPiotr Fusik; NOZBS32-NEXT: ori a0, a0, 2047 34787d7aebdSPiotr Fusik; NOZBS32-NEXT: ret 34887d7aebdSPiotr Fusik; 34987d7aebdSPiotr Fusik; NOZBS64-LABEL: ornofff: 35087d7aebdSPiotr Fusik; NOZBS64: # %bb.0: 351*cfe5a084SPiotr Fusik; NOZBS64-NEXT: lui a1, 1048575 352*cfe5a084SPiotr Fusik; NOZBS64-NEXT: srli a1, a1, 1 353*cfe5a084SPiotr Fusik; NOZBS64-NEXT: orn a0, a0, a1 35487d7aebdSPiotr Fusik; NOZBS64-NEXT: ret 35587d7aebdSPiotr Fusik; 35687d7aebdSPiotr Fusik; ZBS32-LABEL: ornofff: 35787d7aebdSPiotr Fusik; ZBS32: # %bb.0: 35887d7aebdSPiotr Fusik; ZBS32-NEXT: ori a0, a0, 2047 35987d7aebdSPiotr Fusik; ZBS32-NEXT: bseti a1, a1, 31 36087d7aebdSPiotr Fusik; ZBS32-NEXT: ret 36187d7aebdSPiotr Fusik; 36287d7aebdSPiotr Fusik; ZBS64-LABEL: ornofff: 36387d7aebdSPiotr Fusik; ZBS64: # %bb.0: 36487d7aebdSPiotr Fusik; ZBS64-NEXT: ori a0, a0, 2047 36587d7aebdSPiotr Fusik; ZBS64-NEXT: bseti a0, a0, 63 36687d7aebdSPiotr Fusik; ZBS64-NEXT: ret 36787d7aebdSPiotr Fusik %or = or i64 %x, -9223372036854773761 36887d7aebdSPiotr Fusik ret i64 %or 36987d7aebdSPiotr Fusik} 37087d7aebdSPiotr Fusik 37187d7aebdSPiotr Fusikdefine i64 @xornofff(i64 %x) { 37287d7aebdSPiotr Fusik; RV32-LABEL: xornofff: 37387d7aebdSPiotr Fusik; RV32: # %bb.0: 37487d7aebdSPiotr Fusik; RV32-NEXT: lui a2, 983040 37587d7aebdSPiotr Fusik; RV32-NEXT: xor a1, a1, a2 37687d7aebdSPiotr Fusik; RV32-NEXT: xori a0, a0, 255 37787d7aebdSPiotr Fusik; RV32-NEXT: ret 37887d7aebdSPiotr Fusik; 37987d7aebdSPiotr Fusik; RV64-LABEL: xornofff: 38087d7aebdSPiotr Fusik; RV64: # %bb.0: 381*cfe5a084SPiotr Fusik; RV64-NEXT: lui a1, 1048575 382*cfe5a084SPiotr Fusik; RV64-NEXT: srli a1, a1, 4 383*cfe5a084SPiotr Fusik; RV64-NEXT: xnor a0, a0, a1 38487d7aebdSPiotr Fusik; RV64-NEXT: ret 38587d7aebdSPiotr Fusik %xor = xor i64 %x, -1152921504606846721 38687d7aebdSPiotr Fusik ret i64 %xor 38787d7aebdSPiotr Fusik} 388