134c01a60SPhilip Reames; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 234c01a60SPhilip Reames; RUN: llc < %s -mtriple=riscv32 -mattr=+m \ 334c01a60SPhilip Reames; RUN: | FileCheck %s --check-prefixes=RV32-BOTH,RV32 434c01a60SPhilip Reames; RUN: llc < %s -mtriple=riscv64 -mattr=+m \ 534c01a60SPhilip Reames; RUN: | FileCheck %s --check-prefixes=RV64-BOTH,RV64 69067070dSCraig Topper; RUN: llc < %s -mtriple=riscv32 -mattr=+m,+unaligned-scalar-mem \ 734c01a60SPhilip Reames; RUN: | FileCheck %s --check-prefixes=RV32-BOTH,RV32-FAST 89067070dSCraig Topper; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+unaligned-scalar-mem \ 934c01a60SPhilip Reames; RUN: | FileCheck %s --check-prefixes=RV64-BOTH,RV64-FAST 1034c01a60SPhilip Reames%struct.x = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 } 1134c01a60SPhilip Reames 1234c01a60SPhilip Reamesdeclare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind 1334c01a60SPhilip Reamesdeclare void @llvm.memset.inline.p0.i64(ptr nocapture, i8, i64, i1) nounwind 1434c01a60SPhilip Reames 1534c01a60SPhilip Reames; ///////////////////////////////////////////////////////////////////////////// 1634c01a60SPhilip Reames 1734c01a60SPhilip Reamesdefine void @memset_1(ptr %a, i8 %value) nounwind { 1834c01a60SPhilip Reames; RV32-BOTH-LABEL: memset_1: 1934c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 2034c01a60SPhilip Reames; RV32-BOTH-NEXT: sb a1, 0(a0) 2134c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 2234c01a60SPhilip Reames; 2334c01a60SPhilip Reames; RV64-BOTH-LABEL: memset_1: 2434c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 2534c01a60SPhilip Reames; RV64-BOTH-NEXT: sb a1, 0(a0) 2634c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 2734c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 1, i1 0) 2834c01a60SPhilip Reames ret void 2934c01a60SPhilip Reames} 3034c01a60SPhilip Reames 3134c01a60SPhilip Reamesdefine void @memset_2(ptr %a, i8 %value) nounwind { 3234c01a60SPhilip Reames; RV32-LABEL: memset_2: 3334c01a60SPhilip Reames; RV32: # %bb.0: 3434c01a60SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 35*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 1(a0) 3634c01a60SPhilip Reames; RV32-NEXT: ret 3734c01a60SPhilip Reames; 3834c01a60SPhilip Reames; RV64-LABEL: memset_2: 3934c01a60SPhilip Reames; RV64: # %bb.0: 4034c01a60SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 41*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 1(a0) 4234c01a60SPhilip Reames; RV64-NEXT: ret 4334c01a60SPhilip Reames; 4434c01a60SPhilip Reames; RV32-FAST-LABEL: memset_2: 4534c01a60SPhilip Reames; RV32-FAST: # %bb.0: 4634c01a60SPhilip Reames; RV32-FAST-NEXT: andi a2, a1, 255 4734c01a60SPhilip Reames; RV32-FAST-NEXT: slli a1, a1, 8 4834c01a60SPhilip Reames; RV32-FAST-NEXT: or a1, a1, a2 4934c01a60SPhilip Reames; RV32-FAST-NEXT: sh a1, 0(a0) 5034c01a60SPhilip Reames; RV32-FAST-NEXT: ret 5134c01a60SPhilip Reames; 5234c01a60SPhilip Reames; RV64-FAST-LABEL: memset_2: 5334c01a60SPhilip Reames; RV64-FAST: # %bb.0: 5434c01a60SPhilip Reames; RV64-FAST-NEXT: andi a2, a1, 255 5534c01a60SPhilip Reames; RV64-FAST-NEXT: slli a1, a1, 8 5634c01a60SPhilip Reames; RV64-FAST-NEXT: or a1, a1, a2 5734c01a60SPhilip Reames; RV64-FAST-NEXT: sh a1, 0(a0) 5834c01a60SPhilip Reames; RV64-FAST-NEXT: ret 5934c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 2, i1 0) 6034c01a60SPhilip Reames ret void 6134c01a60SPhilip Reames} 6234c01a60SPhilip Reames 6334c01a60SPhilip Reamesdefine void @memset_4(ptr %a, i8 %value) nounwind { 6434c01a60SPhilip Reames; RV32-LABEL: memset_4: 6534c01a60SPhilip Reames; RV32: # %bb.0: 6634c01a60SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 67*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 1(a0) 68*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 2(a0) 69*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 3(a0) 7034c01a60SPhilip Reames; RV32-NEXT: ret 7134c01a60SPhilip Reames; 7234c01a60SPhilip Reames; RV64-LABEL: memset_4: 7334c01a60SPhilip Reames; RV64: # %bb.0: 7434c01a60SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 75*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 1(a0) 76*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 2(a0) 77*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 3(a0) 7834c01a60SPhilip Reames; RV64-NEXT: ret 7934c01a60SPhilip Reames; 8034c01a60SPhilip Reames; RV32-FAST-LABEL: memset_4: 8134c01a60SPhilip Reames; RV32-FAST: # %bb.0: 8234c01a60SPhilip Reames; RV32-FAST-NEXT: andi a1, a1, 255 8334c01a60SPhilip Reames; RV32-FAST-NEXT: lui a2, 4112 8434c01a60SPhilip Reames; RV32-FAST-NEXT: addi a2, a2, 257 8534c01a60SPhilip Reames; RV32-FAST-NEXT: mul a1, a1, a2 8634c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 8734c01a60SPhilip Reames; RV32-FAST-NEXT: ret 8834c01a60SPhilip Reames; 8934c01a60SPhilip Reames; RV64-FAST-LABEL: memset_4: 9034c01a60SPhilip Reames; RV64-FAST: # %bb.0: 9134c01a60SPhilip Reames; RV64-FAST-NEXT: slli a1, a1, 56 9234c01a60SPhilip Reames; RV64-FAST-NEXT: lui a2, 65793 9334c01a60SPhilip Reames; RV64-FAST-NEXT: slli a2, a2, 4 9434c01a60SPhilip Reames; RV64-FAST-NEXT: addi a2, a2, 256 9534c01a60SPhilip Reames; RV64-FAST-NEXT: mulhu a1, a1, a2 9634c01a60SPhilip Reames; RV64-FAST-NEXT: sw a1, 0(a0) 9734c01a60SPhilip Reames; RV64-FAST-NEXT: ret 9834c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 4, i1 0) 9934c01a60SPhilip Reames ret void 10034c01a60SPhilip Reames} 10134c01a60SPhilip Reames 10234c01a60SPhilip Reamesdefine void @memset_8(ptr %a, i8 %value) nounwind { 10334c01a60SPhilip Reames; RV32-LABEL: memset_8: 10434c01a60SPhilip Reames; RV32: # %bb.0: 10534c01a60SPhilip Reames; RV32-NEXT: sb a1, 4(a0) 106*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 5(a0) 107*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 6(a0) 108*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 7(a0) 10934c01a60SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 110*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 1(a0) 111*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 2(a0) 112*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 3(a0) 11334c01a60SPhilip Reames; RV32-NEXT: ret 11434c01a60SPhilip Reames; 11534c01a60SPhilip Reames; RV64-LABEL: memset_8: 11634c01a60SPhilip Reames; RV64: # %bb.0: 11734c01a60SPhilip Reames; RV64-NEXT: sb a1, 4(a0) 118*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 5(a0) 119*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 6(a0) 120*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 7(a0) 12134c01a60SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 122*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 1(a0) 123*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 2(a0) 124*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 3(a0) 12534c01a60SPhilip Reames; RV64-NEXT: ret 12634c01a60SPhilip Reames; 12734c01a60SPhilip Reames; RV32-FAST-LABEL: memset_8: 12834c01a60SPhilip Reames; RV32-FAST: # %bb.0: 12934c01a60SPhilip Reames; RV32-FAST-NEXT: andi a1, a1, 255 13034c01a60SPhilip Reames; RV32-FAST-NEXT: lui a2, 4112 13134c01a60SPhilip Reames; RV32-FAST-NEXT: addi a2, a2, 257 13234c01a60SPhilip Reames; RV32-FAST-NEXT: mul a1, a1, a2 13334c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 134*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 4(a0) 13534c01a60SPhilip Reames; RV32-FAST-NEXT: ret 13634c01a60SPhilip Reames; 13734c01a60SPhilip Reames; RV64-FAST-LABEL: memset_8: 13834c01a60SPhilip Reames; RV64-FAST: # %bb.0: 13934c01a60SPhilip Reames; RV64-FAST-NEXT: andi a1, a1, 255 14034c01a60SPhilip Reames; RV64-FAST-NEXT: lui a2, 4112 14134c01a60SPhilip Reames; RV64-FAST-NEXT: addiw a2, a2, 257 14234c01a60SPhilip Reames; RV64-FAST-NEXT: slli a3, a2, 32 14334c01a60SPhilip Reames; RV64-FAST-NEXT: add a2, a2, a3 14434c01a60SPhilip Reames; RV64-FAST-NEXT: mul a1, a1, a2 14534c01a60SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 14634c01a60SPhilip Reames; RV64-FAST-NEXT: ret 14734c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 8, i1 0) 14834c01a60SPhilip Reames ret void 14934c01a60SPhilip Reames} 15034c01a60SPhilip Reames 15134c01a60SPhilip Reamesdefine void @memset_16(ptr %a, i8 %value) nounwind { 15234c01a60SPhilip Reames; RV32-LABEL: memset_16: 15334c01a60SPhilip Reames; RV32: # %bb.0: 15434c01a60SPhilip Reames; RV32-NEXT: sb a1, 12(a0) 155*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 13(a0) 156*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 14(a0) 157*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 15(a0) 15834c01a60SPhilip Reames; RV32-NEXT: sb a1, 8(a0) 159*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 9(a0) 160*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 10(a0) 161*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 11(a0) 16234c01a60SPhilip Reames; RV32-NEXT: sb a1, 4(a0) 163*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 5(a0) 164*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 6(a0) 165*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 7(a0) 16634c01a60SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 167*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 1(a0) 168*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 2(a0) 169*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 3(a0) 17034c01a60SPhilip Reames; RV32-NEXT: ret 17134c01a60SPhilip Reames; 17234c01a60SPhilip Reames; RV64-LABEL: memset_16: 17334c01a60SPhilip Reames; RV64: # %bb.0: 17434c01a60SPhilip Reames; RV64-NEXT: sb a1, 12(a0) 175*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 13(a0) 176*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 14(a0) 177*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 15(a0) 17834c01a60SPhilip Reames; RV64-NEXT: sb a1, 8(a0) 179*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 9(a0) 180*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 10(a0) 181*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 11(a0) 18234c01a60SPhilip Reames; RV64-NEXT: sb a1, 4(a0) 183*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 5(a0) 184*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 6(a0) 185*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 7(a0) 18634c01a60SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 187*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 1(a0) 188*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 2(a0) 189*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 3(a0) 19034c01a60SPhilip Reames; RV64-NEXT: ret 19134c01a60SPhilip Reames; 19234c01a60SPhilip Reames; RV32-FAST-LABEL: memset_16: 19334c01a60SPhilip Reames; RV32-FAST: # %bb.0: 19434c01a60SPhilip Reames; RV32-FAST-NEXT: andi a1, a1, 255 19534c01a60SPhilip Reames; RV32-FAST-NEXT: lui a2, 4112 19634c01a60SPhilip Reames; RV32-FAST-NEXT: addi a2, a2, 257 19734c01a60SPhilip Reames; RV32-FAST-NEXT: mul a1, a1, a2 19834c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 199*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 4(a0) 200*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 8(a0) 201*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 12(a0) 20234c01a60SPhilip Reames; RV32-FAST-NEXT: ret 20334c01a60SPhilip Reames; 20434c01a60SPhilip Reames; RV64-FAST-LABEL: memset_16: 20534c01a60SPhilip Reames; RV64-FAST: # %bb.0: 20634c01a60SPhilip Reames; RV64-FAST-NEXT: andi a1, a1, 255 20734c01a60SPhilip Reames; RV64-FAST-NEXT: lui a2, 4112 20834c01a60SPhilip Reames; RV64-FAST-NEXT: addiw a2, a2, 257 20934c01a60SPhilip Reames; RV64-FAST-NEXT: slli a3, a2, 32 21034c01a60SPhilip Reames; RV64-FAST-NEXT: add a2, a2, a3 21134c01a60SPhilip Reames; RV64-FAST-NEXT: mul a1, a1, a2 21234c01a60SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 213*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 8(a0) 21434c01a60SPhilip Reames; RV64-FAST-NEXT: ret 21534c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 16, i1 0) 21634c01a60SPhilip Reames ret void 21734c01a60SPhilip Reames} 21834c01a60SPhilip Reames 21934c01a60SPhilip Reamesdefine void @memset_32(ptr %a, i8 %value) nounwind { 22034c01a60SPhilip Reames; RV32-LABEL: memset_32: 22134c01a60SPhilip Reames; RV32: # %bb.0: 22234c01a60SPhilip Reames; RV32-NEXT: sb a1, 28(a0) 223*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 29(a0) 224*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 30(a0) 225*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 31(a0) 22634c01a60SPhilip Reames; RV32-NEXT: sb a1, 24(a0) 227*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 25(a0) 228*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 26(a0) 229*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 27(a0) 23034c01a60SPhilip Reames; RV32-NEXT: sb a1, 20(a0) 231*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 21(a0) 232*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 22(a0) 233*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 23(a0) 23434c01a60SPhilip Reames; RV32-NEXT: sb a1, 16(a0) 235*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 17(a0) 236*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 18(a0) 237*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 19(a0) 23834c01a60SPhilip Reames; RV32-NEXT: sb a1, 12(a0) 239*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 13(a0) 240*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 14(a0) 241*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 15(a0) 24234c01a60SPhilip Reames; RV32-NEXT: sb a1, 8(a0) 243*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 9(a0) 244*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 10(a0) 245*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 11(a0) 24634c01a60SPhilip Reames; RV32-NEXT: sb a1, 4(a0) 247*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 5(a0) 248*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 6(a0) 249*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 7(a0) 25034c01a60SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 251*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 1(a0) 252*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 2(a0) 253*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 3(a0) 25434c01a60SPhilip Reames; RV32-NEXT: ret 25534c01a60SPhilip Reames; 25634c01a60SPhilip Reames; RV64-LABEL: memset_32: 25734c01a60SPhilip Reames; RV64: # %bb.0: 25834c01a60SPhilip Reames; RV64-NEXT: sb a1, 28(a0) 259*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 29(a0) 260*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 30(a0) 261*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 31(a0) 26234c01a60SPhilip Reames; RV64-NEXT: sb a1, 24(a0) 263*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 25(a0) 264*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 26(a0) 265*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 27(a0) 26634c01a60SPhilip Reames; RV64-NEXT: sb a1, 20(a0) 267*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 21(a0) 268*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 22(a0) 269*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 23(a0) 27034c01a60SPhilip Reames; RV64-NEXT: sb a1, 16(a0) 271*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 17(a0) 272*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 18(a0) 273*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 19(a0) 27434c01a60SPhilip Reames; RV64-NEXT: sb a1, 12(a0) 275*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 13(a0) 276*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 14(a0) 277*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 15(a0) 27834c01a60SPhilip Reames; RV64-NEXT: sb a1, 8(a0) 279*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 9(a0) 280*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 10(a0) 281*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 11(a0) 28234c01a60SPhilip Reames; RV64-NEXT: sb a1, 4(a0) 283*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 5(a0) 284*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 6(a0) 285*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 7(a0) 28634c01a60SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 287*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 1(a0) 288*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 2(a0) 289*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 3(a0) 29034c01a60SPhilip Reames; RV64-NEXT: ret 29134c01a60SPhilip Reames; 29234c01a60SPhilip Reames; RV32-FAST-LABEL: memset_32: 29334c01a60SPhilip Reames; RV32-FAST: # %bb.0: 29434c01a60SPhilip Reames; RV32-FAST-NEXT: andi a1, a1, 255 29534c01a60SPhilip Reames; RV32-FAST-NEXT: lui a2, 4112 29634c01a60SPhilip Reames; RV32-FAST-NEXT: addi a2, a2, 257 29734c01a60SPhilip Reames; RV32-FAST-NEXT: mul a1, a1, a2 29834c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 16(a0) 299*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 20(a0) 300*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 24(a0) 301*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 28(a0) 30234c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 303*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 4(a0) 304*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 8(a0) 305*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 12(a0) 30634c01a60SPhilip Reames; RV32-FAST-NEXT: ret 30734c01a60SPhilip Reames; 30834c01a60SPhilip Reames; RV64-FAST-LABEL: memset_32: 30934c01a60SPhilip Reames; RV64-FAST: # %bb.0: 31034c01a60SPhilip Reames; RV64-FAST-NEXT: andi a1, a1, 255 31134c01a60SPhilip Reames; RV64-FAST-NEXT: lui a2, 4112 31234c01a60SPhilip Reames; RV64-FAST-NEXT: addiw a2, a2, 257 31334c01a60SPhilip Reames; RV64-FAST-NEXT: slli a3, a2, 32 31434c01a60SPhilip Reames; RV64-FAST-NEXT: add a2, a2, a3 31534c01a60SPhilip Reames; RV64-FAST-NEXT: mul a1, a1, a2 31634c01a60SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 317*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 8(a0) 318*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 16(a0) 319*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 24(a0) 32034c01a60SPhilip Reames; RV64-FAST-NEXT: ret 32134c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 32, i1 0) 32234c01a60SPhilip Reames ret void 32334c01a60SPhilip Reames} 32434c01a60SPhilip Reames 32534c01a60SPhilip Reamesdefine void @memset_64(ptr %a, i8 %value) nounwind { 32634c01a60SPhilip Reames; RV32-LABEL: memset_64: 32734c01a60SPhilip Reames; RV32: # %bb.0: 32834c01a60SPhilip Reames; RV32-NEXT: sb a1, 60(a0) 329*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 61(a0) 330*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 62(a0) 331*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 63(a0) 33234c01a60SPhilip Reames; RV32-NEXT: sb a1, 56(a0) 333*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 57(a0) 334*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 58(a0) 335*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 59(a0) 33634c01a60SPhilip Reames; RV32-NEXT: sb a1, 52(a0) 337*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 53(a0) 338*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 54(a0) 339*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 55(a0) 34034c01a60SPhilip Reames; RV32-NEXT: sb a1, 48(a0) 341*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 49(a0) 342*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 50(a0) 343*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 51(a0) 34434c01a60SPhilip Reames; RV32-NEXT: sb a1, 44(a0) 345*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 45(a0) 346*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 46(a0) 347*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 47(a0) 34834c01a60SPhilip Reames; RV32-NEXT: sb a1, 40(a0) 349*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 41(a0) 350*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 42(a0) 351*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 43(a0) 35234c01a60SPhilip Reames; RV32-NEXT: sb a1, 36(a0) 353*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 37(a0) 354*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 38(a0) 355*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 39(a0) 35634c01a60SPhilip Reames; RV32-NEXT: sb a1, 32(a0) 357*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 33(a0) 358*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 34(a0) 359*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 35(a0) 36034c01a60SPhilip Reames; RV32-NEXT: sb a1, 28(a0) 361*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 29(a0) 362*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 30(a0) 363*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 31(a0) 36434c01a60SPhilip Reames; RV32-NEXT: sb a1, 24(a0) 365*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 25(a0) 366*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 26(a0) 367*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 27(a0) 36834c01a60SPhilip Reames; RV32-NEXT: sb a1, 20(a0) 369*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 21(a0) 370*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 22(a0) 371*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 23(a0) 37234c01a60SPhilip Reames; RV32-NEXT: sb a1, 16(a0) 373*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 17(a0) 374*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 18(a0) 375*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 19(a0) 37634c01a60SPhilip Reames; RV32-NEXT: sb a1, 12(a0) 377*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 13(a0) 378*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 14(a0) 379*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 15(a0) 38034c01a60SPhilip Reames; RV32-NEXT: sb a1, 8(a0) 381*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 9(a0) 382*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 10(a0) 383*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 11(a0) 38434c01a60SPhilip Reames; RV32-NEXT: sb a1, 4(a0) 385*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 5(a0) 386*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 6(a0) 387*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 7(a0) 38834c01a60SPhilip Reames; RV32-NEXT: sb a1, 0(a0) 389*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 1(a0) 390*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 2(a0) 391*2967e5f8SAlex Bradbury; RV32-NEXT: sb a1, 3(a0) 39234c01a60SPhilip Reames; RV32-NEXT: ret 39334c01a60SPhilip Reames; 39434c01a60SPhilip Reames; RV64-LABEL: memset_64: 39534c01a60SPhilip Reames; RV64: # %bb.0: 39634c01a60SPhilip Reames; RV64-NEXT: sb a1, 60(a0) 397*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 61(a0) 398*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 62(a0) 399*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 63(a0) 40034c01a60SPhilip Reames; RV64-NEXT: sb a1, 56(a0) 401*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 57(a0) 402*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 58(a0) 403*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 59(a0) 40434c01a60SPhilip Reames; RV64-NEXT: sb a1, 52(a0) 405*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 53(a0) 406*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 54(a0) 407*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 55(a0) 40834c01a60SPhilip Reames; RV64-NEXT: sb a1, 48(a0) 409*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 49(a0) 410*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 50(a0) 411*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 51(a0) 41234c01a60SPhilip Reames; RV64-NEXT: sb a1, 44(a0) 413*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 45(a0) 414*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 46(a0) 415*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 47(a0) 41634c01a60SPhilip Reames; RV64-NEXT: sb a1, 40(a0) 417*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 41(a0) 418*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 42(a0) 419*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 43(a0) 42034c01a60SPhilip Reames; RV64-NEXT: sb a1, 36(a0) 421*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 37(a0) 422*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 38(a0) 423*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 39(a0) 42434c01a60SPhilip Reames; RV64-NEXT: sb a1, 32(a0) 425*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 33(a0) 426*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 34(a0) 427*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 35(a0) 42834c01a60SPhilip Reames; RV64-NEXT: sb a1, 28(a0) 429*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 29(a0) 430*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 30(a0) 431*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 31(a0) 43234c01a60SPhilip Reames; RV64-NEXT: sb a1, 24(a0) 433*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 25(a0) 434*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 26(a0) 435*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 27(a0) 43634c01a60SPhilip Reames; RV64-NEXT: sb a1, 20(a0) 437*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 21(a0) 438*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 22(a0) 439*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 23(a0) 44034c01a60SPhilip Reames; RV64-NEXT: sb a1, 16(a0) 441*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 17(a0) 442*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 18(a0) 443*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 19(a0) 44434c01a60SPhilip Reames; RV64-NEXT: sb a1, 12(a0) 445*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 13(a0) 446*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 14(a0) 447*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 15(a0) 44834c01a60SPhilip Reames; RV64-NEXT: sb a1, 8(a0) 449*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 9(a0) 450*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 10(a0) 451*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 11(a0) 45234c01a60SPhilip Reames; RV64-NEXT: sb a1, 4(a0) 453*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 5(a0) 454*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 6(a0) 455*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 7(a0) 45634c01a60SPhilip Reames; RV64-NEXT: sb a1, 0(a0) 457*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 1(a0) 458*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 2(a0) 459*2967e5f8SAlex Bradbury; RV64-NEXT: sb a1, 3(a0) 46034c01a60SPhilip Reames; RV64-NEXT: ret 46134c01a60SPhilip Reames; 46234c01a60SPhilip Reames; RV32-FAST-LABEL: memset_64: 46334c01a60SPhilip Reames; RV32-FAST: # %bb.0: 46434c01a60SPhilip Reames; RV32-FAST-NEXT: andi a1, a1, 255 46534c01a60SPhilip Reames; RV32-FAST-NEXT: lui a2, 4112 46634c01a60SPhilip Reames; RV32-FAST-NEXT: addi a2, a2, 257 46734c01a60SPhilip Reames; RV32-FAST-NEXT: mul a1, a1, a2 46834c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 48(a0) 469*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 52(a0) 470*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 56(a0) 471*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 60(a0) 47234c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 32(a0) 473*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 36(a0) 474*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 40(a0) 475*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 44(a0) 47634c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 16(a0) 477*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 20(a0) 478*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 24(a0) 479*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 28(a0) 48034c01a60SPhilip Reames; RV32-FAST-NEXT: sw a1, 0(a0) 481*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 4(a0) 482*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 8(a0) 483*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw a1, 12(a0) 48434c01a60SPhilip Reames; RV32-FAST-NEXT: ret 48534c01a60SPhilip Reames; 48634c01a60SPhilip Reames; RV64-FAST-LABEL: memset_64: 48734c01a60SPhilip Reames; RV64-FAST: # %bb.0: 48834c01a60SPhilip Reames; RV64-FAST-NEXT: andi a1, a1, 255 48934c01a60SPhilip Reames; RV64-FAST-NEXT: lui a2, 4112 49034c01a60SPhilip Reames; RV64-FAST-NEXT: addiw a2, a2, 257 49134c01a60SPhilip Reames; RV64-FAST-NEXT: slli a3, a2, 32 49234c01a60SPhilip Reames; RV64-FAST-NEXT: add a2, a2, a3 49334c01a60SPhilip Reames; RV64-FAST-NEXT: mul a1, a1, a2 49434c01a60SPhilip Reames; RV64-FAST-NEXT: sd a1, 32(a0) 495*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 40(a0) 496*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 48(a0) 497*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 56(a0) 49834c01a60SPhilip Reames; RV64-FAST-NEXT: sd a1, 0(a0) 499*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 8(a0) 500*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 16(a0) 501*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd a1, 24(a0) 50234c01a60SPhilip Reames; RV64-FAST-NEXT: ret 50334c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 64, i1 0) 50434c01a60SPhilip Reames ret void 50534c01a60SPhilip Reames} 50634c01a60SPhilip Reames 50734c01a60SPhilip Reames; ///////////////////////////////////////////////////////////////////////////// 50834c01a60SPhilip Reames 50934c01a60SPhilip Reamesdefine void @aligned_memset_2(ptr align 2 %a, i8 %value) nounwind { 51034c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_memset_2: 51134c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 51234c01a60SPhilip Reames; RV32-BOTH-NEXT: andi a2, a1, 255 51334c01a60SPhilip Reames; RV32-BOTH-NEXT: slli a1, a1, 8 51434c01a60SPhilip Reames; RV32-BOTH-NEXT: or a1, a1, a2 51534c01a60SPhilip Reames; RV32-BOTH-NEXT: sh a1, 0(a0) 51634c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 51734c01a60SPhilip Reames; 51834c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_memset_2: 51934c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 52034c01a60SPhilip Reames; RV64-BOTH-NEXT: andi a2, a1, 255 52134c01a60SPhilip Reames; RV64-BOTH-NEXT: slli a1, a1, 8 52234c01a60SPhilip Reames; RV64-BOTH-NEXT: or a1, a1, a2 52334c01a60SPhilip Reames; RV64-BOTH-NEXT: sh a1, 0(a0) 52434c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 52534c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 2 %a, i8 %value, i64 2, i1 0) 52634c01a60SPhilip Reames ret void 52734c01a60SPhilip Reames} 52834c01a60SPhilip Reames 52934c01a60SPhilip Reamesdefine void @aligned_memset_4(ptr align 4 %a, i8 %value) nounwind { 53034c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_memset_4: 53134c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 53234c01a60SPhilip Reames; RV32-BOTH-NEXT: andi a1, a1, 255 53334c01a60SPhilip Reames; RV32-BOTH-NEXT: lui a2, 4112 53434c01a60SPhilip Reames; RV32-BOTH-NEXT: addi a2, a2, 257 53534c01a60SPhilip Reames; RV32-BOTH-NEXT: mul a1, a1, a2 53634c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 53734c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 53834c01a60SPhilip Reames; 53934c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_memset_4: 54034c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 54134c01a60SPhilip Reames; RV64-BOTH-NEXT: slli a1, a1, 56 54234c01a60SPhilip Reames; RV64-BOTH-NEXT: lui a2, 65793 54334c01a60SPhilip Reames; RV64-BOTH-NEXT: slli a2, a2, 4 54434c01a60SPhilip Reames; RV64-BOTH-NEXT: addi a2, a2, 256 54534c01a60SPhilip Reames; RV64-BOTH-NEXT: mulhu a1, a1, a2 54634c01a60SPhilip Reames; RV64-BOTH-NEXT: sw a1, 0(a0) 54734c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 54834c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 4 %a, i8 %value, i64 4, i1 0) 54934c01a60SPhilip Reames ret void 55034c01a60SPhilip Reames} 55134c01a60SPhilip Reames 55234c01a60SPhilip Reamesdefine void @aligned_memset_8(ptr align 8 %a, i8 %value) nounwind { 55334c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_memset_8: 55434c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 55534c01a60SPhilip Reames; RV32-BOTH-NEXT: andi a1, a1, 255 55634c01a60SPhilip Reames; RV32-BOTH-NEXT: lui a2, 4112 55734c01a60SPhilip Reames; RV32-BOTH-NEXT: addi a2, a2, 257 55834c01a60SPhilip Reames; RV32-BOTH-NEXT: mul a1, a1, a2 55934c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 560*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 4(a0) 56134c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 56234c01a60SPhilip Reames; 56334c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_memset_8: 56434c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 56534c01a60SPhilip Reames; RV64-BOTH-NEXT: andi a1, a1, 255 56634c01a60SPhilip Reames; RV64-BOTH-NEXT: lui a2, 4112 56734c01a60SPhilip Reames; RV64-BOTH-NEXT: addiw a2, a2, 257 56834c01a60SPhilip Reames; RV64-BOTH-NEXT: slli a3, a2, 32 56934c01a60SPhilip Reames; RV64-BOTH-NEXT: add a2, a2, a3 57034c01a60SPhilip Reames; RV64-BOTH-NEXT: mul a1, a1, a2 57134c01a60SPhilip Reames; RV64-BOTH-NEXT: sd a1, 0(a0) 57234c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 57334c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 8 %a, i8 %value, i64 8, i1 0) 57434c01a60SPhilip Reames ret void 57534c01a60SPhilip Reames} 57634c01a60SPhilip Reames 57734c01a60SPhilip Reamesdefine void @aligned_memset_16(ptr align 16 %a, i8 %value) nounwind { 57834c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_memset_16: 57934c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 58034c01a60SPhilip Reames; RV32-BOTH-NEXT: andi a1, a1, 255 58134c01a60SPhilip Reames; RV32-BOTH-NEXT: lui a2, 4112 58234c01a60SPhilip Reames; RV32-BOTH-NEXT: addi a2, a2, 257 58334c01a60SPhilip Reames; RV32-BOTH-NEXT: mul a1, a1, a2 58434c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 585*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 4(a0) 586*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 8(a0) 587*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 12(a0) 58834c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 58934c01a60SPhilip Reames; 59034c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_memset_16: 59134c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 59234c01a60SPhilip Reames; RV64-BOTH-NEXT: andi a1, a1, 255 59334c01a60SPhilip Reames; RV64-BOTH-NEXT: lui a2, 4112 59434c01a60SPhilip Reames; RV64-BOTH-NEXT: addiw a2, a2, 257 59534c01a60SPhilip Reames; RV64-BOTH-NEXT: slli a3, a2, 32 59634c01a60SPhilip Reames; RV64-BOTH-NEXT: add a2, a2, a3 59734c01a60SPhilip Reames; RV64-BOTH-NEXT: mul a1, a1, a2 59834c01a60SPhilip Reames; RV64-BOTH-NEXT: sd a1, 0(a0) 599*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 8(a0) 60034c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 60134c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 16 %a, i8 %value, i64 16, i1 0) 60234c01a60SPhilip Reames ret void 60334c01a60SPhilip Reames} 60434c01a60SPhilip Reames 60534c01a60SPhilip Reamesdefine void @aligned_memset_32(ptr align 32 %a, i8 %value) nounwind { 60634c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_memset_32: 60734c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 60834c01a60SPhilip Reames; RV32-BOTH-NEXT: andi a1, a1, 255 60934c01a60SPhilip Reames; RV32-BOTH-NEXT: lui a2, 4112 61034c01a60SPhilip Reames; RV32-BOTH-NEXT: addi a2, a2, 257 61134c01a60SPhilip Reames; RV32-BOTH-NEXT: mul a1, a1, a2 61234c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 16(a0) 613*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 20(a0) 614*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 24(a0) 615*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 28(a0) 61634c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 617*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 4(a0) 618*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 8(a0) 619*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 12(a0) 62034c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 62134c01a60SPhilip Reames; 62234c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_memset_32: 62334c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 62434c01a60SPhilip Reames; RV64-BOTH-NEXT: andi a1, a1, 255 62534c01a60SPhilip Reames; RV64-BOTH-NEXT: lui a2, 4112 62634c01a60SPhilip Reames; RV64-BOTH-NEXT: addiw a2, a2, 257 62734c01a60SPhilip Reames; RV64-BOTH-NEXT: slli a3, a2, 32 62834c01a60SPhilip Reames; RV64-BOTH-NEXT: add a2, a2, a3 62934c01a60SPhilip Reames; RV64-BOTH-NEXT: mul a1, a1, a2 63034c01a60SPhilip Reames; RV64-BOTH-NEXT: sd a1, 0(a0) 631*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 8(a0) 632*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 16(a0) 633*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 24(a0) 63434c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 63534c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 32 %a, i8 %value, i64 32, i1 0) 63634c01a60SPhilip Reames ret void 63734c01a60SPhilip Reames} 63834c01a60SPhilip Reames 63934c01a60SPhilip Reamesdefine void @aligned_memset_64(ptr align 64 %a, i8 %value) nounwind { 64034c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_memset_64: 64134c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 64234c01a60SPhilip Reames; RV32-BOTH-NEXT: andi a1, a1, 255 64334c01a60SPhilip Reames; RV32-BOTH-NEXT: lui a2, 4112 64434c01a60SPhilip Reames; RV32-BOTH-NEXT: addi a2, a2, 257 64534c01a60SPhilip Reames; RV32-BOTH-NEXT: mul a1, a1, a2 64634c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 48(a0) 647*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 52(a0) 648*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 56(a0) 649*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 60(a0) 65034c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 32(a0) 651*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 36(a0) 652*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 40(a0) 653*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 44(a0) 65434c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 16(a0) 655*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 20(a0) 656*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 24(a0) 657*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 28(a0) 65834c01a60SPhilip Reames; RV32-BOTH-NEXT: sw a1, 0(a0) 659*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 4(a0) 660*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 8(a0) 661*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw a1, 12(a0) 66234c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 66334c01a60SPhilip Reames; 66434c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_memset_64: 66534c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 66634c01a60SPhilip Reames; RV64-BOTH-NEXT: andi a1, a1, 255 66734c01a60SPhilip Reames; RV64-BOTH-NEXT: lui a2, 4112 66834c01a60SPhilip Reames; RV64-BOTH-NEXT: addiw a2, a2, 257 66934c01a60SPhilip Reames; RV64-BOTH-NEXT: slli a3, a2, 32 67034c01a60SPhilip Reames; RV64-BOTH-NEXT: add a2, a2, a3 67134c01a60SPhilip Reames; RV64-BOTH-NEXT: mul a1, a1, a2 67234c01a60SPhilip Reames; RV64-BOTH-NEXT: sd a1, 32(a0) 673*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 40(a0) 674*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 48(a0) 675*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 56(a0) 67634c01a60SPhilip Reames; RV64-BOTH-NEXT: sd a1, 0(a0) 677*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 8(a0) 678*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 16(a0) 679*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd a1, 24(a0) 68034c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 68134c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 64 %a, i8 %value, i64 64, i1 0) 68234c01a60SPhilip Reames ret void 68334c01a60SPhilip Reames} 68434c01a60SPhilip Reames 68534c01a60SPhilip Reames; ///////////////////////////////////////////////////////////////////////////// 68634c01a60SPhilip Reames 68734c01a60SPhilip Reamesdefine void @bzero_1(ptr %a) nounwind { 68834c01a60SPhilip Reames; RV32-BOTH-LABEL: bzero_1: 68934c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 69034c01a60SPhilip Reames; RV32-BOTH-NEXT: sb zero, 0(a0) 69134c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 69234c01a60SPhilip Reames; 69334c01a60SPhilip Reames; RV64-BOTH-LABEL: bzero_1: 69434c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 69534c01a60SPhilip Reames; RV64-BOTH-NEXT: sb zero, 0(a0) 69634c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 69734c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 1, i1 0) 69834c01a60SPhilip Reames ret void 69934c01a60SPhilip Reames} 70034c01a60SPhilip Reames 70134c01a60SPhilip Reamesdefine void @bzero_2(ptr %a) nounwind { 70234c01a60SPhilip Reames; RV32-LABEL: bzero_2: 70334c01a60SPhilip Reames; RV32: # %bb.0: 70434c01a60SPhilip Reames; RV32-NEXT: sb zero, 0(a0) 705*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 1(a0) 70634c01a60SPhilip Reames; RV32-NEXT: ret 70734c01a60SPhilip Reames; 70834c01a60SPhilip Reames; RV64-LABEL: bzero_2: 70934c01a60SPhilip Reames; RV64: # %bb.0: 71034c01a60SPhilip Reames; RV64-NEXT: sb zero, 0(a0) 711*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 1(a0) 71234c01a60SPhilip Reames; RV64-NEXT: ret 71334c01a60SPhilip Reames; 71434c01a60SPhilip Reames; RV32-FAST-LABEL: bzero_2: 71534c01a60SPhilip Reames; RV32-FAST: # %bb.0: 71634c01a60SPhilip Reames; RV32-FAST-NEXT: sh zero, 0(a0) 71734c01a60SPhilip Reames; RV32-FAST-NEXT: ret 71834c01a60SPhilip Reames; 71934c01a60SPhilip Reames; RV64-FAST-LABEL: bzero_2: 72034c01a60SPhilip Reames; RV64-FAST: # %bb.0: 72134c01a60SPhilip Reames; RV64-FAST-NEXT: sh zero, 0(a0) 72234c01a60SPhilip Reames; RV64-FAST-NEXT: ret 72334c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 2, i1 0) 72434c01a60SPhilip Reames ret void 72534c01a60SPhilip Reames} 72634c01a60SPhilip Reames 72734c01a60SPhilip Reamesdefine void @bzero_4(ptr %a) nounwind { 72834c01a60SPhilip Reames; RV32-LABEL: bzero_4: 72934c01a60SPhilip Reames; RV32: # %bb.0: 73034c01a60SPhilip Reames; RV32-NEXT: sb zero, 0(a0) 731*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 1(a0) 732*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 2(a0) 733*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 3(a0) 73434c01a60SPhilip Reames; RV32-NEXT: ret 73534c01a60SPhilip Reames; 73634c01a60SPhilip Reames; RV64-LABEL: bzero_4: 73734c01a60SPhilip Reames; RV64: # %bb.0: 73834c01a60SPhilip Reames; RV64-NEXT: sb zero, 0(a0) 739*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 1(a0) 740*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 2(a0) 741*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 3(a0) 74234c01a60SPhilip Reames; RV64-NEXT: ret 74334c01a60SPhilip Reames; 74434c01a60SPhilip Reames; RV32-FAST-LABEL: bzero_4: 74534c01a60SPhilip Reames; RV32-FAST: # %bb.0: 74634c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 0(a0) 74734c01a60SPhilip Reames; RV32-FAST-NEXT: ret 74834c01a60SPhilip Reames; 74934c01a60SPhilip Reames; RV64-FAST-LABEL: bzero_4: 75034c01a60SPhilip Reames; RV64-FAST: # %bb.0: 75134c01a60SPhilip Reames; RV64-FAST-NEXT: sw zero, 0(a0) 75234c01a60SPhilip Reames; RV64-FAST-NEXT: ret 75334c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 4, i1 0) 75434c01a60SPhilip Reames ret void 75534c01a60SPhilip Reames} 75634c01a60SPhilip Reames 75734c01a60SPhilip Reamesdefine void @bzero_8(ptr %a) nounwind { 75834c01a60SPhilip Reames; RV32-LABEL: bzero_8: 75934c01a60SPhilip Reames; RV32: # %bb.0: 76034c01a60SPhilip Reames; RV32-NEXT: sb zero, 4(a0) 761*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 5(a0) 762*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 6(a0) 763*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 7(a0) 76434c01a60SPhilip Reames; RV32-NEXT: sb zero, 0(a0) 765*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 1(a0) 766*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 2(a0) 767*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 3(a0) 76834c01a60SPhilip Reames; RV32-NEXT: ret 76934c01a60SPhilip Reames; 77034c01a60SPhilip Reames; RV64-LABEL: bzero_8: 77134c01a60SPhilip Reames; RV64: # %bb.0: 77234c01a60SPhilip Reames; RV64-NEXT: sb zero, 4(a0) 773*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 5(a0) 774*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 6(a0) 775*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 7(a0) 77634c01a60SPhilip Reames; RV64-NEXT: sb zero, 0(a0) 777*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 1(a0) 778*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 2(a0) 779*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 3(a0) 78034c01a60SPhilip Reames; RV64-NEXT: ret 78134c01a60SPhilip Reames; 78234c01a60SPhilip Reames; RV32-FAST-LABEL: bzero_8: 78334c01a60SPhilip Reames; RV32-FAST: # %bb.0: 78434c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 0(a0) 785*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 4(a0) 78634c01a60SPhilip Reames; RV32-FAST-NEXT: ret 78734c01a60SPhilip Reames; 78834c01a60SPhilip Reames; RV64-FAST-LABEL: bzero_8: 78934c01a60SPhilip Reames; RV64-FAST: # %bb.0: 79034c01a60SPhilip Reames; RV64-FAST-NEXT: sd zero, 0(a0) 79134c01a60SPhilip Reames; RV64-FAST-NEXT: ret 79234c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 8, i1 0) 79334c01a60SPhilip Reames ret void 79434c01a60SPhilip Reames} 79534c01a60SPhilip Reames 79634c01a60SPhilip Reamesdefine void @bzero_16(ptr %a) nounwind { 79734c01a60SPhilip Reames; RV32-LABEL: bzero_16: 79834c01a60SPhilip Reames; RV32: # %bb.0: 79934c01a60SPhilip Reames; RV32-NEXT: sb zero, 12(a0) 800*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 13(a0) 801*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 14(a0) 802*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 15(a0) 80334c01a60SPhilip Reames; RV32-NEXT: sb zero, 8(a0) 804*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 9(a0) 805*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 10(a0) 806*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 11(a0) 80734c01a60SPhilip Reames; RV32-NEXT: sb zero, 4(a0) 808*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 5(a0) 809*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 6(a0) 810*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 7(a0) 81134c01a60SPhilip Reames; RV32-NEXT: sb zero, 0(a0) 812*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 1(a0) 813*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 2(a0) 814*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 3(a0) 81534c01a60SPhilip Reames; RV32-NEXT: ret 81634c01a60SPhilip Reames; 81734c01a60SPhilip Reames; RV64-LABEL: bzero_16: 81834c01a60SPhilip Reames; RV64: # %bb.0: 81934c01a60SPhilip Reames; RV64-NEXT: sb zero, 12(a0) 820*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 13(a0) 821*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 14(a0) 822*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 15(a0) 82334c01a60SPhilip Reames; RV64-NEXT: sb zero, 8(a0) 824*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 9(a0) 825*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 10(a0) 826*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 11(a0) 82734c01a60SPhilip Reames; RV64-NEXT: sb zero, 4(a0) 828*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 5(a0) 829*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 6(a0) 830*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 7(a0) 83134c01a60SPhilip Reames; RV64-NEXT: sb zero, 0(a0) 832*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 1(a0) 833*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 2(a0) 834*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 3(a0) 83534c01a60SPhilip Reames; RV64-NEXT: ret 83634c01a60SPhilip Reames; 83734c01a60SPhilip Reames; RV32-FAST-LABEL: bzero_16: 83834c01a60SPhilip Reames; RV32-FAST: # %bb.0: 83934c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 0(a0) 840*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 4(a0) 841*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 8(a0) 842*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 12(a0) 84334c01a60SPhilip Reames; RV32-FAST-NEXT: ret 84434c01a60SPhilip Reames; 84534c01a60SPhilip Reames; RV64-FAST-LABEL: bzero_16: 84634c01a60SPhilip Reames; RV64-FAST: # %bb.0: 84734c01a60SPhilip Reames; RV64-FAST-NEXT: sd zero, 0(a0) 848*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 8(a0) 84934c01a60SPhilip Reames; RV64-FAST-NEXT: ret 85034c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 16, i1 0) 85134c01a60SPhilip Reames ret void 85234c01a60SPhilip Reames} 85334c01a60SPhilip Reames 85434c01a60SPhilip Reamesdefine void @bzero_32(ptr %a) nounwind { 85534c01a60SPhilip Reames; RV32-LABEL: bzero_32: 85634c01a60SPhilip Reames; RV32: # %bb.0: 85734c01a60SPhilip Reames; RV32-NEXT: sb zero, 28(a0) 858*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 29(a0) 859*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 30(a0) 860*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 31(a0) 86134c01a60SPhilip Reames; RV32-NEXT: sb zero, 24(a0) 862*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 25(a0) 863*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 26(a0) 864*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 27(a0) 86534c01a60SPhilip Reames; RV32-NEXT: sb zero, 20(a0) 866*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 21(a0) 867*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 22(a0) 868*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 23(a0) 86934c01a60SPhilip Reames; RV32-NEXT: sb zero, 16(a0) 870*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 17(a0) 871*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 18(a0) 872*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 19(a0) 87334c01a60SPhilip Reames; RV32-NEXT: sb zero, 12(a0) 874*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 13(a0) 875*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 14(a0) 876*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 15(a0) 87734c01a60SPhilip Reames; RV32-NEXT: sb zero, 8(a0) 878*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 9(a0) 879*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 10(a0) 880*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 11(a0) 88134c01a60SPhilip Reames; RV32-NEXT: sb zero, 4(a0) 882*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 5(a0) 883*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 6(a0) 884*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 7(a0) 88534c01a60SPhilip Reames; RV32-NEXT: sb zero, 0(a0) 886*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 1(a0) 887*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 2(a0) 888*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 3(a0) 88934c01a60SPhilip Reames; RV32-NEXT: ret 89034c01a60SPhilip Reames; 89134c01a60SPhilip Reames; RV64-LABEL: bzero_32: 89234c01a60SPhilip Reames; RV64: # %bb.0: 89334c01a60SPhilip Reames; RV64-NEXT: sb zero, 28(a0) 894*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 29(a0) 895*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 30(a0) 896*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 31(a0) 89734c01a60SPhilip Reames; RV64-NEXT: sb zero, 24(a0) 898*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 25(a0) 899*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 26(a0) 900*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 27(a0) 90134c01a60SPhilip Reames; RV64-NEXT: sb zero, 20(a0) 902*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 21(a0) 903*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 22(a0) 904*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 23(a0) 90534c01a60SPhilip Reames; RV64-NEXT: sb zero, 16(a0) 906*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 17(a0) 907*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 18(a0) 908*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 19(a0) 90934c01a60SPhilip Reames; RV64-NEXT: sb zero, 12(a0) 910*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 13(a0) 911*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 14(a0) 912*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 15(a0) 91334c01a60SPhilip Reames; RV64-NEXT: sb zero, 8(a0) 914*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 9(a0) 915*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 10(a0) 916*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 11(a0) 91734c01a60SPhilip Reames; RV64-NEXT: sb zero, 4(a0) 918*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 5(a0) 919*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 6(a0) 920*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 7(a0) 92134c01a60SPhilip Reames; RV64-NEXT: sb zero, 0(a0) 922*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 1(a0) 923*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 2(a0) 924*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 3(a0) 92534c01a60SPhilip Reames; RV64-NEXT: ret 92634c01a60SPhilip Reames; 92734c01a60SPhilip Reames; RV32-FAST-LABEL: bzero_32: 92834c01a60SPhilip Reames; RV32-FAST: # %bb.0: 92934c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 16(a0) 930*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 20(a0) 931*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 24(a0) 932*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 28(a0) 93334c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 0(a0) 934*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 4(a0) 935*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 8(a0) 936*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 12(a0) 93734c01a60SPhilip Reames; RV32-FAST-NEXT: ret 93834c01a60SPhilip Reames; 93934c01a60SPhilip Reames; RV64-FAST-LABEL: bzero_32: 94034c01a60SPhilip Reames; RV64-FAST: # %bb.0: 94134c01a60SPhilip Reames; RV64-FAST-NEXT: sd zero, 0(a0) 942*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 8(a0) 943*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 16(a0) 944*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 24(a0) 94534c01a60SPhilip Reames; RV64-FAST-NEXT: ret 94634c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 32, i1 0) 94734c01a60SPhilip Reames ret void 94834c01a60SPhilip Reames} 94934c01a60SPhilip Reames 95034c01a60SPhilip Reamesdefine void @bzero_64(ptr %a) nounwind { 95134c01a60SPhilip Reames; RV32-LABEL: bzero_64: 95234c01a60SPhilip Reames; RV32: # %bb.0: 95334c01a60SPhilip Reames; RV32-NEXT: sb zero, 60(a0) 954*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 61(a0) 955*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 62(a0) 956*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 63(a0) 95734c01a60SPhilip Reames; RV32-NEXT: sb zero, 56(a0) 958*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 57(a0) 959*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 58(a0) 960*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 59(a0) 96134c01a60SPhilip Reames; RV32-NEXT: sb zero, 52(a0) 962*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 53(a0) 963*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 54(a0) 964*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 55(a0) 96534c01a60SPhilip Reames; RV32-NEXT: sb zero, 48(a0) 966*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 49(a0) 967*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 50(a0) 968*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 51(a0) 96934c01a60SPhilip Reames; RV32-NEXT: sb zero, 44(a0) 970*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 45(a0) 971*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 46(a0) 972*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 47(a0) 97334c01a60SPhilip Reames; RV32-NEXT: sb zero, 40(a0) 974*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 41(a0) 975*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 42(a0) 976*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 43(a0) 97734c01a60SPhilip Reames; RV32-NEXT: sb zero, 36(a0) 978*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 37(a0) 979*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 38(a0) 980*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 39(a0) 98134c01a60SPhilip Reames; RV32-NEXT: sb zero, 32(a0) 982*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 33(a0) 983*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 34(a0) 984*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 35(a0) 98534c01a60SPhilip Reames; RV32-NEXT: sb zero, 28(a0) 986*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 29(a0) 987*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 30(a0) 988*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 31(a0) 98934c01a60SPhilip Reames; RV32-NEXT: sb zero, 24(a0) 990*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 25(a0) 991*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 26(a0) 992*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 27(a0) 99334c01a60SPhilip Reames; RV32-NEXT: sb zero, 20(a0) 994*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 21(a0) 995*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 22(a0) 996*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 23(a0) 99734c01a60SPhilip Reames; RV32-NEXT: sb zero, 16(a0) 998*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 17(a0) 999*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 18(a0) 1000*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 19(a0) 100134c01a60SPhilip Reames; RV32-NEXT: sb zero, 12(a0) 1002*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 13(a0) 1003*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 14(a0) 1004*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 15(a0) 100534c01a60SPhilip Reames; RV32-NEXT: sb zero, 8(a0) 1006*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 9(a0) 1007*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 10(a0) 1008*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 11(a0) 100934c01a60SPhilip Reames; RV32-NEXT: sb zero, 4(a0) 1010*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 5(a0) 1011*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 6(a0) 1012*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 7(a0) 101334c01a60SPhilip Reames; RV32-NEXT: sb zero, 0(a0) 1014*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 1(a0) 1015*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 2(a0) 1016*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 3(a0) 101734c01a60SPhilip Reames; RV32-NEXT: ret 101834c01a60SPhilip Reames; 101934c01a60SPhilip Reames; RV64-LABEL: bzero_64: 102034c01a60SPhilip Reames; RV64: # %bb.0: 102134c01a60SPhilip Reames; RV64-NEXT: sb zero, 60(a0) 1022*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 61(a0) 1023*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 62(a0) 1024*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 63(a0) 102534c01a60SPhilip Reames; RV64-NEXT: sb zero, 56(a0) 1026*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 57(a0) 1027*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 58(a0) 1028*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 59(a0) 102934c01a60SPhilip Reames; RV64-NEXT: sb zero, 52(a0) 1030*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 53(a0) 1031*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 54(a0) 1032*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 55(a0) 103334c01a60SPhilip Reames; RV64-NEXT: sb zero, 48(a0) 1034*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 49(a0) 1035*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 50(a0) 1036*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 51(a0) 103734c01a60SPhilip Reames; RV64-NEXT: sb zero, 44(a0) 1038*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 45(a0) 1039*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 46(a0) 1040*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 47(a0) 104134c01a60SPhilip Reames; RV64-NEXT: sb zero, 40(a0) 1042*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 41(a0) 1043*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 42(a0) 1044*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 43(a0) 104534c01a60SPhilip Reames; RV64-NEXT: sb zero, 36(a0) 1046*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 37(a0) 1047*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 38(a0) 1048*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 39(a0) 104934c01a60SPhilip Reames; RV64-NEXT: sb zero, 32(a0) 1050*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 33(a0) 1051*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 34(a0) 1052*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 35(a0) 105334c01a60SPhilip Reames; RV64-NEXT: sb zero, 28(a0) 1054*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 29(a0) 1055*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 30(a0) 1056*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 31(a0) 105734c01a60SPhilip Reames; RV64-NEXT: sb zero, 24(a0) 1058*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 25(a0) 1059*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 26(a0) 1060*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 27(a0) 106134c01a60SPhilip Reames; RV64-NEXT: sb zero, 20(a0) 1062*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 21(a0) 1063*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 22(a0) 1064*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 23(a0) 106534c01a60SPhilip Reames; RV64-NEXT: sb zero, 16(a0) 1066*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 17(a0) 1067*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 18(a0) 1068*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 19(a0) 106934c01a60SPhilip Reames; RV64-NEXT: sb zero, 12(a0) 1070*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 13(a0) 1071*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 14(a0) 1072*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 15(a0) 107334c01a60SPhilip Reames; RV64-NEXT: sb zero, 8(a0) 1074*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 9(a0) 1075*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 10(a0) 1076*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 11(a0) 107734c01a60SPhilip Reames; RV64-NEXT: sb zero, 4(a0) 1078*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 5(a0) 1079*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 6(a0) 1080*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 7(a0) 108134c01a60SPhilip Reames; RV64-NEXT: sb zero, 0(a0) 1082*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 1(a0) 1083*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 2(a0) 1084*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 3(a0) 108534c01a60SPhilip Reames; RV64-NEXT: ret 108634c01a60SPhilip Reames; 108734c01a60SPhilip Reames; RV32-FAST-LABEL: bzero_64: 108834c01a60SPhilip Reames; RV32-FAST: # %bb.0: 108934c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 48(a0) 1090*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 52(a0) 1091*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 56(a0) 1092*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 60(a0) 109334c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 32(a0) 1094*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 36(a0) 1095*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 40(a0) 1096*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 44(a0) 109734c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 16(a0) 1098*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 20(a0) 1099*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 24(a0) 1100*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 28(a0) 110134c01a60SPhilip Reames; RV32-FAST-NEXT: sw zero, 0(a0) 1102*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 4(a0) 1103*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 8(a0) 1104*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 12(a0) 110534c01a60SPhilip Reames; RV32-FAST-NEXT: ret 110634c01a60SPhilip Reames; 110734c01a60SPhilip Reames; RV64-FAST-LABEL: bzero_64: 110834c01a60SPhilip Reames; RV64-FAST: # %bb.0: 110934c01a60SPhilip Reames; RV64-FAST-NEXT: sd zero, 32(a0) 1110*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 40(a0) 1111*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 48(a0) 1112*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 56(a0) 111334c01a60SPhilip Reames; RV64-FAST-NEXT: sd zero, 0(a0) 1114*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 8(a0) 1115*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 16(a0) 1116*2967e5f8SAlex Bradbury; RV64-FAST-NEXT: sd zero, 24(a0) 111734c01a60SPhilip Reames; RV64-FAST-NEXT: ret 111834c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 64, i1 0) 111934c01a60SPhilip Reames ret void 112034c01a60SPhilip Reames} 112134c01a60SPhilip Reames 112234c01a60SPhilip Reames; ///////////////////////////////////////////////////////////////////////////// 112334c01a60SPhilip Reames 112434c01a60SPhilip Reamesdefine void @aligned_bzero_2(ptr %a) nounwind { 112534c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_bzero_2: 112634c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 112734c01a60SPhilip Reames; RV32-BOTH-NEXT: sh zero, 0(a0) 112834c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 112934c01a60SPhilip Reames; 113034c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_bzero_2: 113134c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 113234c01a60SPhilip Reames; RV64-BOTH-NEXT: sh zero, 0(a0) 113334c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 113434c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 2 %a, i8 0, i64 2, i1 0) 113534c01a60SPhilip Reames ret void 113634c01a60SPhilip Reames} 113734c01a60SPhilip Reames 113834c01a60SPhilip Reamesdefine void @aligned_bzero_4(ptr %a) nounwind { 113934c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_bzero_4: 114034c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 114134c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 0(a0) 114234c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 114334c01a60SPhilip Reames; 114434c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_bzero_4: 114534c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 114634c01a60SPhilip Reames; RV64-BOTH-NEXT: sw zero, 0(a0) 114734c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 114834c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 4 %a, i8 0, i64 4, i1 0) 114934c01a60SPhilip Reames ret void 115034c01a60SPhilip Reames} 115134c01a60SPhilip Reames 115234c01a60SPhilip Reamesdefine void @aligned_bzero_8(ptr %a) nounwind { 115334c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_bzero_8: 115434c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 115534c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 0(a0) 1156*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 4(a0) 115734c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 115834c01a60SPhilip Reames; 115934c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_bzero_8: 116034c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 116134c01a60SPhilip Reames; RV64-BOTH-NEXT: sd zero, 0(a0) 116234c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 116334c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 8 %a, i8 0, i64 8, i1 0) 116434c01a60SPhilip Reames ret void 116534c01a60SPhilip Reames} 116634c01a60SPhilip Reames 116734c01a60SPhilip Reames 116834c01a60SPhilip Reamesdefine void @aligned_bzero_16(ptr %a) nounwind { 116934c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_bzero_16: 117034c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 117134c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 0(a0) 1172*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 4(a0) 1173*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 8(a0) 1174*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 12(a0) 117534c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 117634c01a60SPhilip Reames; 117734c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_bzero_16: 117834c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 117934c01a60SPhilip Reames; RV64-BOTH-NEXT: sd zero, 0(a0) 1180*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 8(a0) 118134c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 118234c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 16 %a, i8 0, i64 16, i1 0) 118334c01a60SPhilip Reames ret void 118434c01a60SPhilip Reames} 118534c01a60SPhilip Reames 118634c01a60SPhilip Reamesdefine void @aligned_bzero_32(ptr %a) nounwind { 118734c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_bzero_32: 118834c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 118934c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 16(a0) 1190*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 20(a0) 1191*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 24(a0) 1192*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 28(a0) 119334c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 0(a0) 1194*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 4(a0) 1195*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 8(a0) 1196*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 12(a0) 119734c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 119834c01a60SPhilip Reames; 119934c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_bzero_32: 120034c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 120134c01a60SPhilip Reames; RV64-BOTH-NEXT: sd zero, 0(a0) 1202*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 8(a0) 1203*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 16(a0) 1204*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 24(a0) 120534c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 120634c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 32 %a, i8 0, i64 32, i1 0) 120734c01a60SPhilip Reames ret void 120834c01a60SPhilip Reames} 120934c01a60SPhilip Reames 121034c01a60SPhilip Reamesdefine void @aligned_bzero_64(ptr %a) nounwind { 121134c01a60SPhilip Reames; RV32-BOTH-LABEL: aligned_bzero_64: 121234c01a60SPhilip Reames; RV32-BOTH: # %bb.0: 121334c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 48(a0) 1214*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 52(a0) 1215*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 56(a0) 1216*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 60(a0) 121734c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 32(a0) 1218*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 36(a0) 1219*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 40(a0) 1220*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 44(a0) 122134c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 16(a0) 1222*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 20(a0) 1223*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 24(a0) 1224*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 28(a0) 122534c01a60SPhilip Reames; RV32-BOTH-NEXT: sw zero, 0(a0) 1226*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 4(a0) 1227*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 8(a0) 1228*2967e5f8SAlex Bradbury; RV32-BOTH-NEXT: sw zero, 12(a0) 122934c01a60SPhilip Reames; RV32-BOTH-NEXT: ret 123034c01a60SPhilip Reames; 123134c01a60SPhilip Reames; RV64-BOTH-LABEL: aligned_bzero_64: 123234c01a60SPhilip Reames; RV64-BOTH: # %bb.0: 123334c01a60SPhilip Reames; RV64-BOTH-NEXT: sd zero, 32(a0) 1234*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 40(a0) 1235*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 48(a0) 1236*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 56(a0) 123734c01a60SPhilip Reames; RV64-BOTH-NEXT: sd zero, 0(a0) 1238*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 8(a0) 1239*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 16(a0) 1240*2967e5f8SAlex Bradbury; RV64-BOTH-NEXT: sd zero, 24(a0) 124134c01a60SPhilip Reames; RV64-BOTH-NEXT: ret 124234c01a60SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 64 %a, i8 0, i64 64, i1 0) 124334c01a60SPhilip Reames ret void 124434c01a60SPhilip Reames} 12454f057f52SPhilip Reames 12464f057f52SPhilip Reames 12474f057f52SPhilip Reames; ///////////////////////////////////////////////////////////////////////////// 12484f057f52SPhilip Reames; Usual overlap tricks 12494f057f52SPhilip Reames 12504f057f52SPhilip Reamesdefine void @aligned_bzero_7(ptr %a) nounwind { 12515b95bba6SLuke Lau; RV32-LABEL: aligned_bzero_7: 12525b95bba6SLuke Lau; RV32: # %bb.0: 12535b95bba6SLuke Lau; RV32-NEXT: sw zero, 0(a0) 1254*2967e5f8SAlex Bradbury; RV32-NEXT: sh zero, 4(a0) 1255*2967e5f8SAlex Bradbury; RV32-NEXT: sb zero, 6(a0) 12565b95bba6SLuke Lau; RV32-NEXT: ret 12574f057f52SPhilip Reames; 12585b95bba6SLuke Lau; RV64-LABEL: aligned_bzero_7: 12595b95bba6SLuke Lau; RV64: # %bb.0: 12605b95bba6SLuke Lau; RV64-NEXT: sw zero, 0(a0) 1261*2967e5f8SAlex Bradbury; RV64-NEXT: sh zero, 4(a0) 1262*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 6(a0) 12635b95bba6SLuke Lau; RV64-NEXT: ret 12645b95bba6SLuke Lau; 12655b95bba6SLuke Lau; RV32-FAST-LABEL: aligned_bzero_7: 12665b95bba6SLuke Lau; RV32-FAST: # %bb.0: 12675b95bba6SLuke Lau; RV32-FAST-NEXT: sw zero, 3(a0) 12685b95bba6SLuke Lau; RV32-FAST-NEXT: sw zero, 0(a0) 12695b95bba6SLuke Lau; RV32-FAST-NEXT: ret 12705b95bba6SLuke Lau; 12715b95bba6SLuke Lau; RV64-FAST-LABEL: aligned_bzero_7: 12725b95bba6SLuke Lau; RV64-FAST: # %bb.0: 12735b95bba6SLuke Lau; RV64-FAST-NEXT: sw zero, 3(a0) 12745b95bba6SLuke Lau; RV64-FAST-NEXT: sw zero, 0(a0) 12755b95bba6SLuke Lau; RV64-FAST-NEXT: ret 12764f057f52SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 8 %a, i8 0, i64 7, i1 0) 12774f057f52SPhilip Reames ret void 12784f057f52SPhilip Reames} 12794f057f52SPhilip Reames 12804f057f52SPhilip Reamesdefine void @aligned_bzero_15(ptr %a) nounwind { 12815b95bba6SLuke Lau; RV32-LABEL: aligned_bzero_15: 12825b95bba6SLuke Lau; RV32: # %bb.0: 12835b95bba6SLuke Lau; RV32-NEXT: sb zero, 14(a0) 12845b95bba6SLuke Lau; RV32-NEXT: sw zero, 0(a0) 1285*2967e5f8SAlex Bradbury; RV32-NEXT: sw zero, 4(a0) 1286*2967e5f8SAlex Bradbury; RV32-NEXT: sw zero, 8(a0) 1287*2967e5f8SAlex Bradbury; RV32-NEXT: sh zero, 12(a0) 12885b95bba6SLuke Lau; RV32-NEXT: ret 12894f057f52SPhilip Reames; 12905b95bba6SLuke Lau; RV64-LABEL: aligned_bzero_15: 12915b95bba6SLuke Lau; RV64: # %bb.0: 12925b95bba6SLuke Lau; RV64-NEXT: sd zero, 0(a0) 1293*2967e5f8SAlex Bradbury; RV64-NEXT: sw zero, 8(a0) 1294*2967e5f8SAlex Bradbury; RV64-NEXT: sh zero, 12(a0) 1295*2967e5f8SAlex Bradbury; RV64-NEXT: sb zero, 14(a0) 12965b95bba6SLuke Lau; RV64-NEXT: ret 12975b95bba6SLuke Lau; 12985b95bba6SLuke Lau; RV32-FAST-LABEL: aligned_bzero_15: 12995b95bba6SLuke Lau; RV32-FAST: # %bb.0: 13005b95bba6SLuke Lau; RV32-FAST-NEXT: sw zero, 11(a0) 13015b95bba6SLuke Lau; RV32-FAST-NEXT: sw zero, 0(a0) 1302*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 4(a0) 1303*2967e5f8SAlex Bradbury; RV32-FAST-NEXT: sw zero, 8(a0) 13045b95bba6SLuke Lau; RV32-FAST-NEXT: ret 13055b95bba6SLuke Lau; 13065b95bba6SLuke Lau; RV64-FAST-LABEL: aligned_bzero_15: 13075b95bba6SLuke Lau; RV64-FAST: # %bb.0: 13085b95bba6SLuke Lau; RV64-FAST-NEXT: sd zero, 7(a0) 13095b95bba6SLuke Lau; RV64-FAST-NEXT: sd zero, 0(a0) 13105b95bba6SLuke Lau; RV64-FAST-NEXT: ret 13114f057f52SPhilip Reames tail call void @llvm.memset.inline.p0.i64(ptr align 8 %a, i8 0, i64 15, i1 0) 13124f057f52SPhilip Reames ret void 13134f057f52SPhilip Reames} 1314