| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-I,RV32I |
| ; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-I,RV64I |
| ; RUN: llc -mtriple=riscv32 -mattr=+m -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-M,RV32IM |
| ; RUN: llc -mtriple=riscv64 -mattr=+m -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-M,RV64IM |
| ; RUN: llc -mtriple=riscv32 -mattr=+m,+zbs -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ZBS,RV32IMZBS |
| ; RUN: llc -mtriple=riscv64 -mattr=+m,+zbs -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ZBS,RV64IMZBS |
| |
| define i4 @clmulr_i4(i4 %a, i4 %b) nounwind { |
| ; CHECK-LABEL: clmulr_i4: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: andi a0, a0, 15 |
| ; CHECK-NEXT: andi a2, a1, 2 |
| ; CHECK-NEXT: andi a3, a1, 4 |
| ; CHECK-NEXT: slli a4, a0, 1 |
| ; CHECK-NEXT: seqz a2, a2 |
| ; CHECK-NEXT: addi a2, a2, -1 |
| ; CHECK-NEXT: and a2, a2, a4 |
| ; CHECK-NEXT: slli a4, a0, 2 |
| ; CHECK-NEXT: seqz a3, a3 |
| ; CHECK-NEXT: addi a3, a3, -1 |
| ; CHECK-NEXT: and a3, a3, a4 |
| ; CHECK-NEXT: andi a4, a1, 1 |
| ; CHECK-NEXT: andi a1, a1, 8 |
| ; CHECK-NEXT: seqz a4, a4 |
| ; CHECK-NEXT: addi a4, a4, -1 |
| ; CHECK-NEXT: and a4, a4, a0 |
| ; CHECK-NEXT: slli a0, a0, 3 |
| ; CHECK-NEXT: seqz a1, a1 |
| ; CHECK-NEXT: addi a1, a1, -1 |
| ; CHECK-NEXT: and a0, a1, a0 |
| ; CHECK-NEXT: xor a2, a4, a2 |
| ; CHECK-NEXT: xor a0, a3, a0 |
| ; CHECK-NEXT: xor a0, a2, a0 |
| ; CHECK-NEXT: srli a0, a0, 3 |
| ; CHECK-NEXT: ret |
| %a.ext = zext i4 %a to i8 |
| %b.ext = zext i4 %b to i8 |
| %clmul = call i8 @llvm.clmul.i8(i8 %a.ext, i8 %b.ext) |
| %res.ext = lshr i8 %clmul, 3 |
| %res = trunc i8 %res.ext to i4 |
| ret i4 %res |
| } |
| |
| define i4 @clmulr_i4_bitreverse(i4 %a, i4 %b) nounwind { |
| ; CHECK-LABEL: clmulr_i4_bitreverse: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: andi a0, a0, 15 |
| ; CHECK-NEXT: andi a2, a1, 2 |
| ; CHECK-NEXT: andi a3, a1, 4 |
| ; CHECK-NEXT: slli a4, a0, 1 |
| ; CHECK-NEXT: seqz a2, a2 |
| ; CHECK-NEXT: addi a2, a2, -1 |
| ; CHECK-NEXT: and a2, a2, a4 |
| ; CHECK-NEXT: slli a4, a0, 2 |
| ; CHECK-NEXT: seqz a3, a3 |
| ; CHECK-NEXT: addi a3, a3, -1 |
| ; CHECK-NEXT: and a3, a3, a4 |
| ; CHECK-NEXT: andi a4, a1, 1 |
| ; CHECK-NEXT: andi a1, a1, 8 |
| ; CHECK-NEXT: seqz a4, a4 |
| ; CHECK-NEXT: addi a4, a4, -1 |
| ; CHECK-NEXT: and a4, a4, a0 |
| ; CHECK-NEXT: slli a0, a0, 3 |
| ; CHECK-NEXT: seqz a1, a1 |
| ; CHECK-NEXT: addi a1, a1, -1 |
| ; CHECK-NEXT: and a0, a1, a0 |
| ; CHECK-NEXT: xor a2, a4, a2 |
| ; CHECK-NEXT: xor a0, a3, a0 |
| ; CHECK-NEXT: xor a0, a2, a0 |
| ; CHECK-NEXT: srli a0, a0, 3 |
| ; CHECK-NEXT: ret |
| %a.rev = call i4 @llvm.bitreverse.i4(i4 %a) |
| %b.rev = call i4 @llvm.bitreverse.i4(i4 %b) |
| %res.rev = call i4 @llvm.clmul.i4(i4 %a.rev, i4 %b.rev) |
| %res = call i4 @llvm.bitreverse.i4(i4 %res.rev) |
| ret i4 %res |
| } |
| |
| define i8 @clmulr_i8(i8 %a, i8 %b) nounwind { |
| ; CHECK-LABEL: clmulr_i8: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: zext.b a0, a0 |
| ; CHECK-NEXT: andi a2, a1, 2 |
| ; CHECK-NEXT: andi a3, a1, 4 |
| ; CHECK-NEXT: andi a4, a1, 8 |
| ; CHECK-NEXT: andi a5, a1, 16 |
| ; CHECK-NEXT: andi a6, a1, 32 |
| ; CHECK-NEXT: andi a7, a1, 64 |
| ; CHECK-NEXT: slli t0, a0, 1 |
| ; CHECK-NEXT: seqz a2, a2 |
| ; CHECK-NEXT: addi a2, a2, -1 |
| ; CHECK-NEXT: and a2, a2, t0 |
| ; CHECK-NEXT: slli t0, a0, 2 |
| ; CHECK-NEXT: seqz a3, a3 |
| ; CHECK-NEXT: addi a3, a3, -1 |
| ; CHECK-NEXT: and a3, a3, t0 |
| ; CHECK-NEXT: slli t0, a0, 3 |
| ; CHECK-NEXT: seqz a4, a4 |
| ; CHECK-NEXT: addi a4, a4, -1 |
| ; CHECK-NEXT: and a4, a4, t0 |
| ; CHECK-NEXT: slli t0, a0, 4 |
| ; CHECK-NEXT: seqz a5, a5 |
| ; CHECK-NEXT: addi a5, a5, -1 |
| ; CHECK-NEXT: and a5, a5, t0 |
| ; CHECK-NEXT: slli t0, a0, 5 |
| ; CHECK-NEXT: seqz a6, a6 |
| ; CHECK-NEXT: addi a6, a6, -1 |
| ; CHECK-NEXT: and a6, a6, t0 |
| ; CHECK-NEXT: slli t0, a0, 6 |
| ; CHECK-NEXT: seqz a7, a7 |
| ; CHECK-NEXT: addi a7, a7, -1 |
| ; CHECK-NEXT: and a7, a7, t0 |
| ; CHECK-NEXT: andi t0, a1, 1 |
| ; CHECK-NEXT: seqz t0, t0 |
| ; CHECK-NEXT: addi t0, t0, -1 |
| ; CHECK-NEXT: and t0, t0, a0 |
| ; CHECK-NEXT: xor a2, t0, a2 |
| ; CHECK-NEXT: xor a3, a3, a4 |
| ; CHECK-NEXT: xor a4, a5, a6 |
| ; CHECK-NEXT: andi a1, a1, 128 |
| ; CHECK-NEXT: slli a0, a0, 7 |
| ; CHECK-NEXT: seqz a1, a1 |
| ; CHECK-NEXT: addi a1, a1, -1 |
| ; CHECK-NEXT: xor a2, a2, a3 |
| ; CHECK-NEXT: xor a3, a4, a7 |
| ; CHECK-NEXT: xor a2, a2, a3 |
| ; CHECK-NEXT: and a0, a1, a0 |
| ; CHECK-NEXT: xor a0, a2, a0 |
| ; CHECK-NEXT: srli a0, a0, 7 |
| ; CHECK-NEXT: ret |
| %a.ext = zext i8 %a to i16 |
| %b.ext = zext i8 %b to i16 |
| %clmul = call i16 @llvm.clmul.i16(i16 %a.ext, i16 %b.ext) |
| %res.ext = lshr i16 %clmul, 7 |
| %res = trunc i16 %res.ext to i8 |
| ret i8 %res |
| } |
| |
| define i16 @clmulr_i16(i16 %a, i16 %b) nounwind { |
| ; RV32I-LABEL: clmulr_i16: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -16 |
| ; RV32I-NEXT: sw s0, 12(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s1, 8(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a0, a0, 16 |
| ; RV32I-NEXT: andi a2, a1, 2 |
| ; RV32I-NEXT: andi a3, a1, 4 |
| ; RV32I-NEXT: andi a4, a1, 8 |
| ; RV32I-NEXT: andi a6, a1, 16 |
| ; RV32I-NEXT: andi a7, a1, 32 |
| ; RV32I-NEXT: andi t1, a1, 64 |
| ; RV32I-NEXT: andi t3, a1, 128 |
| ; RV32I-NEXT: andi t4, a1, 256 |
| ; RV32I-NEXT: andi t5, a1, 512 |
| ; RV32I-NEXT: andi t6, a1, 1024 |
| ; RV32I-NEXT: li a5, 1 |
| ; RV32I-NEXT: lui t0, 1 |
| ; RV32I-NEXT: lui t2, 2 |
| ; RV32I-NEXT: lui s0, 4 |
| ; RV32I-NEXT: srli a0, a0, 16 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: seqz a3, a3 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: seqz a6, a6 |
| ; RV32I-NEXT: seqz a7, a7 |
| ; RV32I-NEXT: seqz t1, t1 |
| ; RV32I-NEXT: seqz t3, t3 |
| ; RV32I-NEXT: seqz t4, t4 |
| ; RV32I-NEXT: seqz t5, t5 |
| ; RV32I-NEXT: seqz t6, t6 |
| ; RV32I-NEXT: slli s1, a0, 1 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: and a2, a2, s1 |
| ; RV32I-NEXT: slli s1, a0, 2 |
| ; RV32I-NEXT: addi a3, a3, -1 |
| ; RV32I-NEXT: and a3, a3, s1 |
| ; RV32I-NEXT: slli s1, a0, 3 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: and a4, a4, s1 |
| ; RV32I-NEXT: slli s1, a0, 4 |
| ; RV32I-NEXT: addi a6, a6, -1 |
| ; RV32I-NEXT: and a6, a6, s1 |
| ; RV32I-NEXT: slli s1, a0, 5 |
| ; RV32I-NEXT: addi a7, a7, -1 |
| ; RV32I-NEXT: and a7, a7, s1 |
| ; RV32I-NEXT: slli s1, a0, 6 |
| ; RV32I-NEXT: addi t1, t1, -1 |
| ; RV32I-NEXT: and t1, t1, s1 |
| ; RV32I-NEXT: slli s1, a0, 7 |
| ; RV32I-NEXT: addi t3, t3, -1 |
| ; RV32I-NEXT: and t3, t3, s1 |
| ; RV32I-NEXT: slli s1, a0, 8 |
| ; RV32I-NEXT: addi t4, t4, -1 |
| ; RV32I-NEXT: and t4, t4, s1 |
| ; RV32I-NEXT: slli s1, a0, 9 |
| ; RV32I-NEXT: addi t5, t5, -1 |
| ; RV32I-NEXT: and t5, t5, s1 |
| ; RV32I-NEXT: slli s1, a0, 10 |
| ; RV32I-NEXT: addi t6, t6, -1 |
| ; RV32I-NEXT: and t6, t6, s1 |
| ; RV32I-NEXT: lui s1, 8 |
| ; RV32I-NEXT: slli a5, a5, 11 |
| ; RV32I-NEXT: and t0, a1, t0 |
| ; RV32I-NEXT: and t2, a1, t2 |
| ; RV32I-NEXT: and s0, a1, s0 |
| ; RV32I-NEXT: and s1, a1, s1 |
| ; RV32I-NEXT: and a5, a1, a5 |
| ; RV32I-NEXT: andi a1, a1, 1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: and a1, a1, a0 |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: xor a3, a3, a4 |
| ; RV32I-NEXT: xor a2, a6, a7 |
| ; RV32I-NEXT: seqz a4, t0 |
| ; RV32I-NEXT: xor a6, t3, t4 |
| ; RV32I-NEXT: slli a7, a0, 12 |
| ; RV32I-NEXT: seqz t0, t2 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: and a4, a4, a7 |
| ; RV32I-NEXT: slli a7, a0, 13 |
| ; RV32I-NEXT: seqz t2, s0 |
| ; RV32I-NEXT: addi t0, t0, -1 |
| ; RV32I-NEXT: and a7, t0, a7 |
| ; RV32I-NEXT: slli t0, a0, 14 |
| ; RV32I-NEXT: seqz t3, s1 |
| ; RV32I-NEXT: addi t2, t2, -1 |
| ; RV32I-NEXT: and t0, t2, t0 |
| ; RV32I-NEXT: slli t2, a0, 15 |
| ; RV32I-NEXT: addi t3, t3, -1 |
| ; RV32I-NEXT: and t2, t3, t2 |
| ; RV32I-NEXT: xor a1, a1, a3 |
| ; RV32I-NEXT: xor a2, a2, t1 |
| ; RV32I-NEXT: xor a3, a6, t5 |
| ; RV32I-NEXT: slli a0, a0, 11 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: and a0, a5, a0 |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: xor a2, a3, t6 |
| ; RV32I-NEXT: xor a0, a0, a4 |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: xor a0, a0, a7 |
| ; RV32I-NEXT: xor a0, a1, a0 |
| ; RV32I-NEXT: xor a1, t0, t2 |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: srli a0, a0, 15 |
| ; RV32I-NEXT: lw s0, 12(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s1, 8(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: addi sp, sp, 16 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: clmulr_i16: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -16 |
| ; RV64I-NEXT: sd s0, 8(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s1, 0(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a0, a0, 48 |
| ; RV64I-NEXT: andi a2, a1, 2 |
| ; RV64I-NEXT: andi a3, a1, 4 |
| ; RV64I-NEXT: andi a4, a1, 8 |
| ; RV64I-NEXT: andi a6, a1, 16 |
| ; RV64I-NEXT: andi a7, a1, 32 |
| ; RV64I-NEXT: andi t1, a1, 64 |
| ; RV64I-NEXT: andi t3, a1, 128 |
| ; RV64I-NEXT: andi t4, a1, 256 |
| ; RV64I-NEXT: andi t5, a1, 512 |
| ; RV64I-NEXT: andi t6, a1, 1024 |
| ; RV64I-NEXT: li a5, 1 |
| ; RV64I-NEXT: lui t0, 1 |
| ; RV64I-NEXT: lui t2, 2 |
| ; RV64I-NEXT: lui s0, 4 |
| ; RV64I-NEXT: srli a0, a0, 48 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: seqz a3, a3 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: seqz a6, a6 |
| ; RV64I-NEXT: seqz a7, a7 |
| ; RV64I-NEXT: seqz t1, t1 |
| ; RV64I-NEXT: seqz t3, t3 |
| ; RV64I-NEXT: seqz t4, t4 |
| ; RV64I-NEXT: seqz t5, t5 |
| ; RV64I-NEXT: seqz t6, t6 |
| ; RV64I-NEXT: slli s1, a0, 1 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: and a2, a2, s1 |
| ; RV64I-NEXT: slli s1, a0, 2 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a3, a3, s1 |
| ; RV64I-NEXT: slli s1, a0, 3 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: and a4, a4, s1 |
| ; RV64I-NEXT: slli s1, a0, 4 |
| ; RV64I-NEXT: addi a6, a6, -1 |
| ; RV64I-NEXT: and a6, a6, s1 |
| ; RV64I-NEXT: slli s1, a0, 5 |
| ; RV64I-NEXT: addi a7, a7, -1 |
| ; RV64I-NEXT: and a7, a7, s1 |
| ; RV64I-NEXT: slli s1, a0, 6 |
| ; RV64I-NEXT: addi t1, t1, -1 |
| ; RV64I-NEXT: and t1, t1, s1 |
| ; RV64I-NEXT: slli s1, a0, 7 |
| ; RV64I-NEXT: addi t3, t3, -1 |
| ; RV64I-NEXT: and t3, t3, s1 |
| ; RV64I-NEXT: slli s1, a0, 8 |
| ; RV64I-NEXT: addi t4, t4, -1 |
| ; RV64I-NEXT: and t4, t4, s1 |
| ; RV64I-NEXT: slli s1, a0, 9 |
| ; RV64I-NEXT: addi t5, t5, -1 |
| ; RV64I-NEXT: and t5, t5, s1 |
| ; RV64I-NEXT: slli s1, a0, 10 |
| ; RV64I-NEXT: addi t6, t6, -1 |
| ; RV64I-NEXT: and t6, t6, s1 |
| ; RV64I-NEXT: lui s1, 8 |
| ; RV64I-NEXT: slli a5, a5, 11 |
| ; RV64I-NEXT: and t0, a1, t0 |
| ; RV64I-NEXT: and t2, a1, t2 |
| ; RV64I-NEXT: and s0, a1, s0 |
| ; RV64I-NEXT: and s1, a1, s1 |
| ; RV64I-NEXT: and a5, a1, a5 |
| ; RV64I-NEXT: andi a1, a1, 1 |
| ; RV64I-NEXT: seqz a1, a1 |
| ; RV64I-NEXT: addi a1, a1, -1 |
| ; RV64I-NEXT: and a1, a1, a0 |
| ; RV64I-NEXT: xor a1, a1, a2 |
| ; RV64I-NEXT: xor a3, a3, a4 |
| ; RV64I-NEXT: xor a2, a6, a7 |
| ; RV64I-NEXT: seqz a4, t0 |
| ; RV64I-NEXT: xor a6, t3, t4 |
| ; RV64I-NEXT: slli a7, a0, 12 |
| ; RV64I-NEXT: seqz t0, t2 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: and a4, a4, a7 |
| ; RV64I-NEXT: slli a7, a0, 13 |
| ; RV64I-NEXT: seqz t2, s0 |
| ; RV64I-NEXT: addi t0, t0, -1 |
| ; RV64I-NEXT: and a7, t0, a7 |
| ; RV64I-NEXT: slli t0, a0, 14 |
| ; RV64I-NEXT: seqz t3, s1 |
| ; RV64I-NEXT: addi t2, t2, -1 |
| ; RV64I-NEXT: and t0, t2, t0 |
| ; RV64I-NEXT: slli t2, a0, 15 |
| ; RV64I-NEXT: addi t3, t3, -1 |
| ; RV64I-NEXT: and t2, t3, t2 |
| ; RV64I-NEXT: xor a1, a1, a3 |
| ; RV64I-NEXT: xor a2, a2, t1 |
| ; RV64I-NEXT: xor a3, a6, t5 |
| ; RV64I-NEXT: slli a0, a0, 11 |
| ; RV64I-NEXT: seqz a5, a5 |
| ; RV64I-NEXT: addi a5, a5, -1 |
| ; RV64I-NEXT: and a0, a5, a0 |
| ; RV64I-NEXT: xor a1, a1, a2 |
| ; RV64I-NEXT: xor a2, a3, t6 |
| ; RV64I-NEXT: xor a0, a0, a4 |
| ; RV64I-NEXT: xor a1, a1, a2 |
| ; RV64I-NEXT: xor a0, a0, a7 |
| ; RV64I-NEXT: xor a0, a1, a0 |
| ; RV64I-NEXT: xor a1, t0, t2 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: srli a0, a0, 15 |
| ; RV64I-NEXT: ld s0, 8(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s1, 0(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: addi sp, sp, 16 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32IM-LABEL: clmulr_i16: |
| ; RV32IM: # %bb.0: |
| ; RV32IM-NEXT: addi sp, sp, -16 |
| ; RV32IM-NEXT: sw s0, 12(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s1, 8(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a0, a0, 16 |
| ; RV32IM-NEXT: andi a2, a1, 2 |
| ; RV32IM-NEXT: andi a3, a1, 4 |
| ; RV32IM-NEXT: andi a4, a1, 8 |
| ; RV32IM-NEXT: andi a5, a1, 16 |
| ; RV32IM-NEXT: andi a7, a1, 32 |
| ; RV32IM-NEXT: andi t0, a1, 64 |
| ; RV32IM-NEXT: andi t1, a1, 128 |
| ; RV32IM-NEXT: andi t2, a1, 256 |
| ; RV32IM-NEXT: andi t3, a1, 512 |
| ; RV32IM-NEXT: andi t4, a1, 1024 |
| ; RV32IM-NEXT: li a6, 1 |
| ; RV32IM-NEXT: lui t5, 1 |
| ; RV32IM-NEXT: lui t6, 2 |
| ; RV32IM-NEXT: lui s0, 4 |
| ; RV32IM-NEXT: srli a0, a0, 16 |
| ; RV32IM-NEXT: seqz a2, a2 |
| ; RV32IM-NEXT: seqz a3, a3 |
| ; RV32IM-NEXT: seqz a4, a4 |
| ; RV32IM-NEXT: seqz a5, a5 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: seqz t0, t0 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: seqz t2, t2 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: seqz t4, t4 |
| ; RV32IM-NEXT: slli s1, a0, 1 |
| ; RV32IM-NEXT: addi a2, a2, -1 |
| ; RV32IM-NEXT: and a2, a2, s1 |
| ; RV32IM-NEXT: slli s1, a0, 2 |
| ; RV32IM-NEXT: addi a3, a3, -1 |
| ; RV32IM-NEXT: and a3, a3, s1 |
| ; RV32IM-NEXT: slli s1, a0, 3 |
| ; RV32IM-NEXT: addi a4, a4, -1 |
| ; RV32IM-NEXT: and a4, a4, s1 |
| ; RV32IM-NEXT: slli s1, a0, 4 |
| ; RV32IM-NEXT: addi a5, a5, -1 |
| ; RV32IM-NEXT: and a5, a5, s1 |
| ; RV32IM-NEXT: slli s1, a0, 5 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: and a7, a7, s1 |
| ; RV32IM-NEXT: slli s1, a0, 6 |
| ; RV32IM-NEXT: addi t0, t0, -1 |
| ; RV32IM-NEXT: and t0, t0, s1 |
| ; RV32IM-NEXT: slli s1, a0, 7 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: and t1, t1, s1 |
| ; RV32IM-NEXT: slli s1, a0, 8 |
| ; RV32IM-NEXT: addi t2, t2, -1 |
| ; RV32IM-NEXT: and t2, t2, s1 |
| ; RV32IM-NEXT: slli s1, a0, 9 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: and t3, t3, s1 |
| ; RV32IM-NEXT: slli s1, a0, 10 |
| ; RV32IM-NEXT: addi t4, t4, -1 |
| ; RV32IM-NEXT: and t4, t4, s1 |
| ; RV32IM-NEXT: lui s1, 8 |
| ; RV32IM-NEXT: slli a6, a6, 11 |
| ; RV32IM-NEXT: and t5, a1, t5 |
| ; RV32IM-NEXT: and t6, a1, t6 |
| ; RV32IM-NEXT: and s0, a1, s0 |
| ; RV32IM-NEXT: and s1, a1, s1 |
| ; RV32IM-NEXT: and a6, a1, a6 |
| ; RV32IM-NEXT: andi a1, a1, 1 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: mul t5, a0, t5 |
| ; RV32IM-NEXT: mul t6, a0, t6 |
| ; RV32IM-NEXT: mul s0, a0, s0 |
| ; RV32IM-NEXT: mul s1, a0, s1 |
| ; RV32IM-NEXT: and a1, a1, a0 |
| ; RV32IM-NEXT: mul a0, a0, a6 |
| ; RV32IM-NEXT: xor a1, a1, a2 |
| ; RV32IM-NEXT: xor a3, a3, a4 |
| ; RV32IM-NEXT: xor a2, a5, a7 |
| ; RV32IM-NEXT: xor a4, t1, t2 |
| ; RV32IM-NEXT: xor a0, a0, t5 |
| ; RV32IM-NEXT: xor a1, a1, a3 |
| ; RV32IM-NEXT: xor a2, a2, t0 |
| ; RV32IM-NEXT: xor a3, a4, t3 |
| ; RV32IM-NEXT: xor a0, a0, t6 |
| ; RV32IM-NEXT: xor a1, a1, a2 |
| ; RV32IM-NEXT: xor a2, a3, t4 |
| ; RV32IM-NEXT: xor a0, a0, s0 |
| ; RV32IM-NEXT: xor a1, a1, a2 |
| ; RV32IM-NEXT: xor a0, a0, s1 |
| ; RV32IM-NEXT: xor a0, a1, a0 |
| ; RV32IM-NEXT: srli a0, a0, 15 |
| ; RV32IM-NEXT: lw s0, 12(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s1, 8(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: addi sp, sp, 16 |
| ; RV32IM-NEXT: ret |
| ; |
| ; RV64IM-LABEL: clmulr_i16: |
| ; RV64IM: # %bb.0: |
| ; RV64IM-NEXT: addi sp, sp, -16 |
| ; RV64IM-NEXT: sd s0, 8(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s1, 0(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli a0, a0, 48 |
| ; RV64IM-NEXT: andi a2, a1, 2 |
| ; RV64IM-NEXT: andi a3, a1, 4 |
| ; RV64IM-NEXT: andi a4, a1, 8 |
| ; RV64IM-NEXT: andi a5, a1, 16 |
| ; RV64IM-NEXT: andi a7, a1, 32 |
| ; RV64IM-NEXT: andi t0, a1, 64 |
| ; RV64IM-NEXT: andi t1, a1, 128 |
| ; RV64IM-NEXT: andi t2, a1, 256 |
| ; RV64IM-NEXT: andi t3, a1, 512 |
| ; RV64IM-NEXT: andi t4, a1, 1024 |
| ; RV64IM-NEXT: li a6, 1 |
| ; RV64IM-NEXT: lui t5, 1 |
| ; RV64IM-NEXT: lui t6, 2 |
| ; RV64IM-NEXT: lui s0, 4 |
| ; RV64IM-NEXT: srli a0, a0, 48 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: seqz a3, a3 |
| ; RV64IM-NEXT: seqz a4, a4 |
| ; RV64IM-NEXT: seqz a5, a5 |
| ; RV64IM-NEXT: seqz a7, a7 |
| ; RV64IM-NEXT: seqz t0, t0 |
| ; RV64IM-NEXT: seqz t1, t1 |
| ; RV64IM-NEXT: seqz t2, t2 |
| ; RV64IM-NEXT: seqz t3, t3 |
| ; RV64IM-NEXT: seqz t4, t4 |
| ; RV64IM-NEXT: slli s1, a0, 1 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: and a2, a2, s1 |
| ; RV64IM-NEXT: slli s1, a0, 2 |
| ; RV64IM-NEXT: addi a3, a3, -1 |
| ; RV64IM-NEXT: and a3, a3, s1 |
| ; RV64IM-NEXT: slli s1, a0, 3 |
| ; RV64IM-NEXT: addi a4, a4, -1 |
| ; RV64IM-NEXT: and a4, a4, s1 |
| ; RV64IM-NEXT: slli s1, a0, 4 |
| ; RV64IM-NEXT: addi a5, a5, -1 |
| ; RV64IM-NEXT: and a5, a5, s1 |
| ; RV64IM-NEXT: slli s1, a0, 5 |
| ; RV64IM-NEXT: addi a7, a7, -1 |
| ; RV64IM-NEXT: and a7, a7, s1 |
| ; RV64IM-NEXT: slli s1, a0, 6 |
| ; RV64IM-NEXT: addi t0, t0, -1 |
| ; RV64IM-NEXT: and t0, t0, s1 |
| ; RV64IM-NEXT: slli s1, a0, 7 |
| ; RV64IM-NEXT: addi t1, t1, -1 |
| ; RV64IM-NEXT: and t1, t1, s1 |
| ; RV64IM-NEXT: slli s1, a0, 8 |
| ; RV64IM-NEXT: addi t2, t2, -1 |
| ; RV64IM-NEXT: and t2, t2, s1 |
| ; RV64IM-NEXT: slli s1, a0, 9 |
| ; RV64IM-NEXT: addi t3, t3, -1 |
| ; RV64IM-NEXT: and t3, t3, s1 |
| ; RV64IM-NEXT: slli s1, a0, 10 |
| ; RV64IM-NEXT: addi t4, t4, -1 |
| ; RV64IM-NEXT: and t4, t4, s1 |
| ; RV64IM-NEXT: lui s1, 8 |
| ; RV64IM-NEXT: slli a6, a6, 11 |
| ; RV64IM-NEXT: and t5, a1, t5 |
| ; RV64IM-NEXT: and t6, a1, t6 |
| ; RV64IM-NEXT: and s0, a1, s0 |
| ; RV64IM-NEXT: and s1, a1, s1 |
| ; RV64IM-NEXT: and a6, a1, a6 |
| ; RV64IM-NEXT: andi a1, a1, 1 |
| ; RV64IM-NEXT: seqz a1, a1 |
| ; RV64IM-NEXT: addi a1, a1, -1 |
| ; RV64IM-NEXT: mul t5, a0, t5 |
| ; RV64IM-NEXT: mul t6, a0, t6 |
| ; RV64IM-NEXT: mul s0, a0, s0 |
| ; RV64IM-NEXT: mul s1, a0, s1 |
| ; RV64IM-NEXT: and a1, a1, a0 |
| ; RV64IM-NEXT: mul a0, a0, a6 |
| ; RV64IM-NEXT: xor a1, a1, a2 |
| ; RV64IM-NEXT: xor a3, a3, a4 |
| ; RV64IM-NEXT: xor a2, a5, a7 |
| ; RV64IM-NEXT: xor a4, t1, t2 |
| ; RV64IM-NEXT: xor a0, a0, t5 |
| ; RV64IM-NEXT: xor a1, a1, a3 |
| ; RV64IM-NEXT: xor a2, a2, t0 |
| ; RV64IM-NEXT: xor a3, a4, t3 |
| ; RV64IM-NEXT: xor a0, a0, t6 |
| ; RV64IM-NEXT: xor a1, a1, a2 |
| ; RV64IM-NEXT: xor a2, a3, t4 |
| ; RV64IM-NEXT: xor a0, a0, s0 |
| ; RV64IM-NEXT: xor a1, a1, a2 |
| ; RV64IM-NEXT: xor a0, a0, s1 |
| ; RV64IM-NEXT: xor a0, a1, a0 |
| ; RV64IM-NEXT: srli a0, a0, 15 |
| ; RV64IM-NEXT: ld s0, 8(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s1, 0(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: addi sp, sp, 16 |
| ; RV64IM-NEXT: ret |
| ; |
| ; RV32IMZBS-LABEL: clmulr_i16: |
| ; RV32IMZBS: # %bb.0: |
| ; RV32IMZBS-NEXT: addi sp, sp, -16 |
| ; RV32IMZBS-NEXT: sw s0, 12(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s1, 8(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s2, 4(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a0, a0, 16 |
| ; RV32IMZBS-NEXT: andi a3, a1, 2 |
| ; RV32IMZBS-NEXT: andi a4, a1, 4 |
| ; RV32IMZBS-NEXT: andi a5, a1, 8 |
| ; RV32IMZBS-NEXT: andi a6, a1, 16 |
| ; RV32IMZBS-NEXT: andi a7, a1, 32 |
| ; RV32IMZBS-NEXT: andi t0, a1, 64 |
| ; RV32IMZBS-NEXT: andi t1, a1, 128 |
| ; RV32IMZBS-NEXT: andi t2, a1, 256 |
| ; RV32IMZBS-NEXT: andi t3, a1, 512 |
| ; RV32IMZBS-NEXT: andi t4, a1, 1024 |
| ; RV32IMZBS-NEXT: not a2, a1 |
| ; RV32IMZBS-NEXT: srli a0, a0, 16 |
| ; RV32IMZBS-NEXT: seqz a3, a3 |
| ; RV32IMZBS-NEXT: seqz a4, a4 |
| ; RV32IMZBS-NEXT: seqz a5, a5 |
| ; RV32IMZBS-NEXT: seqz a6, a6 |
| ; RV32IMZBS-NEXT: seqz a7, a7 |
| ; RV32IMZBS-NEXT: seqz t0, t0 |
| ; RV32IMZBS-NEXT: seqz t1, t1 |
| ; RV32IMZBS-NEXT: seqz t2, t2 |
| ; RV32IMZBS-NEXT: seqz t3, t3 |
| ; RV32IMZBS-NEXT: seqz t4, t4 |
| ; RV32IMZBS-NEXT: bexti t5, a2, 11 |
| ; RV32IMZBS-NEXT: bexti t6, a2, 12 |
| ; RV32IMZBS-NEXT: bexti s0, a2, 13 |
| ; RV32IMZBS-NEXT: bexti s1, a2, 14 |
| ; RV32IMZBS-NEXT: slli s2, a0, 1 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: and a3, a3, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 2 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: and a4, a4, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 3 |
| ; RV32IMZBS-NEXT: addi a5, a5, -1 |
| ; RV32IMZBS-NEXT: and a5, a5, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 4 |
| ; RV32IMZBS-NEXT: addi a6, a6, -1 |
| ; RV32IMZBS-NEXT: and a6, a6, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 5 |
| ; RV32IMZBS-NEXT: addi a7, a7, -1 |
| ; RV32IMZBS-NEXT: and a7, a7, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 6 |
| ; RV32IMZBS-NEXT: addi t0, t0, -1 |
| ; RV32IMZBS-NEXT: and t0, t0, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 7 |
| ; RV32IMZBS-NEXT: addi t1, t1, -1 |
| ; RV32IMZBS-NEXT: and t1, t1, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 8 |
| ; RV32IMZBS-NEXT: addi t2, t2, -1 |
| ; RV32IMZBS-NEXT: and t2, t2, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 9 |
| ; RV32IMZBS-NEXT: addi t3, t3, -1 |
| ; RV32IMZBS-NEXT: and t3, t3, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 10 |
| ; RV32IMZBS-NEXT: addi t4, t4, -1 |
| ; RV32IMZBS-NEXT: and t4, t4, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 11 |
| ; RV32IMZBS-NEXT: addi t5, t5, -1 |
| ; RV32IMZBS-NEXT: and t5, t5, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 12 |
| ; RV32IMZBS-NEXT: addi t6, t6, -1 |
| ; RV32IMZBS-NEXT: and t6, t6, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 13 |
| ; RV32IMZBS-NEXT: addi s0, s0, -1 |
| ; RV32IMZBS-NEXT: and s0, s0, s2 |
| ; RV32IMZBS-NEXT: slli s2, a0, 14 |
| ; RV32IMZBS-NEXT: addi s1, s1, -1 |
| ; RV32IMZBS-NEXT: and s1, s1, s2 |
| ; RV32IMZBS-NEXT: andi a1, a1, 1 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: bexti a2, a2, 15 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: and a1, a1, a0 |
| ; RV32IMZBS-NEXT: slli a0, a0, 15 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: and a0, a2, a0 |
| ; RV32IMZBS-NEXT: xor a1, a1, a3 |
| ; RV32IMZBS-NEXT: xor a4, a4, a5 |
| ; RV32IMZBS-NEXT: xor a2, a6, a7 |
| ; RV32IMZBS-NEXT: xor a3, t1, t2 |
| ; RV32IMZBS-NEXT: xor a5, t5, t6 |
| ; RV32IMZBS-NEXT: xor a1, a1, a4 |
| ; RV32IMZBS-NEXT: xor a2, a2, t0 |
| ; RV32IMZBS-NEXT: xor a3, a3, t3 |
| ; RV32IMZBS-NEXT: xor a5, a5, s0 |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: xor a2, a3, t4 |
| ; RV32IMZBS-NEXT: xor a5, a5, s1 |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: xor a0, a5, a0 |
| ; RV32IMZBS-NEXT: xor a0, a1, a0 |
| ; RV32IMZBS-NEXT: srli a0, a0, 15 |
| ; RV32IMZBS-NEXT: lw s0, 12(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s1, 8(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s2, 4(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: addi sp, sp, 16 |
| ; RV32IMZBS-NEXT: ret |
| ; |
| ; RV64IMZBS-LABEL: clmulr_i16: |
| ; RV64IMZBS: # %bb.0: |
| ; RV64IMZBS-NEXT: addi sp, sp, -32 |
| ; RV64IMZBS-NEXT: sd s0, 24(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s1, 16(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s2, 8(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: slli a0, a0, 48 |
| ; RV64IMZBS-NEXT: andi a3, a1, 2 |
| ; RV64IMZBS-NEXT: andi a4, a1, 4 |
| ; RV64IMZBS-NEXT: andi a5, a1, 8 |
| ; RV64IMZBS-NEXT: andi a6, a1, 16 |
| ; RV64IMZBS-NEXT: andi a7, a1, 32 |
| ; RV64IMZBS-NEXT: andi t0, a1, 64 |
| ; RV64IMZBS-NEXT: andi t1, a1, 128 |
| ; RV64IMZBS-NEXT: andi t2, a1, 256 |
| ; RV64IMZBS-NEXT: andi t3, a1, 512 |
| ; RV64IMZBS-NEXT: andi t4, a1, 1024 |
| ; RV64IMZBS-NEXT: not a2, a1 |
| ; RV64IMZBS-NEXT: srli a0, a0, 48 |
| ; RV64IMZBS-NEXT: seqz a3, a3 |
| ; RV64IMZBS-NEXT: seqz a4, a4 |
| ; RV64IMZBS-NEXT: seqz a5, a5 |
| ; RV64IMZBS-NEXT: seqz a6, a6 |
| ; RV64IMZBS-NEXT: seqz a7, a7 |
| ; RV64IMZBS-NEXT: seqz t0, t0 |
| ; RV64IMZBS-NEXT: seqz t1, t1 |
| ; RV64IMZBS-NEXT: seqz t2, t2 |
| ; RV64IMZBS-NEXT: seqz t3, t3 |
| ; RV64IMZBS-NEXT: seqz t4, t4 |
| ; RV64IMZBS-NEXT: bexti t5, a2, 11 |
| ; RV64IMZBS-NEXT: bexti t6, a2, 12 |
| ; RV64IMZBS-NEXT: bexti s0, a2, 13 |
| ; RV64IMZBS-NEXT: bexti s1, a2, 14 |
| ; RV64IMZBS-NEXT: slli s2, a0, 1 |
| ; RV64IMZBS-NEXT: addi a3, a3, -1 |
| ; RV64IMZBS-NEXT: and a3, a3, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 2 |
| ; RV64IMZBS-NEXT: addi a4, a4, -1 |
| ; RV64IMZBS-NEXT: and a4, a4, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 3 |
| ; RV64IMZBS-NEXT: addi a5, a5, -1 |
| ; RV64IMZBS-NEXT: and a5, a5, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 4 |
| ; RV64IMZBS-NEXT: addi a6, a6, -1 |
| ; RV64IMZBS-NEXT: and a6, a6, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 5 |
| ; RV64IMZBS-NEXT: addi a7, a7, -1 |
| ; RV64IMZBS-NEXT: and a7, a7, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 6 |
| ; RV64IMZBS-NEXT: addi t0, t0, -1 |
| ; RV64IMZBS-NEXT: and t0, t0, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 7 |
| ; RV64IMZBS-NEXT: addi t1, t1, -1 |
| ; RV64IMZBS-NEXT: and t1, t1, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 8 |
| ; RV64IMZBS-NEXT: addi t2, t2, -1 |
| ; RV64IMZBS-NEXT: and t2, t2, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 9 |
| ; RV64IMZBS-NEXT: addi t3, t3, -1 |
| ; RV64IMZBS-NEXT: and t3, t3, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 10 |
| ; RV64IMZBS-NEXT: addi t4, t4, -1 |
| ; RV64IMZBS-NEXT: and t4, t4, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 11 |
| ; RV64IMZBS-NEXT: addi t5, t5, -1 |
| ; RV64IMZBS-NEXT: and t5, t5, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 12 |
| ; RV64IMZBS-NEXT: addi t6, t6, -1 |
| ; RV64IMZBS-NEXT: and t6, t6, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 13 |
| ; RV64IMZBS-NEXT: addi s0, s0, -1 |
| ; RV64IMZBS-NEXT: and s0, s0, s2 |
| ; RV64IMZBS-NEXT: slli s2, a0, 14 |
| ; RV64IMZBS-NEXT: addi s1, s1, -1 |
| ; RV64IMZBS-NEXT: and s1, s1, s2 |
| ; RV64IMZBS-NEXT: andi a1, a1, 1 |
| ; RV64IMZBS-NEXT: seqz a1, a1 |
| ; RV64IMZBS-NEXT: bexti a2, a2, 15 |
| ; RV64IMZBS-NEXT: addi a1, a1, -1 |
| ; RV64IMZBS-NEXT: and a1, a1, a0 |
| ; RV64IMZBS-NEXT: slli a0, a0, 15 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: and a0, a2, a0 |
| ; RV64IMZBS-NEXT: xor a1, a1, a3 |
| ; RV64IMZBS-NEXT: xor a4, a4, a5 |
| ; RV64IMZBS-NEXT: xor a2, a6, a7 |
| ; RV64IMZBS-NEXT: xor a3, t1, t2 |
| ; RV64IMZBS-NEXT: xor a5, t5, t6 |
| ; RV64IMZBS-NEXT: xor a1, a1, a4 |
| ; RV64IMZBS-NEXT: xor a2, a2, t0 |
| ; RV64IMZBS-NEXT: xor a3, a3, t3 |
| ; RV64IMZBS-NEXT: xor a5, a5, s0 |
| ; RV64IMZBS-NEXT: xor a1, a1, a2 |
| ; RV64IMZBS-NEXT: xor a2, a3, t4 |
| ; RV64IMZBS-NEXT: xor a5, a5, s1 |
| ; RV64IMZBS-NEXT: xor a1, a1, a2 |
| ; RV64IMZBS-NEXT: xor a0, a5, a0 |
| ; RV64IMZBS-NEXT: xor a0, a1, a0 |
| ; RV64IMZBS-NEXT: srli a0, a0, 15 |
| ; RV64IMZBS-NEXT: ld s0, 24(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s1, 16(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s2, 8(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: addi sp, sp, 32 |
| ; RV64IMZBS-NEXT: ret |
| %a.ext = zext i16 %a to i32 |
| %b.ext = zext i16 %b to i32 |
| %clmul = call i32 @llvm.clmul.i32(i32 %a.ext, i32 %b.ext) |
| %res.ext = lshr i32 %clmul, 15 |
| %res = trunc i32 %res.ext to i16 |
| ret i16 %res |
| } |
| |
| define i32 @clmulr_i32(i32 %a, i32 %b) nounwind { |
| ; RV32I-LABEL: clmulr_i32: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -96 |
| ; RV32I-NEXT: sw ra, 92(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s0, 88(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s1, 84(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s2, 80(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s3, 76(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s4, 72(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s5, 68(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s6, 64(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s7, 60(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s8, 56(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s9, 52(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s10, 48(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s11, 44(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: srli s0, a0, 8 |
| ; RV32I-NEXT: lui a6, 16 |
| ; RV32I-NEXT: srli s1, a0, 24 |
| ; RV32I-NEXT: slli s2, a0, 24 |
| ; RV32I-NEXT: lui a3, 61681 |
| ; RV32I-NEXT: lui a4, 209715 |
| ; RV32I-NEXT: lui a2, 349525 |
| ; RV32I-NEXT: srli s6, a1, 8 |
| ; RV32I-NEXT: srli s4, a1, 24 |
| ; RV32I-NEXT: slli s5, a1, 24 |
| ; RV32I-NEXT: li t5, 1 |
| ; RV32I-NEXT: lui a7, 1 |
| ; RV32I-NEXT: lui t0, 2 |
| ; RV32I-NEXT: lui s11, 8 |
| ; RV32I-NEXT: lui t3, 32 |
| ; RV32I-NEXT: lui t4, 64 |
| ; RV32I-NEXT: lui t2, 128 |
| ; RV32I-NEXT: lui t6, 256 |
| ; RV32I-NEXT: addi t1, a6, -256 |
| ; RV32I-NEXT: addi s3, a3, -241 |
| ; RV32I-NEXT: addi a4, a4, 819 |
| ; RV32I-NEXT: addi a3, a2, 1365 |
| ; RV32I-NEXT: slli a2, t5, 11 |
| ; RV32I-NEXT: and t5, s0, t1 |
| ; RV32I-NEXT: and a0, a0, t1 |
| ; RV32I-NEXT: and s0, s6, t1 |
| ; RV32I-NEXT: and a1, a1, t1 |
| ; RV32I-NEXT: or t5, t5, s1 |
| ; RV32I-NEXT: slli a0, a0, 8 |
| ; RV32I-NEXT: or s0, s0, s4 |
| ; RV32I-NEXT: slli a1, a1, 8 |
| ; RV32I-NEXT: or a0, s2, a0 |
| ; RV32I-NEXT: or a1, s5, a1 |
| ; RV32I-NEXT: or a0, a0, t5 |
| ; RV32I-NEXT: or a1, a1, s0 |
| ; RV32I-NEXT: srli t5, a0, 4 |
| ; RV32I-NEXT: and a0, a0, s3 |
| ; RV32I-NEXT: srli s0, a1, 4 |
| ; RV32I-NEXT: and a1, a1, s3 |
| ; RV32I-NEXT: and t5, t5, s3 |
| ; RV32I-NEXT: slli a0, a0, 4 |
| ; RV32I-NEXT: and s0, s0, s3 |
| ; RV32I-NEXT: slli a1, a1, 4 |
| ; RV32I-NEXT: or a0, t5, a0 |
| ; RV32I-NEXT: or a1, s0, a1 |
| ; RV32I-NEXT: srli t5, a0, 2 |
| ; RV32I-NEXT: sw a4, 40(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a4 |
| ; RV32I-NEXT: srli s0, a1, 2 |
| ; RV32I-NEXT: and a1, a1, a4 |
| ; RV32I-NEXT: and t5, t5, a4 |
| ; RV32I-NEXT: slli a0, a0, 2 |
| ; RV32I-NEXT: and s0, s0, a4 |
| ; RV32I-NEXT: slli a1, a1, 2 |
| ; RV32I-NEXT: or a0, t5, a0 |
| ; RV32I-NEXT: or a1, s0, a1 |
| ; RV32I-NEXT: srli t5, a0, 1 |
| ; RV32I-NEXT: sw a3, 36(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a3 |
| ; RV32I-NEXT: srli s0, a1, 1 |
| ; RV32I-NEXT: and a1, a1, a3 |
| ; RV32I-NEXT: and s1, t5, a3 |
| ; RV32I-NEXT: slli a0, a0, 1 |
| ; RV32I-NEXT: and s0, s0, a3 |
| ; RV32I-NEXT: slli t5, a1, 1 |
| ; RV32I-NEXT: or a4, s1, a0 |
| ; RV32I-NEXT: or a5, s0, t5 |
| ; RV32I-NEXT: srli t5, t5, 31 |
| ; RV32I-NEXT: slli s0, a4, 1 |
| ; RV32I-NEXT: andi s1, a5, 2 |
| ; RV32I-NEXT: slli a0, a4, 2 |
| ; RV32I-NEXT: andi s4, a5, 4 |
| ; RV32I-NEXT: slli s5, a4, 3 |
| ; RV32I-NEXT: andi s6, a5, 8 |
| ; RV32I-NEXT: slli s2, a4, 4 |
| ; RV32I-NEXT: andi s7, a5, 16 |
| ; RV32I-NEXT: slli s8, a4, 5 |
| ; RV32I-NEXT: andi s10, a5, 32 |
| ; RV32I-NEXT: slli s9, a4, 31 |
| ; RV32I-NEXT: seqz t5, t5 |
| ; RV32I-NEXT: addi t5, t5, -1 |
| ; RV32I-NEXT: and a1, t5, s9 |
| ; RV32I-NEXT: sw a1, 32(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli t5, a4, 6 |
| ; RV32I-NEXT: seqz s1, s1 |
| ; RV32I-NEXT: addi s1, s1, -1 |
| ; RV32I-NEXT: and s0, s1, s0 |
| ; RV32I-NEXT: sw s0, 28(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi s0, a5, 64 |
| ; RV32I-NEXT: seqz s4, s4 |
| ; RV32I-NEXT: addi s4, s4, -1 |
| ; RV32I-NEXT: and a0, s4, a0 |
| ; RV32I-NEXT: sw a0, 24(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli s1, a4, 7 |
| ; RV32I-NEXT: seqz s4, s6 |
| ; RV32I-NEXT: addi s4, s4, -1 |
| ; RV32I-NEXT: and a0, s4, s5 |
| ; RV32I-NEXT: sw a0, 20(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi ra, a5, 128 |
| ; RV32I-NEXT: seqz s5, s7 |
| ; RV32I-NEXT: addi s5, s5, -1 |
| ; RV32I-NEXT: and a0, s5, s2 |
| ; RV32I-NEXT: sw a0, 16(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a0, a4, 8 |
| ; RV32I-NEXT: seqz s6, s10 |
| ; RV32I-NEXT: addi s6, s6, -1 |
| ; RV32I-NEXT: and a1, s6, s8 |
| ; RV32I-NEXT: sw a1, 8(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi s10, a5, 256 |
| ; RV32I-NEXT: seqz s0, s0 |
| ; RV32I-NEXT: addi s0, s0, -1 |
| ; RV32I-NEXT: and a1, s0, t5 |
| ; RV32I-NEXT: sw a1, 12(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli t5, a4, 9 |
| ; RV32I-NEXT: seqz s0, ra |
| ; RV32I-NEXT: addi s0, s0, -1 |
| ; RV32I-NEXT: and s0, s0, s1 |
| ; RV32I-NEXT: sw s0, 0(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi s0, a5, 512 |
| ; RV32I-NEXT: seqz s10, s10 |
| ; RV32I-NEXT: addi s10, s10, -1 |
| ; RV32I-NEXT: and s5, s10, a0 |
| ; RV32I-NEXT: slli a0, a4, 10 |
| ; RV32I-NEXT: seqz s0, s0 |
| ; RV32I-NEXT: addi s0, s0, -1 |
| ; RV32I-NEXT: and s10, s0, t5 |
| ; RV32I-NEXT: andi t5, a5, 1024 |
| ; RV32I-NEXT: seqz t5, t5 |
| ; RV32I-NEXT: addi t5, t5, -1 |
| ; RV32I-NEXT: and a0, t5, a0 |
| ; RV32I-NEXT: sw a0, 4(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli t5, a4, 11 |
| ; RV32I-NEXT: and s0, a5, a2 |
| ; RV32I-NEXT: seqz s0, s0 |
| ; RV32I-NEXT: addi s0, s0, -1 |
| ; RV32I-NEXT: and s4, s0, t5 |
| ; RV32I-NEXT: slli t5, a4, 12 |
| ; RV32I-NEXT: and a7, a5, a7 |
| ; RV32I-NEXT: seqz a7, a7 |
| ; RV32I-NEXT: addi a7, a7, -1 |
| ; RV32I-NEXT: and ra, a7, t5 |
| ; RV32I-NEXT: slli a7, a4, 13 |
| ; RV32I-NEXT: and t0, a5, t0 |
| ; RV32I-NEXT: seqz t0, t0 |
| ; RV32I-NEXT: addi t0, t0, -1 |
| ; RV32I-NEXT: and t5, t0, a7 |
| ; RV32I-NEXT: slli a7, a4, 14 |
| ; RV32I-NEXT: lui a0, 4 |
| ; RV32I-NEXT: and t0, a5, a0 |
| ; RV32I-NEXT: seqz t0, t0 |
| ; RV32I-NEXT: addi t0, t0, -1 |
| ; RV32I-NEXT: and s1, t0, a7 |
| ; RV32I-NEXT: slli a7, a4, 15 |
| ; RV32I-NEXT: and a2, a5, s11 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: and s0, a2, a7 |
| ; RV32I-NEXT: slli a2, a4, 16 |
| ; RV32I-NEXT: and a7, a5, a6 |
| ; RV32I-NEXT: seqz a7, a7 |
| ; RV32I-NEXT: addi a7, a7, -1 |
| ; RV32I-NEXT: and t0, a7, a2 |
| ; RV32I-NEXT: slli a2, a4, 17 |
| ; RV32I-NEXT: and a7, a5, t3 |
| ; RV32I-NEXT: seqz a7, a7 |
| ; RV32I-NEXT: addi a7, a7, -1 |
| ; RV32I-NEXT: and a7, a7, a2 |
| ; RV32I-NEXT: slli a2, a4, 18 |
| ; RV32I-NEXT: and t3, a5, t4 |
| ; RV32I-NEXT: seqz t3, t3 |
| ; RV32I-NEXT: addi t3, t3, -1 |
| ; RV32I-NEXT: and t3, t3, a2 |
| ; RV32I-NEXT: slli a2, a4, 19 |
| ; RV32I-NEXT: and t2, a5, t2 |
| ; RV32I-NEXT: seqz t2, t2 |
| ; RV32I-NEXT: addi t2, t2, -1 |
| ; RV32I-NEXT: and t2, t2, a2 |
| ; RV32I-NEXT: slli a2, a4, 20 |
| ; RV32I-NEXT: and t4, a5, t6 |
| ; RV32I-NEXT: seqz t4, t4 |
| ; RV32I-NEXT: addi t4, t4, -1 |
| ; RV32I-NEXT: and t4, t4, a2 |
| ; RV32I-NEXT: lui a2, 512 |
| ; RV32I-NEXT: and a2, a5, a2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli t6, a4, 21 |
| ; RV32I-NEXT: and t6, a2, t6 |
| ; RV32I-NEXT: lui a2, 1024 |
| ; RV32I-NEXT: and a2, a5, a2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a0, a4, 22 |
| ; RV32I-NEXT: and a6, a2, a0 |
| ; RV32I-NEXT: lui a0, 2048 |
| ; RV32I-NEXT: and a0, a5, a0 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli s2, a4, 23 |
| ; RV32I-NEXT: and a2, a0, s2 |
| ; RV32I-NEXT: lui s2, 4096 |
| ; RV32I-NEXT: and s2, a5, s2 |
| ; RV32I-NEXT: seqz s2, s2 |
| ; RV32I-NEXT: addi s2, s2, -1 |
| ; RV32I-NEXT: slli s7, a4, 24 |
| ; RV32I-NEXT: and s2, s2, s7 |
| ; RV32I-NEXT: lui s7, 8192 |
| ; RV32I-NEXT: and s7, a5, s7 |
| ; RV32I-NEXT: seqz s7, s7 |
| ; RV32I-NEXT: addi s7, s7, -1 |
| ; RV32I-NEXT: slli s8, a4, 25 |
| ; RV32I-NEXT: and s7, s7, s8 |
| ; RV32I-NEXT: lui s8, 16384 |
| ; RV32I-NEXT: and s8, a5, s8 |
| ; RV32I-NEXT: seqz s8, s8 |
| ; RV32I-NEXT: addi s8, s8, -1 |
| ; RV32I-NEXT: slli s9, a4, 26 |
| ; RV32I-NEXT: and s8, s8, s9 |
| ; RV32I-NEXT: lui s9, 32768 |
| ; RV32I-NEXT: and s9, a5, s9 |
| ; RV32I-NEXT: seqz s9, s9 |
| ; RV32I-NEXT: addi s9, s9, -1 |
| ; RV32I-NEXT: slli s11, a4, 27 |
| ; RV32I-NEXT: and s9, s9, s11 |
| ; RV32I-NEXT: lui s11, 65536 |
| ; RV32I-NEXT: and s11, a5, s11 |
| ; RV32I-NEXT: seqz s11, s11 |
| ; RV32I-NEXT: addi s11, s11, -1 |
| ; RV32I-NEXT: slli a1, a4, 28 |
| ; RV32I-NEXT: and a1, s11, a1 |
| ; RV32I-NEXT: lui s11, 131072 |
| ; RV32I-NEXT: and s11, a5, s11 |
| ; RV32I-NEXT: seqz s11, s11 |
| ; RV32I-NEXT: addi s11, s11, -1 |
| ; RV32I-NEXT: slli a3, a4, 29 |
| ; RV32I-NEXT: and a3, s11, a3 |
| ; RV32I-NEXT: lui s11, 262144 |
| ; RV32I-NEXT: and s11, a5, s11 |
| ; RV32I-NEXT: andi a5, a5, 1 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: and a5, a5, a4 |
| ; RV32I-NEXT: slli a4, a4, 30 |
| ; RV32I-NEXT: seqz s11, s11 |
| ; RV32I-NEXT: addi s11, s11, -1 |
| ; RV32I-NEXT: and a4, s11, a4 |
| ; RV32I-NEXT: lw a0, 28(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a5, a0 |
| ; RV32I-NEXT: lw a0, 24(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s11, 20(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s11, a0, s11 |
| ; RV32I-NEXT: lw a0, 16(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s6, 8(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, s6 |
| ; RV32I-NEXT: lw s6, 0(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s5, s6, s5 |
| ; RV32I-NEXT: xor s4, s4, ra |
| ; RV32I-NEXT: xor a7, t0, a7 |
| ; RV32I-NEXT: xor a2, a6, a2 |
| ; RV32I-NEXT: xor a3, a3, a4 |
| ; RV32I-NEXT: xor a4, a5, s11 |
| ; RV32I-NEXT: lw a5, 12(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a5 |
| ; RV32I-NEXT: xor a5, s5, s10 |
| ; RV32I-NEXT: xor a6, s4, t5 |
| ; RV32I-NEXT: xor a7, a7, t3 |
| ; RV32I-NEXT: xor a2, a2, s2 |
| ; RV32I-NEXT: lw t0, 32(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a3, t0 |
| ; RV32I-NEXT: xor a0, a4, a0 |
| ; RV32I-NEXT: lw a4, 4(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a5, a4 |
| ; RV32I-NEXT: xor a5, a6, s1 |
| ; RV32I-NEXT: xor a6, a7, t2 |
| ; RV32I-NEXT: xor a2, a2, s7 |
| ; RV32I-NEXT: xor a0, a0, a4 |
| ; RV32I-NEXT: xor a5, a5, s0 |
| ; RV32I-NEXT: xor a4, a6, t4 |
| ; RV32I-NEXT: xor a2, a2, s8 |
| ; RV32I-NEXT: xor a0, a0, a5 |
| ; RV32I-NEXT: xor a4, a4, t6 |
| ; RV32I-NEXT: xor a2, a2, s9 |
| ; RV32I-NEXT: xor a0, a0, a4 |
| ; RV32I-NEXT: xor a1, a2, a1 |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: xor a0, a0, a3 |
| ; RV32I-NEXT: srli a1, a0, 8 |
| ; RV32I-NEXT: srli a2, a0, 24 |
| ; RV32I-NEXT: slli a3, a0, 24 |
| ; RV32I-NEXT: and a0, a0, t1 |
| ; RV32I-NEXT: and a1, a1, t1 |
| ; RV32I-NEXT: slli a0, a0, 8 |
| ; RV32I-NEXT: or a1, a1, a2 |
| ; RV32I-NEXT: or a0, a3, a0 |
| ; RV32I-NEXT: or a0, a0, a1 |
| ; RV32I-NEXT: srli a1, a0, 4 |
| ; RV32I-NEXT: and a0, a0, s3 |
| ; RV32I-NEXT: and a1, a1, s3 |
| ; RV32I-NEXT: slli a0, a0, 4 |
| ; RV32I-NEXT: or a0, a1, a0 |
| ; RV32I-NEXT: srli a1, a0, 2 |
| ; RV32I-NEXT: lw a2, 40(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: slli a0, a0, 2 |
| ; RV32I-NEXT: or a0, a1, a0 |
| ; RV32I-NEXT: srli a1, a0, 1 |
| ; RV32I-NEXT: lw a2, 36(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: slli a0, a0, 1 |
| ; RV32I-NEXT: or a0, a1, a0 |
| ; RV32I-NEXT: lw ra, 92(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s0, 88(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s1, 84(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s2, 80(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s3, 76(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s4, 72(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s5, 68(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s6, 64(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s7, 60(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s8, 56(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 52(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s10, 48(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s11, 44(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: addi sp, sp, 96 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: clmulr_i32: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -160 |
| ; RV64I-NEXT: sd ra, 152(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s0, 144(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s1, 136(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s2, 128(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s3, 120(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s4, 112(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s5, 104(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s6, 96(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s7, 88(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s8, 80(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s9, 72(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s10, 64(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s11, 56(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a0, a0, 32 |
| ; RV64I-NEXT: andi a2, a1, 2 |
| ; RV64I-NEXT: andi a3, a1, 1 |
| ; RV64I-NEXT: andi a4, a1, 4 |
| ; RV64I-NEXT: andi a5, a1, 8 |
| ; RV64I-NEXT: andi a6, a1, 16 |
| ; RV64I-NEXT: andi a7, a1, 32 |
| ; RV64I-NEXT: andi t0, a1, 64 |
| ; RV64I-NEXT: andi t1, a1, 128 |
| ; RV64I-NEXT: andi t3, a1, 256 |
| ; RV64I-NEXT: andi t4, a1, 512 |
| ; RV64I-NEXT: andi t5, a1, 1024 |
| ; RV64I-NEXT: lui s0, 16 |
| ; RV64I-NEXT: lui s2, 32 |
| ; RV64I-NEXT: lui s8, 64 |
| ; RV64I-NEXT: lui s5, 128 |
| ; RV64I-NEXT: lui s1, 256 |
| ; RV64I-NEXT: lui t6, 512 |
| ; RV64I-NEXT: lui s3, 1024 |
| ; RV64I-NEXT: lui t2, 2048 |
| ; RV64I-NEXT: lui s11, 4096 |
| ; RV64I-NEXT: srli s4, a0, 31 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: and s4, a2, s4 |
| ; RV64I-NEXT: srli a2, a0, 32 |
| ; RV64I-NEXT: seqz a3, a3 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and s6, a3, a2 |
| ; RV64I-NEXT: srli a2, a0, 30 |
| ; RV64I-NEXT: seqz a3, a4 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and s7, a3, a2 |
| ; RV64I-NEXT: srli a2, a0, 29 |
| ; RV64I-NEXT: seqz a3, a5 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and s9, a3, a2 |
| ; RV64I-NEXT: srli a2, a0, 28 |
| ; RV64I-NEXT: seqz a3, a6 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and s10, a3, a2 |
| ; RV64I-NEXT: srli a2, a0, 27 |
| ; RV64I-NEXT: seqz a3, a7 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and ra, a3, a2 |
| ; RV64I-NEXT: srli a2, a0, 26 |
| ; RV64I-NEXT: seqz a3, t0 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a2, a3, a2 |
| ; RV64I-NEXT: sd a2, 48(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: srli a2, a0, 25 |
| ; RV64I-NEXT: seqz a3, t1 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and t1, a3, a2 |
| ; RV64I-NEXT: srli a2, a0, 24 |
| ; RV64I-NEXT: seqz a3, t3 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a7, a3, a2 |
| ; RV64I-NEXT: srli a2, a0, 23 |
| ; RV64I-NEXT: seqz a3, t4 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a2, a3, a2 |
| ; RV64I-NEXT: sd a2, 32(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: srli a2, a0, 22 |
| ; RV64I-NEXT: seqz a3, t5 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a2, a3, a2 |
| ; RV64I-NEXT: sd a2, 40(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui t0, 8192 |
| ; RV64I-NEXT: li a2, 1 |
| ; RV64I-NEXT: slli a2, a2, 11 |
| ; RV64I-NEXT: lui a3, 1 |
| ; RV64I-NEXT: and a3, a1, a3 |
| ; RV64I-NEXT: lui a4, 2 |
| ; RV64I-NEXT: and a4, a1, a4 |
| ; RV64I-NEXT: lui a5, 4 |
| ; RV64I-NEXT: and a5, a1, a5 |
| ; RV64I-NEXT: lui a6, 8 |
| ; RV64I-NEXT: and a6, a1, a6 |
| ; RV64I-NEXT: and s0, a1, s0 |
| ; RV64I-NEXT: and s2, a1, s2 |
| ; RV64I-NEXT: and s8, a1, s8 |
| ; RV64I-NEXT: and s5, a1, s5 |
| ; RV64I-NEXT: and s1, a1, s1 |
| ; RV64I-NEXT: and t6, a1, t6 |
| ; RV64I-NEXT: and t4, a1, s3 |
| ; RV64I-NEXT: and s3, a1, t2 |
| ; RV64I-NEXT: and t2, a1, s11 |
| ; RV64I-NEXT: sd t2, 0(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and t0, a1, t0 |
| ; RV64I-NEXT: sd t0, 16(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui t0, 16384 |
| ; RV64I-NEXT: and t0, a1, t0 |
| ; RV64I-NEXT: sd t0, 8(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui t0, 32768 |
| ; RV64I-NEXT: and s11, a1, t0 |
| ; RV64I-NEXT: lui t0, 65536 |
| ; RV64I-NEXT: and t3, a1, t0 |
| ; RV64I-NEXT: lui t0, 131072 |
| ; RV64I-NEXT: and t5, a1, t0 |
| ; RV64I-NEXT: lui t0, 262144 |
| ; RV64I-NEXT: and t0, a1, t0 |
| ; RV64I-NEXT: and t2, a1, a2 |
| ; RV64I-NEXT: sraiw a1, a1, 31 |
| ; RV64I-NEXT: seqz a1, a1 |
| ; RV64I-NEXT: addi a1, a1, -1 |
| ; RV64I-NEXT: srli a2, a0, 1 |
| ; RV64I-NEXT: and a1, a1, a2 |
| ; RV64I-NEXT: sd a1, 24(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: xor s4, s6, s4 |
| ; RV64I-NEXT: xor s6, s7, s9 |
| ; RV64I-NEXT: xor s7, s10, ra |
| ; RV64I-NEXT: xor s9, t1, a7 |
| ; RV64I-NEXT: seqz a1, a3 |
| ; RV64I-NEXT: addi a1, a1, -1 |
| ; RV64I-NEXT: srli a2, a0, 20 |
| ; RV64I-NEXT: and a7, a1, a2 |
| ; RV64I-NEXT: seqz a1, a4 |
| ; RV64I-NEXT: addi a1, a1, -1 |
| ; RV64I-NEXT: srli a2, a0, 19 |
| ; RV64I-NEXT: and a1, a1, a2 |
| ; RV64I-NEXT: seqz a2, a5 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: srli a3, a0, 18 |
| ; RV64I-NEXT: and s10, a2, a3 |
| ; RV64I-NEXT: seqz a2, a6 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: srli a3, a0, 17 |
| ; RV64I-NEXT: and ra, a2, a3 |
| ; RV64I-NEXT: seqz a2, s0 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: srli a3, a0, 16 |
| ; RV64I-NEXT: and a3, a2, a3 |
| ; RV64I-NEXT: seqz a2, s2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: srli a4, a0, 15 |
| ; RV64I-NEXT: and a2, a2, a4 |
| ; RV64I-NEXT: seqz a4, s8 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: srli s0, a0, 14 |
| ; RV64I-NEXT: and s0, a4, s0 |
| ; RV64I-NEXT: seqz a4, s5 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: srli a5, a0, 13 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: seqz a5, s1 |
| ; RV64I-NEXT: addi a5, a5, -1 |
| ; RV64I-NEXT: srli a6, a0, 12 |
| ; RV64I-NEXT: and a5, a5, a6 |
| ; RV64I-NEXT: seqz a6, t6 |
| ; RV64I-NEXT: addi a6, a6, -1 |
| ; RV64I-NEXT: srli t1, a0, 11 |
| ; RV64I-NEXT: and a6, a6, t1 |
| ; RV64I-NEXT: seqz t1, t4 |
| ; RV64I-NEXT: addi t1, t1, -1 |
| ; RV64I-NEXT: srli t4, a0, 10 |
| ; RV64I-NEXT: and t1, t1, t4 |
| ; RV64I-NEXT: seqz t4, s3 |
| ; RV64I-NEXT: addi t4, t4, -1 |
| ; RV64I-NEXT: srli t6, a0, 9 |
| ; RV64I-NEXT: and t4, t4, t6 |
| ; RV64I-NEXT: ld t6, 0(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: seqz t6, t6 |
| ; RV64I-NEXT: addi t6, t6, -1 |
| ; RV64I-NEXT: srli s1, a0, 8 |
| ; RV64I-NEXT: and t6, t6, s1 |
| ; RV64I-NEXT: ld s1, 16(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: seqz s1, s1 |
| ; RV64I-NEXT: addi s1, s1, -1 |
| ; RV64I-NEXT: srli s2, a0, 7 |
| ; RV64I-NEXT: and s1, s1, s2 |
| ; RV64I-NEXT: ld s2, 8(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: seqz s2, s2 |
| ; RV64I-NEXT: addi s2, s2, -1 |
| ; RV64I-NEXT: srli s3, a0, 6 |
| ; RV64I-NEXT: and s2, s2, s3 |
| ; RV64I-NEXT: seqz s3, s11 |
| ; RV64I-NEXT: addi s3, s3, -1 |
| ; RV64I-NEXT: srli s5, a0, 5 |
| ; RV64I-NEXT: and s3, s3, s5 |
| ; RV64I-NEXT: seqz t3, t3 |
| ; RV64I-NEXT: addi t3, t3, -1 |
| ; RV64I-NEXT: srli s5, a0, 4 |
| ; RV64I-NEXT: and t3, t3, s5 |
| ; RV64I-NEXT: seqz t5, t5 |
| ; RV64I-NEXT: addi t5, t5, -1 |
| ; RV64I-NEXT: srli s5, a0, 3 |
| ; RV64I-NEXT: and t5, t5, s5 |
| ; RV64I-NEXT: seqz t0, t0 |
| ; RV64I-NEXT: addi t0, t0, -1 |
| ; RV64I-NEXT: srli s5, a0, 2 |
| ; RV64I-NEXT: and t0, t0, s5 |
| ; RV64I-NEXT: xor s4, s4, s6 |
| ; RV64I-NEXT: ld s5, 48(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s5, s7, s5 |
| ; RV64I-NEXT: ld s6, 32(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s6, s9, s6 |
| ; RV64I-NEXT: srli a0, a0, 21 |
| ; RV64I-NEXT: seqz t2, t2 |
| ; RV64I-NEXT: addi t2, t2, -1 |
| ; RV64I-NEXT: and a0, t2, a0 |
| ; RV64I-NEXT: xor t2, s10, ra |
| ; RV64I-NEXT: xor a4, a4, a5 |
| ; RV64I-NEXT: xor a5, s1, s2 |
| ; RV64I-NEXT: xor s1, s4, s5 |
| ; RV64I-NEXT: ld s2, 40(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s2, s6, s2 |
| ; RV64I-NEXT: xor a0, a0, a7 |
| ; RV64I-NEXT: xor a3, t2, a3 |
| ; RV64I-NEXT: xor a4, a4, a6 |
| ; RV64I-NEXT: xor a5, a5, s3 |
| ; RV64I-NEXT: xor a6, s1, s2 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: xor a2, a3, a2 |
| ; RV64I-NEXT: xor a1, a4, t1 |
| ; RV64I-NEXT: xor a3, a5, t3 |
| ; RV64I-NEXT: xor a0, a6, a0 |
| ; RV64I-NEXT: xor a2, a2, s0 |
| ; RV64I-NEXT: xor a1, a1, t4 |
| ; RV64I-NEXT: xor a3, a3, t5 |
| ; RV64I-NEXT: xor a0, a0, a2 |
| ; RV64I-NEXT: xor a1, a1, t6 |
| ; RV64I-NEXT: xor a2, a3, t0 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 24(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a2, a1 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: srli a0, a0, 31 |
| ; RV64I-NEXT: ld ra, 152(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s0, 144(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s1, 136(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s2, 128(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s3, 120(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s4, 112(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s5, 104(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s6, 96(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s7, 88(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s8, 80(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s9, 72(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s10, 64(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s11, 56(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: addi sp, sp, 160 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32IM-LABEL: clmulr_i32: |
| ; RV32IM: # %bb.0: |
| ; RV32IM-NEXT: addi sp, sp, -80 |
| ; RV32IM-NEXT: sw ra, 76(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s0, 72(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s1, 68(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s2, 64(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s3, 60(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s4, 56(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s5, 52(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s6, 48(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s7, 44(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s8, 40(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s9, 36(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s10, 32(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s11, 28(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: srli a7, a0, 8 |
| ; RV32IM-NEXT: lui a5, 16 |
| ; RV32IM-NEXT: srli t0, a0, 24 |
| ; RV32IM-NEXT: slli a2, a0, 24 |
| ; RV32IM-NEXT: lui a3, 61681 |
| ; RV32IM-NEXT: lui t1, 209715 |
| ; RV32IM-NEXT: lui t3, 349525 |
| ; RV32IM-NEXT: srli s0, a1, 8 |
| ; RV32IM-NEXT: srli t4, a1, 24 |
| ; RV32IM-NEXT: slli t6, a1, 24 |
| ; RV32IM-NEXT: li ra, 1 |
| ; RV32IM-NEXT: lui s7, 1 |
| ; RV32IM-NEXT: lui t5, 4 |
| ; RV32IM-NEXT: lui s1, 8 |
| ; RV32IM-NEXT: lui s2, 32 |
| ; RV32IM-NEXT: lui s8, 64 |
| ; RV32IM-NEXT: lui s9, 128 |
| ; RV32IM-NEXT: lui s3, 256 |
| ; RV32IM-NEXT: lui s4, 512 |
| ; RV32IM-NEXT: lui s5, 1024 |
| ; RV32IM-NEXT: lui s6, 2048 |
| ; RV32IM-NEXT: lui s10, 4096 |
| ; RV32IM-NEXT: lui s11, 8192 |
| ; RV32IM-NEXT: addi a6, a5, -256 |
| ; RV32IM-NEXT: lui a4, 16 |
| ; RV32IM-NEXT: addi a5, a3, -241 |
| ; RV32IM-NEXT: addi t1, t1, 819 |
| ; RV32IM-NEXT: addi a3, t3, 1365 |
| ; RV32IM-NEXT: slli ra, ra, 11 |
| ; RV32IM-NEXT: and a7, a7, a6 |
| ; RV32IM-NEXT: and a0, a0, a6 |
| ; RV32IM-NEXT: and t3, s0, a6 |
| ; RV32IM-NEXT: and a1, a1, a6 |
| ; RV32IM-NEXT: or a7, a7, t0 |
| ; RV32IM-NEXT: slli a0, a0, 8 |
| ; RV32IM-NEXT: or t0, t3, t4 |
| ; RV32IM-NEXT: slli a1, a1, 8 |
| ; RV32IM-NEXT: or a0, a2, a0 |
| ; RV32IM-NEXT: or a1, t6, a1 |
| ; RV32IM-NEXT: or a0, a0, a7 |
| ; RV32IM-NEXT: or a1, a1, t0 |
| ; RV32IM-NEXT: srli a7, a0, 4 |
| ; RV32IM-NEXT: and a0, a0, a5 |
| ; RV32IM-NEXT: srli t0, a1, 4 |
| ; RV32IM-NEXT: and a1, a1, a5 |
| ; RV32IM-NEXT: and a7, a7, a5 |
| ; RV32IM-NEXT: slli a0, a0, 4 |
| ; RV32IM-NEXT: and t0, t0, a5 |
| ; RV32IM-NEXT: slli a1, a1, 4 |
| ; RV32IM-NEXT: or a0, a7, a0 |
| ; RV32IM-NEXT: or a1, t0, a1 |
| ; RV32IM-NEXT: srli a7, a0, 2 |
| ; RV32IM-NEXT: and a0, a0, t1 |
| ; RV32IM-NEXT: srli t0, a1, 2 |
| ; RV32IM-NEXT: and a1, a1, t1 |
| ; RV32IM-NEXT: and a7, a7, t1 |
| ; RV32IM-NEXT: slli a0, a0, 2 |
| ; RV32IM-NEXT: and t0, t0, t1 |
| ; RV32IM-NEXT: slli a1, a1, 2 |
| ; RV32IM-NEXT: or a0, a7, a0 |
| ; RV32IM-NEXT: or a1, t0, a1 |
| ; RV32IM-NEXT: srli a7, a0, 1 |
| ; RV32IM-NEXT: sw a3, 24(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a3 |
| ; RV32IM-NEXT: srli t0, a1, 1 |
| ; RV32IM-NEXT: and a1, a1, a3 |
| ; RV32IM-NEXT: and a7, a7, a3 |
| ; RV32IM-NEXT: slli a0, a0, 1 |
| ; RV32IM-NEXT: and t0, t0, a3 |
| ; RV32IM-NEXT: slli a1, a1, 1 |
| ; RV32IM-NEXT: or a0, a7, a0 |
| ; RV32IM-NEXT: or a2, t0, a1 |
| ; RV32IM-NEXT: slli t3, a0, 1 |
| ; RV32IM-NEXT: andi t4, a2, 2 |
| ; RV32IM-NEXT: slli t6, a0, 2 |
| ; RV32IM-NEXT: andi s0, a2, 4 |
| ; RV32IM-NEXT: slli a1, a0, 3 |
| ; RV32IM-NEXT: andi a7, a2, 8 |
| ; RV32IM-NEXT: slli a3, a0, 4 |
| ; RV32IM-NEXT: and t0, a2, ra |
| ; RV32IM-NEXT: and t2, a2, s7 |
| ; RV32IM-NEXT: mul t0, a0, t0 |
| ; RV32IM-NEXT: mul t2, a0, t2 |
| ; RV32IM-NEXT: xor t0, t0, t2 |
| ; RV32IM-NEXT: sw t0, 20(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi s7, a2, 16 |
| ; RV32IM-NEXT: and t0, a2, s8 |
| ; RV32IM-NEXT: and t2, a2, s9 |
| ; RV32IM-NEXT: mul t0, a0, t0 |
| ; RV32IM-NEXT: mul t2, a0, t2 |
| ; RV32IM-NEXT: xor t0, t0, t2 |
| ; RV32IM-NEXT: sw t0, 16(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli s8, a0, 5 |
| ; RV32IM-NEXT: and t0, a2, s10 |
| ; RV32IM-NEXT: and s9, a2, s11 |
| ; RV32IM-NEXT: mul t0, a0, t0 |
| ; RV32IM-NEXT: mul s9, a0, s9 |
| ; RV32IM-NEXT: xor t0, t0, s9 |
| ; RV32IM-NEXT: sw t0, 12(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi s9, a2, 32 |
| ; RV32IM-NEXT: seqz t4, t4 |
| ; RV32IM-NEXT: addi t4, t4, -1 |
| ; RV32IM-NEXT: and t0, t4, t3 |
| ; RV32IM-NEXT: sw t0, 8(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli s10, a0, 6 |
| ; RV32IM-NEXT: seqz t4, s0 |
| ; RV32IM-NEXT: addi t4, t4, -1 |
| ; RV32IM-NEXT: and t0, t4, t6 |
| ; RV32IM-NEXT: sw t0, 4(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi s11, a2, 64 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: and t6, a7, a1 |
| ; RV32IM-NEXT: slli a1, a0, 7 |
| ; RV32IM-NEXT: seqz a7, s7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: and s0, a7, a3 |
| ; RV32IM-NEXT: andi a3, a2, 128 |
| ; RV32IM-NEXT: seqz a7, s9 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: and s8, a7, s8 |
| ; RV32IM-NEXT: slli a7, a0, 8 |
| ; RV32IM-NEXT: seqz s7, s11 |
| ; RV32IM-NEXT: addi s7, s7, -1 |
| ; RV32IM-NEXT: and s7, s7, s10 |
| ; RV32IM-NEXT: andi s10, a2, 256 |
| ; RV32IM-NEXT: seqz a3, a3 |
| ; RV32IM-NEXT: addi a3, a3, -1 |
| ; RV32IM-NEXT: and s9, a3, a1 |
| ; RV32IM-NEXT: slli a1, a0, 9 |
| ; RV32IM-NEXT: seqz a3, s10 |
| ; RV32IM-NEXT: addi a3, a3, -1 |
| ; RV32IM-NEXT: and s11, a3, a7 |
| ; RV32IM-NEXT: andi a3, a2, 512 |
| ; RV32IM-NEXT: seqz a3, a3 |
| ; RV32IM-NEXT: addi a3, a3, -1 |
| ; RV32IM-NEXT: and s10, a3, a1 |
| ; RV32IM-NEXT: lui a1, 16384 |
| ; RV32IM-NEXT: lui a3, 2 |
| ; RV32IM-NEXT: and a3, a2, a3 |
| ; RV32IM-NEXT: and a7, a2, t5 |
| ; RV32IM-NEXT: and s1, a2, s1 |
| ; RV32IM-NEXT: and t5, a2, a4 |
| ; RV32IM-NEXT: and s2, a2, s2 |
| ; RV32IM-NEXT: and s3, a2, s3 |
| ; RV32IM-NEXT: and s4, a2, s4 |
| ; RV32IM-NEXT: and s5, a2, s5 |
| ; RV32IM-NEXT: and s6, a2, s6 |
| ; RV32IM-NEXT: and a4, a2, a1 |
| ; RV32IM-NEXT: lui ra, 32768 |
| ; RV32IM-NEXT: and ra, a2, ra |
| ; RV32IM-NEXT: lui t2, 65536 |
| ; RV32IM-NEXT: and t2, a2, t2 |
| ; RV32IM-NEXT: lui t0, 131072 |
| ; RV32IM-NEXT: and t0, a2, t0 |
| ; RV32IM-NEXT: lui t3, 262144 |
| ; RV32IM-NEXT: and t3, a2, t3 |
| ; RV32IM-NEXT: lui t4, 524288 |
| ; RV32IM-NEXT: and t4, a2, t4 |
| ; RV32IM-NEXT: andi a1, a2, 1 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: mul a3, a0, a3 |
| ; RV32IM-NEXT: mul a7, a0, a7 |
| ; RV32IM-NEXT: mul s1, a0, s1 |
| ; RV32IM-NEXT: mul t5, a0, t5 |
| ; RV32IM-NEXT: mul s2, a0, s2 |
| ; RV32IM-NEXT: mul s3, a0, s3 |
| ; RV32IM-NEXT: mul s4, a0, s4 |
| ; RV32IM-NEXT: mul s5, a0, s5 |
| ; RV32IM-NEXT: mul s6, a0, s6 |
| ; RV32IM-NEXT: mul a4, a0, a4 |
| ; RV32IM-NEXT: mul ra, a0, ra |
| ; RV32IM-NEXT: mul t2, a0, t2 |
| ; RV32IM-NEXT: mul t0, a0, t0 |
| ; RV32IM-NEXT: mul t3, a0, t3 |
| ; RV32IM-NEXT: mul t4, a0, t4 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: and a1, a1, a0 |
| ; RV32IM-NEXT: slli a0, a0, 10 |
| ; RV32IM-NEXT: andi a2, a2, 1024 |
| ; RV32IM-NEXT: seqz a2, a2 |
| ; RV32IM-NEXT: addi a2, a2, -1 |
| ; RV32IM-NEXT: and a0, a2, a0 |
| ; RV32IM-NEXT: lw a2, 20(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a2, a3 |
| ; RV32IM-NEXT: lw a3, 16(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, s3 |
| ; RV32IM-NEXT: lw s3, 12(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, s3, a4 |
| ; RV32IM-NEXT: lw s3, 8(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a1, s3 |
| ; RV32IM-NEXT: lw s3, 4(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t6, s3, t6 |
| ; RV32IM-NEXT: xor s0, s0, s8 |
| ; RV32IM-NEXT: xor s3, s9, s11 |
| ; RV32IM-NEXT: xor a2, a2, a7 |
| ; RV32IM-NEXT: xor a3, a3, s4 |
| ; RV32IM-NEXT: xor a4, a4, ra |
| ; RV32IM-NEXT: xor a1, a1, t6 |
| ; RV32IM-NEXT: xor a7, s0, s7 |
| ; RV32IM-NEXT: xor t6, s3, s10 |
| ; RV32IM-NEXT: xor a2, a2, s1 |
| ; RV32IM-NEXT: xor a3, a3, s5 |
| ; RV32IM-NEXT: xor a4, a4, t2 |
| ; RV32IM-NEXT: xor a1, a1, a7 |
| ; RV32IM-NEXT: xor a0, t6, a0 |
| ; RV32IM-NEXT: xor a2, a2, t5 |
| ; RV32IM-NEXT: xor a3, a3, s6 |
| ; RV32IM-NEXT: xor a4, a4, t0 |
| ; RV32IM-NEXT: xor a0, a1, a0 |
| ; RV32IM-NEXT: xor a1, a2, s2 |
| ; RV32IM-NEXT: xor a2, a4, t3 |
| ; RV32IM-NEXT: slli a4, a0, 24 |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: xor a1, a2, t4 |
| ; RV32IM-NEXT: xor a0, a0, a3 |
| ; RV32IM-NEXT: and a2, a0, a6 |
| ; RV32IM-NEXT: srli a3, a0, 8 |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: slli a2, a2, 8 |
| ; RV32IM-NEXT: and a1, a3, a6 |
| ; RV32IM-NEXT: srli a0, a0, 24 |
| ; RV32IM-NEXT: or a2, a4, a2 |
| ; RV32IM-NEXT: or a0, a1, a0 |
| ; RV32IM-NEXT: or a0, a2, a0 |
| ; RV32IM-NEXT: srli a1, a0, 4 |
| ; RV32IM-NEXT: and a0, a0, a5 |
| ; RV32IM-NEXT: and a1, a1, a5 |
| ; RV32IM-NEXT: slli a0, a0, 4 |
| ; RV32IM-NEXT: or a0, a1, a0 |
| ; RV32IM-NEXT: srli a1, a0, 2 |
| ; RV32IM-NEXT: and a0, a0, t1 |
| ; RV32IM-NEXT: and a1, a1, t1 |
| ; RV32IM-NEXT: slli a0, a0, 2 |
| ; RV32IM-NEXT: or a0, a1, a0 |
| ; RV32IM-NEXT: srli a1, a0, 1 |
| ; RV32IM-NEXT: lw a2, 24(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: slli a0, a0, 1 |
| ; RV32IM-NEXT: or a0, a1, a0 |
| ; RV32IM-NEXT: lw ra, 76(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s0, 72(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s1, 68(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s2, 64(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s3, 60(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s4, 56(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 52(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s6, 48(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s7, 44(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s8, 40(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s9, 36(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s10, 32(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s11, 28(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: addi sp, sp, 80 |
| ; RV32IM-NEXT: ret |
| ; |
| ; RV64IM-LABEL: clmulr_i32: |
| ; RV64IM: # %bb.0: |
| ; RV64IM-NEXT: addi sp, sp, -16 |
| ; RV64IM-NEXT: sd s0, 8(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s1, 0(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli a0, a0, 32 |
| ; RV64IM-NEXT: andi a2, a1, 2 |
| ; RV64IM-NEXT: andi a3, a1, 4 |
| ; RV64IM-NEXT: andi a4, a1, 8 |
| ; RV64IM-NEXT: andi a6, a1, 16 |
| ; RV64IM-NEXT: andi a7, a1, 32 |
| ; RV64IM-NEXT: andi t1, a1, 64 |
| ; RV64IM-NEXT: andi t2, a1, 128 |
| ; RV64IM-NEXT: andi t3, a1, 256 |
| ; RV64IM-NEXT: andi t4, a1, 512 |
| ; RV64IM-NEXT: andi t6, a1, 1024 |
| ; RV64IM-NEXT: lui t5, 16 |
| ; RV64IM-NEXT: lui s0, 32 |
| ; RV64IM-NEXT: srli a5, a0, 31 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: and a5, a2, a5 |
| ; RV64IM-NEXT: srli a2, a0, 30 |
| ; RV64IM-NEXT: seqz a3, a3 |
| ; RV64IM-NEXT: addi a3, a3, -1 |
| ; RV64IM-NEXT: and t0, a3, a2 |
| ; RV64IM-NEXT: srli a2, a0, 29 |
| ; RV64IM-NEXT: seqz a3, a4 |
| ; RV64IM-NEXT: addi a3, a3, -1 |
| ; RV64IM-NEXT: and a4, a3, a2 |
| ; RV64IM-NEXT: srli a2, a0, 28 |
| ; RV64IM-NEXT: seqz a3, a6 |
| ; RV64IM-NEXT: addi a3, a3, -1 |
| ; RV64IM-NEXT: and a6, a3, a2 |
| ; RV64IM-NEXT: srli a2, a0, 27 |
| ; RV64IM-NEXT: seqz a3, a7 |
| ; RV64IM-NEXT: addi a3, a3, -1 |
| ; RV64IM-NEXT: and s1, a3, a2 |
| ; RV64IM-NEXT: srli a2, a0, 26 |
| ; RV64IM-NEXT: seqz a3, t1 |
| ; RV64IM-NEXT: addi a3, a3, -1 |
| ; RV64IM-NEXT: and a2, a3, a2 |
| ; RV64IM-NEXT: srli a3, a0, 25 |
| ; RV64IM-NEXT: seqz a7, t2 |
| ; RV64IM-NEXT: addi a7, a7, -1 |
| ; RV64IM-NEXT: and t1, a7, a3 |
| ; RV64IM-NEXT: srli a3, a0, 24 |
| ; RV64IM-NEXT: seqz a7, t3 |
| ; RV64IM-NEXT: addi a7, a7, -1 |
| ; RV64IM-NEXT: and t2, a7, a3 |
| ; RV64IM-NEXT: srli a3, a0, 23 |
| ; RV64IM-NEXT: seqz a7, t4 |
| ; RV64IM-NEXT: addi a7, a7, -1 |
| ; RV64IM-NEXT: and a7, a7, a3 |
| ; RV64IM-NEXT: srli a3, a0, 22 |
| ; RV64IM-NEXT: seqz t3, t6 |
| ; RV64IM-NEXT: addi t3, t3, -1 |
| ; RV64IM-NEXT: and a3, t3, a3 |
| ; RV64IM-NEXT: lui t3, 2048 |
| ; RV64IM-NEXT: srli a0, a0, 32 |
| ; RV64IM-NEXT: and t4, a1, t5 |
| ; RV64IM-NEXT: and s0, a1, s0 |
| ; RV64IM-NEXT: mul t4, a0, t4 |
| ; RV64IM-NEXT: mul t5, a0, s0 |
| ; RV64IM-NEXT: xor t4, t4, t5 |
| ; RV64IM-NEXT: lui t5, 4096 |
| ; RV64IM-NEXT: and t3, a1, t3 |
| ; RV64IM-NEXT: and t5, a1, t5 |
| ; RV64IM-NEXT: mul t3, a0, t3 |
| ; RV64IM-NEXT: mul t5, a0, t5 |
| ; RV64IM-NEXT: xor t3, t3, t5 |
| ; RV64IM-NEXT: andi t5, a1, 1 |
| ; RV64IM-NEXT: seqz t5, t5 |
| ; RV64IM-NEXT: addi t5, t5, -1 |
| ; RV64IM-NEXT: and t5, t5, a0 |
| ; RV64IM-NEXT: xor a5, t5, a5 |
| ; RV64IM-NEXT: xor a4, t0, a4 |
| ; RV64IM-NEXT: xor a6, a6, s1 |
| ; RV64IM-NEXT: li t0, 1 |
| ; RV64IM-NEXT: xor t1, t1, t2 |
| ; RV64IM-NEXT: lui t2, 1 |
| ; RV64IM-NEXT: slli t0, t0, 11 |
| ; RV64IM-NEXT: and t2, a1, t2 |
| ; RV64IM-NEXT: and t0, a1, t0 |
| ; RV64IM-NEXT: mul t2, a0, t2 |
| ; RV64IM-NEXT: mul t0, a0, t0 |
| ; RV64IM-NEXT: xor t0, t0, t2 |
| ; RV64IM-NEXT: lui t2, 64 |
| ; RV64IM-NEXT: and t2, a1, t2 |
| ; RV64IM-NEXT: mul t2, a0, t2 |
| ; RV64IM-NEXT: xor t2, t4, t2 |
| ; RV64IM-NEXT: lui t4, 8192 |
| ; RV64IM-NEXT: and t4, a1, t4 |
| ; RV64IM-NEXT: mul t4, a0, t4 |
| ; RV64IM-NEXT: xor t3, t3, t4 |
| ; RV64IM-NEXT: xor a4, a5, a4 |
| ; RV64IM-NEXT: xor a2, a6, a2 |
| ; RV64IM-NEXT: xor a5, t1, a7 |
| ; RV64IM-NEXT: lui a6, 2 |
| ; RV64IM-NEXT: and a6, a1, a6 |
| ; RV64IM-NEXT: mul a6, a0, a6 |
| ; RV64IM-NEXT: xor a6, t0, a6 |
| ; RV64IM-NEXT: lui a7, 128 |
| ; RV64IM-NEXT: and a7, a1, a7 |
| ; RV64IM-NEXT: mul a7, a0, a7 |
| ; RV64IM-NEXT: xor a7, t2, a7 |
| ; RV64IM-NEXT: lui t0, 16384 |
| ; RV64IM-NEXT: and t0, a1, t0 |
| ; RV64IM-NEXT: mul t0, a0, t0 |
| ; RV64IM-NEXT: xor t0, t3, t0 |
| ; RV64IM-NEXT: xor a2, a4, a2 |
| ; RV64IM-NEXT: xor a3, a5, a3 |
| ; RV64IM-NEXT: lui a4, 4 |
| ; RV64IM-NEXT: and a4, a1, a4 |
| ; RV64IM-NEXT: mul a4, a0, a4 |
| ; RV64IM-NEXT: xor a4, a6, a4 |
| ; RV64IM-NEXT: lui a5, 256 |
| ; RV64IM-NEXT: and a5, a1, a5 |
| ; RV64IM-NEXT: mul a5, a0, a5 |
| ; RV64IM-NEXT: xor a5, a7, a5 |
| ; RV64IM-NEXT: lui a6, 32768 |
| ; RV64IM-NEXT: and a6, a1, a6 |
| ; RV64IM-NEXT: mul a6, a0, a6 |
| ; RV64IM-NEXT: xor a6, t0, a6 |
| ; RV64IM-NEXT: xor a2, a2, a3 |
| ; RV64IM-NEXT: lui a3, 8 |
| ; RV64IM-NEXT: and a3, a1, a3 |
| ; RV64IM-NEXT: mul a3, a0, a3 |
| ; RV64IM-NEXT: xor a3, a4, a3 |
| ; RV64IM-NEXT: lui a4, 512 |
| ; RV64IM-NEXT: and a4, a1, a4 |
| ; RV64IM-NEXT: mul a4, a0, a4 |
| ; RV64IM-NEXT: xor a4, a5, a4 |
| ; RV64IM-NEXT: lui a5, 65536 |
| ; RV64IM-NEXT: and a5, a1, a5 |
| ; RV64IM-NEXT: mul a5, a0, a5 |
| ; RV64IM-NEXT: xor a5, a6, a5 |
| ; RV64IM-NEXT: lui a6, 1024 |
| ; RV64IM-NEXT: xor a2, a2, a3 |
| ; RV64IM-NEXT: lui a3, 131072 |
| ; RV64IM-NEXT: and a6, a1, a6 |
| ; RV64IM-NEXT: mul a6, a0, a6 |
| ; RV64IM-NEXT: xor a4, a4, a6 |
| ; RV64IM-NEXT: lui a6, 262144 |
| ; RV64IM-NEXT: and a3, a1, a3 |
| ; RV64IM-NEXT: and a6, a1, a6 |
| ; RV64IM-NEXT: srliw a1, a1, 31 |
| ; RV64IM-NEXT: slli a1, a1, 31 |
| ; RV64IM-NEXT: mul a3, a0, a3 |
| ; RV64IM-NEXT: mul a6, a0, a6 |
| ; RV64IM-NEXT: xor a3, a5, a3 |
| ; RV64IM-NEXT: xor a2, a2, a4 |
| ; RV64IM-NEXT: xor a3, a3, a6 |
| ; RV64IM-NEXT: xor a2, a2, a3 |
| ; RV64IM-NEXT: mul a0, a0, a1 |
| ; RV64IM-NEXT: xor a0, a2, a0 |
| ; RV64IM-NEXT: srli a0, a0, 31 |
| ; RV64IM-NEXT: ld s0, 8(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s1, 0(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: addi sp, sp, 16 |
| ; RV64IM-NEXT: ret |
| ; |
| ; RV32IMZBS-LABEL: clmulr_i32: |
| ; RV32IMZBS: # %bb.0: |
| ; RV32IMZBS-NEXT: addi sp, sp, -96 |
| ; RV32IMZBS-NEXT: sw ra, 92(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s0, 88(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s1, 84(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s2, 80(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s3, 76(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s4, 72(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s5, 68(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s6, 64(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s7, 60(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s8, 56(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s9, 52(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s10, 48(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s11, 44(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: srli a2, a0, 8 |
| ; RV32IMZBS-NEXT: lui a3, 16 |
| ; RV32IMZBS-NEXT: srli a7, a0, 24 |
| ; RV32IMZBS-NEXT: slli t0, a0, 24 |
| ; RV32IMZBS-NEXT: lui a4, 61681 |
| ; RV32IMZBS-NEXT: lui a6, 209715 |
| ; RV32IMZBS-NEXT: lui t1, 349525 |
| ; RV32IMZBS-NEXT: srli t2, a1, 8 |
| ; RV32IMZBS-NEXT: srli t3, a1, 24 |
| ; RV32IMZBS-NEXT: slli t4, a1, 24 |
| ; RV32IMZBS-NEXT: addi t5, a3, -256 |
| ; RV32IMZBS-NEXT: sw t5, 40(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: addi a5, a4, -241 |
| ; RV32IMZBS-NEXT: sw a5, 36(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: addi a4, a6, 819 |
| ; RV32IMZBS-NEXT: addi a3, t1, 1365 |
| ; RV32IMZBS-NEXT: and a2, a2, t5 |
| ; RV32IMZBS-NEXT: and a0, a0, t5 |
| ; RV32IMZBS-NEXT: and t1, t2, t5 |
| ; RV32IMZBS-NEXT: and a1, a1, t5 |
| ; RV32IMZBS-NEXT: or a2, a2, a7 |
| ; RV32IMZBS-NEXT: slli a0, a0, 8 |
| ; RV32IMZBS-NEXT: or a7, t1, t3 |
| ; RV32IMZBS-NEXT: slli a1, a1, 8 |
| ; RV32IMZBS-NEXT: or a0, t0, a0 |
| ; RV32IMZBS-NEXT: or a1, t4, a1 |
| ; RV32IMZBS-NEXT: or a0, a0, a2 |
| ; RV32IMZBS-NEXT: or a1, a1, a7 |
| ; RV32IMZBS-NEXT: srli a2, a0, 4 |
| ; RV32IMZBS-NEXT: and a0, a0, a5 |
| ; RV32IMZBS-NEXT: srli a7, a1, 4 |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: and a2, a2, a5 |
| ; RV32IMZBS-NEXT: slli a0, a0, 4 |
| ; RV32IMZBS-NEXT: and a7, a7, a5 |
| ; RV32IMZBS-NEXT: slli a1, a1, 4 |
| ; RV32IMZBS-NEXT: or a0, a2, a0 |
| ; RV32IMZBS-NEXT: or a1, a7, a1 |
| ; RV32IMZBS-NEXT: srli a2, a0, 2 |
| ; RV32IMZBS-NEXT: sw a4, 32(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a4 |
| ; RV32IMZBS-NEXT: srli a7, a1, 2 |
| ; RV32IMZBS-NEXT: and a1, a1, a4 |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: slli a0, a0, 2 |
| ; RV32IMZBS-NEXT: and a7, a7, a4 |
| ; RV32IMZBS-NEXT: slli a1, a1, 2 |
| ; RV32IMZBS-NEXT: or a0, a2, a0 |
| ; RV32IMZBS-NEXT: or a1, a7, a1 |
| ; RV32IMZBS-NEXT: srli a2, a0, 1 |
| ; RV32IMZBS-NEXT: sw a3, 28(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: srli a7, a1, 1 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: and t0, a2, a3 |
| ; RV32IMZBS-NEXT: slli a0, a0, 1 |
| ; RV32IMZBS-NEXT: and a3, a7, a3 |
| ; RV32IMZBS-NEXT: slli a2, a1, 1 |
| ; RV32IMZBS-NEXT: or s9, t0, a0 |
| ; RV32IMZBS-NEXT: or a1, a3, a2 |
| ; RV32IMZBS-NEXT: srli a2, a2, 31 |
| ; RV32IMZBS-NEXT: slli a0, s9, 1 |
| ; RV32IMZBS-NEXT: andi t0, a1, 2 |
| ; RV32IMZBS-NEXT: slli t2, s9, 2 |
| ; RV32IMZBS-NEXT: andi t3, a1, 4 |
| ; RV32IMZBS-NEXT: slli t4, s9, 3 |
| ; RV32IMZBS-NEXT: andi t5, a1, 8 |
| ; RV32IMZBS-NEXT: slli t6, s9, 4 |
| ; RV32IMZBS-NEXT: andi s0, a1, 16 |
| ; RV32IMZBS-NEXT: slli a7, s9, 5 |
| ; RV32IMZBS-NEXT: andi s2, a1, 32 |
| ; RV32IMZBS-NEXT: slli s3, s9, 6 |
| ; RV32IMZBS-NEXT: andi s4, a1, 64 |
| ; RV32IMZBS-NEXT: slli s5, s9, 7 |
| ; RV32IMZBS-NEXT: andi s6, a1, 128 |
| ; RV32IMZBS-NEXT: slli s1, s9, 8 |
| ; RV32IMZBS-NEXT: andi s7, a1, 256 |
| ; RV32IMZBS-NEXT: slli s8, s9, 9 |
| ; RV32IMZBS-NEXT: andi s10, a1, 512 |
| ; RV32IMZBS-NEXT: slli s11, s9, 10 |
| ; RV32IMZBS-NEXT: andi ra, a1, 1024 |
| ; RV32IMZBS-NEXT: slli t1, s9, 31 |
| ; RV32IMZBS-NEXT: seqz a2, a2 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: and a2, a2, t1 |
| ; RV32IMZBS-NEXT: sw a2, 24(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a6, s9, 11 |
| ; RV32IMZBS-NEXT: seqz t0, t0 |
| ; RV32IMZBS-NEXT: addi t0, t0, -1 |
| ; RV32IMZBS-NEXT: and a0, t0, a0 |
| ; RV32IMZBS-NEXT: sw a0, 20(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: not t1, a1 |
| ; RV32IMZBS-NEXT: seqz t0, t3 |
| ; RV32IMZBS-NEXT: addi t0, t0, -1 |
| ; RV32IMZBS-NEXT: and a0, t0, t2 |
| ; RV32IMZBS-NEXT: sw a0, 16(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s9, 12 |
| ; RV32IMZBS-NEXT: seqz t2, t5 |
| ; RV32IMZBS-NEXT: addi t2, t2, -1 |
| ; RV32IMZBS-NEXT: and a0, t2, t4 |
| ; RV32IMZBS-NEXT: sw a0, 12(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, s9, 13 |
| ; RV32IMZBS-NEXT: seqz t3, s0 |
| ; RV32IMZBS-NEXT: addi t3, t3, -1 |
| ; RV32IMZBS-NEXT: and a0, t3, t6 |
| ; RV32IMZBS-NEXT: sw a0, 8(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s9, 14 |
| ; RV32IMZBS-NEXT: seqz t4, s2 |
| ; RV32IMZBS-NEXT: addi t4, t4, -1 |
| ; RV32IMZBS-NEXT: and t5, t4, a7 |
| ; RV32IMZBS-NEXT: slli a2, s9, 15 |
| ; RV32IMZBS-NEXT: seqz t4, s4 |
| ; RV32IMZBS-NEXT: addi t4, t4, -1 |
| ; RV32IMZBS-NEXT: and a0, t4, s3 |
| ; RV32IMZBS-NEXT: sw a0, 4(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli s3, s9, 16 |
| ; RV32IMZBS-NEXT: seqz t6, s6 |
| ; RV32IMZBS-NEXT: addi t6, t6, -1 |
| ; RV32IMZBS-NEXT: and s0, t6, s5 |
| ; RV32IMZBS-NEXT: slli s4, s9, 17 |
| ; RV32IMZBS-NEXT: seqz t6, s7 |
| ; RV32IMZBS-NEXT: addi t6, t6, -1 |
| ; RV32IMZBS-NEXT: and s2, t6, s1 |
| ; RV32IMZBS-NEXT: slli a0, s9, 18 |
| ; RV32IMZBS-NEXT: seqz t6, s10 |
| ; RV32IMZBS-NEXT: addi t6, t6, -1 |
| ; RV32IMZBS-NEXT: and t4, t6, s8 |
| ; RV32IMZBS-NEXT: slli a7, s9, 19 |
| ; RV32IMZBS-NEXT: seqz t6, ra |
| ; RV32IMZBS-NEXT: addi t6, t6, -1 |
| ; RV32IMZBS-NEXT: and t6, t6, s11 |
| ; RV32IMZBS-NEXT: bexti s5, t1, 11 |
| ; RV32IMZBS-NEXT: addi s5, s5, -1 |
| ; RV32IMZBS-NEXT: and s6, s5, a6 |
| ; RV32IMZBS-NEXT: bexti a6, t1, 12 |
| ; RV32IMZBS-NEXT: addi a6, a6, -1 |
| ; RV32IMZBS-NEXT: and t0, a6, a5 |
| ; RV32IMZBS-NEXT: bexti a5, t1, 13 |
| ; RV32IMZBS-NEXT: addi a5, a5, -1 |
| ; RV32IMZBS-NEXT: and s5, a5, a4 |
| ; RV32IMZBS-NEXT: bexti a4, t1, 14 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: and t2, a4, a3 |
| ; RV32IMZBS-NEXT: bexti a3, t1, 15 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: and t3, a3, a2 |
| ; RV32IMZBS-NEXT: bexti a2, t1, 16 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: and ra, a2, s3 |
| ; RV32IMZBS-NEXT: bexti a2, t1, 17 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: and a2, a2, s4 |
| ; RV32IMZBS-NEXT: bexti a5, t1, 18 |
| ; RV32IMZBS-NEXT: addi a5, a5, -1 |
| ; RV32IMZBS-NEXT: and s11, a5, a0 |
| ; RV32IMZBS-NEXT: bexti a5, t1, 19 |
| ; RV32IMZBS-NEXT: addi a5, a5, -1 |
| ; RV32IMZBS-NEXT: and a3, a5, a7 |
| ; RV32IMZBS-NEXT: bexti a5, t1, 20 |
| ; RV32IMZBS-NEXT: addi a5, a5, -1 |
| ; RV32IMZBS-NEXT: slli a6, s9, 20 |
| ; RV32IMZBS-NEXT: and a4, a5, a6 |
| ; RV32IMZBS-NEXT: bexti a5, t1, 21 |
| ; RV32IMZBS-NEXT: addi a5, a5, -1 |
| ; RV32IMZBS-NEXT: slli a6, s9, 21 |
| ; RV32IMZBS-NEXT: and s10, a5, a6 |
| ; RV32IMZBS-NEXT: bexti a5, t1, 22 |
| ; RV32IMZBS-NEXT: addi a5, a5, -1 |
| ; RV32IMZBS-NEXT: slli a6, s9, 22 |
| ; RV32IMZBS-NEXT: and a5, a5, a6 |
| ; RV32IMZBS-NEXT: bexti a6, t1, 23 |
| ; RV32IMZBS-NEXT: addi a6, a6, -1 |
| ; RV32IMZBS-NEXT: slli s3, s9, 23 |
| ; RV32IMZBS-NEXT: and a6, a6, s3 |
| ; RV32IMZBS-NEXT: bexti s3, t1, 24 |
| ; RV32IMZBS-NEXT: addi s3, s3, -1 |
| ; RV32IMZBS-NEXT: slli s4, s9, 24 |
| ; RV32IMZBS-NEXT: and s3, s3, s4 |
| ; RV32IMZBS-NEXT: bexti s4, t1, 25 |
| ; RV32IMZBS-NEXT: addi s4, s4, -1 |
| ; RV32IMZBS-NEXT: slli a0, s9, 25 |
| ; RV32IMZBS-NEXT: and a0, s4, a0 |
| ; RV32IMZBS-NEXT: bexti s4, t1, 26 |
| ; RV32IMZBS-NEXT: addi s4, s4, -1 |
| ; RV32IMZBS-NEXT: slli a7, s9, 26 |
| ; RV32IMZBS-NEXT: and a7, s4, a7 |
| ; RV32IMZBS-NEXT: bexti s4, t1, 27 |
| ; RV32IMZBS-NEXT: addi s4, s4, -1 |
| ; RV32IMZBS-NEXT: slli s1, s9, 27 |
| ; RV32IMZBS-NEXT: and s1, s4, s1 |
| ; RV32IMZBS-NEXT: bexti s4, t1, 28 |
| ; RV32IMZBS-NEXT: addi s4, s4, -1 |
| ; RV32IMZBS-NEXT: slli s7, s9, 28 |
| ; RV32IMZBS-NEXT: and s4, s4, s7 |
| ; RV32IMZBS-NEXT: bexti s7, t1, 29 |
| ; RV32IMZBS-NEXT: addi s7, s7, -1 |
| ; RV32IMZBS-NEXT: slli s8, s9, 29 |
| ; RV32IMZBS-NEXT: and s7, s7, s8 |
| ; RV32IMZBS-NEXT: andi a1, a1, 1 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: and a1, a1, s9 |
| ; RV32IMZBS-NEXT: slli s9, s9, 30 |
| ; RV32IMZBS-NEXT: bexti t1, t1, 30 |
| ; RV32IMZBS-NEXT: addi t1, t1, -1 |
| ; RV32IMZBS-NEXT: and t1, t1, s9 |
| ; RV32IMZBS-NEXT: lw s8, 20(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, s8 |
| ; RV32IMZBS-NEXT: lw s8, 16(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 12(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s8, s9 |
| ; RV32IMZBS-NEXT: lw s9, 8(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t5, s9, t5 |
| ; RV32IMZBS-NEXT: xor s0, s0, s2 |
| ; RV32IMZBS-NEXT: xor t0, s6, t0 |
| ; RV32IMZBS-NEXT: xor a2, ra, a2 |
| ; RV32IMZBS-NEXT: xor a5, a5, a6 |
| ; RV32IMZBS-NEXT: xor a6, s7, t1 |
| ; RV32IMZBS-NEXT: xor a1, a1, s8 |
| ; RV32IMZBS-NEXT: lw t1, 4(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, t5, t1 |
| ; RV32IMZBS-NEXT: xor t4, s0, t4 |
| ; RV32IMZBS-NEXT: xor t0, t0, s5 |
| ; RV32IMZBS-NEXT: xor a2, a2, s11 |
| ; RV32IMZBS-NEXT: xor a5, a5, s3 |
| ; RV32IMZBS-NEXT: lw t5, 24(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a6, a6, t5 |
| ; RV32IMZBS-NEXT: xor a1, a1, t1 |
| ; RV32IMZBS-NEXT: xor t1, t4, t6 |
| ; RV32IMZBS-NEXT: xor t0, t0, t2 |
| ; RV32IMZBS-NEXT: xor a2, a2, a3 |
| ; RV32IMZBS-NEXT: xor a0, a5, a0 |
| ; RV32IMZBS-NEXT: xor a1, a1, t1 |
| ; RV32IMZBS-NEXT: xor a3, t0, t3 |
| ; RV32IMZBS-NEXT: xor a2, a2, a4 |
| ; RV32IMZBS-NEXT: xor a0, a0, a7 |
| ; RV32IMZBS-NEXT: xor a1, a1, a3 |
| ; RV32IMZBS-NEXT: xor a2, a2, s10 |
| ; RV32IMZBS-NEXT: xor a0, a0, s1 |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: xor a0, a0, s4 |
| ; RV32IMZBS-NEXT: xor a0, a1, a0 |
| ; RV32IMZBS-NEXT: xor a0, a0, a6 |
| ; RV32IMZBS-NEXT: srli a1, a0, 8 |
| ; RV32IMZBS-NEXT: srli a2, a0, 24 |
| ; RV32IMZBS-NEXT: slli a3, a0, 24 |
| ; RV32IMZBS-NEXT: lw a4, 40(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and a0, a0, a4 |
| ; RV32IMZBS-NEXT: and a1, a1, a4 |
| ; RV32IMZBS-NEXT: slli a0, a0, 8 |
| ; RV32IMZBS-NEXT: or a1, a1, a2 |
| ; RV32IMZBS-NEXT: or a0, a3, a0 |
| ; RV32IMZBS-NEXT: or a0, a0, a1 |
| ; RV32IMZBS-NEXT: srli a1, a0, 4 |
| ; RV32IMZBS-NEXT: lw a2, 36(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: slli a0, a0, 4 |
| ; RV32IMZBS-NEXT: or a0, a1, a0 |
| ; RV32IMZBS-NEXT: srli a1, a0, 2 |
| ; RV32IMZBS-NEXT: lw a2, 32(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: slli a0, a0, 2 |
| ; RV32IMZBS-NEXT: or a0, a1, a0 |
| ; RV32IMZBS-NEXT: srli a1, a0, 1 |
| ; RV32IMZBS-NEXT: lw a2, 28(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: slli a0, a0, 1 |
| ; RV32IMZBS-NEXT: or a0, a1, a0 |
| ; RV32IMZBS-NEXT: lw ra, 92(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s0, 88(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s1, 84(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s2, 80(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s3, 76(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s4, 72(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s5, 68(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s6, 64(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s7, 60(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s8, 56(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 52(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s10, 48(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s11, 44(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: addi sp, sp, 96 |
| ; RV32IMZBS-NEXT: ret |
| ; |
| ; RV64IMZBS-LABEL: clmulr_i32: |
| ; RV64IMZBS: # %bb.0: |
| ; RV64IMZBS-NEXT: addi sp, sp, -176 |
| ; RV64IMZBS-NEXT: sd ra, 168(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s0, 160(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s1, 152(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s2, 144(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s3, 136(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s4, 128(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s5, 120(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s6, 112(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s7, 104(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s8, 96(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s9, 88(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s10, 80(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s11, 72(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: mv s3, a1 |
| ; RV64IMZBS-NEXT: slli a2, a0, 32 |
| ; RV64IMZBS-NEXT: andi a3, a1, 2 |
| ; RV64IMZBS-NEXT: andi a4, a1, 1 |
| ; RV64IMZBS-NEXT: andi a5, a1, 4 |
| ; RV64IMZBS-NEXT: andi a6, a1, 8 |
| ; RV64IMZBS-NEXT: andi a7, a1, 16 |
| ; RV64IMZBS-NEXT: andi t0, a1, 32 |
| ; RV64IMZBS-NEXT: andi t1, a1, 64 |
| ; RV64IMZBS-NEXT: andi t2, a1, 128 |
| ; RV64IMZBS-NEXT: andi t3, a1, 256 |
| ; RV64IMZBS-NEXT: andi t4, a1, 512 |
| ; RV64IMZBS-NEXT: andi t5, a1, 1024 |
| ; RV64IMZBS-NEXT: not s2, a1 |
| ; RV64IMZBS-NEXT: srli t6, a2, 32 |
| ; RV64IMZBS-NEXT: srli s0, a2, 31 |
| ; RV64IMZBS-NEXT: seqz a3, a3 |
| ; RV64IMZBS-NEXT: seqz a4, a4 |
| ; RV64IMZBS-NEXT: srli a0, a2, 30 |
| ; RV64IMZBS-NEXT: seqz a5, a5 |
| ; RV64IMZBS-NEXT: srli s1, a2, 29 |
| ; RV64IMZBS-NEXT: seqz a6, a6 |
| ; RV64IMZBS-NEXT: srli a1, a2, 28 |
| ; RV64IMZBS-NEXT: seqz a7, a7 |
| ; RV64IMZBS-NEXT: srli s4, a2, 27 |
| ; RV64IMZBS-NEXT: seqz t0, t0 |
| ; RV64IMZBS-NEXT: srli s5, a2, 26 |
| ; RV64IMZBS-NEXT: seqz s6, t1 |
| ; RV64IMZBS-NEXT: srli s7, a2, 25 |
| ; RV64IMZBS-NEXT: seqz t2, t2 |
| ; RV64IMZBS-NEXT: srli s8, a2, 24 |
| ; RV64IMZBS-NEXT: seqz t3, t3 |
| ; RV64IMZBS-NEXT: srli s9, a2, 23 |
| ; RV64IMZBS-NEXT: seqz t4, t4 |
| ; RV64IMZBS-NEXT: srli s10, a2, 22 |
| ; RV64IMZBS-NEXT: seqz s11, t5 |
| ; RV64IMZBS-NEXT: srli ra, a2, 21 |
| ; RV64IMZBS-NEXT: bexti t1, s2, 11 |
| ; RV64IMZBS-NEXT: srli t5, a2, 20 |
| ; RV64IMZBS-NEXT: addi a3, a3, -1 |
| ; RV64IMZBS-NEXT: and a3, a3, s0 |
| ; RV64IMZBS-NEXT: sd a3, 64(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti s0, s2, 12 |
| ; RV64IMZBS-NEXT: addi a4, a4, -1 |
| ; RV64IMZBS-NEXT: and a3, a4, t6 |
| ; RV64IMZBS-NEXT: sd a3, 56(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: srli a3, a2, 19 |
| ; RV64IMZBS-NEXT: addi a5, a5, -1 |
| ; RV64IMZBS-NEXT: and a0, a5, a0 |
| ; RV64IMZBS-NEXT: sd a0, 48(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, s2, 13 |
| ; RV64IMZBS-NEXT: addi a6, a6, -1 |
| ; RV64IMZBS-NEXT: and a4, a6, s1 |
| ; RV64IMZBS-NEXT: sd a4, 40(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: srli a4, a2, 18 |
| ; RV64IMZBS-NEXT: addi a7, a7, -1 |
| ; RV64IMZBS-NEXT: and a1, a7, a1 |
| ; RV64IMZBS-NEXT: sd a1, 32(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti t6, s2, 14 |
| ; RV64IMZBS-NEXT: addi t0, t0, -1 |
| ; RV64IMZBS-NEXT: and a1, t0, s4 |
| ; RV64IMZBS-NEXT: sd a1, 16(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: srli s4, a2, 17 |
| ; RV64IMZBS-NEXT: addi s6, s6, -1 |
| ; RV64IMZBS-NEXT: and a1, s6, s5 |
| ; RV64IMZBS-NEXT: sd a1, 24(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti s5, s2, 15 |
| ; RV64IMZBS-NEXT: addi t2, t2, -1 |
| ; RV64IMZBS-NEXT: and a1, t2, s7 |
| ; RV64IMZBS-NEXT: sd a1, 8(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: srli s6, a2, 16 |
| ; RV64IMZBS-NEXT: addi t3, t3, -1 |
| ; RV64IMZBS-NEXT: and a7, t3, s8 |
| ; RV64IMZBS-NEXT: bexti s7, s2, 16 |
| ; RV64IMZBS-NEXT: addi t4, t4, -1 |
| ; RV64IMZBS-NEXT: and t3, t4, s9 |
| ; RV64IMZBS-NEXT: srli s8, a2, 15 |
| ; RV64IMZBS-NEXT: addi s11, s11, -1 |
| ; RV64IMZBS-NEXT: and t4, s11, s10 |
| ; RV64IMZBS-NEXT: bexti s9, s2, 17 |
| ; RV64IMZBS-NEXT: addi t1, t1, -1 |
| ; RV64IMZBS-NEXT: and t1, t1, ra |
| ; RV64IMZBS-NEXT: srli s10, a2, 14 |
| ; RV64IMZBS-NEXT: addi s0, s0, -1 |
| ; RV64IMZBS-NEXT: and a5, s0, t5 |
| ; RV64IMZBS-NEXT: bexti t5, s2, 18 |
| ; RV64IMZBS-NEXT: addi s0, a0, -1 |
| ; RV64IMZBS-NEXT: and s0, s0, a3 |
| ; RV64IMZBS-NEXT: srli a3, a2, 13 |
| ; RV64IMZBS-NEXT: addi t6, t6, -1 |
| ; RV64IMZBS-NEXT: and a4, t6, a4 |
| ; RV64IMZBS-NEXT: bexti t6, s2, 19 |
| ; RV64IMZBS-NEXT: addi s5, s5, -1 |
| ; RV64IMZBS-NEXT: and a6, s5, s4 |
| ; RV64IMZBS-NEXT: srli s11, a2, 12 |
| ; RV64IMZBS-NEXT: addi s7, s7, -1 |
| ; RV64IMZBS-NEXT: and s4, s7, s6 |
| ; RV64IMZBS-NEXT: bexti ra, s2, 20 |
| ; RV64IMZBS-NEXT: addi s9, s9, -1 |
| ; RV64IMZBS-NEXT: and s7, s9, s8 |
| ; RV64IMZBS-NEXT: srli s9, a2, 11 |
| ; RV64IMZBS-NEXT: addi t5, t5, -1 |
| ; RV64IMZBS-NEXT: and s6, t5, s10 |
| ; RV64IMZBS-NEXT: bexti t5, s2, 21 |
| ; RV64IMZBS-NEXT: addi t6, t6, -1 |
| ; RV64IMZBS-NEXT: and s5, t6, a3 |
| ; RV64IMZBS-NEXT: srli a3, a2, 10 |
| ; RV64IMZBS-NEXT: addi ra, ra, -1 |
| ; RV64IMZBS-NEXT: and s8, ra, s11 |
| ; RV64IMZBS-NEXT: bexti t6, s2, 22 |
| ; RV64IMZBS-NEXT: addi t5, t5, -1 |
| ; RV64IMZBS-NEXT: and s9, t5, s9 |
| ; RV64IMZBS-NEXT: srli t5, a2, 9 |
| ; RV64IMZBS-NEXT: addi t6, t6, -1 |
| ; RV64IMZBS-NEXT: and s10, t6, a3 |
| ; RV64IMZBS-NEXT: bexti a3, s2, 23 |
| ; RV64IMZBS-NEXT: addi a3, a3, -1 |
| ; RV64IMZBS-NEXT: and a3, a3, t5 |
| ; RV64IMZBS-NEXT: bexti t5, s2, 24 |
| ; RV64IMZBS-NEXT: addi t5, t5, -1 |
| ; RV64IMZBS-NEXT: srli t6, a2, 8 |
| ; RV64IMZBS-NEXT: and s11, t5, t6 |
| ; RV64IMZBS-NEXT: bexti t5, s2, 25 |
| ; RV64IMZBS-NEXT: addi t5, t5, -1 |
| ; RV64IMZBS-NEXT: srli t6, a2, 7 |
| ; RV64IMZBS-NEXT: and t5, t5, t6 |
| ; RV64IMZBS-NEXT: bexti t6, s2, 26 |
| ; RV64IMZBS-NEXT: addi t6, t6, -1 |
| ; RV64IMZBS-NEXT: srli ra, a2, 6 |
| ; RV64IMZBS-NEXT: and t6, t6, ra |
| ; RV64IMZBS-NEXT: bexti ra, s2, 27 |
| ; RV64IMZBS-NEXT: addi ra, ra, -1 |
| ; RV64IMZBS-NEXT: srli a0, a2, 5 |
| ; RV64IMZBS-NEXT: and a0, ra, a0 |
| ; RV64IMZBS-NEXT: bexti ra, s2, 28 |
| ; RV64IMZBS-NEXT: addi ra, ra, -1 |
| ; RV64IMZBS-NEXT: srli s1, a2, 4 |
| ; RV64IMZBS-NEXT: and s1, ra, s1 |
| ; RV64IMZBS-NEXT: bexti ra, s2, 29 |
| ; RV64IMZBS-NEXT: addi ra, ra, -1 |
| ; RV64IMZBS-NEXT: srli a1, a2, 3 |
| ; RV64IMZBS-NEXT: and a1, ra, a1 |
| ; RV64IMZBS-NEXT: bexti s2, s2, 30 |
| ; RV64IMZBS-NEXT: addi s2, s2, -1 |
| ; RV64IMZBS-NEXT: srli ra, a2, 2 |
| ; RV64IMZBS-NEXT: and s2, s2, ra |
| ; RV64IMZBS-NEXT: sraiw s3, s3, 31 |
| ; RV64IMZBS-NEXT: srli a2, a2, 1 |
| ; RV64IMZBS-NEXT: seqz s3, s3 |
| ; RV64IMZBS-NEXT: addi s3, s3, -1 |
| ; RV64IMZBS-NEXT: and a2, s3, a2 |
| ; RV64IMZBS-NEXT: ld s3, 64(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld ra, 56(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s3, ra, s3 |
| ; RV64IMZBS-NEXT: ld ra, 48(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld t0, 40(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor ra, ra, t0 |
| ; RV64IMZBS-NEXT: ld t0, 32(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld t2, 16(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, t0, t2 |
| ; RV64IMZBS-NEXT: ld t2, 8(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a7, t2, a7 |
| ; RV64IMZBS-NEXT: xor a5, t1, a5 |
| ; RV64IMZBS-NEXT: xor t1, s4, s7 |
| ; RV64IMZBS-NEXT: xor a3, s10, a3 |
| ; RV64IMZBS-NEXT: xor a1, a1, s2 |
| ; RV64IMZBS-NEXT: xor t2, s3, ra |
| ; RV64IMZBS-NEXT: ld s2, 24(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, t0, s2 |
| ; RV64IMZBS-NEXT: xor a7, a7, t3 |
| ; RV64IMZBS-NEXT: xor a5, a5, s0 |
| ; RV64IMZBS-NEXT: xor t1, t1, s6 |
| ; RV64IMZBS-NEXT: xor a3, a3, s11 |
| ; RV64IMZBS-NEXT: xor t0, t2, t0 |
| ; RV64IMZBS-NEXT: xor a7, a7, t4 |
| ; RV64IMZBS-NEXT: xor a4, a5, a4 |
| ; RV64IMZBS-NEXT: xor a5, t1, s5 |
| ; RV64IMZBS-NEXT: xor a3, a3, t5 |
| ; RV64IMZBS-NEXT: xor a7, t0, a7 |
| ; RV64IMZBS-NEXT: xor a4, a4, a6 |
| ; RV64IMZBS-NEXT: xor a5, a5, s8 |
| ; RV64IMZBS-NEXT: xor a3, a3, t6 |
| ; RV64IMZBS-NEXT: xor a4, a7, a4 |
| ; RV64IMZBS-NEXT: xor a5, a5, s9 |
| ; RV64IMZBS-NEXT: xor a0, a3, a0 |
| ; RV64IMZBS-NEXT: xor a4, a4, a5 |
| ; RV64IMZBS-NEXT: xor a0, a0, s1 |
| ; RV64IMZBS-NEXT: xor a0, a4, a0 |
| ; RV64IMZBS-NEXT: xor a1, a1, a2 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: srli a0, a0, 31 |
| ; RV64IMZBS-NEXT: ld ra, 168(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s0, 160(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s1, 152(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s2, 144(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s3, 136(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s4, 128(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s5, 120(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s6, 112(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s7, 104(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s8, 96(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s9, 88(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s10, 80(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s11, 72(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: addi sp, sp, 176 |
| ; RV64IMZBS-NEXT: ret |
| %a.ext = zext i32 %a to i64 |
| %b.ext = zext i32 %b to i64 |
| %clmul = call i64 @llvm.clmul.i64(i64 %a.ext, i64 %b.ext) |
| %res.ext = lshr i64 %clmul, 31 |
| %res = trunc i64 %res.ext to i32 |
| ret i32 %res |
| } |
| |
| declare i8 @use(i8, i1) |
| |
| define void @commutative_clmulr_i8(i8 %x, i8 %y, ptr %p0, ptr %p1) nounwind { |
| ; CHECK-LABEL: commutative_clmulr_i8: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: zext.b a1, a1 |
| ; CHECK-NEXT: andi a4, a0, 2 |
| ; CHECK-NEXT: andi a5, a0, 4 |
| ; CHECK-NEXT: andi a6, a0, 8 |
| ; CHECK-NEXT: andi a7, a0, 16 |
| ; CHECK-NEXT: andi t0, a0, 32 |
| ; CHECK-NEXT: andi t1, a0, 64 |
| ; CHECK-NEXT: slli t2, a1, 1 |
| ; CHECK-NEXT: seqz a4, a4 |
| ; CHECK-NEXT: addi a4, a4, -1 |
| ; CHECK-NEXT: and a4, a4, t2 |
| ; CHECK-NEXT: slli t2, a1, 2 |
| ; CHECK-NEXT: seqz a5, a5 |
| ; CHECK-NEXT: addi a5, a5, -1 |
| ; CHECK-NEXT: and a5, a5, t2 |
| ; CHECK-NEXT: slli t2, a1, 3 |
| ; CHECK-NEXT: seqz a6, a6 |
| ; CHECK-NEXT: addi a6, a6, -1 |
| ; CHECK-NEXT: and a6, a6, t2 |
| ; CHECK-NEXT: slli t2, a1, 4 |
| ; CHECK-NEXT: seqz a7, a7 |
| ; CHECK-NEXT: addi a7, a7, -1 |
| ; CHECK-NEXT: and a7, a7, t2 |
| ; CHECK-NEXT: slli t2, a1, 5 |
| ; CHECK-NEXT: seqz t0, t0 |
| ; CHECK-NEXT: addi t0, t0, -1 |
| ; CHECK-NEXT: and t0, t0, t2 |
| ; CHECK-NEXT: slli t2, a1, 6 |
| ; CHECK-NEXT: seqz t1, t1 |
| ; CHECK-NEXT: addi t1, t1, -1 |
| ; CHECK-NEXT: and t1, t1, t2 |
| ; CHECK-NEXT: andi t2, a0, 1 |
| ; CHECK-NEXT: andi a0, a0, 128 |
| ; CHECK-NEXT: seqz t2, t2 |
| ; CHECK-NEXT: addi t2, t2, -1 |
| ; CHECK-NEXT: and t2, t2, a1 |
| ; CHECK-NEXT: slli a1, a1, 7 |
| ; CHECK-NEXT: seqz a0, a0 |
| ; CHECK-NEXT: addi a0, a0, -1 |
| ; CHECK-NEXT: and a0, a0, a1 |
| ; CHECK-NEXT: xor a1, t2, a4 |
| ; CHECK-NEXT: xor a4, a5, a6 |
| ; CHECK-NEXT: xor a5, a7, t0 |
| ; CHECK-NEXT: xor a1, a1, a4 |
| ; CHECK-NEXT: xor a4, a5, t1 |
| ; CHECK-NEXT: xor a1, a1, a4 |
| ; CHECK-NEXT: xor a0, a1, a0 |
| ; CHECK-NEXT: srli a0, a0, 7 |
| ; CHECK-NEXT: sb a0, 0(a2) |
| ; CHECK-NEXT: sb a0, 0(a3) |
| ; CHECK-NEXT: ret |
| %x.ext = zext i8 %x to i16 |
| %y.ext = zext i8 %y to i16 |
| %clmul_xy = call i16 @llvm.clmul.i16(i16 %x.ext, i16 %y.ext) |
| %clmul_yx = call i16 @llvm.clmul.i16(i16 %y.ext, i16 %x.ext) |
| %clmul_xy_lshr = lshr i16 %clmul_xy, 7 |
| %clmul_yx_lshr = lshr i16 %clmul_yx, 7 |
| %clmulh_xy = trunc i16 %clmul_xy_lshr to i8 |
| %clmulh_yx = trunc i16 %clmul_yx_lshr to i8 |
| store i8 %clmulh_xy, ptr %p0 |
| store i8 %clmulh_yx, ptr %p1 |
| ret void |
| } |
| |
| define void @mul_use_commutative_clmul_i8(i8 %x, i8 %y, ptr %p0, ptr %p1) nounwind { |
| ; RV32I-LABEL: mul_use_commutative_clmul_i8: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -16 |
| ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: mv s0, a3 |
| ; RV32I-NEXT: slli a3, a0, 1 |
| ; RV32I-NEXT: slli a4, a1, 30 |
| ; RV32I-NEXT: slli a5, a0, 2 |
| ; RV32I-NEXT: slli a6, a1, 29 |
| ; RV32I-NEXT: slli a7, a0, 3 |
| ; RV32I-NEXT: slli t0, a1, 28 |
| ; RV32I-NEXT: slli t1, a0, 4 |
| ; RV32I-NEXT: srai a4, a4, 31 |
| ; RV32I-NEXT: and a3, a4, a3 |
| ; RV32I-NEXT: slli a4, a1, 27 |
| ; RV32I-NEXT: srai a6, a6, 31 |
| ; RV32I-NEXT: and a5, a6, a5 |
| ; RV32I-NEXT: slli a6, a0, 5 |
| ; RV32I-NEXT: srai t0, t0, 31 |
| ; RV32I-NEXT: and a7, t0, a7 |
| ; RV32I-NEXT: slli t0, a1, 26 |
| ; RV32I-NEXT: srai a4, a4, 31 |
| ; RV32I-NEXT: and a4, a4, t1 |
| ; RV32I-NEXT: slli t1, a0, 6 |
| ; RV32I-NEXT: srai t0, t0, 31 |
| ; RV32I-NEXT: and a6, t0, a6 |
| ; RV32I-NEXT: slli t0, a1, 25 |
| ; RV32I-NEXT: srai t0, t0, 31 |
| ; RV32I-NEXT: and t0, t0, t1 |
| ; RV32I-NEXT: slli t1, a1, 31 |
| ; RV32I-NEXT: srai t1, t1, 31 |
| ; RV32I-NEXT: and t1, t1, a0 |
| ; RV32I-NEXT: xor a3, t1, a3 |
| ; RV32I-NEXT: xor a5, a5, a7 |
| ; RV32I-NEXT: xor a4, a4, a6 |
| ; RV32I-NEXT: slli a0, a0, 7 |
| ; RV32I-NEXT: andi a1, a1, 128 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: xor a3, a3, a5 |
| ; RV32I-NEXT: xor a4, a4, t0 |
| ; RV32I-NEXT: xor a3, a3, a4 |
| ; RV32I-NEXT: and a0, a1, a0 |
| ; RV32I-NEXT: xor s1, a3, a0 |
| ; RV32I-NEXT: sb s1, 0(a2) |
| ; RV32I-NEXT: mv a0, s1 |
| ; RV32I-NEXT: call use |
| ; RV32I-NEXT: sb s1, 0(s0) |
| ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: addi sp, sp, 16 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: mul_use_commutative_clmul_i8: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -32 |
| ; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: mv s0, a3 |
| ; RV64I-NEXT: slli a3, a0, 1 |
| ; RV64I-NEXT: slli a4, a1, 62 |
| ; RV64I-NEXT: slli a5, a0, 2 |
| ; RV64I-NEXT: slli a6, a1, 61 |
| ; RV64I-NEXT: slli a7, a0, 3 |
| ; RV64I-NEXT: slli t0, a1, 60 |
| ; RV64I-NEXT: slli t1, a0, 4 |
| ; RV64I-NEXT: srai a4, a4, 63 |
| ; RV64I-NEXT: and a3, a4, a3 |
| ; RV64I-NEXT: slli a4, a1, 59 |
| ; RV64I-NEXT: srai a6, a6, 63 |
| ; RV64I-NEXT: and a5, a6, a5 |
| ; RV64I-NEXT: slli a6, a0, 5 |
| ; RV64I-NEXT: srai t0, t0, 63 |
| ; RV64I-NEXT: and a7, t0, a7 |
| ; RV64I-NEXT: slli t0, a1, 58 |
| ; RV64I-NEXT: srai a4, a4, 63 |
| ; RV64I-NEXT: and a4, a4, t1 |
| ; RV64I-NEXT: slli t1, a0, 6 |
| ; RV64I-NEXT: srai t0, t0, 63 |
| ; RV64I-NEXT: and a6, t0, a6 |
| ; RV64I-NEXT: slli t0, a1, 57 |
| ; RV64I-NEXT: srai t0, t0, 63 |
| ; RV64I-NEXT: and t0, t0, t1 |
| ; RV64I-NEXT: slli t1, a1, 63 |
| ; RV64I-NEXT: srai t1, t1, 63 |
| ; RV64I-NEXT: and t1, t1, a0 |
| ; RV64I-NEXT: xor a3, t1, a3 |
| ; RV64I-NEXT: xor a5, a5, a7 |
| ; RV64I-NEXT: xor a4, a4, a6 |
| ; RV64I-NEXT: slli a0, a0, 7 |
| ; RV64I-NEXT: andi a1, a1, 128 |
| ; RV64I-NEXT: seqz a1, a1 |
| ; RV64I-NEXT: addi a1, a1, -1 |
| ; RV64I-NEXT: xor a3, a3, a5 |
| ; RV64I-NEXT: xor a4, a4, t0 |
| ; RV64I-NEXT: xor a3, a3, a4 |
| ; RV64I-NEXT: and a0, a1, a0 |
| ; RV64I-NEXT: xor s1, a3, a0 |
| ; RV64I-NEXT: sb s1, 0(a2) |
| ; RV64I-NEXT: mv a0, s1 |
| ; RV64I-NEXT: call use |
| ; RV64I-NEXT: sb s1, 0(s0) |
| ; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: addi sp, sp, 32 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32IM-LABEL: mul_use_commutative_clmul_i8: |
| ; RV32IM: # %bb.0: |
| ; RV32IM-NEXT: addi sp, sp, -16 |
| ; RV32IM-NEXT: sw ra, 12(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s0, 8(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s1, 4(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mv s0, a3 |
| ; RV32IM-NEXT: slli a3, a0, 1 |
| ; RV32IM-NEXT: slli a4, a1, 30 |
| ; RV32IM-NEXT: slli a5, a0, 2 |
| ; RV32IM-NEXT: slli a6, a1, 29 |
| ; RV32IM-NEXT: slli a7, a0, 3 |
| ; RV32IM-NEXT: slli t0, a1, 28 |
| ; RV32IM-NEXT: slli t1, a0, 4 |
| ; RV32IM-NEXT: srai a4, a4, 31 |
| ; RV32IM-NEXT: and a3, a4, a3 |
| ; RV32IM-NEXT: slli a4, a1, 27 |
| ; RV32IM-NEXT: srai a6, a6, 31 |
| ; RV32IM-NEXT: and a5, a6, a5 |
| ; RV32IM-NEXT: slli a6, a0, 5 |
| ; RV32IM-NEXT: srai t0, t0, 31 |
| ; RV32IM-NEXT: and a7, t0, a7 |
| ; RV32IM-NEXT: slli t0, a1, 26 |
| ; RV32IM-NEXT: srai a4, a4, 31 |
| ; RV32IM-NEXT: and a4, a4, t1 |
| ; RV32IM-NEXT: slli t1, a0, 6 |
| ; RV32IM-NEXT: srai t0, t0, 31 |
| ; RV32IM-NEXT: and a6, t0, a6 |
| ; RV32IM-NEXT: slli t0, a1, 25 |
| ; RV32IM-NEXT: srai t0, t0, 31 |
| ; RV32IM-NEXT: and t0, t0, t1 |
| ; RV32IM-NEXT: slli t1, a1, 31 |
| ; RV32IM-NEXT: srai t1, t1, 31 |
| ; RV32IM-NEXT: and t1, t1, a0 |
| ; RV32IM-NEXT: xor a3, t1, a3 |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: xor a4, a4, a6 |
| ; RV32IM-NEXT: slli a0, a0, 7 |
| ; RV32IM-NEXT: andi a1, a1, 128 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: xor a3, a3, a5 |
| ; RV32IM-NEXT: xor a4, a4, t0 |
| ; RV32IM-NEXT: xor a3, a3, a4 |
| ; RV32IM-NEXT: and a0, a1, a0 |
| ; RV32IM-NEXT: xor s1, a3, a0 |
| ; RV32IM-NEXT: sb s1, 0(a2) |
| ; RV32IM-NEXT: mv a0, s1 |
| ; RV32IM-NEXT: call use |
| ; RV32IM-NEXT: sb s1, 0(s0) |
| ; RV32IM-NEXT: lw ra, 12(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s0, 8(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s1, 4(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: addi sp, sp, 16 |
| ; RV32IM-NEXT: ret |
| ; |
| ; RV64IM-LABEL: mul_use_commutative_clmul_i8: |
| ; RV64IM: # %bb.0: |
| ; RV64IM-NEXT: addi sp, sp, -32 |
| ; RV64IM-NEXT: sd ra, 24(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s0, 16(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s1, 8(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mv s0, a3 |
| ; RV64IM-NEXT: slli a3, a0, 1 |
| ; RV64IM-NEXT: slli a4, a1, 62 |
| ; RV64IM-NEXT: slli a5, a0, 2 |
| ; RV64IM-NEXT: slli a6, a1, 61 |
| ; RV64IM-NEXT: slli a7, a0, 3 |
| ; RV64IM-NEXT: slli t0, a1, 60 |
| ; RV64IM-NEXT: slli t1, a0, 4 |
| ; RV64IM-NEXT: srai a4, a4, 63 |
| ; RV64IM-NEXT: and a3, a4, a3 |
| ; RV64IM-NEXT: slli a4, a1, 59 |
| ; RV64IM-NEXT: srai a6, a6, 63 |
| ; RV64IM-NEXT: and a5, a6, a5 |
| ; RV64IM-NEXT: slli a6, a0, 5 |
| ; RV64IM-NEXT: srai t0, t0, 63 |
| ; RV64IM-NEXT: and a7, t0, a7 |
| ; RV64IM-NEXT: slli t0, a1, 58 |
| ; RV64IM-NEXT: srai a4, a4, 63 |
| ; RV64IM-NEXT: and a4, a4, t1 |
| ; RV64IM-NEXT: slli t1, a0, 6 |
| ; RV64IM-NEXT: srai t0, t0, 63 |
| ; RV64IM-NEXT: and a6, t0, a6 |
| ; RV64IM-NEXT: slli t0, a1, 57 |
| ; RV64IM-NEXT: srai t0, t0, 63 |
| ; RV64IM-NEXT: and t0, t0, t1 |
| ; RV64IM-NEXT: slli t1, a1, 63 |
| ; RV64IM-NEXT: srai t1, t1, 63 |
| ; RV64IM-NEXT: and t1, t1, a0 |
| ; RV64IM-NEXT: xor a3, t1, a3 |
| ; RV64IM-NEXT: xor a5, a5, a7 |
| ; RV64IM-NEXT: xor a4, a4, a6 |
| ; RV64IM-NEXT: slli a0, a0, 7 |
| ; RV64IM-NEXT: andi a1, a1, 128 |
| ; RV64IM-NEXT: seqz a1, a1 |
| ; RV64IM-NEXT: addi a1, a1, -1 |
| ; RV64IM-NEXT: xor a3, a3, a5 |
| ; RV64IM-NEXT: xor a4, a4, t0 |
| ; RV64IM-NEXT: xor a3, a3, a4 |
| ; RV64IM-NEXT: and a0, a1, a0 |
| ; RV64IM-NEXT: xor s1, a3, a0 |
| ; RV64IM-NEXT: sb s1, 0(a2) |
| ; RV64IM-NEXT: mv a0, s1 |
| ; RV64IM-NEXT: call use |
| ; RV64IM-NEXT: sb s1, 0(s0) |
| ; RV64IM-NEXT: ld ra, 24(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s0, 16(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s1, 8(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: addi sp, sp, 32 |
| ; RV64IM-NEXT: ret |
| ; |
| ; RV32IMZBS-LABEL: mul_use_commutative_clmul_i8: |
| ; RV32IMZBS: # %bb.0: |
| ; RV32IMZBS-NEXT: addi sp, sp, -16 |
| ; RV32IMZBS-NEXT: sw ra, 12(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s0, 8(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s1, 4(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: mv s0, a3 |
| ; RV32IMZBS-NEXT: slli a3, a0, 1 |
| ; RV32IMZBS-NEXT: slli a4, a1, 30 |
| ; RV32IMZBS-NEXT: slli a5, a0, 2 |
| ; RV32IMZBS-NEXT: slli a6, a1, 29 |
| ; RV32IMZBS-NEXT: slli a7, a0, 3 |
| ; RV32IMZBS-NEXT: slli t0, a1, 28 |
| ; RV32IMZBS-NEXT: slli t1, a0, 4 |
| ; RV32IMZBS-NEXT: srai a4, a4, 31 |
| ; RV32IMZBS-NEXT: and a3, a4, a3 |
| ; RV32IMZBS-NEXT: slli a4, a1, 27 |
| ; RV32IMZBS-NEXT: srai a6, a6, 31 |
| ; RV32IMZBS-NEXT: and a5, a6, a5 |
| ; RV32IMZBS-NEXT: slli a6, a0, 5 |
| ; RV32IMZBS-NEXT: srai t0, t0, 31 |
| ; RV32IMZBS-NEXT: and a7, t0, a7 |
| ; RV32IMZBS-NEXT: slli t0, a1, 26 |
| ; RV32IMZBS-NEXT: srai a4, a4, 31 |
| ; RV32IMZBS-NEXT: and a4, a4, t1 |
| ; RV32IMZBS-NEXT: slli t1, a0, 6 |
| ; RV32IMZBS-NEXT: srai t0, t0, 31 |
| ; RV32IMZBS-NEXT: and a6, t0, a6 |
| ; RV32IMZBS-NEXT: slli t0, a1, 25 |
| ; RV32IMZBS-NEXT: srai t0, t0, 31 |
| ; RV32IMZBS-NEXT: and t0, t0, t1 |
| ; RV32IMZBS-NEXT: slli t1, a1, 31 |
| ; RV32IMZBS-NEXT: srai t1, t1, 31 |
| ; RV32IMZBS-NEXT: and t1, t1, a0 |
| ; RV32IMZBS-NEXT: xor a3, t1, a3 |
| ; RV32IMZBS-NEXT: xor a5, a5, a7 |
| ; RV32IMZBS-NEXT: xor a4, a4, a6 |
| ; RV32IMZBS-NEXT: slli a0, a0, 7 |
| ; RV32IMZBS-NEXT: andi a1, a1, 128 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: xor a3, a3, a5 |
| ; RV32IMZBS-NEXT: xor a4, a4, t0 |
| ; RV32IMZBS-NEXT: xor a3, a3, a4 |
| ; RV32IMZBS-NEXT: and a0, a1, a0 |
| ; RV32IMZBS-NEXT: xor s1, a3, a0 |
| ; RV32IMZBS-NEXT: sb s1, 0(a2) |
| ; RV32IMZBS-NEXT: mv a0, s1 |
| ; RV32IMZBS-NEXT: call use |
| ; RV32IMZBS-NEXT: sb s1, 0(s0) |
| ; RV32IMZBS-NEXT: lw ra, 12(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s0, 8(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s1, 4(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: addi sp, sp, 16 |
| ; RV32IMZBS-NEXT: ret |
| ; |
| ; RV64IMZBS-LABEL: mul_use_commutative_clmul_i8: |
| ; RV64IMZBS: # %bb.0: |
| ; RV64IMZBS-NEXT: addi sp, sp, -32 |
| ; RV64IMZBS-NEXT: sd ra, 24(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s0, 16(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s1, 8(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: mv s0, a3 |
| ; RV64IMZBS-NEXT: slli a3, a0, 1 |
| ; RV64IMZBS-NEXT: slli a4, a1, 62 |
| ; RV64IMZBS-NEXT: slli a5, a0, 2 |
| ; RV64IMZBS-NEXT: slli a6, a1, 61 |
| ; RV64IMZBS-NEXT: slli a7, a0, 3 |
| ; RV64IMZBS-NEXT: slli t0, a1, 60 |
| ; RV64IMZBS-NEXT: slli t1, a0, 4 |
| ; RV64IMZBS-NEXT: srai a4, a4, 63 |
| ; RV64IMZBS-NEXT: and a3, a4, a3 |
| ; RV64IMZBS-NEXT: slli a4, a1, 59 |
| ; RV64IMZBS-NEXT: srai a6, a6, 63 |
| ; RV64IMZBS-NEXT: and a5, a6, a5 |
| ; RV64IMZBS-NEXT: slli a6, a0, 5 |
| ; RV64IMZBS-NEXT: srai t0, t0, 63 |
| ; RV64IMZBS-NEXT: and a7, t0, a7 |
| ; RV64IMZBS-NEXT: slli t0, a1, 58 |
| ; RV64IMZBS-NEXT: srai a4, a4, 63 |
| ; RV64IMZBS-NEXT: and a4, a4, t1 |
| ; RV64IMZBS-NEXT: slli t1, a0, 6 |
| ; RV64IMZBS-NEXT: srai t0, t0, 63 |
| ; RV64IMZBS-NEXT: and a6, t0, a6 |
| ; RV64IMZBS-NEXT: slli t0, a1, 57 |
| ; RV64IMZBS-NEXT: srai t0, t0, 63 |
| ; RV64IMZBS-NEXT: and t0, t0, t1 |
| ; RV64IMZBS-NEXT: slli t1, a1, 63 |
| ; RV64IMZBS-NEXT: srai t1, t1, 63 |
| ; RV64IMZBS-NEXT: and t1, t1, a0 |
| ; RV64IMZBS-NEXT: xor a3, t1, a3 |
| ; RV64IMZBS-NEXT: xor a5, a5, a7 |
| ; RV64IMZBS-NEXT: xor a4, a4, a6 |
| ; RV64IMZBS-NEXT: slli a0, a0, 7 |
| ; RV64IMZBS-NEXT: andi a1, a1, 128 |
| ; RV64IMZBS-NEXT: seqz a1, a1 |
| ; RV64IMZBS-NEXT: addi a1, a1, -1 |
| ; RV64IMZBS-NEXT: xor a3, a3, a5 |
| ; RV64IMZBS-NEXT: xor a4, a4, t0 |
| ; RV64IMZBS-NEXT: xor a3, a3, a4 |
| ; RV64IMZBS-NEXT: and a0, a1, a0 |
| ; RV64IMZBS-NEXT: xor s1, a3, a0 |
| ; RV64IMZBS-NEXT: sb s1, 0(a2) |
| ; RV64IMZBS-NEXT: mv a0, s1 |
| ; RV64IMZBS-NEXT: call use |
| ; RV64IMZBS-NEXT: sb s1, 0(s0) |
| ; RV64IMZBS-NEXT: ld ra, 24(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s0, 16(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s1, 8(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: addi sp, sp, 32 |
| ; RV64IMZBS-NEXT: ret |
| %xy = call i8 @llvm.clmul.i8(i8 %x, i8 %y) |
| %yx = call i8 @llvm.clmul.i8(i8 %y, i8 %x) |
| store i8 %xy, ptr %p0 |
| call void @use(i8 %xy) |
| store i8 %yx, ptr %p1 |
| ret void |
| } |
| |
| define void @commutative_clmulr_v2i64(<2 x i64> %x, <2 x i64> %y, ptr %p0, ptr %p1) nounwind { |
| ; RV32I-LABEL: commutative_clmulr_v2i64: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -800 |
| ; RV32I-NEXT: sw ra, 796(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s0, 792(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s1, 788(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s2, 784(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s3, 780(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s4, 776(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s5, 772(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s6, 768(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s7, 764(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s8, 760(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s9, 756(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s10, 752(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw s11, 748(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw a3, 736(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw a2, 732(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a2, 0(a0) |
| ; RV32I-NEXT: lw a4, 4(a0) |
| ; RV32I-NEXT: lw t0, 8(a0) |
| ; RV32I-NEXT: lw a0, 12(a0) |
| ; RV32I-NEXT: lw s7, 0(a1) |
| ; RV32I-NEXT: lw t2, 4(a1) |
| ; RV32I-NEXT: lw t1, 8(a1) |
| ; RV32I-NEXT: lw a1, 12(a1) |
| ; RV32I-NEXT: lui a7, 16 |
| ; RV32I-NEXT: lui a3, 61681 |
| ; RV32I-NEXT: lui a5, 209715 |
| ; RV32I-NEXT: lui a6, 349525 |
| ; RV32I-NEXT: addi ra, a7, -256 |
| ; RV32I-NEXT: addi s11, a3, -241 |
| ; RV32I-NEXT: addi s10, a5, 819 |
| ; RV32I-NEXT: addi s9, a6, 1365 |
| ; RV32I-NEXT: srli a7, t2, 8 |
| ; RV32I-NEXT: srli t4, t2, 24 |
| ; RV32I-NEXT: and a3, t2, ra |
| ; RV32I-NEXT: slli t2, t2, 24 |
| ; RV32I-NEXT: srli a5, a4, 8 |
| ; RV32I-NEXT: srli s3, a4, 24 |
| ; RV32I-NEXT: and t3, a4, ra |
| ; RV32I-NEXT: slli a4, a4, 24 |
| ; RV32I-NEXT: srli t5, s7, 8 |
| ; RV32I-NEXT: srli s6, s7, 24 |
| ; RV32I-NEXT: and s1, s7, ra |
| ; RV32I-NEXT: slli s7, s7, 24 |
| ; RV32I-NEXT: srli s8, a2, 8 |
| ; RV32I-NEXT: srli t6, a2, 24 |
| ; RV32I-NEXT: and s0, a2, ra |
| ; RV32I-NEXT: slli a6, a2, 24 |
| ; RV32I-NEXT: and a2, a7, ra |
| ; RV32I-NEXT: or a2, a2, t4 |
| ; RV32I-NEXT: srli s2, a1, 8 |
| ; RV32I-NEXT: slli a3, a3, 8 |
| ; RV32I-NEXT: or a3, t2, a3 |
| ; RV32I-NEXT: srli s4, a1, 24 |
| ; RV32I-NEXT: and a5, a5, ra |
| ; RV32I-NEXT: or t2, a5, s3 |
| ; RV32I-NEXT: and s3, a1, ra |
| ; RV32I-NEXT: slli s5, a1, 24 |
| ; RV32I-NEXT: slli a1, t3, 8 |
| ; RV32I-NEXT: or a1, a4, a1 |
| ; RV32I-NEXT: srli a5, a0, 8 |
| ; RV32I-NEXT: and a4, t5, ra |
| ; RV32I-NEXT: or t3, a4, s6 |
| ; RV32I-NEXT: srli t5, a0, 24 |
| ; RV32I-NEXT: slli s1, s1, 8 |
| ; RV32I-NEXT: or a4, s7, s1 |
| ; RV32I-NEXT: and a7, a0, ra |
| ; RV32I-NEXT: slli t4, a0, 24 |
| ; RV32I-NEXT: and a0, s8, ra |
| ; RV32I-NEXT: or a0, a0, t6 |
| ; RV32I-NEXT: srli s1, t1, 8 |
| ; RV32I-NEXT: slli s0, s0, 8 |
| ; RV32I-NEXT: or t6, a6, s0 |
| ; RV32I-NEXT: srli a6, t1, 24 |
| ; RV32I-NEXT: and s0, s2, ra |
| ; RV32I-NEXT: or s0, s0, s4 |
| ; RV32I-NEXT: and s7, t1, ra |
| ; RV32I-NEXT: slli s6, t1, 24 |
| ; RV32I-NEXT: slli s3, s3, 8 |
| ; RV32I-NEXT: or t1, s5, s3 |
| ; RV32I-NEXT: srli s2, t0, 8 |
| ; RV32I-NEXT: and a5, a5, ra |
| ; RV32I-NEXT: or a5, a5, t5 |
| ; RV32I-NEXT: srli t5, t0, 24 |
| ; RV32I-NEXT: slli a7, a7, 8 |
| ; RV32I-NEXT: or a7, t4, a7 |
| ; RV32I-NEXT: and t4, t0, ra |
| ; RV32I-NEXT: slli t0, t0, 24 |
| ; RV32I-NEXT: and s1, s1, ra |
| ; RV32I-NEXT: slli s7, s7, 8 |
| ; RV32I-NEXT: and s2, s2, ra |
| ; RV32I-NEXT: slli t4, t4, 8 |
| ; RV32I-NEXT: or a6, s1, a6 |
| ; RV32I-NEXT: or s1, s6, s7 |
| ; RV32I-NEXT: or t5, s2, t5 |
| ; RV32I-NEXT: or t0, t0, t4 |
| ; RV32I-NEXT: or a2, a3, a2 |
| ; RV32I-NEXT: or a1, a1, t2 |
| ; RV32I-NEXT: or a3, a4, t3 |
| ; RV32I-NEXT: or a0, t6, a0 |
| ; RV32I-NEXT: or a4, t1, s0 |
| ; RV32I-NEXT: or a5, a7, a5 |
| ; RV32I-NEXT: or a6, s1, a6 |
| ; RV32I-NEXT: or a7, t0, t5 |
| ; RV32I-NEXT: srli t0, a2, 4 |
| ; RV32I-NEXT: sw s11, 744(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a2, a2, s11 |
| ; RV32I-NEXT: srli t1, a1, 4 |
| ; RV32I-NEXT: and a1, a1, s11 |
| ; RV32I-NEXT: srli t2, a3, 4 |
| ; RV32I-NEXT: and a3, a3, s11 |
| ; RV32I-NEXT: srli t3, a0, 4 |
| ; RV32I-NEXT: and a0, a0, s11 |
| ; RV32I-NEXT: srli t4, a4, 4 |
| ; RV32I-NEXT: and a4, a4, s11 |
| ; RV32I-NEXT: srli t5, a5, 4 |
| ; RV32I-NEXT: and a5, a5, s11 |
| ; RV32I-NEXT: srli t6, a6, 4 |
| ; RV32I-NEXT: and a6, a6, s11 |
| ; RV32I-NEXT: srli s0, a7, 4 |
| ; RV32I-NEXT: and a7, a7, s11 |
| ; RV32I-NEXT: and t0, t0, s11 |
| ; RV32I-NEXT: slli a2, a2, 4 |
| ; RV32I-NEXT: and t1, t1, s11 |
| ; RV32I-NEXT: slli a1, a1, 4 |
| ; RV32I-NEXT: and t2, t2, s11 |
| ; RV32I-NEXT: slli a3, a3, 4 |
| ; RV32I-NEXT: and t3, t3, s11 |
| ; RV32I-NEXT: slli a0, a0, 4 |
| ; RV32I-NEXT: and t4, t4, s11 |
| ; RV32I-NEXT: slli a4, a4, 4 |
| ; RV32I-NEXT: and t5, t5, s11 |
| ; RV32I-NEXT: slli a5, a5, 4 |
| ; RV32I-NEXT: and t6, t6, s11 |
| ; RV32I-NEXT: slli a6, a6, 4 |
| ; RV32I-NEXT: and s0, s0, s11 |
| ; RV32I-NEXT: slli a7, a7, 4 |
| ; RV32I-NEXT: or a2, t0, a2 |
| ; RV32I-NEXT: or a1, t1, a1 |
| ; RV32I-NEXT: or a3, t2, a3 |
| ; RV32I-NEXT: or a0, t3, a0 |
| ; RV32I-NEXT: or a4, t4, a4 |
| ; RV32I-NEXT: or a5, t5, a5 |
| ; RV32I-NEXT: or a6, t6, a6 |
| ; RV32I-NEXT: or a7, s0, a7 |
| ; RV32I-NEXT: srli t0, a2, 2 |
| ; RV32I-NEXT: sw s10, 724(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a2, a2, s10 |
| ; RV32I-NEXT: srli t1, a1, 2 |
| ; RV32I-NEXT: and a1, a1, s10 |
| ; RV32I-NEXT: srli t2, a3, 2 |
| ; RV32I-NEXT: and a3, a3, s10 |
| ; RV32I-NEXT: srli t3, a0, 2 |
| ; RV32I-NEXT: and a0, a0, s10 |
| ; RV32I-NEXT: srli t4, a4, 2 |
| ; RV32I-NEXT: and a4, a4, s10 |
| ; RV32I-NEXT: srli t5, a5, 2 |
| ; RV32I-NEXT: and a5, a5, s10 |
| ; RV32I-NEXT: srli t6, a6, 2 |
| ; RV32I-NEXT: and a6, a6, s10 |
| ; RV32I-NEXT: srli s0, a7, 2 |
| ; RV32I-NEXT: and a7, a7, s10 |
| ; RV32I-NEXT: and t0, t0, s10 |
| ; RV32I-NEXT: slli a2, a2, 2 |
| ; RV32I-NEXT: and t1, t1, s10 |
| ; RV32I-NEXT: slli a1, a1, 2 |
| ; RV32I-NEXT: and t2, t2, s10 |
| ; RV32I-NEXT: slli a3, a3, 2 |
| ; RV32I-NEXT: and t3, t3, s10 |
| ; RV32I-NEXT: slli a0, a0, 2 |
| ; RV32I-NEXT: and t4, t4, s10 |
| ; RV32I-NEXT: slli a4, a4, 2 |
| ; RV32I-NEXT: and t5, t5, s10 |
| ; RV32I-NEXT: slli a5, a5, 2 |
| ; RV32I-NEXT: and t6, t6, s10 |
| ; RV32I-NEXT: slli a6, a6, 2 |
| ; RV32I-NEXT: and s0, s0, s10 |
| ; RV32I-NEXT: slli a7, a7, 2 |
| ; RV32I-NEXT: or a2, t0, a2 |
| ; RV32I-NEXT: or a1, t1, a1 |
| ; RV32I-NEXT: or a3, t2, a3 |
| ; RV32I-NEXT: or a0, t3, a0 |
| ; RV32I-NEXT: or a4, t4, a4 |
| ; RV32I-NEXT: or a5, t5, a5 |
| ; RV32I-NEXT: or a6, t6, a6 |
| ; RV32I-NEXT: or a7, s0, a7 |
| ; RV32I-NEXT: srli t0, a2, 1 |
| ; RV32I-NEXT: sw s9, 728(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a2, a2, s9 |
| ; RV32I-NEXT: srli t1, a1, 1 |
| ; RV32I-NEXT: and a1, a1, s9 |
| ; RV32I-NEXT: srli t2, a3, 1 |
| ; RV32I-NEXT: and a3, a3, s9 |
| ; RV32I-NEXT: srli t3, a0, 1 |
| ; RV32I-NEXT: and a0, a0, s9 |
| ; RV32I-NEXT: srli t4, a4, 1 |
| ; RV32I-NEXT: and a4, a4, s9 |
| ; RV32I-NEXT: srli t5, a5, 1 |
| ; RV32I-NEXT: and a5, a5, s9 |
| ; RV32I-NEXT: srli t6, a6, 1 |
| ; RV32I-NEXT: and a6, a6, s9 |
| ; RV32I-NEXT: srli s0, a7, 1 |
| ; RV32I-NEXT: and a7, a7, s9 |
| ; RV32I-NEXT: and t0, t0, s9 |
| ; RV32I-NEXT: slli a2, a2, 1 |
| ; RV32I-NEXT: and t1, t1, s9 |
| ; RV32I-NEXT: slli s1, a1, 1 |
| ; RV32I-NEXT: and t2, t2, s9 |
| ; RV32I-NEXT: slli a3, a3, 1 |
| ; RV32I-NEXT: and t3, t3, s9 |
| ; RV32I-NEXT: slli s2, a0, 1 |
| ; RV32I-NEXT: and t4, t4, s9 |
| ; RV32I-NEXT: slli a4, a4, 1 |
| ; RV32I-NEXT: and t5, t5, s9 |
| ; RV32I-NEXT: slli s3, a5, 1 |
| ; RV32I-NEXT: and s4, t6, s9 |
| ; RV32I-NEXT: slli a6, a6, 1 |
| ; RV32I-NEXT: and s5, s0, s9 |
| ; RV32I-NEXT: slli s0, a7, 1 |
| ; RV32I-NEXT: or a0, t0, a2 |
| ; RV32I-NEXT: or a1, t1, s1 |
| ; RV32I-NEXT: or a2, t2, a3 |
| ; RV32I-NEXT: srli t6, s1, 31 |
| ; RV32I-NEXT: or a3, t3, s2 |
| ; RV32I-NEXT: srli a5, s2, 31 |
| ; RV32I-NEXT: or t0, t4, a4 |
| ; RV32I-NEXT: or t3, t5, s3 |
| ; RV32I-NEXT: or t1, s4, a6 |
| ; RV32I-NEXT: srli a4, s3, 31 |
| ; RV32I-NEXT: or s6, s5, s0 |
| ; RV32I-NEXT: srli t2, s0, 31 |
| ; RV32I-NEXT: srli a6, a0, 8 |
| ; RV32I-NEXT: srli a7, a0, 24 |
| ; RV32I-NEXT: srli t4, a1, 8 |
| ; RV32I-NEXT: srli t5, a1, 24 |
| ; RV32I-NEXT: slli s1, a1, 24 |
| ; RV32I-NEXT: and s2, a1, ra |
| ; RV32I-NEXT: slli s3, a2, 31 |
| ; RV32I-NEXT: seqz s4, t6 |
| ; RV32I-NEXT: srli t6, t0, 8 |
| ; RV32I-NEXT: and a6, a6, ra |
| ; RV32I-NEXT: or s0, a6, a7 |
| ; RV32I-NEXT: srli a7, t0, 24 |
| ; RV32I-NEXT: and a6, t4, ra |
| ; RV32I-NEXT: or a6, a6, t5 |
| ; RV32I-NEXT: srli t5, t3, 8 |
| ; RV32I-NEXT: slli s2, s2, 8 |
| ; RV32I-NEXT: or t4, s1, s2 |
| ; RV32I-NEXT: srli s1, t3, 24 |
| ; RV32I-NEXT: and t6, t6, ra |
| ; RV32I-NEXT: or a7, t6, a7 |
| ; RV32I-NEXT: slli t6, t3, 24 |
| ; RV32I-NEXT: and t5, t5, ra |
| ; RV32I-NEXT: or t5, t5, s1 |
| ; RV32I-NEXT: and s1, t3, ra |
| ; RV32I-NEXT: slli s1, s1, 8 |
| ; RV32I-NEXT: or s1, t6, s1 |
| ; RV32I-NEXT: slli t6, a0, 31 |
| ; RV32I-NEXT: seqz s2, a5 |
| ; RV32I-NEXT: addi a5, s4, -1 |
| ; RV32I-NEXT: addi s2, s2, -1 |
| ; RV32I-NEXT: and s3, a5, s3 |
| ; RV32I-NEXT: sw s3, 716(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and s2, s2, t6 |
| ; RV32I-NEXT: sw s2, 720(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a5, a5, t6 |
| ; RV32I-NEXT: sw a5, 712(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a5, t1, 31 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: seqz t6, t2 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi t6, t6, -1 |
| ; RV32I-NEXT: and a5, a4, a5 |
| ; RV32I-NEXT: sw a5, 704(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a5, t0, 31 |
| ; RV32I-NEXT: and t2, t6, a5 |
| ; RV32I-NEXT: sw t2, 708(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a5 |
| ; RV32I-NEXT: sw a4, 692(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw ra, 740(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a0, ra |
| ; RV32I-NEXT: slli a4, a4, 8 |
| ; RV32I-NEXT: slli t6, a0, 24 |
| ; RV32I-NEXT: or a4, t6, a4 |
| ; RV32I-NEXT: or a4, a4, s0 |
| ; RV32I-NEXT: sw a4, 684(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: or a4, t4, a6 |
| ; RV32I-NEXT: sw a4, 688(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, t0, ra |
| ; RV32I-NEXT: slli a4, a4, 8 |
| ; RV32I-NEXT: slli s3, t0, 24 |
| ; RV32I-NEXT: or a4, s3, a4 |
| ; RV32I-NEXT: or a4, a4, a7 |
| ; RV32I-NEXT: sw a4, 696(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: or a4, s1, t5 |
| ; RV32I-NEXT: sw a4, 700(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 2 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 2 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 1 |
| ; RV32I-NEXT: and s4, a4, a6 |
| ; RV32I-NEXT: slli a6, a0, 1 |
| ; RV32I-NEXT: and s2, a5, a6 |
| ; RV32I-NEXT: and t5, a4, a6 |
| ; RV32I-NEXT: andi a4, a1, 4 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 4 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 2 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 640(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 2 |
| ; RV32I-NEXT: and s7, a5, a6 |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 676(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 8 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 8 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 3 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 612(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 3 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 628(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 668(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 16 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 16 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 4 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 604(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 4 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 608(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 652(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 32 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 32 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 5 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 584(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 5 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 592(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 636(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 64 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 64 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 6 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 648(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 6 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 656(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 672(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 128 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 128 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 7 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 556(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 7 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 568(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 596(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 256 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 256 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 8 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 536(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 8 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 540(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 576(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 512 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 512 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 9 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 588(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 9 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 600(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 632(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a4, a1, 1024 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 1024 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 10 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 660(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 10 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 664(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 680(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: li a4, 1 |
| ; RV32I-NEXT: slli a7, a4, 11 |
| ; RV32I-NEXT: and a4, a1, a7 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a7 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 11 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 488(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 11 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 500(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 520(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 1 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 12 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 476(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 12 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 484(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 508(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 2 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 13 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 512(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 13 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 516(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 560(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 4 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 14 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 572(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 14 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 580(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 616(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 8 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 15 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 620(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 15 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 624(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 644(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 16 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 16 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 412(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 16 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 416(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 448(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 32 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 17 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 396(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 17 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 404(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 420(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 64 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 18 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 436(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 18 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 444(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 480(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 128 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 19 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 496(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 19 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 504(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 524(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 256 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 20 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 528(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 20 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 532(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 552(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 512 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 21 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 544(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 21 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 548(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 564(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 1024 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 22 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 368(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 22 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 372(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 384(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 2048 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 23 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 360(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 23 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 364(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 376(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 4096 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 24 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 380(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a5, a5, t6 |
| ; RV32I-NEXT: sw a5, 388(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, t6 |
| ; RV32I-NEXT: sw a4, 392(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 8192 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 25 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 400(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 25 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 408(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 424(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 16384 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 26 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 428(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 26 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 432(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 460(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 32768 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 27 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 452(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 27 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 456(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 464(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 65536 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 28 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 472(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 28 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 468(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a6 |
| ; RV32I-NEXT: sw a4, 492(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 131072 |
| ; RV32I-NEXT: and a4, a1, a5 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: and a5, a3, a5 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 29 |
| ; RV32I-NEXT: and a6, a4, a6 |
| ; RV32I-NEXT: sw a6, 348(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, a0, 29 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: sw a5, 352(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and t6, a4, a6 |
| ; RV32I-NEXT: lui a5, 262144 |
| ; RV32I-NEXT: andi a4, a1, 1 |
| ; RV32I-NEXT: and a1, a1, a5 |
| ; RV32I-NEXT: lui t2, 262144 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: andi a5, a3, 1 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, a2, 30 |
| ; RV32I-NEXT: and a2, a4, a2 |
| ; RV32I-NEXT: sw a2, 308(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a5, a5, a0 |
| ; RV32I-NEXT: sw a5, 332(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a4, a4, a0 |
| ; RV32I-NEXT: sw a4, 356(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a0, a0, 30 |
| ; RV32I-NEXT: and a2, a3, t2 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: and a3, a1, a6 |
| ; RV32I-NEXT: sw a3, 304(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a2, a2, a0 |
| ; RV32I-NEXT: sw a2, 320(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a3, a1, a0 |
| ; RV32I-NEXT: andi a0, t3, 2 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 2 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 1 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 300(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 1 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 312(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 344(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 4 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 4 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 2 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 280(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 2 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 288(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 336(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 8 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 8 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 3 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 260(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 3 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 268(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 296(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 16 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 16 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 4 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 236(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 4 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 244(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 276(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 32 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 32 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 5 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 212(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 5 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 224(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 252(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 64 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 64 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 6 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 284(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 6 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 292(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 328(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 128 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 128 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 7 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 192(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 7 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 200(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 208(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 256 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 256 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 8 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 164(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 8 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 172(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 204(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 512 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 512 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 9 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 216(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 9 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 228(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 248(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 1024 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: andi a1, s6, 1024 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 10 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 316(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 10 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 324(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 340(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: sw a7, 440(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, a7 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a7 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 11 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 112(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 11 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 128(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 144(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 1 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 12 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 104(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 12 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 108(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 132(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 2 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 13 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 148(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 13 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 156(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 180(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 4 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 14 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 220(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 14 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 232(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 240(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 8 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 15 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 256(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 15 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 264(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 272(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 16 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli s0, t1, 16 |
| ; RV32I-NEXT: and s0, a0, s0 |
| ; RV32I-NEXT: slli a2, t0, 16 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 48(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 64(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 32 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 17 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 36(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 17 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 40(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 56(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 64 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 18 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 76(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 18 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 80(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 100(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 128 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 19 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 136(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 19 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 140(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 152(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 256 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 20 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 160(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 20 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 168(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 176(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 512 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 21 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 184(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a2, t0, 21 |
| ; RV32I-NEXT: and a1, a1, a2 |
| ; RV32I-NEXT: sw a1, 188(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 196(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 1024 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a2, t1, 22 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: sw a2, 12(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a5, t0, 22 |
| ; RV32I-NEXT: and a2, a1, a5 |
| ; RV32I-NEXT: and a0, a0, a5 |
| ; RV32I-NEXT: sw a0, 20(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a1, 2048 |
| ; RV32I-NEXT: and a0, t3, a1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: and a1, s6, a1 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a4, a0, -1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a0, t1, 23 |
| ; RV32I-NEXT: and a0, a4, a0 |
| ; RV32I-NEXT: sw a0, 8(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a6, t0, 23 |
| ; RV32I-NEXT: and a5, a1, a6 |
| ; RV32I-NEXT: and a0, a4, a6 |
| ; RV32I-NEXT: sw a0, 16(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a0, 4096 |
| ; RV32I-NEXT: and a6, t3, a0 |
| ; RV32I-NEXT: seqz a6, a6 |
| ; RV32I-NEXT: and a7, s6, a0 |
| ; RV32I-NEXT: seqz a7, a7 |
| ; RV32I-NEXT: addi t4, a6, -1 |
| ; RV32I-NEXT: addi a7, a7, -1 |
| ; RV32I-NEXT: slli a6, t1, 24 |
| ; RV32I-NEXT: and a0, t4, a6 |
| ; RV32I-NEXT: sw a0, 24(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, a7, s3 |
| ; RV32I-NEXT: sw a0, 28(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t4, s3 |
| ; RV32I-NEXT: sw a0, 32(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a0, 8192 |
| ; RV32I-NEXT: and s1, t3, a0 |
| ; RV32I-NEXT: seqz s1, s1 |
| ; RV32I-NEXT: and s3, s6, a0 |
| ; RV32I-NEXT: seqz s3, s3 |
| ; RV32I-NEXT: addi s5, s1, -1 |
| ; RV32I-NEXT: addi s3, s3, -1 |
| ; RV32I-NEXT: slli s1, t1, 25 |
| ; RV32I-NEXT: and a0, s5, s1 |
| ; RV32I-NEXT: sw a0, 44(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli s8, t0, 25 |
| ; RV32I-NEXT: and a0, s3, s8 |
| ; RV32I-NEXT: sw a0, 52(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, s5, s8 |
| ; RV32I-NEXT: sw a0, 60(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a0, 16384 |
| ; RV32I-NEXT: and s5, t3, a0 |
| ; RV32I-NEXT: seqz s5, s5 |
| ; RV32I-NEXT: and s8, s6, a0 |
| ; RV32I-NEXT: seqz s8, s8 |
| ; RV32I-NEXT: addi s9, s5, -1 |
| ; RV32I-NEXT: addi s8, s8, -1 |
| ; RV32I-NEXT: slli s5, t1, 26 |
| ; RV32I-NEXT: and a0, s9, s5 |
| ; RV32I-NEXT: sw a0, 68(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli s10, t0, 26 |
| ; RV32I-NEXT: and a0, s8, s10 |
| ; RV32I-NEXT: sw a0, 72(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, s9, s10 |
| ; RV32I-NEXT: sw a0, 84(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a0, 32768 |
| ; RV32I-NEXT: and s9, t3, a0 |
| ; RV32I-NEXT: seqz s9, s9 |
| ; RV32I-NEXT: and s10, s6, a0 |
| ; RV32I-NEXT: seqz s10, s10 |
| ; RV32I-NEXT: addi s9, s9, -1 |
| ; RV32I-NEXT: addi s10, s10, -1 |
| ; RV32I-NEXT: slli s11, t1, 27 |
| ; RV32I-NEXT: and a0, s9, s11 |
| ; RV32I-NEXT: sw a0, 88(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli s11, t0, 27 |
| ; RV32I-NEXT: and a0, s10, s11 |
| ; RV32I-NEXT: sw a0, 92(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, s9, s11 |
| ; RV32I-NEXT: sw a0, 96(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a0, 65536 |
| ; RV32I-NEXT: and s9, t3, a0 |
| ; RV32I-NEXT: seqz s9, s9 |
| ; RV32I-NEXT: and s10, s6, a0 |
| ; RV32I-NEXT: seqz s10, s10 |
| ; RV32I-NEXT: addi s9, s9, -1 |
| ; RV32I-NEXT: addi s10, s10, -1 |
| ; RV32I-NEXT: slli s11, t1, 28 |
| ; RV32I-NEXT: and a0, s9, s11 |
| ; RV32I-NEXT: sw a0, 120(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli s11, t0, 28 |
| ; RV32I-NEXT: and a0, s10, s11 |
| ; RV32I-NEXT: sw a0, 116(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, s9, s11 |
| ; RV32I-NEXT: sw a0, 124(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a0, 131072 |
| ; RV32I-NEXT: and s9, t3, a0 |
| ; RV32I-NEXT: seqz s9, s9 |
| ; RV32I-NEXT: and s10, s6, a0 |
| ; RV32I-NEXT: seqz s10, s10 |
| ; RV32I-NEXT: addi s9, s9, -1 |
| ; RV32I-NEXT: addi s10, s10, -1 |
| ; RV32I-NEXT: slli s11, t1, 29 |
| ; RV32I-NEXT: and s11, s9, s11 |
| ; RV32I-NEXT: slli ra, t0, 29 |
| ; RV32I-NEXT: and a4, s10, ra |
| ; RV32I-NEXT: and a0, s9, ra |
| ; RV32I-NEXT: sw a0, 4(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi ra, t3, 1 |
| ; RV32I-NEXT: lui a0, 262144 |
| ; RV32I-NEXT: and t3, t3, a0 |
| ; RV32I-NEXT: seqz ra, ra |
| ; RV32I-NEXT: andi s8, s6, 1 |
| ; RV32I-NEXT: seqz s8, s8 |
| ; RV32I-NEXT: addi ra, ra, -1 |
| ; RV32I-NEXT: addi s8, s8, -1 |
| ; RV32I-NEXT: slli t2, t1, 30 |
| ; RV32I-NEXT: and t1, ra, t1 |
| ; RV32I-NEXT: and s8, s8, t0 |
| ; RV32I-NEXT: and a6, ra, t0 |
| ; RV32I-NEXT: slli t0, t0, 30 |
| ; RV32I-NEXT: and s6, s6, a0 |
| ; RV32I-NEXT: seqz t3, t3 |
| ; RV32I-NEXT: seqz s6, s6 |
| ; RV32I-NEXT: addi t3, t3, -1 |
| ; RV32I-NEXT: addi s6, s6, -1 |
| ; RV32I-NEXT: and t2, t3, t2 |
| ; RV32I-NEXT: and s6, s6, t0 |
| ; RV32I-NEXT: and a0, t3, t0 |
| ; RV32I-NEXT: sw a0, 0(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 308(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, s4 |
| ; RV32I-NEXT: sw a0, 308(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 640(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 612(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 612(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 604(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 584(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 604(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 556(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 536(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 556(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 488(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 476(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 536(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 412(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 396(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 488(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 368(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 360(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 476(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 348(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 304(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 412(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 332(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, s2 |
| ; RV32I-NEXT: sw a0, 640(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 628(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, s7, a0 |
| ; RV32I-NEXT: sw a0, 396(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 608(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 592(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 608(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 568(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 540(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 592(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 500(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 484(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 540(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 416(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 404(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 484(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 372(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 364(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 416(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 352(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 320(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 404(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 300(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, t1, a0 |
| ; RV32I-NEXT: sw a0, 628(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 280(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 260(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 368(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 236(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 212(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 364(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 192(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 164(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 360(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 112(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 104(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 352(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 36(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s10, s0, a0 |
| ; RV32I-NEXT: lw a0, 12(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 8(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor ra, a0, a1 |
| ; RV32I-NEXT: xor s11, s11, t2 |
| ; RV32I-NEXT: lw a0, 312(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, s8, a0 |
| ; RV32I-NEXT: sw a0, 372(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 288(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 268(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s2, a0, a1 |
| ; RV32I-NEXT: lw a0, 244(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 224(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s5, a0, a1 |
| ; RV32I-NEXT: lw a0, 200(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 172(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s7, a0, a1 |
| ; RV32I-NEXT: lw a0, 128(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s0, 108(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s0, a0, s0 |
| ; RV32I-NEXT: lw a0, 48(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s1, 40(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s1, a0, s1 |
| ; RV32I-NEXT: xor s3, a2, a5 |
| ; RV32I-NEXT: xor s6, a4, s6 |
| ; RV32I-NEXT: lw a0, 356(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s4, a0, t5 |
| ; RV32I-NEXT: lw a0, 676(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 668(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, a0, a1 |
| ; RV32I-NEXT: lw a0, 652(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 636(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t1, a0, a1 |
| ; RV32I-NEXT: lw a0, 596(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 576(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t2, a0, a1 |
| ; RV32I-NEXT: lw a0, 520(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 508(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t3, a0, a1 |
| ; RV32I-NEXT: lw a0, 448(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 420(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t4, a0, a1 |
| ; RV32I-NEXT: lw a0, 384(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 376(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t5, a0, a1 |
| ; RV32I-NEXT: xor t6, t6, a3 |
| ; RV32I-NEXT: lw a0, 344(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a7, a6, a0 |
| ; RV32I-NEXT: lw a0, 336(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 296(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: lw a1, 276(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 252(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: lw a2, 208(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a3, 204(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a2, a3 |
| ; RV32I-NEXT: lw a3, 144(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a4, 132(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a3, a4 |
| ; RV32I-NEXT: lw a4, 64(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a5, 56(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a4, a5 |
| ; RV32I-NEXT: lw a5, 20(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a6, 16(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a5, a6 |
| ; RV32I-NEXT: lw a6, 4(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s8, 0(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a6, a6, s8 |
| ; RV32I-NEXT: lw s8, 308(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 612(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s8, s9 |
| ; RV32I-NEXT: sw s8, 596(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 648(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 604(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 584(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 588(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 556(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 588(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 512(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 536(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 576(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 436(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 488(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 568(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 380(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 476(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 556(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 716(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 412(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 716(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 640(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 396(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s8, s9 |
| ; RV32I-NEXT: sw s8, 512(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 656(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 608(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 508(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 600(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 592(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 500(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 516(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 540(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 516(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 444(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 484(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 488(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 388(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 416(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 484(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 720(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 404(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 720(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 628(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 368(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s8, s9 |
| ; RV32I-NEXT: sw s8, 676(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 284(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 364(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 668(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 216(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 360(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: sw s8, 656(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 148(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 352(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s9, s9, s8 |
| ; RV32I-NEXT: lw s8, 76(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s10, s10, s8 |
| ; RV32I-NEXT: lw s8, 24(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, ra, s8 |
| ; RV32I-NEXT: sw s8, 652(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 704(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s11, s8 |
| ; RV32I-NEXT: sw s8, 704(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s8, 372(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s8, s2 |
| ; RV32I-NEXT: lw s2, 292(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s2, s5, s2 |
| ; RV32I-NEXT: sw s2, 648(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s2, 228(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s2, s7, s2 |
| ; RV32I-NEXT: sw s2, 640(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s2, 156(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s0, s0, s2 |
| ; RV32I-NEXT: sw s0, 636(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s0, 80(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s0, s1, s0 |
| ; RV32I-NEXT: sw s0, 628(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s0, 28(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s0, s3, s0 |
| ; RV32I-NEXT: sw s0, 612(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw s0, 708(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s0, s6, s0 |
| ; RV32I-NEXT: sw s0, 708(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: xor t0, s4, t0 |
| ; RV32I-NEXT: sw t0, 608(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw t0, 672(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t1, t1, t0 |
| ; RV32I-NEXT: lw t0, 632(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t2, t0 |
| ; RV32I-NEXT: sw t0, 672(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw t0, 560(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t3, t0 |
| ; RV32I-NEXT: sw t0, 632(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw t0, 480(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t4, t0 |
| ; RV32I-NEXT: sw t0, 604(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw t0, 392(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t5, t0 |
| ; RV32I-NEXT: sw t0, 600(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw t0, 712(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t6, t0 |
| ; RV32I-NEXT: sw t0, 712(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: xor a0, a7, a0 |
| ; RV32I-NEXT: sw a0, 592(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 328(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a1, a0 |
| ; RV32I-NEXT: sw a0, 560(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 248(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a2, a0 |
| ; RV32I-NEXT: sw a0, 540(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 180(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a3, a0 |
| ; RV32I-NEXT: lw a0, 100(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a4, a0 |
| ; RV32I-NEXT: sw a0, 536(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 32(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a5, a0 |
| ; RV32I-NEXT: sw a0, 520(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 692(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a6, a0 |
| ; RV32I-NEXT: sw a0, 692(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 684(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli a5, a0, 4 |
| ; RV32I-NEXT: lw a1, 744(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and a6, a0, a1 |
| ; RV32I-NEXT: and a5, a5, a1 |
| ; RV32I-NEXT: slli a6, a6, 4 |
| ; RV32I-NEXT: or a0, a5, a6 |
| ; RV32I-NEXT: sw a0, 684(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 688(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli a6, a0, 4 |
| ; RV32I-NEXT: and a7, a0, a1 |
| ; RV32I-NEXT: and a6, a6, a1 |
| ; RV32I-NEXT: slli a7, a7, 4 |
| ; RV32I-NEXT: or a0, a6, a7 |
| ; RV32I-NEXT: sw a0, 688(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 596(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 584(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 596(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 660(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 588(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor ra, a2, a0 |
| ; RV32I-NEXT: lw a0, 572(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 576(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a2, a0 |
| ; RV32I-NEXT: sw a0, 588(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 496(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 568(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a2, a0 |
| ; RV32I-NEXT: sw a0, 584(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 400(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 556(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a2, a0 |
| ; RV32I-NEXT: sw a0, 576(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 512(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 508(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a2 |
| ; RV32I-NEXT: sw a0, 660(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 664(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 500(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s11, a2, a0 |
| ; RV32I-NEXT: lw a0, 580(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 516(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a2, a0 |
| ; RV32I-NEXT: sw a0, 664(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 504(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 488(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a2, a0 |
| ; RV32I-NEXT: sw a0, 580(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 408(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 484(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a2, a0 |
| ; RV32I-NEXT: sw a0, 572(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 696(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli t2, a0, 4 |
| ; RV32I-NEXT: and t3, a0, a1 |
| ; RV32I-NEXT: and t2, t2, a1 |
| ; RV32I-NEXT: slli t3, t3, 4 |
| ; RV32I-NEXT: or a0, t2, t3 |
| ; RV32I-NEXT: sw a0, 696(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 700(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli t3, a0, 4 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: and t3, t3, a1 |
| ; RV32I-NEXT: slli a0, a0, 4 |
| ; RV32I-NEXT: or a0, t3, a0 |
| ; RV32I-NEXT: sw a0, 700(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 676(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 668(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 676(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a0, 316(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 656(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s5, a1, a0 |
| ; RV32I-NEXT: lw a0, 220(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s6, s9, a0 |
| ; RV32I-NEXT: lw a0, 136(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s2, s10, a0 |
| ; RV32I-NEXT: lw a0, 44(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 652(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s3, a1, a0 |
| ; RV32I-NEXT: lw a0, 648(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s4, s8, a0 |
| ; RV32I-NEXT: lw a0, 324(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s0, 640(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s0, s0, a0 |
| ; RV32I-NEXT: lw a0, 232(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s1, 636(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s1, s1, a0 |
| ; RV32I-NEXT: lw a0, 140(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 628(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t4, a1, a0 |
| ; RV32I-NEXT: lw a0, 52(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 612(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t5, a1, a0 |
| ; RV32I-NEXT: lw a0, 608(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t6, a0, t1 |
| ; RV32I-NEXT: lw a0, 680(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 672(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t2, a1, a0 |
| ; RV32I-NEXT: lw a0, 616(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 632(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t3, a1, a0 |
| ; RV32I-NEXT: lw a0, 524(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 604(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a7, a1, a0 |
| ; RV32I-NEXT: lw a0, 424(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 600(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, a1, a0 |
| ; RV32I-NEXT: lw a0, 592(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 560(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t1, a0, a1 |
| ; RV32I-NEXT: lw a0, 340(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a4, 540(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a4, a0 |
| ; RV32I-NEXT: lw a0, 240(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a3, a0 |
| ; RV32I-NEXT: lw a0, 152(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 536(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a6, a1, a0 |
| ; RV32I-NEXT: lw a0, 60(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a3, 520(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a3, a0 |
| ; RV32I-NEXT: lw a0, 596(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor ra, a0, ra |
| ; RV32I-NEXT: lw a0, 620(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 588(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a1, a0 |
| ; RV32I-NEXT: lw a1, 528(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 584(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a1, a2, a1 |
| ; RV32I-NEXT: lw a2, 428(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s8, 576(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, s8, a2 |
| ; RV32I-NEXT: lw s8, 660(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s11, s8, s11 |
| ; RV32I-NEXT: lw s8, 624(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 664(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s8, s9, s8 |
| ; RV32I-NEXT: lw s9, 532(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s10, 580(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s9, s10, s9 |
| ; RV32I-NEXT: lw s10, 432(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s7, 572(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s10, s7, s10 |
| ; RV32I-NEXT: lw s7, 676(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s5, s7, s5 |
| ; RV32I-NEXT: lw s7, 256(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s6, s6, s7 |
| ; RV32I-NEXT: lw s7, 160(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s2, s2, s7 |
| ; RV32I-NEXT: lw s7, 68(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s3, s3, s7 |
| ; RV32I-NEXT: xor s0, s4, s0 |
| ; RV32I-NEXT: lw s4, 264(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s1, s1, s4 |
| ; RV32I-NEXT: lw s4, 168(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t4, t4, s4 |
| ; RV32I-NEXT: lw s4, 72(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t5, t5, s4 |
| ; RV32I-NEXT: xor t2, t6, t2 |
| ; RV32I-NEXT: lw t6, 644(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t3, t3, t6 |
| ; RV32I-NEXT: lw t6, 552(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a7, a7, t6 |
| ; RV32I-NEXT: lw t6, 460(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t0, t6 |
| ; RV32I-NEXT: xor a4, t1, a4 |
| ; RV32I-NEXT: lw t1, 272(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a5, t1 |
| ; RV32I-NEXT: lw t1, 176(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a6, a6, t1 |
| ; RV32I-NEXT: lw t1, 84(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a3, t1 |
| ; RV32I-NEXT: xor a0, ra, a0 |
| ; RV32I-NEXT: lw t1, 544(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a1, a1, t1 |
| ; RV32I-NEXT: lw t1, 452(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a2, t1 |
| ; RV32I-NEXT: xor t1, s11, s8 |
| ; RV32I-NEXT: lw t6, 548(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t6, s9, t6 |
| ; RV32I-NEXT: lw s4, 456(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s4, s10, s4 |
| ; RV32I-NEXT: xor s5, s5, s6 |
| ; RV32I-NEXT: lw s6, 184(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s2, s2, s6 |
| ; RV32I-NEXT: lw s6, 88(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s3, s3, s6 |
| ; RV32I-NEXT: xor s0, s0, s1 |
| ; RV32I-NEXT: lw s1, 188(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t4, t4, s1 |
| ; RV32I-NEXT: lw s1, 92(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t5, t5, s1 |
| ; RV32I-NEXT: xor t2, t2, t3 |
| ; RV32I-NEXT: lw t3, 564(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a7, a7, t3 |
| ; RV32I-NEXT: lw t3, 464(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t0, t3 |
| ; RV32I-NEXT: xor a4, a4, a5 |
| ; RV32I-NEXT: lw a5, 196(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t3, a6, a5 |
| ; RV32I-NEXT: lw a5, 96(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a3, a5 |
| ; RV32I-NEXT: lw a6, 684(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli a5, a6, 2 |
| ; RV32I-NEXT: lw s6, 724(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and a6, a6, s6 |
| ; RV32I-NEXT: and a5, a5, s6 |
| ; RV32I-NEXT: slli a6, a6, 2 |
| ; RV32I-NEXT: or s1, a5, a6 |
| ; RV32I-NEXT: lw a6, 688(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli a5, a6, 2 |
| ; RV32I-NEXT: and a6, a6, s6 |
| ; RV32I-NEXT: and a5, a5, s6 |
| ; RV32I-NEXT: slli a6, a6, 2 |
| ; RV32I-NEXT: or a5, a5, a6 |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: lw a1, 472(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a1, a2, a1 |
| ; RV32I-NEXT: xor a2, t1, t6 |
| ; RV32I-NEXT: lw a6, 468(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t1, s4, a6 |
| ; RV32I-NEXT: lw t6, 696(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli a6, t6, 2 |
| ; RV32I-NEXT: and t6, t6, s6 |
| ; RV32I-NEXT: and a6, a6, s6 |
| ; RV32I-NEXT: slli t6, t6, 2 |
| ; RV32I-NEXT: or t6, a6, t6 |
| ; RV32I-NEXT: lw s4, 700(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli a6, s4, 2 |
| ; RV32I-NEXT: and s4, s4, s6 |
| ; RV32I-NEXT: and a6, a6, s6 |
| ; RV32I-NEXT: slli s4, s4, 2 |
| ; RV32I-NEXT: or a6, a6, s4 |
| ; RV32I-NEXT: xor s2, s5, s2 |
| ; RV32I-NEXT: lw s4, 120(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s3, s3, s4 |
| ; RV32I-NEXT: xor t4, s0, t4 |
| ; RV32I-NEXT: lw s0, 116(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t5, t5, s0 |
| ; RV32I-NEXT: xor a7, t2, a7 |
| ; RV32I-NEXT: lw t2, 492(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t0, t2 |
| ; RV32I-NEXT: xor a4, a4, t3 |
| ; RV32I-NEXT: lw t2, 124(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a3, t2 |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: xor a1, a2, t1 |
| ; RV32I-NEXT: xor a2, s2, s3 |
| ; RV32I-NEXT: xor t1, t4, t5 |
| ; RV32I-NEXT: xor a7, a7, t0 |
| ; RV32I-NEXT: xor a3, a4, a3 |
| ; RV32I-NEXT: lw a4, 716(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a4 |
| ; RV32I-NEXT: lw a4, 720(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a1, a4 |
| ; RV32I-NEXT: lw a1, 704(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a2, a1 |
| ; RV32I-NEXT: lw a1, 708(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t1, a1 |
| ; RV32I-NEXT: lw a1, 712(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a7, a7, a1 |
| ; RV32I-NEXT: lw a1, 692(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t1, a3, a1 |
| ; RV32I-NEXT: srli a1, s1, 1 |
| ; RV32I-NEXT: lw s2, 728(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and a3, s1, s2 |
| ; RV32I-NEXT: and a1, a1, s2 |
| ; RV32I-NEXT: slli a3, a3, 1 |
| ; RV32I-NEXT: or a1, a1, a3 |
| ; RV32I-NEXT: xor a0, a4, a0 |
| ; RV32I-NEXT: sw a0, 720(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: srli a0, t6, 1 |
| ; RV32I-NEXT: and a3, t6, s2 |
| ; RV32I-NEXT: and a0, a0, s2 |
| ; RV32I-NEXT: slli a3, a3, 1 |
| ; RV32I-NEXT: or t5, a0, a3 |
| ; RV32I-NEXT: xor a0, t0, a2 |
| ; RV32I-NEXT: sw a0, 716(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: srli a0, a7, 8 |
| ; RV32I-NEXT: lw a3, 740(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and a0, a0, a3 |
| ; RV32I-NEXT: srli a2, a7, 24 |
| ; RV32I-NEXT: or a2, a0, a2 |
| ; RV32I-NEXT: slli a0, a7, 24 |
| ; RV32I-NEXT: and a4, a7, a3 |
| ; RV32I-NEXT: slli a4, a4, 8 |
| ; RV32I-NEXT: or a4, a0, a4 |
| ; RV32I-NEXT: srli a0, t1, 8 |
| ; RV32I-NEXT: and a0, a0, a3 |
| ; RV32I-NEXT: srli a7, t1, 24 |
| ; RV32I-NEXT: or a7, a0, a7 |
| ; RV32I-NEXT: slli a0, t1, 24 |
| ; RV32I-NEXT: and t0, t1, a3 |
| ; RV32I-NEXT: slli t0, t0, 8 |
| ; RV32I-NEXT: or t0, a0, t0 |
| ; RV32I-NEXT: srli a0, a5, 1 |
| ; RV32I-NEXT: and a5, a5, s2 |
| ; RV32I-NEXT: and a0, a0, s2 |
| ; RV32I-NEXT: slli a5, a5, 1 |
| ; RV32I-NEXT: or a0, a0, a5 |
| ; RV32I-NEXT: srli a5, a5, 31 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli t1, a1, 31 |
| ; RV32I-NEXT: and a3, a5, t1 |
| ; RV32I-NEXT: sw a3, 708(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: srli a5, a6, 1 |
| ; RV32I-NEXT: and a6, a6, s2 |
| ; RV32I-NEXT: and a5, a5, s2 |
| ; RV32I-NEXT: slli a6, a6, 1 |
| ; RV32I-NEXT: or t3, a5, a6 |
| ; RV32I-NEXT: srli a5, a6, 31 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, t5, 31 |
| ; RV32I-NEXT: and a3, a5, a6 |
| ; RV32I-NEXT: sw a3, 704(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: or a2, a4, a2 |
| ; RV32I-NEXT: sw a2, 700(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: or a2, t0, a7 |
| ; RV32I-NEXT: sw a2, 712(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 1 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 696(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 4 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 2 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 688(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 8 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 3 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 680(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 16 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 4 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 676(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 32 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 5 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 672(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 64 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 6 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 684(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 128 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 7 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 656(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 256 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 8 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 652(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 512 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 9 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 664(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 1024 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 10 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 692(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lw a3, 440(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and a2, a0, a3 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 11 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 636(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a5, 1 |
| ; RV32I-NEXT: and a2, a0, a5 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 12 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 628(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a6, 2 |
| ; RV32I-NEXT: and a2, a0, a6 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 13 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 644(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a7, 4 |
| ; RV32I-NEXT: and a2, a0, a7 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 14 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 660(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui s3, 8 |
| ; RV32I-NEXT: and a2, a0, s3 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 15 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 668(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui t1, 16 |
| ; RV32I-NEXT: and a2, a0, t1 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 16 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 612(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui t2, 32 |
| ; RV32I-NEXT: and a2, a0, t2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 17 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 604(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui t4, 64 |
| ; RV32I-NEXT: and a2, a0, t4 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 18 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 620(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui t6, 128 |
| ; RV32I-NEXT: and a2, a0, t6 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 19 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 632(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui s0, 256 |
| ; RV32I-NEXT: and a2, a0, s0 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 20 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 640(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui s4, 512 |
| ; RV32I-NEXT: and a2, a0, s4 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 21 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 648(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui s5, 1024 |
| ; RV32I-NEXT: and a2, a0, s5 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 22 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 592(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui s7, 2048 |
| ; RV32I-NEXT: and a2, a0, s7 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 23 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 588(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui s11, 4096 |
| ; RV32I-NEXT: and a2, a0, s11 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 24 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 596(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a2, 8192 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 25 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 600(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a2, 16384 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 26 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 608(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a2, 32768 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 27 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 616(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a2, 65536 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 28 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 624(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: lui a2, 131072 |
| ; RV32I-NEXT: and a2, a0, a2 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: slli a4, a1, 29 |
| ; RV32I-NEXT: and a2, a2, a4 |
| ; RV32I-NEXT: sw a2, 584(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a2, a0, 1 |
| ; RV32I-NEXT: seqz a2, a2 |
| ; RV32I-NEXT: addi a2, a2, -1 |
| ; RV32I-NEXT: and a2, a2, a1 |
| ; RV32I-NEXT: sw a2, 576(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: slli a1, a1, 30 |
| ; RV32I-NEXT: lui t0, 262144 |
| ; RV32I-NEXT: and a0, a0, t0 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 580(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 2 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 1 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 572(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 4 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 2 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 568(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 8 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 3 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 560(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 16 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 4 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 552(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 32 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 5 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 548(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 64 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 6 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 556(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 128 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 7 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 532(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 256 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 8 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 528(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 512 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 9 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 540(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: andi a0, t3, 1024 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 10 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 564(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, a3 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 11 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 516(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, a5 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 12 |
| ; RV32I-NEXT: and s9, a0, a1 |
| ; RV32I-NEXT: and a0, t3, a6 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli s1, t5, 13 |
| ; RV32I-NEXT: and a0, a0, s1 |
| ; RV32I-NEXT: sw a0, 524(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, a7 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 14 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 536(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, s3 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 15 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 544(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, t1 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 16 |
| ; RV32I-NEXT: and s8, a0, a1 |
| ; RV32I-NEXT: and a0, t3, t2 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a2, t5, 17 |
| ; RV32I-NEXT: and s3, a0, a2 |
| ; RV32I-NEXT: and a0, t3, t4 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 18 |
| ; RV32I-NEXT: and s10, a0, a1 |
| ; RV32I-NEXT: and a0, t3, t6 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 19 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 508(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, s0 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 20 |
| ; RV32I-NEXT: and a0, a0, a1 |
| ; RV32I-NEXT: sw a0, 512(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, s4 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli s0, t5, 21 |
| ; RV32I-NEXT: and a0, a0, s0 |
| ; RV32I-NEXT: sw a0, 520(sp) # 4-byte Folded Spill |
| ; RV32I-NEXT: and a0, t3, s5 |
| ; RV32I-NEXT: seqz a0, a0 |
| ; RV32I-NEXT: addi a0, a0, -1 |
| ; RV32I-NEXT: slli a1, t5, 22 |
| ; RV32I-NEXT: and s0, a0, a1 |
| ; RV32I-NEXT: and a1, t3, s7 |
| ; RV32I-NEXT: seqz a1, a1 |
| ; RV32I-NEXT: addi a1, a1, -1 |
| ; RV32I-NEXT: slli a4, t5, 23 |
| ; RV32I-NEXT: and t6, a1, a4 |
| ; RV32I-NEXT: and a4, t3, s11 |
| ; RV32I-NEXT: seqz a4, a4 |
| ; RV32I-NEXT: addi a4, a4, -1 |
| ; RV32I-NEXT: slli a5, t5, 24 |
| ; RV32I-NEXT: and s1, a4, a5 |
| ; RV32I-NEXT: lui a0, 8192 |
| ; RV32I-NEXT: and a5, t3, a0 |
| ; RV32I-NEXT: seqz a5, a5 |
| ; RV32I-NEXT: addi a5, a5, -1 |
| ; RV32I-NEXT: slli a6, t5, 25 |
| ; RV32I-NEXT: and s4, a5, a6 |
| ; RV32I-NEXT: lui a0, 16384 |
| ; RV32I-NEXT: and a6, t3, a0 |
| ; RV32I-NEXT: seqz a6, a6 |
| ; RV32I-NEXT: addi a6, a6, -1 |
| ; RV32I-NEXT: slli a7, t5, 26 |
| ; RV32I-NEXT: and s5, a6, a7 |
| ; RV32I-NEXT: lui a0, 32768 |
| ; RV32I-NEXT: and a7, t3, a0 |
| ; RV32I-NEXT: seqz a7, a7 |
| ; RV32I-NEXT: addi a7, a7, -1 |
| ; RV32I-NEXT: slli t2, t5, 27 |
| ; RV32I-NEXT: and s7, a7, t2 |
| ; RV32I-NEXT: lui a0, 65536 |
| ; RV32I-NEXT: and t2, t3, a0 |
| ; RV32I-NEXT: seqz t2, t2 |
| ; RV32I-NEXT: addi t2, t2, -1 |
| ; RV32I-NEXT: slli a3, t5, 28 |
| ; RV32I-NEXT: and s11, t2, a3 |
| ; RV32I-NEXT: lui a0, 131072 |
| ; RV32I-NEXT: and a3, t3, a0 |
| ; RV32I-NEXT: seqz a3, a3 |
| ; RV32I-NEXT: addi a3, a3, -1 |
| ; RV32I-NEXT: slli t4, t5, 29 |
| ; RV32I-NEXT: and t2, a3, t4 |
| ; RV32I-NEXT: and t4, t3, t0 |
| ; RV32I-NEXT: andi t3, t3, 1 |
| ; RV32I-NEXT: seqz t3, t3 |
| ; RV32I-NEXT: addi t3, t3, -1 |
| ; RV32I-NEXT: and t3, t3, t5 |
| ; RV32I-NEXT: slli t5, t5, 30 |
| ; RV32I-NEXT: seqz t4, t4 |
| ; RV32I-NEXT: addi t4, t4, -1 |
| ; RV32I-NEXT: and t4, t4, t5 |
| ; RV32I-NEXT: lw a0, 696(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 576(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t5, a1, a0 |
| ; RV32I-NEXT: lw a0, 688(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 680(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a7, a0, a1 |
| ; RV32I-NEXT: lw a0, 676(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 672(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, a0, a1 |
| ; RV32I-NEXT: lw a0, 656(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 652(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t1, a0, a1 |
| ; RV32I-NEXT: lw a0, 636(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a3, 628(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a0, a3 |
| ; RV32I-NEXT: lw a0, 612(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a4, 604(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a0, a4 |
| ; RV32I-NEXT: lw a0, 592(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a5, 588(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a0, a5 |
| ; RV32I-NEXT: lw a0, 584(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 580(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a6, a0, a1 |
| ; RV32I-NEXT: lw a0, 572(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t3, t3, a0 |
| ; RV32I-NEXT: lw a0, 568(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a1, 560(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, a0, a1 |
| ; RV32I-NEXT: lw a1, 552(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw a2, 548(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: lw a2, 532(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw ra, 528(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a2, ra |
| ; RV32I-NEXT: lw ra, 516(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor s9, ra, s9 |
| ; RV32I-NEXT: xor s3, s8, s3 |
| ; RV32I-NEXT: xor t6, s0, t6 |
| ; RV32I-NEXT: xor t2, t2, t4 |
| ; RV32I-NEXT: xor a7, t5, a7 |
| ; RV32I-NEXT: lw t4, 684(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t0, t4 |
| ; RV32I-NEXT: lw t4, 664(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t1, t1, t4 |
| ; RV32I-NEXT: lw t4, 644(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t4, a3, t4 |
| ; RV32I-NEXT: lw a3, 620(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a4, a3 |
| ; RV32I-NEXT: lw a3, 596(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a5, a3 |
| ; RV32I-NEXT: lw a3, 708(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a6, a3 |
| ; RV32I-NEXT: xor a6, t3, a0 |
| ; RV32I-NEXT: lw a0, 556(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a1, a1, a0 |
| ; RV32I-NEXT: lw a0, 540(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a2, a0 |
| ; RV32I-NEXT: lw a0, 524(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t3, s9, a0 |
| ; RV32I-NEXT: xor t5, s3, s10 |
| ; RV32I-NEXT: xor t6, t6, s1 |
| ; RV32I-NEXT: lw a0, 704(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a0, t2, a0 |
| ; RV32I-NEXT: lw s0, 700(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli t2, s0, 4 |
| ; RV32I-NEXT: lw s3, 744(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and s0, s0, s3 |
| ; RV32I-NEXT: and t2, t2, s3 |
| ; RV32I-NEXT: slli s0, s0, 4 |
| ; RV32I-NEXT: or t2, t2, s0 |
| ; RV32I-NEXT: lw s1, 712(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: srli s0, s1, 4 |
| ; RV32I-NEXT: and s1, s1, s3 |
| ; RV32I-NEXT: and s0, s0, s3 |
| ; RV32I-NEXT: slli s1, s1, 4 |
| ; RV32I-NEXT: or s0, s0, s1 |
| ; RV32I-NEXT: xor a7, a7, t0 |
| ; RV32I-NEXT: lw t0, 692(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t1, t0 |
| ; RV32I-NEXT: lw t1, 660(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t1, t4, t1 |
| ; RV32I-NEXT: lw t4, 632(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a4, t4 |
| ; RV32I-NEXT: lw t4, 600(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a5, t4 |
| ; RV32I-NEXT: xor a1, a6, a1 |
| ; RV32I-NEXT: lw a6, 564(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a2, a6 |
| ; RV32I-NEXT: lw a6, 536(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a6, t3, a6 |
| ; RV32I-NEXT: lw t3, 508(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t3, t5, t3 |
| ; RV32I-NEXT: xor t4, t6, s4 |
| ; RV32I-NEXT: xor a7, a7, t0 |
| ; RV32I-NEXT: lw t0, 668(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor t0, t1, t0 |
| ; RV32I-NEXT: lw t1, 640(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a4, t1 |
| ; RV32I-NEXT: lw t1, 608(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a5, t1 |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: lw a2, 544(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a6, a2 |
| ; RV32I-NEXT: lw a6, 512(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a6, t3, a6 |
| ; RV32I-NEXT: xor t1, t4, s5 |
| ; RV32I-NEXT: xor a7, a7, t0 |
| ; RV32I-NEXT: lw t0, 648(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a4, a4, t0 |
| ; RV32I-NEXT: lw t0, 616(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a5, t0 |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: lw a2, 520(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a6, a2 |
| ; RV32I-NEXT: xor a6, t1, s7 |
| ; RV32I-NEXT: srli t0, t2, 2 |
| ; RV32I-NEXT: and t1, t2, s6 |
| ; RV32I-NEXT: and t0, t0, s6 |
| ; RV32I-NEXT: slli t1, t1, 2 |
| ; RV32I-NEXT: or t0, t0, t1 |
| ; RV32I-NEXT: srli t1, s0, 2 |
| ; RV32I-NEXT: and t2, s0, s6 |
| ; RV32I-NEXT: and t1, t1, s6 |
| ; RV32I-NEXT: slli t2, t2, 2 |
| ; RV32I-NEXT: or t1, t1, t2 |
| ; RV32I-NEXT: xor a4, a7, a4 |
| ; RV32I-NEXT: lw a7, 624(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a5, a5, a7 |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: xor a2, a6, s11 |
| ; RV32I-NEXT: xor a4, a4, a5 |
| ; RV32I-NEXT: xor a1, a1, a2 |
| ; RV32I-NEXT: srli a2, t0, 1 |
| ; RV32I-NEXT: and a5, t0, s2 |
| ; RV32I-NEXT: xor a3, a4, a3 |
| ; RV32I-NEXT: srli a4, t1, 1 |
| ; RV32I-NEXT: and a6, t1, s2 |
| ; RV32I-NEXT: and a2, a2, s2 |
| ; RV32I-NEXT: slli a5, a5, 1 |
| ; RV32I-NEXT: and a4, a4, s2 |
| ; RV32I-NEXT: slli a6, a6, 1 |
| ; RV32I-NEXT: xor a7, a1, a0 |
| ; RV32I-NEXT: or a1, a2, a5 |
| ; RV32I-NEXT: or a0, a4, a6 |
| ; RV32I-NEXT: srli a2, a3, 8 |
| ; RV32I-NEXT: srli a4, a3, 24 |
| ; RV32I-NEXT: slli a5, a3, 24 |
| ; RV32I-NEXT: lw t0, 740(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: and a3, a3, t0 |
| ; RV32I-NEXT: and a2, a2, t0 |
| ; RV32I-NEXT: or a2, a2, a4 |
| ; RV32I-NEXT: srli a4, a7, 8 |
| ; RV32I-NEXT: slli a3, a3, 8 |
| ; RV32I-NEXT: or a3, a5, a3 |
| ; RV32I-NEXT: srli a5, a7, 24 |
| ; RV32I-NEXT: and a4, a4, t0 |
| ; RV32I-NEXT: or a4, a4, a5 |
| ; RV32I-NEXT: slli a5, a7, 24 |
| ; RV32I-NEXT: and a6, a7, t0 |
| ; RV32I-NEXT: slli a6, a6, 8 |
| ; RV32I-NEXT: or a5, a5, a6 |
| ; RV32I-NEXT: lui a6, 349525 |
| ; RV32I-NEXT: addi a6, a6, 1364 |
| ; RV32I-NEXT: or a2, a3, a2 |
| ; RV32I-NEXT: or a4, a5, a4 |
| ; RV32I-NEXT: srli a3, a2, 4 |
| ; RV32I-NEXT: and a2, a2, s3 |
| ; RV32I-NEXT: srli a5, a4, 4 |
| ; RV32I-NEXT: and a4, a4, s3 |
| ; RV32I-NEXT: and a3, a3, s3 |
| ; RV32I-NEXT: slli a2, a2, 4 |
| ; RV32I-NEXT: and a5, a5, s3 |
| ; RV32I-NEXT: slli a4, a4, 4 |
| ; RV32I-NEXT: or a2, a3, a2 |
| ; RV32I-NEXT: or a4, a5, a4 |
| ; RV32I-NEXT: srli a3, a2, 2 |
| ; RV32I-NEXT: and a2, a2, s6 |
| ; RV32I-NEXT: srli a5, a4, 2 |
| ; RV32I-NEXT: and a4, a4, s6 |
| ; RV32I-NEXT: and a3, a3, s6 |
| ; RV32I-NEXT: slli a2, a2, 2 |
| ; RV32I-NEXT: and a5, a5, s6 |
| ; RV32I-NEXT: slli a4, a4, 2 |
| ; RV32I-NEXT: or a2, a3, a2 |
| ; RV32I-NEXT: or a4, a5, a4 |
| ; RV32I-NEXT: srli a3, a2, 1 |
| ; RV32I-NEXT: srli a5, a4, 1 |
| ; RV32I-NEXT: and a3, a3, a6 |
| ; RV32I-NEXT: and a5, a5, a6 |
| ; RV32I-NEXT: and a2, a2, s2 |
| ; RV32I-NEXT: slli a2, a2, 1 |
| ; RV32I-NEXT: or a2, a3, a2 |
| ; RV32I-NEXT: and a3, a4, s2 |
| ; RV32I-NEXT: slli a3, a3, 1 |
| ; RV32I-NEXT: or a3, a5, a3 |
| ; RV32I-NEXT: srli a2, a2, 1 |
| ; RV32I-NEXT: srli a3, a3, 1 |
| ; RV32I-NEXT: lw a4, 720(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a2, a2, a4 |
| ; RV32I-NEXT: lw a4, 716(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: xor a3, a3, a4 |
| ; RV32I-NEXT: srli a4, a2, 8 |
| ; RV32I-NEXT: srli a5, a2, 24 |
| ; RV32I-NEXT: slli a6, a2, 24 |
| ; RV32I-NEXT: and a2, a2, t0 |
| ; RV32I-NEXT: and a4, a4, t0 |
| ; RV32I-NEXT: or a4, a4, a5 |
| ; RV32I-NEXT: srli a5, a3, 8 |
| ; RV32I-NEXT: slli a2, a2, 8 |
| ; RV32I-NEXT: or a2, a6, a2 |
| ; RV32I-NEXT: srli a6, a3, 24 |
| ; RV32I-NEXT: and a5, a5, t0 |
| ; RV32I-NEXT: or a5, a5, a6 |
| ; RV32I-NEXT: and a6, a3, t0 |
| ; RV32I-NEXT: slli a3, a3, 24 |
| ; RV32I-NEXT: slli a6, a6, 8 |
| ; RV32I-NEXT: or a3, a3, a6 |
| ; RV32I-NEXT: or a2, a2, a4 |
| ; RV32I-NEXT: or a3, a3, a5 |
| ; RV32I-NEXT: srli a4, a2, 4 |
| ; RV32I-NEXT: and a2, a2, s3 |
| ; RV32I-NEXT: srli a5, a3, 4 |
| ; RV32I-NEXT: and a3, a3, s3 |
| ; RV32I-NEXT: and a4, a4, s3 |
| ; RV32I-NEXT: and a5, a5, s3 |
| ; RV32I-NEXT: slli a2, a2, 4 |
| ; RV32I-NEXT: slli a3, a3, 4 |
| ; RV32I-NEXT: or a2, a4, a2 |
| ; RV32I-NEXT: or a3, a5, a3 |
| ; RV32I-NEXT: srli a4, a2, 2 |
| ; RV32I-NEXT: and a2, a2, s6 |
| ; RV32I-NEXT: srli a5, a3, 2 |
| ; RV32I-NEXT: and a3, a3, s6 |
| ; RV32I-NEXT: and a4, a4, s6 |
| ; RV32I-NEXT: and a5, a5, s6 |
| ; RV32I-NEXT: slli a2, a2, 2 |
| ; RV32I-NEXT: slli a3, a3, 2 |
| ; RV32I-NEXT: or a2, a4, a2 |
| ; RV32I-NEXT: or a3, a5, a3 |
| ; RV32I-NEXT: srli a4, a2, 1 |
| ; RV32I-NEXT: and a2, a2, s2 |
| ; RV32I-NEXT: srli a5, a3, 1 |
| ; RV32I-NEXT: and a3, a3, s2 |
| ; RV32I-NEXT: and a4, a4, s2 |
| ; RV32I-NEXT: and a5, a5, s2 |
| ; RV32I-NEXT: slli a2, a2, 1 |
| ; RV32I-NEXT: or a2, a4, a2 |
| ; RV32I-NEXT: slli a3, a3, 1 |
| ; RV32I-NEXT: or a3, a5, a3 |
| ; RV32I-NEXT: lw a4, 732(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: sw a2, 0(a4) |
| ; RV32I-NEXT: sw a1, 4(a4) |
| ; RV32I-NEXT: sw a3, 8(a4) |
| ; RV32I-NEXT: sw a0, 12(a4) |
| ; RV32I-NEXT: lw a4, 736(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: sw a2, 0(a4) |
| ; RV32I-NEXT: sw a1, 4(a4) |
| ; RV32I-NEXT: sw a3, 8(a4) |
| ; RV32I-NEXT: sw a0, 12(a4) |
| ; RV32I-NEXT: lw ra, 796(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s0, 792(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s1, 788(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s2, 784(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s3, 780(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s4, 776(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s5, 772(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s6, 768(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s7, 764(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s8, 760(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s9, 756(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s10, 752(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: lw s11, 748(sp) # 4-byte Folded Reload |
| ; RV32I-NEXT: addi sp, sp, 800 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: commutative_clmulr_v2i64: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -1120 |
| ; RV64I-NEXT: sd ra, 1112(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s0, 1104(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s1, 1096(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s2, 1088(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s3, 1080(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s4, 1072(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s5, 1064(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s6, 1056(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s7, 1048(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s8, 1040(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s9, 1032(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s10, 1024(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd s11, 1016(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd a5, 1008(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sd a4, 1000(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: mv s5, a0 |
| ; RV64I-NEXT: srli a5, a2, 24 |
| ; RV64I-NEXT: lui s4, 4080 |
| ; RV64I-NEXT: srli a6, a2, 8 |
| ; RV64I-NEXT: li t4, 255 |
| ; RV64I-NEXT: srli a7, a2, 40 |
| ; RV64I-NEXT: lui s0, 16 |
| ; RV64I-NEXT: srli t0, a2, 56 |
| ; RV64I-NEXT: srliw t1, a2, 24 |
| ; RV64I-NEXT: slli a4, a2, 56 |
| ; RV64I-NEXT: lui t2, 61681 |
| ; RV64I-NEXT: lui ra, 209715 |
| ; RV64I-NEXT: lui s3, 349525 |
| ; RV64I-NEXT: srli s6, a0, 24 |
| ; RV64I-NEXT: srli t3, a0, 8 |
| ; RV64I-NEXT: srli t5, a0, 40 |
| ; RV64I-NEXT: srli t6, a0, 56 |
| ; RV64I-NEXT: srliw s1, a0, 24 |
| ; RV64I-NEXT: slli a0, a0, 56 |
| ; RV64I-NEXT: sd a0, 952(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: srli s8, a3, 24 |
| ; RV64I-NEXT: srli s11, a3, 8 |
| ; RV64I-NEXT: srli s7, a3, 40 |
| ; RV64I-NEXT: srli s10, a3, 56 |
| ; RV64I-NEXT: and a5, a5, s4 |
| ; RV64I-NEXT: slli s2, t4, 24 |
| ; RV64I-NEXT: and a6, a6, s2 |
| ; RV64I-NEXT: or a6, a6, a5 |
| ; RV64I-NEXT: addi a0, s0, -256 |
| ; RV64I-NEXT: and a5, a7, a0 |
| ; RV64I-NEXT: or a7, a5, t0 |
| ; RV64I-NEXT: and a5, a2, s4 |
| ; RV64I-NEXT: slli t1, t1, 32 |
| ; RV64I-NEXT: addi s9, t2, -241 |
| ; RV64I-NEXT: addi ra, ra, 819 |
| ; RV64I-NEXT: addi t0, s3, 1365 |
| ; RV64I-NEXT: slli a5, a5, 24 |
| ; RV64I-NEXT: or a5, a5, t1 |
| ; RV64I-NEXT: slli t1, s9, 32 |
| ; RV64I-NEXT: add s9, s9, t1 |
| ; RV64I-NEXT: slli t1, ra, 32 |
| ; RV64I-NEXT: add ra, ra, t1 |
| ; RV64I-NEXT: slli t1, t0, 32 |
| ; RV64I-NEXT: add s0, t0, t1 |
| ; RV64I-NEXT: srliw t1, a3, 24 |
| ; RV64I-NEXT: and t0, s6, s4 |
| ; RV64I-NEXT: and t2, t3, s2 |
| ; RV64I-NEXT: or t0, t2, t0 |
| ; RV64I-NEXT: srli t2, a1, 24 |
| ; RV64I-NEXT: and t3, t5, a0 |
| ; RV64I-NEXT: or t3, t3, t6 |
| ; RV64I-NEXT: and t4, s5, s4 |
| ; RV64I-NEXT: slli s1, s1, 32 |
| ; RV64I-NEXT: slli t4, t4, 24 |
| ; RV64I-NEXT: or t4, t4, s1 |
| ; RV64I-NEXT: srli t5, a1, 8 |
| ; RV64I-NEXT: and t6, s8, s4 |
| ; RV64I-NEXT: mv s6, s2 |
| ; RV64I-NEXT: sd s2, 992(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and s1, s11, s2 |
| ; RV64I-NEXT: or t6, s1, t6 |
| ; RV64I-NEXT: srli s1, a1, 40 |
| ; RV64I-NEXT: and s2, s7, a0 |
| ; RV64I-NEXT: or s2, s2, s10 |
| ; RV64I-NEXT: and s3, a3, s4 |
| ; RV64I-NEXT: slli t1, t1, 32 |
| ; RV64I-NEXT: slli s3, s3, 24 |
| ; RV64I-NEXT: or t1, s3, t1 |
| ; RV64I-NEXT: srli s3, a1, 56 |
| ; RV64I-NEXT: and t2, t2, s4 |
| ; RV64I-NEXT: and t5, t5, s6 |
| ; RV64I-NEXT: or t2, t5, t2 |
| ; RV64I-NEXT: srliw t5, a1, 24 |
| ; RV64I-NEXT: and s1, s1, a0 |
| ; RV64I-NEXT: or s1, s1, s3 |
| ; RV64I-NEXT: and s3, a1, s4 |
| ; RV64I-NEXT: slli t5, t5, 32 |
| ; RV64I-NEXT: slli s3, s3, 24 |
| ; RV64I-NEXT: or s3, s3, t5 |
| ; RV64I-NEXT: li t5, 1 |
| ; RV64I-NEXT: or a6, a6, a7 |
| ; RV64I-NEXT: slli a7, a3, 56 |
| ; RV64I-NEXT: mv s4, a0 |
| ; RV64I-NEXT: sd a0, 976(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, a2, a0 |
| ; RV64I-NEXT: slli a2, a2, 40 |
| ; RV64I-NEXT: or a2, a4, a2 |
| ; RV64I-NEXT: slli a4, a1, 56 |
| ; RV64I-NEXT: or t0, t0, t3 |
| ; RV64I-NEXT: slli s6, t5, 11 |
| ; RV64I-NEXT: sd s6, 440(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a0, s5, a0 |
| ; RV64I-NEXT: and a3, a3, s4 |
| ; RV64I-NEXT: and a1, a1, s4 |
| ; RV64I-NEXT: slli a0, a0, 40 |
| ; RV64I-NEXT: slli a3, a3, 40 |
| ; RV64I-NEXT: slli a1, a1, 40 |
| ; RV64I-NEXT: ld t3, 952(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: or a0, t3, a0 |
| ; RV64I-NEXT: or t3, t6, s2 |
| ; RV64I-NEXT: or a3, a7, a3 |
| ; RV64I-NEXT: or a7, t2, s1 |
| ; RV64I-NEXT: or a1, a4, a1 |
| ; RV64I-NEXT: or a2, a2, a5 |
| ; RV64I-NEXT: or a0, a0, t4 |
| ; RV64I-NEXT: or a3, a3, t1 |
| ; RV64I-NEXT: or a1, a1, s3 |
| ; RV64I-NEXT: or a2, a2, a6 |
| ; RV64I-NEXT: or a0, a0, t0 |
| ; RV64I-NEXT: or a3, a3, t3 |
| ; RV64I-NEXT: or a1, a1, a7 |
| ; RV64I-NEXT: srli a4, a2, 4 |
| ; RV64I-NEXT: sd s9, 984(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, a2, s9 |
| ; RV64I-NEXT: srli a5, a0, 4 |
| ; RV64I-NEXT: and a0, a0, s9 |
| ; RV64I-NEXT: srli a6, a3, 4 |
| ; RV64I-NEXT: and a3, a3, s9 |
| ; RV64I-NEXT: srli a7, a1, 4 |
| ; RV64I-NEXT: and a1, a1, s9 |
| ; RV64I-NEXT: and a4, a4, s9 |
| ; RV64I-NEXT: slli a2, a2, 4 |
| ; RV64I-NEXT: and a5, a5, s9 |
| ; RV64I-NEXT: slli a0, a0, 4 |
| ; RV64I-NEXT: and a6, a6, s9 |
| ; RV64I-NEXT: slli a3, a3, 4 |
| ; RV64I-NEXT: and a7, a7, s9 |
| ; RV64I-NEXT: slli a1, a1, 4 |
| ; RV64I-NEXT: or a2, a4, a2 |
| ; RV64I-NEXT: or a0, a5, a0 |
| ; RV64I-NEXT: or a3, a6, a3 |
| ; RV64I-NEXT: or a1, a7, a1 |
| ; RV64I-NEXT: srli a4, a2, 2 |
| ; RV64I-NEXT: sd ra, 968(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, a2, ra |
| ; RV64I-NEXT: srli a5, a0, 2 |
| ; RV64I-NEXT: and a0, a0, ra |
| ; RV64I-NEXT: srli a6, a3, 2 |
| ; RV64I-NEXT: and a3, a3, ra |
| ; RV64I-NEXT: srli a7, a1, 2 |
| ; RV64I-NEXT: and a1, a1, ra |
| ; RV64I-NEXT: and a4, a4, ra |
| ; RV64I-NEXT: slli a2, a2, 2 |
| ; RV64I-NEXT: and a5, a5, ra |
| ; RV64I-NEXT: slli a0, a0, 2 |
| ; RV64I-NEXT: and a6, a6, ra |
| ; RV64I-NEXT: slli a3, a3, 2 |
| ; RV64I-NEXT: and a7, a7, ra |
| ; RV64I-NEXT: slli a1, a1, 2 |
| ; RV64I-NEXT: or a2, a4, a2 |
| ; RV64I-NEXT: or a0, a5, a0 |
| ; RV64I-NEXT: or a3, a6, a3 |
| ; RV64I-NEXT: or a1, a7, a1 |
| ; RV64I-NEXT: srli a4, a2, 1 |
| ; RV64I-NEXT: sd s0, 960(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, a2, s0 |
| ; RV64I-NEXT: srli a5, a0, 1 |
| ; RV64I-NEXT: and a0, a0, s0 |
| ; RV64I-NEXT: srli a6, a3, 1 |
| ; RV64I-NEXT: and a3, a3, s0 |
| ; RV64I-NEXT: srli a7, a1, 1 |
| ; RV64I-NEXT: and a1, a1, s0 |
| ; RV64I-NEXT: and a4, a4, s0 |
| ; RV64I-NEXT: slli a2, a2, 1 |
| ; RV64I-NEXT: and a5, a5, s0 |
| ; RV64I-NEXT: slli a0, a0, 1 |
| ; RV64I-NEXT: and a6, a6, s0 |
| ; RV64I-NEXT: slli t0, a3, 1 |
| ; RV64I-NEXT: and a7, a7, s0 |
| ; RV64I-NEXT: slli a3, a1, 1 |
| ; RV64I-NEXT: or s0, a4, a2 |
| ; RV64I-NEXT: or s1, a5, a0 |
| ; RV64I-NEXT: srli a2, a0, 63 |
| ; RV64I-NEXT: or a1, a6, t0 |
| ; RV64I-NEXT: or t0, a7, a3 |
| ; RV64I-NEXT: srli a3, a3, 63 |
| ; RV64I-NEXT: slli a4, s0, 1 |
| ; RV64I-NEXT: andi a5, s1, 2 |
| ; RV64I-NEXT: slli a6, s0, 2 |
| ; RV64I-NEXT: andi a7, s1, 4 |
| ; RV64I-NEXT: slli a0, s0, 3 |
| ; RV64I-NEXT: andi t1, s1, 8 |
| ; RV64I-NEXT: slli t2, s0, 4 |
| ; RV64I-NEXT: andi t3, s1, 16 |
| ; RV64I-NEXT: slli t4, s0, 5 |
| ; RV64I-NEXT: andi t6, s1, 32 |
| ; RV64I-NEXT: slli s2, s0, 63 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: and a2, a2, s2 |
| ; RV64I-NEXT: sd a2, 944(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, a1, 63 |
| ; RV64I-NEXT: seqz a3, a3 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a2, a3, a2 |
| ; RV64I-NEXT: sd a2, 952(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, s0, 6 |
| ; RV64I-NEXT: seqz a3, a5 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a3, a3, a4 |
| ; RV64I-NEXT: sd a3, 456(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a3, s1, 64 |
| ; RV64I-NEXT: seqz a4, a7 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: and a4, a4, a6 |
| ; RV64I-NEXT: sd a4, 448(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a4, s0, 7 |
| ; RV64I-NEXT: seqz a5, t1 |
| ; RV64I-NEXT: addi a5, a5, -1 |
| ; RV64I-NEXT: and a0, a5, a0 |
| ; RV64I-NEXT: sd a0, 912(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a5, s1, 128 |
| ; RV64I-NEXT: seqz a6, t3 |
| ; RV64I-NEXT: addi a6, a6, -1 |
| ; RV64I-NEXT: and a0, a6, t2 |
| ; RV64I-NEXT: sd a0, 480(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a6, s0, 8 |
| ; RV64I-NEXT: seqz a7, t6 |
| ; RV64I-NEXT: addi a7, a7, -1 |
| ; RV64I-NEXT: and a0, a7, t4 |
| ; RV64I-NEXT: sd a0, 472(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a7, s1, 256 |
| ; RV64I-NEXT: seqz a3, a3 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a2, a3, a2 |
| ; RV64I-NEXT: sd a2, 928(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, s0, 9 |
| ; RV64I-NEXT: seqz a3, a5 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a3, a3, a4 |
| ; RV64I-NEXT: sd a3, 464(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a3, s1, 512 |
| ; RV64I-NEXT: seqz a4, a7 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: and a0, a4, a6 |
| ; RV64I-NEXT: sd a0, 880(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a4, s0, 10 |
| ; RV64I-NEXT: seqz a3, a3 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: and a2, a3, a2 |
| ; RV64I-NEXT: sd a2, 904(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a2, s1, 1024 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: and a2, a2, a4 |
| ; RV64I-NEXT: sd a2, 936(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, s6 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 11 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 856(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 1 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 12 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 848(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 2 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 13 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 872(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 4 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 14 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 896(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 8 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 15 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 920(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 16 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 16 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 808(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 32 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 17 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 792(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 64 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 18 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 824(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 128 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 19 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 840(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 256 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 20 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 864(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 512 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 21 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 888(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 1024 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 22 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 744(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 2048 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 23 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 736(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 4096 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 24 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 768(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 8192 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 25 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 784(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 16384 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 26 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 800(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 32768 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 27 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 816(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 65536 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 28 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 832(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 131072 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 29 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 680(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a2, 262144 |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 30 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 664(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sraiw a2, s1, 31 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 31 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 704(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 32 |
| ; RV64I-NEXT: sd a2, 432(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 32 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 720(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 33 |
| ; RV64I-NEXT: sd a2, 424(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 33 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 728(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 34 |
| ; RV64I-NEXT: sd a2, 416(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 34 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 752(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 35 |
| ; RV64I-NEXT: sd a2, 408(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 35 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 760(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 36 |
| ; RV64I-NEXT: sd a2, 400(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 36 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 776(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 37 |
| ; RV64I-NEXT: sd a2, 384(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 37 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 608(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 38 |
| ; RV64I-NEXT: sd a2, 376(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 38 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 592(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 39 |
| ; RV64I-NEXT: sd a2, 368(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 39 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 640(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 40 |
| ; RV64I-NEXT: sd a2, 352(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 40 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 648(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 41 |
| ; RV64I-NEXT: sd a2, 328(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, s1, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 41 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 656(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli ra, t5, 42 |
| ; RV64I-NEXT: and a2, s1, ra |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, s0, 42 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 672(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a3, t5, 43 |
| ; RV64I-NEXT: and a2, s1, a3 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a4, s0, 43 |
| ; RV64I-NEXT: and a2, a2, a4 |
| ; RV64I-NEXT: sd a2, 688(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a2, t5, 44 |
| ; RV64I-NEXT: and a4, s1, a2 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 44 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 696(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s10, t5, 45 |
| ; RV64I-NEXT: and a4, s1, s10 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 45 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 712(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s9, t5, 46 |
| ; RV64I-NEXT: and a4, s1, s9 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 46 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 552(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s8, t5, 47 |
| ; RV64I-NEXT: and a4, s1, s8 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 47 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 544(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s7, t5, 48 |
| ; RV64I-NEXT: and a4, s1, s7 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 48 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 560(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s6, t5, 49 |
| ; RV64I-NEXT: and a4, s1, s6 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 49 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 568(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s5, t5, 50 |
| ; RV64I-NEXT: and a4, s1, s5 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 50 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 576(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s4, t5, 51 |
| ; RV64I-NEXT: and a4, s1, s4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 51 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 584(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s3, t5, 52 |
| ; RV64I-NEXT: and a4, s1, s3 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 52 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 600(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a7, t5, 53 |
| ; RV64I-NEXT: and a4, s1, a7 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 53 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 616(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a6, t5, 54 |
| ; RV64I-NEXT: and a4, s1, a6 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 54 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 632(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli a0, t5, 55 |
| ; RV64I-NEXT: and a4, s1, a0 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 55 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 624(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s2, t5, 56 |
| ; RV64I-NEXT: and a4, s1, s2 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 56 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 496(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli t6, t5, 57 |
| ; RV64I-NEXT: and a4, s1, t6 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 57 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 488(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli t4, t5, 58 |
| ; RV64I-NEXT: and a4, s1, t4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 58 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 504(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli t3, t5, 59 |
| ; RV64I-NEXT: and a4, s1, t3 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 59 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 512(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli t2, t5, 60 |
| ; RV64I-NEXT: and a4, s1, t2 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 60 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 520(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli s11, t5, 61 |
| ; RV64I-NEXT: and a4, s1, s11 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, s0, 61 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 528(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: slli t1, t5, 62 |
| ; RV64I-NEXT: andi a4, s1, 1 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: and t5, a4, s0 |
| ; RV64I-NEXT: slli s0, s0, 62 |
| ; RV64I-NEXT: and a4, s1, t1 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: and a4, a4, s0 |
| ; RV64I-NEXT: sd a4, 536(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 2 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 1 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 392(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 2 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 344(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 8 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 3 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 320(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 16 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 4 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 312(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 32 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 5 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 296(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 64 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 6 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 360(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 128 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 7 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 280(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 256 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 8 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 264(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 512 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 9 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 304(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: andi a4, t0, 1024 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 10 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 336(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 440(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 11 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 240(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 1 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 12 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 216(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 2 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 13 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 256(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 4 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 14 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 288(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 8 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 15 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 440(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 16 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 16 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 184(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 32 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 17 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 176(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 64 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 18 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 200(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 128 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 19 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 232(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 256 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 20 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 248(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 512 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 21 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 272(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 1024 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 22 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 152(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 2048 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 23 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 136(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 4096 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 24 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 160(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 8192 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 25 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 168(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 16384 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 26 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 192(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 32768 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 27 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 208(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 65536 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 28 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 224(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 131072 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 29 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 112(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: lui a4, 262144 |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli s1, a1, 30 |
| ; RV64I-NEXT: and a4, a4, s1 |
| ; RV64I-NEXT: sd a4, 104(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: sraiw a4, t0, 31 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 31 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 120(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 432(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 32 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 128(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 424(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 33 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 144(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 416(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 34 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 416(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 408(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 35 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 424(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 400(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 36 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 432(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 384(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 37 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 64(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 376(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 38 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 48(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 368(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 39 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 80(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 352(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli s0, a1, 40 |
| ; RV64I-NEXT: and a4, a4, s0 |
| ; RV64I-NEXT: sd a4, 352(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a4, 328(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a4, t0, a4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 41 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 368(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a4, t0, ra |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 42 |
| ; RV64I-NEXT: and a4, a4, a5 |
| ; RV64I-NEXT: sd a4, 376(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a3, t0, a3 |
| ; RV64I-NEXT: seqz a3, a3 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: slli a4, a1, 43 |
| ; RV64I-NEXT: and a3, a3, a4 |
| ; RV64I-NEXT: sd a3, 384(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, a2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 44 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 400(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, s10 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 45 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 408(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, s9 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 46 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 16(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, s8 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a5, a1, 47 |
| ; RV64I-NEXT: and s10, a2, a5 |
| ; RV64I-NEXT: and a2, t0, s7 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 48 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 24(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, s6 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 49 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 32(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, s5 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 50 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 40(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, s4 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 51 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 56(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, s3 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 52 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 72(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, a7 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 53 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 88(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, a6 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 54 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 328(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, a0 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 55 |
| ; RV64I-NEXT: and a2, a2, a3 |
| ; RV64I-NEXT: sd a2, 96(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: and a2, t0, s2 |
| ; RV64I-NEXT: seqz a2, a2 |
| ; RV64I-NEXT: addi a2, a2, -1 |
| ; RV64I-NEXT: slli a3, a1, 56 |
| ; RV64I-NEXT: and s6, a2, a3 |
| ; RV64I-NEXT: and a3, t0, t6 |
| ; RV64I-NEXT: seqz a3, a3 |
| ; RV64I-NEXT: addi a3, a3, -1 |
| ; RV64I-NEXT: slli a4, a1, 57 |
| ; RV64I-NEXT: and s5, a3, a4 |
| ; RV64I-NEXT: and a4, t0, t4 |
| ; RV64I-NEXT: seqz a4, a4 |
| ; RV64I-NEXT: addi a4, a4, -1 |
| ; RV64I-NEXT: slli a5, a1, 58 |
| ; RV64I-NEXT: and s7, a4, a5 |
| ; RV64I-NEXT: and a5, t0, t3 |
| ; RV64I-NEXT: seqz a5, a5 |
| ; RV64I-NEXT: addi a5, a5, -1 |
| ; RV64I-NEXT: slli a6, a1, 59 |
| ; RV64I-NEXT: and s8, a5, a6 |
| ; RV64I-NEXT: and a6, t0, t2 |
| ; RV64I-NEXT: seqz a6, a6 |
| ; RV64I-NEXT: addi a6, a6, -1 |
| ; RV64I-NEXT: slli a0, a1, 60 |
| ; RV64I-NEXT: and s9, a6, a0 |
| ; RV64I-NEXT: and a0, t0, s11 |
| ; RV64I-NEXT: seqz a0, a0 |
| ; RV64I-NEXT: addi a0, a0, -1 |
| ; RV64I-NEXT: slli s11, a1, 61 |
| ; RV64I-NEXT: and s11, a0, s11 |
| ; RV64I-NEXT: and a0, t0, t1 |
| ; RV64I-NEXT: andi t0, t0, 1 |
| ; RV64I-NEXT: seqz t0, t0 |
| ; RV64I-NEXT: addi t0, t0, -1 |
| ; RV64I-NEXT: and t0, t0, a1 |
| ; RV64I-NEXT: slli a1, a1, 62 |
| ; RV64I-NEXT: seqz a0, a0 |
| ; RV64I-NEXT: addi a0, a0, -1 |
| ; RV64I-NEXT: and a0, a0, a1 |
| ; RV64I-NEXT: sd a0, 8(sp) # 8-byte Folded Spill |
| ; RV64I-NEXT: ld a0, 456(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s4, t5, a0 |
| ; RV64I-NEXT: ld a0, 912(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 448(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t3, a1, a0 |
| ; RV64I-NEXT: ld a0, 480(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 472(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t4, a0, a1 |
| ; RV64I-NEXT: ld a0, 880(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 464(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t5, a1, a0 |
| ; RV64I-NEXT: ld a0, 856(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 848(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t6, a0, a1 |
| ; RV64I-NEXT: ld a0, 808(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s0, 792(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s0, a0, s0 |
| ; RV64I-NEXT: ld a0, 744(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s1, 736(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s1, a0, s1 |
| ; RV64I-NEXT: ld a0, 680(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 664(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s2, a0, a1 |
| ; RV64I-NEXT: ld a0, 608(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 592(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s3, a0, a1 |
| ; RV64I-NEXT: ld a0, 552(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 544(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t1, a0, a1 |
| ; RV64I-NEXT: ld a0, 496(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 488(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t2, a0, a1 |
| ; RV64I-NEXT: ld a0, 392(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t0, t0, a0 |
| ; RV64I-NEXT: ld a0, 344(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a1, 320(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 312(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a2, 296(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a1, a2 |
| ; RV64I-NEXT: ld a2, 280(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a3, 264(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a2, a2, a3 |
| ; RV64I-NEXT: ld a3, 240(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a4, 216(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a3, a3, a4 |
| ; RV64I-NEXT: ld a4, 184(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a5, 176(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a4, a4, a5 |
| ; RV64I-NEXT: ld a5, 152(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a6, 136(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a5, a5, a6 |
| ; RV64I-NEXT: ld a6, 112(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld a7, 104(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a6, a6, a7 |
| ; RV64I-NEXT: ld a7, 64(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld ra, 48(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a7, a7, ra |
| ; RV64I-NEXT: ld ra, 16(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s10, ra, s10 |
| ; RV64I-NEXT: xor s5, s6, s5 |
| ; RV64I-NEXT: xor t3, s4, t3 |
| ; RV64I-NEXT: ld s4, 928(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t4, t4, s4 |
| ; RV64I-NEXT: ld s4, 904(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t5, t5, s4 |
| ; RV64I-NEXT: ld s4, 872(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t6, t6, s4 |
| ; RV64I-NEXT: ld s4, 824(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s0, s0, s4 |
| ; RV64I-NEXT: ld s4, 768(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s1, s1, s4 |
| ; RV64I-NEXT: ld s4, 704(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s2, s2, s4 |
| ; RV64I-NEXT: ld s4, 640(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s3, s3, s4 |
| ; RV64I-NEXT: ld s4, 560(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t1, t1, s4 |
| ; RV64I-NEXT: ld s4, 504(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t2, t2, s4 |
| ; RV64I-NEXT: xor a0, t0, a0 |
| ; RV64I-NEXT: ld t0, 360(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a1, t0 |
| ; RV64I-NEXT: ld t0, 304(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a2, a2, t0 |
| ; RV64I-NEXT: ld t0, 256(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a3, a3, t0 |
| ; RV64I-NEXT: ld t0, 200(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a4, a4, t0 |
| ; RV64I-NEXT: ld t0, 160(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a5, a5, t0 |
| ; RV64I-NEXT: ld t0, 120(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a6, a6, t0 |
| ; RV64I-NEXT: ld t0, 80(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a7, a7, t0 |
| ; RV64I-NEXT: ld t0, 24(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t0, s10, t0 |
| ; RV64I-NEXT: xor s4, s5, s7 |
| ; RV64I-NEXT: xor t3, t3, t4 |
| ; RV64I-NEXT: ld t4, 936(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t4, t5, t4 |
| ; RV64I-NEXT: ld t5, 896(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t5, t6, t5 |
| ; RV64I-NEXT: ld t6, 840(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t6, s0, t6 |
| ; RV64I-NEXT: ld s0, 784(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s0, s1, s0 |
| ; RV64I-NEXT: ld s1, 720(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s1, s2, s1 |
| ; RV64I-NEXT: ld s2, 648(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s2, s3, s2 |
| ; RV64I-NEXT: ld s3, 568(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t1, t1, s3 |
| ; RV64I-NEXT: ld s3, 512(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t2, t2, s3 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 336(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a2, a1 |
| ; RV64I-NEXT: ld a2, 288(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a2, a3, a2 |
| ; RV64I-NEXT: ld a3, 232(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a3, a4, a3 |
| ; RV64I-NEXT: ld a4, 168(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a4, a5, a4 |
| ; RV64I-NEXT: ld a5, 128(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a5, a6, a5 |
| ; RV64I-NEXT: ld a6, 352(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a6, a7, a6 |
| ; RV64I-NEXT: ld a7, 32(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a7, t0, a7 |
| ; RV64I-NEXT: xor t0, s4, s8 |
| ; RV64I-NEXT: xor t3, t3, t4 |
| ; RV64I-NEXT: ld t4, 920(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t4, t5, t4 |
| ; RV64I-NEXT: ld t5, 864(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t5, t6, t5 |
| ; RV64I-NEXT: ld t6, 800(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t6, s0, t6 |
| ; RV64I-NEXT: ld s0, 728(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s0, s1, s0 |
| ; RV64I-NEXT: ld s1, 656(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor s1, s2, s1 |
| ; RV64I-NEXT: ld s2, 576(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t1, t1, s2 |
| ; RV64I-NEXT: ld s2, 520(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t2, t2, s2 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 440(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a2, a1 |
| ; RV64I-NEXT: ld a2, 248(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a2, a3, a2 |
| ; RV64I-NEXT: ld a3, 192(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a3, a4, a3 |
| ; RV64I-NEXT: ld a4, 144(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a4, a5, a4 |
| ; RV64I-NEXT: ld a5, 368(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a5, a6, a5 |
| ; RV64I-NEXT: ld a6, 40(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a6, a7, a6 |
| ; RV64I-NEXT: xor a7, t0, s9 |
| ; RV64I-NEXT: xor t0, t3, t4 |
| ; RV64I-NEXT: ld t3, 888(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t3, t5, t3 |
| ; RV64I-NEXT: ld t4, 816(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t4, t6, t4 |
| ; RV64I-NEXT: ld t5, 752(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t5, s0, t5 |
| ; RV64I-NEXT: ld t6, 672(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t6, s1, t6 |
| ; RV64I-NEXT: ld s0, 584(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t1, t1, s0 |
| ; RV64I-NEXT: ld s0, 528(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t2, t2, s0 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 272(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a2, a1 |
| ; RV64I-NEXT: ld a2, 208(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a2, a3, a2 |
| ; RV64I-NEXT: ld a3, 416(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a3, a4, a3 |
| ; RV64I-NEXT: ld a4, 376(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a4, a5, a4 |
| ; RV64I-NEXT: ld a5, 56(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a5, a6, a5 |
| ; RV64I-NEXT: xor a6, a7, s11 |
| ; RV64I-NEXT: xor a7, t0, t3 |
| ; RV64I-NEXT: ld t0, 832(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t0, t4, t0 |
| ; RV64I-NEXT: ld t3, 760(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t3, t5, t3 |
| ; RV64I-NEXT: ld t4, 688(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t4, t6, t4 |
| ; RV64I-NEXT: ld t5, 600(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t1, t1, t5 |
| ; RV64I-NEXT: ld t5, 536(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t2, t2, t5 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 224(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a2, a1 |
| ; RV64I-NEXT: ld a2, 424(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a2, a3, a2 |
| ; RV64I-NEXT: ld a3, 384(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a3, a4, a3 |
| ; RV64I-NEXT: ld a4, 72(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a4, a5, a4 |
| ; RV64I-NEXT: ld a5, 8(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a5, a6, a5 |
| ; RV64I-NEXT: xor a6, a7, t0 |
| ; RV64I-NEXT: ld a7, 776(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a7, t3, a7 |
| ; RV64I-NEXT: ld t0, 696(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t0, t4, t0 |
| ; RV64I-NEXT: ld t3, 616(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t1, t1, t3 |
| ; RV64I-NEXT: ld t3, 944(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor t2, t2, t3 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 432(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a2, a1 |
| ; RV64I-NEXT: ld a2, 400(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a2, a3, a2 |
| ; RV64I-NEXT: ld a3, 88(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a3, a4, a3 |
| ; RV64I-NEXT: ld a4, 952(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a4, a5, a4 |
| ; RV64I-NEXT: xor a5, a6, a7 |
| ; RV64I-NEXT: ld a6, 712(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a6, t0, a6 |
| ; RV64I-NEXT: ld a7, 632(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a7, t1, a7 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 408(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a2, a1 |
| ; RV64I-NEXT: ld a2, 328(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a2, a3, a2 |
| ; RV64I-NEXT: xor a3, a5, a6 |
| ; RV64I-NEXT: ld a5, 624(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a5, a7, a5 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: ld a1, 96(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: xor a1, a2, a1 |
| ; RV64I-NEXT: xor a3, a3, a5 |
| ; RV64I-NEXT: xor a0, a0, a1 |
| ; RV64I-NEXT: xor a1, a3, t2 |
| ; RV64I-NEXT: xor a0, a0, a4 |
| ; RV64I-NEXT: srli a2, a1, 40 |
| ; RV64I-NEXT: srli a3, a1, 56 |
| ; RV64I-NEXT: srli a4, a1, 24 |
| ; RV64I-NEXT: srli a5, a1, 8 |
| ; RV64I-NEXT: srli a6, a0, 8 |
| ; RV64I-NEXT: ld a7, 992(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a5, a5, a7 |
| ; RV64I-NEXT: and a6, a6, a7 |
| ; RV64I-NEXT: srliw a7, a1, 24 |
| ; RV64I-NEXT: ld t1, 976(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a2, a2, t1 |
| ; RV64I-NEXT: or a2, a2, a3 |
| ; RV64I-NEXT: lui t0, 4080 |
| ; RV64I-NEXT: and a3, a1, t0 |
| ; RV64I-NEXT: and a4, a4, t0 |
| ; RV64I-NEXT: or a4, a5, a4 |
| ; RV64I-NEXT: slli a5, a1, 56 |
| ; RV64I-NEXT: and a1, a1, t1 |
| ; RV64I-NEXT: slli a7, a7, 32 |
| ; RV64I-NEXT: slli a3, a3, 24 |
| ; RV64I-NEXT: or a3, a3, a7 |
| ; RV64I-NEXT: srli a7, a0, 40 |
| ; RV64I-NEXT: slli a1, a1, 40 |
| ; RV64I-NEXT: or a1, a5, a1 |
| ; RV64I-NEXT: srli a5, a0, 56 |
| ; RV64I-NEXT: and a7, a7, t1 |
| ; RV64I-NEXT: or a5, a7, a5 |
| ; RV64I-NEXT: srli a7, a0, 24 |
| ; RV64I-NEXT: and a7, a7, t0 |
| ; RV64I-NEXT: or a6, a6, a7 |
| ; RV64I-NEXT: srliw a7, a0, 24 |
| ; RV64I-NEXT: and t0, a0, t0 |
| ; RV64I-NEXT: slli a7, a7, 32 |
| ; RV64I-NEXT: slli t0, t0, 24 |
| ; RV64I-NEXT: or a7, t0, a7 |
| ; RV64I-NEXT: and t0, a0, t1 |
| ; RV64I-NEXT: slli a0, a0, 56 |
| ; RV64I-NEXT: slli t0, t0, 40 |
| ; RV64I-NEXT: or a0, a0, t0 |
| ; RV64I-NEXT: or a2, a4, a2 |
| ; RV64I-NEXT: or a1, a1, a3 |
| ; RV64I-NEXT: or a3, a6, a5 |
| ; RV64I-NEXT: or a0, a0, a7 |
| ; RV64I-NEXT: or a1, a1, a2 |
| ; RV64I-NEXT: or a0, a0, a3 |
| ; RV64I-NEXT: srli a2, a1, 4 |
| ; RV64I-NEXT: ld a4, 984(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a1, a1, a4 |
| ; RV64I-NEXT: srli a3, a0, 4 |
| ; RV64I-NEXT: and a0, a0, a4 |
| ; RV64I-NEXT: and a2, a2, a4 |
| ; RV64I-NEXT: and a3, a3, a4 |
| ; RV64I-NEXT: slli a1, a1, 4 |
| ; RV64I-NEXT: slli a0, a0, 4 |
| ; RV64I-NEXT: or a1, a2, a1 |
| ; RV64I-NEXT: or a0, a3, a0 |
| ; RV64I-NEXT: srli a2, a1, 2 |
| ; RV64I-NEXT: ld a4, 968(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a1, a1, a4 |
| ; RV64I-NEXT: srli a3, a0, 2 |
| ; RV64I-NEXT: and a0, a0, a4 |
| ; RV64I-NEXT: and a2, a2, a4 |
| ; RV64I-NEXT: and a3, a3, a4 |
| ; RV64I-NEXT: slli a1, a1, 2 |
| ; RV64I-NEXT: slli a0, a0, 2 |
| ; RV64I-NEXT: or a1, a2, a1 |
| ; RV64I-NEXT: or a0, a3, a0 |
| ; RV64I-NEXT: srli a2, a1, 1 |
| ; RV64I-NEXT: ld a4, 960(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: and a1, a1, a4 |
| ; RV64I-NEXT: srli a3, a0, 1 |
| ; RV64I-NEXT: and a0, a0, a4 |
| ; RV64I-NEXT: and a2, a2, a4 |
| ; RV64I-NEXT: and a3, a3, a4 |
| ; RV64I-NEXT: slli a1, a1, 1 |
| ; RV64I-NEXT: or a1, a2, a1 |
| ; RV64I-NEXT: slli a0, a0, 1 |
| ; RV64I-NEXT: or a0, a3, a0 |
| ; RV64I-NEXT: ld a2, 1000(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: sd a1, 0(a2) |
| ; RV64I-NEXT: sd a0, 8(a2) |
| ; RV64I-NEXT: ld a2, 1008(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: sd a1, 0(a2) |
| ; RV64I-NEXT: sd a0, 8(a2) |
| ; RV64I-NEXT: ld ra, 1112(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s0, 1104(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s1, 1096(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s2, 1088(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s3, 1080(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s4, 1072(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s5, 1064(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s6, 1056(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s7, 1048(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s8, 1040(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s9, 1032(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s10, 1024(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: ld s11, 1016(sp) # 8-byte Folded Reload |
| ; RV64I-NEXT: addi sp, sp, 1120 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32IM-LABEL: commutative_clmulr_v2i64: |
| ; RV32IM: # %bb.0: |
| ; RV32IM-NEXT: addi sp, sp, -704 |
| ; RV32IM-NEXT: sw ra, 700(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s0, 696(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s1, 692(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s2, 688(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s3, 684(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s4, 680(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s5, 676(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s6, 672(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s7, 668(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s8, 664(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s9, 660(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s10, 656(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw s11, 652(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw a3, 640(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: sw a2, 636(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a3, 0(a0) |
| ; RV32IM-NEXT: lw s2, 4(a0) |
| ; RV32IM-NEXT: lw t2, 8(a0) |
| ; RV32IM-NEXT: lw t1, 12(a0) |
| ; RV32IM-NEXT: lw t4, 0(a1) |
| ; RV32IM-NEXT: lw s4, 4(a1) |
| ; RV32IM-NEXT: lw a5, 8(a1) |
| ; RV32IM-NEXT: lw a0, 12(a1) |
| ; RV32IM-NEXT: lui a4, 16 |
| ; RV32IM-NEXT: lui a1, 61681 |
| ; RV32IM-NEXT: lui a2, 209715 |
| ; RV32IM-NEXT: lui s6, 349525 |
| ; RV32IM-NEXT: li a7, 1 |
| ; RV32IM-NEXT: addi s11, a4, -256 |
| ; RV32IM-NEXT: addi s10, a1, -241 |
| ; RV32IM-NEXT: addi s8, a2, 819 |
| ; RV32IM-NEXT: srli s0, s4, 8 |
| ; RV32IM-NEXT: srli s5, s4, 24 |
| ; RV32IM-NEXT: and a1, s4, s11 |
| ; RV32IM-NEXT: slli s4, s4, 24 |
| ; RV32IM-NEXT: srli a2, s2, 8 |
| ; RV32IM-NEXT: srli s3, s2, 24 |
| ; RV32IM-NEXT: and t3, s2, s11 |
| ; RV32IM-NEXT: slli s2, s2, 24 |
| ; RV32IM-NEXT: srli a6, t4, 8 |
| ; RV32IM-NEXT: srli t0, t4, 24 |
| ; RV32IM-NEXT: and a4, t4, s11 |
| ; RV32IM-NEXT: slli t4, t4, 24 |
| ; RV32IM-NEXT: and t5, s0, s11 |
| ; RV32IM-NEXT: or s0, t5, s5 |
| ; RV32IM-NEXT: srli s5, a3, 8 |
| ; RV32IM-NEXT: slli a1, a1, 8 |
| ; RV32IM-NEXT: or a1, s4, a1 |
| ; RV32IM-NEXT: srli t5, a3, 24 |
| ; RV32IM-NEXT: and a2, a2, s11 |
| ; RV32IM-NEXT: or a2, a2, s3 |
| ; RV32IM-NEXT: and s3, a3, s11 |
| ; RV32IM-NEXT: slli s4, a3, 24 |
| ; RV32IM-NEXT: slli t3, t3, 8 |
| ; RV32IM-NEXT: or a3, s2, t3 |
| ; RV32IM-NEXT: srli t6, a0, 8 |
| ; RV32IM-NEXT: and a6, a6, s11 |
| ; RV32IM-NEXT: or a6, a6, t0 |
| ; RV32IM-NEXT: srli s1, a0, 24 |
| ; RV32IM-NEXT: slli a4, a4, 8 |
| ; RV32IM-NEXT: or a4, t4, a4 |
| ; RV32IM-NEXT: and t4, a0, s11 |
| ; RV32IM-NEXT: slli s7, a0, 24 |
| ; RV32IM-NEXT: and a0, s5, s11 |
| ; RV32IM-NEXT: or a0, a0, t5 |
| ; RV32IM-NEXT: srli t3, t1, 8 |
| ; RV32IM-NEXT: slli s3, s3, 8 |
| ; RV32IM-NEXT: or t0, s4, s3 |
| ; RV32IM-NEXT: srli s3, t1, 24 |
| ; RV32IM-NEXT: and t5, t6, s11 |
| ; RV32IM-NEXT: or s2, t5, s1 |
| ; RV32IM-NEXT: and s4, t1, s11 |
| ; RV32IM-NEXT: slli t1, t1, 24 |
| ; RV32IM-NEXT: slli t4, t4, 8 |
| ; RV32IM-NEXT: or t4, s7, t4 |
| ; RV32IM-NEXT: srli t5, a5, 8 |
| ; RV32IM-NEXT: and t3, t3, s11 |
| ; RV32IM-NEXT: or t3, t3, s3 |
| ; RV32IM-NEXT: srli t6, a5, 24 |
| ; RV32IM-NEXT: slli s4, s4, 8 |
| ; RV32IM-NEXT: or t1, t1, s4 |
| ; RV32IM-NEXT: and s3, a5, s11 |
| ; RV32IM-NEXT: slli s4, a5, 24 |
| ; RV32IM-NEXT: and a5, t5, s11 |
| ; RV32IM-NEXT: or a5, a5, t6 |
| ; RV32IM-NEXT: srli t5, t2, 8 |
| ; RV32IM-NEXT: slli s3, s3, 8 |
| ; RV32IM-NEXT: or t6, s4, s3 |
| ; RV32IM-NEXT: srli s1, t2, 24 |
| ; RV32IM-NEXT: and t5, t5, s11 |
| ; RV32IM-NEXT: or t5, t5, s1 |
| ; RV32IM-NEXT: and s1, t2, s11 |
| ; RV32IM-NEXT: slli t2, t2, 24 |
| ; RV32IM-NEXT: slli s1, s1, 8 |
| ; RV32IM-NEXT: or s1, t2, s1 |
| ; RV32IM-NEXT: addi t2, s6, 1365 |
| ; RV32IM-NEXT: slli ra, a7, 11 |
| ; RV32IM-NEXT: or a1, a1, s0 |
| ; RV32IM-NEXT: or a2, a3, a2 |
| ; RV32IM-NEXT: or a3, a4, a6 |
| ; RV32IM-NEXT: or a0, t0, a0 |
| ; RV32IM-NEXT: or a4, t4, s2 |
| ; RV32IM-NEXT: or a6, t1, t3 |
| ; RV32IM-NEXT: or a5, t6, a5 |
| ; RV32IM-NEXT: or a7, s1, t5 |
| ; RV32IM-NEXT: srli t0, a1, 4 |
| ; RV32IM-NEXT: sw s10, 648(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a1, a1, s10 |
| ; RV32IM-NEXT: srli t1, a2, 4 |
| ; RV32IM-NEXT: and a2, a2, s10 |
| ; RV32IM-NEXT: srli t3, a3, 4 |
| ; RV32IM-NEXT: and a3, a3, s10 |
| ; RV32IM-NEXT: srli t4, a0, 4 |
| ; RV32IM-NEXT: and a0, a0, s10 |
| ; RV32IM-NEXT: srli t5, a4, 4 |
| ; RV32IM-NEXT: and a4, a4, s10 |
| ; RV32IM-NEXT: srli t6, a6, 4 |
| ; RV32IM-NEXT: and a6, a6, s10 |
| ; RV32IM-NEXT: srli s0, a5, 4 |
| ; RV32IM-NEXT: and a5, a5, s10 |
| ; RV32IM-NEXT: srli s1, a7, 4 |
| ; RV32IM-NEXT: and a7, a7, s10 |
| ; RV32IM-NEXT: and t0, t0, s10 |
| ; RV32IM-NEXT: slli a1, a1, 4 |
| ; RV32IM-NEXT: and t1, t1, s10 |
| ; RV32IM-NEXT: slli a2, a2, 4 |
| ; RV32IM-NEXT: and t3, t3, s10 |
| ; RV32IM-NEXT: slli a3, a3, 4 |
| ; RV32IM-NEXT: and t4, t4, s10 |
| ; RV32IM-NEXT: slli a0, a0, 4 |
| ; RV32IM-NEXT: and t5, t5, s10 |
| ; RV32IM-NEXT: slli a4, a4, 4 |
| ; RV32IM-NEXT: and t6, t6, s10 |
| ; RV32IM-NEXT: slli a6, a6, 4 |
| ; RV32IM-NEXT: and s0, s0, s10 |
| ; RV32IM-NEXT: slli a5, a5, 4 |
| ; RV32IM-NEXT: and s1, s1, s10 |
| ; RV32IM-NEXT: slli a7, a7, 4 |
| ; RV32IM-NEXT: or a1, t0, a1 |
| ; RV32IM-NEXT: or a2, t1, a2 |
| ; RV32IM-NEXT: or a3, t3, a3 |
| ; RV32IM-NEXT: or a0, t4, a0 |
| ; RV32IM-NEXT: or a4, t5, a4 |
| ; RV32IM-NEXT: or a6, t6, a6 |
| ; RV32IM-NEXT: or a5, s0, a5 |
| ; RV32IM-NEXT: or a7, s1, a7 |
| ; RV32IM-NEXT: srli t0, a1, 2 |
| ; RV32IM-NEXT: sw s8, 632(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a1, a1, s8 |
| ; RV32IM-NEXT: srli t1, a2, 2 |
| ; RV32IM-NEXT: and a2, a2, s8 |
| ; RV32IM-NEXT: srli t3, a3, 2 |
| ; RV32IM-NEXT: and a3, a3, s8 |
| ; RV32IM-NEXT: srli t4, a0, 2 |
| ; RV32IM-NEXT: and a0, a0, s8 |
| ; RV32IM-NEXT: srli t5, a4, 2 |
| ; RV32IM-NEXT: and a4, a4, s8 |
| ; RV32IM-NEXT: srli t6, a6, 2 |
| ; RV32IM-NEXT: and a6, a6, s8 |
| ; RV32IM-NEXT: srli s0, a5, 2 |
| ; RV32IM-NEXT: and a5, a5, s8 |
| ; RV32IM-NEXT: srli s1, a7, 2 |
| ; RV32IM-NEXT: and a7, a7, s8 |
| ; RV32IM-NEXT: and t0, t0, s8 |
| ; RV32IM-NEXT: slli a1, a1, 2 |
| ; RV32IM-NEXT: and t1, t1, s8 |
| ; RV32IM-NEXT: slli a2, a2, 2 |
| ; RV32IM-NEXT: and t3, t3, s8 |
| ; RV32IM-NEXT: slli a3, a3, 2 |
| ; RV32IM-NEXT: and t4, t4, s8 |
| ; RV32IM-NEXT: slli a0, a0, 2 |
| ; RV32IM-NEXT: and t5, t5, s8 |
| ; RV32IM-NEXT: slli a4, a4, 2 |
| ; RV32IM-NEXT: and t6, t6, s8 |
| ; RV32IM-NEXT: slli a6, a6, 2 |
| ; RV32IM-NEXT: and s0, s0, s8 |
| ; RV32IM-NEXT: slli a5, a5, 2 |
| ; RV32IM-NEXT: and s1, s1, s8 |
| ; RV32IM-NEXT: slli a7, a7, 2 |
| ; RV32IM-NEXT: or a1, t0, a1 |
| ; RV32IM-NEXT: or a2, t1, a2 |
| ; RV32IM-NEXT: or a3, t3, a3 |
| ; RV32IM-NEXT: or a0, t4, a0 |
| ; RV32IM-NEXT: or a4, t5, a4 |
| ; RV32IM-NEXT: or a6, t6, a6 |
| ; RV32IM-NEXT: or a5, s0, a5 |
| ; RV32IM-NEXT: or a7, s1, a7 |
| ; RV32IM-NEXT: srli t0, a1, 1 |
| ; RV32IM-NEXT: sw t2, 628(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a1, a1, t2 |
| ; RV32IM-NEXT: srli t1, a2, 1 |
| ; RV32IM-NEXT: and a2, a2, t2 |
| ; RV32IM-NEXT: srli t3, a3, 1 |
| ; RV32IM-NEXT: and a3, a3, t2 |
| ; RV32IM-NEXT: srli t4, a0, 1 |
| ; RV32IM-NEXT: and a0, a0, t2 |
| ; RV32IM-NEXT: srli t5, a4, 1 |
| ; RV32IM-NEXT: and a4, a4, t2 |
| ; RV32IM-NEXT: srli t6, a6, 1 |
| ; RV32IM-NEXT: and a6, a6, t2 |
| ; RV32IM-NEXT: srli s0, a5, 1 |
| ; RV32IM-NEXT: and a5, a5, t2 |
| ; RV32IM-NEXT: srli s1, a7, 1 |
| ; RV32IM-NEXT: and a7, a7, t2 |
| ; RV32IM-NEXT: and t0, t0, t2 |
| ; RV32IM-NEXT: slli a1, a1, 1 |
| ; RV32IM-NEXT: and t1, t1, t2 |
| ; RV32IM-NEXT: slli a2, a2, 1 |
| ; RV32IM-NEXT: and t3, t3, t2 |
| ; RV32IM-NEXT: slli a3, a3, 1 |
| ; RV32IM-NEXT: and t4, t4, t2 |
| ; RV32IM-NEXT: slli s2, a0, 1 |
| ; RV32IM-NEXT: and t5, t5, t2 |
| ; RV32IM-NEXT: slli a4, a4, 1 |
| ; RV32IM-NEXT: and t6, t6, t2 |
| ; RV32IM-NEXT: slli a6, a6, 1 |
| ; RV32IM-NEXT: and s0, s0, t2 |
| ; RV32IM-NEXT: slli a5, a5, 1 |
| ; RV32IM-NEXT: and s1, s1, t2 |
| ; RV32IM-NEXT: slli a7, a7, 1 |
| ; RV32IM-NEXT: or a0, t0, a1 |
| ; RV32IM-NEXT: or a1, t1, a2 |
| ; RV32IM-NEXT: or a2, t3, a3 |
| ; RV32IM-NEXT: or a3, t4, s2 |
| ; RV32IM-NEXT: or s2, t5, a4 |
| ; RV32IM-NEXT: or s7, t6, a6 |
| ; RV32IM-NEXT: or s4, s0, a5 |
| ; RV32IM-NEXT: or s3, s1, a7 |
| ; RV32IM-NEXT: srli a4, a0, 8 |
| ; RV32IM-NEXT: srli a5, a0, 24 |
| ; RV32IM-NEXT: slli a6, a0, 24 |
| ; RV32IM-NEXT: and a7, a0, s11 |
| ; RV32IM-NEXT: srli t0, a1, 8 |
| ; RV32IM-NEXT: srli t1, a1, 24 |
| ; RV32IM-NEXT: slli t3, a1, 24 |
| ; RV32IM-NEXT: and t4, a1, s11 |
| ; RV32IM-NEXT: and a4, a4, s11 |
| ; RV32IM-NEXT: or s9, a4, a5 |
| ; RV32IM-NEXT: and a4, a1, ra |
| ; RV32IM-NEXT: slli a7, a7, 8 |
| ; RV32IM-NEXT: or a5, a6, a7 |
| ; RV32IM-NEXT: sw a5, 604(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t2, 1 |
| ; RV32IM-NEXT: and a6, a1, t2 |
| ; RV32IM-NEXT: and a5, t0, s11 |
| ; RV32IM-NEXT: slli t4, t4, 8 |
| ; RV32IM-NEXT: or a5, a5, t1 |
| ; RV32IM-NEXT: sw a5, 600(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a5, a2, a4 |
| ; RV32IM-NEXT: or a7, t3, t4 |
| ; RV32IM-NEXT: sw a7, 576(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a7, a2, a6 |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: sw a5, 592(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t1, 64 |
| ; RV32IM-NEXT: and t0, a1, t1 |
| ; RV32IM-NEXT: lui t3, 128 |
| ; RV32IM-NEXT: and t6, a1, t3 |
| ; RV32IM-NEXT: mul a5, a2, t0 |
| ; RV32IM-NEXT: mul a7, a2, t6 |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: sw a5, 572(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a5, 16384 |
| ; RV32IM-NEXT: lui a7, 32768 |
| ; RV32IM-NEXT: and a5, a1, a5 |
| ; RV32IM-NEXT: sw a5, 612(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t4, 16384 |
| ; RV32IM-NEXT: and a7, a1, a7 |
| ; RV32IM-NEXT: sw a7, 608(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t5, 32768 |
| ; RV32IM-NEXT: mul a5, a2, a5 |
| ; RV32IM-NEXT: mul a7, a2, a7 |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: sw a5, 568(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a5, a3, ra |
| ; RV32IM-NEXT: mul a5, a0, a5 |
| ; RV32IM-NEXT: and a7, a3, t2 |
| ; RV32IM-NEXT: lui s6, 1 |
| ; RV32IM-NEXT: mul a7, a0, a7 |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: sw a5, 560(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a5, a3, t1 |
| ; RV32IM-NEXT: lui s1, 64 |
| ; RV32IM-NEXT: mul a5, a0, a5 |
| ; RV32IM-NEXT: and a7, a3, t3 |
| ; RV32IM-NEXT: lui s8, 128 |
| ; RV32IM-NEXT: mul a7, a0, a7 |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: sw a5, 556(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a5, a3, t4 |
| ; RV32IM-NEXT: lui t2, 16384 |
| ; RV32IM-NEXT: mul a5, a0, a5 |
| ; RV32IM-NEXT: and a7, a3, t5 |
| ; RV32IM-NEXT: lui t4, 32768 |
| ; RV32IM-NEXT: mul a7, a0, a7 |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: sw a5, 552(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: srli a5, s2, 8 |
| ; RV32IM-NEXT: sw s11, 644(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a5, a5, s11 |
| ; RV32IM-NEXT: srli a7, s2, 24 |
| ; RV32IM-NEXT: or a5, a5, a7 |
| ; RV32IM-NEXT: sw a5, 548(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a5, s2, s11 |
| ; RV32IM-NEXT: slli a5, a5, 8 |
| ; RV32IM-NEXT: slli a7, s2, 24 |
| ; RV32IM-NEXT: or a5, a7, a5 |
| ; RV32IM-NEXT: sw a5, 544(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: srli a5, s7, 8 |
| ; RV32IM-NEXT: and a5, a5, s11 |
| ; RV32IM-NEXT: srli a7, s7, 24 |
| ; RV32IM-NEXT: or a5, a5, a7 |
| ; RV32IM-NEXT: sw a5, 540(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a5, s7, s11 |
| ; RV32IM-NEXT: slli a5, a5, 8 |
| ; RV32IM-NEXT: slli a7, s7, 24 |
| ; RV32IM-NEXT: or a5, a7, a5 |
| ; RV32IM-NEXT: sw a5, 536(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and s10, s7, ra |
| ; RV32IM-NEXT: sw ra, 624(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and s11, s7, s6 |
| ; RV32IM-NEXT: mul a5, s4, s10 |
| ; RV32IM-NEXT: mul a7, s4, s11 |
| ; RV32IM-NEXT: xor s5, a5, a7 |
| ; RV32IM-NEXT: and a5, s7, s1 |
| ; RV32IM-NEXT: and a7, s7, s8 |
| ; RV32IM-NEXT: mul t1, s4, a5 |
| ; RV32IM-NEXT: mul t3, s4, a7 |
| ; RV32IM-NEXT: xor s0, t1, t3 |
| ; RV32IM-NEXT: and t1, s7, t2 |
| ; RV32IM-NEXT: sw t1, 616(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t4, s7, t4 |
| ; RV32IM-NEXT: sw t4, 620(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul t1, s4, t1 |
| ; RV32IM-NEXT: mul t3, s4, t4 |
| ; RV32IM-NEXT: xor t1, t1, t3 |
| ; RV32IM-NEXT: sw t1, 532(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t1, s3, ra |
| ; RV32IM-NEXT: mul t1, s2, t1 |
| ; RV32IM-NEXT: and t3, s3, s6 |
| ; RV32IM-NEXT: mul t3, s2, t3 |
| ; RV32IM-NEXT: xor t3, t1, t3 |
| ; RV32IM-NEXT: and t1, s3, s1 |
| ; RV32IM-NEXT: mul t1, s2, t1 |
| ; RV32IM-NEXT: and t4, s3, s8 |
| ; RV32IM-NEXT: mul t4, s2, t4 |
| ; RV32IM-NEXT: xor t1, t1, t4 |
| ; RV32IM-NEXT: and t4, s3, t2 |
| ; RV32IM-NEXT: mul t4, s2, t4 |
| ; RV32IM-NEXT: and t5, s3, t5 |
| ; RV32IM-NEXT: mul t5, s2, t5 |
| ; RV32IM-NEXT: xor t4, t4, t5 |
| ; RV32IM-NEXT: mul a4, a0, a4 |
| ; RV32IM-NEXT: mul a6, a0, a6 |
| ; RV32IM-NEXT: xor a4, a4, a6 |
| ; RV32IM-NEXT: sw a4, 452(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a4, a0, t0 |
| ; RV32IM-NEXT: mul a6, a0, t6 |
| ; RV32IM-NEXT: xor a4, a4, a6 |
| ; RV32IM-NEXT: sw a4, 404(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a4, 4096 |
| ; RV32IM-NEXT: lui a6, 8192 |
| ; RV32IM-NEXT: and t0, a1, a4 |
| ; RV32IM-NEXT: lui t2, 4096 |
| ; RV32IM-NEXT: and t5, a1, a6 |
| ; RV32IM-NEXT: sw t5, 528(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a4, a0, t0 |
| ; RV32IM-NEXT: mul t5, a0, t5 |
| ; RV32IM-NEXT: xor a4, a4, t5 |
| ; RV32IM-NEXT: sw a4, 356(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a4, s2, s10 |
| ; RV32IM-NEXT: mul t5, s2, s11 |
| ; RV32IM-NEXT: xor a4, a4, t5 |
| ; RV32IM-NEXT: sw a4, 588(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a4, s2, a5 |
| ; RV32IM-NEXT: mul a5, s2, a7 |
| ; RV32IM-NEXT: xor a4, a4, a5 |
| ; RV32IM-NEXT: sw a4, 584(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, s7, t2 |
| ; RV32IM-NEXT: sw a4, 428(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a5, s7, a6 |
| ; RV32IM-NEXT: sw a5, 424(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a4, s2, a4 |
| ; RV32IM-NEXT: mul a5, s2, a5 |
| ; RV32IM-NEXT: xor a4, a4, a5 |
| ; RV32IM-NEXT: sw a4, 580(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a4, 604(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: or a4, a4, s9 |
| ; RV32IM-NEXT: sw a4, 596(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a4, 600(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a5, 576(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: or a4, a5, a4 |
| ; RV32IM-NEXT: sw a4, 604(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a5, 2 |
| ; RV32IM-NEXT: and a5, a1, a5 |
| ; RV32IM-NEXT: sw a5, 472(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t6, 2 |
| ; RV32IM-NEXT: mul a4, a2, a5 |
| ; RV32IM-NEXT: lw a5, 592(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, a5, a4 |
| ; RV32IM-NEXT: sw a4, 576(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a4, 256 |
| ; RV32IM-NEXT: and a4, a1, a4 |
| ; RV32IM-NEXT: sw a4, 392(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t2, 256 |
| ; RV32IM-NEXT: mul a4, a2, a4 |
| ; RV32IM-NEXT: lw a5, 572(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, a5, a4 |
| ; RV32IM-NEXT: sw a4, 572(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a4, 65536 |
| ; RV32IM-NEXT: and a5, a1, a4 |
| ; RV32IM-NEXT: sw a5, 376(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul t5, a2, a5 |
| ; RV32IM-NEXT: lw a5, 568(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, t5 |
| ; RV32IM-NEXT: sw a5, 564(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, t6 |
| ; RV32IM-NEXT: mul t5, a0, t5 |
| ; RV32IM-NEXT: lw a5, 560(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, t5 |
| ; RV32IM-NEXT: sw a5, 568(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, t2 |
| ; RV32IM-NEXT: mul t5, a0, t5 |
| ; RV32IM-NEXT: lw a5, 556(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, t5 |
| ; RV32IM-NEXT: sw a5, 560(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, a4 |
| ; RV32IM-NEXT: mul t5, a0, t5 |
| ; RV32IM-NEXT: lw a4, 552(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, a4, t5 |
| ; RV32IM-NEXT: sw a4, 556(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a4, 548(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a5, 544(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: or a4, a5, a4 |
| ; RV32IM-NEXT: sw a4, 592(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a4, 540(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a5, 536(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: or a4, a5, a4 |
| ; RV32IM-NEXT: sw a4, 600(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t2, 2 |
| ; RV32IM-NEXT: and a4, s7, t2 |
| ; RV32IM-NEXT: sw a4, 420(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul t6, s4, a4 |
| ; RV32IM-NEXT: xor a4, s5, t6 |
| ; RV32IM-NEXT: sw a4, 552(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a4, 256 |
| ; RV32IM-NEXT: and a5, s7, a4 |
| ; RV32IM-NEXT: sw a5, 444(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul t6, s4, a5 |
| ; RV32IM-NEXT: xor a5, s0, t6 |
| ; RV32IM-NEXT: sw a5, 548(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t5, 65536 |
| ; RV32IM-NEXT: and a5, s7, t5 |
| ; RV32IM-NEXT: sw a5, 464(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul t6, s4, a5 |
| ; RV32IM-NEXT: lw a5, 532(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, t6 |
| ; RV32IM-NEXT: sw a5, 540(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t6, s3, t2 |
| ; RV32IM-NEXT: mul t6, s2, t6 |
| ; RV32IM-NEXT: xor a5, t3, t6 |
| ; RV32IM-NEXT: sw a5, 544(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t3, s3, a4 |
| ; RV32IM-NEXT: mul t3, s2, t3 |
| ; RV32IM-NEXT: xor a4, t1, t3 |
| ; RV32IM-NEXT: sw a4, 536(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t1, s3, t5 |
| ; RV32IM-NEXT: mul t1, s2, t1 |
| ; RV32IM-NEXT: xor a4, t4, t1 |
| ; RV32IM-NEXT: sw a4, 532(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 2 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 2 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 1 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 492(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 1 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 500(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 524(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 4 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 4 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 2 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 468(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 2 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 484(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 516(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 8 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 8 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 3 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 436(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 3 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 456(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 496(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 16 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 16 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 4 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 400(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 4 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 416(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 480(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 32 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 32 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 5 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 372(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 5 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 388(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 448(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 64 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 64 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 6 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 460(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 6 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 476(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 508(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 128 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 128 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 7 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 340(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 7 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 348(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 384(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 256 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 256 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 8 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 320(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 8 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 332(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 360(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t1, a1, 512 |
| ; RV32IM-NEXT: seqz t1, t1 |
| ; RV32IM-NEXT: andi t3, a3, 512 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: addi t1, t1, -1 |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: slli t4, a2, 9 |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 368(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli t4, a0, 9 |
| ; RV32IM-NEXT: and a4, t3, t4 |
| ; RV32IM-NEXT: sw a4, 380(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a4, t1, t4 |
| ; RV32IM-NEXT: sw a4, 432(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a6, 4 |
| ; RV32IM-NEXT: lui a7, 8 |
| ; RV32IM-NEXT: lui t1, 32 |
| ; RV32IM-NEXT: lui s6, 512 |
| ; RV32IM-NEXT: lui s8, 1024 |
| ; RV32IM-NEXT: lui s9, 2048 |
| ; RV32IM-NEXT: lui a4, 131072 |
| ; RV32IM-NEXT: lui t2, 262144 |
| ; RV32IM-NEXT: lui t5, 524288 |
| ; RV32IM-NEXT: andi t3, a1, 1 |
| ; RV32IM-NEXT: andi a5, a1, 1024 |
| ; RV32IM-NEXT: sw a5, 344(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t4, a1, a6 |
| ; RV32IM-NEXT: and t6, a1, a7 |
| ; RV32IM-NEXT: lui a5, 16 |
| ; RV32IM-NEXT: and s0, a1, a5 |
| ; RV32IM-NEXT: and s1, a1, t1 |
| ; RV32IM-NEXT: and s5, a1, s6 |
| ; RV32IM-NEXT: and s10, a1, s8 |
| ; RV32IM-NEXT: and s11, a1, s9 |
| ; RV32IM-NEXT: and ra, a1, a4 |
| ; RV32IM-NEXT: and a4, a1, t2 |
| ; RV32IM-NEXT: and a1, a1, t5 |
| ; RV32IM-NEXT: seqz t3, t3 |
| ; RV32IM-NEXT: mul t0, a2, t0 |
| ; RV32IM-NEXT: sw t0, 520(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw t0, 528(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul t0, a2, t0 |
| ; RV32IM-NEXT: sw t0, 528(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi t0, a3, 1 |
| ; RV32IM-NEXT: seqz t0, t0 |
| ; RV32IM-NEXT: and t5, a3, a6 |
| ; RV32IM-NEXT: mul a6, a0, t5 |
| ; RV32IM-NEXT: sw a6, 280(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, a7 |
| ; RV32IM-NEXT: mul a6, a0, t5 |
| ; RV32IM-NEXT: sw a6, 328(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, a5 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 412(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, t1 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 504(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, s6 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 272(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, s8 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 316(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, s9 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 396(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a5, 4096 |
| ; RV32IM-NEXT: and t5, a3, a5 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 488(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a5, 8192 |
| ; RV32IM-NEXT: and t5, a3, a5 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 512(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a5, 131072 |
| ; RV32IM-NEXT: and t5, a3, a5 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 260(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t5, a3, t2 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 300(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a5, 524288 |
| ; RV32IM-NEXT: and t5, a3, a5 |
| ; RV32IM-NEXT: mul a5, a0, t5 |
| ; RV32IM-NEXT: sw a5, 364(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a5, 472(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a5, a0, a5 |
| ; RV32IM-NEXT: mul a6, a2, t4 |
| ; RV32IM-NEXT: sw a6, 252(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a0, t4 |
| ; RV32IM-NEXT: sw a6, 276(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a2, t6 |
| ; RV32IM-NEXT: sw a6, 288(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a0, t6 |
| ; RV32IM-NEXT: sw a6, 312(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a2, s0 |
| ; RV32IM-NEXT: sw a6, 352(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a0, s0 |
| ; RV32IM-NEXT: sw a6, 408(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a2, s1 |
| ; RV32IM-NEXT: sw a6, 440(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a0, s1 |
| ; RV32IM-NEXT: sw a6, 472(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a6, 392(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a7, a0, a6 |
| ; RV32IM-NEXT: mul a6, a2, s5 |
| ; RV32IM-NEXT: sw a6, 244(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a0, s5 |
| ; RV32IM-NEXT: sw a6, 264(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a2, s10 |
| ; RV32IM-NEXT: sw a6, 284(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a0, s10 |
| ; RV32IM-NEXT: sw a6, 308(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a2, s11 |
| ; RV32IM-NEXT: sw a6, 336(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a0, s11 |
| ; RV32IM-NEXT: sw a6, 392(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a6, 612(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul t4, a0, a6 |
| ; RV32IM-NEXT: lw a6, 608(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a6, a0, a6 |
| ; RV32IM-NEXT: sw a6, 256(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a6, 376(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a6, a0, a6 |
| ; RV32IM-NEXT: sw a6, 296(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a2, ra |
| ; RV32IM-NEXT: sw a6, 236(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a0, ra |
| ; RV32IM-NEXT: sw a6, 376(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a6, a2, a4 |
| ; RV32IM-NEXT: sw a6, 268(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a4, a0, a4 |
| ; RV32IM-NEXT: sw a4, 608(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a4, a2, a1 |
| ; RV32IM-NEXT: sw a4, 324(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a1, a0, a1 |
| ; RV32IM-NEXT: sw a1, 612(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: addi t0, t0, -1 |
| ; RV32IM-NEXT: slli a1, a2, 10 |
| ; RV32IM-NEXT: and a2, t3, a2 |
| ; RV32IM-NEXT: sw a2, 224(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a2, t0, a0 |
| ; RV32IM-NEXT: sw a2, 228(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a2, t3, a0 |
| ; RV32IM-NEXT: sw a2, 248(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a0, a0, 10 |
| ; RV32IM-NEXT: andi a2, a3, 1024 |
| ; RV32IM-NEXT: lw a3, 344(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: seqz a3, a3 |
| ; RV32IM-NEXT: seqz a2, a2 |
| ; RV32IM-NEXT: addi a3, a3, -1 |
| ; RV32IM-NEXT: addi a2, a2, -1 |
| ; RV32IM-NEXT: and a1, a3, a1 |
| ; RV32IM-NEXT: sw a1, 292(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a2, a2, a0 |
| ; RV32IM-NEXT: sw a2, 304(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a3, a0 |
| ; RV32IM-NEXT: sw a0, 344(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 452(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a5 |
| ; RV32IM-NEXT: sw a0, 240(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 404(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a7 |
| ; RV32IM-NEXT: sw a0, 404(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 356(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, t4 |
| ; RV32IM-NEXT: sw a0, 356(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 2 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 2 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 1 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 200(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 1 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 212(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 232(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 4 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 4 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 2 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 188(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 2 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 192(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 216(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 8 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 8 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 3 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 156(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 3 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 168(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 196(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 16 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 16 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 4 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 136(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 4 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 148(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 176(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 32 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 32 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 5 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 124(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 5 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 128(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 152(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 64 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 64 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 6 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 172(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 6 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 184(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 204(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 128 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 128 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 7 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 88(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 7 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 96(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 112(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 256 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 256 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 8 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 68(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 8 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 76(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 100(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, s7, 512 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: andi a1, s3, 512 |
| ; RV32IM-NEXT: seqz a1, a1 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: addi a1, a1, -1 |
| ; RV32IM-NEXT: slli a2, s4, 9 |
| ; RV32IM-NEXT: and a2, a0, a2 |
| ; RV32IM-NEXT: sw a2, 108(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a2, s2, 9 |
| ; RV32IM-NEXT: and a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 116(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a0, a0, a2 |
| ; RV32IM-NEXT: sw a0, 132(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a2, s7, 1 |
| ; RV32IM-NEXT: andi t6, s7, 1024 |
| ; RV32IM-NEXT: lui t0, 4 |
| ; RV32IM-NEXT: and a5, s7, t0 |
| ; RV32IM-NEXT: lui s9, 8 |
| ; RV32IM-NEXT: and a6, s7, s9 |
| ; RV32IM-NEXT: lui a7, 16 |
| ; RV32IM-NEXT: and t1, s7, a7 |
| ; RV32IM-NEXT: lui s8, 32 |
| ; RV32IM-NEXT: and t5, s7, s8 |
| ; RV32IM-NEXT: lui t4, 512 |
| ; RV32IM-NEXT: and s1, s7, t4 |
| ; RV32IM-NEXT: lui s0, 1024 |
| ; RV32IM-NEXT: and s5, s7, s0 |
| ; RV32IM-NEXT: lui s6, 2048 |
| ; RV32IM-NEXT: and a0, s7, s6 |
| ; RV32IM-NEXT: lui s10, 131072 |
| ; RV32IM-NEXT: and a1, s7, s10 |
| ; RV32IM-NEXT: lui s11, 262144 |
| ; RV32IM-NEXT: and a3, s7, s11 |
| ; RV32IM-NEXT: lui ra, 524288 |
| ; RV32IM-NEXT: and a4, s7, ra |
| ; RV32IM-NEXT: seqz t3, a2 |
| ; RV32IM-NEXT: lw a2, 428(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a2, s4, a2 |
| ; RV32IM-NEXT: sw a2, 428(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a2, 424(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a2, s4, a2 |
| ; RV32IM-NEXT: sw a2, 452(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a2, s3, 1 |
| ; RV32IM-NEXT: seqz t2, a2 |
| ; RV32IM-NEXT: and t0, s3, t0 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 36(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t0, s3, s9 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 84(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t0, s3, a7 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 180(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t0, s3, s8 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 220(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t0, s3, t4 |
| ; RV32IM-NEXT: mul t4, s2, t0 |
| ; RV32IM-NEXT: and t0, s3, s0 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 72(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t0, s3, s6 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 160(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a2, 4096 |
| ; RV32IM-NEXT: and t0, s3, a2 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 208(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a2, 8192 |
| ; RV32IM-NEXT: and t0, s3, a2 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 424(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t0, s3, s10 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 24(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t0, s3, s11 |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 56(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t0, s3, ra |
| ; RV32IM-NEXT: mul a2, s2, t0 |
| ; RV32IM-NEXT: sw a2, 140(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a2, 420(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a7, s2, a2 |
| ; RV32IM-NEXT: mul s10, s4, a5 |
| ; RV32IM-NEXT: mul ra, s2, a5 |
| ; RV32IM-NEXT: mul a2, s4, a6 |
| ; RV32IM-NEXT: sw a2, 40(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a2, s2, a6 |
| ; RV32IM-NEXT: sw a2, 60(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a2, s4, t1 |
| ; RV32IM-NEXT: sw a2, 120(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a2, s2, t1 |
| ; RV32IM-NEXT: sw a2, 144(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a2, s4, t5 |
| ; RV32IM-NEXT: sw a2, 164(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a2, s2, t5 |
| ; RV32IM-NEXT: sw a2, 420(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a2, 444(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a2, s2, a2 |
| ; RV32IM-NEXT: mul s9, s4, s1 |
| ; RV32IM-NEXT: mul a5, s2, s1 |
| ; RV32IM-NEXT: sw a5, 20(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a5, s4, s5 |
| ; RV32IM-NEXT: sw a5, 32(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a5, s2, s5 |
| ; RV32IM-NEXT: sw a5, 48(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a5, s4, a0 |
| ; RV32IM-NEXT: sw a5, 104(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a0, s2, a0 |
| ; RV32IM-NEXT: sw a0, 444(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 616(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a0, s2, a0 |
| ; RV32IM-NEXT: lw a5, 620(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a5, s2, a5 |
| ; RV32IM-NEXT: sw a5, 16(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a5, 464(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: mul a5, s2, a5 |
| ; RV32IM-NEXT: sw a5, 44(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul s7, s4, a1 |
| ; RV32IM-NEXT: mul a1, s2, a1 |
| ; RV32IM-NEXT: sw a1, 464(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a1, s4, a3 |
| ; RV32IM-NEXT: sw a1, 28(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a1, s2, a3 |
| ; RV32IM-NEXT: sw a1, 616(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a1, s4, a4 |
| ; RV32IM-NEXT: sw a1, 92(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a1, s2, a4 |
| ; RV32IM-NEXT: sw a1, 620(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: addi t3, t3, -1 |
| ; RV32IM-NEXT: addi t2, t2, -1 |
| ; RV32IM-NEXT: slli a3, s4, 10 |
| ; RV32IM-NEXT: and a4, t3, s4 |
| ; RV32IM-NEXT: and t2, t2, s2 |
| ; RV32IM-NEXT: and a5, t3, s2 |
| ; RV32IM-NEXT: slli s2, s2, 10 |
| ; RV32IM-NEXT: andi s3, s3, 1024 |
| ; RV32IM-NEXT: seqz t6, t6 |
| ; RV32IM-NEXT: seqz s3, s3 |
| ; RV32IM-NEXT: addi t6, t6, -1 |
| ; RV32IM-NEXT: addi s3, s3, -1 |
| ; RV32IM-NEXT: and a1, t6, a3 |
| ; RV32IM-NEXT: sw a1, 52(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a1, s3, s2 |
| ; RV32IM-NEXT: sw a1, 64(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a1, t6, s2 |
| ; RV32IM-NEXT: sw a1, 80(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a1, 588(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a1, a7 |
| ; RV32IM-NEXT: sw a1, 12(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a1, 584(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a1, a2 |
| ; RV32IM-NEXT: sw a1, 584(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a1, 580(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a1, a0 |
| ; RV32IM-NEXT: sw a0, 580(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 492(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 224(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a1, a0 |
| ; RV32IM-NEXT: sw a0, 588(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 468(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 436(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 492(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 400(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 372(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 468(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 340(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 320(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 436(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 576(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 252(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 400(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 572(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 244(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 572(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 564(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 236(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 564(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 500(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 228(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a1, a0 |
| ; RV32IM-NEXT: sw a0, 576(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 484(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 456(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 500(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 416(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 388(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 416(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 348(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 332(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 388(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 568(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 280(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 372(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 560(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 272(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 560(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 556(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 260(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 556(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 200(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a4, a0 |
| ; RV32IM-NEXT: sw a0, 568(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 188(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 156(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s6, a0, a1 |
| ; RV32IM-NEXT: lw a0, 136(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 124(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s11, a0, a1 |
| ; RV32IM-NEXT: lw a0, 88(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 68(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 348(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 552(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s10, a0, s10 |
| ; RV32IM-NEXT: lw a0, 548(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s9, a0, s9 |
| ; RV32IM-NEXT: lw a0, 540(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s7, a0, s7 |
| ; RV32IM-NEXT: lw a0, 212(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s8, t2, a0 |
| ; RV32IM-NEXT: lw a0, 192(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 168(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t6, a0, a1 |
| ; RV32IM-NEXT: lw a0, 148(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s0, 128(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s0, a0, s0 |
| ; RV32IM-NEXT: lw a0, 96(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s1, 76(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s1, a0, s1 |
| ; RV32IM-NEXT: lw a0, 544(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 36(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s2, a0, a1 |
| ; RV32IM-NEXT: lw a0, 536(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s3, a0, t4 |
| ; RV32IM-NEXT: lw a0, 532(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 24(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s4, a0, a1 |
| ; RV32IM-NEXT: lw a0, 524(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 248(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t5, a1, a0 |
| ; RV32IM-NEXT: lw a0, 516(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 496(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, a0, a1 |
| ; RV32IM-NEXT: lw a0, 480(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 448(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t0, a0, a1 |
| ; RV32IM-NEXT: lw a0, 384(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 360(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t1, a0, a1 |
| ; RV32IM-NEXT: lw a0, 276(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 240(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t2, a1, a0 |
| ; RV32IM-NEXT: lw a0, 264(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 404(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t3, a1, a0 |
| ; RV32IM-NEXT: lw a0, 256(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 356(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t4, a1, a0 |
| ; RV32IM-NEXT: lw a0, 232(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a6, a5, a0 |
| ; RV32IM-NEXT: lw a0, 216(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 196(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: lw a1, 176(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 152(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a1, a2 |
| ; RV32IM-NEXT: lw a2, 112(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 100(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a2, a3 |
| ; RV32IM-NEXT: lw a3, 12(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, ra |
| ; RV32IM-NEXT: lw a4, 20(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a5, 584(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, a5, a4 |
| ; RV32IM-NEXT: lw a5, 16(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw ra, 580(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, ra, a5 |
| ; RV32IM-NEXT: lw ra, 588(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 492(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, ra, s5 |
| ; RV32IM-NEXT: sw ra, 484(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 460(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 468(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 468(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 368(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 436(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 460(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 288(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 400(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 456(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 284(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 572(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 448(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 268(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 564(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 436(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 576(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 500(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, ra, s5 |
| ; RV32IM-NEXT: sw ra, 480(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 476(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 416(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 476(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 380(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 388(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 416(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 328(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 372(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 404(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 316(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 560(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: sw ra, 400(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw ra, 300(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 556(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor ra, s5, ra |
| ; RV32IM-NEXT: lw s5, 568(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s6, s5, s6 |
| ; RV32IM-NEXT: sw s6, 584(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw s6, 172(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s6, s11, s6 |
| ; RV32IM-NEXT: sw s6, 576(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw s6, 108(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 348(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s5, s5, s6 |
| ; RV32IM-NEXT: sw s5, 572(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw s5, 40(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s5, s10, s5 |
| ; RV32IM-NEXT: sw s5, 568(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw s5, 32(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s5, s9, s5 |
| ; RV32IM-NEXT: sw s5, 564(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw s5, 28(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s5, s7, s5 |
| ; RV32IM-NEXT: sw s5, 560(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: xor t6, s8, t6 |
| ; RV32IM-NEXT: sw t6, 580(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw t6, 184(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t6, s0, t6 |
| ; RV32IM-NEXT: sw t6, 552(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw t6, 116(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t6, s1, t6 |
| ; RV32IM-NEXT: sw t6, 548(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw t6, 84(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t6, s2, t6 |
| ; RV32IM-NEXT: sw t6, 544(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw t6, 72(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t6, s3, t6 |
| ; RV32IM-NEXT: sw t6, 540(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw t6, 56(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t6, s4, t6 |
| ; RV32IM-NEXT: sw t6, 536(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: xor a7, t5, a7 |
| ; RV32IM-NEXT: sw a7, 556(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a7, 508(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s11, t0, a7 |
| ; RV32IM-NEXT: lw a7, 432(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, t1, a7 |
| ; RV32IM-NEXT: sw a7, 524(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a7, 312(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, t2, a7 |
| ; RV32IM-NEXT: sw a7, 516(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a7, 308(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, t3, a7 |
| ; RV32IM-NEXT: sw a7, 508(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a7, 296(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, t4, a7 |
| ; RV32IM-NEXT: sw a7, 500(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: xor a0, a6, a0 |
| ; RV32IM-NEXT: sw a0, 532(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 204(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s8, a1, a0 |
| ; RV32IM-NEXT: lw a0, 132(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s9, a2, a0 |
| ; RV32IM-NEXT: lw a0, 60(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a3, a0 |
| ; RV32IM-NEXT: lw a1, 48(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a4, a1 |
| ; RV32IM-NEXT: sw a1, 496(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a1, 44(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a5, a1 |
| ; RV32IM-NEXT: sw a1, 492(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a3, 596(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: srli a2, a3, 4 |
| ; RV32IM-NEXT: lw a1, 648(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and a3, a3, a1 |
| ; RV32IM-NEXT: and a2, a2, a1 |
| ; RV32IM-NEXT: slli a3, a3, 4 |
| ; RV32IM-NEXT: or s10, a2, a3 |
| ; RV32IM-NEXT: lw a2, 604(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: srli a3, a2, 4 |
| ; RV32IM-NEXT: and t1, a2, a1 |
| ; RV32IM-NEXT: and a3, a3, a1 |
| ; RV32IM-NEXT: slli t1, t1, 4 |
| ; RV32IM-NEXT: or a2, a3, t1 |
| ; RV32IM-NEXT: sw a2, 588(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a2, 484(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 468(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s7, a2, a3 |
| ; RV32IM-NEXT: lw a2, 292(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 460(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s5, a3, a2 |
| ; RV32IM-NEXT: lw a2, 352(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 456(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s6, a3, a2 |
| ; RV32IM-NEXT: lw a2, 336(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 448(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s4, a3, a2 |
| ; RV32IM-NEXT: lw a2, 324(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 436(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a3, a2 |
| ; RV32IM-NEXT: sw a2, 604(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a2, 480(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 476(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s3, a2, a3 |
| ; RV32IM-NEXT: lw a2, 304(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 416(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s2, a3, a2 |
| ; RV32IM-NEXT: lw a2, 412(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s0, 404(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s0, s0, a2 |
| ; RV32IM-NEXT: lw a2, 396(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s1, 400(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s1, s1, a2 |
| ; RV32IM-NEXT: lw a2, 364(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, ra, a2 |
| ; RV32IM-NEXT: sw a2, 596(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a2, 592(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: srli t1, a2, 4 |
| ; RV32IM-NEXT: and t3, a2, a1 |
| ; RV32IM-NEXT: and t1, t1, a1 |
| ; RV32IM-NEXT: slli t3, t3, 4 |
| ; RV32IM-NEXT: or t6, t1, t3 |
| ; RV32IM-NEXT: lw a2, 600(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: srli t3, a2, 4 |
| ; RV32IM-NEXT: and ra, a2, a1 |
| ; RV32IM-NEXT: and t3, t3, a1 |
| ; RV32IM-NEXT: slli ra, ra, 4 |
| ; RV32IM-NEXT: or t5, t3, ra |
| ; RV32IM-NEXT: lw a1, 584(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 576(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t4, a1, a2 |
| ; RV32IM-NEXT: lw a1, 52(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 572(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t1, a2, a1 |
| ; RV32IM-NEXT: lw a1, 120(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 568(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t2, a2, a1 |
| ; RV32IM-NEXT: lw a1, 104(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 564(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t3, a2, a1 |
| ; RV32IM-NEXT: lw a1, 92(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 560(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a2, a1 |
| ; RV32IM-NEXT: sw a1, 600(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a1, 580(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 552(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t0, a1, a2 |
| ; RV32IM-NEXT: lw a1, 64(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 548(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a6, a2, a1 |
| ; RV32IM-NEXT: lw a1, 180(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 544(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, a2, a1 |
| ; RV32IM-NEXT: lw a1, 160(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a5, 540(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, a1 |
| ; RV32IM-NEXT: lw a1, 140(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 536(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a2, a1 |
| ; RV32IM-NEXT: sw a1, 592(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a1, 556(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s11, a1, s11 |
| ; RV32IM-NEXT: lw a1, 344(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a4, 524(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, a4, a1 |
| ; RV32IM-NEXT: lw a1, 408(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 516(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, a1 |
| ; RV32IM-NEXT: lw a1, 392(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 508(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a2, a1 |
| ; RV32IM-NEXT: sw a1, 584(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a1, 376(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 500(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a2, a1 |
| ; RV32IM-NEXT: lw a1, 532(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s8, a1, s8 |
| ; RV32IM-NEXT: lw a1, 80(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s9, s9, a1 |
| ; RV32IM-NEXT: lw a1, 144(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a0, a1 |
| ; RV32IM-NEXT: lw a0, 444(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw ra, 496(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, ra, a0 |
| ; RV32IM-NEXT: sw a0, 580(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw a0, 464(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw ra, 492(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, ra, a0 |
| ; RV32IM-NEXT: xor s5, s7, s5 |
| ; RV32IM-NEXT: lw s7, 440(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s6, s6, s7 |
| ; RV32IM-NEXT: lw s7, 520(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s4, s4, s7 |
| ; RV32IM-NEXT: xor s2, s3, s2 |
| ; RV32IM-NEXT: lw s3, 504(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s0, s0, s3 |
| ; RV32IM-NEXT: lw s3, 488(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s1, s1, s3 |
| ; RV32IM-NEXT: xor t1, t4, t1 |
| ; RV32IM-NEXT: lw t4, 164(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t2, t2, t4 |
| ; RV32IM-NEXT: lw t4, 428(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t3, t3, t4 |
| ; RV32IM-NEXT: xor t0, t0, a6 |
| ; RV32IM-NEXT: lw a6, 220(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, a7, a6 |
| ; RV32IM-NEXT: lw a6, 208(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, a6 |
| ; RV32IM-NEXT: xor a6, s11, a4 |
| ; RV32IM-NEXT: lw a4, 472(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, a4 |
| ; RV32IM-NEXT: lw a4, 608(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a2, a4 |
| ; RV32IM-NEXT: xor a4, s8, s9 |
| ; RV32IM-NEXT: lw t4, 420(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a1, t4 |
| ; RV32IM-NEXT: lw t4, 616(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, t4 |
| ; RV32IM-NEXT: xor t4, s5, s6 |
| ; RV32IM-NEXT: lw s3, 528(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s3, s4, s3 |
| ; RV32IM-NEXT: xor s0, s2, s0 |
| ; RV32IM-NEXT: lw s2, 512(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s1, s1, s2 |
| ; RV32IM-NEXT: xor t1, t1, t2 |
| ; RV32IM-NEXT: lw t2, 452(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t2, t3, t2 |
| ; RV32IM-NEXT: xor t0, t0, a7 |
| ; RV32IM-NEXT: lw a7, 424(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t3, a5, a7 |
| ; RV32IM-NEXT: lw a5, 612(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, a2, a5 |
| ; RV32IM-NEXT: lw a5, 620(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a0, a5 |
| ; RV32IM-NEXT: srli a0, s10, 2 |
| ; RV32IM-NEXT: lw s4, 632(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and a2, s10, s4 |
| ; RV32IM-NEXT: and a0, a0, s4 |
| ; RV32IM-NEXT: slli a2, a2, 2 |
| ; RV32IM-NEXT: or a0, a0, a2 |
| ; RV32IM-NEXT: lw s2, 588(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: srli a2, s2, 2 |
| ; RV32IM-NEXT: and s2, s2, s4 |
| ; RV32IM-NEXT: and a2, a2, s4 |
| ; RV32IM-NEXT: slli s2, s2, 2 |
| ; RV32IM-NEXT: or a2, a2, s2 |
| ; RV32IM-NEXT: xor t4, t4, s3 |
| ; RV32IM-NEXT: xor s0, s0, s1 |
| ; RV32IM-NEXT: srli s1, t6, 2 |
| ; RV32IM-NEXT: and t6, t6, s4 |
| ; RV32IM-NEXT: and s1, s1, s4 |
| ; RV32IM-NEXT: slli t6, t6, 2 |
| ; RV32IM-NEXT: or t6, s1, t6 |
| ; RV32IM-NEXT: srli s1, t5, 2 |
| ; RV32IM-NEXT: and t5, t5, s4 |
| ; RV32IM-NEXT: and s1, s1, s4 |
| ; RV32IM-NEXT: mv s3, s4 |
| ; RV32IM-NEXT: slli t5, t5, 2 |
| ; RV32IM-NEXT: or t5, s1, t5 |
| ; RV32IM-NEXT: xor t1, t1, t2 |
| ; RV32IM-NEXT: xor t0, t0, t3 |
| ; RV32IM-NEXT: xor a3, a6, a3 |
| ; RV32IM-NEXT: lw t2, 584(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t2, a3, t2 |
| ; RV32IM-NEXT: xor a1, a4, a1 |
| ; RV32IM-NEXT: lw a3, 580(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t3, a1, a3 |
| ; RV32IM-NEXT: lw a1, 604(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, t4, a1 |
| ; RV32IM-NEXT: lw a3, 596(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, s0, a3 |
| ; RV32IM-NEXT: lw t4, 600(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t1, t1, t4 |
| ; RV32IM-NEXT: lw t4, 592(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t0, t0, t4 |
| ; RV32IM-NEXT: xor a1, a3, a1 |
| ; RV32IM-NEXT: sw a1, 620(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: xor a1, t0, t1 |
| ; RV32IM-NEXT: sw a1, 616(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: srli a1, a0, 1 |
| ; RV32IM-NEXT: lw s4, 628(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and a0, a0, s4 |
| ; RV32IM-NEXT: and a1, a1, s4 |
| ; RV32IM-NEXT: slli a0, a0, 1 |
| ; RV32IM-NEXT: or a1, a1, a0 |
| ; RV32IM-NEXT: srli a0, a2, 1 |
| ; RV32IM-NEXT: and a2, a2, s4 |
| ; RV32IM-NEXT: and a0, a0, s4 |
| ; RV32IM-NEXT: slli a2, a2, 1 |
| ; RV32IM-NEXT: or a0, a0, a2 |
| ; RV32IM-NEXT: srli a2, t6, 1 |
| ; RV32IM-NEXT: and a3, t6, s4 |
| ; RV32IM-NEXT: and a2, a2, s4 |
| ; RV32IM-NEXT: slli a3, a3, 1 |
| ; RV32IM-NEXT: or a2, a2, a3 |
| ; RV32IM-NEXT: srli a3, t5, 1 |
| ; RV32IM-NEXT: and t0, t5, s4 |
| ; RV32IM-NEXT: and a3, a3, s4 |
| ; RV32IM-NEXT: slli t0, t0, 1 |
| ; RV32IM-NEXT: or a3, a3, t0 |
| ; RV32IM-NEXT: slli a6, a6, 24 |
| ; RV32IM-NEXT: lw t1, 644(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and t0, t2, t1 |
| ; RV32IM-NEXT: slli t0, t0, 8 |
| ; RV32IM-NEXT: or a6, a6, t0 |
| ; RV32IM-NEXT: xor a7, t2, a7 |
| ; RV32IM-NEXT: srli t0, t2, 8 |
| ; RV32IM-NEXT: and t0, t0, t1 |
| ; RV32IM-NEXT: srli a7, a7, 24 |
| ; RV32IM-NEXT: or a7, t0, a7 |
| ; RV32IM-NEXT: slli a4, a4, 24 |
| ; RV32IM-NEXT: and t0, t3, t1 |
| ; RV32IM-NEXT: slli t0, t0, 8 |
| ; RV32IM-NEXT: or a4, a4, t0 |
| ; RV32IM-NEXT: xor a5, t3, a5 |
| ; RV32IM-NEXT: srli t0, t3, 8 |
| ; RV32IM-NEXT: and t0, t0, t1 |
| ; RV32IM-NEXT: srli a5, a5, 24 |
| ; RV32IM-NEXT: or a5, t0, a5 |
| ; RV32IM-NEXT: or a6, a6, a7 |
| ; RV32IM-NEXT: sw a6, 608(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: or a4, a4, a5 |
| ; RV32IM-NEXT: sw a4, 612(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lw t0, 624(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and a4, a0, t0 |
| ; RV32IM-NEXT: mul a4, a1, a4 |
| ; RV32IM-NEXT: lui t2, 1 |
| ; RV32IM-NEXT: and a5, a0, t2 |
| ; RV32IM-NEXT: mul a5, a1, a5 |
| ; RV32IM-NEXT: xor s0, a4, a5 |
| ; RV32IM-NEXT: lui t1, 64 |
| ; RV32IM-NEXT: and a4, a0, t1 |
| ; RV32IM-NEXT: mul a4, a1, a4 |
| ; RV32IM-NEXT: lui t3, 128 |
| ; RV32IM-NEXT: and a5, a0, t3 |
| ; RV32IM-NEXT: mul a5, a1, a5 |
| ; RV32IM-NEXT: xor a5, a4, a5 |
| ; RV32IM-NEXT: lui t4, 4096 |
| ; RV32IM-NEXT: and a4, a0, t4 |
| ; RV32IM-NEXT: mul a4, a1, a4 |
| ; RV32IM-NEXT: lui t5, 8192 |
| ; RV32IM-NEXT: and a7, a0, t5 |
| ; RV32IM-NEXT: mul a7, a1, a7 |
| ; RV32IM-NEXT: xor a4, a4, a7 |
| ; RV32IM-NEXT: and a7, a3, t0 |
| ; RV32IM-NEXT: and t0, a3, t2 |
| ; RV32IM-NEXT: mul a7, a2, a7 |
| ; RV32IM-NEXT: mul t0, a2, t0 |
| ; RV32IM-NEXT: xor a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 624(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a7, a3, t1 |
| ; RV32IM-NEXT: and t0, a3, t3 |
| ; RV32IM-NEXT: mul a7, a2, a7 |
| ; RV32IM-NEXT: mul t0, a2, t0 |
| ; RV32IM-NEXT: xor a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 600(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and a7, a3, t4 |
| ; RV32IM-NEXT: and t0, a3, t5 |
| ; RV32IM-NEXT: mul a7, a2, a7 |
| ; RV32IM-NEXT: mul t0, a2, t0 |
| ; RV32IM-NEXT: xor a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 588(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 2 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 1 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 604(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 4 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 2 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 596(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 8 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 3 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 584(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 16 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 4 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 576(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 32 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 5 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 572(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 64 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 6 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 580(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 128 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 7 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 552(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 256 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 8 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 540(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 512 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: slli t0, a1, 9 |
| ; RV32IM-NEXT: and a6, a7, t0 |
| ; RV32IM-NEXT: sw a6, 556(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a7, a0, 1 |
| ; RV32IM-NEXT: seqz a7, a7 |
| ; RV32IM-NEXT: lui t6, 2 |
| ; RV32IM-NEXT: and t0, a0, t6 |
| ; RV32IM-NEXT: mul t0, a1, t0 |
| ; RV32IM-NEXT: lui t1, 4 |
| ; RV32IM-NEXT: and t1, a0, t1 |
| ; RV32IM-NEXT: mul a6, a1, t1 |
| ; RV32IM-NEXT: sw a6, 528(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t1, 8 |
| ; RV32IM-NEXT: and t1, a0, t1 |
| ; RV32IM-NEXT: mul a6, a1, t1 |
| ; RV32IM-NEXT: sw a6, 548(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui a6, 16 |
| ; RV32IM-NEXT: and t1, a0, a6 |
| ; RV32IM-NEXT: mul a6, a1, t1 |
| ; RV32IM-NEXT: sw a6, 560(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui s11, 32 |
| ; RV32IM-NEXT: and t1, a0, s11 |
| ; RV32IM-NEXT: mul a6, a1, t1 |
| ; RV32IM-NEXT: sw a6, 592(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui s6, 256 |
| ; RV32IM-NEXT: and t1, a0, s6 |
| ; RV32IM-NEXT: mul t1, a1, t1 |
| ; RV32IM-NEXT: lui s9, 512 |
| ; RV32IM-NEXT: and t2, a0, s9 |
| ; RV32IM-NEXT: mul a6, a1, t2 |
| ; RV32IM-NEXT: sw a6, 520(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui ra, 1024 |
| ; RV32IM-NEXT: and t2, a0, ra |
| ; RV32IM-NEXT: mul a6, a1, t2 |
| ; RV32IM-NEXT: sw a6, 532(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui s8, 2048 |
| ; RV32IM-NEXT: and t2, a0, s8 |
| ; RV32IM-NEXT: mul a6, a1, t2 |
| ; RV32IM-NEXT: sw a6, 544(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui s7, 16384 |
| ; RV32IM-NEXT: and t2, a0, s7 |
| ; RV32IM-NEXT: mul t2, a1, t2 |
| ; RV32IM-NEXT: lui a6, 32768 |
| ; RV32IM-NEXT: and t3, a0, a6 |
| ; RV32IM-NEXT: mul t3, a1, t3 |
| ; RV32IM-NEXT: sw t3, 512(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui s5, 65536 |
| ; RV32IM-NEXT: and t3, a0, s5 |
| ; RV32IM-NEXT: mul t3, a1, t3 |
| ; RV32IM-NEXT: sw t3, 524(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui s2, 131072 |
| ; RV32IM-NEXT: and t3, a0, s2 |
| ; RV32IM-NEXT: mul t3, a1, t3 |
| ; RV32IM-NEXT: sw t3, 536(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t4, 262144 |
| ; RV32IM-NEXT: and t3, a0, t4 |
| ; RV32IM-NEXT: mul t3, a1, t3 |
| ; RV32IM-NEXT: sw t3, 564(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: lui t5, 524288 |
| ; RV32IM-NEXT: and t3, a0, t5 |
| ; RV32IM-NEXT: mul t3, a1, t3 |
| ; RV32IM-NEXT: sw t3, 568(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: addi a7, a7, -1 |
| ; RV32IM-NEXT: and a7, a7, a1 |
| ; RV32IM-NEXT: sw a7, 508(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: slli a1, a1, 10 |
| ; RV32IM-NEXT: andi a0, a0, 1024 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 516(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: xor a0, s0, t0 |
| ; RV32IM-NEXT: sw a0, 504(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: xor a0, a5, t1 |
| ; RV32IM-NEXT: sw a0, 500(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: xor a0, a4, t2 |
| ; RV32IM-NEXT: sw a0, 496(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 2 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli a1, a2, 1 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 492(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 4 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli a1, a2, 2 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 488(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 8 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli s1, a2, 3 |
| ; RV32IM-NEXT: and a0, a0, s1 |
| ; RV32IM-NEXT: sw a0, 484(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 16 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli a1, a2, 4 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 476(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 32 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli a1, a2, 5 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 472(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 64 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli s0, a2, 6 |
| ; RV32IM-NEXT: and a0, a0, s0 |
| ; RV32IM-NEXT: sw a0, 480(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 128 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli a1, a2, 7 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 452(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 256 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli a1, a2, 8 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 448(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: andi a0, a3, 512 |
| ; RV32IM-NEXT: seqz a0, a0 |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: slli a1, a2, 9 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: sw a0, 464(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: and t6, a3, t6 |
| ; RV32IM-NEXT: lui a1, 4 |
| ; RV32IM-NEXT: and a1, a3, a1 |
| ; RV32IM-NEXT: lui a4, 8 |
| ; RV32IM-NEXT: and a4, a3, a4 |
| ; RV32IM-NEXT: lui a5, 16 |
| ; RV32IM-NEXT: and a5, a3, a5 |
| ; RV32IM-NEXT: and t0, a3, s11 |
| ; RV32IM-NEXT: and t1, a3, s6 |
| ; RV32IM-NEXT: and t2, a3, s9 |
| ; RV32IM-NEXT: and s6, a3, ra |
| ; RV32IM-NEXT: and s8, a3, s8 |
| ; RV32IM-NEXT: and s9, a3, s7 |
| ; RV32IM-NEXT: and a6, a3, a6 |
| ; RV32IM-NEXT: and a7, a3, s5 |
| ; RV32IM-NEXT: and t3, a3, s2 |
| ; RV32IM-NEXT: and t4, a3, t4 |
| ; RV32IM-NEXT: and t5, a3, t5 |
| ; RV32IM-NEXT: andi s2, a3, 1 |
| ; RV32IM-NEXT: seqz a0, s2 |
| ; RV32IM-NEXT: mul t6, a2, t6 |
| ; RV32IM-NEXT: mul s1, a2, a1 |
| ; RV32IM-NEXT: mul s5, a2, a4 |
| ; RV32IM-NEXT: mul a1, a2, a5 |
| ; RV32IM-NEXT: sw a1, 444(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a1, a2, t0 |
| ; RV32IM-NEXT: sw a1, 468(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul t1, a2, t1 |
| ; RV32IM-NEXT: mul s0, a2, t2 |
| ; RV32IM-NEXT: mul s6, a2, s6 |
| ; RV32IM-NEXT: mul s11, a2, s8 |
| ; RV32IM-NEXT: mul s8, a2, s9 |
| ; RV32IM-NEXT: mul s9, a2, a6 |
| ; RV32IM-NEXT: mul s2, a2, a7 |
| ; RV32IM-NEXT: mul s7, a2, t3 |
| ; RV32IM-NEXT: mul a1, a2, t4 |
| ; RV32IM-NEXT: sw a1, 456(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: mul a1, a2, t5 |
| ; RV32IM-NEXT: sw a1, 460(sp) # 4-byte Folded Spill |
| ; RV32IM-NEXT: addi a0, a0, -1 |
| ; RV32IM-NEXT: and t0, a0, a2 |
| ; RV32IM-NEXT: slli a2, a2, 10 |
| ; RV32IM-NEXT: andi a3, a3, 1024 |
| ; RV32IM-NEXT: seqz a3, a3 |
| ; RV32IM-NEXT: addi a3, a3, -1 |
| ; RV32IM-NEXT: and t4, a3, a2 |
| ; RV32IM-NEXT: lw a0, 624(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t2, a0, t6 |
| ; RV32IM-NEXT: lw a0, 600(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t3, a0, t1 |
| ; RV32IM-NEXT: lw a0, 588(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t5, a0, s8 |
| ; RV32IM-NEXT: lw a0, 608(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: srli t6, a0, 4 |
| ; RV32IM-NEXT: lw a1, 648(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and s8, a0, a1 |
| ; RV32IM-NEXT: and t6, t6, a1 |
| ; RV32IM-NEXT: slli s8, s8, 4 |
| ; RV32IM-NEXT: or t6, t6, s8 |
| ; RV32IM-NEXT: lw a0, 612(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: srli s8, a0, 4 |
| ; RV32IM-NEXT: and a0, a0, a1 |
| ; RV32IM-NEXT: and s8, s8, a1 |
| ; RV32IM-NEXT: slli a0, a0, 4 |
| ; RV32IM-NEXT: or t1, s8, a0 |
| ; RV32IM-NEXT: lw a0, 604(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 508(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s8, a1, a0 |
| ; RV32IM-NEXT: lw a0, 596(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 584(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a6, a0, a1 |
| ; RV32IM-NEXT: lw a0, 576(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 572(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, a0, a1 |
| ; RV32IM-NEXT: lw a0, 552(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a2, 540(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a0, a2 |
| ; RV32IM-NEXT: lw a0, 528(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a3, 504(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, a0 |
| ; RV32IM-NEXT: lw a0, 520(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a4, 500(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, a4, a0 |
| ; RV32IM-NEXT: lw a0, 512(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a5, 496(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, a0 |
| ; RV32IM-NEXT: lw a0, 492(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t0, t0, a0 |
| ; RV32IM-NEXT: lw a0, 488(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw a1, 484(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: lw a1, 476(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s10, 472(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a1, s10 |
| ; RV32IM-NEXT: lw s10, 452(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw ra, 448(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor s10, s10, ra |
| ; RV32IM-NEXT: xor t2, t2, s1 |
| ; RV32IM-NEXT: xor t3, t3, s0 |
| ; RV32IM-NEXT: xor t5, t5, s9 |
| ; RV32IM-NEXT: xor a6, s8, a6 |
| ; RV32IM-NEXT: lw s0, 580(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, a7, s0 |
| ; RV32IM-NEXT: lw s0, 556(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a2, s0 |
| ; RV32IM-NEXT: lw s0, 548(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, s0 |
| ; RV32IM-NEXT: lw s0, 532(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, a4, s0 |
| ; RV32IM-NEXT: lw s0, 524(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, s0 |
| ; RV32IM-NEXT: xor a0, t0, a0 |
| ; RV32IM-NEXT: lw t0, 480(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, a1, t0 |
| ; RV32IM-NEXT: lw t0, 464(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor t0, s10, t0 |
| ; RV32IM-NEXT: xor t2, t2, s5 |
| ; RV32IM-NEXT: xor t3, t3, s6 |
| ; RV32IM-NEXT: xor t5, t5, s2 |
| ; RV32IM-NEXT: xor a6, a6, a7 |
| ; RV32IM-NEXT: lw a7, 516(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a2, a7 |
| ; RV32IM-NEXT: lw a7, 560(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, a7 |
| ; RV32IM-NEXT: lw a7, 544(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a4, a4, a7 |
| ; RV32IM-NEXT: lw a7, 536(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: xor a0, a0, a1 |
| ; RV32IM-NEXT: xor a1, t0, t4 |
| ; RV32IM-NEXT: lw a7, 444(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, t2, a7 |
| ; RV32IM-NEXT: xor t0, t3, s11 |
| ; RV32IM-NEXT: xor t2, t5, s7 |
| ; RV32IM-NEXT: srli t3, t6, 2 |
| ; RV32IM-NEXT: and t4, t6, s3 |
| ; RV32IM-NEXT: and t3, t3, s3 |
| ; RV32IM-NEXT: slli t4, t4, 2 |
| ; RV32IM-NEXT: or t3, t3, t4 |
| ; RV32IM-NEXT: srli t4, t1, 2 |
| ; RV32IM-NEXT: and t1, t1, s3 |
| ; RV32IM-NEXT: and t4, t4, s3 |
| ; RV32IM-NEXT: slli t1, t1, 2 |
| ; RV32IM-NEXT: or t1, t4, t1 |
| ; RV32IM-NEXT: xor a2, a6, a2 |
| ; RV32IM-NEXT: lw a6, 592(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, a6 |
| ; RV32IM-NEXT: lw a6, 564(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, a6 |
| ; RV32IM-NEXT: xor a6, a0, a1 |
| ; RV32IM-NEXT: lw a0, 468(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a0, a7, a0 |
| ; RV32IM-NEXT: lw a1, 456(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a1, t2, a1 |
| ; RV32IM-NEXT: lw a7, 568(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a5, a5, a7 |
| ; RV32IM-NEXT: lw a7, 460(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a7, a1, a7 |
| ; RV32IM-NEXT: xor a3, a2, a3 |
| ; RV32IM-NEXT: xor a3, a3, a4 |
| ; RV32IM-NEXT: xor a0, a6, a0 |
| ; RV32IM-NEXT: xor a4, a0, t0 |
| ; RV32IM-NEXT: srli a0, t3, 1 |
| ; RV32IM-NEXT: and a1, t3, s4 |
| ; RV32IM-NEXT: and a0, a0, s4 |
| ; RV32IM-NEXT: slli a1, a1, 1 |
| ; RV32IM-NEXT: or a0, a0, a1 |
| ; RV32IM-NEXT: srli a1, t1, 1 |
| ; RV32IM-NEXT: and t0, t1, s4 |
| ; RV32IM-NEXT: slli a2, a2, 24 |
| ; RV32IM-NEXT: and a1, a1, s4 |
| ; RV32IM-NEXT: slli t0, t0, 1 |
| ; RV32IM-NEXT: or a1, a1, t0 |
| ; RV32IM-NEXT: lw t1, 644(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and t0, a3, t1 |
| ; RV32IM-NEXT: slli t0, t0, 8 |
| ; RV32IM-NEXT: or a2, a2, t0 |
| ; RV32IM-NEXT: slli a6, a6, 24 |
| ; RV32IM-NEXT: xor a5, a3, a5 |
| ; RV32IM-NEXT: srli a3, a3, 8 |
| ; RV32IM-NEXT: and a3, a3, t1 |
| ; RV32IM-NEXT: srli a5, a5, 24 |
| ; RV32IM-NEXT: or a3, a3, a5 |
| ; RV32IM-NEXT: and a5, a4, t1 |
| ; RV32IM-NEXT: slli a5, a5, 8 |
| ; RV32IM-NEXT: or a5, a6, a5 |
| ; RV32IM-NEXT: xor a6, a4, a7 |
| ; RV32IM-NEXT: srli a4, a4, 8 |
| ; RV32IM-NEXT: and a4, a4, t1 |
| ; RV32IM-NEXT: srli a6, a6, 24 |
| ; RV32IM-NEXT: or a4, a4, a6 |
| ; RV32IM-NEXT: lui a6, 349525 |
| ; RV32IM-NEXT: addi a6, a6, 1364 |
| ; RV32IM-NEXT: or a2, a2, a3 |
| ; RV32IM-NEXT: or a4, a5, a4 |
| ; RV32IM-NEXT: srli a3, a2, 4 |
| ; RV32IM-NEXT: lw a7, 648(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: and a2, a2, a7 |
| ; RV32IM-NEXT: srli a5, a4, 4 |
| ; RV32IM-NEXT: and a4, a4, a7 |
| ; RV32IM-NEXT: and a3, a3, a7 |
| ; RV32IM-NEXT: slli a2, a2, 4 |
| ; RV32IM-NEXT: and a5, a5, a7 |
| ; RV32IM-NEXT: slli a4, a4, 4 |
| ; RV32IM-NEXT: or a2, a3, a2 |
| ; RV32IM-NEXT: or a4, a5, a4 |
| ; RV32IM-NEXT: srli a3, a2, 2 |
| ; RV32IM-NEXT: and a2, a2, s3 |
| ; RV32IM-NEXT: srli a5, a4, 2 |
| ; RV32IM-NEXT: and a4, a4, s3 |
| ; RV32IM-NEXT: and a3, a3, s3 |
| ; RV32IM-NEXT: slli a2, a2, 2 |
| ; RV32IM-NEXT: and a5, a5, s3 |
| ; RV32IM-NEXT: slli a4, a4, 2 |
| ; RV32IM-NEXT: or a2, a3, a2 |
| ; RV32IM-NEXT: or a4, a5, a4 |
| ; RV32IM-NEXT: srli a3, a2, 1 |
| ; RV32IM-NEXT: srli a5, a4, 1 |
| ; RV32IM-NEXT: and a3, a3, a6 |
| ; RV32IM-NEXT: and a5, a5, a6 |
| ; RV32IM-NEXT: and a2, a2, s4 |
| ; RV32IM-NEXT: slli a2, a2, 1 |
| ; RV32IM-NEXT: or a2, a3, a2 |
| ; RV32IM-NEXT: and a3, a4, s4 |
| ; RV32IM-NEXT: slli a3, a3, 1 |
| ; RV32IM-NEXT: or a3, a5, a3 |
| ; RV32IM-NEXT: srli a2, a2, 1 |
| ; RV32IM-NEXT: srli a3, a3, 1 |
| ; RV32IM-NEXT: lw a4, 620(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a2, a2, a4 |
| ; RV32IM-NEXT: lw a4, 616(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: xor a3, a3, a4 |
| ; RV32IM-NEXT: srli a4, a2, 8 |
| ; RV32IM-NEXT: srli a5, a2, 24 |
| ; RV32IM-NEXT: slli a6, a2, 24 |
| ; RV32IM-NEXT: and a2, a2, t1 |
| ; RV32IM-NEXT: and a4, a4, t1 |
| ; RV32IM-NEXT: or a4, a4, a5 |
| ; RV32IM-NEXT: srli a5, a3, 8 |
| ; RV32IM-NEXT: slli a2, a2, 8 |
| ; RV32IM-NEXT: or a2, a6, a2 |
| ; RV32IM-NEXT: srli a6, a3, 24 |
| ; RV32IM-NEXT: and a5, a5, t1 |
| ; RV32IM-NEXT: or a5, a5, a6 |
| ; RV32IM-NEXT: and a6, a3, t1 |
| ; RV32IM-NEXT: slli a3, a3, 24 |
| ; RV32IM-NEXT: slli a6, a6, 8 |
| ; RV32IM-NEXT: or a3, a3, a6 |
| ; RV32IM-NEXT: or a2, a2, a4 |
| ; RV32IM-NEXT: or a3, a3, a5 |
| ; RV32IM-NEXT: srli a4, a2, 4 |
| ; RV32IM-NEXT: and a2, a2, a7 |
| ; RV32IM-NEXT: srli a5, a3, 4 |
| ; RV32IM-NEXT: and a3, a3, a7 |
| ; RV32IM-NEXT: and a4, a4, a7 |
| ; RV32IM-NEXT: and a5, a5, a7 |
| ; RV32IM-NEXT: slli a2, a2, 4 |
| ; RV32IM-NEXT: slli a3, a3, 4 |
| ; RV32IM-NEXT: or a2, a4, a2 |
| ; RV32IM-NEXT: or a3, a5, a3 |
| ; RV32IM-NEXT: srli a4, a2, 2 |
| ; RV32IM-NEXT: and a2, a2, s3 |
| ; RV32IM-NEXT: srli a5, a3, 2 |
| ; RV32IM-NEXT: and a3, a3, s3 |
| ; RV32IM-NEXT: and a4, a4, s3 |
| ; RV32IM-NEXT: and a5, a5, s3 |
| ; RV32IM-NEXT: slli a2, a2, 2 |
| ; RV32IM-NEXT: slli a3, a3, 2 |
| ; RV32IM-NEXT: or a2, a4, a2 |
| ; RV32IM-NEXT: or a3, a5, a3 |
| ; RV32IM-NEXT: srli a4, a2, 1 |
| ; RV32IM-NEXT: and a2, a2, s4 |
| ; RV32IM-NEXT: srli a5, a3, 1 |
| ; RV32IM-NEXT: and a3, a3, s4 |
| ; RV32IM-NEXT: and a4, a4, s4 |
| ; RV32IM-NEXT: and a5, a5, s4 |
| ; RV32IM-NEXT: slli a2, a2, 1 |
| ; RV32IM-NEXT: or a2, a4, a2 |
| ; RV32IM-NEXT: slli a3, a3, 1 |
| ; RV32IM-NEXT: or a3, a5, a3 |
| ; RV32IM-NEXT: lw a4, 636(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: sw a2, 0(a4) |
| ; RV32IM-NEXT: sw a0, 4(a4) |
| ; RV32IM-NEXT: sw a3, 8(a4) |
| ; RV32IM-NEXT: sw a1, 12(a4) |
| ; RV32IM-NEXT: lw a4, 640(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: sw a2, 0(a4) |
| ; RV32IM-NEXT: sw a0, 4(a4) |
| ; RV32IM-NEXT: sw a3, 8(a4) |
| ; RV32IM-NEXT: sw a1, 12(a4) |
| ; RV32IM-NEXT: lw ra, 700(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s0, 696(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s1, 692(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s2, 688(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s3, 684(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s4, 680(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s5, 676(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s6, 672(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s7, 668(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s8, 664(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s9, 660(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s10, 656(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: lw s11, 652(sp) # 4-byte Folded Reload |
| ; RV32IM-NEXT: addi sp, sp, 704 |
| ; RV32IM-NEXT: ret |
| ; |
| ; RV64IM-LABEL: commutative_clmulr_v2i64: |
| ; RV64IM: # %bb.0: |
| ; RV64IM-NEXT: addi sp, sp, -960 |
| ; RV64IM-NEXT: sd ra, 952(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s0, 944(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s1, 936(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s2, 928(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s3, 920(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s4, 912(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s5, 904(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s6, 896(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s7, 888(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s8, 880(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s9, 872(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s10, 864(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd s11, 856(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd a5, 824(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: sd a4, 816(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mv t6, a0 |
| ; RV64IM-NEXT: srli t0, a2, 24 |
| ; RV64IM-NEXT: lui t5, 4080 |
| ; RV64IM-NEXT: srli t1, a2, 8 |
| ; RV64IM-NEXT: li t4, 255 |
| ; RV64IM-NEXT: srli t2, a2, 40 |
| ; RV64IM-NEXT: lui t3, 16 |
| ; RV64IM-NEXT: srli s0, a2, 56 |
| ; RV64IM-NEXT: srliw a6, a2, 24 |
| ; RV64IM-NEXT: slli a0, a2, 56 |
| ; RV64IM-NEXT: sd a0, 848(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui s1, 61681 |
| ; RV64IM-NEXT: lui s5, 209715 |
| ; RV64IM-NEXT: lui s2, 349525 |
| ; RV64IM-NEXT: srli s3, t6, 24 |
| ; RV64IM-NEXT: srli s4, t6, 8 |
| ; RV64IM-NEXT: srli a4, t6, 40 |
| ; RV64IM-NEXT: srli a5, t6, 56 |
| ; RV64IM-NEXT: srliw a7, t6, 24 |
| ; RV64IM-NEXT: slli a0, t6, 56 |
| ; RV64IM-NEXT: sd a0, 840(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: srli s7, a3, 24 |
| ; RV64IM-NEXT: srli s9, a3, 8 |
| ; RV64IM-NEXT: srli s6, a3, 40 |
| ; RV64IM-NEXT: srli s8, a3, 56 |
| ; RV64IM-NEXT: and t0, t0, t5 |
| ; RV64IM-NEXT: slli t4, t4, 24 |
| ; RV64IM-NEXT: and t1, t1, t4 |
| ; RV64IM-NEXT: or t0, t1, t0 |
| ; RV64IM-NEXT: addi a0, t3, -256 |
| ; RV64IM-NEXT: and t1, t2, a0 |
| ; RV64IM-NEXT: or t1, t1, s0 |
| ; RV64IM-NEXT: and t2, a2, t5 |
| ; RV64IM-NEXT: slli a6, a6, 32 |
| ; RV64IM-NEXT: addi t3, s1, -241 |
| ; RV64IM-NEXT: addi s0, s5, 819 |
| ; RV64IM-NEXT: addi s1, s2, 1365 |
| ; RV64IM-NEXT: slli t2, t2, 24 |
| ; RV64IM-NEXT: or s5, t2, a6 |
| ; RV64IM-NEXT: slli a6, t3, 32 |
| ; RV64IM-NEXT: add s10, t3, a6 |
| ; RV64IM-NEXT: slli a6, s0, 32 |
| ; RV64IM-NEXT: add s11, s0, a6 |
| ; RV64IM-NEXT: slli a6, s1, 32 |
| ; RV64IM-NEXT: add ra, s1, a6 |
| ; RV64IM-NEXT: srliw t2, a3, 24 |
| ; RV64IM-NEXT: and a6, s3, t5 |
| ; RV64IM-NEXT: and t3, s4, t4 |
| ; RV64IM-NEXT: or a6, t3, a6 |
| ; RV64IM-NEXT: srli t3, a1, 24 |
| ; RV64IM-NEXT: and a4, a4, a0 |
| ; RV64IM-NEXT: or a5, a4, a5 |
| ; RV64IM-NEXT: and a4, t6, t5 |
| ; RV64IM-NEXT: slli a7, a7, 32 |
| ; RV64IM-NEXT: slli a4, a4, 24 |
| ; RV64IM-NEXT: or a4, a4, a7 |
| ; RV64IM-NEXT: srli a7, a1, 8 |
| ; RV64IM-NEXT: and s0, s7, t5 |
| ; RV64IM-NEXT: sd t4, 808(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s1, s9, t4 |
| ; RV64IM-NEXT: or s1, s1, s0 |
| ; RV64IM-NEXT: srli s0, a1, 40 |
| ; RV64IM-NEXT: and s2, s6, a0 |
| ; RV64IM-NEXT: or s3, s2, s8 |
| ; RV64IM-NEXT: and s2, a3, t5 |
| ; RV64IM-NEXT: slli t2, t2, 32 |
| ; RV64IM-NEXT: slli s2, s2, 24 |
| ; RV64IM-NEXT: or t2, s2, t2 |
| ; RV64IM-NEXT: srli s2, a1, 56 |
| ; RV64IM-NEXT: and t3, t3, t5 |
| ; RV64IM-NEXT: and a7, a7, t4 |
| ; RV64IM-NEXT: or a7, a7, t3 |
| ; RV64IM-NEXT: srliw t3, a1, 24 |
| ; RV64IM-NEXT: mv t4, a0 |
| ; RV64IM-NEXT: sd a0, 784(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s0, s0, a0 |
| ; RV64IM-NEXT: or s4, s0, s2 |
| ; RV64IM-NEXT: and s0, a1, t5 |
| ; RV64IM-NEXT: slli t3, t3, 32 |
| ; RV64IM-NEXT: slli s0, s0, 24 |
| ; RV64IM-NEXT: or t3, s0, t3 |
| ; RV64IM-NEXT: li s0, 1 |
| ; RV64IM-NEXT: or s6, t0, t1 |
| ; RV64IM-NEXT: lui s2, 1 |
| ; RV64IM-NEXT: and a2, a2, a0 |
| ; RV64IM-NEXT: slli a2, a2, 40 |
| ; RV64IM-NEXT: ld a0, 848(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: or a2, a0, a2 |
| ; RV64IM-NEXT: lui t0, 64 |
| ; RV64IM-NEXT: or t5, a6, a5 |
| ; RV64IM-NEXT: lui t1, 128 |
| ; RV64IM-NEXT: and a0, t6, t4 |
| ; RV64IM-NEXT: slli a0, a0, 40 |
| ; RV64IM-NEXT: ld a5, 840(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: or a0, a5, a0 |
| ; RV64IM-NEXT: lui s7, 4096 |
| ; RV64IM-NEXT: or t6, s1, s3 |
| ; RV64IM-NEXT: slli a6, a3, 56 |
| ; RV64IM-NEXT: and a3, a3, t4 |
| ; RV64IM-NEXT: slli a3, a3, 40 |
| ; RV64IM-NEXT: or s1, a6, a3 |
| ; RV64IM-NEXT: lui a6, 8192 |
| ; RV64IM-NEXT: or a7, a7, s4 |
| ; RV64IM-NEXT: slli a3, a1, 56 |
| ; RV64IM-NEXT: and a1, a1, t4 |
| ; RV64IM-NEXT: slli a1, a1, 40 |
| ; RV64IM-NEXT: or a1, a3, a1 |
| ; RV64IM-NEXT: slli s8, s0, 11 |
| ; RV64IM-NEXT: or t4, a2, s5 |
| ; RV64IM-NEXT: slli a3, s0, 33 |
| ; RV64IM-NEXT: or a0, a0, a4 |
| ; RV64IM-NEXT: slli a4, s0, 34 |
| ; RV64IM-NEXT: or t2, s1, t2 |
| ; RV64IM-NEXT: slli a2, s0, 40 |
| ; RV64IM-NEXT: or a1, a1, t3 |
| ; RV64IM-NEXT: or t3, t4, s6 |
| ; RV64IM-NEXT: or a0, a0, t5 |
| ; RV64IM-NEXT: or t2, t2, t6 |
| ; RV64IM-NEXT: or a1, a1, a7 |
| ; RV64IM-NEXT: srli a7, t3, 4 |
| ; RV64IM-NEXT: sd s10, 800(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t3, t3, s10 |
| ; RV64IM-NEXT: srli t4, a0, 4 |
| ; RV64IM-NEXT: and a0, a0, s10 |
| ; RV64IM-NEXT: srli t5, t2, 4 |
| ; RV64IM-NEXT: and t2, t2, s10 |
| ; RV64IM-NEXT: srli t6, a1, 4 |
| ; RV64IM-NEXT: and a1, a1, s10 |
| ; RV64IM-NEXT: and a7, a7, s10 |
| ; RV64IM-NEXT: slli t3, t3, 4 |
| ; RV64IM-NEXT: and t4, t4, s10 |
| ; RV64IM-NEXT: slli a0, a0, 4 |
| ; RV64IM-NEXT: and t5, t5, s10 |
| ; RV64IM-NEXT: slli t2, t2, 4 |
| ; RV64IM-NEXT: and t6, t6, s10 |
| ; RV64IM-NEXT: slli a1, a1, 4 |
| ; RV64IM-NEXT: or a7, a7, t3 |
| ; RV64IM-NEXT: or a0, t4, a0 |
| ; RV64IM-NEXT: or t2, t5, t2 |
| ; RV64IM-NEXT: or a1, t6, a1 |
| ; RV64IM-NEXT: srli t3, a7, 2 |
| ; RV64IM-NEXT: sd s11, 792(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a7, a7, s11 |
| ; RV64IM-NEXT: srli t4, a0, 2 |
| ; RV64IM-NEXT: and a0, a0, s11 |
| ; RV64IM-NEXT: srli t5, t2, 2 |
| ; RV64IM-NEXT: and t2, t2, s11 |
| ; RV64IM-NEXT: srli t6, a1, 2 |
| ; RV64IM-NEXT: and a1, a1, s11 |
| ; RV64IM-NEXT: and t3, t3, s11 |
| ; RV64IM-NEXT: slli a7, a7, 2 |
| ; RV64IM-NEXT: and t4, t4, s11 |
| ; RV64IM-NEXT: slli a0, a0, 2 |
| ; RV64IM-NEXT: and t5, t5, s11 |
| ; RV64IM-NEXT: slli t2, t2, 2 |
| ; RV64IM-NEXT: and t6, t6, s11 |
| ; RV64IM-NEXT: slli a1, a1, 2 |
| ; RV64IM-NEXT: or a7, t3, a7 |
| ; RV64IM-NEXT: or a0, t4, a0 |
| ; RV64IM-NEXT: or t2, t5, t2 |
| ; RV64IM-NEXT: or a1, t6, a1 |
| ; RV64IM-NEXT: srli t3, a7, 1 |
| ; RV64IM-NEXT: sd ra, 776(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a7, a7, ra |
| ; RV64IM-NEXT: srli t4, a0, 1 |
| ; RV64IM-NEXT: and a0, a0, ra |
| ; RV64IM-NEXT: srli t5, t2, 1 |
| ; RV64IM-NEXT: and t2, t2, ra |
| ; RV64IM-NEXT: srli t6, a1, 1 |
| ; RV64IM-NEXT: and a1, a1, ra |
| ; RV64IM-NEXT: and t3, t3, ra |
| ; RV64IM-NEXT: slli a7, a7, 1 |
| ; RV64IM-NEXT: and t4, t4, ra |
| ; RV64IM-NEXT: slli a0, a0, 1 |
| ; RV64IM-NEXT: and s1, t5, ra |
| ; RV64IM-NEXT: slli t2, t2, 1 |
| ; RV64IM-NEXT: and s3, t6, ra |
| ; RV64IM-NEXT: slli a1, a1, 1 |
| ; RV64IM-NEXT: or t5, t3, a7 |
| ; RV64IM-NEXT: or t6, t4, a0 |
| ; RV64IM-NEXT: or a0, s1, t2 |
| ; RV64IM-NEXT: or a5, s3, a1 |
| ; RV64IM-NEXT: and a7, t6, s8 |
| ; RV64IM-NEXT: and t2, t6, s2 |
| ; RV64IM-NEXT: and t3, t6, t0 |
| ; RV64IM-NEXT: and t4, t6, t1 |
| ; RV64IM-NEXT: and s1, t6, s7 |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: mul t2, t5, t2 |
| ; RV64IM-NEXT: xor a1, a7, t2 |
| ; RV64IM-NEXT: sd a1, 360(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a7, t6, a6 |
| ; RV64IM-NEXT: mul t2, t5, t3 |
| ; RV64IM-NEXT: mul t3, t5, t4 |
| ; RV64IM-NEXT: xor a1, t2, t3 |
| ; RV64IM-NEXT: sd a1, 352(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t2, t6, a3 |
| ; RV64IM-NEXT: mul t3, t5, s1 |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: xor a1, t3, a7 |
| ; RV64IM-NEXT: sd a1, 376(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a7, t6, a4 |
| ; RV64IM-NEXT: mul t2, t5, t2 |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: xor a1, t2, a7 |
| ; RV64IM-NEXT: sd a1, 344(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a7, t6, a2 |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: slli s3, s0, 41 |
| ; RV64IM-NEXT: and t2, t6, s3 |
| ; RV64IM-NEXT: mul t2, t5, t2 |
| ; RV64IM-NEXT: xor a1, a7, t2 |
| ; RV64IM-NEXT: sd a1, 336(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli s1, s0, 48 |
| ; RV64IM-NEXT: and a7, t6, s1 |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: slli s4, s0, 49 |
| ; RV64IM-NEXT: and t2, t6, s4 |
| ; RV64IM-NEXT: mul t2, t5, t2 |
| ; RV64IM-NEXT: xor a1, a7, t2 |
| ; RV64IM-NEXT: sd a1, 744(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli a7, s0, 56 |
| ; RV64IM-NEXT: and t2, t6, a7 |
| ; RV64IM-NEXT: mul t2, t5, t2 |
| ; RV64IM-NEXT: slli t4, s0, 57 |
| ; RV64IM-NEXT: and t3, t6, t4 |
| ; RV64IM-NEXT: mul t3, t5, t3 |
| ; RV64IM-NEXT: xor a1, t2, t3 |
| ; RV64IM-NEXT: sd a1, 728(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t2, a5, s8 |
| ; RV64IM-NEXT: and t3, a5, s2 |
| ; RV64IM-NEXT: mul t2, a0, t2 |
| ; RV64IM-NEXT: mul t3, a0, t3 |
| ; RV64IM-NEXT: xor a1, t2, t3 |
| ; RV64IM-NEXT: sd a1, 768(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t0, a5, t0 |
| ; RV64IM-NEXT: and t1, a5, t1 |
| ; RV64IM-NEXT: mul t0, a0, t0 |
| ; RV64IM-NEXT: mul t1, a0, t1 |
| ; RV64IM-NEXT: xor a1, t0, t1 |
| ; RV64IM-NEXT: sd a1, 760(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a1, a5, s7 |
| ; RV64IM-NEXT: and a6, a5, a6 |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: mul a6, a0, a6 |
| ; RV64IM-NEXT: xor a1, a1, a6 |
| ; RV64IM-NEXT: sd a1, 752(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a3, a5, a3 |
| ; RV64IM-NEXT: and a4, a5, a4 |
| ; RV64IM-NEXT: mul a3, a0, a3 |
| ; RV64IM-NEXT: mul a4, a0, a4 |
| ; RV64IM-NEXT: xor a3, a3, a4 |
| ; RV64IM-NEXT: sd a3, 736(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a2, a5, a2 |
| ; RV64IM-NEXT: and a3, a5, s3 |
| ; RV64IM-NEXT: mul a2, a0, a2 |
| ; RV64IM-NEXT: mul a3, a0, a3 |
| ; RV64IM-NEXT: xor a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 720(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s1, a5, s1 |
| ; RV64IM-NEXT: and a2, a5, s4 |
| ; RV64IM-NEXT: mul a3, a0, s1 |
| ; RV64IM-NEXT: mul a2, a0, a2 |
| ; RV64IM-NEXT: xor a2, a3, a2 |
| ; RV64IM-NEXT: sd a2, 712(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a2, a5, a7 |
| ; RV64IM-NEXT: and a3, a5, t4 |
| ; RV64IM-NEXT: mul a2, a0, a2 |
| ; RV64IM-NEXT: mul a3, a0, a3 |
| ; RV64IM-NEXT: xor a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 704(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 2 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 1 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 696(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 4 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 2 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 680(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 8 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 3 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 672(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 16 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 4 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 664(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 32 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 5 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 648(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 64 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 6 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 688(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 128 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 7 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 632(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 256 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 8 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 616(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 512 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, t5, 9 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 656(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli t3, s0, 31 |
| ; RV64IM-NEXT: sd t3, 240(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli s10, s0, 32 |
| ; RV64IM-NEXT: sd s10, 232(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli a7, s0, 35 |
| ; RV64IM-NEXT: sd a7, 224(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli s3, s0, 36 |
| ; RV64IM-NEXT: slli s4, s0, 37 |
| ; RV64IM-NEXT: slli s5, s0, 38 |
| ; RV64IM-NEXT: slli s6, s0, 39 |
| ; RV64IM-NEXT: slli s7, s0, 42 |
| ; RV64IM-NEXT: slli s8, s0, 43 |
| ; RV64IM-NEXT: slli a1, s0, 44 |
| ; RV64IM-NEXT: sd a1, 216(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli a3, s0, 45 |
| ; RV64IM-NEXT: slli a4, s0, 46 |
| ; RV64IM-NEXT: sd a4, 208(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli t0, s0, 47 |
| ; RV64IM-NEXT: sd t0, 200(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli t1, s0, 50 |
| ; RV64IM-NEXT: sd t1, 192(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli t4, s0, 51 |
| ; RV64IM-NEXT: sd t4, 184(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli a2, s0, 52 |
| ; RV64IM-NEXT: sd a2, 136(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli a2, s0, 53 |
| ; RV64IM-NEXT: sd a2, 144(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli s1, s0, 54 |
| ; RV64IM-NEXT: sd s1, 168(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli s2, s0, 55 |
| ; RV64IM-NEXT: sd s2, 152(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli a2, s0, 58 |
| ; RV64IM-NEXT: sd a2, 832(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli s9, s0, 59 |
| ; RV64IM-NEXT: sd s9, 160(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli s11, s0, 60 |
| ; RV64IM-NEXT: sd s11, 176(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli ra, s0, 61 |
| ; RV64IM-NEXT: slli s0, s0, 62 |
| ; RV64IM-NEXT: sd s0, 848(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: li a2, -1 |
| ; RV64IM-NEXT: slli a2, a2, 63 |
| ; RV64IM-NEXT: sd a2, 840(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, t6, 1 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: sd a2, 384(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 2 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 312(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 4 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 528(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 8 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 576(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 16 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 608(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 32 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 640(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 256 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 304(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 512 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 480(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 1024 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 544(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 2048 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: sd a2, 584(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a2, 16384 |
| ; RV64IM-NEXT: and a2, t6, a2 |
| ; RV64IM-NEXT: mul a2, t5, a2 |
| ; RV64IM-NEXT: lui a6, 32768 |
| ; RV64IM-NEXT: and t2, t6, a6 |
| ; RV64IM-NEXT: mul a6, t5, t2 |
| ; RV64IM-NEXT: sd a6, 448(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a6, 65536 |
| ; RV64IM-NEXT: and t2, t6, a6 |
| ; RV64IM-NEXT: mul a6, t5, t2 |
| ; RV64IM-NEXT: sd a6, 504(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a6, 131072 |
| ; RV64IM-NEXT: and t2, t6, a6 |
| ; RV64IM-NEXT: mul a6, t5, t2 |
| ; RV64IM-NEXT: sd a6, 568(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a6, 262144 |
| ; RV64IM-NEXT: and t2, t6, a6 |
| ; RV64IM-NEXT: mul a6, t5, t2 |
| ; RV64IM-NEXT: sd a6, 592(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t2, t6, t3 |
| ; RV64IM-NEXT: mul a6, t5, t2 |
| ; RV64IM-NEXT: sd a6, 600(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t2, t6, s10 |
| ; RV64IM-NEXT: mul a6, t5, t2 |
| ; RV64IM-NEXT: sd a6, 624(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t2, t6, a7 |
| ; RV64IM-NEXT: mul t2, t5, t2 |
| ; RV64IM-NEXT: and t3, t6, s3 |
| ; RV64IM-NEXT: mul a6, t5, t3 |
| ; RV64IM-NEXT: sd a6, 416(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t3, t6, s4 |
| ; RV64IM-NEXT: mul a6, t5, t3 |
| ; RV64IM-NEXT: sd a6, 464(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t3, t6, s5 |
| ; RV64IM-NEXT: mul a6, t5, t3 |
| ; RV64IM-NEXT: sd a6, 512(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t3, t6, s6 |
| ; RV64IM-NEXT: mul a6, t5, t3 |
| ; RV64IM-NEXT: sd a6, 560(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and t3, t6, s7 |
| ; RV64IM-NEXT: mul t3, t5, t3 |
| ; RV64IM-NEXT: and s0, t6, s8 |
| ; RV64IM-NEXT: mul a6, t5, s0 |
| ; RV64IM-NEXT: sd a6, 400(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s0, t6, a1 |
| ; RV64IM-NEXT: mul a6, t5, s0 |
| ; RV64IM-NEXT: sd a6, 432(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s0, t6, a3 |
| ; RV64IM-NEXT: mv s10, a3 |
| ; RV64IM-NEXT: mul a6, t5, s0 |
| ; RV64IM-NEXT: sd a6, 472(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s0, t6, a4 |
| ; RV64IM-NEXT: mul a6, t5, s0 |
| ; RV64IM-NEXT: sd a6, 536(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s0, t6, t0 |
| ; RV64IM-NEXT: mul a6, t5, s0 |
| ; RV64IM-NEXT: sd a6, 552(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s0, t6, t1 |
| ; RV64IM-NEXT: mul s0, t5, s0 |
| ; RV64IM-NEXT: and a6, t6, t4 |
| ; RV64IM-NEXT: mul a6, t5, a6 |
| ; RV64IM-NEXT: sd a6, 368(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld t1, 136(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a6, t6, t1 |
| ; RV64IM-NEXT: mul a6, t5, a6 |
| ; RV64IM-NEXT: sd a6, 408(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld t0, 144(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a6, t6, t0 |
| ; RV64IM-NEXT: mul a6, t5, a6 |
| ; RV64IM-NEXT: sd a6, 440(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a6, t6, s1 |
| ; RV64IM-NEXT: mul a6, t5, a6 |
| ; RV64IM-NEXT: sd a6, 496(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a6, t6, s2 |
| ; RV64IM-NEXT: mul a6, t5, a6 |
| ; RV64IM-NEXT: sd a6, 520(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 832(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a6, t6, a1 |
| ; RV64IM-NEXT: mul a6, t5, a6 |
| ; RV64IM-NEXT: and a7, t6, s9 |
| ; RV64IM-NEXT: mul a1, t5, a7 |
| ; RV64IM-NEXT: sd a1, 328(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a7, t6, s11 |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: sd a7, 392(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a7, t6, ra |
| ; RV64IM-NEXT: mv s9, ra |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: sd a7, 424(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 848(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a7, t6, a1 |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: sd a7, 456(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 840(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a7, t6, a1 |
| ; RV64IM-NEXT: mul a7, t5, a7 |
| ; RV64IM-NEXT: sd a7, 488(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a4, 384(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: addi a4, a4, -1 |
| ; RV64IM-NEXT: and a1, a4, t5 |
| ; RV64IM-NEXT: sd a1, 320(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: slli t5, t5, 10 |
| ; RV64IM-NEXT: andi a4, t6, 1024 |
| ; RV64IM-NEXT: seqz a4, a4 |
| ; RV64IM-NEXT: addi a4, a4, -1 |
| ; RV64IM-NEXT: and a4, a4, t5 |
| ; RV64IM-NEXT: sd a4, 384(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a4, 360(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 312(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a4, a1 |
| ; RV64IM-NEXT: sd a1, 360(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 352(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a3, 304(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a1, a3 |
| ; RV64IM-NEXT: sd a1, 352(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 376(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a1, a2 |
| ; RV64IM-NEXT: sd a1, 376(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 344(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a1, t2 |
| ; RV64IM-NEXT: sd a1, 344(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 336(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a1, t3 |
| ; RV64IM-NEXT: sd a1, 336(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 744(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a1, s0 |
| ; RV64IM-NEXT: sd a1, 744(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 728(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a1, a6 |
| ; RV64IM-NEXT: sd a1, 728(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 2 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 1 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 312(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 4 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 2 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 296(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 8 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 3 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 288(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 16 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 4 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 280(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 32 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 5 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 264(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 64 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 6 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 304(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 128 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 7 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 256(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 256 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 8 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 248(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: andi a2, a5, 512 |
| ; RV64IM-NEXT: seqz a2, a2 |
| ; RV64IM-NEXT: addi a2, a2, -1 |
| ; RV64IM-NEXT: slli a3, a0, 9 |
| ; RV64IM-NEXT: and a2, a2, a3 |
| ; RV64IM-NEXT: sd a2, 272(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a1, 2 |
| ; RV64IM-NEXT: and a7, a5, a1 |
| ; RV64IM-NEXT: lui a1, 4 |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 128(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a1, 8 |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 120(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a1, 16 |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 112(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a1, 32 |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 104(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a3, 256 |
| ; RV64IM-NEXT: and a3, a5, a3 |
| ; RV64IM-NEXT: lui s1, 512 |
| ; RV64IM-NEXT: and s1, a5, s1 |
| ; RV64IM-NEXT: lui a1, 1024 |
| ; RV64IM-NEXT: and t6, a5, a1 |
| ; RV64IM-NEXT: lui a2, 2048 |
| ; RV64IM-NEXT: and a2, a5, a2 |
| ; RV64IM-NEXT: lui a1, 16384 |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 96(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a1, 32768 |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 88(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a1, 65536 |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 72(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a1, 131072 |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 56(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: lui a1, 262144 |
| ; RV64IM-NEXT: and t4, a5, a1 |
| ; RV64IM-NEXT: ld a1, 240(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and ra, a5, a1 |
| ; RV64IM-NEXT: ld s0, 232(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and s0, a5, s0 |
| ; RV64IM-NEXT: ld a1, 224(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and s2, a5, a1 |
| ; RV64IM-NEXT: and s3, a5, s3 |
| ; RV64IM-NEXT: and s4, a5, s4 |
| ; RV64IM-NEXT: and s5, a5, s5 |
| ; RV64IM-NEXT: and s6, a5, s6 |
| ; RV64IM-NEXT: and s7, a5, s7 |
| ; RV64IM-NEXT: and s8, a5, s8 |
| ; RV64IM-NEXT: ld a1, 216(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 232(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and s10, a5, s10 |
| ; RV64IM-NEXT: ld a1, 208(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and s11, a5, a1 |
| ; RV64IM-NEXT: ld a1, 200(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 208(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 192(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 40(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 184(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 32(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a1, a5, t1 |
| ; RV64IM-NEXT: sd a1, 24(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: and a1, a5, t0 |
| ; RV64IM-NEXT: sd a1, 16(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 168(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 168(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 152(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 152(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 832(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a5, a1 |
| ; RV64IM-NEXT: sd a1, 8(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 160(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and t3, a5, a1 |
| ; RV64IM-NEXT: ld a1, 176(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and t0, a5, a1 |
| ; RV64IM-NEXT: and t5, a5, s9 |
| ; RV64IM-NEXT: ld a1, 848(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and t2, a5, a1 |
| ; RV64IM-NEXT: ld a1, 840(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a6, a5, a1 |
| ; RV64IM-NEXT: andi a1, a5, 1 |
| ; RV64IM-NEXT: seqz a4, a1 |
| ; RV64IM-NEXT: mul t1, a0, a7 |
| ; RV64IM-NEXT: ld a1, 128(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 80(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 120(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 144(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 112(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 224(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 104(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 840(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a7, a0, a3 |
| ; RV64IM-NEXT: mul a1, a0, s1 |
| ; RV64IM-NEXT: sd a1, 64(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, t6 |
| ; RV64IM-NEXT: sd a1, 128(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, a2 |
| ; RV64IM-NEXT: sd a1, 200(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 96(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a3, a0, a1 |
| ; RV64IM-NEXT: ld a1, 88(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 48(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 72(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 112(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 56(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 184(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, t4 |
| ; RV64IM-NEXT: sd a1, 240(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, ra |
| ; RV64IM-NEXT: sd a1, 832(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, s0 |
| ; RV64IM-NEXT: sd a1, 848(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul t4, a0, s2 |
| ; RV64IM-NEXT: mul ra, a0, s3 |
| ; RV64IM-NEXT: mul a1, a0, s4 |
| ; RV64IM-NEXT: sd a1, 96(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, s5 |
| ; RV64IM-NEXT: sd a1, 160(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, s6 |
| ; RV64IM-NEXT: sd a1, 216(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul s7, a0, s7 |
| ; RV64IM-NEXT: mul s9, a0, s8 |
| ; RV64IM-NEXT: ld a1, 232(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 88(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, s10 |
| ; RV64IM-NEXT: sd a1, 136(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a1, a0, s11 |
| ; RV64IM-NEXT: sd a1, 192(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 208(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 232(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 40(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a2, a0, a1 |
| ; RV64IM-NEXT: ld a1, 32(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul s8, a0, a1 |
| ; RV64IM-NEXT: ld a1, 24(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 72(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 16(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 120(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 168(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 168(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 152(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: sd a1, 208(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a1, 8(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: mul a1, a0, a1 |
| ; RV64IM-NEXT: mul s6, a0, t3 |
| ; RV64IM-NEXT: mul s10, a0, t0 |
| ; RV64IM-NEXT: mul t0, a0, t5 |
| ; RV64IM-NEXT: sd t0, 104(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul t0, a0, t2 |
| ; RV64IM-NEXT: sd t0, 152(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: mul a6, a0, a6 |
| ; RV64IM-NEXT: sd a6, 176(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: addi a4, a4, -1 |
| ; RV64IM-NEXT: and s2, a4, a0 |
| ; RV64IM-NEXT: slli a0, a0, 10 |
| ; RV64IM-NEXT: andi a5, a5, 1024 |
| ; RV64IM-NEXT: seqz a5, a5 |
| ; RV64IM-NEXT: addi a5, a5, -1 |
| ; RV64IM-NEXT: and a0, a5, a0 |
| ; RV64IM-NEXT: sd a0, 56(sp) # 8-byte Folded Spill |
| ; RV64IM-NEXT: ld a0, 768(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s4, a0, t1 |
| ; RV64IM-NEXT: ld a0, 760(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t6, a0, a7 |
| ; RV64IM-NEXT: ld s0, 752(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s0, s0, a3 |
| ; RV64IM-NEXT: ld a0, 736(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s1, a0, t4 |
| ; RV64IM-NEXT: ld a0, 720(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s5, a0, s7 |
| ; RV64IM-NEXT: ld a0, 712(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t5, a0, a2 |
| ; RV64IM-NEXT: ld a0, 704(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s3, a0, a1 |
| ; RV64IM-NEXT: ld a0, 696(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 320(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s7, a1, a0 |
| ; RV64IM-NEXT: ld a0, 680(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 672(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t2, a0, a1 |
| ; RV64IM-NEXT: ld a0, 664(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 648(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t3, a0, a1 |
| ; RV64IM-NEXT: ld a0, 632(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 616(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t4, a0, a1 |
| ; RV64IM-NEXT: ld a0, 528(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a3, 360(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a3, a3, a0 |
| ; RV64IM-NEXT: ld a0, 480(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a4, 352(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a4, a4, a0 |
| ; RV64IM-NEXT: ld a0, 448(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a5, 376(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a5, a5, a0 |
| ; RV64IM-NEXT: ld a0, 416(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 344(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a6, a1, a0 |
| ; RV64IM-NEXT: ld a0, 400(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 336(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a7, a1, a0 |
| ; RV64IM-NEXT: ld a0, 368(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 744(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t0, a1, a0 |
| ; RV64IM-NEXT: ld a0, 328(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 728(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t1, a1, a0 |
| ; RV64IM-NEXT: ld a0, 312(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s2, s2, a0 |
| ; RV64IM-NEXT: ld a0, 296(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a1, 288(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a0, a0, a1 |
| ; RV64IM-NEXT: ld a1, 280(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld a2, 264(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a1, a2 |
| ; RV64IM-NEXT: ld a2, 256(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s11, 248(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a2, a2, s11 |
| ; RV64IM-NEXT: ld s11, 80(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s4, s4, s11 |
| ; RV64IM-NEXT: ld s11, 64(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t6, t6, s11 |
| ; RV64IM-NEXT: ld s11, 48(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s0, s0, s11 |
| ; RV64IM-NEXT: xor s1, s1, ra |
| ; RV64IM-NEXT: xor s5, s5, s9 |
| ; RV64IM-NEXT: xor t5, t5, s8 |
| ; RV64IM-NEXT: xor s3, s3, s6 |
| ; RV64IM-NEXT: xor t2, s7, t2 |
| ; RV64IM-NEXT: ld s6, 688(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t3, t3, s6 |
| ; RV64IM-NEXT: ld s6, 656(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t4, t4, s6 |
| ; RV64IM-NEXT: ld s6, 576(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a3, a3, s6 |
| ; RV64IM-NEXT: ld s6, 544(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a4, a4, s6 |
| ; RV64IM-NEXT: ld s6, 504(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a5, a5, s6 |
| ; RV64IM-NEXT: ld s6, 464(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a6, a6, s6 |
| ; RV64IM-NEXT: ld s6, 432(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a7, a7, s6 |
| ; RV64IM-NEXT: ld s6, 408(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t0, t0, s6 |
| ; RV64IM-NEXT: ld s6, 392(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t1, t1, s6 |
| ; RV64IM-NEXT: xor a0, s2, a0 |
| ; RV64IM-NEXT: ld s2, 304(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a1, s2 |
| ; RV64IM-NEXT: ld s2, 272(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a2, a2, s2 |
| ; RV64IM-NEXT: ld s2, 144(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s2, s4, s2 |
| ; RV64IM-NEXT: ld s4, 128(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t6, t6, s4 |
| ; RV64IM-NEXT: ld s4, 112(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s0, s0, s4 |
| ; RV64IM-NEXT: ld s4, 96(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s1, s1, s4 |
| ; RV64IM-NEXT: ld s4, 88(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s4, s5, s4 |
| ; RV64IM-NEXT: ld s5, 72(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t5, t5, s5 |
| ; RV64IM-NEXT: xor s3, s3, s10 |
| ; RV64IM-NEXT: xor t2, t2, t3 |
| ; RV64IM-NEXT: ld t3, 384(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t3, t4, t3 |
| ; RV64IM-NEXT: ld t4, 608(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a3, a3, t4 |
| ; RV64IM-NEXT: ld t4, 584(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a4, a4, t4 |
| ; RV64IM-NEXT: ld t4, 568(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a5, a5, t4 |
| ; RV64IM-NEXT: ld t4, 512(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a6, a6, t4 |
| ; RV64IM-NEXT: ld t4, 472(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a7, a7, t4 |
| ; RV64IM-NEXT: ld t4, 440(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t0, t0, t4 |
| ; RV64IM-NEXT: ld t4, 424(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t1, t1, t4 |
| ; RV64IM-NEXT: xor a0, a0, a1 |
| ; RV64IM-NEXT: ld a1, 56(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a2, a1 |
| ; RV64IM-NEXT: ld a2, 224(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a2, s2, a2 |
| ; RV64IM-NEXT: ld t4, 200(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t4, t6, t4 |
| ; RV64IM-NEXT: ld t6, 184(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t6, s0, t6 |
| ; RV64IM-NEXT: ld s0, 160(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s0, s1, s0 |
| ; RV64IM-NEXT: ld s1, 136(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s1, s4, s1 |
| ; RV64IM-NEXT: ld s2, 120(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t5, t5, s2 |
| ; RV64IM-NEXT: ld s2, 104(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s2, s3, s2 |
| ; RV64IM-NEXT: xor t2, t2, t3 |
| ; RV64IM-NEXT: ld t3, 640(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a3, a3, t3 |
| ; RV64IM-NEXT: ld t3, 592(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a5, a5, t3 |
| ; RV64IM-NEXT: ld t3, 560(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a6, a6, t3 |
| ; RV64IM-NEXT: ld t3, 536(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a7, a7, t3 |
| ; RV64IM-NEXT: ld t3, 496(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t0, t0, t3 |
| ; RV64IM-NEXT: ld t3, 456(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t1, t1, t3 |
| ; RV64IM-NEXT: xor a0, a0, a1 |
| ; RV64IM-NEXT: ld a1, 840(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a1, a2, a1 |
| ; RV64IM-NEXT: ld a2, 240(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a2, t6, a2 |
| ; RV64IM-NEXT: ld t3, 216(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t3, s0, t3 |
| ; RV64IM-NEXT: ld t6, 192(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t6, s1, t6 |
| ; RV64IM-NEXT: ld s0, 168(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t5, t5, s0 |
| ; RV64IM-NEXT: ld s0, 152(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s0, s2, s0 |
| ; RV64IM-NEXT: ld s1, 600(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a5, a5, s1 |
| ; RV64IM-NEXT: ld s1, 552(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a7, a7, s1 |
| ; RV64IM-NEXT: ld s1, 520(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t0, t0, s1 |
| ; RV64IM-NEXT: ld s1, 488(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t1, t1, s1 |
| ; RV64IM-NEXT: ld s1, 832(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a2, a2, s1 |
| ; RV64IM-NEXT: ld s1, 232(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t6, t6, s1 |
| ; RV64IM-NEXT: ld s1, 208(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor t5, t5, s1 |
| ; RV64IM-NEXT: ld s1, 176(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor s0, s0, s1 |
| ; RV64IM-NEXT: xor a3, t2, a3 |
| ; RV64IM-NEXT: xor a3, a3, a4 |
| ; RV64IM-NEXT: ld a4, 624(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a4, a5, a4 |
| ; RV64IM-NEXT: xor a1, a0, a1 |
| ; RV64IM-NEXT: xor a1, a1, t4 |
| ; RV64IM-NEXT: ld a5, 848(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: xor a2, a2, a5 |
| ; RV64IM-NEXT: xor a4, a3, a4 |
| ; RV64IM-NEXT: xor a4, a4, a6 |
| ; RV64IM-NEXT: xor a2, a1, a2 |
| ; RV64IM-NEXT: xor a2, a2, t3 |
| ; RV64IM-NEXT: slli t2, t2, 56 |
| ; RV64IM-NEXT: slli a0, a0, 56 |
| ; RV64IM-NEXT: ld t4, 784(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a3, a3, t4 |
| ; RV64IM-NEXT: and a1, a1, t4 |
| ; RV64IM-NEXT: slli a3, a3, 40 |
| ; RV64IM-NEXT: slli a1, a1, 40 |
| ; RV64IM-NEXT: or a3, t2, a3 |
| ; RV64IM-NEXT: srli a5, a4, 8 |
| ; RV64IM-NEXT: or a0, a0, a1 |
| ; RV64IM-NEXT: srli a1, a2, 8 |
| ; RV64IM-NEXT: ld a6, 808(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a5, a5, a6 |
| ; RV64IM-NEXT: and a1, a1, a6 |
| ; RV64IM-NEXT: xor a6, a4, a7 |
| ; RV64IM-NEXT: lui t3, 4080 |
| ; RV64IM-NEXT: and a4, a4, t3 |
| ; RV64IM-NEXT: xor a7, a2, t6 |
| ; RV64IM-NEXT: and a2, a2, t3 |
| ; RV64IM-NEXT: xor t0, a6, t0 |
| ; RV64IM-NEXT: srli a6, a6, 24 |
| ; RV64IM-NEXT: xor t2, a7, t5 |
| ; RV64IM-NEXT: srli a7, a7, 24 |
| ; RV64IM-NEXT: and a6, a6, t3 |
| ; RV64IM-NEXT: and a7, a7, t3 |
| ; RV64IM-NEXT: or a5, a5, a6 |
| ; RV64IM-NEXT: srli a6, t0, 40 |
| ; RV64IM-NEXT: or a1, a1, a7 |
| ; RV64IM-NEXT: srli a7, t2, 40 |
| ; RV64IM-NEXT: and a6, a6, t4 |
| ; RV64IM-NEXT: and a7, a7, t4 |
| ; RV64IM-NEXT: slli a4, a4, 24 |
| ; RV64IM-NEXT: xor t1, t0, t1 |
| ; RV64IM-NEXT: srliw t0, t0, 24 |
| ; RV64IM-NEXT: slli t0, t0, 32 |
| ; RV64IM-NEXT: or a4, a4, t0 |
| ; RV64IM-NEXT: srli t0, t1, 56 |
| ; RV64IM-NEXT: or a6, a6, t0 |
| ; RV64IM-NEXT: slli a2, a2, 24 |
| ; RV64IM-NEXT: xor t0, t2, s0 |
| ; RV64IM-NEXT: srliw t1, t2, 24 |
| ; RV64IM-NEXT: slli t1, t1, 32 |
| ; RV64IM-NEXT: or a2, a2, t1 |
| ; RV64IM-NEXT: srli t0, t0, 56 |
| ; RV64IM-NEXT: or a7, a7, t0 |
| ; RV64IM-NEXT: or a3, a3, a4 |
| ; RV64IM-NEXT: or a4, a5, a6 |
| ; RV64IM-NEXT: or a0, a0, a2 |
| ; RV64IM-NEXT: or a1, a1, a7 |
| ; RV64IM-NEXT: or a3, a3, a4 |
| ; RV64IM-NEXT: or a0, a0, a1 |
| ; RV64IM-NEXT: srli a1, a3, 4 |
| ; RV64IM-NEXT: ld a4, 800(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a2, a3, a4 |
| ; RV64IM-NEXT: srli a3, a0, 4 |
| ; RV64IM-NEXT: and a0, a0, a4 |
| ; RV64IM-NEXT: and a1, a1, a4 |
| ; RV64IM-NEXT: and a3, a3, a4 |
| ; RV64IM-NEXT: slli a2, a2, 4 |
| ; RV64IM-NEXT: slli a0, a0, 4 |
| ; RV64IM-NEXT: or a1, a1, a2 |
| ; RV64IM-NEXT: or a0, a3, a0 |
| ; RV64IM-NEXT: srli a2, a1, 2 |
| ; RV64IM-NEXT: ld a4, 792(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a1, a4 |
| ; RV64IM-NEXT: srli a3, a0, 2 |
| ; RV64IM-NEXT: and a0, a0, a4 |
| ; RV64IM-NEXT: and a2, a2, a4 |
| ; RV64IM-NEXT: and a3, a3, a4 |
| ; RV64IM-NEXT: slli a1, a1, 2 |
| ; RV64IM-NEXT: slli a0, a0, 2 |
| ; RV64IM-NEXT: or a1, a2, a1 |
| ; RV64IM-NEXT: or a0, a3, a0 |
| ; RV64IM-NEXT: srli a2, a1, 1 |
| ; RV64IM-NEXT: ld a4, 776(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: and a1, a1, a4 |
| ; RV64IM-NEXT: srli a3, a0, 1 |
| ; RV64IM-NEXT: and a0, a0, a4 |
| ; RV64IM-NEXT: and a2, a2, a4 |
| ; RV64IM-NEXT: and a3, a3, a4 |
| ; RV64IM-NEXT: slli a1, a1, 1 |
| ; RV64IM-NEXT: or a1, a2, a1 |
| ; RV64IM-NEXT: slli a0, a0, 1 |
| ; RV64IM-NEXT: or a0, a3, a0 |
| ; RV64IM-NEXT: ld a2, 816(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: sd a1, 0(a2) |
| ; RV64IM-NEXT: sd a0, 8(a2) |
| ; RV64IM-NEXT: ld a2, 824(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: sd a1, 0(a2) |
| ; RV64IM-NEXT: sd a0, 8(a2) |
| ; RV64IM-NEXT: ld ra, 952(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s0, 944(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s1, 936(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s2, 928(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s3, 920(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s4, 912(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s5, 904(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s6, 896(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s7, 888(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s8, 880(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s9, 872(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s10, 864(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: ld s11, 856(sp) # 8-byte Folded Reload |
| ; RV64IM-NEXT: addi sp, sp, 960 |
| ; RV64IM-NEXT: ret |
| ; |
| ; RV32IMZBS-LABEL: commutative_clmulr_v2i64: |
| ; RV32IMZBS: # %bb.0: |
| ; RV32IMZBS-NEXT: addi sp, sp, -800 |
| ; RV32IMZBS-NEXT: sw ra, 796(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s0, 792(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s1, 788(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s2, 784(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s3, 780(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s4, 776(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s5, 772(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s6, 768(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s7, 764(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s8, 760(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s9, 756(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s10, 752(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw s11, 748(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw a3, 736(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw a2, 732(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s1, 0(a0) |
| ; RV32IMZBS-NEXT: lw a3, 4(a0) |
| ; RV32IMZBS-NEXT: lw a7, 8(a0) |
| ; RV32IMZBS-NEXT: lw t1, 12(a0) |
| ; RV32IMZBS-NEXT: lw s7, 0(a1) |
| ; RV32IMZBS-NEXT: lw a5, 4(a1) |
| ; RV32IMZBS-NEXT: lw t0, 8(a1) |
| ; RV32IMZBS-NEXT: lw t2, 12(a1) |
| ; RV32IMZBS-NEXT: lui a0, 16 |
| ; RV32IMZBS-NEXT: lui a1, 61681 |
| ; RV32IMZBS-NEXT: lui a2, 209715 |
| ; RV32IMZBS-NEXT: lui a4, 349525 |
| ; RV32IMZBS-NEXT: addi ra, a0, -256 |
| ; RV32IMZBS-NEXT: addi s11, a1, -241 |
| ; RV32IMZBS-NEXT: addi s10, a2, 819 |
| ; RV32IMZBS-NEXT: addi s5, a4, 1365 |
| ; RV32IMZBS-NEXT: srli s0, a5, 8 |
| ; RV32IMZBS-NEXT: srli a2, a5, 24 |
| ; RV32IMZBS-NEXT: and a4, a5, ra |
| ; RV32IMZBS-NEXT: slli a5, a5, 24 |
| ; RV32IMZBS-NEXT: srli t3, a3, 8 |
| ; RV32IMZBS-NEXT: srli t4, a3, 24 |
| ; RV32IMZBS-NEXT: and a0, a3, ra |
| ; RV32IMZBS-NEXT: slli a1, a3, 24 |
| ; RV32IMZBS-NEXT: srli s8, s7, 8 |
| ; RV32IMZBS-NEXT: srli s9, s7, 24 |
| ; RV32IMZBS-NEXT: and s6, s7, ra |
| ; RV32IMZBS-NEXT: slli s7, s7, 24 |
| ; RV32IMZBS-NEXT: srli a3, s1, 8 |
| ; RV32IMZBS-NEXT: srli t5, s1, 24 |
| ; RV32IMZBS-NEXT: and a6, s1, ra |
| ; RV32IMZBS-NEXT: slli s1, s1, 24 |
| ; RV32IMZBS-NEXT: srli s3, t2, 8 |
| ; RV32IMZBS-NEXT: and t6, s0, ra |
| ; RV32IMZBS-NEXT: or a2, t6, a2 |
| ; RV32IMZBS-NEXT: srli s4, t2, 24 |
| ; RV32IMZBS-NEXT: slli a4, a4, 8 |
| ; RV32IMZBS-NEXT: or a4, a5, a4 |
| ; RV32IMZBS-NEXT: and a5, t2, ra |
| ; RV32IMZBS-NEXT: slli s0, t2, 24 |
| ; RV32IMZBS-NEXT: and t2, t3, ra |
| ; RV32IMZBS-NEXT: or t2, t2, t4 |
| ; RV32IMZBS-NEXT: srli t3, t1, 8 |
| ; RV32IMZBS-NEXT: slli a0, a0, 8 |
| ; RV32IMZBS-NEXT: or a0, a1, a0 |
| ; RV32IMZBS-NEXT: srli s2, t1, 24 |
| ; RV32IMZBS-NEXT: and a1, s8, ra |
| ; RV32IMZBS-NEXT: or a1, a1, s9 |
| ; RV32IMZBS-NEXT: and t4, t1, ra |
| ; RV32IMZBS-NEXT: slli t6, t1, 24 |
| ; RV32IMZBS-NEXT: slli s6, s6, 8 |
| ; RV32IMZBS-NEXT: or t1, s7, s6 |
| ; RV32IMZBS-NEXT: srli s6, t0, 8 |
| ; RV32IMZBS-NEXT: and a3, a3, ra |
| ; RV32IMZBS-NEXT: or a3, a3, t5 |
| ; RV32IMZBS-NEXT: srli t5, t0, 24 |
| ; RV32IMZBS-NEXT: slli a6, a6, 8 |
| ; RV32IMZBS-NEXT: or a6, s1, a6 |
| ; RV32IMZBS-NEXT: and s7, t0, ra |
| ; RV32IMZBS-NEXT: slli s1, t0, 24 |
| ; RV32IMZBS-NEXT: and t0, s3, ra |
| ; RV32IMZBS-NEXT: or t0, t0, s4 |
| ; RV32IMZBS-NEXT: srli s3, a7, 8 |
| ; RV32IMZBS-NEXT: slli a5, a5, 8 |
| ; RV32IMZBS-NEXT: or a5, s0, a5 |
| ; RV32IMZBS-NEXT: srli s0, a7, 24 |
| ; RV32IMZBS-NEXT: and t3, t3, ra |
| ; RV32IMZBS-NEXT: or t3, t3, s2 |
| ; RV32IMZBS-NEXT: and s2, a7, ra |
| ; RV32IMZBS-NEXT: slli a7, a7, 24 |
| ; RV32IMZBS-NEXT: slli t4, t4, 8 |
| ; RV32IMZBS-NEXT: and s4, s6, ra |
| ; RV32IMZBS-NEXT: slli s7, s7, 8 |
| ; RV32IMZBS-NEXT: and s3, s3, ra |
| ; RV32IMZBS-NEXT: slli s2, s2, 8 |
| ; RV32IMZBS-NEXT: or t4, t6, t4 |
| ; RV32IMZBS-NEXT: or t5, s4, t5 |
| ; RV32IMZBS-NEXT: or t6, s1, s7 |
| ; RV32IMZBS-NEXT: or s0, s3, s0 |
| ; RV32IMZBS-NEXT: or a7, a7, s2 |
| ; RV32IMZBS-NEXT: or a2, a4, a2 |
| ; RV32IMZBS-NEXT: or a0, a0, t2 |
| ; RV32IMZBS-NEXT: or a1, t1, a1 |
| ; RV32IMZBS-NEXT: or a3, a6, a3 |
| ; RV32IMZBS-NEXT: or a4, a5, t0 |
| ; RV32IMZBS-NEXT: or a5, t4, t3 |
| ; RV32IMZBS-NEXT: or a6, t6, t5 |
| ; RV32IMZBS-NEXT: or a7, a7, s0 |
| ; RV32IMZBS-NEXT: srli t0, a2, 4 |
| ; RV32IMZBS-NEXT: sw s11, 744(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, s11 |
| ; RV32IMZBS-NEXT: srli t1, a0, 4 |
| ; RV32IMZBS-NEXT: and a0, a0, s11 |
| ; RV32IMZBS-NEXT: srli t2, a1, 4 |
| ; RV32IMZBS-NEXT: and a1, a1, s11 |
| ; RV32IMZBS-NEXT: srli t3, a3, 4 |
| ; RV32IMZBS-NEXT: and a3, a3, s11 |
| ; RV32IMZBS-NEXT: srli t4, a4, 4 |
| ; RV32IMZBS-NEXT: and a4, a4, s11 |
| ; RV32IMZBS-NEXT: srli t5, a5, 4 |
| ; RV32IMZBS-NEXT: and a5, a5, s11 |
| ; RV32IMZBS-NEXT: srli t6, a6, 4 |
| ; RV32IMZBS-NEXT: and a6, a6, s11 |
| ; RV32IMZBS-NEXT: srli s0, a7, 4 |
| ; RV32IMZBS-NEXT: and a7, a7, s11 |
| ; RV32IMZBS-NEXT: and t0, t0, s11 |
| ; RV32IMZBS-NEXT: slli a2, a2, 4 |
| ; RV32IMZBS-NEXT: and t1, t1, s11 |
| ; RV32IMZBS-NEXT: slli a0, a0, 4 |
| ; RV32IMZBS-NEXT: and t2, t2, s11 |
| ; RV32IMZBS-NEXT: slli a1, a1, 4 |
| ; RV32IMZBS-NEXT: and t3, t3, s11 |
| ; RV32IMZBS-NEXT: slli a3, a3, 4 |
| ; RV32IMZBS-NEXT: and t4, t4, s11 |
| ; RV32IMZBS-NEXT: slli a4, a4, 4 |
| ; RV32IMZBS-NEXT: and t5, t5, s11 |
| ; RV32IMZBS-NEXT: slli a5, a5, 4 |
| ; RV32IMZBS-NEXT: and t6, t6, s11 |
| ; RV32IMZBS-NEXT: slli a6, a6, 4 |
| ; RV32IMZBS-NEXT: and s0, s0, s11 |
| ; RV32IMZBS-NEXT: slli a7, a7, 4 |
| ; RV32IMZBS-NEXT: or a2, t0, a2 |
| ; RV32IMZBS-NEXT: or a0, t1, a0 |
| ; RV32IMZBS-NEXT: or a1, t2, a1 |
| ; RV32IMZBS-NEXT: or a3, t3, a3 |
| ; RV32IMZBS-NEXT: or a4, t4, a4 |
| ; RV32IMZBS-NEXT: or a5, t5, a5 |
| ; RV32IMZBS-NEXT: or a6, t6, a6 |
| ; RV32IMZBS-NEXT: or a7, s0, a7 |
| ; RV32IMZBS-NEXT: srli t0, a2, 2 |
| ; RV32IMZBS-NEXT: sw s10, 728(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, s10 |
| ; RV32IMZBS-NEXT: srli t1, a0, 2 |
| ; RV32IMZBS-NEXT: and a0, a0, s10 |
| ; RV32IMZBS-NEXT: srli t2, a1, 2 |
| ; RV32IMZBS-NEXT: and a1, a1, s10 |
| ; RV32IMZBS-NEXT: srli t3, a3, 2 |
| ; RV32IMZBS-NEXT: and a3, a3, s10 |
| ; RV32IMZBS-NEXT: srli t4, a4, 2 |
| ; RV32IMZBS-NEXT: and a4, a4, s10 |
| ; RV32IMZBS-NEXT: srli t5, a5, 2 |
| ; RV32IMZBS-NEXT: and a5, a5, s10 |
| ; RV32IMZBS-NEXT: srli t6, a6, 2 |
| ; RV32IMZBS-NEXT: and a6, a6, s10 |
| ; RV32IMZBS-NEXT: srli s0, a7, 2 |
| ; RV32IMZBS-NEXT: and a7, a7, s10 |
| ; RV32IMZBS-NEXT: and t0, t0, s10 |
| ; RV32IMZBS-NEXT: slli a2, a2, 2 |
| ; RV32IMZBS-NEXT: and t1, t1, s10 |
| ; RV32IMZBS-NEXT: slli a0, a0, 2 |
| ; RV32IMZBS-NEXT: and t2, t2, s10 |
| ; RV32IMZBS-NEXT: slli a1, a1, 2 |
| ; RV32IMZBS-NEXT: and t3, t3, s10 |
| ; RV32IMZBS-NEXT: slli a3, a3, 2 |
| ; RV32IMZBS-NEXT: and t4, t4, s10 |
| ; RV32IMZBS-NEXT: slli a4, a4, 2 |
| ; RV32IMZBS-NEXT: and t5, t5, s10 |
| ; RV32IMZBS-NEXT: slli a5, a5, 2 |
| ; RV32IMZBS-NEXT: and t6, t6, s10 |
| ; RV32IMZBS-NEXT: slli a6, a6, 2 |
| ; RV32IMZBS-NEXT: and s0, s0, s10 |
| ; RV32IMZBS-NEXT: slli a7, a7, 2 |
| ; RV32IMZBS-NEXT: or a2, t0, a2 |
| ; RV32IMZBS-NEXT: or a0, t1, a0 |
| ; RV32IMZBS-NEXT: or a1, t2, a1 |
| ; RV32IMZBS-NEXT: or a3, t3, a3 |
| ; RV32IMZBS-NEXT: or a4, t4, a4 |
| ; RV32IMZBS-NEXT: or a5, t5, a5 |
| ; RV32IMZBS-NEXT: or a6, t6, a6 |
| ; RV32IMZBS-NEXT: or a7, s0, a7 |
| ; RV32IMZBS-NEXT: srli t0, a2, 1 |
| ; RV32IMZBS-NEXT: sw s5, 724(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, s5 |
| ; RV32IMZBS-NEXT: srli t1, a0, 1 |
| ; RV32IMZBS-NEXT: and a0, a0, s5 |
| ; RV32IMZBS-NEXT: srli t2, a1, 1 |
| ; RV32IMZBS-NEXT: and a1, a1, s5 |
| ; RV32IMZBS-NEXT: srli t3, a3, 1 |
| ; RV32IMZBS-NEXT: and a3, a3, s5 |
| ; RV32IMZBS-NEXT: srli t4, a4, 1 |
| ; RV32IMZBS-NEXT: and a4, a4, s5 |
| ; RV32IMZBS-NEXT: srli t5, a5, 1 |
| ; RV32IMZBS-NEXT: and a5, a5, s5 |
| ; RV32IMZBS-NEXT: srli t6, a6, 1 |
| ; RV32IMZBS-NEXT: and a6, a6, s5 |
| ; RV32IMZBS-NEXT: srli s0, a7, 1 |
| ; RV32IMZBS-NEXT: and a7, a7, s5 |
| ; RV32IMZBS-NEXT: and t0, t0, s5 |
| ; RV32IMZBS-NEXT: slli a2, a2, 1 |
| ; RV32IMZBS-NEXT: and t1, t1, s5 |
| ; RV32IMZBS-NEXT: slli a0, a0, 1 |
| ; RV32IMZBS-NEXT: and t2, t2, s5 |
| ; RV32IMZBS-NEXT: slli a1, a1, 1 |
| ; RV32IMZBS-NEXT: and t3, t3, s5 |
| ; RV32IMZBS-NEXT: slli s1, a3, 1 |
| ; RV32IMZBS-NEXT: and t4, t4, s5 |
| ; RV32IMZBS-NEXT: slli a4, a4, 1 |
| ; RV32IMZBS-NEXT: and t5, t5, s5 |
| ; RV32IMZBS-NEXT: slli a5, a5, 1 |
| ; RV32IMZBS-NEXT: and t6, t6, s5 |
| ; RV32IMZBS-NEXT: slli a6, a6, 1 |
| ; RV32IMZBS-NEXT: and s0, s0, s5 |
| ; RV32IMZBS-NEXT: slli a3, a7, 1 |
| ; RV32IMZBS-NEXT: or s6, t0, a2 |
| ; RV32IMZBS-NEXT: or s8, t1, a0 |
| ; RV32IMZBS-NEXT: or s7, t2, a1 |
| ; RV32IMZBS-NEXT: srli a0, a0, 31 |
| ; RV32IMZBS-NEXT: or s9, t3, s1 |
| ; RV32IMZBS-NEXT: srli a1, s1, 31 |
| ; RV32IMZBS-NEXT: or a7, t4, a4 |
| ; RV32IMZBS-NEXT: or t1, t5, a5 |
| ; RV32IMZBS-NEXT: or t0, t6, a6 |
| ; RV32IMZBS-NEXT: srli a2, a5, 31 |
| ; RV32IMZBS-NEXT: or t4, s0, a3 |
| ; RV32IMZBS-NEXT: srli s0, a3, 31 |
| ; RV32IMZBS-NEXT: srli a3, s6, 8 |
| ; RV32IMZBS-NEXT: srli a4, s6, 24 |
| ; RV32IMZBS-NEXT: srli a5, s8, 8 |
| ; RV32IMZBS-NEXT: srli a6, s8, 24 |
| ; RV32IMZBS-NEXT: slli t2, s8, 24 |
| ; RV32IMZBS-NEXT: and t3, s8, ra |
| ; RV32IMZBS-NEXT: slli t5, s7, 31 |
| ; RV32IMZBS-NEXT: seqz s1, a0 |
| ; RV32IMZBS-NEXT: slli t6, s6, 31 |
| ; RV32IMZBS-NEXT: seqz s2, a1 |
| ; RV32IMZBS-NEXT: srli a0, a7, 8 |
| ; RV32IMZBS-NEXT: and a3, a3, ra |
| ; RV32IMZBS-NEXT: or a3, a3, a4 |
| ; RV32IMZBS-NEXT: srli a4, a7, 24 |
| ; RV32IMZBS-NEXT: and a1, a5, ra |
| ; RV32IMZBS-NEXT: or a6, a1, a6 |
| ; RV32IMZBS-NEXT: srli a5, t1, 8 |
| ; RV32IMZBS-NEXT: slli t3, t3, 8 |
| ; RV32IMZBS-NEXT: or a1, t2, t3 |
| ; RV32IMZBS-NEXT: srli t2, t1, 24 |
| ; RV32IMZBS-NEXT: and a0, a0, ra |
| ; RV32IMZBS-NEXT: or a0, a0, a4 |
| ; RV32IMZBS-NEXT: slli t3, t1, 24 |
| ; RV32IMZBS-NEXT: and a4, a5, ra |
| ; RV32IMZBS-NEXT: or a4, a4, t2 |
| ; RV32IMZBS-NEXT: and a5, t1, ra |
| ; RV32IMZBS-NEXT: slli a5, a5, 8 |
| ; RV32IMZBS-NEXT: or a5, t3, a5 |
| ; RV32IMZBS-NEXT: slli t3, t0, 31 |
| ; RV32IMZBS-NEXT: seqz a2, a2 |
| ; RV32IMZBS-NEXT: addi t2, s1, -1 |
| ; RV32IMZBS-NEXT: addi s2, s2, -1 |
| ; RV32IMZBS-NEXT: and t5, t2, t5 |
| ; RV32IMZBS-NEXT: sw t5, 716(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and t5, s2, t6 |
| ; RV32IMZBS-NEXT: sw t5, 720(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and t2, t2, t6 |
| ; RV32IMZBS-NEXT: sw t2, 712(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli t2, a7, 31 |
| ; RV32IMZBS-NEXT: seqz t5, s0 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: addi t5, t5, -1 |
| ; RV32IMZBS-NEXT: and t3, a2, t3 |
| ; RV32IMZBS-NEXT: sw t3, 704(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and t3, t5, t2 |
| ; RV32IMZBS-NEXT: sw t3, 708(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, t2 |
| ; RV32IMZBS-NEXT: sw a2, 692(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: sw ra, 740(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, s6, ra |
| ; RV32IMZBS-NEXT: slli t2, a2, 8 |
| ; RV32IMZBS-NEXT: slli a2, s6, 24 |
| ; RV32IMZBS-NEXT: or t2, a2, t2 |
| ; RV32IMZBS-NEXT: or a3, t2, a3 |
| ; RV32IMZBS-NEXT: sw a3, 684(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: or a1, a1, a6 |
| ; RV32IMZBS-NEXT: sw a1, 688(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a7, ra |
| ; RV32IMZBS-NEXT: slli a1, a1, 8 |
| ; RV32IMZBS-NEXT: slli s5, a7, 24 |
| ; RV32IMZBS-NEXT: or a1, s5, a1 |
| ; RV32IMZBS-NEXT: or a0, a1, a0 |
| ; RV32IMZBS-NEXT: sw a0, 696(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: or a4, a5, a4 |
| ; RV32IMZBS-NEXT: sw a4, 700(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s8, 2 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 2 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 1 |
| ; RV32IMZBS-NEXT: and s2, a0, a3 |
| ; RV32IMZBS-NEXT: slli a3, s6, 1 |
| ; RV32IMZBS-NEXT: and s1, a1, a3 |
| ; RV32IMZBS-NEXT: and t2, a0, a3 |
| ; RV32IMZBS-NEXT: andi a0, s8, 4 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 4 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 2 |
| ; RV32IMZBS-NEXT: and s4, a0, a3 |
| ; RV32IMZBS-NEXT: slli a3, s6, 2 |
| ; RV32IMZBS-NEXT: and s3, a1, a3 |
| ; RV32IMZBS-NEXT: and t6, a0, a3 |
| ; RV32IMZBS-NEXT: andi a0, s8, 8 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 8 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 3 |
| ; RV32IMZBS-NEXT: and a3, a0, a3 |
| ; RV32IMZBS-NEXT: sw a3, 620(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s6, 3 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: sw a1, 624(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: sw a0, 672(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s8, 16 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 16 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 4 |
| ; RV32IMZBS-NEXT: and a3, a0, a3 |
| ; RV32IMZBS-NEXT: sw a3, 608(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s6, 4 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: sw a1, 616(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: sw a0, 652(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s8, 32 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 32 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 5 |
| ; RV32IMZBS-NEXT: and a3, a0, a3 |
| ; RV32IMZBS-NEXT: sw a3, 568(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s6, 5 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: sw a1, 580(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: sw a0, 632(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s8, 64 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 64 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 6 |
| ; RV32IMZBS-NEXT: and a3, a0, a3 |
| ; RV32IMZBS-NEXT: sw a3, 640(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s6, 6 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: sw a1, 656(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: sw a0, 676(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s8, 128 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 128 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 7 |
| ; RV32IMZBS-NEXT: and a3, a0, a3 |
| ; RV32IMZBS-NEXT: sw a3, 536(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s6, 7 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: sw a1, 540(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: sw a0, 592(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s8, 256 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 256 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 8 |
| ; RV32IMZBS-NEXT: and a3, a0, a3 |
| ; RV32IMZBS-NEXT: sw a3, 516(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s6, 8 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: sw a1, 532(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: sw a0, 564(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s8, 512 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 512 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 9 |
| ; RV32IMZBS-NEXT: and a3, a0, a3 |
| ; RV32IMZBS-NEXT: sw a3, 572(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s6, 9 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: sw a1, 600(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: sw a0, 628(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s8, 1024 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, s9, 1024 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, s7, 10 |
| ; RV32IMZBS-NEXT: and a3, a0, a3 |
| ; RV32IMZBS-NEXT: sw a3, 660(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, s6, 10 |
| ; RV32IMZBS-NEXT: and a1, a1, a3 |
| ; RV32IMZBS-NEXT: sw a1, 664(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a3 |
| ; RV32IMZBS-NEXT: sw a0, 680(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: not a3, s8 |
| ; RV32IMZBS-NEXT: bexti a0, a3, 11 |
| ; RV32IMZBS-NEXT: addi a1, a0, -1 |
| ; RV32IMZBS-NEXT: not a0, s9 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 11 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 11 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 456(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 11 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 468(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 504(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 12 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 12 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 12 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 448(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 12 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 452(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 488(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 13 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 13 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 13 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 508(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 13 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 520(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 552(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 14 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 14 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 14 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 588(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 14 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 604(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 636(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 15 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 15 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 15 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 644(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 15 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 648(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 668(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 16 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 16 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 16 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 412(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 16 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 420(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 436(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 17 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 17 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 17 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 404(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 17 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 408(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 428(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 18 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 18 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 18 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 440(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 18 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 444(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 476(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 19 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 19 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 19 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 496(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 19 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 512(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 548(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 20 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 20 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 20 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 556(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 20 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 560(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 576(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 21 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 21 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 21 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 584(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 21 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 596(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 612(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 22 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 22 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 22 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 380(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 22 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 384(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 392(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 23 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 23 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 23 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 372(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a5, s6, 23 |
| ; RV32IMZBS-NEXT: and a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 376(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a5 |
| ; RV32IMZBS-NEXT: sw a1, 388(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 24 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 24 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli a5, s7, 24 |
| ; RV32IMZBS-NEXT: and a5, a1, a5 |
| ; RV32IMZBS-NEXT: sw a5, 396(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a4, a4, a2 |
| ; RV32IMZBS-NEXT: sw a4, 400(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 416(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 25 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a2, a0, 25 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: slli a4, s7, 25 |
| ; RV32IMZBS-NEXT: and a4, a1, a4 |
| ; RV32IMZBS-NEXT: sw a4, 424(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, s6, 25 |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 432(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a4 |
| ; RV32IMZBS-NEXT: sw a1, 460(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 26 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a2, a0, 26 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: slli a4, s7, 26 |
| ; RV32IMZBS-NEXT: and a4, a1, a4 |
| ; RV32IMZBS-NEXT: sw a4, 464(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, s6, 26 |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 472(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a4 |
| ; RV32IMZBS-NEXT: sw a1, 480(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 27 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a2, a0, 27 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: slli a4, s7, 27 |
| ; RV32IMZBS-NEXT: and a4, a1, a4 |
| ; RV32IMZBS-NEXT: sw a4, 484(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, s6, 27 |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 492(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a4 |
| ; RV32IMZBS-NEXT: sw a1, 500(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 28 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a2, a0, 28 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: slli a4, s7, 28 |
| ; RV32IMZBS-NEXT: and a4, a1, a4 |
| ; RV32IMZBS-NEXT: sw a4, 528(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, s6, 28 |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 524(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a1, a1, a4 |
| ; RV32IMZBS-NEXT: sw a1, 544(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a3, 29 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: bexti a2, a0, 29 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: slli a4, s7, 29 |
| ; RV32IMZBS-NEXT: and a4, a1, a4 |
| ; RV32IMZBS-NEXT: sw a4, 356(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, s6, 29 |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 364(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a5, a1, a4 |
| ; RV32IMZBS-NEXT: andi a1, s8, 1 |
| ; RV32IMZBS-NEXT: andi a2, s9, 1 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: seqz a2, a2 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: slli a4, s7, 30 |
| ; RV32IMZBS-NEXT: and a6, a1, s7 |
| ; RV32IMZBS-NEXT: sw a6, 324(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, s6 |
| ; RV32IMZBS-NEXT: sw a2, 340(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and s7, a1, s6 |
| ; RV32IMZBS-NEXT: slli s6, s6, 30 |
| ; RV32IMZBS-NEXT: bexti a1, a3, 30 |
| ; RV32IMZBS-NEXT: bexti a0, a0, 30 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: and a4, a1, a4 |
| ; RV32IMZBS-NEXT: sw a4, 320(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, s6 |
| ; RV32IMZBS-NEXT: sw a0, 332(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a1, s6 |
| ; RV32IMZBS-NEXT: sw a0, 368(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 2 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 2 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 1 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 316(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 1 |
| ; RV32IMZBS-NEXT: and s6, a1, a2 |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 360(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 4 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 4 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 2 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 292(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 2 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 304(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 348(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 8 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 8 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 3 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 268(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 3 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 276(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 312(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 16 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 16 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 4 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 248(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 4 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 256(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 288(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 32 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 32 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 5 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 224(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 5 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 236(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 264(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 64 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 64 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 6 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 296(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 6 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 308(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 344(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 128 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 128 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 7 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 184(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 7 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 192(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 220(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 256 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 256 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 8 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 156(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 8 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 176(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 204(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 512 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 512 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 9 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 228(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 9 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 240(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 260(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, t1, 1024 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: andi a1, t4, 1024 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 10 |
| ; RV32IMZBS-NEXT: and a2, a0, a2 |
| ; RV32IMZBS-NEXT: sw a2, 328(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a7, 10 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 336(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 352(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: not a1, t1 |
| ; RV32IMZBS-NEXT: bexti a0, a1, 11 |
| ; RV32IMZBS-NEXT: addi a2, a0, -1 |
| ; RV32IMZBS-NEXT: not a0, t4 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 11 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 11 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 108(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 11 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 120(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 140(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 12 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 12 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 12 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 92(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 12 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 96(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 132(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 13 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 13 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 13 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 144(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 13 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 152(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 188(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 14 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 14 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 14 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 244(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 14 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 252(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 272(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 15 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 15 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 15 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 280(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 15 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 284(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 300(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 16 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 16 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 16 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 56(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 16 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 60(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 68(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 17 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 17 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 17 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 44(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 17 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 52(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 64(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 18 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 18 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 18 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 80(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 18 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 84(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 112(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 19 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 19 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 19 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 148(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 19 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 160(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 180(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 20 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 20 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 20 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 196(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 20 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 200(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 208(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 21 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 21 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 21 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 212(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a4, a7, 21 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 216(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, a2, a4 |
| ; RV32IMZBS-NEXT: sw a2, 232(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 22 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 22 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t0, 22 |
| ; RV32IMZBS-NEXT: and a4, a2, a4 |
| ; RV32IMZBS-NEXT: sw a4, 28(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a6, a7, 22 |
| ; RV32IMZBS-NEXT: and a4, a3, a6 |
| ; RV32IMZBS-NEXT: and a2, a2, a6 |
| ; RV32IMZBS-NEXT: sw a2, 32(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a2, a1, 23 |
| ; RV32IMZBS-NEXT: addi a6, a2, -1 |
| ; RV32IMZBS-NEXT: bexti a2, a0, 23 |
| ; RV32IMZBS-NEXT: addi a3, a2, -1 |
| ; RV32IMZBS-NEXT: slli a2, t0, 23 |
| ; RV32IMZBS-NEXT: and a2, a6, a2 |
| ; RV32IMZBS-NEXT: sw a2, 24(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli t3, a7, 23 |
| ; RV32IMZBS-NEXT: and a3, a3, t3 |
| ; RV32IMZBS-NEXT: and a6, a6, t3 |
| ; RV32IMZBS-NEXT: bexti t3, a1, 24 |
| ; RV32IMZBS-NEXT: addi s0, t3, -1 |
| ; RV32IMZBS-NEXT: bexti t3, a0, 24 |
| ; RV32IMZBS-NEXT: addi t5, t3, -1 |
| ; RV32IMZBS-NEXT: slli t3, t0, 24 |
| ; RV32IMZBS-NEXT: and a2, s0, t3 |
| ; RV32IMZBS-NEXT: sw a2, 36(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, t5, s5 |
| ; RV32IMZBS-NEXT: sw a2, 40(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, s0, s5 |
| ; RV32IMZBS-NEXT: sw a2, 48(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti s5, a1, 25 |
| ; RV32IMZBS-NEXT: addi s5, s5, -1 |
| ; RV32IMZBS-NEXT: bexti s8, a0, 25 |
| ; RV32IMZBS-NEXT: addi s9, s8, -1 |
| ; RV32IMZBS-NEXT: slli s8, t0, 25 |
| ; RV32IMZBS-NEXT: and a2, s5, s8 |
| ; RV32IMZBS-NEXT: sw a2, 72(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli s10, a7, 25 |
| ; RV32IMZBS-NEXT: and a2, s9, s10 |
| ; RV32IMZBS-NEXT: sw a2, 76(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, s5, s10 |
| ; RV32IMZBS-NEXT: sw a2, 88(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti s5, a1, 26 |
| ; RV32IMZBS-NEXT: addi s5, s5, -1 |
| ; RV32IMZBS-NEXT: bexti s10, a0, 26 |
| ; RV32IMZBS-NEXT: addi s10, s10, -1 |
| ; RV32IMZBS-NEXT: slli s11, t0, 26 |
| ; RV32IMZBS-NEXT: and a2, s5, s11 |
| ; RV32IMZBS-NEXT: sw a2, 100(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli s11, a7, 26 |
| ; RV32IMZBS-NEXT: and a2, s10, s11 |
| ; RV32IMZBS-NEXT: sw a2, 104(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, s5, s11 |
| ; RV32IMZBS-NEXT: sw a2, 116(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti s5, a1, 27 |
| ; RV32IMZBS-NEXT: addi s5, s5, -1 |
| ; RV32IMZBS-NEXT: bexti s10, a0, 27 |
| ; RV32IMZBS-NEXT: addi s10, s10, -1 |
| ; RV32IMZBS-NEXT: slli s11, t0, 27 |
| ; RV32IMZBS-NEXT: and a2, s5, s11 |
| ; RV32IMZBS-NEXT: sw a2, 124(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli s11, a7, 27 |
| ; RV32IMZBS-NEXT: and a2, s10, s11 |
| ; RV32IMZBS-NEXT: sw a2, 128(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, s5, s11 |
| ; RV32IMZBS-NEXT: sw a2, 136(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti s5, a1, 28 |
| ; RV32IMZBS-NEXT: addi s5, s5, -1 |
| ; RV32IMZBS-NEXT: bexti s10, a0, 28 |
| ; RV32IMZBS-NEXT: addi s10, s10, -1 |
| ; RV32IMZBS-NEXT: slli s11, t0, 28 |
| ; RV32IMZBS-NEXT: and a2, s5, s11 |
| ; RV32IMZBS-NEXT: sw a2, 168(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli s11, a7, 28 |
| ; RV32IMZBS-NEXT: and a2, s10, s11 |
| ; RV32IMZBS-NEXT: sw a2, 164(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: and a2, s5, s11 |
| ; RV32IMZBS-NEXT: sw a2, 172(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti s5, a1, 29 |
| ; RV32IMZBS-NEXT: addi s5, s5, -1 |
| ; RV32IMZBS-NEXT: bexti s10, a0, 29 |
| ; RV32IMZBS-NEXT: addi s10, s10, -1 |
| ; RV32IMZBS-NEXT: slli s11, t0, 29 |
| ; RV32IMZBS-NEXT: and s11, s5, s11 |
| ; RV32IMZBS-NEXT: slli ra, a7, 29 |
| ; RV32IMZBS-NEXT: and s0, s10, ra |
| ; RV32IMZBS-NEXT: and s8, s5, ra |
| ; RV32IMZBS-NEXT: andi t1, t1, 1 |
| ; RV32IMZBS-NEXT: andi t4, t4, 1 |
| ; RV32IMZBS-NEXT: seqz t1, t1 |
| ; RV32IMZBS-NEXT: seqz t4, t4 |
| ; RV32IMZBS-NEXT: addi t1, t1, -1 |
| ; RV32IMZBS-NEXT: addi t4, t4, -1 |
| ; RV32IMZBS-NEXT: slli ra, t0, 30 |
| ; RV32IMZBS-NEXT: and t0, t1, t0 |
| ; RV32IMZBS-NEXT: and t4, t4, a7 |
| ; RV32IMZBS-NEXT: and a2, t1, a7 |
| ; RV32IMZBS-NEXT: sw a2, 20(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a7, a7, 30 |
| ; RV32IMZBS-NEXT: bexti a1, a1, 30 |
| ; RV32IMZBS-NEXT: bexti a0, a0, 30 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: and ra, a1, ra |
| ; RV32IMZBS-NEXT: and a0, a0, a7 |
| ; RV32IMZBS-NEXT: and a1, a1, a7 |
| ; RV32IMZBS-NEXT: sw a1, 16(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 324(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, s2 |
| ; RV32IMZBS-NEXT: sw a1, 324(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 620(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, s4, a1 |
| ; RV32IMZBS-NEXT: sw a1, 12(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 608(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 568(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 608(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 536(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 516(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 536(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 456(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 448(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 516(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 412(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 404(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 456(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 380(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 372(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 448(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 356(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 320(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 412(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 340(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, s1 |
| ; RV32IMZBS-NEXT: sw a1, 620(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 624(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, s3, a1 |
| ; RV32IMZBS-NEXT: sw a1, 404(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 616(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 580(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 616(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 540(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 532(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 580(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 468(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 452(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 452(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 420(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 408(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 420(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 384(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 376(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 408(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 364(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 332(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 384(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 316(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, t0, a1 |
| ; RV32IMZBS-NEXT: sw a1, 624(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 292(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 268(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 380(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 248(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 224(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 376(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 184(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 156(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 372(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 108(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 92(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 364(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 56(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 44(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 356(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a1, 28(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 24(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s10, a1, a2 |
| ; RV32IMZBS-NEXT: xor s11, s11, ra |
| ; RV32IMZBS-NEXT: xor ra, t4, s6 |
| ; RV32IMZBS-NEXT: lw a1, 304(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 276(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s5, a1, a2 |
| ; RV32IMZBS-NEXT: lw a1, 256(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s1, 236(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, a1, s1 |
| ; RV32IMZBS-NEXT: lw a1, 192(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 176(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s2, a1, a2 |
| ; RV32IMZBS-NEXT: lw a1, 120(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 96(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s3, a1, a2 |
| ; RV32IMZBS-NEXT: lw a1, 60(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 52(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s4, a1, a2 |
| ; RV32IMZBS-NEXT: xor s6, a4, a3 |
| ; RV32IMZBS-NEXT: xor s0, s0, a0 |
| ; RV32IMZBS-NEXT: xor s7, s7, t2 |
| ; RV32IMZBS-NEXT: lw a0, 672(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t6, a0 |
| ; RV32IMZBS-NEXT: lw a0, 652(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 632(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, a0, a1 |
| ; RV32IMZBS-NEXT: lw a0, 592(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 564(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t2, a0, a1 |
| ; RV32IMZBS-NEXT: lw a0, 504(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 488(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t3, a0, a1 |
| ; RV32IMZBS-NEXT: lw a0, 436(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 428(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t4, a0, a1 |
| ; RV32IMZBS-NEXT: lw a0, 392(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 388(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t5, a0, a1 |
| ; RV32IMZBS-NEXT: lw a0, 368(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t6, a5, a0 |
| ; RV32IMZBS-NEXT: lw a0, 360(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 20(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 348(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 312(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a0, a1 |
| ; RV32IMZBS-NEXT: lw a1, 288(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 264(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: lw a2, 220(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a3, 204(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, a2, a3 |
| ; RV32IMZBS-NEXT: lw a3, 140(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a4, 132(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a3, a4 |
| ; RV32IMZBS-NEXT: lw a4, 68(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a5, 64(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a4, a4, a5 |
| ; RV32IMZBS-NEXT: lw a5, 32(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a5, a5, a6 |
| ; RV32IMZBS-NEXT: lw a6, 16(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a6, s8, a6 |
| ; RV32IMZBS-NEXT: lw s8, 324(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 12(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s8, s9 |
| ; RV32IMZBS-NEXT: sw s8, 568(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 640(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 608(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 564(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 572(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 536(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 540(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 508(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 516(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 536(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 440(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 456(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 532(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 396(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 448(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 516(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 716(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 412(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 716(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 620(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 404(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s8, s9 |
| ; RV32IMZBS-NEXT: sw s8, 488(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 656(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 616(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 468(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 600(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 580(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 456(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 520(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 452(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 452(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 444(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 420(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 448(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 400(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 408(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 444(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 720(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 384(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 720(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 624(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 380(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s8, s9 |
| ; RV32IMZBS-NEXT: sw s8, 672(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 296(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 376(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 656(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 228(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 372(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 652(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 144(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 364(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: sw s8, 640(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s8, 80(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 356(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s9, s9, s8 |
| ; RV32IMZBS-NEXT: lw s8, 36(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s10, s10, s8 |
| ; RV32IMZBS-NEXT: lw s8, 704(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s11, s8 |
| ; RV32IMZBS-NEXT: sw s8, 704(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: xor s8, ra, s5 |
| ; RV32IMZBS-NEXT: lw s5, 308(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, s1, s5 |
| ; RV32IMZBS-NEXT: sw s1, 632(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s1, 240(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, s2, s1 |
| ; RV32IMZBS-NEXT: sw s1, 624(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s1, 152(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, s3, s1 |
| ; RV32IMZBS-NEXT: sw s1, 620(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s1, 84(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, s4, s1 |
| ; RV32IMZBS-NEXT: sw s1, 616(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s1, 40(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, s6, s1 |
| ; RV32IMZBS-NEXT: sw s1, 608(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw s1, 708(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s0, s0, s1 |
| ; RV32IMZBS-NEXT: sw s0, 708(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: xor t0, s7, t0 |
| ; RV32IMZBS-NEXT: sw t0, 600(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw t0, 676(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, t1, t0 |
| ; RV32IMZBS-NEXT: lw t0, 628(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t2, t0 |
| ; RV32IMZBS-NEXT: sw t0, 676(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw t0, 552(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t3, t0 |
| ; RV32IMZBS-NEXT: sw t0, 628(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw t0, 476(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t4, t0 |
| ; RV32IMZBS-NEXT: sw t0, 592(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw t0, 416(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t5, t0 |
| ; RV32IMZBS-NEXT: sw t0, 580(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw t0, 712(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t6, t0 |
| ; RV32IMZBS-NEXT: sw t0, 712(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: xor a0, a7, a0 |
| ; RV32IMZBS-NEXT: sw a0, 572(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 344(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a1, a0 |
| ; RV32IMZBS-NEXT: sw a0, 552(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 260(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a2, a0 |
| ; RV32IMZBS-NEXT: sw a0, 520(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 188(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a3, a0 |
| ; RV32IMZBS-NEXT: lw a0, 112(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a4, a0 |
| ; RV32IMZBS-NEXT: sw a0, 508(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 48(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a5, a0 |
| ; RV32IMZBS-NEXT: sw a0, 504(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 692(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a6, a0 |
| ; RV32IMZBS-NEXT: sw a0, 692(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a5, 684(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli a4, a5, 4 |
| ; RV32IMZBS-NEXT: lw a1, 744(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and a5, a5, a1 |
| ; RV32IMZBS-NEXT: and a4, a4, a1 |
| ; RV32IMZBS-NEXT: slli a5, a5, 4 |
| ; RV32IMZBS-NEXT: or a4, a4, a5 |
| ; RV32IMZBS-NEXT: sw a4, 684(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 688(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli a5, a0, 4 |
| ; RV32IMZBS-NEXT: and a6, a0, a1 |
| ; RV32IMZBS-NEXT: and a5, a5, a1 |
| ; RV32IMZBS-NEXT: slli a6, a6, 4 |
| ; RV32IMZBS-NEXT: or a0, a5, a6 |
| ; RV32IMZBS-NEXT: sw a0, 688(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 568(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 564(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 568(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 660(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 540(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor ra, a2, a0 |
| ; RV32IMZBS-NEXT: lw a0, 588(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 536(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a2, a0 |
| ; RV32IMZBS-NEXT: sw a0, 588(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 496(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 532(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a2, a0 |
| ; RV32IMZBS-NEXT: sw a0, 564(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 424(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 516(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a2, a0 |
| ; RV32IMZBS-NEXT: sw a0, 540(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 488(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 468(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a0, a2 |
| ; RV32IMZBS-NEXT: sw a0, 660(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 664(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 456(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s11, a2, a0 |
| ; RV32IMZBS-NEXT: lw a0, 604(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 452(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a2, a0 |
| ; RV32IMZBS-NEXT: sw a0, 664(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 512(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 448(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a2, a0 |
| ; RV32IMZBS-NEXT: sw a0, 604(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 432(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 444(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a2, a0 |
| ; RV32IMZBS-NEXT: sw a0, 536(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 696(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli t2, a0, 4 |
| ; RV32IMZBS-NEXT: and t3, a0, a1 |
| ; RV32IMZBS-NEXT: and t2, t2, a1 |
| ; RV32IMZBS-NEXT: slli t3, t3, 4 |
| ; RV32IMZBS-NEXT: or a0, t2, t3 |
| ; RV32IMZBS-NEXT: sw a0, 696(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 700(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli t3, a0, 4 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: and t3, t3, a1 |
| ; RV32IMZBS-NEXT: slli a0, a0, 4 |
| ; RV32IMZBS-NEXT: or a0, t3, a0 |
| ; RV32IMZBS-NEXT: sw a0, 700(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 672(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 656(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 672(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: lw a0, 328(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 652(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s5, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 244(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 640(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s6, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 148(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s2, s9, a0 |
| ; RV32IMZBS-NEXT: lw a0, 72(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s3, s10, a0 |
| ; RV32IMZBS-NEXT: lw a0, 632(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s4, s8, a0 |
| ; RV32IMZBS-NEXT: lw a0, 336(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s0, 624(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s0, s0, a0 |
| ; RV32IMZBS-NEXT: lw a0, 252(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s1, 620(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, s1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 160(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 616(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t4, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 76(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 608(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t5, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 600(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t6, a0, t1 |
| ; RV32IMZBS-NEXT: lw a0, 680(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 676(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t2, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 636(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 628(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t3, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 548(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 592(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 460(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 580(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 572(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 552(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, a0, a1 |
| ; RV32IMZBS-NEXT: lw a0, 352(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a4, 520(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a4, a4, a0 |
| ; RV32IMZBS-NEXT: lw a0, 272(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a5, a3, a0 |
| ; RV32IMZBS-NEXT: lw a0, 180(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 508(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a6, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 88(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a3, 504(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a3, a0 |
| ; RV32IMZBS-NEXT: lw a0, 568(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor ra, a0, ra |
| ; RV32IMZBS-NEXT: lw a0, 644(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 588(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a1, a0 |
| ; RV32IMZBS-NEXT: lw a1, 556(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 564(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a2, a1 |
| ; RV32IMZBS-NEXT: lw a2, 464(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s8, 540(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, s8, a2 |
| ; RV32IMZBS-NEXT: lw s8, 660(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s11, s8, s11 |
| ; RV32IMZBS-NEXT: lw s8, 648(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 664(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s8, s9, s8 |
| ; RV32IMZBS-NEXT: lw s9, 560(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s10, 604(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s9, s10, s9 |
| ; RV32IMZBS-NEXT: lw s10, 472(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s7, 536(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s10, s7, s10 |
| ; RV32IMZBS-NEXT: lw s7, 672(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s5, s7, s5 |
| ; RV32IMZBS-NEXT: lw s7, 280(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s6, s6, s7 |
| ; RV32IMZBS-NEXT: lw s7, 196(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s2, s2, s7 |
| ; RV32IMZBS-NEXT: lw s7, 100(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s3, s3, s7 |
| ; RV32IMZBS-NEXT: xor s0, s4, s0 |
| ; RV32IMZBS-NEXT: lw s4, 284(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, s1, s4 |
| ; RV32IMZBS-NEXT: lw s4, 200(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t4, t4, s4 |
| ; RV32IMZBS-NEXT: lw s4, 104(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t5, t5, s4 |
| ; RV32IMZBS-NEXT: xor t2, t6, t2 |
| ; RV32IMZBS-NEXT: lw t6, 668(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t3, t3, t6 |
| ; RV32IMZBS-NEXT: lw t6, 576(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, a7, t6 |
| ; RV32IMZBS-NEXT: lw t6, 480(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t0, t6 |
| ; RV32IMZBS-NEXT: xor a4, t1, a4 |
| ; RV32IMZBS-NEXT: lw t1, 300(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a5, a5, t1 |
| ; RV32IMZBS-NEXT: lw t1, 208(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a6, a6, t1 |
| ; RV32IMZBS-NEXT: lw t1, 116(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a3, t1 |
| ; RV32IMZBS-NEXT: xor a0, ra, a0 |
| ; RV32IMZBS-NEXT: lw t1, 584(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, t1 |
| ; RV32IMZBS-NEXT: lw t1, 484(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, a2, t1 |
| ; RV32IMZBS-NEXT: xor t1, s11, s8 |
| ; RV32IMZBS-NEXT: lw t6, 596(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t6, s9, t6 |
| ; RV32IMZBS-NEXT: lw s4, 492(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s4, s10, s4 |
| ; RV32IMZBS-NEXT: xor s5, s5, s6 |
| ; RV32IMZBS-NEXT: lw s6, 212(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s2, s2, s6 |
| ; RV32IMZBS-NEXT: lw s6, 124(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s3, s3, s6 |
| ; RV32IMZBS-NEXT: xor s0, s0, s1 |
| ; RV32IMZBS-NEXT: lw s1, 216(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t4, t4, s1 |
| ; RV32IMZBS-NEXT: lw s1, 128(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t5, t5, s1 |
| ; RV32IMZBS-NEXT: xor t2, t2, t3 |
| ; RV32IMZBS-NEXT: lw t3, 612(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, a7, t3 |
| ; RV32IMZBS-NEXT: lw t3, 500(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t0, t3 |
| ; RV32IMZBS-NEXT: xor a4, a4, a5 |
| ; RV32IMZBS-NEXT: lw a5, 232(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a5, a6, a5 |
| ; RV32IMZBS-NEXT: lw a6, 136(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a3, a6 |
| ; RV32IMZBS-NEXT: lw t3, 684(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli a6, t3, 2 |
| ; RV32IMZBS-NEXT: lw s6, 728(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and t3, t3, s6 |
| ; RV32IMZBS-NEXT: and a6, a6, s6 |
| ; RV32IMZBS-NEXT: slli t3, t3, 2 |
| ; RV32IMZBS-NEXT: or a6, a6, t3 |
| ; RV32IMZBS-NEXT: lw s1, 688(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli t3, s1, 2 |
| ; RV32IMZBS-NEXT: and s1, s1, s6 |
| ; RV32IMZBS-NEXT: and t3, t3, s6 |
| ; RV32IMZBS-NEXT: slli s1, s1, 2 |
| ; RV32IMZBS-NEXT: or t3, t3, s1 |
| ; RV32IMZBS-NEXT: xor a0, a0, a1 |
| ; RV32IMZBS-NEXT: lw a1, 528(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a2, a1 |
| ; RV32IMZBS-NEXT: xor a2, t1, t6 |
| ; RV32IMZBS-NEXT: lw t1, 524(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, s4, t1 |
| ; RV32IMZBS-NEXT: lw s1, 696(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli t6, s1, 2 |
| ; RV32IMZBS-NEXT: and s1, s1, s6 |
| ; RV32IMZBS-NEXT: and t6, t6, s6 |
| ; RV32IMZBS-NEXT: slli s1, s1, 2 |
| ; RV32IMZBS-NEXT: or t6, t6, s1 |
| ; RV32IMZBS-NEXT: lw s4, 700(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli s1, s4, 2 |
| ; RV32IMZBS-NEXT: and s4, s4, s6 |
| ; RV32IMZBS-NEXT: and s1, s1, s6 |
| ; RV32IMZBS-NEXT: slli s4, s4, 2 |
| ; RV32IMZBS-NEXT: or s1, s1, s4 |
| ; RV32IMZBS-NEXT: xor s2, s5, s2 |
| ; RV32IMZBS-NEXT: lw s4, 168(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s3, s3, s4 |
| ; RV32IMZBS-NEXT: xor t4, s0, t4 |
| ; RV32IMZBS-NEXT: lw s0, 164(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t5, t5, s0 |
| ; RV32IMZBS-NEXT: xor a7, t2, a7 |
| ; RV32IMZBS-NEXT: lw t2, 544(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t0, t2 |
| ; RV32IMZBS-NEXT: xor a4, a4, a5 |
| ; RV32IMZBS-NEXT: lw a5, 172(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a3, a5 |
| ; RV32IMZBS-NEXT: xor a0, a0, a1 |
| ; RV32IMZBS-NEXT: xor a1, a2, t1 |
| ; RV32IMZBS-NEXT: srli a2, a6, 1 |
| ; RV32IMZBS-NEXT: lw s4, 724(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and a5, a6, s4 |
| ; RV32IMZBS-NEXT: xor a6, s2, s3 |
| ; RV32IMZBS-NEXT: srli t1, t3, 1 |
| ; RV32IMZBS-NEXT: and t2, t3, s4 |
| ; RV32IMZBS-NEXT: xor t3, t4, t5 |
| ; RV32IMZBS-NEXT: srli t4, t6, 1 |
| ; RV32IMZBS-NEXT: and t5, t6, s4 |
| ; RV32IMZBS-NEXT: xor a7, a7, t0 |
| ; RV32IMZBS-NEXT: srli t0, s1, 1 |
| ; RV32IMZBS-NEXT: and t6, s1, s4 |
| ; RV32IMZBS-NEXT: xor a3, a4, a3 |
| ; RV32IMZBS-NEXT: and a2, a2, s4 |
| ; RV32IMZBS-NEXT: slli a5, a5, 1 |
| ; RV32IMZBS-NEXT: and a4, t1, s4 |
| ; RV32IMZBS-NEXT: slli t2, t2, 1 |
| ; RV32IMZBS-NEXT: lw t1, 716(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, a0, t1 |
| ; RV32IMZBS-NEXT: lw s0, 720(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s0, a1, s0 |
| ; RV32IMZBS-NEXT: and t4, t4, s4 |
| ; RV32IMZBS-NEXT: slli t5, t5, 1 |
| ; RV32IMZBS-NEXT: and t0, t0, s4 |
| ; RV32IMZBS-NEXT: slli t6, t6, 1 |
| ; RV32IMZBS-NEXT: lw a0, 704(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s1, a6, a0 |
| ; RV32IMZBS-NEXT: lw a0, 708(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t3, t3, a0 |
| ; RV32IMZBS-NEXT: lw a0, 712(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, a7, a0 |
| ; RV32IMZBS-NEXT: lw a0, 692(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a3, a0 |
| ; RV32IMZBS-NEXT: or a0, a2, a5 |
| ; RV32IMZBS-NEXT: or a1, a4, t2 |
| ; RV32IMZBS-NEXT: srli a2, t2, 31 |
| ; RV32IMZBS-NEXT: xor a4, s0, t1 |
| ; RV32IMZBS-NEXT: sw a4, 720(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: or t2, t4, t5 |
| ; RV32IMZBS-NEXT: or s2, t0, t6 |
| ; RV32IMZBS-NEXT: srli a4, t6, 31 |
| ; RV32IMZBS-NEXT: xor a5, t3, s1 |
| ; RV32IMZBS-NEXT: sw a5, 716(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: srli a5, a7, 8 |
| ; RV32IMZBS-NEXT: srli t0, a7, 24 |
| ; RV32IMZBS-NEXT: slli a6, a7, 24 |
| ; RV32IMZBS-NEXT: lw s5, 740(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and a7, a7, s5 |
| ; RV32IMZBS-NEXT: srli t3, a3, 8 |
| ; RV32IMZBS-NEXT: srli t4, a3, 24 |
| ; RV32IMZBS-NEXT: slli t5, a3, 24 |
| ; RV32IMZBS-NEXT: and a3, a3, s5 |
| ; RV32IMZBS-NEXT: slli t6, a0, 1 |
| ; RV32IMZBS-NEXT: andi s0, a1, 2 |
| ; RV32IMZBS-NEXT: slli s1, a0, 2 |
| ; RV32IMZBS-NEXT: andi t1, a1, 4 |
| ; RV32IMZBS-NEXT: slli s3, a0, 3 |
| ; RV32IMZBS-NEXT: and a5, a5, s5 |
| ; RV32IMZBS-NEXT: or a5, a5, t0 |
| ; RV32IMZBS-NEXT: andi t0, a1, 8 |
| ; RV32IMZBS-NEXT: slli a7, a7, 8 |
| ; RV32IMZBS-NEXT: or a7, a6, a7 |
| ; RV32IMZBS-NEXT: slli a6, a0, 4 |
| ; RV32IMZBS-NEXT: and t3, t3, s5 |
| ; RV32IMZBS-NEXT: or t3, t3, t4 |
| ; RV32IMZBS-NEXT: andi t4, a1, 16 |
| ; RV32IMZBS-NEXT: slli a3, a3, 8 |
| ; RV32IMZBS-NEXT: or a3, t5, a3 |
| ; RV32IMZBS-NEXT: slli t5, a0, 31 |
| ; RV32IMZBS-NEXT: seqz a2, a2 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: and a2, a2, t5 |
| ; RV32IMZBS-NEXT: sw a2, 700(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, t2, 31 |
| ; RV32IMZBS-NEXT: seqz a4, a4 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: and a2, a4, a2 |
| ; RV32IMZBS-NEXT: sw a2, 708(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a2, a0, 5 |
| ; RV32IMZBS-NEXT: or a4, a7, a5 |
| ; RV32IMZBS-NEXT: sw a4, 704(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a4, a1, 32 |
| ; RV32IMZBS-NEXT: or a3, a3, t3 |
| ; RV32IMZBS-NEXT: sw a3, 712(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, a0, 6 |
| ; RV32IMZBS-NEXT: seqz a5, s0 |
| ; RV32IMZBS-NEXT: addi a5, a5, -1 |
| ; RV32IMZBS-NEXT: and a5, a5, t6 |
| ; RV32IMZBS-NEXT: sw a5, 692(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a5, a1, 64 |
| ; RV32IMZBS-NEXT: seqz a7, t1 |
| ; RV32IMZBS-NEXT: addi a7, a7, -1 |
| ; RV32IMZBS-NEXT: and a7, a7, s1 |
| ; RV32IMZBS-NEXT: sw a7, 688(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a7, a0, 7 |
| ; RV32IMZBS-NEXT: seqz t0, t0 |
| ; RV32IMZBS-NEXT: addi t0, t0, -1 |
| ; RV32IMZBS-NEXT: and t0, t0, s3 |
| ; RV32IMZBS-NEXT: sw t0, 676(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi t0, a1, 128 |
| ; RV32IMZBS-NEXT: seqz t3, t4 |
| ; RV32IMZBS-NEXT: addi t3, t3, -1 |
| ; RV32IMZBS-NEXT: and a6, t3, a6 |
| ; RV32IMZBS-NEXT: sw a6, 672(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a6, a0, 8 |
| ; RV32IMZBS-NEXT: seqz a4, a4 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: and a2, a4, a2 |
| ; RV32IMZBS-NEXT: sw a2, 664(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a2, a1, 256 |
| ; RV32IMZBS-NEXT: seqz a4, a5 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: and a3, a4, a3 |
| ; RV32IMZBS-NEXT: sw a3, 684(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a3, a0, 9 |
| ; RV32IMZBS-NEXT: seqz a4, t0 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: and a5, a4, a7 |
| ; RV32IMZBS-NEXT: andi a4, a1, 512 |
| ; RV32IMZBS-NEXT: seqz a2, a2 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: and a7, a2, a6 |
| ; RV32IMZBS-NEXT: slli a2, a0, 10 |
| ; RV32IMZBS-NEXT: seqz a4, a4 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: and a3, a4, a3 |
| ; RV32IMZBS-NEXT: sw a3, 660(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a3, a1, 1024 |
| ; RV32IMZBS-NEXT: seqz a3, a3 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: and a2, a3, a2 |
| ; RV32IMZBS-NEXT: sw a2, 696(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: not a2, a1 |
| ; RV32IMZBS-NEXT: bexti a3, a2, 11 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 11 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 636(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 12 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 12 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 632(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 13 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 13 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 644(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 14 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 14 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 668(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 15 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 15 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 680(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 16 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 16 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 612(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 17 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 17 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 608(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 18 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 18 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 620(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 19 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 19 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 648(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 20 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 20 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 652(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 21 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 21 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 656(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 22 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 22 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 600(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 23 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 23 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 596(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 24 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 24 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 604(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 25 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 25 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 616(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 26 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 26 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 624(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 27 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 27 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 628(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 28 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 28 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 640(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a3, a2, 29 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, a0, 29 |
| ; RV32IMZBS-NEXT: and a3, a3, a4 |
| ; RV32IMZBS-NEXT: sw a3, 592(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a1, a1, 1 |
| ; RV32IMZBS-NEXT: seqz a1, a1 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: and a1, a1, a0 |
| ; RV32IMZBS-NEXT: sw a1, 584(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: slli a0, a0, 30 |
| ; RV32IMZBS-NEXT: bexti a1, a2, 30 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: and a0, a1, a0 |
| ; RV32IMZBS-NEXT: sw a0, 588(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 2 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 1 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 580(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 4 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 2 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 576(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 8 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 3 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 568(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 16 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 4 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 560(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 32 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 5 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 556(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 64 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 6 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 564(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 128 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 7 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 540(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 256 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 8 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 536(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 512 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 9 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 544(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: andi a0, s2, 1024 |
| ; RV32IMZBS-NEXT: seqz a0, a0 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: slli a1, t2, 10 |
| ; RV32IMZBS-NEXT: and a0, a0, a1 |
| ; RV32IMZBS-NEXT: sw a0, 572(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: not a0, s2 |
| ; RV32IMZBS-NEXT: bexti a1, a0, 11 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t2, 11 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 516(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a0, 12 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t2, 12 |
| ; RV32IMZBS-NEXT: and s9, a1, a2 |
| ; RV32IMZBS-NEXT: bexti a1, a0, 13 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t2, 13 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 524(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a0, 14 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t2, 14 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 548(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a0, 15 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t2, 15 |
| ; RV32IMZBS-NEXT: and a1, a1, a2 |
| ; RV32IMZBS-NEXT: sw a1, 552(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a0, 16 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a3, t2, 16 |
| ; RV32IMZBS-NEXT: and s5, a1, a3 |
| ; RV32IMZBS-NEXT: bexti a1, a0, 17 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a2, t2, 17 |
| ; RV32IMZBS-NEXT: and s3, a1, a2 |
| ; RV32IMZBS-NEXT: bexti a1, a0, 18 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a4, t2, 18 |
| ; RV32IMZBS-NEXT: and s10, a1, a4 |
| ; RV32IMZBS-NEXT: bexti a1, a0, 19 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a4, t2, 19 |
| ; RV32IMZBS-NEXT: and a1, a1, a4 |
| ; RV32IMZBS-NEXT: sw a1, 520(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a0, 20 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli s0, t2, 20 |
| ; RV32IMZBS-NEXT: and a1, a1, s0 |
| ; RV32IMZBS-NEXT: sw a1, 528(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a0, 21 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli s1, t2, 21 |
| ; RV32IMZBS-NEXT: and a1, a1, s1 |
| ; RV32IMZBS-NEXT: sw a1, 532(sp) # 4-byte Folded Spill |
| ; RV32IMZBS-NEXT: bexti a1, a0, 22 |
| ; RV32IMZBS-NEXT: addi a1, a1, -1 |
| ; RV32IMZBS-NEXT: slli a4, t2, 22 |
| ; RV32IMZBS-NEXT: and s0, a1, a4 |
| ; RV32IMZBS-NEXT: bexti a2, a0, 23 |
| ; RV32IMZBS-NEXT: addi a2, a2, -1 |
| ; RV32IMZBS-NEXT: slli a4, t2, 23 |
| ; RV32IMZBS-NEXT: and t6, a2, a4 |
| ; RV32IMZBS-NEXT: bexti a3, a0, 24 |
| ; RV32IMZBS-NEXT: addi a3, a3, -1 |
| ; RV32IMZBS-NEXT: slli a4, t2, 24 |
| ; RV32IMZBS-NEXT: and s1, a3, a4 |
| ; RV32IMZBS-NEXT: bexti a4, a0, 25 |
| ; RV32IMZBS-NEXT: addi a4, a4, -1 |
| ; RV32IMZBS-NEXT: slli t0, t2, 25 |
| ; RV32IMZBS-NEXT: and s7, a4, t0 |
| ; RV32IMZBS-NEXT: bexti t0, a0, 26 |
| ; RV32IMZBS-NEXT: addi t0, t0, -1 |
| ; RV32IMZBS-NEXT: slli t3, t2, 26 |
| ; RV32IMZBS-NEXT: and s8, t0, t3 |
| ; RV32IMZBS-NEXT: bexti t3, a0, 27 |
| ; RV32IMZBS-NEXT: addi t3, t3, -1 |
| ; RV32IMZBS-NEXT: slli t5, t2, 27 |
| ; RV32IMZBS-NEXT: and s11, t3, t5 |
| ; RV32IMZBS-NEXT: bexti t5, a0, 28 |
| ; RV32IMZBS-NEXT: addi t5, t5, -1 |
| ; RV32IMZBS-NEXT: slli a6, t2, 28 |
| ; RV32IMZBS-NEXT: and t5, t5, a6 |
| ; RV32IMZBS-NEXT: bexti a6, a0, 29 |
| ; RV32IMZBS-NEXT: addi a6, a6, -1 |
| ; RV32IMZBS-NEXT: slli t1, t2, 29 |
| ; RV32IMZBS-NEXT: and t4, a6, t1 |
| ; RV32IMZBS-NEXT: andi t1, s2, 1 |
| ; RV32IMZBS-NEXT: seqz t1, t1 |
| ; RV32IMZBS-NEXT: addi t1, t1, -1 |
| ; RV32IMZBS-NEXT: and t1, t1, t2 |
| ; RV32IMZBS-NEXT: slli t2, t2, 30 |
| ; RV32IMZBS-NEXT: bexti a0, a0, 30 |
| ; RV32IMZBS-NEXT: addi a0, a0, -1 |
| ; RV32IMZBS-NEXT: and t3, a0, t2 |
| ; RV32IMZBS-NEXT: lw a0, 692(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 584(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t2, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 688(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 676(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s2, a0, a1 |
| ; RV32IMZBS-NEXT: lw a0, 672(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 664(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a6, a0, a1 |
| ; RV32IMZBS-NEXT: xor a7, a5, a7 |
| ; RV32IMZBS-NEXT: lw a0, 636(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 632(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, a0, a1 |
| ; RV32IMZBS-NEXT: lw a0, 612(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a3, 608(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a0, a3 |
| ; RV32IMZBS-NEXT: lw a0, 600(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a4, 596(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a4, a0, a4 |
| ; RV32IMZBS-NEXT: lw a0, 592(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a5, 588(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a5, a0, a5 |
| ; RV32IMZBS-NEXT: lw a0, 580(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, t1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 576(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a1, 568(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, a0, a1 |
| ; RV32IMZBS-NEXT: lw a1, 560(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw a2, 556(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: lw a2, 540(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw ra, 536(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, a2, ra |
| ; RV32IMZBS-NEXT: lw ra, 516(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor s9, ra, s9 |
| ; RV32IMZBS-NEXT: xor s3, s5, s3 |
| ; RV32IMZBS-NEXT: xor t6, s0, t6 |
| ; RV32IMZBS-NEXT: xor t3, t4, t3 |
| ; RV32IMZBS-NEXT: xor t2, t2, s2 |
| ; RV32IMZBS-NEXT: lw t4, 684(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a6, a6, t4 |
| ; RV32IMZBS-NEXT: lw t4, 660(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, a7, t4 |
| ; RV32IMZBS-NEXT: lw t4, 644(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t0, t4 |
| ; RV32IMZBS-NEXT: lw t4, 620(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t4, a3, t4 |
| ; RV32IMZBS-NEXT: lw a3, 604(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a4, a4, a3 |
| ; RV32IMZBS-NEXT: lw a3, 700(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a5, a3 |
| ; RV32IMZBS-NEXT: xor a5, t1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 564(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a1, a1, a0 |
| ; RV32IMZBS-NEXT: lw a0, 544(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, a2, a0 |
| ; RV32IMZBS-NEXT: lw a0, 524(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, s9, a0 |
| ; RV32IMZBS-NEXT: xor s0, s3, s10 |
| ; RV32IMZBS-NEXT: xor t6, t6, s1 |
| ; RV32IMZBS-NEXT: lw a0, 708(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a0, t3, a0 |
| ; RV32IMZBS-NEXT: lw s1, 704(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli t3, s1, 4 |
| ; RV32IMZBS-NEXT: lw s3, 744(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and s1, s1, s3 |
| ; RV32IMZBS-NEXT: and t3, t3, s3 |
| ; RV32IMZBS-NEXT: slli s1, s1, 4 |
| ; RV32IMZBS-NEXT: or t3, t3, s1 |
| ; RV32IMZBS-NEXT: lw s2, 712(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: srli s1, s2, 4 |
| ; RV32IMZBS-NEXT: and s2, s2, s3 |
| ; RV32IMZBS-NEXT: and s1, s1, s3 |
| ; RV32IMZBS-NEXT: slli s2, s2, 4 |
| ; RV32IMZBS-NEXT: or s1, s1, s2 |
| ; RV32IMZBS-NEXT: xor a6, t2, a6 |
| ; RV32IMZBS-NEXT: lw t2, 696(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, a7, t2 |
| ; RV32IMZBS-NEXT: lw t2, 668(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t0, t2 |
| ; RV32IMZBS-NEXT: lw t2, 648(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t2, t4, t2 |
| ; RV32IMZBS-NEXT: lw t4, 616(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a4, a4, t4 |
| ; RV32IMZBS-NEXT: xor a1, a5, a1 |
| ; RV32IMZBS-NEXT: lw a5, 572(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, a2, a5 |
| ; RV32IMZBS-NEXT: lw a5, 548(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a5, t1, a5 |
| ; RV32IMZBS-NEXT: lw t1, 520(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t1, s0, t1 |
| ; RV32IMZBS-NEXT: xor t4, t6, s7 |
| ; RV32IMZBS-NEXT: xor a6, a6, a7 |
| ; RV32IMZBS-NEXT: lw a7, 680(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, t0, a7 |
| ; RV32IMZBS-NEXT: lw t0, 652(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor t0, t2, t0 |
| ; RV32IMZBS-NEXT: lw t2, 624(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a4, a4, t2 |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: lw a2, 552(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, a5, a2 |
| ; RV32IMZBS-NEXT: lw a5, 528(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a5, t1, a5 |
| ; RV32IMZBS-NEXT: xor t1, t4, s8 |
| ; RV32IMZBS-NEXT: xor a6, a6, a7 |
| ; RV32IMZBS-NEXT: lw a7, 656(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a7, t0, a7 |
| ; RV32IMZBS-NEXT: lw t0, 628(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a4, a4, t0 |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: lw a2, 532(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, a5, a2 |
| ; RV32IMZBS-NEXT: xor a5, t1, s11 |
| ; RV32IMZBS-NEXT: srli t0, t3, 2 |
| ; RV32IMZBS-NEXT: and t1, t3, s6 |
| ; RV32IMZBS-NEXT: and t0, t0, s6 |
| ; RV32IMZBS-NEXT: slli t1, t1, 2 |
| ; RV32IMZBS-NEXT: or t0, t0, t1 |
| ; RV32IMZBS-NEXT: srli t1, s1, 2 |
| ; RV32IMZBS-NEXT: and t2, s1, s6 |
| ; RV32IMZBS-NEXT: and t1, t1, s6 |
| ; RV32IMZBS-NEXT: slli t2, t2, 2 |
| ; RV32IMZBS-NEXT: or t1, t1, t2 |
| ; RV32IMZBS-NEXT: xor a6, a6, a7 |
| ; RV32IMZBS-NEXT: lw a7, 640(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a4, a4, a7 |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: xor a2, a5, t5 |
| ; RV32IMZBS-NEXT: xor a4, a6, a4 |
| ; RV32IMZBS-NEXT: xor a1, a1, a2 |
| ; RV32IMZBS-NEXT: srli a2, t0, 1 |
| ; RV32IMZBS-NEXT: and a5, t0, s4 |
| ; RV32IMZBS-NEXT: xor a3, a4, a3 |
| ; RV32IMZBS-NEXT: srli a4, t1, 1 |
| ; RV32IMZBS-NEXT: and a6, t1, s4 |
| ; RV32IMZBS-NEXT: and a2, a2, s4 |
| ; RV32IMZBS-NEXT: slli a5, a5, 1 |
| ; RV32IMZBS-NEXT: and a4, a4, s4 |
| ; RV32IMZBS-NEXT: slli a6, a6, 1 |
| ; RV32IMZBS-NEXT: xor a7, a1, a0 |
| ; RV32IMZBS-NEXT: or a1, a2, a5 |
| ; RV32IMZBS-NEXT: or a0, a4, a6 |
| ; RV32IMZBS-NEXT: srli a2, a3, 8 |
| ; RV32IMZBS-NEXT: srli a4, a3, 24 |
| ; RV32IMZBS-NEXT: slli a5, a3, 24 |
| ; RV32IMZBS-NEXT: lw t0, 740(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: and a3, a3, t0 |
| ; RV32IMZBS-NEXT: and a2, a2, t0 |
| ; RV32IMZBS-NEXT: or a2, a2, a4 |
| ; RV32IMZBS-NEXT: srli a4, a7, 8 |
| ; RV32IMZBS-NEXT: slli a3, a3, 8 |
| ; RV32IMZBS-NEXT: or a3, a5, a3 |
| ; RV32IMZBS-NEXT: srli a5, a7, 24 |
| ; RV32IMZBS-NEXT: and a4, a4, t0 |
| ; RV32IMZBS-NEXT: or a4, a4, a5 |
| ; RV32IMZBS-NEXT: slli a5, a7, 24 |
| ; RV32IMZBS-NEXT: and a6, a7, t0 |
| ; RV32IMZBS-NEXT: slli a6, a6, 8 |
| ; RV32IMZBS-NEXT: or a5, a5, a6 |
| ; RV32IMZBS-NEXT: lui a6, 349525 |
| ; RV32IMZBS-NEXT: addi a6, a6, 1364 |
| ; RV32IMZBS-NEXT: or a2, a3, a2 |
| ; RV32IMZBS-NEXT: or a4, a5, a4 |
| ; RV32IMZBS-NEXT: srli a3, a2, 4 |
| ; RV32IMZBS-NEXT: and a2, a2, s3 |
| ; RV32IMZBS-NEXT: srli a5, a4, 4 |
| ; RV32IMZBS-NEXT: and a4, a4, s3 |
| ; RV32IMZBS-NEXT: and a3, a3, s3 |
| ; RV32IMZBS-NEXT: slli a2, a2, 4 |
| ; RV32IMZBS-NEXT: and a5, a5, s3 |
| ; RV32IMZBS-NEXT: slli a4, a4, 4 |
| ; RV32IMZBS-NEXT: or a2, a3, a2 |
| ; RV32IMZBS-NEXT: or a4, a5, a4 |
| ; RV32IMZBS-NEXT: srli a3, a2, 2 |
| ; RV32IMZBS-NEXT: and a2, a2, s6 |
| ; RV32IMZBS-NEXT: srli a5, a4, 2 |
| ; RV32IMZBS-NEXT: and a4, a4, s6 |
| ; RV32IMZBS-NEXT: and a3, a3, s6 |
| ; RV32IMZBS-NEXT: slli a2, a2, 2 |
| ; RV32IMZBS-NEXT: and a5, a5, s6 |
| ; RV32IMZBS-NEXT: slli a4, a4, 2 |
| ; RV32IMZBS-NEXT: or a2, a3, a2 |
| ; RV32IMZBS-NEXT: or a4, a5, a4 |
| ; RV32IMZBS-NEXT: srli a3, a2, 1 |
| ; RV32IMZBS-NEXT: srli a5, a4, 1 |
| ; RV32IMZBS-NEXT: and a3, a3, a6 |
| ; RV32IMZBS-NEXT: and a5, a5, a6 |
| ; RV32IMZBS-NEXT: and a2, a2, s4 |
| ; RV32IMZBS-NEXT: slli a2, a2, 1 |
| ; RV32IMZBS-NEXT: or a2, a3, a2 |
| ; RV32IMZBS-NEXT: and a3, a4, s4 |
| ; RV32IMZBS-NEXT: slli a3, a3, 1 |
| ; RV32IMZBS-NEXT: or a3, a5, a3 |
| ; RV32IMZBS-NEXT: srli a2, a2, 1 |
| ; RV32IMZBS-NEXT: srli a3, a3, 1 |
| ; RV32IMZBS-NEXT: lw a4, 720(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a2, a2, a4 |
| ; RV32IMZBS-NEXT: lw a4, 716(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: xor a3, a3, a4 |
| ; RV32IMZBS-NEXT: srli a4, a2, 8 |
| ; RV32IMZBS-NEXT: srli a5, a2, 24 |
| ; RV32IMZBS-NEXT: slli a6, a2, 24 |
| ; RV32IMZBS-NEXT: and a2, a2, t0 |
| ; RV32IMZBS-NEXT: and a4, a4, t0 |
| ; RV32IMZBS-NEXT: or a4, a4, a5 |
| ; RV32IMZBS-NEXT: srli a5, a3, 8 |
| ; RV32IMZBS-NEXT: slli a2, a2, 8 |
| ; RV32IMZBS-NEXT: or a2, a6, a2 |
| ; RV32IMZBS-NEXT: srli a6, a3, 24 |
| ; RV32IMZBS-NEXT: and a5, a5, t0 |
| ; RV32IMZBS-NEXT: or a5, a5, a6 |
| ; RV32IMZBS-NEXT: and a6, a3, t0 |
| ; RV32IMZBS-NEXT: slli a3, a3, 24 |
| ; RV32IMZBS-NEXT: slli a6, a6, 8 |
| ; RV32IMZBS-NEXT: or a3, a3, a6 |
| ; RV32IMZBS-NEXT: or a2, a2, a4 |
| ; RV32IMZBS-NEXT: or a3, a3, a5 |
| ; RV32IMZBS-NEXT: srli a4, a2, 4 |
| ; RV32IMZBS-NEXT: and a2, a2, s3 |
| ; RV32IMZBS-NEXT: srli a5, a3, 4 |
| ; RV32IMZBS-NEXT: and a3, a3, s3 |
| ; RV32IMZBS-NEXT: and a4, a4, s3 |
| ; RV32IMZBS-NEXT: and a5, a5, s3 |
| ; RV32IMZBS-NEXT: slli a2, a2, 4 |
| ; RV32IMZBS-NEXT: slli a3, a3, 4 |
| ; RV32IMZBS-NEXT: or a2, a4, a2 |
| ; RV32IMZBS-NEXT: or a3, a5, a3 |
| ; RV32IMZBS-NEXT: srli a4, a2, 2 |
| ; RV32IMZBS-NEXT: and a2, a2, s6 |
| ; RV32IMZBS-NEXT: srli a5, a3, 2 |
| ; RV32IMZBS-NEXT: and a3, a3, s6 |
| ; RV32IMZBS-NEXT: and a4, a4, s6 |
| ; RV32IMZBS-NEXT: and a5, a5, s6 |
| ; RV32IMZBS-NEXT: slli a2, a2, 2 |
| ; RV32IMZBS-NEXT: slli a3, a3, 2 |
| ; RV32IMZBS-NEXT: or a2, a4, a2 |
| ; RV32IMZBS-NEXT: or a3, a5, a3 |
| ; RV32IMZBS-NEXT: srli a4, a2, 1 |
| ; RV32IMZBS-NEXT: and a2, a2, s4 |
| ; RV32IMZBS-NEXT: srli a5, a3, 1 |
| ; RV32IMZBS-NEXT: and a3, a3, s4 |
| ; RV32IMZBS-NEXT: and a4, a4, s4 |
| ; RV32IMZBS-NEXT: and a5, a5, s4 |
| ; RV32IMZBS-NEXT: slli a2, a2, 1 |
| ; RV32IMZBS-NEXT: or a2, a4, a2 |
| ; RV32IMZBS-NEXT: slli a3, a3, 1 |
| ; RV32IMZBS-NEXT: or a3, a5, a3 |
| ; RV32IMZBS-NEXT: lw a4, 732(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: sw a2, 0(a4) |
| ; RV32IMZBS-NEXT: sw a1, 4(a4) |
| ; RV32IMZBS-NEXT: sw a3, 8(a4) |
| ; RV32IMZBS-NEXT: sw a0, 12(a4) |
| ; RV32IMZBS-NEXT: lw a4, 736(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: sw a2, 0(a4) |
| ; RV32IMZBS-NEXT: sw a1, 4(a4) |
| ; RV32IMZBS-NEXT: sw a3, 8(a4) |
| ; RV32IMZBS-NEXT: sw a0, 12(a4) |
| ; RV32IMZBS-NEXT: lw ra, 796(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s0, 792(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s1, 788(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s2, 784(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s3, 780(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s4, 776(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s5, 772(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s6, 768(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s7, 764(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s8, 760(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s9, 756(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s10, 752(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: lw s11, 748(sp) # 4-byte Folded Reload |
| ; RV32IMZBS-NEXT: addi sp, sp, 800 |
| ; RV32IMZBS-NEXT: ret |
| ; |
| ; RV64IMZBS-LABEL: commutative_clmulr_v2i64: |
| ; RV64IMZBS: # %bb.0: |
| ; RV64IMZBS-NEXT: addi sp, sp, -1088 |
| ; RV64IMZBS-NEXT: sd ra, 1080(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s0, 1072(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s1, 1064(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s2, 1056(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s3, 1048(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s4, 1040(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s5, 1032(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s6, 1024(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s7, 1016(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s8, 1008(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s9, 1000(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s10, 992(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd s11, 984(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd a5, 976(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sd a4, 968(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: mv t3, a3 |
| ; RV64IMZBS-NEXT: mv t5, a0 |
| ; RV64IMZBS-NEXT: srli a5, a2, 24 |
| ; RV64IMZBS-NEXT: lui s9, 4080 |
| ; RV64IMZBS-NEXT: srli a7, a2, 8 |
| ; RV64IMZBS-NEXT: li s8, 255 |
| ; RV64IMZBS-NEXT: srli a4, a2, 40 |
| ; RV64IMZBS-NEXT: lui a6, 16 |
| ; RV64IMZBS-NEXT: srli t0, a2, 56 |
| ; RV64IMZBS-NEXT: srliw t1, a2, 24 |
| ; RV64IMZBS-NEXT: slli a0, a2, 56 |
| ; RV64IMZBS-NEXT: sd a0, 920(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: lui s10, 61681 |
| ; RV64IMZBS-NEXT: lui s1, 209715 |
| ; RV64IMZBS-NEXT: lui s4, 349525 |
| ; RV64IMZBS-NEXT: srli t2, t5, 24 |
| ; RV64IMZBS-NEXT: srli t6, t5, 8 |
| ; RV64IMZBS-NEXT: srli s5, t5, 40 |
| ; RV64IMZBS-NEXT: srli s2, t5, 56 |
| ; RV64IMZBS-NEXT: srliw s3, t5, 24 |
| ; RV64IMZBS-NEXT: slli a0, t5, 56 |
| ; RV64IMZBS-NEXT: sd a0, 912(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: srli s7, a3, 24 |
| ; RV64IMZBS-NEXT: srli a3, a3, 8 |
| ; RV64IMZBS-NEXT: srli s6, t3, 40 |
| ; RV64IMZBS-NEXT: srli s11, t3, 56 |
| ; RV64IMZBS-NEXT: and a5, a5, s9 |
| ; RV64IMZBS-NEXT: slli s8, s8, 24 |
| ; RV64IMZBS-NEXT: and a7, a7, s8 |
| ; RV64IMZBS-NEXT: or a5, a7, a5 |
| ; RV64IMZBS-NEXT: srliw s0, t3, 24 |
| ; RV64IMZBS-NEXT: addi a0, a6, -256 |
| ; RV64IMZBS-NEXT: and a4, a4, a0 |
| ; RV64IMZBS-NEXT: or a6, a4, t0 |
| ; RV64IMZBS-NEXT: and a4, a2, s9 |
| ; RV64IMZBS-NEXT: slli t1, t1, 32 |
| ; RV64IMZBS-NEXT: addi s10, s10, -241 |
| ; RV64IMZBS-NEXT: addi ra, s1, 819 |
| ; RV64IMZBS-NEXT: addi a7, s4, 1365 |
| ; RV64IMZBS-NEXT: slli a4, a4, 24 |
| ; RV64IMZBS-NEXT: or a4, a4, t1 |
| ; RV64IMZBS-NEXT: slli t0, s10, 32 |
| ; RV64IMZBS-NEXT: add s10, s10, t0 |
| ; RV64IMZBS-NEXT: slli t0, ra, 32 |
| ; RV64IMZBS-NEXT: add ra, ra, t0 |
| ; RV64IMZBS-NEXT: slli t0, a7, 32 |
| ; RV64IMZBS-NEXT: add t4, a7, t0 |
| ; RV64IMZBS-NEXT: slli a7, t3, 56 |
| ; RV64IMZBS-NEXT: and t0, t2, s9 |
| ; RV64IMZBS-NEXT: and t1, t6, s8 |
| ; RV64IMZBS-NEXT: or t0, t1, t0 |
| ; RV64IMZBS-NEXT: srli t1, a1, 24 |
| ; RV64IMZBS-NEXT: and t2, s5, a0 |
| ; RV64IMZBS-NEXT: or t2, t2, s2 |
| ; RV64IMZBS-NEXT: lui s5, 4080 |
| ; RV64IMZBS-NEXT: and t6, t5, s5 |
| ; RV64IMZBS-NEXT: slli s3, s3, 32 |
| ; RV64IMZBS-NEXT: slli t6, t6, 24 |
| ; RV64IMZBS-NEXT: or t6, t6, s3 |
| ; RV64IMZBS-NEXT: srli s1, a1, 8 |
| ; RV64IMZBS-NEXT: and s2, s7, s5 |
| ; RV64IMZBS-NEXT: sd s8, 960(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: and a3, a3, s8 |
| ; RV64IMZBS-NEXT: or a3, a3, s2 |
| ; RV64IMZBS-NEXT: srli s2, a1, 40 |
| ; RV64IMZBS-NEXT: and s3, s6, a0 |
| ; RV64IMZBS-NEXT: or s3, s3, s11 |
| ; RV64IMZBS-NEXT: and s4, t3, s5 |
| ; RV64IMZBS-NEXT: slli s0, s0, 32 |
| ; RV64IMZBS-NEXT: slli s4, s4, 24 |
| ; RV64IMZBS-NEXT: or s0, s4, s0 |
| ; RV64IMZBS-NEXT: srli s4, a1, 56 |
| ; RV64IMZBS-NEXT: and t1, t1, s5 |
| ; RV64IMZBS-NEXT: and s1, s1, s8 |
| ; RV64IMZBS-NEXT: or t1, s1, t1 |
| ; RV64IMZBS-NEXT: srliw s1, a1, 24 |
| ; RV64IMZBS-NEXT: and s2, s2, a0 |
| ; RV64IMZBS-NEXT: or s2, s2, s4 |
| ; RV64IMZBS-NEXT: and s4, a1, s5 |
| ; RV64IMZBS-NEXT: slli s1, s1, 32 |
| ; RV64IMZBS-NEXT: slli s4, s4, 24 |
| ; RV64IMZBS-NEXT: or s1, s4, s1 |
| ; RV64IMZBS-NEXT: slli s4, a1, 56 |
| ; RV64IMZBS-NEXT: mv s5, a0 |
| ; RV64IMZBS-NEXT: sd a0, 936(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: and a2, a2, a0 |
| ; RV64IMZBS-NEXT: and a0, t5, a0 |
| ; RV64IMZBS-NEXT: and t3, t3, s5 |
| ; RV64IMZBS-NEXT: and a1, a1, s5 |
| ; RV64IMZBS-NEXT: slli a2, a2, 40 |
| ; RV64IMZBS-NEXT: slli a0, a0, 40 |
| ; RV64IMZBS-NEXT: slli t3, t3, 40 |
| ; RV64IMZBS-NEXT: slli a1, a1, 40 |
| ; RV64IMZBS-NEXT: or a5, a5, a6 |
| ; RV64IMZBS-NEXT: ld a6, 920(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: or a2, a6, a2 |
| ; RV64IMZBS-NEXT: or a6, t0, t2 |
| ; RV64IMZBS-NEXT: ld t0, 912(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: or a0, t0, a0 |
| ; RV64IMZBS-NEXT: or a3, a3, s3 |
| ; RV64IMZBS-NEXT: or a7, a7, t3 |
| ; RV64IMZBS-NEXT: or t0, t1, s2 |
| ; RV64IMZBS-NEXT: or a1, s4, a1 |
| ; RV64IMZBS-NEXT: or a2, a2, a4 |
| ; RV64IMZBS-NEXT: or a0, a0, t6 |
| ; RV64IMZBS-NEXT: or a4, a7, s0 |
| ; RV64IMZBS-NEXT: or a1, a1, s1 |
| ; RV64IMZBS-NEXT: or a2, a2, a5 |
| ; RV64IMZBS-NEXT: or a0, a0, a6 |
| ; RV64IMZBS-NEXT: or a3, a4, a3 |
| ; RV64IMZBS-NEXT: or a1, a1, t0 |
| ; RV64IMZBS-NEXT: srli a4, a2, 4 |
| ; RV64IMZBS-NEXT: sd s10, 952(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: and a2, a2, s10 |
| ; RV64IMZBS-NEXT: srli a5, a0, 4 |
| ; RV64IMZBS-NEXT: and a0, a0, s10 |
| ; RV64IMZBS-NEXT: srli a6, a3, 4 |
| ; RV64IMZBS-NEXT: and a3, a3, s10 |
| ; RV64IMZBS-NEXT: srli a7, a1, 4 |
| ; RV64IMZBS-NEXT: and a1, a1, s10 |
| ; RV64IMZBS-NEXT: and a4, a4, s10 |
| ; RV64IMZBS-NEXT: slli a2, a2, 4 |
| ; RV64IMZBS-NEXT: and a5, a5, s10 |
| ; RV64IMZBS-NEXT: slli a0, a0, 4 |
| ; RV64IMZBS-NEXT: and a6, a6, s10 |
| ; RV64IMZBS-NEXT: slli a3, a3, 4 |
| ; RV64IMZBS-NEXT: and a7, a7, s10 |
| ; RV64IMZBS-NEXT: slli a1, a1, 4 |
| ; RV64IMZBS-NEXT: or a2, a4, a2 |
| ; RV64IMZBS-NEXT: or a0, a5, a0 |
| ; RV64IMZBS-NEXT: or a3, a6, a3 |
| ; RV64IMZBS-NEXT: or a1, a7, a1 |
| ; RV64IMZBS-NEXT: srli a4, a2, 2 |
| ; RV64IMZBS-NEXT: sd ra, 944(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: and a2, a2, ra |
| ; RV64IMZBS-NEXT: srli a5, a0, 2 |
| ; RV64IMZBS-NEXT: and a0, a0, ra |
| ; RV64IMZBS-NEXT: srli a6, a3, 2 |
| ; RV64IMZBS-NEXT: and a3, a3, ra |
| ; RV64IMZBS-NEXT: srli a7, a1, 2 |
| ; RV64IMZBS-NEXT: and a1, a1, ra |
| ; RV64IMZBS-NEXT: and a4, a4, ra |
| ; RV64IMZBS-NEXT: slli a2, a2, 2 |
| ; RV64IMZBS-NEXT: and a5, a5, ra |
| ; RV64IMZBS-NEXT: slli a0, a0, 2 |
| ; RV64IMZBS-NEXT: and a6, a6, ra |
| ; RV64IMZBS-NEXT: slli a3, a3, 2 |
| ; RV64IMZBS-NEXT: and a7, a7, ra |
| ; RV64IMZBS-NEXT: slli a1, a1, 2 |
| ; RV64IMZBS-NEXT: or a2, a4, a2 |
| ; RV64IMZBS-NEXT: or a0, a5, a0 |
| ; RV64IMZBS-NEXT: or a3, a6, a3 |
| ; RV64IMZBS-NEXT: or a1, a7, a1 |
| ; RV64IMZBS-NEXT: srli a4, a2, 1 |
| ; RV64IMZBS-NEXT: sd t4, 928(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: and a2, a2, t4 |
| ; RV64IMZBS-NEXT: srli a5, a0, 1 |
| ; RV64IMZBS-NEXT: and a0, a0, t4 |
| ; RV64IMZBS-NEXT: srli a6, a3, 1 |
| ; RV64IMZBS-NEXT: and a3, a3, t4 |
| ; RV64IMZBS-NEXT: srli a7, a1, 1 |
| ; RV64IMZBS-NEXT: and a1, a1, t4 |
| ; RV64IMZBS-NEXT: and a4, a4, t4 |
| ; RV64IMZBS-NEXT: slli a2, a2, 1 |
| ; RV64IMZBS-NEXT: and a5, a5, t4 |
| ; RV64IMZBS-NEXT: slli t0, a0, 1 |
| ; RV64IMZBS-NEXT: and a6, a6, t4 |
| ; RV64IMZBS-NEXT: slli a3, a3, 1 |
| ; RV64IMZBS-NEXT: and a7, a7, t4 |
| ; RV64IMZBS-NEXT: slli a0, a1, 1 |
| ; RV64IMZBS-NEXT: or t4, a4, a2 |
| ; RV64IMZBS-NEXT: or t5, a5, t0 |
| ; RV64IMZBS-NEXT: srli a2, t0, 63 |
| ; RV64IMZBS-NEXT: or t0, a6, a3 |
| ; RV64IMZBS-NEXT: or s5, a7, a0 |
| ; RV64IMZBS-NEXT: srli a0, a0, 63 |
| ; RV64IMZBS-NEXT: slli a3, t4, 1 |
| ; RV64IMZBS-NEXT: andi a4, t5, 2 |
| ; RV64IMZBS-NEXT: slli a5, t4, 2 |
| ; RV64IMZBS-NEXT: andi a6, t5, 4 |
| ; RV64IMZBS-NEXT: slli a7, t4, 3 |
| ; RV64IMZBS-NEXT: andi t1, t5, 8 |
| ; RV64IMZBS-NEXT: slli t2, t4, 4 |
| ; RV64IMZBS-NEXT: andi t3, t5, 16 |
| ; RV64IMZBS-NEXT: slli t6, t4, 5 |
| ; RV64IMZBS-NEXT: andi s0, t5, 32 |
| ; RV64IMZBS-NEXT: slli s1, t4, 6 |
| ; RV64IMZBS-NEXT: andi s2, t5, 64 |
| ; RV64IMZBS-NEXT: slli s3, t4, 7 |
| ; RV64IMZBS-NEXT: slli s4, t4, 63 |
| ; RV64IMZBS-NEXT: seqz a2, a2 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: and a1, a2, s4 |
| ; RV64IMZBS-NEXT: sd a1, 912(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: slli a2, t0, 63 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 920(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, t5, 128 |
| ; RV64IMZBS-NEXT: seqz a2, a4 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 880(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: slli a2, t4, 8 |
| ; RV64IMZBS-NEXT: seqz a3, a6 |
| ; RV64IMZBS-NEXT: addi a3, a3, -1 |
| ; RV64IMZBS-NEXT: and a3, a3, a5 |
| ; RV64IMZBS-NEXT: sd a3, 864(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a3, t5, 256 |
| ; RV64IMZBS-NEXT: seqz a4, t1 |
| ; RV64IMZBS-NEXT: addi a4, a4, -1 |
| ; RV64IMZBS-NEXT: and a1, a4, a7 |
| ; RV64IMZBS-NEXT: sd a1, 848(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: slli a4, t4, 9 |
| ; RV64IMZBS-NEXT: seqz a5, t3 |
| ; RV64IMZBS-NEXT: addi a5, a5, -1 |
| ; RV64IMZBS-NEXT: and t2, a5, t2 |
| ; RV64IMZBS-NEXT: andi a5, t5, 512 |
| ; RV64IMZBS-NEXT: seqz a6, s0 |
| ; RV64IMZBS-NEXT: addi a6, a6, -1 |
| ; RV64IMZBS-NEXT: and t3, a6, t6 |
| ; RV64IMZBS-NEXT: slli a6, t4, 10 |
| ; RV64IMZBS-NEXT: seqz a7, s2 |
| ; RV64IMZBS-NEXT: addi a7, a7, -1 |
| ; RV64IMZBS-NEXT: and a1, a7, s1 |
| ; RV64IMZBS-NEXT: sd a1, 888(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a7, t5, 1024 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: and t6, a0, s3 |
| ; RV64IMZBS-NEXT: slli a0, t4, 11 |
| ; RV64IMZBS-NEXT: seqz a3, a3 |
| ; RV64IMZBS-NEXT: addi a3, a3, -1 |
| ; RV64IMZBS-NEXT: and s2, a3, a2 |
| ; RV64IMZBS-NEXT: not a2, t5 |
| ; RV64IMZBS-NEXT: seqz a3, a5 |
| ; RV64IMZBS-NEXT: addi a3, a3, -1 |
| ; RV64IMZBS-NEXT: and a3, a3, a4 |
| ; RV64IMZBS-NEXT: sd a3, 840(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: slli a3, t4, 12 |
| ; RV64IMZBS-NEXT: seqz a4, a7 |
| ; RV64IMZBS-NEXT: addi a4, a4, -1 |
| ; RV64IMZBS-NEXT: and a1, a4, a6 |
| ; RV64IMZBS-NEXT: sd a1, 904(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a4, a2, 11 |
| ; RV64IMZBS-NEXT: addi a4, a4, -1 |
| ; RV64IMZBS-NEXT: and a6, a4, a0 |
| ; RV64IMZBS-NEXT: bexti a0, a2, 12 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 776(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 13 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 13 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 816(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 14 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 14 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 856(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 15 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 15 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 896(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 16 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 16 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 736(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 17 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 17 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 728(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 18 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 18 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 768(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 19 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 19 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 800(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 20 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 20 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 832(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 21 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 21 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 872(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 22 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 22 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 680(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 23 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 23 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 664(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 24 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 24 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 712(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 25 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 25 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 752(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 26 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 26 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 792(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 27 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 27 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 808(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 28 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 28 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 824(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 29 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 29 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 608(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 30 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 30 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 600(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sraiw a0, t5, 31 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 31 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 648(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 32 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 32 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 672(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 33 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 33 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 704(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 34 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 34 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 744(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 35 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 35 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 760(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 36 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 36 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 784(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 37 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 37 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 552(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 38 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 38 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 544(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 39 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 39 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 568(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 40 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 40 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 592(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 41 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 41 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 640(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 42 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 42 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 656(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 43 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 43 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 688(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 44 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 44 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 696(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 45 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 45 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 720(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 46 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 46 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 496(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 47 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 47 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 488(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 48 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 48 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 520(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 49 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 49 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 536(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 50 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 50 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 560(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 51 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 51 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 576(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 52 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 52 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 584(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 53 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 53 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 616(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 54 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 54 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 624(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 55 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 55 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 632(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 56 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 56 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 464(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 57 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 57 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 456(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 58 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 58 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 472(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 59 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 59 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 480(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 60 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 60 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 504(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a0, a2, 61 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a3, t4, 61 |
| ; RV64IMZBS-NEXT: and a0, a0, a3 |
| ; RV64IMZBS-NEXT: sd a0, 512(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, t5, 1 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: and t5, a0, t4 |
| ; RV64IMZBS-NEXT: slli t4, t4, 62 |
| ; RV64IMZBS-NEXT: bexti a0, a2, 62 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: and a0, a0, t4 |
| ; RV64IMZBS-NEXT: sd a0, 528(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 2 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 1 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 448(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 4 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 2 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 432(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 8 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 3 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 408(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 16 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 4 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 400(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 32 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 5 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 376(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 64 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 6 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 440(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 128 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 7 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 360(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 256 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 8 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 344(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 512 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 9 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 392(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a0, s5, 1024 |
| ; RV64IMZBS-NEXT: seqz a0, a0 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: slli a2, t0, 10 |
| ; RV64IMZBS-NEXT: and a0, a0, a2 |
| ; RV64IMZBS-NEXT: sd a0, 424(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: not a0, s5 |
| ; RV64IMZBS-NEXT: bexti a2, a0, 11 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 11 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 304(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 12 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 12 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 296(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 13 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 13 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 328(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 14 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 14 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 368(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 15 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 15 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 416(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 16 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 16 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 248(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 17 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 17 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 232(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 18 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 18 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 280(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 19 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 19 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 320(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 20 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 20 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 352(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 21 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 21 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 384(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 22 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 22 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 192(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 23 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 23 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 168(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 24 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 24 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 224(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 25 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 25 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 256(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 26 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 26 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 288(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 27 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 27 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 312(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 28 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 28 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 336(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 29 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 29 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 136(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 30 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 30 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 112(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: sraiw a2, s5, 31 |
| ; RV64IMZBS-NEXT: seqz a2, a2 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 31 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 152(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 32 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 32 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 184(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 33 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 33 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 216(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 34 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 34 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 240(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 35 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 35 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 264(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 36 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 36 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 272(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 37 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 37 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 56(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 38 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 38 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 48(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 39 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 39 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 72(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 40 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 40 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 96(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 41 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 41 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 144(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 42 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 42 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 160(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 43 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 43 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 176(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 44 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 44 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 200(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 45 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 45 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 208(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 46 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 46 |
| ; RV64IMZBS-NEXT: and s11, a2, a3 |
| ; RV64IMZBS-NEXT: bexti a2, a0, 47 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a4, t0, 47 |
| ; RV64IMZBS-NEXT: and s9, a2, a4 |
| ; RV64IMZBS-NEXT: bexti a2, a0, 48 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 48 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 24(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 49 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 49 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 40(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 50 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 50 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 64(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 51 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli s0, t0, 51 |
| ; RV64IMZBS-NEXT: and a2, a2, s0 |
| ; RV64IMZBS-NEXT: sd a2, 80(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 52 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli s1, t0, 52 |
| ; RV64IMZBS-NEXT: and a2, a2, s1 |
| ; RV64IMZBS-NEXT: sd a2, 88(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 53 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 53 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 104(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 54 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 54 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 128(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 55 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 55 |
| ; RV64IMZBS-NEXT: and a2, a2, a3 |
| ; RV64IMZBS-NEXT: sd a2, 120(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: bexti a2, a0, 56 |
| ; RV64IMZBS-NEXT: addi a2, a2, -1 |
| ; RV64IMZBS-NEXT: slli a3, t0, 56 |
| ; RV64IMZBS-NEXT: and s6, a2, a3 |
| ; RV64IMZBS-NEXT: bexti a3, a0, 57 |
| ; RV64IMZBS-NEXT: addi a3, a3, -1 |
| ; RV64IMZBS-NEXT: slli a4, t0, 57 |
| ; RV64IMZBS-NEXT: and s4, a3, a4 |
| ; RV64IMZBS-NEXT: bexti a4, a0, 58 |
| ; RV64IMZBS-NEXT: addi a4, a4, -1 |
| ; RV64IMZBS-NEXT: slli a5, t0, 58 |
| ; RV64IMZBS-NEXT: and s7, a4, a5 |
| ; RV64IMZBS-NEXT: bexti a5, a0, 59 |
| ; RV64IMZBS-NEXT: addi a5, a5, -1 |
| ; RV64IMZBS-NEXT: slli a7, t0, 59 |
| ; RV64IMZBS-NEXT: and s8, a5, a7 |
| ; RV64IMZBS-NEXT: bexti a7, a0, 60 |
| ; RV64IMZBS-NEXT: addi a7, a7, -1 |
| ; RV64IMZBS-NEXT: slli t1, t0, 60 |
| ; RV64IMZBS-NEXT: and s10, a7, t1 |
| ; RV64IMZBS-NEXT: bexti t1, a0, 61 |
| ; RV64IMZBS-NEXT: addi t1, t1, -1 |
| ; RV64IMZBS-NEXT: slli a1, t0, 61 |
| ; RV64IMZBS-NEXT: and a1, t1, a1 |
| ; RV64IMZBS-NEXT: sd a1, 16(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: andi a1, s5, 1 |
| ; RV64IMZBS-NEXT: seqz a1, a1 |
| ; RV64IMZBS-NEXT: addi a1, a1, -1 |
| ; RV64IMZBS-NEXT: and a1, a1, t0 |
| ; RV64IMZBS-NEXT: slli t0, t0, 62 |
| ; RV64IMZBS-NEXT: bexti a0, a0, 62 |
| ; RV64IMZBS-NEXT: addi a0, a0, -1 |
| ; RV64IMZBS-NEXT: and a0, a0, t0 |
| ; RV64IMZBS-NEXT: sd a0, 32(sp) # 8-byte Folded Spill |
| ; RV64IMZBS-NEXT: ld a0, 880(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s3, t5, a0 |
| ; RV64IMZBS-NEXT: ld a0, 864(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a2, 848(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s5, a0, a2 |
| ; RV64IMZBS-NEXT: xor t2, t2, t3 |
| ; RV64IMZBS-NEXT: xor t4, t6, s2 |
| ; RV64IMZBS-NEXT: ld a0, 776(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t5, a6, a0 |
| ; RV64IMZBS-NEXT: ld a0, 736(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a2, 728(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t6, a0, a2 |
| ; RV64IMZBS-NEXT: ld a0, 680(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s0, 664(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s0, a0, s0 |
| ; RV64IMZBS-NEXT: ld a0, 608(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s1, 600(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s1, a0, s1 |
| ; RV64IMZBS-NEXT: ld a0, 552(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a2, 544(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s2, a0, a2 |
| ; RV64IMZBS-NEXT: ld a0, 496(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a2, 488(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, a0, a2 |
| ; RV64IMZBS-NEXT: ld a0, 464(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a2, 456(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t1, a0, a2 |
| ; RV64IMZBS-NEXT: ld a0, 448(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t3, a1, a0 |
| ; RV64IMZBS-NEXT: ld a0, 432(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a1, 408(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: ld a1, 400(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a2, 376(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a1, a2 |
| ; RV64IMZBS-NEXT: ld a2, 360(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a3, 344(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a2, a2, a3 |
| ; RV64IMZBS-NEXT: ld a3, 304(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a4, 296(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a3, a3, a4 |
| ; RV64IMZBS-NEXT: ld a4, 248(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a5, 232(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a4, a4, a5 |
| ; RV64IMZBS-NEXT: ld a5, 192(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a6, 168(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a5, a5, a6 |
| ; RV64IMZBS-NEXT: ld a6, 136(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld a7, 112(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a6, a6, a7 |
| ; RV64IMZBS-NEXT: ld a7, 56(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld ra, 48(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a7, a7, ra |
| ; RV64IMZBS-NEXT: xor s9, s11, s9 |
| ; RV64IMZBS-NEXT: xor s4, s6, s4 |
| ; RV64IMZBS-NEXT: xor s3, s3, s5 |
| ; RV64IMZBS-NEXT: ld s5, 888(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t2, t2, s5 |
| ; RV64IMZBS-NEXT: ld s5, 840(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t4, t4, s5 |
| ; RV64IMZBS-NEXT: ld s5, 816(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t5, t5, s5 |
| ; RV64IMZBS-NEXT: ld s5, 768(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t6, t6, s5 |
| ; RV64IMZBS-NEXT: ld s5, 712(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s0, s0, s5 |
| ; RV64IMZBS-NEXT: ld s5, 648(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s1, s1, s5 |
| ; RV64IMZBS-NEXT: ld s5, 568(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s2, s2, s5 |
| ; RV64IMZBS-NEXT: ld s5, 520(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, t0, s5 |
| ; RV64IMZBS-NEXT: ld s5, 472(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t1, t1, s5 |
| ; RV64IMZBS-NEXT: xor a0, t3, a0 |
| ; RV64IMZBS-NEXT: ld t3, 440(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a1, t3 |
| ; RV64IMZBS-NEXT: ld t3, 392(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a2, a2, t3 |
| ; RV64IMZBS-NEXT: ld t3, 328(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a3, a3, t3 |
| ; RV64IMZBS-NEXT: ld t3, 280(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a4, a4, t3 |
| ; RV64IMZBS-NEXT: ld t3, 224(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a5, a5, t3 |
| ; RV64IMZBS-NEXT: ld t3, 152(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a6, a6, t3 |
| ; RV64IMZBS-NEXT: ld t3, 72(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a7, a7, t3 |
| ; RV64IMZBS-NEXT: ld t3, 24(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t3, s9, t3 |
| ; RV64IMZBS-NEXT: xor s4, s4, s7 |
| ; RV64IMZBS-NEXT: xor t2, s3, t2 |
| ; RV64IMZBS-NEXT: ld s3, 904(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t4, t4, s3 |
| ; RV64IMZBS-NEXT: ld s3, 856(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t5, t5, s3 |
| ; RV64IMZBS-NEXT: ld s3, 800(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t6, t6, s3 |
| ; RV64IMZBS-NEXT: ld s3, 752(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s0, s0, s3 |
| ; RV64IMZBS-NEXT: ld s3, 672(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s1, s1, s3 |
| ; RV64IMZBS-NEXT: ld s3, 592(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s2, s2, s3 |
| ; RV64IMZBS-NEXT: ld s3, 536(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, t0, s3 |
| ; RV64IMZBS-NEXT: ld s3, 480(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t1, t1, s3 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: ld a1, 424(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a2, a1 |
| ; RV64IMZBS-NEXT: ld a2, 368(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a2, a3, a2 |
| ; RV64IMZBS-NEXT: ld a3, 320(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a3, a4, a3 |
| ; RV64IMZBS-NEXT: ld a4, 256(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a4, a5, a4 |
| ; RV64IMZBS-NEXT: ld a5, 184(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a5, a6, a5 |
| ; RV64IMZBS-NEXT: ld a6, 96(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a6, a7, a6 |
| ; RV64IMZBS-NEXT: ld a7, 40(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a7, t3, a7 |
| ; RV64IMZBS-NEXT: xor t3, s4, s8 |
| ; RV64IMZBS-NEXT: xor t2, t2, t4 |
| ; RV64IMZBS-NEXT: ld t4, 896(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t4, t5, t4 |
| ; RV64IMZBS-NEXT: ld t5, 832(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t5, t6, t5 |
| ; RV64IMZBS-NEXT: ld t6, 792(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t6, s0, t6 |
| ; RV64IMZBS-NEXT: ld s0, 704(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s0, s1, s0 |
| ; RV64IMZBS-NEXT: ld s1, 640(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor s1, s2, s1 |
| ; RV64IMZBS-NEXT: ld s2, 560(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, t0, s2 |
| ; RV64IMZBS-NEXT: ld s2, 504(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t1, t1, s2 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: ld a1, 416(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a2, a1 |
| ; RV64IMZBS-NEXT: ld a2, 352(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a2, a3, a2 |
| ; RV64IMZBS-NEXT: ld a3, 288(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a3, a4, a3 |
| ; RV64IMZBS-NEXT: ld a4, 216(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a4, a5, a4 |
| ; RV64IMZBS-NEXT: ld a5, 144(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a5, a6, a5 |
| ; RV64IMZBS-NEXT: ld a6, 64(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a6, a7, a6 |
| ; RV64IMZBS-NEXT: xor a7, t3, s10 |
| ; RV64IMZBS-NEXT: xor t2, t2, t4 |
| ; RV64IMZBS-NEXT: ld t3, 872(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t3, t5, t3 |
| ; RV64IMZBS-NEXT: ld t4, 808(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t4, t6, t4 |
| ; RV64IMZBS-NEXT: ld t5, 744(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t5, s0, t5 |
| ; RV64IMZBS-NEXT: ld t6, 656(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t6, s1, t6 |
| ; RV64IMZBS-NEXT: ld s0, 576(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, t0, s0 |
| ; RV64IMZBS-NEXT: ld s0, 512(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t1, t1, s0 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: ld a1, 384(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a2, a1 |
| ; RV64IMZBS-NEXT: ld a2, 312(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a2, a3, a2 |
| ; RV64IMZBS-NEXT: ld a3, 240(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a3, a4, a3 |
| ; RV64IMZBS-NEXT: ld a4, 160(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a4, a5, a4 |
| ; RV64IMZBS-NEXT: ld a5, 80(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a5, a6, a5 |
| ; RV64IMZBS-NEXT: ld a6, 16(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a6, a7, a6 |
| ; RV64IMZBS-NEXT: xor a7, t2, t3 |
| ; RV64IMZBS-NEXT: ld t2, 824(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t2, t4, t2 |
| ; RV64IMZBS-NEXT: ld t3, 760(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t3, t5, t3 |
| ; RV64IMZBS-NEXT: ld t4, 688(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t4, t6, t4 |
| ; RV64IMZBS-NEXT: ld t5, 584(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, t0, t5 |
| ; RV64IMZBS-NEXT: ld t5, 528(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t1, t1, t5 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: ld a1, 336(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a2, a1 |
| ; RV64IMZBS-NEXT: ld a2, 264(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a2, a3, a2 |
| ; RV64IMZBS-NEXT: ld a3, 176(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a3, a4, a3 |
| ; RV64IMZBS-NEXT: ld a4, 88(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a4, a5, a4 |
| ; RV64IMZBS-NEXT: ld a5, 32(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a5, a6, a5 |
| ; RV64IMZBS-NEXT: xor a6, a7, t2 |
| ; RV64IMZBS-NEXT: ld a7, 784(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a7, t3, a7 |
| ; RV64IMZBS-NEXT: ld t2, 696(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t2, t4, t2 |
| ; RV64IMZBS-NEXT: ld t3, 616(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t0, t0, t3 |
| ; RV64IMZBS-NEXT: ld t3, 912(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor t1, t1, t3 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: ld a1, 272(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a2, a1 |
| ; RV64IMZBS-NEXT: ld a2, 200(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a2, a3, a2 |
| ; RV64IMZBS-NEXT: ld a3, 104(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a3, a4, a3 |
| ; RV64IMZBS-NEXT: ld a4, 920(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a4, a5, a4 |
| ; RV64IMZBS-NEXT: xor a5, a6, a7 |
| ; RV64IMZBS-NEXT: ld a6, 720(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a6, t2, a6 |
| ; RV64IMZBS-NEXT: ld a7, 624(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a7, t0, a7 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: ld a1, 208(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a2, a1 |
| ; RV64IMZBS-NEXT: ld a2, 128(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a2, a3, a2 |
| ; RV64IMZBS-NEXT: xor a3, a5, a6 |
| ; RV64IMZBS-NEXT: ld a5, 632(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a5, a7, a5 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: ld a1, 120(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: xor a1, a2, a1 |
| ; RV64IMZBS-NEXT: xor a3, a3, a5 |
| ; RV64IMZBS-NEXT: xor a0, a0, a1 |
| ; RV64IMZBS-NEXT: xor a1, a3, t1 |
| ; RV64IMZBS-NEXT: xor a0, a0, a4 |
| ; RV64IMZBS-NEXT: srli a2, a1, 40 |
| ; RV64IMZBS-NEXT: srli a3, a1, 56 |
| ; RV64IMZBS-NEXT: srli a4, a1, 24 |
| ; RV64IMZBS-NEXT: srli a5, a1, 8 |
| ; RV64IMZBS-NEXT: srliw a6, a1, 24 |
| ; RV64IMZBS-NEXT: lui t3, 4080 |
| ; RV64IMZBS-NEXT: and a7, a1, t3 |
| ; RV64IMZBS-NEXT: slli t0, a1, 56 |
| ; RV64IMZBS-NEXT: ld t4, 936(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: and a1, a1, t4 |
| ; RV64IMZBS-NEXT: srli t1, a0, 8 |
| ; RV64IMZBS-NEXT: ld t2, 960(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: and a5, a5, t2 |
| ; RV64IMZBS-NEXT: and t1, t1, t2 |
| ; RV64IMZBS-NEXT: srli t2, a0, 40 |
| ; RV64IMZBS-NEXT: and a2, a2, t4 |
| ; RV64IMZBS-NEXT: or a2, a2, a3 |
| ; RV64IMZBS-NEXT: srli a3, a0, 56 |
| ; RV64IMZBS-NEXT: and a4, a4, t3 |
| ; RV64IMZBS-NEXT: or a4, a5, a4 |
| ; RV64IMZBS-NEXT: srli a5, a0, 24 |
| ; RV64IMZBS-NEXT: slli a6, a6, 32 |
| ; RV64IMZBS-NEXT: slli a7, a7, 24 |
| ; RV64IMZBS-NEXT: or a6, a7, a6 |
| ; RV64IMZBS-NEXT: srliw a7, a0, 24 |
| ; RV64IMZBS-NEXT: and a5, a5, t3 |
| ; RV64IMZBS-NEXT: and t3, a0, t3 |
| ; RV64IMZBS-NEXT: and t2, t2, t4 |
| ; RV64IMZBS-NEXT: and t4, a0, t4 |
| ; RV64IMZBS-NEXT: slli a0, a0, 56 |
| ; RV64IMZBS-NEXT: slli a1, a1, 40 |
| ; RV64IMZBS-NEXT: slli a7, a7, 32 |
| ; RV64IMZBS-NEXT: slli t3, t3, 24 |
| ; RV64IMZBS-NEXT: slli t4, t4, 40 |
| ; RV64IMZBS-NEXT: or a1, t0, a1 |
| ; RV64IMZBS-NEXT: or a3, t2, a3 |
| ; RV64IMZBS-NEXT: or a5, t1, a5 |
| ; RV64IMZBS-NEXT: or a7, t3, a7 |
| ; RV64IMZBS-NEXT: or a0, a0, t4 |
| ; RV64IMZBS-NEXT: or a2, a4, a2 |
| ; RV64IMZBS-NEXT: or a1, a1, a6 |
| ; RV64IMZBS-NEXT: or a3, a5, a3 |
| ; RV64IMZBS-NEXT: or a0, a0, a7 |
| ; RV64IMZBS-NEXT: or a1, a1, a2 |
| ; RV64IMZBS-NEXT: or a0, a0, a3 |
| ; RV64IMZBS-NEXT: srli a2, a1, 4 |
| ; RV64IMZBS-NEXT: ld a4, 952(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: and a1, a1, a4 |
| ; RV64IMZBS-NEXT: srli a3, a0, 4 |
| ; RV64IMZBS-NEXT: and a0, a0, a4 |
| ; RV64IMZBS-NEXT: and a2, a2, a4 |
| ; RV64IMZBS-NEXT: slli a1, a1, 4 |
| ; RV64IMZBS-NEXT: and a3, a3, a4 |
| ; RV64IMZBS-NEXT: slli a0, a0, 4 |
| ; RV64IMZBS-NEXT: or a1, a2, a1 |
| ; RV64IMZBS-NEXT: or a0, a3, a0 |
| ; RV64IMZBS-NEXT: srli a2, a1, 2 |
| ; RV64IMZBS-NEXT: ld a4, 944(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: and a1, a1, a4 |
| ; RV64IMZBS-NEXT: srli a3, a0, 2 |
| ; RV64IMZBS-NEXT: and a0, a0, a4 |
| ; RV64IMZBS-NEXT: and a2, a2, a4 |
| ; RV64IMZBS-NEXT: slli a1, a1, 2 |
| ; RV64IMZBS-NEXT: and a3, a3, a4 |
| ; RV64IMZBS-NEXT: slli a0, a0, 2 |
| ; RV64IMZBS-NEXT: or a1, a2, a1 |
| ; RV64IMZBS-NEXT: or a0, a3, a0 |
| ; RV64IMZBS-NEXT: srli a2, a1, 1 |
| ; RV64IMZBS-NEXT: ld a4, 928(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: and a1, a1, a4 |
| ; RV64IMZBS-NEXT: srli a3, a0, 1 |
| ; RV64IMZBS-NEXT: and a0, a0, a4 |
| ; RV64IMZBS-NEXT: and a2, a2, a4 |
| ; RV64IMZBS-NEXT: slli a1, a1, 1 |
| ; RV64IMZBS-NEXT: and a3, a3, a4 |
| ; RV64IMZBS-NEXT: slli a0, a0, 1 |
| ; RV64IMZBS-NEXT: or a1, a2, a1 |
| ; RV64IMZBS-NEXT: or a0, a3, a0 |
| ; RV64IMZBS-NEXT: ld a2, 968(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: sd a1, 0(a2) |
| ; RV64IMZBS-NEXT: sd a0, 8(a2) |
| ; RV64IMZBS-NEXT: ld a2, 976(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: sd a1, 0(a2) |
| ; RV64IMZBS-NEXT: sd a0, 8(a2) |
| ; RV64IMZBS-NEXT: ld ra, 1080(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s0, 1072(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s1, 1064(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s2, 1056(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s3, 1048(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s4, 1040(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s5, 1032(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s6, 1024(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s7, 1016(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s8, 1008(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s9, 1000(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s10, 992(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: ld s11, 984(sp) # 8-byte Folded Reload |
| ; RV64IMZBS-NEXT: addi sp, sp, 1088 |
| ; RV64IMZBS-NEXT: ret |
| %x.ext = zext <2 x i64> %x to <2 x i128> |
| %y.ext = zext <2 x i64> %y to <2 x i128> |
| %clmul_xy = call <2 x i128> @llvm.clmul.v2i128(<2 x i128> %x.ext, <2 x i128> %y.ext) |
| %clmul_yx = call <2 x i128> @llvm.clmul.v2i128(<2 x i128> %y.ext, <2 x i128> %x.ext) |
| %clmul_xy_lshr = lshr <2 x i128> %clmul_xy, splat (i128 63) |
| %clmul_yx_lshr = lshr <2 x i128> %clmul_yx, splat (i128 63) |
| %clmulh_xy = trunc <2 x i128> %clmul_xy_lshr to <2 x i64> |
| %clmulh_yx = trunc <2 x i128> %clmul_yx_lshr to <2 x i64> |
| store <2 x i64> %clmulh_xy, ptr %p0 |
| store <2 x i64> %clmulh_yx, ptr %p1 |
| ret void |
| } |
| ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: |
| ; CHECK-I: {{.*}} |
| ; CHECK-M: {{.*}} |
| ; CHECK-ZBS: {{.*}} |