blob: f013dbbf5be4144fccdb3061d566268e14fab12e [file]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=powerpc64-- | FileCheck %s --check-prefixes=CHECK,BE
; RUN: llc < %s -mtriple=powerpc64le-- | FileCheck %s --check-prefixes=CHECK,LE
define <16 x i8> @clmul_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
; BE-LABEL: clmul_v16i8:
; BE: # %bb.0:
; BE-NEXT: addis 3, 2, .LCPI0_0@toc@ha
; BE-NEXT: vspltisb 4, 2
; BE-NEXT: addi 3, 3, .LCPI0_0@toc@l
; BE-NEXT: vand 4, 3, 4
; BE-NEXT: lvx 10, 0, 3
; BE-NEXT: addis 3, 2, .LCPI0_1@toc@ha
; BE-NEXT: vspltisb 5, 1
; BE-NEXT: addi 3, 3, .LCPI0_1@toc@l
; BE-NEXT: vspltisb 0, 4
; BE-NEXT: vand 5, 3, 5
; BE-NEXT: vspltisb 6, 8
; BE-NEXT: vspltisb 8, -1
; BE-NEXT: vmuloub 9, 2, 4
; BE-NEXT: vmuleub 4, 2, 4
; BE-NEXT: vand 1, 3, 0
; BE-NEXT: vperm 4, 4, 9, 10
; BE-NEXT: vmuloub 9, 2, 5
; BE-NEXT: vmuleub 5, 2, 5
; BE-NEXT: vand 7, 3, 6
; BE-NEXT: vaddubm 6, 6, 6
; BE-NEXT: vperm 5, 5, 9, 10
; BE-NEXT: vmuloub 9, 2, 1
; BE-NEXT: vmuleub 1, 2, 1
; BE-NEXT: vperm 1, 1, 9, 10
; BE-NEXT: vmuloub 9, 2, 7
; BE-NEXT: vmuleub 7, 2, 7
; BE-NEXT: vand 6, 3, 6
; BE-NEXT: vperm 7, 7, 9, 10
; BE-NEXT: vmuloub 9, 2, 6
; BE-NEXT: vmuleub 6, 2, 6
; BE-NEXT: vperm 6, 6, 9, 10
; BE-NEXT: lvx 9, 0, 3
; BE-NEXT: vslb 0, 0, 0
; BE-NEXT: vslb 8, 8, 8
; BE-NEXT: vand 0, 3, 0
; BE-NEXT: vand 8, 3, 8
; BE-NEXT: vand 3, 3, 9
; BE-NEXT: vmuloub 9, 2, 0
; BE-NEXT: vmuleub 0, 2, 0
; BE-NEXT: vxor 4, 5, 4
; BE-NEXT: vperm 0, 0, 9, 10
; BE-NEXT: vmuloub 9, 2, 8
; BE-NEXT: vmuleub 8, 2, 8
; BE-NEXT: vmuloub 5, 2, 3
; BE-NEXT: vmuleub 2, 2, 3
; BE-NEXT: vxor 3, 4, 1
; BE-NEXT: vxor 3, 3, 7
; BE-NEXT: vperm 2, 2, 5, 10
; BE-NEXT: vxor 3, 3, 6
; BE-NEXT: vxor 2, 3, 2
; BE-NEXT: vperm 8, 8, 9, 10
; BE-NEXT: vxor 2, 2, 0
; BE-NEXT: vxor 2, 2, 8
; BE-NEXT: blr
;
; LE-LABEL: clmul_v16i8:
; LE: # %bb.0:
; LE-NEXT: vspltisb 4, 2
; LE-NEXT: addis 3, 2, .LCPI0_0@toc@ha
; LE-NEXT: vspltisb 5, 1
; LE-NEXT: addi 3, 3, .LCPI0_0@toc@l
; LE-NEXT: xxland 36, 35, 36
; LE-NEXT: xxland 37, 35, 37
; LE-NEXT: vspltisb 0, 4
; LE-NEXT: vspltisb 1, 8
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: vmuloub 7, 2, 4
; LE-NEXT: vmuleub 4, 2, 4
; LE-NEXT: addis 3, 2, .LCPI0_1@toc@ha
; LE-NEXT: addi 3, 3, .LCPI0_1@toc@l
; LE-NEXT: xxswapd 38, 0
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: vperm 4, 4, 7, 6
; LE-NEXT: vmuloub 7, 2, 5
; LE-NEXT: vmuleub 5, 2, 5
; LE-NEXT: vperm 5, 5, 7, 6
; LE-NEXT: xxland 39, 35, 32
; LE-NEXT: vslb 0, 0, 0
; LE-NEXT: vmuloub 8, 2, 7
; LE-NEXT: vmuleub 7, 2, 7
; LE-NEXT: xxland 32, 35, 32
; LE-NEXT: vperm 7, 7, 8, 6
; LE-NEXT: xxland 40, 35, 33
; LE-NEXT: vaddubm 1, 1, 1
; LE-NEXT: vmuloub 9, 2, 8
; LE-NEXT: vmuleub 8, 2, 8
; LE-NEXT: xxland 33, 35, 33
; LE-NEXT: vperm 8, 8, 9, 6
; LE-NEXT: vmuloub 9, 2, 1
; LE-NEXT: vmuleub 1, 2, 1
; LE-NEXT: vperm 1, 1, 9, 6
; LE-NEXT: xxland 41, 35, 0
; LE-NEXT: xxlxor 0, 37, 36
; LE-NEXT: vmuloub 10, 2, 9
; LE-NEXT: vmuleub 9, 2, 9
; LE-NEXT: xxlxor 0, 0, 39
; LE-NEXT: xxlxor 0, 0, 40
; LE-NEXT: xxlxor 0, 0, 33
; LE-NEXT: vperm 9, 9, 10, 6
; LE-NEXT: vmuloub 10, 2, 0
; LE-NEXT: vmuleub 0, 2, 0
; LE-NEXT: xxlxor 0, 0, 41
; LE-NEXT: vperm 0, 0, 10, 6
; LE-NEXT: xxleqv 42, 42, 42
; LE-NEXT: vslb 10, 10, 10
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: xxland 35, 35, 42
; LE-NEXT: vmuloub 10, 2, 3
; LE-NEXT: vmuleub 2, 2, 3
; LE-NEXT: vperm 2, 2, 10, 6
; LE-NEXT: xxlxor 34, 0, 34
; LE-NEXT: blr
%res = call <16 x i8> @llvm.clmul.v16i8(<16 x i8> %a, <16 x i8> %b)
ret <16 x i8> %res
}
define <8 x i16> @clmul_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
; BE-LABEL: clmul_v8i16:
; BE: # %bb.0:
; BE-NEXT: addis 3, 2, .LCPI1_0@toc@ha
; BE-NEXT: vspltish 6, 2
; BE-NEXT: addi 3, 3, .LCPI1_0@toc@l
; BE-NEXT: vand 4, 3, 6
; BE-NEXT: lvx 13, 0, 3
; BE-NEXT: addis 3, 2, .LCPI1_1@toc@ha
; BE-NEXT: addi 3, 3, .LCPI1_1@toc@l
; BE-NEXT: vspltish 7, 1
; BE-NEXT: lvx 14, 0, 3
; BE-NEXT: addis 3, 2, .LCPI1_2@toc@ha
; BE-NEXT: addi 3, 3, .LCPI1_2@toc@l
; BE-NEXT: vspltish 8, 4
; BE-NEXT: lvx 15, 0, 3
; BE-NEXT: addis 3, 2, .LCPI1_3@toc@ha
; BE-NEXT: addi 3, 3, .LCPI1_3@toc@l
; BE-NEXT: vspltish 9, 8
; BE-NEXT: vand 5, 3, 7
; BE-NEXT: lvx 16, 0, 3
; BE-NEXT: addis 3, 2, .LCPI1_4@toc@ha
; BE-NEXT: addi 3, 3, .LCPI1_4@toc@l
; BE-NEXT: vspltisb 12, -1
; BE-NEXT: lvx 17, 0, 3
; BE-NEXT: vand 0, 3, 8
; BE-NEXT: vand 1, 3, 9
; BE-NEXT: vslh 10, 8, 8
; BE-NEXT: vsldoi 7, 7, 7, 1
; BE-NEXT: vsldoi 6, 6, 6, 1
; BE-NEXT: vsldoi 8, 8, 8, 1
; BE-NEXT: vslh 11, 9, 9
; BE-NEXT: vadduhm 9, 9, 9
; BE-NEXT: vslh 12, 12, 12
; BE-NEXT: vand 9, 3, 9
; BE-NEXT: vand 10, 3, 10
; BE-NEXT: vand 7, 3, 7
; BE-NEXT: vand 6, 3, 6
; BE-NEXT: vand 8, 3, 8
; BE-NEXT: vand 11, 3, 11
; BE-NEXT: vand 12, 3, 12
; BE-NEXT: vand 13, 3, 13
; BE-NEXT: vand 14, 3, 14
; BE-NEXT: vand 15, 3, 15
; BE-NEXT: vand 16, 3, 16
; BE-NEXT: vand 3, 3, 17
; BE-NEXT: vxor 17, 17, 17
; BE-NEXT: vmladduhm 4, 2, 4, 17
; BE-NEXT: vmladduhm 5, 2, 5, 17
; BE-NEXT: vmladduhm 0, 2, 0, 17
; BE-NEXT: vmladduhm 1, 2, 1, 17
; BE-NEXT: vmladduhm 9, 2, 9, 17
; BE-NEXT: vmladduhm 10, 2, 10, 17
; BE-NEXT: vmladduhm 7, 2, 7, 17
; BE-NEXT: vmladduhm 6, 2, 6, 17
; BE-NEXT: vmladduhm 8, 2, 8, 17
; BE-NEXT: vmladduhm 11, 2, 11, 17
; BE-NEXT: vmladduhm 12, 2, 12, 17
; BE-NEXT: vmladduhm 13, 2, 13, 17
; BE-NEXT: vmladduhm 14, 2, 14, 17
; BE-NEXT: vmladduhm 15, 2, 15, 17
; BE-NEXT: vmladduhm 16, 2, 16, 17
; BE-NEXT: vmladduhm 2, 2, 3, 17
; BE-NEXT: vxor 3, 5, 4
; BE-NEXT: vxor 3, 3, 0
; BE-NEXT: vxor 3, 3, 1
; BE-NEXT: vxor 3, 3, 9
; BE-NEXT: vxor 3, 3, 13
; BE-NEXT: vxor 3, 3, 10
; BE-NEXT: vxor 3, 3, 14
; BE-NEXT: vxor 3, 3, 7
; BE-NEXT: vxor 3, 3, 6
; BE-NEXT: vxor 3, 3, 8
; BE-NEXT: vxor 3, 3, 11
; BE-NEXT: vxor 3, 3, 15
; BE-NEXT: vxor 3, 3, 16
; BE-NEXT: vxor 2, 3, 2
; BE-NEXT: vxor 2, 2, 12
; BE-NEXT: blr
;
; LE-LABEL: clmul_v8i16:
; LE: # %bb.0:
; LE-NEXT: vspltish 5, 2
; LE-NEXT: vspltish 0, 1
; LE-NEXT: addis 3, 2, .LCPI1_0@toc@ha
; LE-NEXT: xxland 41, 35, 37
; LE-NEXT: vspltish 1, 4
; LE-NEXT: vspltish 4, 8
; LE-NEXT: addi 3, 3, .LCPI1_0@toc@l
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: vsldoi 6, 0, 0, 1
; LE-NEXT: xxland 32, 35, 32
; LE-NEXT: vsldoi 7, 5, 5, 1
; LE-NEXT: vxor 5, 5, 5
; LE-NEXT: vmladduhm 9, 2, 9, 5
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: addis 3, 2, .LCPI1_1@toc@ha
; LE-NEXT: addi 3, 3, .LCPI1_1@toc@l
; LE-NEXT: vsldoi 8, 1, 1, 1
; LE-NEXT: xxlxor 0, 32, 41
; LE-NEXT: xxland 32, 35, 33
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: xxland 32, 35, 36
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: vadduhm 0, 4, 4
; LE-NEXT: vslh 4, 4, 4
; LE-NEXT: xxland 32, 35, 32
; LE-NEXT: xxland 36, 35, 36
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: vmladduhm 4, 2, 4, 5
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI1_2@toc@ha
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: addi 3, 3, .LCPI1_2@toc@l
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: vslh 0, 1, 1
; LE-NEXT: xxland 32, 35, 32
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI1_3@toc@ha
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: addi 3, 3, .LCPI1_3@toc@l
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: xxland 32, 35, 38
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: xxland 32, 35, 39
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: xxland 32, 35, 40
; LE-NEXT: vmladduhm 0, 2, 0, 5
; LE-NEXT: xxlxor 0, 0, 32
; LE-NEXT: xxlxor 0, 0, 36
; LE-NEXT: xxland 36, 35, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI1_4@toc@ha
; LE-NEXT: vmladduhm 4, 2, 4, 5
; LE-NEXT: addi 3, 3, .LCPI1_4@toc@l
; LE-NEXT: xxlxor 0, 0, 36
; LE-NEXT: xxland 36, 35, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: vmladduhm 4, 2, 4, 5
; LE-NEXT: xxlxor 0, 0, 36
; LE-NEXT: xxland 36, 35, 1
; LE-NEXT: vmladduhm 4, 2, 4, 5
; LE-NEXT: xxlxor 0, 0, 36
; LE-NEXT: xxleqv 36, 36, 36
; LE-NEXT: vslh 4, 4, 4
; LE-NEXT: xxland 35, 35, 36
; LE-NEXT: vmladduhm 2, 2, 3, 5
; LE-NEXT: xxlxor 34, 0, 34
; LE-NEXT: blr
%res = call <8 x i16> @llvm.clmul.v8i16(<8 x i16> %a, <8 x i16> %b)
ret <8 x i16> %res
}
define <4 x i32> @clmul_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
; BE-LABEL: clmul_v4i32:
; BE: # %bb.0:
; BE-NEXT: stdu 1, -368(1)
; BE-NEXT: li 3, 176
; BE-NEXT: vspltisb 4, -16
; BE-NEXT: vxor 9, 9, 9
; BE-NEXT: stvx 20, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 192
; BE-NEXT: vspltisb 5, 1
; BE-NEXT: stvx 21, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 208
; BE-NEXT: vsububm 4, 5, 4
; BE-NEXT: vspltisw 5, -16
; BE-NEXT: stvx 22, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 224
; BE-NEXT: vand 6, 3, 4
; BE-NEXT: stvx 23, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 240
; BE-NEXT: stvx 24, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 256
; BE-NEXT: stvx 25, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 272
; BE-NEXT: vand 8, 2, 4
; BE-NEXT: stvx 26, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 288
; BE-NEXT: stvx 27, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 304
; BE-NEXT: vrlw 10, 6, 5
; BE-NEXT: stvx 28, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 320
; BE-NEXT: stvx 29, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 336
; BE-NEXT: stvx 30, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 352
; BE-NEXT: stvx 31, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 160
; BE-NEXT: stvx 4, 1, 3 # 16-byte Folded Spill
; BE-NEXT: vmsumuhm 4, 8, 10, 9
; BE-NEXT: li 3, 96
; BE-NEXT: stvx 4, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addis 3, 2, .LCPI2_0@toc@ha
; BE-NEXT: addi 3, 3, .LCPI2_0@toc@l
; BE-NEXT: lvx 4, 0, 3
; BE-NEXT: li 3, 144
; BE-NEXT: stvx 4, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addis 3, 2, .LCPI2_1@toc@ha
; BE-NEXT: vand 16, 2, 4
; BE-NEXT: addi 3, 3, .LCPI2_1@toc@l
; BE-NEXT: vand 13, 3, 4
; BE-NEXT: lvx 4, 0, 3
; BE-NEXT: li 3, 128
; BE-NEXT: stvx 4, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addis 3, 2, .LCPI2_2@toc@ha
; BE-NEXT: addi 3, 3, .LCPI2_2@toc@l
; BE-NEXT: lvx 14, 0, 3
; BE-NEXT: li 3, 112
; BE-NEXT: vand 15, 2, 4
; BE-NEXT: vand 17, 2, 14
; BE-NEXT: vmulouh 2, 16, 6
; BE-NEXT: stvx 2, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 64
; BE-NEXT: vand 12, 3, 4
; BE-NEXT: vmsumuhm 2, 16, 10, 9
; BE-NEXT: stvx 2, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 80
; BE-NEXT: vmulouh 2, 16, 12
; BE-NEXT: stvx 2, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 96
; BE-NEXT: lvx 2, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 64
; BE-NEXT: vand 18, 3, 14
; BE-NEXT: vrlw 19, 13, 5
; BE-NEXT: vrlw 31, 12, 5
; BE-NEXT: vrlw 30, 18, 5
; BE-NEXT: vmsumuhm 29, 17, 10, 9
; BE-NEXT: vmsumuhm 10, 15, 10, 9
; BE-NEXT: vmsumuhm 28, 8, 19, 9
; BE-NEXT: vmsumuhm 27, 17, 31, 9
; BE-NEXT: vmsumuhm 26, 15, 30, 9
; BE-NEXT: vmsumuhm 25, 16, 31, 9
; BE-NEXT: vmsumuhm 24, 17, 30, 9
; BE-NEXT: vmsumuhm 23, 15, 19, 9
; BE-NEXT: vmsumuhm 22, 16, 19, 9
; BE-NEXT: vmsumuhm 21, 8, 30, 9
; BE-NEXT: vmsumuhm 20, 15, 31, 9
; BE-NEXT: vmsumuhm 30, 16, 30, 9
; BE-NEXT: vmsumuhm 31, 8, 31, 9
; BE-NEXT: vmsumuhm 9, 17, 19, 9
; BE-NEXT: vmulouh 19, 16, 13
; BE-NEXT: vmulouh 16, 16, 18
; BE-NEXT: vmulouh 11, 15, 18
; BE-NEXT: vmulouh 1, 17, 18
; BE-NEXT: vmulouh 18, 8, 18
; BE-NEXT: vmulouh 4, 8, 13
; BE-NEXT: vmulouh 7, 15, 13
; BE-NEXT: vmulouh 13, 17, 13
; BE-NEXT: vmulouh 0, 17, 12
; BE-NEXT: vmulouh 17, 17, 6
; BE-NEXT: vmulouh 3, 8, 6
; BE-NEXT: vmulouh 8, 8, 12
; BE-NEXT: vmulouh 12, 15, 12
; BE-NEXT: vmulouh 6, 15, 6
; BE-NEXT: vslw 15, 2, 5
; BE-NEXT: lvx 2, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 112
; BE-NEXT: vadduwm 3, 3, 15
; BE-NEXT: vslw 2, 2, 5
; BE-NEXT: vslw 29, 29, 5
; BE-NEXT: vslw 10, 10, 5
; BE-NEXT: vslw 28, 28, 5
; BE-NEXT: vadduwm 4, 4, 28
; BE-NEXT: vslw 27, 27, 5
; BE-NEXT: vadduwm 0, 0, 27
; BE-NEXT: vslw 26, 26, 5
; BE-NEXT: vslw 25, 25, 5
; BE-NEXT: vslw 24, 24, 5
; BE-NEXT: vslw 23, 23, 5
; BE-NEXT: vslw 22, 22, 5
; BE-NEXT: vslw 21, 21, 5
; BE-NEXT: vslw 20, 20, 5
; BE-NEXT: vslw 30, 30, 5
; BE-NEXT: vslw 31, 31, 5
; BE-NEXT: vadduwm 8, 8, 31
; BE-NEXT: vslw 5, 9, 5
; BE-NEXT: lvx 9, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 80
; BE-NEXT: vadduwm 5, 13, 5
; BE-NEXT: vadduwm 2, 9, 2
; BE-NEXT: vadduwm 9, 18, 21
; BE-NEXT: vxor 2, 4, 2
; BE-NEXT: lvx 4, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 144
; BE-NEXT: vadduwm 4, 4, 25
; BE-NEXT: vxor 3, 3, 4
; BE-NEXT: vadduwm 4, 19, 22
; BE-NEXT: vxor 2, 2, 0
; BE-NEXT: vadduwm 0, 1, 24
; BE-NEXT: vxor 4, 9, 4
; BE-NEXT: vadduwm 9, 16, 30
; BE-NEXT: vxor 3, 3, 0
; BE-NEXT: vadduwm 0, 17, 29
; BE-NEXT: vxor 4, 4, 0
; BE-NEXT: vadduwm 0, 11, 26
; BE-NEXT: vxor 2, 2, 0
; BE-NEXT: vadduwm 0, 7, 23
; BE-NEXT: vxor 8, 8, 9
; BE-NEXT: vxor 3, 3, 0
; BE-NEXT: vadduwm 0, 12, 20
; BE-NEXT: vxor 5, 8, 5
; BE-NEXT: vxor 4, 4, 0
; BE-NEXT: vadduwm 0, 6, 10
; BE-NEXT: vxor 5, 5, 0
; BE-NEXT: lvx 0, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 160
; BE-NEXT: vand 2, 2, 0
; BE-NEXT: lvx 0, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 128
; BE-NEXT: vand 3, 3, 0
; BE-NEXT: lvx 0, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 352
; BE-NEXT: lvx 31, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 336
; BE-NEXT: lvx 30, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 320
; BE-NEXT: vand 4, 4, 14
; BE-NEXT: lvx 29, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 304
; BE-NEXT: lvx 28, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 288
; BE-NEXT: lvx 27, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 272
; BE-NEXT: vor 2, 3, 2
; BE-NEXT: lvx 26, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 256
; BE-NEXT: lvx 25, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 240
; BE-NEXT: lvx 24, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 224
; BE-NEXT: vand 5, 5, 0
; BE-NEXT: lvx 23, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 208
; BE-NEXT: lvx 22, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 192
; BE-NEXT: vor 2, 2, 4
; BE-NEXT: lvx 21, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 176
; BE-NEXT: lvx 20, 1, 3 # 16-byte Folded Reload
; BE-NEXT: vor 2, 2, 5
; BE-NEXT: addi 1, 1, 368
; BE-NEXT: blr
;
; LE-LABEL: clmul_v4i32:
; LE: # %bb.0:
; LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha
; LE-NEXT: vspltisb 4, -16
; LE-NEXT: vspltisb 5, 1
; LE-NEXT: addi 3, 3, .LCPI2_0@toc@l
; LE-NEXT: vsububm 4, 5, 4
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: addis 3, 2, .LCPI2_1@toc@ha
; LE-NEXT: xxland 37, 35, 36
; LE-NEXT: xxland 38, 34, 36
; LE-NEXT: addi 3, 3, .LCPI2_1@toc@l
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI2_2@toc@ha
; LE-NEXT: xxland 32, 34, 0
; LE-NEXT: xxland 39, 35, 0
; LE-NEXT: addi 3, 3, .LCPI2_2@toc@l
; LE-NEXT: vmuluwm 1, 0, 5
; LE-NEXT: vmuluwm 8, 6, 7
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: xxlxor 1, 40, 33
; LE-NEXT: xxland 33, 35, 2
; LE-NEXT: xxland 40, 34, 3
; LE-NEXT: xxland 35, 35, 3
; LE-NEXT: xxland 34, 34, 2
; LE-NEXT: vmuluwm 9, 8, 1
; LE-NEXT: vmuluwm 10, 0, 1
; LE-NEXT: xxlxor 1, 1, 41
; LE-NEXT: vmuluwm 9, 2, 3
; LE-NEXT: xxlxor 1, 1, 41
; LE-NEXT: vmuluwm 9, 6, 5
; LE-NEXT: xxland 0, 1, 0
; LE-NEXT: xxlxor 1, 41, 42
; LE-NEXT: vmuluwm 9, 8, 3
; LE-NEXT: xxlxor 1, 1, 41
; LE-NEXT: vmuluwm 9, 2, 7
; LE-NEXT: xxlxor 1, 1, 41
; LE-NEXT: vmuluwm 9, 6, 3
; LE-NEXT: vmuluwm 3, 0, 3
; LE-NEXT: xxland 1, 1, 36
; LE-NEXT: vmuluwm 4, 0, 7
; LE-NEXT: xxlor 0, 1, 0
; LE-NEXT: xxlxor 1, 41, 36
; LE-NEXT: vmuluwm 4, 8, 5
; LE-NEXT: xxlxor 1, 1, 36
; LE-NEXT: vmuluwm 4, 2, 1
; LE-NEXT: vmuluwm 2, 2, 5
; LE-NEXT: xxlxor 1, 1, 36
; LE-NEXT: vmuluwm 4, 6, 1
; LE-NEXT: xxland 1, 1, 3
; LE-NEXT: xxlor 0, 0, 1
; LE-NEXT: xxlxor 1, 36, 35
; LE-NEXT: vmuluwm 3, 8, 7
; LE-NEXT: xxlxor 1, 1, 35
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: xxland 1, 1, 2
; LE-NEXT: xxlor 34, 0, 1
; LE-NEXT: blr
%res = call <4 x i32> @llvm.clmul.v4i32(<4 x i32> %a, <4 x i32> %b)
ret <4 x i32> %res
}
define <2 x i64> @clmul_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
; BE-LABEL: clmul_v2i64:
; BE: # %bb.0:
; BE-NEXT: lis 9, -30584
; BE-NEXT: lis 10, 17476
; BE-NEXT: std 16, -128(1) # 8-byte Folded Spill
; BE-NEXT: lis 7, 4369
; BE-NEXT: lis 8, 8738
; BE-NEXT: std 21, -88(1) # 8-byte Folded Spill
; BE-NEXT: ori 9, 9, 34952
; BE-NEXT: ori 10, 10, 17476
; BE-NEXT: ori 7, 7, 4369
; BE-NEXT: ori 8, 8, 8738
; BE-NEXT: std 17, -120(1) # 8-byte Folded Spill
; BE-NEXT: rldimi 9, 9, 32, 0
; BE-NEXT: rldimi 10, 10, 32, 0
; BE-NEXT: std 18, -112(1) # 8-byte Folded Spill
; BE-NEXT: rldimi 7, 7, 32, 0
; BE-NEXT: rldimi 8, 8, 32, 0
; BE-NEXT: and 21, 5, 10
; BE-NEXT: and 16, 3, 9
; BE-NEXT: std 20, -96(1) # 8-byte Folded Spill
; BE-NEXT: and 20, 3, 7
; BE-NEXT: and 18, 5, 9
; BE-NEXT: std 23, -72(1) # 8-byte Folded Spill
; BE-NEXT: and 23, 3, 8
; BE-NEXT: and 17, 3, 10
; BE-NEXT: mulld 3, 16, 21
; BE-NEXT: std 19, -104(1) # 8-byte Folded Spill
; BE-NEXT: and 19, 5, 8
; BE-NEXT: mr 11, 4
; BE-NEXT: std 3, -168(1) # 8-byte Folded Spill
; BE-NEXT: mulld 3, 23, 18
; BE-NEXT: std 22, -80(1) # 8-byte Folded Spill
; BE-NEXT: and 22, 5, 7
; BE-NEXT: std 3, -216(1) # 8-byte Folded Spill
; BE-NEXT: mulld 3, 17, 21
; BE-NEXT: mulld 4, 23, 22
; BE-NEXT: std 3, -200(1) # 8-byte Folded Spill
; BE-NEXT: std 4, -160(1) # 8-byte Folded Spill
; BE-NEXT: mulld 3, 16, 19
; BE-NEXT: mulld 4, 20, 19
; BE-NEXT: std 3, -184(1) # 8-byte Folded Spill
; BE-NEXT: std 14, -144(1) # 8-byte Folded Spill
; BE-NEXT: mulld 3, 16, 18
; BE-NEXT: std 15, -136(1) # 8-byte Folded Spill
; BE-NEXT: and 15, 6, 10
; BE-NEXT: std 24, -64(1) # 8-byte Folded Spill
; BE-NEXT: mulld 24, 20, 21
; BE-NEXT: std 25, -56(1) # 8-byte Folded Spill
; BE-NEXT: mulld 25, 23, 19
; BE-NEXT: std 26, -48(1) # 8-byte Folded Spill
; BE-NEXT: mulld 26, 17, 22
; BE-NEXT: std 27, -40(1) # 8-byte Folded Spill
; BE-NEXT: mulld 27, 20, 22
; BE-NEXT: std 4, -192(1) # 8-byte Folded Spill
; BE-NEXT: mulld 4, 17, 18
; BE-NEXT: std 3, -208(1) # 8-byte Folded Spill
; BE-NEXT: mulld 21, 23, 21
; BE-NEXT: std 28, -32(1) # 8-byte Folded Spill
; BE-NEXT: mulld 20, 20, 18
; BE-NEXT: std 29, -24(1) # 8-byte Folded Spill
; BE-NEXT: mulld 23, 17, 19
; BE-NEXT: std 30, -16(1) # 8-byte Folded Spill
; BE-NEXT: std 31, -8(1) # 8-byte Folded Spill
; BE-NEXT: and 19, 6, 7
; BE-NEXT: and 18, 11, 8
; BE-NEXT: std 2, -152(1) # 8-byte Folded Spill
; BE-NEXT: mulld 22, 16, 22
; BE-NEXT: and 16, 6, 9
; BE-NEXT: std 4, -176(1) # 8-byte Folded Spill
; BE-NEXT: and 14, 11, 9
; BE-NEXT: and 6, 6, 8
; BE-NEXT: ld 28, -192(1) # 8-byte Folded Reload
; BE-NEXT: and 3, 11, 10
; BE-NEXT: and 11, 11, 7
; BE-NEXT: mulld 17, 18, 19
; BE-NEXT: mulld 31, 14, 15
; BE-NEXT: mulld 2, 18, 16
; BE-NEXT: mulld 30, 18, 6
; BE-NEXT: mulld 18, 18, 15
; BE-NEXT: mulld 0, 3, 15
; BE-NEXT: mulld 15, 11, 15
; BE-NEXT: mulld 4, 11, 6
; BE-NEXT: mulld 29, 14, 6
; BE-NEXT: mulld 12, 3, 6
; BE-NEXT: mulld 5, 3, 16
; BE-NEXT: mulld 6, 3, 19
; BE-NEXT: mulld 3, 11, 19
; BE-NEXT: mulld 11, 11, 16
; BE-NEXT: mulld 16, 14, 16
; BE-NEXT: mulld 19, 14, 19
; BE-NEXT: ld 14, -160(1) # 8-byte Folded Reload
; BE-NEXT: xor 14, 28, 14
; BE-NEXT: ld 28, -216(1) # 8-byte Folded Reload
; BE-NEXT: xor 4, 4, 17
; BE-NEXT: xor 30, 15, 30
; BE-NEXT: xor 11, 11, 18
; BE-NEXT: ld 18, -112(1) # 8-byte Folded Reload
; BE-NEXT: xor 28, 27, 28
; BE-NEXT: xor 27, 24, 25
; BE-NEXT: xor 25, 20, 21
; BE-NEXT: ld 24, -176(1) # 8-byte Folded Reload
; BE-NEXT: xor 3, 3, 2
; BE-NEXT: xor 4, 4, 5
; BE-NEXT: xor 5, 30, 6
; BE-NEXT: ld 21, -200(1) # 8-byte Folded Reload
; BE-NEXT: xor 6, 11, 12
; BE-NEXT: xor 3, 3, 0
; BE-NEXT: ld 11, -168(1) # 8-byte Folded Reload
; BE-NEXT: xor 24, 14, 24
; BE-NEXT: xor 28, 28, 21
; BE-NEXT: xor 27, 27, 26
; BE-NEXT: xor 4, 4, 31
; BE-NEXT: ld 12, -184(1) # 8-byte Folded Reload
; BE-NEXT: xor 11, 24, 11
; BE-NEXT: xor 3, 3, 29
; BE-NEXT: ld 0, -208(1) # 8-byte Folded Reload
; BE-NEXT: xor 12, 28, 12
; BE-NEXT: xor 26, 25, 23
; BE-NEXT: xor 5, 5, 16
; BE-NEXT: and 11, 11, 8
; BE-NEXT: ld 2, -152(1) # 8-byte Folded Reload
; BE-NEXT: xor 0, 27, 0
; BE-NEXT: and 12, 12, 7
; BE-NEXT: and 4, 4, 8
; BE-NEXT: and 3, 3, 7
; BE-NEXT: ld 31, -8(1) # 8-byte Folded Reload
; BE-NEXT: xor 30, 26, 22
; BE-NEXT: xor 6, 6, 19
; BE-NEXT: ld 29, -24(1) # 8-byte Folded Reload
; BE-NEXT: and 0, 0, 10
; BE-NEXT: and 5, 5, 10
; BE-NEXT: or 7, 12, 11
; BE-NEXT: or 3, 3, 4
; BE-NEXT: ld 28, -32(1) # 8-byte Folded Reload
; BE-NEXT: and 30, 30, 9
; BE-NEXT: and 6, 6, 9
; BE-NEXT: ld 27, -40(1) # 8-byte Folded Reload
; BE-NEXT: or 4, 7, 0
; BE-NEXT: or 5, 3, 5
; BE-NEXT: or 3, 4, 30
; BE-NEXT: or 4, 5, 6
; BE-NEXT: ld 30, -16(1) # 8-byte Folded Reload
; BE-NEXT: ld 26, -48(1) # 8-byte Folded Reload
; BE-NEXT: ld 25, -56(1) # 8-byte Folded Reload
; BE-NEXT: ld 24, -64(1) # 8-byte Folded Reload
; BE-NEXT: ld 23, -72(1) # 8-byte Folded Reload
; BE-NEXT: ld 22, -80(1) # 8-byte Folded Reload
; BE-NEXT: ld 21, -88(1) # 8-byte Folded Reload
; BE-NEXT: ld 20, -96(1) # 8-byte Folded Reload
; BE-NEXT: ld 19, -104(1) # 8-byte Folded Reload
; BE-NEXT: ld 17, -120(1) # 8-byte Folded Reload
; BE-NEXT: ld 16, -128(1) # 8-byte Folded Reload
; BE-NEXT: ld 15, -136(1) # 8-byte Folded Reload
; BE-NEXT: ld 14, -144(1) # 8-byte Folded Reload
; BE-NEXT: blr
;
; LE-LABEL: clmul_v2i64:
; LE: # %bb.0:
; LE-NEXT: vspltisw 4, 2
; LE-NEXT: vspltisw 0, 1
; LE-NEXT: vaddudm 8, 2, 2
; LE-NEXT: addis 3, 2, .LCPI3_0@toc@ha
; LE-NEXT: vspltisw 6, 8
; LE-NEXT: addi 3, 3, .LCPI3_0@toc@l
; LE-NEXT: vspltisw 5, 4
; LE-NEXT: vupklsw 7, 4
; LE-NEXT: vspltisw 4, 3
; LE-NEXT: vupklsw 1, 0
; LE-NEXT: vsld 9, 2, 7
; LE-NEXT: xxland 39, 35, 39
; LE-NEXT: vupklsw 6, 6
; LE-NEXT: vupklsw 5, 5
; LE-NEXT: xxland 42, 35, 37
; LE-NEXT: vupklsw 0, 4
; LE-NEXT: xxlxor 36, 36, 36
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: xxland 33, 35, 33
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: vcmpgtud 10, 10, 4
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 2, 39, 40
; LE-NEXT: xxland 39, 35, 38
; LE-NEXT: xxland 0, 42, 41
; LE-NEXT: xxland 10, 33, 34
; LE-NEXT: vsld 6, 2, 6
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: xxlxor 2, 10, 2
; LE-NEXT: xxland 1, 39, 32
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_1@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_1@toc@l
; LE-NEXT: vspltisw 8, 5
; LE-NEXT: vspltisw 10, 7
; LE-NEXT: xxlxor 0, 2, 0
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: xxland 41, 35, 32
; LE-NEXT: vupklsw 8, 8
; LE-NEXT: vsld 8, 2, 8
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: vupklsw 10, 10
; LE-NEXT: xxland 3, 41, 37
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_2@toc@ha
; LE-NEXT: vspltisw 7, 6
; LE-NEXT: addi 3, 3, .LCPI3_2@toc@l
; LE-NEXT: xxlxor 0, 0, 3
; LE-NEXT: lxvd2x 5, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_3@toc@ha
; LE-NEXT: xxland 41, 35, 37
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_3@toc@l
; LE-NEXT: vupklsw 7, 7
; LE-NEXT: vsld 7, 2, 7
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: lxvd2x 6, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_4@toc@ha
; LE-NEXT: xxland 4, 41, 40
; LE-NEXT: xxland 40, 35, 5
; LE-NEXT: addi 3, 3, .LCPI3_4@toc@l
; LE-NEXT: vcmpgtud 8, 8, 4
; LE-NEXT: xxlxor 0, 0, 4
; LE-NEXT: lxvd2x 7, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_5@toc@ha
; LE-NEXT: xxland 41, 35, 6
; LE-NEXT: xxland 5, 40, 39
; LE-NEXT: vsld 7, 2, 10
; LE-NEXT: addi 3, 3, .LCPI3_5@toc@l
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: xxlxor 0, 0, 5
; LE-NEXT: lxvd2x 8, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_6@toc@ha
; LE-NEXT: xxland 6, 41, 39
; LE-NEXT: xxland 41, 35, 7
; LE-NEXT: addi 3, 3, .LCPI3_6@toc@l
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: xxlxor 0, 0, 6
; LE-NEXT: lxvd2x 9, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_7@toc@ha
; LE-NEXT: xxland 7, 41, 38
; LE-NEXT: addi 3, 3, .LCPI3_7@toc@l
; LE-NEXT: xxlxor 0, 0, 7
; LE-NEXT: lxvd2x 10, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_8@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_8@toc@l
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_9@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_9@toc@l
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_10@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_10@toc@l
; LE-NEXT: vspltisw 8, 9
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: vsld 6, 2, 7
; LE-NEXT: xxland 39, 35, 8
; LE-NEXT: vspltisw 8, 10
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: xxland 8, 39, 38
; LE-NEXT: xxland 39, 35, 9
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: vupklsw 8, 8
; LE-NEXT: vsld 6, 2, 8
; LE-NEXT: xxland 9, 39, 38
; LE-NEXT: xxland 39, 35, 10
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: xxlxor 0, 0, 8
; LE-NEXT: xxlxor 0, 0, 9
; LE-NEXT: vspltisw 9, 11
; LE-NEXT: vupklsw 8, 9
; LE-NEXT: vsld 1, 2, 8
; LE-NEXT: xxland 10, 39, 33
; LE-NEXT: xxland 39, 35, 1
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: xxlxor 0, 0, 10
; LE-NEXT: vspltisw 6, 12
; LE-NEXT: vupklsw 6, 6
; LE-NEXT: vsld 6, 2, 6
; LE-NEXT: xxland 1, 39, 38
; LE-NEXT: xxland 39, 35, 2
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: addis 3, 2, .LCPI3_11@toc@ha
; LE-NEXT: vspltisw 1, 13
; LE-NEXT: addi 3, 3, .LCPI3_11@toc@l
; LE-NEXT: vupklsw 1, 1
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: xxland 2, 39, 33
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_12@toc@ha
; LE-NEXT: xxland 39, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_12@toc@l
; LE-NEXT: vspltisw 6, 14
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: vupklsw 6, 6
; LE-NEXT: vsld 6, 2, 6
; LE-NEXT: xxland 1, 39, 38
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_13@toc@ha
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: vspltisw 1, 15
; LE-NEXT: addi 3, 3, .LCPI3_13@toc@l
; LE-NEXT: vupklsw 1, 1
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_14@toc@ha
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_14@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_15@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_15@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_16@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_16@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_17@toc@ha
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_17@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_18@toc@ha
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_18@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_19@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_19@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_20@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_20@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_21@toc@ha
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_21@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_22@toc@ha
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_22@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_23@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_23@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_24@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_24@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_25@toc@ha
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_25@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_26@toc@ha
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_26@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_27@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_27@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_28@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_28@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_29@toc@ha
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_29@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_30@toc@ha
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_30@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_31@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_31@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_32@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_32@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_33@toc@ha
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_33@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_34@toc@ha
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_34@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_35@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_35@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_36@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_36@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_37@toc@ha
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_37@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_38@toc@ha
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_38@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_39@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_39@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_40@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_40@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_41@toc@ha
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_41@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_42@toc@ha
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_42@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_43@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_43@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_44@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_44@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_45@toc@ha
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_45@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_46@toc@ha
; LE-NEXT: xxland 1, 38, 37
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_46@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_47@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_47@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_48@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_48@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_49@toc@ha
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_49@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_50@toc@ha
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_50@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_51@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_51@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_52@toc@ha
; LE-NEXT: xxland 1, 38, 37
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_52@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_53@toc@ha
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_53@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_54@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_54@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_55@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_55@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_56@toc@ha
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_56@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_57@toc@ha
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_57@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_58@toc@ha
; LE-NEXT: xxland 1, 38, 37
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_58@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_59@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_59@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_60@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_60@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_61@toc@ha
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_61@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_62@toc@ha
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_62@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_63@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_63@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_64@toc@ha
; LE-NEXT: xxland 1, 38, 37
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_64@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_65@toc@ha
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_65@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_66@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_66@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_67@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_67@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_68@toc@ha
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_68@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_69@toc@ha
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_69@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_70@toc@ha
; LE-NEXT: xxland 1, 38, 37
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_70@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_71@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_71@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_72@toc@ha
; LE-NEXT: xxland 1, 38, 32
; LE-NEXT: vsld 1, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_72@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_73@toc@ha
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_73@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_74@toc@ha
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_74@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_75@toc@ha
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_75@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_76@toc@ha
; LE-NEXT: xxland 1, 38, 37
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_76@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 33, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_77@toc@ha
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addi 3, 3, .LCPI3_77@toc@l
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_78@toc@ha
; LE-NEXT: xxland 2, 38, 32
; LE-NEXT: vsld 0, 2, 1
; LE-NEXT: addi 3, 3, .LCPI3_78@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_79@toc@ha
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_79@toc@l
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_80@toc@ha
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_80@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_81@toc@ha
; LE-NEXT: xxland 33, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_81@toc@l
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_82@toc@ha
; LE-NEXT: xxland 2, 33, 37
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: addi 3, 3, .LCPI3_82@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_83@toc@ha
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_83@toc@l
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: lxvd2x 2, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_84@toc@ha
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_84@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_85@toc@ha
; LE-NEXT: xxland 33, 35, 2
; LE-NEXT: addi 3, 3, .LCPI3_85@toc@l
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 37
; LE-NEXT: vsld 0, 2, 0
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_86@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_86@toc@l
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_87@toc@ha
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_87@toc@l
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_88@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_88@toc@l
; LE-NEXT: lxvd2x 32, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_89@toc@ha
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: addi 3, 3, .LCPI3_89@toc@l
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 37
; LE-NEXT: vsld 5, 2, 0
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_90@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_90@toc@l
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_91@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_91@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_92@toc@ha
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_92@toc@l
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_93@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_93@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_94@toc@ha
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_94@toc@l
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_95@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_95@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_96@toc@ha
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_96@toc@l
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_97@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_97@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_98@toc@ha
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_98@toc@l
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_99@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_99@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_100@toc@ha
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_100@toc@l
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_101@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_101@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_102@toc@ha
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_102@toc@l
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_103@toc@ha
; LE-NEXT: addi 3, 3, .LCPI3_103@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI3_104@toc@ha
; LE-NEXT: vsld 5, 2, 5
; LE-NEXT: addi 3, 3, .LCPI3_104@toc@l
; LE-NEXT: xxland 32, 35, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: xxleqv 37, 37, 37
; LE-NEXT: vsld 2, 2, 5
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: xxland 35, 35, 1
; LE-NEXT: vcmpgtud 3, 3, 4
; LE-NEXT: xxland 1, 35, 34
; LE-NEXT: xxlxor 34, 0, 1
; LE-NEXT: blr
%res = call <2 x i64> @llvm.clmul.v2i64(<2 x i64> %a, <2 x i64> %b)
ret <2 x i64> %res
}
define <16 x i8> @clmulr_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
; BE-LABEL: clmulr_v16i8:
; BE: # %bb.0:
; BE-NEXT: li 3, -48
; BE-NEXT: vspltisb 4, 4
; BE-NEXT: stvx 29, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -32
; BE-NEXT: vsrb 1, 3, 4
; BE-NEXT: vspltisb 5, 15
; BE-NEXT: stvx 30, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -16
; BE-NEXT: vspltisb 7, -1
; BE-NEXT: stvx 31, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addis 3, 2, .LCPI4_0@toc@ha
; BE-NEXT: addi 3, 3, .LCPI4_0@toc@l
; BE-NEXT: vand 3, 3, 5
; BE-NEXT: vspltisb 13, 8
; BE-NEXT: vslb 3, 3, 4
; BE-NEXT: vsrb 0, 2, 4
; BE-NEXT: vand 2, 2, 5
; BE-NEXT: vor 1, 1, 3
; BE-NEXT: lvx 3, 0, 3
; BE-NEXT: addis 3, 2, .LCPI4_1@toc@ha
; BE-NEXT: addi 3, 3, .LCPI4_1@toc@l
; BE-NEXT: vslb 2, 2, 4
; BE-NEXT: vor 0, 0, 2
; BE-NEXT: vspltisb 2, 2
; BE-NEXT: vsrb 9, 1, 2
; BE-NEXT: vand 1, 1, 3
; BE-NEXT: vand 9, 9, 3
; BE-NEXT: vslb 1, 1, 2
; BE-NEXT: vsrb 8, 0, 2
; BE-NEXT: vand 0, 0, 3
; BE-NEXT: vor 9, 9, 1
; BE-NEXT: lvx 1, 0, 3
; BE-NEXT: addis 3, 2, .LCPI4_3@toc@ha
; BE-NEXT: addi 3, 3, .LCPI4_3@toc@l
; BE-NEXT: lvx 15, 0, 3
; BE-NEXT: addis 3, 2, .LCPI4_2@toc@ha
; BE-NEXT: addi 3, 3, .LCPI4_2@toc@l
; BE-NEXT: vand 8, 8, 3
; BE-NEXT: vslb 0, 0, 2
; BE-NEXT: vor 8, 8, 0
; BE-NEXT: vspltisb 0, 1
; BE-NEXT: vsrb 11, 9, 0
; BE-NEXT: vand 9, 9, 1
; BE-NEXT: vaddubm 9, 9, 9
; BE-NEXT: vand 11, 11, 1
; BE-NEXT: vsrb 10, 8, 0
; BE-NEXT: vand 8, 8, 1
; BE-NEXT: vaddubm 8, 8, 8
; BE-NEXT: vor 9, 11, 9
; BE-NEXT: vslb 6, 4, 4
; BE-NEXT: vslb 7, 7, 7
; BE-NEXT: vand 10, 10, 1
; BE-NEXT: vand 14, 9, 13
; BE-NEXT: vaddubm 13, 13, 13
; BE-NEXT: vor 8, 10, 8
; BE-NEXT: vand 10, 9, 2
; BE-NEXT: vand 11, 9, 0
; BE-NEXT: vand 12, 9, 4
; BE-NEXT: vand 13, 9, 13
; BE-NEXT: vand 15, 9, 15
; BE-NEXT: vand 6, 9, 6
; BE-NEXT: vand 7, 9, 7
; BE-NEXT: vmuloub 9, 8, 10
; BE-NEXT: vmuleub 10, 8, 10
; BE-NEXT: vmuloub 16, 8, 11
; BE-NEXT: vmuleub 11, 8, 11
; BE-NEXT: vmuloub 17, 8, 12
; BE-NEXT: vmuleub 12, 8, 12
; BE-NEXT: vmuloub 18, 8, 14
; BE-NEXT: vmuleub 14, 8, 14
; BE-NEXT: vmuloub 19, 8, 13
; BE-NEXT: vmuleub 13, 8, 13
; BE-NEXT: vmuloub 31, 8, 15
; BE-NEXT: vmuleub 15, 8, 15
; BE-NEXT: vmuloub 30, 8, 6
; BE-NEXT: vmuleub 6, 8, 6
; BE-NEXT: vmuloub 29, 8, 7
; BE-NEXT: vmuleub 7, 8, 7
; BE-NEXT: lvx 8, 0, 3
; BE-NEXT: li 3, -16
; BE-NEXT: vperm 9, 10, 9, 8
; BE-NEXT: vperm 10, 11, 16, 8
; BE-NEXT: vperm 11, 12, 17, 8
; BE-NEXT: vperm 12, 14, 18, 8
; BE-NEXT: vperm 13, 13, 19, 8
; BE-NEXT: vperm 14, 15, 31, 8
; BE-NEXT: lvx 31, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -32
; BE-NEXT: vperm 6, 6, 30, 8
; BE-NEXT: lvx 30, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -48
; BE-NEXT: vperm 7, 7, 29, 8
; BE-NEXT: lvx 29, 1, 3 # 16-byte Folded Reload
; BE-NEXT: vxor 8, 10, 9
; BE-NEXT: vxor 8, 8, 11
; BE-NEXT: vxor 8, 8, 12
; BE-NEXT: vxor 8, 8, 13
; BE-NEXT: vxor 8, 8, 14
; BE-NEXT: vxor 6, 8, 6
; BE-NEXT: vxor 6, 6, 7
; BE-NEXT: vand 5, 6, 5
; BE-NEXT: vsrb 7, 6, 4
; BE-NEXT: vslb 4, 5, 4
; BE-NEXT: vor 4, 7, 4
; BE-NEXT: vand 5, 4, 3
; BE-NEXT: vsrb 4, 4, 2
; BE-NEXT: vslb 2, 5, 2
; BE-NEXT: vand 3, 4, 3
; BE-NEXT: vor 2, 3, 2
; BE-NEXT: vsrb 3, 2, 0
; BE-NEXT: vand 2, 2, 1
; BE-NEXT: vaddubm 2, 2, 2
; BE-NEXT: vand 3, 3, 1
; BE-NEXT: vor 2, 3, 2
; BE-NEXT: blr
;
; LE-LABEL: clmulr_v16i8:
; LE: # %bb.0:
; LE-NEXT: addis 3, 2, .LCPI4_0@toc@ha
; LE-NEXT: vspltisb 4, 4
; LE-NEXT: vspltisb 5, 2
; LE-NEXT: addi 3, 3, .LCPI4_0@toc@l
; LE-NEXT: vslb 1, 3, 4
; LE-NEXT: vsrb 3, 3, 4
; LE-NEXT: vslb 6, 2, 4
; LE-NEXT: vsrb 2, 2, 4
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: addis 3, 2, .LCPI4_1@toc@ha
; LE-NEXT: xxlor 35, 35, 33
; LE-NEXT: xxlor 34, 34, 38
; LE-NEXT: vspltisb 0, 1
; LE-NEXT: addi 3, 3, .LCPI4_1@toc@l
; LE-NEXT: vsrb 1, 3, 5
; LE-NEXT: vsrb 7, 2, 5
; LE-NEXT: vspltisb 6, 8
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI4_2@toc@ha
; LE-NEXT: xxland 35, 35, 0
; LE-NEXT: xxland 34, 34, 0
; LE-NEXT: xxland 2, 33, 0
; LE-NEXT: xxland 3, 39, 0
; LE-NEXT: addi 3, 3, .LCPI4_2@toc@l
; LE-NEXT: vslb 3, 3, 5
; LE-NEXT: vslb 2, 2, 5
; LE-NEXT: xxlor 35, 2, 35
; LE-NEXT: xxlor 34, 3, 34
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI4_3@toc@ha
; LE-NEXT: vsrb 1, 3, 0
; LE-NEXT: xxland 35, 35, 1
; LE-NEXT: vsrb 7, 2, 0
; LE-NEXT: xxland 34, 34, 1
; LE-NEXT: addi 3, 3, .LCPI4_3@toc@l
; LE-NEXT: xxland 2, 33, 1
; LE-NEXT: vaddubm 3, 3, 3
; LE-NEXT: vaddubm 2, 2, 2
; LE-NEXT: xxlor 2, 2, 35
; LE-NEXT: xxland 35, 2, 37
; LE-NEXT: xxswapd 33, 3
; LE-NEXT: xxland 3, 39, 1
; LE-NEXT: xxlor 34, 3, 34
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: vmuloub 7, 2, 3
; LE-NEXT: vmuleub 3, 2, 3
; LE-NEXT: vperm 3, 3, 7, 1
; LE-NEXT: xxland 39, 2, 32
; LE-NEXT: vmuloub 8, 2, 7
; LE-NEXT: vmuleub 7, 2, 7
; LE-NEXT: vperm 7, 7, 8, 1
; LE-NEXT: xxland 40, 2, 36
; LE-NEXT: vmuloub 9, 2, 8
; LE-NEXT: vmuleub 8, 2, 8
; LE-NEXT: vperm 8, 8, 9, 1
; LE-NEXT: xxland 41, 2, 38
; LE-NEXT: vaddubm 6, 6, 6
; LE-NEXT: vmuloub 10, 2, 9
; LE-NEXT: vmuleub 9, 2, 9
; LE-NEXT: xxland 38, 2, 38
; LE-NEXT: vperm 9, 9, 10, 1
; LE-NEXT: vmuloub 10, 2, 6
; LE-NEXT: vmuleub 6, 2, 6
; LE-NEXT: vperm 6, 6, 10, 1
; LE-NEXT: xxland 42, 2, 3
; LE-NEXT: vmuloub 11, 2, 10
; LE-NEXT: vmuleub 10, 2, 10
; LE-NEXT: vperm 10, 10, 11, 1
; LE-NEXT: vslb 11, 4, 4
; LE-NEXT: xxland 43, 2, 43
; LE-NEXT: vmuloub 12, 2, 11
; LE-NEXT: vmuleub 11, 2, 11
; LE-NEXT: vperm 11, 11, 12, 1
; LE-NEXT: xxleqv 44, 44, 44
; LE-NEXT: vslb 12, 12, 12
; LE-NEXT: xxland 44, 2, 44
; LE-NEXT: xxlxor 2, 39, 35
; LE-NEXT: xxlxor 2, 2, 40
; LE-NEXT: vmuloub 13, 2, 12
; LE-NEXT: vmuleub 2, 2, 12
; LE-NEXT: xxlxor 2, 2, 41
; LE-NEXT: xxlxor 2, 2, 38
; LE-NEXT: xxlxor 2, 2, 42
; LE-NEXT: xxlxor 2, 2, 43
; LE-NEXT: vperm 2, 2, 13, 1
; LE-NEXT: xxlxor 34, 2, 34
; LE-NEXT: vslb 3, 2, 4
; LE-NEXT: vsrb 2, 2, 4
; LE-NEXT: xxlor 34, 34, 35
; LE-NEXT: xxland 35, 34, 0
; LE-NEXT: vsrb 2, 2, 5
; LE-NEXT: vslb 3, 3, 5
; LE-NEXT: xxland 0, 34, 0
; LE-NEXT: xxlor 34, 0, 35
; LE-NEXT: vsrb 3, 2, 0
; LE-NEXT: xxland 34, 34, 1
; LE-NEXT: xxland 0, 35, 1
; LE-NEXT: vaddubm 2, 2, 2
; LE-NEXT: xxlor 34, 0, 34
; LE-NEXT: blr
%a.ext = zext <16 x i8> %a to <16 x i16>
%b.ext = zext <16 x i8> %b to <16 x i16>
%clmul = call <16 x i16> @llvm.clmul.v16i16(<16 x i16> %a.ext, <16 x i16> %b.ext)
%res.ext = lshr <16 x i16> %clmul, splat (i16 7)
%res = trunc <16 x i16> %res.ext to <16 x i8>
ret <16 x i8> %res
}
define <8 x i16> @clmulr_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
; BE-LABEL: clmulr_v8i16:
; BE: # %bb.0:
; BE-NEXT: li 3, -80
; BE-NEXT: vspltisb 5, -1
; BE-NEXT: stvx 27, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -64
; BE-NEXT: vslh 16, 5, 5
; BE-NEXT: vspltish 4, 4
; BE-NEXT: stvx 28, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -48
; BE-NEXT: vspltish 8, 1
; BE-NEXT: stvx 29, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -32
; BE-NEXT: vspltish 14, 2
; BE-NEXT: vslh 0, 4, 4
; BE-NEXT: stvx 30, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -16
; BE-NEXT: vspltish 15, 8
; BE-NEXT: stvx 31, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addis 3, 2, .LCPI5_0@toc@ha
; BE-NEXT: addi 3, 3, .LCPI5_0@toc@l
; BE-NEXT: lvx 5, 0, 3
; BE-NEXT: addis 3, 2, .LCPI5_1@toc@ha
; BE-NEXT: addi 3, 3, .LCPI5_1@toc@l
; BE-NEXT: vsldoi 7, 8, 8, 1
; BE-NEXT: vperm 1, 2, 2, 5
; BE-NEXT: vspltisb 2, 4
; BE-NEXT: vperm 6, 3, 3, 5
; BE-NEXT: vspltisb 3, 15
; BE-NEXT: vsrb 10, 1, 2
; BE-NEXT: vand 1, 1, 3
; BE-NEXT: vslb 1, 1, 2
; BE-NEXT: vsrb 12, 6, 2
; BE-NEXT: vand 6, 6, 3
; BE-NEXT: vor 10, 10, 1
; BE-NEXT: lvx 1, 0, 3
; BE-NEXT: addis 3, 2, .LCPI5_2@toc@ha
; BE-NEXT: addi 3, 3, .LCPI5_2@toc@l
; BE-NEXT: vslb 6, 6, 2
; BE-NEXT: vor 12, 12, 6
; BE-NEXT: vspltisb 6, 2
; BE-NEXT: vand 18, 12, 1
; BE-NEXT: vsrb 12, 12, 6
; BE-NEXT: vslb 18, 18, 6
; BE-NEXT: vand 12, 12, 1
; BE-NEXT: vand 17, 10, 1
; BE-NEXT: vsrb 10, 10, 6
; BE-NEXT: vor 18, 12, 18
; BE-NEXT: lvx 12, 0, 3
; BE-NEXT: addis 3, 2, .LCPI5_3@toc@ha
; BE-NEXT: addi 3, 3, .LCPI5_3@toc@l
; BE-NEXT: vslb 17, 17, 6
; BE-NEXT: vand 10, 10, 1
; BE-NEXT: vor 17, 10, 17
; BE-NEXT: vspltisb 10, 1
; BE-NEXT: vsrb 31, 18, 10
; BE-NEXT: vand 18, 18, 12
; BE-NEXT: vaddubm 18, 18, 18
; BE-NEXT: vand 31, 31, 12
; BE-NEXT: vor 18, 31, 18
; BE-NEXT: lvx 31, 0, 3
; BE-NEXT: addis 3, 2, .LCPI5_4@toc@ha
; BE-NEXT: addi 3, 3, .LCPI5_4@toc@l
; BE-NEXT: lvx 30, 0, 3
; BE-NEXT: addis 3, 2, .LCPI5_5@toc@ha
; BE-NEXT: addi 3, 3, .LCPI5_5@toc@l
; BE-NEXT: lvx 29, 0, 3
; BE-NEXT: addis 3, 2, .LCPI5_6@toc@ha
; BE-NEXT: addi 3, 3, .LCPI5_6@toc@l
; BE-NEXT: vsrb 19, 17, 10
; BE-NEXT: lvx 28, 0, 3
; BE-NEXT: addis 3, 2, .LCPI5_7@toc@ha
; BE-NEXT: addi 3, 3, .LCPI5_7@toc@l
; BE-NEXT: lvx 27, 0, 3
; BE-NEXT: li 3, -16
; BE-NEXT: vand 17, 17, 12
; BE-NEXT: vaddubm 17, 17, 17
; BE-NEXT: vand 19, 19, 12
; BE-NEXT: vsldoi 9, 14, 14, 1
; BE-NEXT: vsldoi 11, 4, 4, 1
; BE-NEXT: vslh 13, 15, 15
; BE-NEXT: vor 17, 19, 17
; BE-NEXT: vand 19, 18, 15
; BE-NEXT: vadduhm 15, 15, 15
; BE-NEXT: vand 14, 18, 14
; BE-NEXT: vand 8, 18, 8
; BE-NEXT: vand 4, 18, 4
; BE-NEXT: vand 15, 18, 15
; BE-NEXT: vand 31, 18, 31
; BE-NEXT: vand 0, 18, 0
; BE-NEXT: vand 30, 18, 30
; BE-NEXT: vand 7, 18, 7
; BE-NEXT: vand 9, 18, 9
; BE-NEXT: vand 11, 18, 11
; BE-NEXT: vand 13, 18, 13
; BE-NEXT: vand 29, 18, 29
; BE-NEXT: vand 28, 18, 28
; BE-NEXT: vand 27, 18, 27
; BE-NEXT: vand 16, 18, 16
; BE-NEXT: vxor 18, 18, 18
; BE-NEXT: vmladduhm 14, 17, 14, 18
; BE-NEXT: vmladduhm 8, 17, 8, 18
; BE-NEXT: vmladduhm 4, 17, 4, 18
; BE-NEXT: vxor 8, 8, 14
; BE-NEXT: vmladduhm 19, 17, 19, 18
; BE-NEXT: vxor 4, 8, 4
; BE-NEXT: vmladduhm 15, 17, 15, 18
; BE-NEXT: vxor 4, 4, 19
; BE-NEXT: vmladduhm 31, 17, 31, 18
; BE-NEXT: vxor 4, 4, 15
; BE-NEXT: vmladduhm 0, 17, 0, 18
; BE-NEXT: vxor 4, 4, 31
; BE-NEXT: lvx 31, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -32
; BE-NEXT: vmladduhm 30, 17, 30, 18
; BE-NEXT: vxor 4, 4, 0
; BE-NEXT: vmladduhm 7, 17, 7, 18
; BE-NEXT: vxor 4, 4, 30
; BE-NEXT: lvx 30, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -48
; BE-NEXT: vmladduhm 9, 17, 9, 18
; BE-NEXT: vxor 4, 4, 7
; BE-NEXT: vmladduhm 11, 17, 11, 18
; BE-NEXT: vxor 4, 4, 9
; BE-NEXT: vmladduhm 13, 17, 13, 18
; BE-NEXT: vxor 4, 4, 11
; BE-NEXT: vmladduhm 29, 17, 29, 18
; BE-NEXT: vxor 4, 4, 13
; BE-NEXT: vmladduhm 28, 17, 28, 18
; BE-NEXT: vxor 4, 4, 29
; BE-NEXT: lvx 29, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -64
; BE-NEXT: vmladduhm 27, 17, 27, 18
; BE-NEXT: vxor 4, 4, 28
; BE-NEXT: lvx 28, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -80
; BE-NEXT: vmladduhm 16, 17, 16, 18
; BE-NEXT: vxor 4, 4, 27
; BE-NEXT: lvx 27, 1, 3 # 16-byte Folded Reload
; BE-NEXT: vxor 4, 4, 16
; BE-NEXT: vperm 4, 4, 4, 5
; BE-NEXT: vand 3, 4, 3
; BE-NEXT: vsrb 5, 4, 2
; BE-NEXT: vslb 2, 3, 2
; BE-NEXT: vor 2, 5, 2
; BE-NEXT: vand 3, 2, 1
; BE-NEXT: vsrb 2, 2, 6
; BE-NEXT: vslb 3, 3, 6
; BE-NEXT: vand 2, 2, 1
; BE-NEXT: vor 2, 2, 3
; BE-NEXT: vsrb 3, 2, 10
; BE-NEXT: vand 2, 2, 12
; BE-NEXT: vaddubm 2, 2, 2
; BE-NEXT: vand 3, 3, 12
; BE-NEXT: vor 2, 3, 2
; BE-NEXT: blr
;
; LE-LABEL: clmulr_v8i16:
; LE: # %bb.0:
; LE-NEXT: addis 3, 2, .LCPI5_0@toc@ha
; LE-NEXT: vspltisb 5, 4
; LE-NEXT: vspltish 7, 2
; LE-NEXT: addi 3, 3, .LCPI5_0@toc@l
; LE-NEXT: vspltish 8, 1
; LE-NEXT: vspltish 1, 4
; LE-NEXT: vspltish 0, 8
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: addis 3, 2, .LCPI5_1@toc@ha
; LE-NEXT: addi 3, 3, .LCPI5_1@toc@l
; LE-NEXT: vsldoi 9, 8, 8, 1
; LE-NEXT: vsldoi 13, 1, 1, 1
; LE-NEXT: xxswapd 36, 0
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: addis 3, 2, .LCPI5_2@toc@ha
; LE-NEXT: addi 3, 3, .LCPI5_2@toc@l
; LE-NEXT: vperm 10, 2, 2, 4
; LE-NEXT: vperm 6, 3, 3, 4
; LE-NEXT: vspltisb 3, 2
; LE-NEXT: vspltisb 2, 1
; LE-NEXT: vslb 11, 10, 5
; LE-NEXT: vsrb 12, 10, 5
; LE-NEXT: xxlor 43, 44, 43
; LE-NEXT: xxland 44, 43, 0
; LE-NEXT: vsrb 11, 11, 3
; LE-NEXT: vsldoi 10, 7, 7, 1
; LE-NEXT: vslb 12, 12, 3
; LE-NEXT: xxland 1, 43, 0
; LE-NEXT: xxlor 43, 1, 44
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI5_3@toc@ha
; LE-NEXT: vsrb 12, 11, 2
; LE-NEXT: addi 3, 3, .LCPI5_3@toc@l
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: addis 3, 2, .LCPI5_4@toc@ha
; LE-NEXT: xxland 2, 44, 1
; LE-NEXT: vslb 12, 6, 5
; LE-NEXT: vsrb 6, 6, 5
; LE-NEXT: addi 3, 3, .LCPI5_4@toc@l
; LE-NEXT: xxlor 38, 38, 44
; LE-NEXT: xxland 44, 38, 0
; LE-NEXT: vsrb 6, 6, 3
; LE-NEXT: vslb 12, 12, 3
; LE-NEXT: xxland 3, 38, 0
; LE-NEXT: xxlor 44, 3, 44
; LE-NEXT: vsrb 6, 12, 2
; LE-NEXT: xxland 3, 38, 1
; LE-NEXT: xxland 38, 43, 1
; LE-NEXT: xxland 43, 44, 1
; LE-NEXT: vaddubm 6, 6, 6
; LE-NEXT: vaddubm 11, 11, 11
; LE-NEXT: xxlor 38, 2, 38
; LE-NEXT: xxlor 2, 3, 43
; LE-NEXT: xxland 43, 2, 39
; LE-NEXT: xxland 40, 2, 40
; LE-NEXT: vxor 7, 7, 7
; LE-NEXT: vmladduhm 11, 6, 11, 7
; LE-NEXT: vmladduhm 8, 6, 8, 7
; LE-NEXT: xxlxor 3, 40, 43
; LE-NEXT: xxland 40, 2, 33
; LE-NEXT: vslh 1, 1, 1
; LE-NEXT: vmladduhm 8, 6, 8, 7
; LE-NEXT: xxland 33, 2, 33
; LE-NEXT: vmladduhm 1, 6, 1, 7
; LE-NEXT: xxlxor 3, 3, 40
; LE-NEXT: xxland 40, 2, 32
; LE-NEXT: vmladduhm 8, 6, 8, 7
; LE-NEXT: xxlxor 3, 3, 40
; LE-NEXT: vadduhm 8, 0, 0
; LE-NEXT: vslh 0, 0, 0
; LE-NEXT: xxland 40, 2, 40
; LE-NEXT: xxland 32, 2, 32
; LE-NEXT: vmladduhm 8, 6, 8, 7
; LE-NEXT: vmladduhm 0, 6, 0, 7
; LE-NEXT: xxlxor 3, 3, 40
; LE-NEXT: xxland 40, 2, 4
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: addis 3, 2, .LCPI5_5@toc@ha
; LE-NEXT: vmladduhm 8, 6, 8, 7
; LE-NEXT: addi 3, 3, .LCPI5_5@toc@l
; LE-NEXT: xxlxor 3, 3, 40
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxland 33, 2, 4
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: addis 3, 2, .LCPI5_6@toc@ha
; LE-NEXT: vmladduhm 1, 6, 1, 7
; LE-NEXT: addi 3, 3, .LCPI5_6@toc@l
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxland 33, 2, 41
; LE-NEXT: vmladduhm 1, 6, 1, 7
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxland 33, 2, 42
; LE-NEXT: vmladduhm 1, 6, 1, 7
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxland 33, 2, 45
; LE-NEXT: vmladduhm 1, 6, 1, 7
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxlxor 3, 3, 32
; LE-NEXT: xxland 32, 2, 4
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: addis 3, 2, .LCPI5_7@toc@ha
; LE-NEXT: vmladduhm 0, 6, 0, 7
; LE-NEXT: addi 3, 3, .LCPI5_7@toc@l
; LE-NEXT: xxlxor 3, 3, 32
; LE-NEXT: xxland 32, 2, 4
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: vmladduhm 0, 6, 0, 7
; LE-NEXT: xxlxor 3, 3, 32
; LE-NEXT: xxland 32, 2, 4
; LE-NEXT: vmladduhm 0, 6, 0, 7
; LE-NEXT: xxlxor 3, 3, 32
; LE-NEXT: xxleqv 32, 32, 32
; LE-NEXT: vslh 0, 0, 0
; LE-NEXT: xxland 32, 2, 32
; LE-NEXT: vmladduhm 0, 6, 0, 7
; LE-NEXT: xxlxor 32, 3, 32
; LE-NEXT: vperm 4, 0, 0, 4
; LE-NEXT: vslb 0, 4, 5
; LE-NEXT: vsrb 4, 4, 5
; LE-NEXT: xxlor 36, 36, 32
; LE-NEXT: xxland 37, 36, 0
; LE-NEXT: vslb 5, 5, 3
; LE-NEXT: vsrb 3, 4, 3
; LE-NEXT: xxland 0, 35, 0
; LE-NEXT: xxlor 35, 0, 37
; LE-NEXT: vsrb 2, 3, 2
; LE-NEXT: xxland 0, 34, 1
; LE-NEXT: xxland 34, 35, 1
; LE-NEXT: vaddubm 2, 2, 2
; LE-NEXT: xxlor 34, 0, 34
; LE-NEXT: blr
%a.ext = zext <8 x i16> %a to <8 x i32>
%b.ext = zext <8 x i16> %b to <8 x i32>
%clmul = call <8 x i32> @llvm.clmul.v8i32(<8 x i32> %a.ext, <8 x i32> %b.ext)
%res.ext = lshr <8 x i32> %clmul, splat (i32 15)
%res = trunc <8 x i32> %res.ext to <8 x i16>
ret <8 x i16> %res
}
define <4 x i32> @clmulr_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
; BE-LABEL: clmulr_v4i32:
; BE: # %bb.0:
; BE-NEXT: stdu 1, -528(1)
; BE-NEXT: li 3, 336
; BE-NEXT: addi 4, 1, 240
; BE-NEXT: vxor 1, 1, 1
; BE-NEXT: stvx 20, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 352
; BE-NEXT: lis 5, -21846
; BE-NEXT: stvx 21, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 368
; BE-NEXT: lis 9, -13108
; BE-NEXT: ori 7, 5, 43690
; BE-NEXT: ori 5, 9, 52428
; BE-NEXT: stvx 22, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 384
; BE-NEXT: lis 6, 21845
; BE-NEXT: stvx 23, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 400
; BE-NEXT: lis 10, 13107
; BE-NEXT: ori 8, 6, 21845
; BE-NEXT: ori 6, 10, 13107
; BE-NEXT: stvx 24, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 416
; BE-NEXT: lis 11, 3855
; BE-NEXT: stvx 25, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 432
; BE-NEXT: stvx 26, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 448
; BE-NEXT: stvx 27, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 464
; BE-NEXT: stvx 28, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 480
; BE-NEXT: stvx 29, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 496
; BE-NEXT: stvx 30, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 512
; BE-NEXT: stvx 31, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addi 3, 1, 256
; BE-NEXT: stvx 3, 0, 3
; BE-NEXT: lis 3, -3856
; BE-NEXT: vspltisb 3, 1
; BE-NEXT: ori 3, 3, 61680
; BE-NEXT: stvx 2, 0, 4
; BE-NEXT: ori 4, 11, 3855
; BE-NEXT: vspltisb 2, -16
; BE-NEXT: vsububm 2, 3, 2
; BE-NEXT: lwz 9, 268(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 300(1)
; BE-NEXT: lwz 9, 264(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 296(1)
; BE-NEXT: lwz 9, 260(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 292(1)
; BE-NEXT: lwz 9, 256(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 288(1)
; BE-NEXT: lwz 9, 252(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 284(1)
; BE-NEXT: lwz 9, 248(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 280(1)
; BE-NEXT: lwz 9, 244(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 276(1)
; BE-NEXT: lwz 9, 240(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 272(1)
; BE-NEXT: addi 9, 1, 288
; BE-NEXT: lvx 8, 0, 9
; BE-NEXT: li 9, 224
; BE-NEXT: stvx 2, 1, 9 # 16-byte Folded Spill
; BE-NEXT: addis 9, 2, .LCPI6_0@toc@ha
; BE-NEXT: vand 0, 8, 2
; BE-NEXT: addi 9, 9, .LCPI6_0@toc@l
; BE-NEXT: lvx 3, 0, 9
; BE-NEXT: li 9, 208
; BE-NEXT: stvx 3, 1, 9 # 16-byte Folded Spill
; BE-NEXT: addi 9, 1, 272
; BE-NEXT: vand 7, 8, 3
; BE-NEXT: lvx 10, 0, 9
; BE-NEXT: addis 9, 2, .LCPI6_1@toc@ha
; BE-NEXT: addi 9, 9, .LCPI6_1@toc@l
; BE-NEXT: vand 6, 10, 2
; BE-NEXT: lvx 2, 0, 9
; BE-NEXT: li 9, 192
; BE-NEXT: stvx 2, 1, 9 # 16-byte Folded Spill
; BE-NEXT: addis 9, 2, .LCPI6_2@toc@ha
; BE-NEXT: addi 9, 9, .LCPI6_2@toc@l
; BE-NEXT: lvx 24, 0, 9
; BE-NEXT: li 9, 176
; BE-NEXT: vand 9, 10, 3
; BE-NEXT: vand 11, 8, 2
; BE-NEXT: vand 13, 10, 24
; BE-NEXT: vand 14, 10, 2
; BE-NEXT: vspltisw 10, -16
; BE-NEXT: vmulouh 2, 9, 0
; BE-NEXT: stvx 2, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 160
; BE-NEXT: vand 15, 8, 24
; BE-NEXT: vrlw 26, 11, 10
; BE-NEXT: vmulouh 2, 9, 11
; BE-NEXT: stvx 2, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 144
; BE-NEXT: vrlw 25, 15, 10
; BE-NEXT: vmsumuhm 4, 13, 26, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 128
; BE-NEXT: vmsumuhm 4, 14, 25, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 112
; BE-NEXT: vrlw 29, 0, 10
; BE-NEXT: vmsumuhm 4, 9, 26, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 96
; BE-NEXT: vmsumuhm 4, 6, 29, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 80
; BE-NEXT: vrlw 27, 7, 10
; BE-NEXT: vmsumuhm 4, 13, 25, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 64
; BE-NEXT: vmsumuhm 4, 14, 27, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 144
; BE-NEXT: vmsumuhm 2, 9, 29, 1
; BE-NEXT: vmsumuhm 20, 14, 26, 1
; BE-NEXT: vmsumuhm 8, 14, 29, 1
; BE-NEXT: vmulouh 28, 14, 15
; BE-NEXT: vmulouh 30, 14, 7
; BE-NEXT: vmulouh 19, 14, 11
; BE-NEXT: vmulouh 31, 14, 0
; BE-NEXT: vslw 14, 2, 10
; BE-NEXT: lvx 2, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 128
; BE-NEXT: vmsumuhm 3, 6, 27, 1
; BE-NEXT: vmsumuhm 23, 9, 27, 1
; BE-NEXT: vmsumuhm 22, 6, 25, 1
; BE-NEXT: vmsumuhm 21, 13, 29, 1
; BE-NEXT: vmsumuhm 25, 9, 25, 1
; BE-NEXT: vmsumuhm 26, 6, 26, 1
; BE-NEXT: vmsumuhm 27, 13, 27, 1
; BE-NEXT: vmulouh 29, 9, 7
; BE-NEXT: vmulouh 16, 9, 15
; BE-NEXT: vmulouh 18, 13, 15
; BE-NEXT: vmulouh 15, 6, 15
; BE-NEXT: vmulouh 1, 6, 7
; BE-NEXT: vmulouh 17, 13, 7
; BE-NEXT: vmulouh 5, 6, 0
; BE-NEXT: vmulouh 7, 6, 11
; BE-NEXT: vslw 6, 2, 10
; BE-NEXT: lvx 2, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 112
; BE-NEXT: vmulouh 12, 13, 11
; BE-NEXT: vslw 11, 2, 10
; BE-NEXT: lvx 2, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 96
; BE-NEXT: vslw 4, 3, 10
; BE-NEXT: lvx 3, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 80
; BE-NEXT: vadduwm 4, 1, 4
; BE-NEXT: vmulouh 13, 13, 0
; BE-NEXT: lvx 0, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 64
; BE-NEXT: lvx 9, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 176
; BE-NEXT: vslw 2, 2, 10
; BE-NEXT: vslw 3, 3, 10
; BE-NEXT: vadduwm 3, 5, 3
; BE-NEXT: vslw 0, 0, 10
; BE-NEXT: vadduwm 0, 18, 0
; BE-NEXT: vslw 9, 9, 10
; BE-NEXT: vslw 23, 23, 10
; BE-NEXT: vslw 22, 22, 10
; BE-NEXT: vadduwm 5, 15, 22
; BE-NEXT: vslw 21, 21, 10
; BE-NEXT: vslw 20, 20, 10
; BE-NEXT: vslw 25, 25, 10
; BE-NEXT: vslw 26, 26, 10
; BE-NEXT: vslw 27, 27, 10
; BE-NEXT: vslw 8, 8, 10
; BE-NEXT: lvx 10, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 160
; BE-NEXT: lvx 1, 1, 9 # 16-byte Folded Reload
; BE-NEXT: vadduwm 10, 10, 14
; BE-NEXT: li 9, 208
; BE-NEXT: vadduwm 2, 1, 2
; BE-NEXT: vxor 2, 3, 2
; BE-NEXT: vadduwm 3, 29, 23
; BE-NEXT: vadduwm 1, 7, 26
; BE-NEXT: vxor 3, 5, 3
; BE-NEXT: vadduwm 5, 16, 25
; BE-NEXT: vxor 2, 2, 0
; BE-NEXT: vadduwm 0, 13, 21
; BE-NEXT: vxor 4, 4, 10
; BE-NEXT: vxor 5, 1, 5
; BE-NEXT: vadduwm 1, 12, 6
; BE-NEXT: vxor 3, 3, 0
; BE-NEXT: vadduwm 0, 17, 27
; BE-NEXT: vxor 4, 4, 1
; BE-NEXT: vxor 5, 5, 0
; BE-NEXT: vadduwm 0, 28, 11
; BE-NEXT: vxor 4, 4, 0
; BE-NEXT: vadduwm 0, 30, 9
; BE-NEXT: vxor 2, 2, 0
; BE-NEXT: vadduwm 0, 19, 20
; BE-NEXT: vxor 3, 3, 0
; BE-NEXT: vadduwm 0, 31, 8
; BE-NEXT: vxor 5, 5, 0
; BE-NEXT: lvx 0, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 224
; BE-NEXT: vand 4, 4, 0
; BE-NEXT: lvx 0, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 192
; BE-NEXT: vand 2, 2, 0
; BE-NEXT: lvx 0, 1, 9 # 16-byte Folded Reload
; BE-NEXT: addi 9, 1, 304
; BE-NEXT: vand 3, 3, 24
; BE-NEXT: vor 2, 2, 4
; BE-NEXT: vand 5, 5, 0
; BE-NEXT: vor 2, 2, 3
; BE-NEXT: vor 2, 2, 5
; BE-NEXT: stvx 2, 0, 9
; BE-NEXT: lwz 9, 316(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 332(1)
; BE-NEXT: lwz 9, 312(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 328(1)
; BE-NEXT: lwz 9, 308(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 324(1)
; BE-NEXT: lwz 9, 304(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 7, 10, 7
; BE-NEXT: and 8, 9, 8
; BE-NEXT: or 7, 8, 7
; BE-NEXT: slwi 8, 7, 2
; BE-NEXT: srwi 7, 7, 2
; BE-NEXT: and 5, 8, 5
; BE-NEXT: and 6, 7, 6
; BE-NEXT: or 5, 6, 5
; BE-NEXT: slwi 6, 5, 4
; BE-NEXT: srwi 5, 5, 4
; BE-NEXT: and 3, 6, 3
; BE-NEXT: and 4, 5, 4
; BE-NEXT: or 3, 4, 3
; BE-NEXT: rotlwi 4, 3, 24
; BE-NEXT: rlwimi 4, 3, 8, 8, 15
; BE-NEXT: rlwimi 4, 3, 8, 24, 31
; BE-NEXT: rldicl 3, 4, 0, 32
; BE-NEXT: stw 3, 320(1)
; BE-NEXT: addi 3, 1, 320
; BE-NEXT: lvx 2, 0, 3
; BE-NEXT: li 3, 512
; BE-NEXT: lvx 31, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 496
; BE-NEXT: lvx 30, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 480
; BE-NEXT: lvx 29, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 464
; BE-NEXT: lvx 28, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 448
; BE-NEXT: lvx 27, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 432
; BE-NEXT: lvx 26, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 416
; BE-NEXT: lvx 25, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 400
; BE-NEXT: lvx 24, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 384
; BE-NEXT: lvx 23, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 368
; BE-NEXT: lvx 22, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 352
; BE-NEXT: lvx 21, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 336
; BE-NEXT: lvx 20, 1, 3 # 16-byte Folded Reload
; BE-NEXT: addi 1, 1, 528
; BE-NEXT: blr
;
; LE-LABEL: clmulr_v4i32:
; LE: # %bb.0:
; LE-NEXT: xxsldwi 0, 35, 35, 1
; LE-NEXT: mfvsrwz 9, 35
; LE-NEXT: lis 3, -21846
; LE-NEXT: lis 6, 13107
; LE-NEXT: xxswapd 1, 35
; LE-NEXT: xxsldwi 3, 35, 35, 3
; LE-NEXT: lis 7, 3855
; LE-NEXT: ori 4, 3, 43690
; LE-NEXT: mffprwz 11, 0
; LE-NEXT: lis 3, 21845
; LE-NEXT: mffprwz 0, 1
; LE-NEXT: ori 8, 6, 13107
; LE-NEXT: lis 6, -3856
; LE-NEXT: ori 7, 7, 3855
; LE-NEXT: xxsldwi 2, 34, 34, 1
; LE-NEXT: xxswapd 4, 34
; LE-NEXT: ori 5, 3, 21845
; LE-NEXT: lis 3, -13108
; LE-NEXT: ori 6, 6, 61680
; LE-NEXT: xxsldwi 0, 34, 34, 3
; LE-NEXT: slwi 10, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: vspltisb 3, -16
; LE-NEXT: vspltisb 4, 1
; LE-NEXT: ori 3, 3, 52428
; LE-NEXT: slwi 12, 11, 1
; LE-NEXT: srwi 11, 11, 1
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 5
; LE-NEXT: and 12, 12, 4
; LE-NEXT: and 11, 11, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: mffprwz 10, 3
; LE-NEXT: or 11, 11, 12
; LE-NEXT: slwi 12, 0, 1
; LE-NEXT: srwi 0, 0, 1
; LE-NEXT: and 12, 12, 4
; LE-NEXT: and 0, 0, 5
; LE-NEXT: or 12, 0, 12
; LE-NEXT: slwi 0, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 0, 0, 4
; LE-NEXT: and 10, 10, 5
; LE-NEXT: or 10, 10, 0
; LE-NEXT: slwi 0, 11, 2
; LE-NEXT: srwi 11, 11, 2
; LE-NEXT: and 0, 0, 3
; LE-NEXT: and 11, 11, 8
; LE-NEXT: or 11, 11, 0
; LE-NEXT: slwi 0, 12, 2
; LE-NEXT: srwi 12, 12, 2
; LE-NEXT: and 0, 0, 3
; LE-NEXT: and 12, 12, 8
; LE-NEXT: or 12, 12, 0
; LE-NEXT: slwi 0, 10, 2
; LE-NEXT: srwi 10, 10, 2
; LE-NEXT: and 0, 0, 3
; LE-NEXT: and 10, 10, 8
; LE-NEXT: or 10, 10, 0
; LE-NEXT: slwi 0, 11, 4
; LE-NEXT: srwi 11, 11, 4
; LE-NEXT: and 0, 0, 6
; LE-NEXT: and 11, 11, 7
; LE-NEXT: or 11, 11, 0
; LE-NEXT: slwi 0, 12, 4
; LE-NEXT: srwi 12, 12, 4
; LE-NEXT: and 0, 0, 6
; LE-NEXT: and 12, 12, 7
; LE-NEXT: or 12, 12, 0
; LE-NEXT: slwi 0, 10, 4
; LE-NEXT: srwi 10, 10, 4
; LE-NEXT: and 0, 0, 6
; LE-NEXT: and 10, 10, 7
; LE-NEXT: or 10, 10, 0
; LE-NEXT: rotlwi 0, 11, 24
; LE-NEXT: rlwimi 0, 11, 8, 8, 15
; LE-NEXT: rlwimi 0, 11, 8, 24, 31
; LE-NEXT: rotlwi 11, 12, 24
; LE-NEXT: rlwimi 11, 12, 8, 8, 15
; LE-NEXT: rlwimi 11, 12, 8, 24, 31
; LE-NEXT: rotlwi 12, 10, 24
; LE-NEXT: rldicl 11, 11, 0, 32
; LE-NEXT: rlwimi 12, 10, 8, 8, 15
; LE-NEXT: rlwimi 12, 10, 8, 24, 31
; LE-NEXT: rldicl 10, 0, 0, 32
; LE-NEXT: rldimi 11, 10, 32, 0
; LE-NEXT: slwi 10, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 10, 10, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: mtfprd 1, 11
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rldicl 10, 12, 0, 32
; LE-NEXT: slwi 11, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 11, 11, 6
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 11
; LE-NEXT: rotlwi 11, 9, 24
; LE-NEXT: rlwimi 11, 9, 8, 8, 15
; LE-NEXT: rlwimi 11, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 11, 0, 32
; LE-NEXT: rldimi 9, 10, 32, 0
; LE-NEXT: mtfprd 3, 9
; LE-NEXT: mffprwz 9, 2
; LE-NEXT: slwi 10, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 10, 10, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: mffprwz 10, 4
; LE-NEXT: slwi 11, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 11, 11, 4
; LE-NEXT: and 10, 10, 5
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 10, 2
; LE-NEXT: srwi 10, 10, 2
; LE-NEXT: and 11, 11, 3
; LE-NEXT: and 10, 10, 8
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 10, 4
; LE-NEXT: srwi 10, 10, 4
; LE-NEXT: and 11, 11, 6
; LE-NEXT: and 10, 10, 7
; LE-NEXT: or 10, 10, 11
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rldicl 10, 11, 0, 32
; LE-NEXT: rldimi 10, 9, 32, 0
; LE-NEXT: mffprwz 9, 0
; LE-NEXT: mtfprd 2, 10
; LE-NEXT: slwi 10, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 10, 10, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: mfvsrwz 10, 34
; LE-NEXT: vsububm 2, 4, 3
; LE-NEXT: slwi 11, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 11, 11, 4
; LE-NEXT: and 10, 10, 5
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 10, 2
; LE-NEXT: srwi 10, 10, 2
; LE-NEXT: and 11, 11, 3
; LE-NEXT: and 10, 10, 8
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 10, 4
; LE-NEXT: srwi 10, 10, 4
; LE-NEXT: and 11, 11, 6
; LE-NEXT: and 10, 10, 7
; LE-NEXT: or 10, 10, 11
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rldicl 10, 11, 0, 32
; LE-NEXT: rldimi 10, 9, 32, 0
; LE-NEXT: addis 9, 2, .LCPI6_0@toc@ha
; LE-NEXT: mtfprd 0, 10
; LE-NEXT: addi 9, 9, .LCPI6_0@toc@l
; LE-NEXT: xxmrghd 1, 3, 1
; LE-NEXT: xxland 35, 1, 34
; LE-NEXT: xxmrghd 0, 0, 2
; LE-NEXT: lxvd2x 2, 0, 9
; LE-NEXT: addis 9, 2, .LCPI6_1@toc@ha
; LE-NEXT: addi 9, 9, .LCPI6_1@toc@l
; LE-NEXT: xxland 33, 0, 34
; LE-NEXT: lxvd2x 4, 0, 9
; LE-NEXT: addis 9, 2, .LCPI6_2@toc@ha
; LE-NEXT: vmuluwm 10, 1, 3
; LE-NEXT: xxland 36, 0, 2
; LE-NEXT: xxland 32, 1, 2
; LE-NEXT: addi 9, 9, .LCPI6_2@toc@l
; LE-NEXT: vmuluwm 5, 4, 3
; LE-NEXT: vmuluwm 6, 1, 0
; LE-NEXT: lxvd2x 5, 0, 9
; LE-NEXT: xxland 40, 0, 4
; LE-NEXT: xxlxor 3, 38, 37
; LE-NEXT: xxland 37, 1, 4
; LE-NEXT: xxland 38, 0, 5
; LE-NEXT: vmuluwm 7, 6, 5
; LE-NEXT: xxlxor 3, 3, 39
; LE-NEXT: xxland 39, 1, 5
; LE-NEXT: vmuluwm 9, 8, 7
; LE-NEXT: xxlxor 0, 3, 41
; LE-NEXT: vmuluwm 9, 4, 5
; LE-NEXT: xxland 0, 0, 2
; LE-NEXT: xxlxor 1, 42, 41
; LE-NEXT: vmuluwm 9, 6, 7
; LE-NEXT: xxlxor 1, 1, 41
; LE-NEXT: vmuluwm 9, 8, 0
; LE-NEXT: xxlxor 1, 1, 41
; LE-NEXT: vmuluwm 9, 1, 7
; LE-NEXT: xxland 1, 1, 34
; LE-NEXT: vmuluwm 2, 4, 0
; LE-NEXT: xxlor 0, 1, 0
; LE-NEXT: xxlxor 1, 41, 34
; LE-NEXT: vmuluwm 2, 6, 3
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: vmuluwm 2, 8, 5
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: vmuluwm 2, 4, 7
; LE-NEXT: vmuluwm 4, 1, 5
; LE-NEXT: xxland 1, 1, 5
; LE-NEXT: xxlor 0, 0, 1
; LE-NEXT: xxlxor 1, 36, 34
; LE-NEXT: vmuluwm 2, 6, 0
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: vmuluwm 2, 8, 3
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: xxland 1, 1, 4
; LE-NEXT: xxlor 0, 0, 1
; LE-NEXT: xxsldwi 1, 0, 0, 1
; LE-NEXT: xxswapd 2, 0
; LE-NEXT: xxsldwi 3, 0, 0, 3
; LE-NEXT: mffprwz 9, 1
; LE-NEXT: mffprwz 10, 2
; LE-NEXT: slwi 11, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 11, 11, 4
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 11
; LE-NEXT: slwi 11, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 11, 11, 4
; LE-NEXT: and 10, 10, 5
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 11, 11, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 11
; LE-NEXT: slwi 11, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 11, 11, 6
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 11
; LE-NEXT: rotlwi 11, 9, 24
; LE-NEXT: rlwimi 11, 9, 8, 8, 15
; LE-NEXT: rlwimi 11, 9, 8, 24, 31
; LE-NEXT: slwi 9, 10, 2
; LE-NEXT: srwi 10, 10, 2
; LE-NEXT: rldicl 11, 11, 0, 32
; LE-NEXT: and 9, 9, 3
; LE-NEXT: and 10, 10, 8
; LE-NEXT: or 9, 10, 9
; LE-NEXT: slwi 10, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: rldimi 9, 11, 32, 0
; LE-NEXT: mtfprd 1, 9
; LE-NEXT: mffprwz 9, 3
; LE-NEXT: slwi 10, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 10, 10, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: mffprwz 10, 0
; LE-NEXT: slwi 11, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 4, 11, 4
; LE-NEXT: and 5, 10, 5
; LE-NEXT: or 4, 5, 4
; LE-NEXT: slwi 5, 4, 2
; LE-NEXT: srwi 4, 4, 2
; LE-NEXT: and 3, 5, 3
; LE-NEXT: and 4, 4, 8
; LE-NEXT: or 3, 4, 3
; LE-NEXT: slwi 4, 3, 4
; LE-NEXT: srwi 3, 3, 4
; LE-NEXT: and 4, 4, 6
; LE-NEXT: and 3, 3, 7
; LE-NEXT: or 3, 3, 4
; LE-NEXT: rotlwi 4, 3, 24
; LE-NEXT: rlwimi 4, 3, 8, 8, 15
; LE-NEXT: rlwimi 4, 3, 8, 24, 31
; LE-NEXT: rldicl 3, 4, 0, 32
; LE-NEXT: rldimi 3, 9, 32, 0
; LE-NEXT: mtfprd 0, 3
; LE-NEXT: xxmrghd 34, 0, 1
; LE-NEXT: blr
%a.ext = zext <4 x i32> %a to <4 x i64>
%b.ext = zext <4 x i32> %b to <4 x i64>
%clmul = call <4 x i64> @llvm.clmul.v4i64(<4 x i64> %a.ext, <4 x i64> %b.ext)
%res.ext = lshr <4 x i64> %clmul, splat (i64 31)
%res = trunc <4 x i64> %res.ext to <4 x i32>
ret <4 x i32> %res
}
define <2 x i64> @clmulr_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
; BE-LABEL: clmulr_v2i64:
; BE: # %bb.0:
; BE-NEXT: lis 7, -21846
; BE-NEXT: lis 8, 21845
; BE-NEXT: std 29, -24(1) # 8-byte Folded Spill
; BE-NEXT: lis 9, -13108
; BE-NEXT: lis 10, 13107
; BE-NEXT: std 30, -16(1) # 8-byte Folded Spill
; BE-NEXT: lis 11, -3856
; BE-NEXT: lis 12, 3855
; BE-NEXT: ori 7, 7, 43690
; BE-NEXT: ori 8, 8, 21845
; BE-NEXT: std 18, -112(1) # 8-byte Folded Spill
; BE-NEXT: sldi 0, 5, 1
; BE-NEXT: rldicl 30, 5, 63, 1
; BE-NEXT: std 20, -96(1) # 8-byte Folded Spill
; BE-NEXT: ori 5, 9, 52428
; BE-NEXT: ori 9, 10, 13107
; BE-NEXT: ori 10, 11, 61680
; BE-NEXT: ori 11, 12, 3855
; BE-NEXT: std 17, -120(1) # 8-byte Folded Spill
; BE-NEXT: sldi 12, 3, 1
; BE-NEXT: rldicl 29, 3, 63, 1
; BE-NEXT: std 28, -32(1) # 8-byte Folded Spill
; BE-NEXT: sldi 3, 7, 32
; BE-NEXT: sldi 7, 8, 32
; BE-NEXT: sldi 8, 9, 32
; BE-NEXT: sldi 9, 10, 32
; BE-NEXT: std 25, -56(1) # 8-byte Folded Spill
; BE-NEXT: oris 3, 3, 43690
; BE-NEXT: oris 7, 7, 21845
; BE-NEXT: std 27, -40(1) # 8-byte Folded Spill
; BE-NEXT: sldi 10, 11, 32
; BE-NEXT: oris 11, 9, 61680
; BE-NEXT: ori 18, 3, 43690
; BE-NEXT: ori 20, 7, 21845
; BE-NEXT: std 22, -80(1) # 8-byte Folded Spill
; BE-NEXT: sldi 5, 5, 32
; BE-NEXT: ori 7, 11, 61680
; BE-NEXT: std 23, -72(1) # 8-byte Folded Spill
; BE-NEXT: and 11, 0, 18
; BE-NEXT: and 0, 30, 20
; BE-NEXT: oris 5, 5, 52428
; BE-NEXT: oris 8, 8, 13107
; BE-NEXT: std 26, -48(1) # 8-byte Folded Spill
; BE-NEXT: or 11, 0, 11
; BE-NEXT: ori 5, 5, 52428
; BE-NEXT: std 19, -104(1) # 8-byte Folded Spill
; BE-NEXT: ori 17, 8, 13107
; BE-NEXT: and 12, 12, 18
; BE-NEXT: and 30, 29, 20
; BE-NEXT: sldi 0, 11, 2
; BE-NEXT: std 21, -88(1) # 8-byte Folded Spill
; BE-NEXT: rldicl 11, 11, 62, 2
; BE-NEXT: or 12, 30, 12
; BE-NEXT: std 24, -64(1) # 8-byte Folded Spill
; BE-NEXT: and 0, 0, 5
; BE-NEXT: and 11, 11, 17
; BE-NEXT: oris 28, 10, 3855
; BE-NEXT: sldi 30, 12, 2
; BE-NEXT: std 14, -144(1) # 8-byte Folded Spill
; BE-NEXT: rldicl 12, 12, 62, 2
; BE-NEXT: or 11, 11, 0
; BE-NEXT: std 16, -128(1) # 8-byte Folded Spill
; BE-NEXT: mr 25, 4
; BE-NEXT: ori 4, 28, 3855
; BE-NEXT: and 30, 30, 5
; BE-NEXT: and 12, 12, 17
; BE-NEXT: std 31, -8(1) # 8-byte Folded Spill
; BE-NEXT: sldi 0, 11, 4
; BE-NEXT: rldicl 11, 11, 60, 4
; BE-NEXT: std 2, -152(1) # 8-byte Folded Spill
; BE-NEXT: or 12, 12, 30
; BE-NEXT: and 0, 0, 7
; BE-NEXT: and 11, 11, 4
; BE-NEXT: sldi 30, 12, 4
; BE-NEXT: std 15, -136(1) # 8-byte Folded Spill
; BE-NEXT: rldicl 12, 12, 60, 4
; BE-NEXT: or 11, 11, 0
; BE-NEXT: std 4, -288(1) # 8-byte Folded Spill
; BE-NEXT: and 30, 30, 7
; BE-NEXT: and 12, 12, 4
; BE-NEXT: rotlwi 0, 11, 24
; BE-NEXT: or 12, 12, 30
; BE-NEXT: rlwimi 0, 11, 8, 8, 15
; BE-NEXT: rldicl 29, 11, 32, 32
; BE-NEXT: rlwimi 0, 11, 8, 24, 31
; BE-NEXT: rldicl 11, 12, 32, 32
; BE-NEXT: rotlwi 30, 12, 24
; BE-NEXT: rotlwi 27, 11, 24
; BE-NEXT: rlwimi 30, 12, 8, 8, 15
; BE-NEXT: rotlwi 28, 29, 24
; BE-NEXT: rlwimi 27, 11, 8, 8, 15
; BE-NEXT: rlwimi 28, 29, 8, 8, 15
; BE-NEXT: rlwimi 30, 12, 8, 24, 31
; BE-NEXT: rlwimi 27, 11, 8, 24, 31
; BE-NEXT: lis 11, 4369
; BE-NEXT: lis 12, 8738
; BE-NEXT: rlwimi 28, 29, 8, 24, 31
; BE-NEXT: ori 22, 11, 4369
; BE-NEXT: ori 23, 12, 8738
; BE-NEXT: sldi 0, 0, 32
; BE-NEXT: sldi 30, 30, 32
; BE-NEXT: rldimi 22, 22, 32, 0
; BE-NEXT: rldimi 23, 23, 32, 0
; BE-NEXT: or 26, 0, 28
; BE-NEXT: or 27, 30, 27
; BE-NEXT: lis 0, -30584
; BE-NEXT: lis 30, 17476
; BE-NEXT: and 19, 26, 22
; BE-NEXT: and 21, 27, 23
; BE-NEXT: ori 24, 0, 34952
; BE-NEXT: ori 28, 30, 17476
; BE-NEXT: and 16, 26, 23
; BE-NEXT: and 14, 27, 22
; BE-NEXT: mulld 3, 21, 19
; BE-NEXT: std 3, -160(1) # 8-byte Folded Spill
; BE-NEXT: rldimi 24, 24, 32, 0
; BE-NEXT: rldimi 28, 28, 32, 0
; BE-NEXT: mulld 3, 14, 16
; BE-NEXT: and 31, 26, 24
; BE-NEXT: std 3, -168(1) # 8-byte Folded Spill
; BE-NEXT: and 2, 27, 28
; BE-NEXT: and 15, 26, 28
; BE-NEXT: and 3, 27, 24
; BE-NEXT: mulld 8, 2, 31
; BE-NEXT: std 8, -184(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 3, 15
; BE-NEXT: std 8, -176(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 21, 31
; BE-NEXT: std 8, -208(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 14, 19
; BE-NEXT: std 8, -216(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 2, 15
; BE-NEXT: std 8, -200(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 3, 16
; BE-NEXT: std 8, -192(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 21, 16
; BE-NEXT: std 8, -248(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 14, 15
; BE-NEXT: std 8, -256(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 2, 19
; BE-NEXT: std 8, -232(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 21, 15
; BE-NEXT: std 8, -272(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 3, 31
; BE-NEXT: ld 15, -256(1) # 8-byte Folded Reload
; BE-NEXT: mulld 3, 3, 19
; BE-NEXT: std 3, -240(1) # 8-byte Folded Spill
; BE-NEXT: std 8, -224(1) # 8-byte Folded Spill
; BE-NEXT: sldi 3, 6, 1
; BE-NEXT: rldicl 6, 6, 63, 1
; BE-NEXT: and 3, 3, 18
; BE-NEXT: and 6, 6, 20
; BE-NEXT: mulld 8, 14, 31
; BE-NEXT: std 8, -280(1) # 8-byte Folded Spill
; BE-NEXT: or 3, 6, 3
; BE-NEXT: sldi 6, 3, 2
; BE-NEXT: rldicl 3, 3, 62, 2
; BE-NEXT: and 6, 6, 5
; BE-NEXT: and 3, 3, 17
; BE-NEXT: sldi 31, 25, 1
; BE-NEXT: rldicl 25, 25, 63, 1
; BE-NEXT: or 3, 3, 6
; BE-NEXT: and 31, 31, 18
; BE-NEXT: and 25, 25, 20
; BE-NEXT: sldi 6, 3, 4
; BE-NEXT: rldicl 3, 3, 60, 4
; BE-NEXT: or 25, 25, 31
; BE-NEXT: and 6, 6, 7
; BE-NEXT: and 3, 3, 4
; BE-NEXT: sldi 31, 25, 2
; BE-NEXT: rldicl 25, 25, 62, 2
; BE-NEXT: or 3, 3, 6
; BE-NEXT: and 31, 31, 5
; BE-NEXT: and 25, 25, 17
; BE-NEXT: rotlwi 6, 3, 24
; BE-NEXT: or 25, 25, 31
; BE-NEXT: rlwimi 6, 3, 8, 8, 15
; BE-NEXT: sldi 31, 25, 4
; BE-NEXT: rldicl 25, 25, 60, 4
; BE-NEXT: rlwimi 6, 3, 8, 24, 31
; BE-NEXT: and 31, 31, 7
; BE-NEXT: and 25, 25, 4
; BE-NEXT: rldicl 3, 3, 32, 32
; BE-NEXT: mulld 8, 2, 16
; BE-NEXT: ld 16, -280(1) # 8-byte Folded Reload
; BE-NEXT: or 25, 25, 31
; BE-NEXT: rotlwi 2, 3, 24
; BE-NEXT: std 8, -264(1) # 8-byte Folded Spill
; BE-NEXT: rotlwi 31, 25, 24
; BE-NEXT: rlwimi 2, 3, 8, 8, 15
; BE-NEXT: rlwimi 31, 25, 8, 8, 15
; BE-NEXT: rlwimi 2, 3, 8, 24, 31
; BE-NEXT: rldicl 3, 25, 32, 32
; BE-NEXT: rlwimi 31, 25, 8, 24, 31
; BE-NEXT: rotlwi 25, 3, 24
; BE-NEXT: rlwimi 25, 3, 8, 8, 15
; BE-NEXT: mr 14, 7
; BE-NEXT: rlwimi 25, 3, 8, 24, 31
; BE-NEXT: sldi 3, 6, 32
; BE-NEXT: sldi 6, 31, 32
; BE-NEXT: or 3, 3, 2
; BE-NEXT: or 7, 6, 25
; BE-NEXT: mr 19, 5
; BE-NEXT: and 25, 3, 22
; BE-NEXT: and 31, 7, 23
; BE-NEXT: and 2, 3, 24
; BE-NEXT: and 6, 3, 23
; BE-NEXT: and 5, 3, 28
; BE-NEXT: and 3, 7, 28
; BE-NEXT: and 4, 7, 24
; BE-NEXT: and 7, 7, 22
; BE-NEXT: mulld 21, 31, 25
; BE-NEXT: mulld 26, 31, 2
; BE-NEXT: mulld 29, 31, 6
; BE-NEXT: mulld 31, 31, 5
; BE-NEXT: mulld 27, 4, 5
; BE-NEXT: mulld 0, 3, 5
; BE-NEXT: mulld 9, 7, 5
; BE-NEXT: mulld 8, 7, 6
; BE-NEXT: mulld 30, 4, 6
; BE-NEXT: mulld 11, 3, 6
; BE-NEXT: mulld 6, 3, 2
; BE-NEXT: mulld 10, 3, 25
; BE-NEXT: ld 3, -160(1) # 8-byte Folded Reload
; BE-NEXT: mulld 5, 7, 25
; BE-NEXT: mulld 7, 7, 2
; BE-NEXT: mulld 2, 4, 2
; BE-NEXT: mulld 12, 4, 25
; BE-NEXT: ld 4, -168(1) # 8-byte Folded Reload
; BE-NEXT: xor 25, 4, 3
; BE-NEXT: ld 3, -208(1) # 8-byte Folded Reload
; BE-NEXT: xor 8, 8, 21
; BE-NEXT: xor 5, 5, 26
; BE-NEXT: xor 9, 9, 29
; BE-NEXT: ld 4, -216(1) # 8-byte Folded Reload
; BE-NEXT: xor 6, 8, 6
; BE-NEXT: xor 8, 9, 10
; BE-NEXT: ld 26, -200(1) # 8-byte Folded Reload
; BE-NEXT: xor 3, 4, 3
; BE-NEXT: xor 5, 5, 0
; BE-NEXT: xor 7, 7, 31
; BE-NEXT: xor 6, 6, 27
; BE-NEXT: ld 10, -192(1) # 8-byte Folded Reload
; BE-NEXT: xor 3, 3, 26
; BE-NEXT: xor 5, 5, 30
; BE-NEXT: ld 4, -248(1) # 8-byte Folded Reload
; BE-NEXT: xor 3, 3, 10
; BE-NEXT: xor 7, 7, 11
; BE-NEXT: and 3, 3, 22
; BE-NEXT: xor 8, 8, 2
; BE-NEXT: ld 26, -232(1) # 8-byte Folded Reload
; BE-NEXT: xor 4, 15, 4
; BE-NEXT: and 6, 6, 23
; BE-NEXT: ld 29, -184(1) # 8-byte Folded Reload
; BE-NEXT: xor 4, 4, 26
; BE-NEXT: and 5, 5, 22
; BE-NEXT: xor 7, 7, 12
; BE-NEXT: and 8, 8, 28
; BE-NEXT: ld 10, -224(1) # 8-byte Folded Reload
; BE-NEXT: xor 29, 25, 29
; BE-NEXT: or 5, 5, 6
; BE-NEXT: ld 15, -272(1) # 8-byte Folded Reload
; BE-NEXT: xor 4, 4, 10
; BE-NEXT: and 7, 7, 24
; BE-NEXT: and 4, 4, 28
; BE-NEXT: ld 9, -176(1) # 8-byte Folded Reload
; BE-NEXT: xor 15, 16, 15
; BE-NEXT: ld 26, -264(1) # 8-byte Folded Reload
; BE-NEXT: xor 9, 29, 9
; BE-NEXT: and 9, 9, 23
; BE-NEXT: or 3, 3, 9
; BE-NEXT: ld 10, -240(1) # 8-byte Folded Reload
; BE-NEXT: xor 26, 15, 26
; BE-NEXT: or 3, 3, 4
; BE-NEXT: or 4, 5, 8
; BE-NEXT: xor 10, 26, 10
; BE-NEXT: ld 2, -152(1) # 8-byte Folded Reload
; BE-NEXT: and 10, 10, 24
; BE-NEXT: or 3, 3, 10
; BE-NEXT: sldi 5, 3, 1
; BE-NEXT: ld 31, -8(1) # 8-byte Folded Reload
; BE-NEXT: rldicl 3, 3, 63, 1
; BE-NEXT: or 4, 4, 7
; BE-NEXT: and 5, 5, 18
; BE-NEXT: ld 7, -288(1) # 8-byte Folded Reload
; BE-NEXT: and 3, 3, 20
; BE-NEXT: sldi 6, 4, 1
; BE-NEXT: rldicl 4, 4, 63, 1
; BE-NEXT: ld 30, -16(1) # 8-byte Folded Reload
; BE-NEXT: or 3, 3, 5
; BE-NEXT: and 6, 6, 18
; BE-NEXT: and 4, 4, 20
; BE-NEXT: ld 29, -24(1) # 8-byte Folded Reload
; BE-NEXT: sldi 5, 3, 2
; BE-NEXT: rldicl 3, 3, 62, 2
; BE-NEXT: or 4, 4, 6
; BE-NEXT: ld 28, -32(1) # 8-byte Folded Reload
; BE-NEXT: and 5, 5, 19
; BE-NEXT: and 3, 3, 17
; BE-NEXT: sldi 6, 4, 2
; BE-NEXT: ld 27, -40(1) # 8-byte Folded Reload
; BE-NEXT: rldicl 4, 4, 62, 2
; BE-NEXT: or 3, 3, 5
; BE-NEXT: and 6, 6, 19
; BE-NEXT: ld 26, -48(1) # 8-byte Folded Reload
; BE-NEXT: and 4, 4, 17
; BE-NEXT: sldi 5, 3, 4
; BE-NEXT: rldicl 3, 3, 60, 4
; BE-NEXT: ld 25, -56(1) # 8-byte Folded Reload
; BE-NEXT: or 4, 4, 6
; BE-NEXT: and 5, 5, 14
; BE-NEXT: and 3, 3, 7
; BE-NEXT: ld 24, -64(1) # 8-byte Folded Reload
; BE-NEXT: sldi 6, 4, 4
; BE-NEXT: rldicl 4, 4, 60, 4
; BE-NEXT: or 3, 3, 5
; BE-NEXT: ld 23, -72(1) # 8-byte Folded Reload
; BE-NEXT: and 6, 6, 14
; BE-NEXT: and 4, 4, 7
; BE-NEXT: rotlwi 5, 3, 24
; BE-NEXT: ld 22, -80(1) # 8-byte Folded Reload
; BE-NEXT: or 4, 4, 6
; BE-NEXT: rlwimi 5, 3, 8, 8, 15
; BE-NEXT: rotlwi 6, 4, 24
; BE-NEXT: ld 21, -88(1) # 8-byte Folded Reload
; BE-NEXT: rldicl 7, 3, 32, 32
; BE-NEXT: rlwimi 5, 3, 8, 24, 31
; BE-NEXT: ld 20, -96(1) # 8-byte Folded Reload
; BE-NEXT: rldicl 3, 4, 32, 32
; BE-NEXT: rlwimi 6, 4, 8, 8, 15
; BE-NEXT: ld 19, -104(1) # 8-byte Folded Reload
; BE-NEXT: rotlwi 8, 7, 24
; BE-NEXT: rotlwi 9, 3, 24
; BE-NEXT: ld 18, -112(1) # 8-byte Folded Reload
; BE-NEXT: rlwimi 8, 7, 8, 8, 15
; BE-NEXT: rlwimi 9, 3, 8, 8, 15
; BE-NEXT: ld 17, -120(1) # 8-byte Folded Reload
; BE-NEXT: rlwimi 6, 4, 8, 24, 31
; BE-NEXT: rlwimi 8, 7, 8, 24, 31
; BE-NEXT: ld 16, -128(1) # 8-byte Folded Reload
; BE-NEXT: rlwimi 9, 3, 8, 24, 31
; BE-NEXT: ld 15, -136(1) # 8-byte Folded Reload
; BE-NEXT: sldi 3, 5, 32
; BE-NEXT: sldi 4, 6, 32
; BE-NEXT: ld 14, -144(1) # 8-byte Folded Reload
; BE-NEXT: or 3, 3, 8
; BE-NEXT: or 4, 4, 9
; BE-NEXT: blr
;
; LE-LABEL: clmulr_v2i64:
; LE: # %bb.0:
; LE-NEXT: lis 3, -21846
; LE-NEXT: lis 4, 21845
; LE-NEXT: lis 5, -13108
; LE-NEXT: lis 6, 13107
; LE-NEXT: xxswapd 0, 34
; LE-NEXT: lis 7, -3856
; LE-NEXT: lis 8, 3855
; LE-NEXT: xxswapd 1, 35
; LE-NEXT: ori 3, 3, 43690
; LE-NEXT: ori 4, 4, 21845
; LE-NEXT: ori 5, 5, 52428
; LE-NEXT: ori 6, 6, 13107
; LE-NEXT: mffprd 9, 0
; LE-NEXT: ori 7, 7, 61680
; LE-NEXT: ori 8, 8, 3855
; LE-NEXT: mffprd 10, 1
; LE-NEXT: sldi 3, 3, 32
; LE-NEXT: sldi 4, 4, 32
; LE-NEXT: sldi 5, 5, 32
; LE-NEXT: sldi 6, 6, 32
; LE-NEXT: sldi 7, 7, 32
; LE-NEXT: sldi 8, 8, 32
; LE-NEXT: vspltisw 4, 4
; LE-NEXT: vspltisw 0, 8
; LE-NEXT: oris 3, 3, 43690
; LE-NEXT: oris 4, 4, 21845
; LE-NEXT: vspltisw 7, 1
; LE-NEXT: vspltisw 10, 7
; LE-NEXT: oris 5, 5, 52428
; LE-NEXT: oris 11, 6, 13107
; LE-NEXT: vupklsw 1, 4
; LE-NEXT: vspltisw 4, 3
; LE-NEXT: oris 12, 7, 61680
; LE-NEXT: oris 0, 8, 3855
; LE-NEXT: vupklsw 6, 0
; LE-NEXT: vupklsw 10, 10
; LE-NEXT: ori 8, 3, 43690
; LE-NEXT: ori 7, 4, 21845
; LE-NEXT: vupklsw 8, 4
; LE-NEXT: xxlxor 36, 36, 36
; LE-NEXT: ori 6, 5, 52428
; LE-NEXT: ori 5, 11, 13107
; LE-NEXT: sldi 11, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: ori 4, 12, 61680
; LE-NEXT: sldi 12, 10, 1
; LE-NEXT: rldicl 10, 10, 63, 1
; LE-NEXT: and 11, 11, 8
; LE-NEXT: and 9, 9, 7
; LE-NEXT: and 12, 12, 8
; LE-NEXT: and 10, 10, 7
; LE-NEXT: or 9, 9, 11
; LE-NEXT: or 10, 10, 12
; LE-NEXT: ori 3, 0, 3855
; LE-NEXT: sldi 11, 9, 2
; LE-NEXT: rldicl 9, 9, 62, 2
; LE-NEXT: sldi 12, 10, 2
; LE-NEXT: rldicl 10, 10, 62, 2
; LE-NEXT: and 11, 11, 6
; LE-NEXT: and 9, 9, 5
; LE-NEXT: and 12, 12, 6
; LE-NEXT: and 10, 10, 5
; LE-NEXT: or 9, 9, 11
; LE-NEXT: or 10, 10, 12
; LE-NEXT: sldi 11, 9, 4
; LE-NEXT: rldicl 9, 9, 60, 4
; LE-NEXT: sldi 12, 10, 4
; LE-NEXT: rldicl 10, 10, 60, 4
; LE-NEXT: and 11, 11, 4
; LE-NEXT: and 9, 9, 3
; LE-NEXT: and 12, 12, 4
; LE-NEXT: and 10, 10, 3
; LE-NEXT: or 9, 9, 11
; LE-NEXT: or 10, 10, 12
; LE-NEXT: rotlwi 12, 9, 24
; LE-NEXT: rldicl 11, 9, 32, 32
; LE-NEXT: rldicl 0, 10, 32, 32
; LE-NEXT: rlwimi 12, 9, 8, 8, 15
; LE-NEXT: rlwimi 12, 9, 8, 24, 31
; LE-NEXT: rotlwi 9, 10, 24
; LE-NEXT: sldi 12, 12, 32
; LE-NEXT: rlwimi 9, 10, 8, 8, 15
; LE-NEXT: rlwimi 9, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 11, 24
; LE-NEXT: sldi 9, 9, 32
; LE-NEXT: rlwimi 10, 11, 8, 8, 15
; LE-NEXT: rlwimi 10, 11, 8, 24, 31
; LE-NEXT: rotlwi 11, 0, 24
; LE-NEXT: or 10, 12, 10
; LE-NEXT: rlwimi 11, 0, 8, 8, 15
; LE-NEXT: rlwimi 11, 0, 8, 24, 31
; LE-NEXT: mtfprd 0, 10
; LE-NEXT: or 9, 9, 11
; LE-NEXT: mtfprd 1, 9
; LE-NEXT: mfvsrd 9, 35
; LE-NEXT: sldi 10, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: and 10, 10, 8
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 2
; LE-NEXT: rldicl 9, 9, 62, 2
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 4
; LE-NEXT: rldicl 9, 9, 60, 4
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 3
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rldicl 10, 9, 32, 32
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: mfvsrd 9, 34
; LE-NEXT: sldi 10, 10, 32
; LE-NEXT: or 10, 10, 11
; LE-NEXT: mtfprd 2, 10
; LE-NEXT: sldi 10, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: and 10, 10, 8
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 2
; LE-NEXT: rldicl 9, 9, 62, 2
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 4
; LE-NEXT: rldicl 9, 9, 60, 4
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 3
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rldicl 10, 9, 32, 32
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: sldi 9, 10, 32
; LE-NEXT: addis 10, 2, .LCPI7_14@toc@ha
; LE-NEXT: or 9, 9, 11
; LE-NEXT: vspltisw 3, 2
; LE-NEXT: vupklsw 5, 3
; LE-NEXT: xxmrghd 34, 2, 1
; LE-NEXT: xxland 41, 34, 37
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: mtfprd 1, 9
; LE-NEXT: addis 9, 2, .LCPI7_0@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_0@toc@l
; LE-NEXT: xxmrghd 35, 1, 0
; LE-NEXT: vaddudm 0, 3, 3
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: xxland 0, 41, 32
; LE-NEXT: vupklsw 0, 7
; LE-NEXT: xxland 39, 34, 33
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: xxland 32, 34, 32
; LE-NEXT: xxland 1, 39, 37
; LE-NEXT: xxland 39, 34, 38
; LE-NEXT: vsld 5, 3, 8
; LE-NEXT: vsld 6, 3, 6
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: xxland 13, 32, 35
; LE-NEXT: xxland 2, 39, 37
; LE-NEXT: vsld 5, 3, 1
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_1@toc@ha
; LE-NEXT: xxlxor 0, 13, 0
; LE-NEXT: vspltisw 8, 5
; LE-NEXT: addi 9, 9, .LCPI7_1@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: xxland 41, 34, 33
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: xxland 5, 41, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_2@toc@ha
; LE-NEXT: vupklsw 8, 8
; LE-NEXT: vsld 8, 3, 8
; LE-NEXT: addi 9, 9, .LCPI7_2@toc@l
; LE-NEXT: xxlxor 0, 0, 5
; LE-NEXT: lxvd2x 3, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_3@toc@ha
; LE-NEXT: xxland 41, 34, 37
; LE-NEXT: vspltisw 7, 6
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_3@toc@l
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: lxvd2x 6, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_4@toc@ha
; LE-NEXT: xxland 4, 41, 40
; LE-NEXT: xxland 40, 34, 3
; LE-NEXT: vupklsw 7, 7
; LE-NEXT: vsld 7, 3, 7
; LE-NEXT: addi 9, 9, .LCPI7_4@toc@l
; LE-NEXT: vcmpgtud 8, 8, 4
; LE-NEXT: xxlxor 0, 0, 4
; LE-NEXT: lxvd2x 7, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_5@toc@ha
; LE-NEXT: xxland 41, 34, 6
; LE-NEXT: xxland 3, 40, 39
; LE-NEXT: vsld 7, 3, 10
; LE-NEXT: addi 9, 9, .LCPI7_5@toc@l
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: xxlxor 0, 0, 3
; LE-NEXT: lxvd2x 8, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_6@toc@ha
; LE-NEXT: xxland 6, 41, 39
; LE-NEXT: xxland 41, 34, 7
; LE-NEXT: addi 9, 9, .LCPI7_6@toc@l
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: xxlxor 0, 0, 6
; LE-NEXT: xxland 7, 41, 38
; LE-NEXT: xxland 41, 34, 8
; LE-NEXT: lxvd2x 8, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_7@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_7@toc@l
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: xxlxor 0, 0, 7
; LE-NEXT: lxvd2x 10, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_8@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_8@toc@l
; LE-NEXT: lxvd2x 11, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_9@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_9@toc@l
; LE-NEXT: lxvd2x 12, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_10@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_10@toc@l
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_11@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_11@toc@l
; LE-NEXT: lxvd2x 2, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_12@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_12@toc@l
; LE-NEXT: lxvd2x 4, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_13@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_13@toc@l
; LE-NEXT: vspltisw 8, 9
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: vspltisw 8, 10
; LE-NEXT: vsld 6, 3, 7
; LE-NEXT: xxland 9, 41, 38
; LE-NEXT: xxland 41, 34, 10
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: xxlxor 0, 0, 9
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: vspltisw 8, 11
; LE-NEXT: vsld 6, 3, 7
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: xxland 40, 34, 8
; LE-NEXT: vcmpgtud 8, 8, 4
; LE-NEXT: xxland 8, 40, 38
; LE-NEXT: vsld 6, 3, 7
; LE-NEXT: xxland 10, 41, 38
; LE-NEXT: xxland 41, 34, 11
; LE-NEXT: vcmpgtud 9, 9, 4
; LE-NEXT: xxlxor 0, 0, 8
; LE-NEXT: xxlxor 0, 0, 10
; LE-NEXT: vspltisw 7, 12
; LE-NEXT: vspltisw 8, 13
; LE-NEXT: vupklsw 6, 7
; LE-NEXT: vsld 6, 3, 6
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: xxland 11, 41, 38
; LE-NEXT: xxland 38, 34, 12
; LE-NEXT: vspltisw 8, 14
; LE-NEXT: vsld 7, 3, 7
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: xxland 12, 38, 39
; LE-NEXT: xxland 39, 34, 1
; LE-NEXT: vcmpgtud 7, 7, 4
; LE-NEXT: xxlxor 0, 0, 11
; LE-NEXT: vupklsw 8, 8
; LE-NEXT: vsld 6, 3, 8
; LE-NEXT: xxland 1, 39, 38
; LE-NEXT: xxland 38, 34, 2
; LE-NEXT: vspltisw 9, 15
; LE-NEXT: xxlxor 0, 0, 12
; LE-NEXT: vcmpgtud 6, 6, 4
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: vupklsw 0, 9
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 2, 38, 32
; LE-NEXT: vsld 0, 3, 1
; LE-NEXT: xxland 33, 34, 4
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: xxland 4, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addi 9, 10, .LCPI7_14@toc@l
; LE-NEXT: addis 10, 2, .LCPI7_16@toc@ha
; LE-NEXT: lxvd2x 3, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_15@toc@ha
; LE-NEXT: xxlxor 0, 0, 4
; LE-NEXT: addi 9, 9, .LCPI7_15@toc@l
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 33, 34, 3
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 3, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addi 9, 10, .LCPI7_16@toc@l
; LE-NEXT: addis 10, 2, .LCPI7_18@toc@ha
; LE-NEXT: lxvd2x 5, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_17@toc@ha
; LE-NEXT: xxlxor 0, 0, 3
; LE-NEXT: addi 9, 9, .LCPI7_17@toc@l
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 33, 34, 5
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 5, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addi 9, 10, .LCPI7_18@toc@l
; LE-NEXT: addis 10, 2, .LCPI7_20@toc@ha
; LE-NEXT: lxvd2x 6, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_19@toc@ha
; LE-NEXT: xxlxor 0, 0, 5
; LE-NEXT: addi 9, 9, .LCPI7_19@toc@l
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 33, 34, 6
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 6, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addi 9, 10, .LCPI7_20@toc@l
; LE-NEXT: addis 10, 2, .LCPI7_22@toc@ha
; LE-NEXT: lxvd2x 7, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_21@toc@ha
; LE-NEXT: xxlxor 0, 0, 6
; LE-NEXT: addi 9, 9, .LCPI7_21@toc@l
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 33, 34, 7
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 7, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addi 9, 10, .LCPI7_22@toc@l
; LE-NEXT: addis 10, 2, .LCPI7_24@toc@ha
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_23@toc@ha
; LE-NEXT: xxlxor 0, 0, 7
; LE-NEXT: addi 9, 9, .LCPI7_23@toc@l
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addi 9, 10, .LCPI7_24@toc@l
; LE-NEXT: addis 10, 2, .LCPI7_26@toc@ha
; LE-NEXT: lxvd2x 2, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_25@toc@ha
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: addi 9, 9, .LCPI7_25@toc@l
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 33, 34, 2
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 2, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addi 9, 10, .LCPI7_26@toc@l
; LE-NEXT: addis 10, 2, .LCPI7_28@toc@ha
; LE-NEXT: lxvd2x 3, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_27@toc@ha
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: addi 9, 9, .LCPI7_27@toc@l
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 33, 34, 3
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 3, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addi 9, 10, .LCPI7_28@toc@l
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_29@toc@ha
; LE-NEXT: xxlxor 0, 0, 3
; LE-NEXT: addi 9, 9, .LCPI7_29@toc@l
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_30@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_30@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_31@toc@ha
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: addi 9, 9, .LCPI7_31@toc@l
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_32@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_32@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_33@toc@ha
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: addi 9, 9, .LCPI7_33@toc@l
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_34@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_34@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_35@toc@ha
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: addi 9, 9, .LCPI7_35@toc@l
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_36@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_36@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_37@toc@ha
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: addi 9, 9, .LCPI7_37@toc@l
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_38@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_38@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_39@toc@ha
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: addi 9, 9, .LCPI7_39@toc@l
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_40@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_40@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_41@toc@ha
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: addi 9, 9, .LCPI7_41@toc@l
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_42@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_42@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_43@toc@ha
; LE-NEXT: vsld 0, 3, 0
; LE-NEXT: addi 9, 9, .LCPI7_43@toc@l
; LE-NEXT: xxland 33, 34, 1
; LE-NEXT: vcmpgtud 1, 1, 4
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_44@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_44@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_45@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_45@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_46@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_46@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_47@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_47@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_48@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_48@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_49@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_49@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_50@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_50@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_51@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_51@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_52@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_52@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_53@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_53@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_54@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_54@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_55@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_55@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_56@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_56@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_57@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_57@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_58@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_58@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_59@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_59@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_60@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_60@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_61@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_61@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_62@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_62@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_63@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_63@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_64@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_64@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_65@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_65@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_66@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_66@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_67@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_67@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_68@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_68@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_69@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_69@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_70@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_70@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_71@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_71@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_72@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_72@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_73@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_73@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_74@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_74@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_75@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_75@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_76@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_76@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_77@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_77@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_78@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_78@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_79@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_79@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_80@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_80@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_81@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_81@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_82@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_82@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_83@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_83@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_84@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_84@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_85@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_85@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_86@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_86@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_87@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_87@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_88@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_88@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_89@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_89@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_90@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_90@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_91@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_91@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_92@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_92@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_93@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_93@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_94@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_94@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_95@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_95@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_96@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_96@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_97@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_97@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_98@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_98@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_99@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_99@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_100@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_100@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_101@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_101@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_102@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_102@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: lxvd2x 37, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_103@toc@ha
; LE-NEXT: addi 9, 9, .LCPI7_103@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI7_104@toc@ha
; LE-NEXT: vsld 5, 3, 5
; LE-NEXT: addi 9, 9, .LCPI7_104@toc@l
; LE-NEXT: xxland 32, 34, 1
; LE-NEXT: vcmpgtud 0, 0, 4
; LE-NEXT: xxland 1, 32, 37
; LE-NEXT: xxleqv 37, 37, 37
; LE-NEXT: vsld 3, 3, 5
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: xxland 34, 34, 1
; LE-NEXT: vcmpgtud 2, 2, 4
; LE-NEXT: xxland 1, 34, 35
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: mffprd 9, 0
; LE-NEXT: sldi 10, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: and 10, 10, 8
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 2
; LE-NEXT: rldicl 9, 9, 62, 2
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 4
; LE-NEXT: rldicl 9, 9, 60, 4
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 3
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rldicl 10, 9, 32, 32
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: sldi 9, 10, 32
; LE-NEXT: or 9, 9, 11
; LE-NEXT: xxswapd 1, 0
; LE-NEXT: mtfprd 0, 9
; LE-NEXT: mffprd 9, 1
; LE-NEXT: sldi 10, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: and 8, 10, 8
; LE-NEXT: and 7, 9, 7
; LE-NEXT: or 7, 7, 8
; LE-NEXT: sldi 8, 7, 2
; LE-NEXT: rldicl 7, 7, 62, 2
; LE-NEXT: and 6, 8, 6
; LE-NEXT: and 5, 7, 5
; LE-NEXT: or 5, 5, 6
; LE-NEXT: sldi 6, 5, 4
; LE-NEXT: rldicl 5, 5, 60, 4
; LE-NEXT: and 4, 6, 4
; LE-NEXT: and 3, 5, 3
; LE-NEXT: or 3, 3, 4
; LE-NEXT: rldicl 4, 3, 32, 32
; LE-NEXT: rotlwi 5, 4, 24
; LE-NEXT: rlwimi 5, 4, 8, 8, 15
; LE-NEXT: rlwimi 5, 4, 8, 24, 31
; LE-NEXT: rotlwi 4, 3, 24
; LE-NEXT: rlwimi 4, 3, 8, 8, 15
; LE-NEXT: rlwimi 4, 3, 8, 24, 31
; LE-NEXT: sldi 3, 4, 32
; LE-NEXT: or 3, 3, 5
; LE-NEXT: mtfprd 1, 3
; LE-NEXT: xxmrghd 34, 0, 1
; LE-NEXT: blr
%a.ext = zext <2 x i64> %a to <2 x i128>
%b.ext = zext <2 x i64> %b to <2 x i128>
%clmul = call <2 x i128> @llvm.clmul.v2i128(<2 x i128> %a.ext, <2 x i128> %b.ext)
%res.ext = lshr <2 x i128> %clmul, splat (i128 63)
%res = trunc <2 x i128> %res.ext to <2 x i64>
ret <2 x i64> %res
}
define <16 x i8> @clmulh_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
; BE-LABEL: clmulh_v16i8:
; BE: # %bb.0:
; BE-NEXT: li 3, -48
; BE-NEXT: vspltisb 4, 4
; BE-NEXT: stvx 29, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -32
; BE-NEXT: vsrb 1, 3, 4
; BE-NEXT: vspltisb 5, 15
; BE-NEXT: stvx 30, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -16
; BE-NEXT: vspltisb 7, -1
; BE-NEXT: stvx 31, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addis 3, 2, .LCPI8_0@toc@ha
; BE-NEXT: addi 3, 3, .LCPI8_0@toc@l
; BE-NEXT: vand 3, 3, 5
; BE-NEXT: vspltisb 13, 8
; BE-NEXT: vslb 3, 3, 4
; BE-NEXT: vsrb 0, 2, 4
; BE-NEXT: vand 2, 2, 5
; BE-NEXT: vor 1, 1, 3
; BE-NEXT: lvx 3, 0, 3
; BE-NEXT: addis 3, 2, .LCPI8_1@toc@ha
; BE-NEXT: addi 3, 3, .LCPI8_1@toc@l
; BE-NEXT: vslb 2, 2, 4
; BE-NEXT: vor 0, 0, 2
; BE-NEXT: vspltisb 2, 2
; BE-NEXT: vsrb 9, 1, 2
; BE-NEXT: vand 1, 1, 3
; BE-NEXT: vand 9, 9, 3
; BE-NEXT: vslb 1, 1, 2
; BE-NEXT: vsrb 8, 0, 2
; BE-NEXT: vand 0, 0, 3
; BE-NEXT: vor 9, 9, 1
; BE-NEXT: lvx 1, 0, 3
; BE-NEXT: addis 3, 2, .LCPI8_3@toc@ha
; BE-NEXT: addi 3, 3, .LCPI8_3@toc@l
; BE-NEXT: lvx 15, 0, 3
; BE-NEXT: addis 3, 2, .LCPI8_2@toc@ha
; BE-NEXT: addi 3, 3, .LCPI8_2@toc@l
; BE-NEXT: vand 8, 8, 3
; BE-NEXT: vslb 0, 0, 2
; BE-NEXT: vor 8, 8, 0
; BE-NEXT: vspltisb 0, 1
; BE-NEXT: vsrb 11, 9, 0
; BE-NEXT: vand 9, 9, 1
; BE-NEXT: vaddubm 9, 9, 9
; BE-NEXT: vand 11, 11, 1
; BE-NEXT: vsrb 10, 8, 0
; BE-NEXT: vand 8, 8, 1
; BE-NEXT: vaddubm 8, 8, 8
; BE-NEXT: vor 9, 11, 9
; BE-NEXT: vslb 6, 4, 4
; BE-NEXT: vslb 7, 7, 7
; BE-NEXT: vand 10, 10, 1
; BE-NEXT: vand 14, 9, 13
; BE-NEXT: vaddubm 13, 13, 13
; BE-NEXT: vor 8, 10, 8
; BE-NEXT: vand 10, 9, 2
; BE-NEXT: vand 11, 9, 0
; BE-NEXT: vand 12, 9, 4
; BE-NEXT: vand 13, 9, 13
; BE-NEXT: vand 15, 9, 15
; BE-NEXT: vand 6, 9, 6
; BE-NEXT: vand 7, 9, 7
; BE-NEXT: vmuloub 9, 8, 10
; BE-NEXT: vmuleub 10, 8, 10
; BE-NEXT: vmuloub 16, 8, 11
; BE-NEXT: vmuleub 11, 8, 11
; BE-NEXT: vmuloub 17, 8, 12
; BE-NEXT: vmuleub 12, 8, 12
; BE-NEXT: vmuloub 18, 8, 14
; BE-NEXT: vmuleub 14, 8, 14
; BE-NEXT: vmuloub 19, 8, 13
; BE-NEXT: vmuleub 13, 8, 13
; BE-NEXT: vmuloub 31, 8, 15
; BE-NEXT: vmuleub 15, 8, 15
; BE-NEXT: vmuloub 30, 8, 6
; BE-NEXT: vmuleub 6, 8, 6
; BE-NEXT: vmuloub 29, 8, 7
; BE-NEXT: vmuleub 7, 8, 7
; BE-NEXT: lvx 8, 0, 3
; BE-NEXT: li 3, -16
; BE-NEXT: vperm 9, 10, 9, 8
; BE-NEXT: vperm 10, 11, 16, 8
; BE-NEXT: vperm 11, 12, 17, 8
; BE-NEXT: vperm 12, 14, 18, 8
; BE-NEXT: vperm 13, 13, 19, 8
; BE-NEXT: vperm 14, 15, 31, 8
; BE-NEXT: lvx 31, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -32
; BE-NEXT: vperm 6, 6, 30, 8
; BE-NEXT: lvx 30, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -48
; BE-NEXT: vperm 7, 7, 29, 8
; BE-NEXT: lvx 29, 1, 3 # 16-byte Folded Reload
; BE-NEXT: vxor 8, 10, 9
; BE-NEXT: vxor 8, 8, 11
; BE-NEXT: vxor 8, 8, 12
; BE-NEXT: vxor 8, 8, 13
; BE-NEXT: vxor 8, 8, 14
; BE-NEXT: vxor 6, 8, 6
; BE-NEXT: vxor 6, 6, 7
; BE-NEXT: vand 5, 6, 5
; BE-NEXT: vsrb 7, 6, 4
; BE-NEXT: vslb 4, 5, 4
; BE-NEXT: vor 4, 7, 4
; BE-NEXT: vand 5, 4, 3
; BE-NEXT: vsrb 4, 4, 2
; BE-NEXT: vslb 2, 5, 2
; BE-NEXT: vand 3, 4, 3
; BE-NEXT: vor 2, 3, 2
; BE-NEXT: vsrb 3, 2, 0
; BE-NEXT: vand 2, 2, 1
; BE-NEXT: vaddubm 2, 2, 2
; BE-NEXT: vand 3, 3, 1
; BE-NEXT: vor 2, 3, 2
; BE-NEXT: vsrb 2, 2, 0
; BE-NEXT: blr
;
; LE-LABEL: clmulh_v16i8:
; LE: # %bb.0:
; LE-NEXT: addis 3, 2, .LCPI8_0@toc@ha
; LE-NEXT: vspltisb 4, 4
; LE-NEXT: vspltisb 5, 2
; LE-NEXT: addi 3, 3, .LCPI8_0@toc@l
; LE-NEXT: vslb 1, 3, 4
; LE-NEXT: vsrb 3, 3, 4
; LE-NEXT: vslb 6, 2, 4
; LE-NEXT: vsrb 2, 2, 4
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: addis 3, 2, .LCPI8_1@toc@ha
; LE-NEXT: xxlor 35, 35, 33
; LE-NEXT: xxlor 34, 34, 38
; LE-NEXT: vspltisb 0, 1
; LE-NEXT: addi 3, 3, .LCPI8_1@toc@l
; LE-NEXT: vsrb 1, 3, 5
; LE-NEXT: vsrb 7, 2, 5
; LE-NEXT: vspltisb 6, 8
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI8_2@toc@ha
; LE-NEXT: xxland 35, 35, 0
; LE-NEXT: xxland 34, 34, 0
; LE-NEXT: xxland 2, 33, 0
; LE-NEXT: xxland 3, 39, 0
; LE-NEXT: addi 3, 3, .LCPI8_2@toc@l
; LE-NEXT: vslb 3, 3, 5
; LE-NEXT: vslb 2, 2, 5
; LE-NEXT: xxlor 35, 2, 35
; LE-NEXT: xxlor 34, 3, 34
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: addis 3, 2, .LCPI8_3@toc@ha
; LE-NEXT: vsrb 1, 3, 0
; LE-NEXT: xxland 35, 35, 1
; LE-NEXT: vsrb 7, 2, 0
; LE-NEXT: xxland 34, 34, 1
; LE-NEXT: addi 3, 3, .LCPI8_3@toc@l
; LE-NEXT: xxland 2, 33, 1
; LE-NEXT: vaddubm 3, 3, 3
; LE-NEXT: vaddubm 2, 2, 2
; LE-NEXT: xxlor 2, 2, 35
; LE-NEXT: xxland 35, 2, 37
; LE-NEXT: xxswapd 33, 3
; LE-NEXT: xxland 3, 39, 1
; LE-NEXT: xxlor 34, 3, 34
; LE-NEXT: lxvd2x 3, 0, 3
; LE-NEXT: vmuloub 7, 2, 3
; LE-NEXT: vmuleub 3, 2, 3
; LE-NEXT: vperm 3, 3, 7, 1
; LE-NEXT: xxland 39, 2, 32
; LE-NEXT: vmuloub 8, 2, 7
; LE-NEXT: vmuleub 7, 2, 7
; LE-NEXT: vperm 7, 7, 8, 1
; LE-NEXT: xxland 40, 2, 36
; LE-NEXT: vmuloub 9, 2, 8
; LE-NEXT: vmuleub 8, 2, 8
; LE-NEXT: vperm 8, 8, 9, 1
; LE-NEXT: xxland 41, 2, 38
; LE-NEXT: vaddubm 6, 6, 6
; LE-NEXT: vmuloub 10, 2, 9
; LE-NEXT: vmuleub 9, 2, 9
; LE-NEXT: xxland 38, 2, 38
; LE-NEXT: vperm 9, 9, 10, 1
; LE-NEXT: vmuloub 10, 2, 6
; LE-NEXT: vmuleub 6, 2, 6
; LE-NEXT: vperm 6, 6, 10, 1
; LE-NEXT: xxland 42, 2, 3
; LE-NEXT: vmuloub 11, 2, 10
; LE-NEXT: vmuleub 10, 2, 10
; LE-NEXT: vperm 10, 10, 11, 1
; LE-NEXT: vslb 11, 4, 4
; LE-NEXT: xxland 43, 2, 43
; LE-NEXT: vmuloub 12, 2, 11
; LE-NEXT: vmuleub 11, 2, 11
; LE-NEXT: vperm 11, 11, 12, 1
; LE-NEXT: xxleqv 44, 44, 44
; LE-NEXT: vslb 12, 12, 12
; LE-NEXT: xxland 44, 2, 44
; LE-NEXT: xxlxor 2, 39, 35
; LE-NEXT: xxlxor 2, 2, 40
; LE-NEXT: vmuloub 13, 2, 12
; LE-NEXT: vmuleub 2, 2, 12
; LE-NEXT: xxlxor 2, 2, 41
; LE-NEXT: xxlxor 2, 2, 38
; LE-NEXT: xxlxor 2, 2, 42
; LE-NEXT: xxlxor 2, 2, 43
; LE-NEXT: vperm 2, 2, 13, 1
; LE-NEXT: xxlxor 34, 2, 34
; LE-NEXT: vslb 3, 2, 4
; LE-NEXT: vsrb 2, 2, 4
; LE-NEXT: xxlor 34, 34, 35
; LE-NEXT: xxland 35, 34, 0
; LE-NEXT: vsrb 2, 2, 5
; LE-NEXT: vslb 3, 3, 5
; LE-NEXT: xxland 0, 34, 0
; LE-NEXT: xxlor 34, 0, 35
; LE-NEXT: vsrb 3, 2, 0
; LE-NEXT: xxland 34, 34, 1
; LE-NEXT: xxland 0, 35, 1
; LE-NEXT: vaddubm 2, 2, 2
; LE-NEXT: xxlor 34, 0, 34
; LE-NEXT: vsrb 2, 2, 0
; LE-NEXT: blr
%a.ext = zext <16 x i8> %a to <16 x i16>
%b.ext = zext <16 x i8> %b to <16 x i16>
%clmul = call <16 x i16> @llvm.clmul.v16i16(<16 x i16> %a.ext, <16 x i16> %b.ext)
%res.ext = lshr <16 x i16> %clmul, splat (i16 8)
%res = trunc <16 x i16> %res.ext to <16 x i8>
ret <16 x i8> %res
}
define <8 x i16> @clmulh_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
; BE-LABEL: clmulh_v8i16:
; BE: # %bb.0:
; BE-NEXT: li 3, -96
; BE-NEXT: vspltisb 1, -1
; BE-NEXT: vxor 5, 5, 5
; BE-NEXT: stvx 26, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -80
; BE-NEXT: vspltish 0, 4
; BE-NEXT: stvx 27, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -64
; BE-NEXT: vspltish 4, 1
; BE-NEXT: stvx 28, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -48
; BE-NEXT: vslh 17, 1, 1
; BE-NEXT: vspltish 15, 2
; BE-NEXT: stvx 29, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -32
; BE-NEXT: vspltish 16, 8
; BE-NEXT: stvx 30, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, -16
; BE-NEXT: stvx 31, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addis 3, 2, .LCPI9_0@toc@ha
; BE-NEXT: vslh 6, 0, 0
; BE-NEXT: addi 3, 3, .LCPI9_0@toc@l
; BE-NEXT: lvx 1, 0, 3
; BE-NEXT: addis 3, 2, .LCPI9_1@toc@ha
; BE-NEXT: addi 3, 3, .LCPI9_1@toc@l
; BE-NEXT: vperm 7, 2, 2, 1
; BE-NEXT: vspltisb 2, 4
; BE-NEXT: vperm 8, 3, 3, 1
; BE-NEXT: vspltisb 3, 15
; BE-NEXT: vsrb 11, 7, 2
; BE-NEXT: vand 7, 7, 3
; BE-NEXT: vslb 7, 7, 2
; BE-NEXT: vsrb 13, 8, 2
; BE-NEXT: vand 8, 8, 3
; BE-NEXT: vor 11, 11, 7
; BE-NEXT: lvx 7, 0, 3
; BE-NEXT: addis 3, 2, .LCPI9_2@toc@ha
; BE-NEXT: addi 3, 3, .LCPI9_2@toc@l
; BE-NEXT: vslb 8, 8, 2
; BE-NEXT: vor 13, 13, 8
; BE-NEXT: vspltisb 8, 2
; BE-NEXT: vand 19, 13, 7
; BE-NEXT: vsrb 13, 13, 8
; BE-NEXT: vslb 19, 19, 8
; BE-NEXT: vand 13, 13, 7
; BE-NEXT: vand 18, 11, 7
; BE-NEXT: vsrb 11, 11, 8
; BE-NEXT: vor 19, 13, 19
; BE-NEXT: lvx 13, 0, 3
; BE-NEXT: addis 3, 2, .LCPI9_3@toc@ha
; BE-NEXT: addi 3, 3, .LCPI9_3@toc@l
; BE-NEXT: vslb 18, 18, 8
; BE-NEXT: vand 11, 11, 7
; BE-NEXT: vor 18, 11, 18
; BE-NEXT: vspltisb 11, 1
; BE-NEXT: vsrb 30, 19, 11
; BE-NEXT: vand 19, 19, 13
; BE-NEXT: vaddubm 19, 19, 19
; BE-NEXT: vand 30, 30, 13
; BE-NEXT: vor 19, 30, 19
; BE-NEXT: lvx 30, 0, 3
; BE-NEXT: addis 3, 2, .LCPI9_4@toc@ha
; BE-NEXT: addi 3, 3, .LCPI9_4@toc@l
; BE-NEXT: lvx 29, 0, 3
; BE-NEXT: addis 3, 2, .LCPI9_5@toc@ha
; BE-NEXT: addi 3, 3, .LCPI9_5@toc@l
; BE-NEXT: lvx 28, 0, 3
; BE-NEXT: addis 3, 2, .LCPI9_6@toc@ha
; BE-NEXT: addi 3, 3, .LCPI9_6@toc@l
; BE-NEXT: vsrb 31, 18, 11
; BE-NEXT: lvx 27, 0, 3
; BE-NEXT: addis 3, 2, .LCPI9_7@toc@ha
; BE-NEXT: addi 3, 3, .LCPI9_7@toc@l
; BE-NEXT: lvx 26, 0, 3
; BE-NEXT: li 3, -16
; BE-NEXT: vand 18, 18, 13
; BE-NEXT: vaddubm 18, 18, 18
; BE-NEXT: vand 31, 31, 13
; BE-NEXT: vsldoi 9, 4, 4, 1
; BE-NEXT: vsldoi 10, 15, 15, 1
; BE-NEXT: vsldoi 12, 0, 0, 1
; BE-NEXT: vslh 14, 16, 16
; BE-NEXT: vor 18, 31, 18
; BE-NEXT: vand 31, 19, 16
; BE-NEXT: vadduhm 16, 16, 16
; BE-NEXT: vand 15, 19, 15
; BE-NEXT: vand 0, 19, 0
; BE-NEXT: vand 16, 19, 16
; BE-NEXT: vand 30, 19, 30
; BE-NEXT: vand 6, 19, 6
; BE-NEXT: vand 29, 19, 29
; BE-NEXT: vand 9, 19, 9
; BE-NEXT: vand 10, 19, 10
; BE-NEXT: vand 12, 19, 12
; BE-NEXT: vand 14, 19, 14
; BE-NEXT: vand 28, 19, 28
; BE-NEXT: vand 27, 19, 27
; BE-NEXT: vand 26, 19, 26
; BE-NEXT: vand 17, 19, 17
; BE-NEXT: vand 19, 19, 4
; BE-NEXT: vmladduhm 15, 18, 15, 5
; BE-NEXT: vmladduhm 19, 18, 19, 5
; BE-NEXT: vmladduhm 0, 18, 0, 5
; BE-NEXT: vxor 15, 19, 15
; BE-NEXT: vmladduhm 31, 18, 31, 5
; BE-NEXT: vxor 0, 15, 0
; BE-NEXT: vmladduhm 16, 18, 16, 5
; BE-NEXT: vxor 0, 0, 31
; BE-NEXT: lvx 31, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -32
; BE-NEXT: vmladduhm 30, 18, 30, 5
; BE-NEXT: vxor 0, 0, 16
; BE-NEXT: vmladduhm 6, 18, 6, 5
; BE-NEXT: vxor 0, 0, 30
; BE-NEXT: lvx 30, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -48
; BE-NEXT: vmladduhm 29, 18, 29, 5
; BE-NEXT: vxor 0, 0, 6
; BE-NEXT: vmladduhm 9, 18, 9, 5
; BE-NEXT: vxor 0, 0, 29
; BE-NEXT: lvx 29, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -64
; BE-NEXT: vmladduhm 10, 18, 10, 5
; BE-NEXT: vxor 0, 0, 9
; BE-NEXT: vmladduhm 12, 18, 12, 5
; BE-NEXT: vxor 0, 0, 10
; BE-NEXT: vmladduhm 14, 18, 14, 5
; BE-NEXT: vxor 0, 0, 12
; BE-NEXT: vmladduhm 28, 18, 28, 5
; BE-NEXT: vxor 0, 0, 14
; BE-NEXT: vmladduhm 27, 18, 27, 5
; BE-NEXT: vxor 0, 0, 28
; BE-NEXT: lvx 28, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -80
; BE-NEXT: vmladduhm 26, 18, 26, 5
; BE-NEXT: vxor 0, 0, 27
; BE-NEXT: lvx 27, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, -96
; BE-NEXT: vmladduhm 5, 18, 17, 5
; BE-NEXT: vxor 0, 0, 26
; BE-NEXT: lvx 26, 1, 3 # 16-byte Folded Reload
; BE-NEXT: vxor 5, 0, 5
; BE-NEXT: vperm 5, 5, 5, 1
; BE-NEXT: vand 3, 5, 3
; BE-NEXT: vsrb 0, 5, 2
; BE-NEXT: vslb 2, 3, 2
; BE-NEXT: vor 2, 0, 2
; BE-NEXT: vand 3, 2, 7
; BE-NEXT: vsrb 2, 2, 8
; BE-NEXT: vslb 3, 3, 8
; BE-NEXT: vand 2, 2, 7
; BE-NEXT: vor 2, 2, 3
; BE-NEXT: vsrb 3, 2, 11
; BE-NEXT: vand 2, 2, 13
; BE-NEXT: vaddubm 2, 2, 2
; BE-NEXT: vand 3, 3, 13
; BE-NEXT: vor 2, 3, 2
; BE-NEXT: vsrh 2, 2, 4
; BE-NEXT: blr
;
; LE-LABEL: clmulh_v8i16:
; LE: # %bb.0:
; LE-NEXT: addis 3, 2, .LCPI9_0@toc@ha
; LE-NEXT: vspltisb 5, 4
; LE-NEXT: vspltish 9, 2
; LE-NEXT: addi 3, 3, .LCPI9_0@toc@l
; LE-NEXT: vspltish 0, 1
; LE-NEXT: vspltish 6, 4
; LE-NEXT: vspltish 1, 8
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: addis 3, 2, .LCPI9_1@toc@ha
; LE-NEXT: vsldoi 11, 9, 9, 1
; LE-NEXT: addi 3, 3, .LCPI9_1@toc@l
; LE-NEXT: vsldoi 13, 6, 6, 1
; LE-NEXT: vsldoi 10, 0, 0, 1
; LE-NEXT: xxswapd 36, 0
; LE-NEXT: lxvd2x 0, 0, 3
; LE-NEXT: addis 3, 2, .LCPI9_2@toc@ha
; LE-NEXT: addi 3, 3, .LCPI9_2@toc@l
; LE-NEXT: vperm 8, 2, 2, 4
; LE-NEXT: vperm 7, 3, 3, 4
; LE-NEXT: vspltisb 3, 2
; LE-NEXT: vspltisb 2, 1
; LE-NEXT: vslb 12, 8, 5
; LE-NEXT: vsrb 8, 8, 5
; LE-NEXT: xxlor 40, 40, 44
; LE-NEXT: xxland 44, 40, 0
; LE-NEXT: vsrb 8, 8, 3
; LE-NEXT: vslb 12, 12, 3
; LE-NEXT: xxland 1, 40, 0
; LE-NEXT: xxlor 40, 1, 44
; LE-NEXT: lxvd2x 1, 0, 3
; LE-NEXT: addis 3, 2, .LCPI9_3@toc@ha
; LE-NEXT: vsrb 12, 8, 2
; LE-NEXT: addi 3, 3, .LCPI9_3@toc@l
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: addis 3, 2, .LCPI9_4@toc@ha
; LE-NEXT: xxland 2, 44, 1
; LE-NEXT: vslb 12, 7, 5
; LE-NEXT: vsrb 7, 7, 5
; LE-NEXT: xxland 40, 40, 1
; LE-NEXT: addi 3, 3, .LCPI9_4@toc@l
; LE-NEXT: xxlor 39, 39, 44
; LE-NEXT: vaddubm 8, 8, 8
; LE-NEXT: xxland 44, 39, 0
; LE-NEXT: vsrb 7, 7, 3
; LE-NEXT: xxlor 40, 2, 40
; LE-NEXT: vslb 12, 12, 3
; LE-NEXT: xxland 2, 39, 0
; LE-NEXT: xxlor 39, 2, 44
; LE-NEXT: vsrb 12, 7, 2
; LE-NEXT: xxland 39, 39, 1
; LE-NEXT: xxland 2, 44, 1
; LE-NEXT: vaddubm 7, 7, 7
; LE-NEXT: xxlor 2, 2, 39
; LE-NEXT: vxor 7, 7, 7
; LE-NEXT: xxland 41, 2, 41
; LE-NEXT: xxland 44, 2, 32
; LE-NEXT: vmladduhm 9, 8, 9, 7
; LE-NEXT: vmladduhm 12, 8, 12, 7
; LE-NEXT: xxlxor 3, 44, 41
; LE-NEXT: xxland 41, 2, 38
; LE-NEXT: vslh 6, 6, 6
; LE-NEXT: vmladduhm 9, 8, 9, 7
; LE-NEXT: xxland 38, 2, 38
; LE-NEXT: vmladduhm 6, 8, 6, 7
; LE-NEXT: xxlxor 3, 3, 41
; LE-NEXT: xxland 41, 2, 33
; LE-NEXT: vmladduhm 9, 8, 9, 7
; LE-NEXT: xxlxor 3, 3, 41
; LE-NEXT: vadduhm 9, 1, 1
; LE-NEXT: vslh 1, 1, 1
; LE-NEXT: xxland 41, 2, 41
; LE-NEXT: xxland 33, 2, 33
; LE-NEXT: vmladduhm 9, 8, 9, 7
; LE-NEXT: vmladduhm 1, 8, 1, 7
; LE-NEXT: xxlxor 3, 3, 41
; LE-NEXT: xxland 41, 2, 4
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: addis 3, 2, .LCPI9_5@toc@ha
; LE-NEXT: vmladduhm 9, 8, 9, 7
; LE-NEXT: addi 3, 3, .LCPI9_5@toc@l
; LE-NEXT: xxlxor 3, 3, 41
; LE-NEXT: xxlxor 3, 3, 38
; LE-NEXT: xxland 38, 2, 4
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: addis 3, 2, .LCPI9_6@toc@ha
; LE-NEXT: vmladduhm 6, 8, 6, 7
; LE-NEXT: addi 3, 3, .LCPI9_6@toc@l
; LE-NEXT: xxlxor 3, 3, 38
; LE-NEXT: xxland 38, 2, 42
; LE-NEXT: vmladduhm 6, 8, 6, 7
; LE-NEXT: xxlxor 3, 3, 38
; LE-NEXT: xxland 38, 2, 43
; LE-NEXT: vmladduhm 6, 8, 6, 7
; LE-NEXT: xxlxor 3, 3, 38
; LE-NEXT: xxland 38, 2, 45
; LE-NEXT: vmladduhm 6, 8, 6, 7
; LE-NEXT: xxlxor 3, 3, 38
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxland 33, 2, 4
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: addis 3, 2, .LCPI9_7@toc@ha
; LE-NEXT: vmladduhm 1, 8, 1, 7
; LE-NEXT: addi 3, 3, .LCPI9_7@toc@l
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxland 33, 2, 4
; LE-NEXT: lxvd2x 4, 0, 3
; LE-NEXT: vmladduhm 1, 8, 1, 7
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxland 33, 2, 4
; LE-NEXT: vmladduhm 1, 8, 1, 7
; LE-NEXT: xxlxor 3, 3, 33
; LE-NEXT: xxleqv 33, 33, 33
; LE-NEXT: vslh 1, 1, 1
; LE-NEXT: xxland 33, 2, 33
; LE-NEXT: vmladduhm 1, 8, 1, 7
; LE-NEXT: xxlxor 33, 3, 33
; LE-NEXT: vperm 4, 1, 1, 4
; LE-NEXT: vslb 1, 4, 5
; LE-NEXT: vsrb 4, 4, 5
; LE-NEXT: xxlor 36, 36, 33
; LE-NEXT: xxland 37, 36, 0
; LE-NEXT: vslb 5, 5, 3
; LE-NEXT: vsrb 3, 4, 3
; LE-NEXT: xxland 0, 35, 0
; LE-NEXT: xxlor 35, 0, 37
; LE-NEXT: vsrb 2, 3, 2
; LE-NEXT: xxland 0, 34, 1
; LE-NEXT: xxland 34, 35, 1
; LE-NEXT: vaddubm 2, 2, 2
; LE-NEXT: xxlor 34, 0, 34
; LE-NEXT: vsrh 2, 2, 0
; LE-NEXT: blr
%a.ext = zext <8 x i16> %a to <8 x i32>
%b.ext = zext <8 x i16> %b to <8 x i32>
%clmul = call <8 x i32> @llvm.clmul.v8i32(<8 x i32> %a.ext, <8 x i32> %b.ext)
%res.ext = lshr <8 x i32> %clmul, splat (i32 16)
%res = trunc <8x i32> %res.ext to <8 x i16>
ret <8 x i16> %res
}
define <4 x i32> @clmulh_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
; BE-LABEL: clmulh_v4i32:
; BE: # %bb.0:
; BE-NEXT: stdu 1, -528(1)
; BE-NEXT: li 3, 336
; BE-NEXT: addi 4, 1, 240
; BE-NEXT: vxor 1, 1, 1
; BE-NEXT: stvx 20, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 352
; BE-NEXT: lis 5, -21846
; BE-NEXT: stvx 21, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 368
; BE-NEXT: lis 9, -13108
; BE-NEXT: ori 7, 5, 43690
; BE-NEXT: ori 5, 9, 52428
; BE-NEXT: stvx 22, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 384
; BE-NEXT: lis 6, 21845
; BE-NEXT: stvx 23, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 400
; BE-NEXT: lis 10, 13107
; BE-NEXT: ori 8, 6, 21845
; BE-NEXT: ori 6, 10, 13107
; BE-NEXT: stvx 24, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 416
; BE-NEXT: lis 11, 3855
; BE-NEXT: stvx 25, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 432
; BE-NEXT: stvx 26, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 448
; BE-NEXT: stvx 27, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 464
; BE-NEXT: stvx 28, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 480
; BE-NEXT: stvx 29, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 496
; BE-NEXT: stvx 30, 1, 3 # 16-byte Folded Spill
; BE-NEXT: li 3, 512
; BE-NEXT: stvx 31, 1, 3 # 16-byte Folded Spill
; BE-NEXT: addi 3, 1, 256
; BE-NEXT: stvx 3, 0, 3
; BE-NEXT: lis 3, -3856
; BE-NEXT: vspltisb 3, 1
; BE-NEXT: ori 3, 3, 61680
; BE-NEXT: stvx 2, 0, 4
; BE-NEXT: ori 4, 11, 3855
; BE-NEXT: vspltisb 2, -16
; BE-NEXT: vsububm 2, 3, 2
; BE-NEXT: lwz 9, 268(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 300(1)
; BE-NEXT: lwz 9, 264(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 296(1)
; BE-NEXT: lwz 9, 260(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 292(1)
; BE-NEXT: lwz 9, 256(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 288(1)
; BE-NEXT: lwz 9, 252(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 284(1)
; BE-NEXT: lwz 9, 248(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 280(1)
; BE-NEXT: lwz 9, 244(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 276(1)
; BE-NEXT: lwz 9, 240(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 272(1)
; BE-NEXT: addi 9, 1, 288
; BE-NEXT: lvx 8, 0, 9
; BE-NEXT: li 9, 224
; BE-NEXT: stvx 2, 1, 9 # 16-byte Folded Spill
; BE-NEXT: addis 9, 2, .LCPI10_0@toc@ha
; BE-NEXT: vand 0, 8, 2
; BE-NEXT: addi 9, 9, .LCPI10_0@toc@l
; BE-NEXT: lvx 3, 0, 9
; BE-NEXT: li 9, 208
; BE-NEXT: stvx 3, 1, 9 # 16-byte Folded Spill
; BE-NEXT: addi 9, 1, 272
; BE-NEXT: vand 7, 8, 3
; BE-NEXT: lvx 10, 0, 9
; BE-NEXT: addis 9, 2, .LCPI10_1@toc@ha
; BE-NEXT: addi 9, 9, .LCPI10_1@toc@l
; BE-NEXT: vand 6, 10, 2
; BE-NEXT: lvx 2, 0, 9
; BE-NEXT: li 9, 192
; BE-NEXT: stvx 2, 1, 9 # 16-byte Folded Spill
; BE-NEXT: addis 9, 2, .LCPI10_2@toc@ha
; BE-NEXT: addi 9, 9, .LCPI10_2@toc@l
; BE-NEXT: lvx 24, 0, 9
; BE-NEXT: li 9, 176
; BE-NEXT: vand 9, 10, 3
; BE-NEXT: vand 11, 8, 2
; BE-NEXT: vand 13, 10, 24
; BE-NEXT: vand 14, 10, 2
; BE-NEXT: vspltisw 10, -16
; BE-NEXT: vmulouh 2, 9, 0
; BE-NEXT: stvx 2, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 160
; BE-NEXT: vand 15, 8, 24
; BE-NEXT: vrlw 26, 11, 10
; BE-NEXT: vmulouh 2, 9, 11
; BE-NEXT: stvx 2, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 144
; BE-NEXT: vrlw 25, 15, 10
; BE-NEXT: vmsumuhm 4, 13, 26, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 128
; BE-NEXT: vmsumuhm 4, 14, 25, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 112
; BE-NEXT: vrlw 29, 0, 10
; BE-NEXT: vmsumuhm 4, 9, 26, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 96
; BE-NEXT: vmsumuhm 4, 6, 29, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 80
; BE-NEXT: vrlw 27, 7, 10
; BE-NEXT: vmsumuhm 4, 13, 25, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 64
; BE-NEXT: vmsumuhm 4, 14, 27, 1
; BE-NEXT: stvx 4, 1, 9 # 16-byte Folded Spill
; BE-NEXT: li 9, 144
; BE-NEXT: vmsumuhm 2, 9, 29, 1
; BE-NEXT: vmsumuhm 20, 14, 26, 1
; BE-NEXT: vmsumuhm 8, 14, 29, 1
; BE-NEXT: vmulouh 28, 14, 15
; BE-NEXT: vmulouh 30, 14, 7
; BE-NEXT: vmulouh 19, 14, 11
; BE-NEXT: vmulouh 31, 14, 0
; BE-NEXT: vslw 14, 2, 10
; BE-NEXT: lvx 2, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 128
; BE-NEXT: vmsumuhm 3, 6, 27, 1
; BE-NEXT: vmsumuhm 23, 9, 27, 1
; BE-NEXT: vmsumuhm 22, 6, 25, 1
; BE-NEXT: vmsumuhm 21, 13, 29, 1
; BE-NEXT: vmsumuhm 25, 9, 25, 1
; BE-NEXT: vmsumuhm 26, 6, 26, 1
; BE-NEXT: vmsumuhm 27, 13, 27, 1
; BE-NEXT: vmulouh 29, 9, 7
; BE-NEXT: vmulouh 16, 9, 15
; BE-NEXT: vmulouh 18, 13, 15
; BE-NEXT: vmulouh 15, 6, 15
; BE-NEXT: vmulouh 1, 6, 7
; BE-NEXT: vmulouh 17, 13, 7
; BE-NEXT: vmulouh 5, 6, 0
; BE-NEXT: vmulouh 7, 6, 11
; BE-NEXT: vslw 6, 2, 10
; BE-NEXT: lvx 2, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 112
; BE-NEXT: vmulouh 12, 13, 11
; BE-NEXT: vslw 11, 2, 10
; BE-NEXT: lvx 2, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 96
; BE-NEXT: vslw 4, 3, 10
; BE-NEXT: lvx 3, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 80
; BE-NEXT: vadduwm 4, 1, 4
; BE-NEXT: vmulouh 13, 13, 0
; BE-NEXT: lvx 0, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 64
; BE-NEXT: lvx 9, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 176
; BE-NEXT: vslw 2, 2, 10
; BE-NEXT: vslw 3, 3, 10
; BE-NEXT: vadduwm 3, 5, 3
; BE-NEXT: vslw 0, 0, 10
; BE-NEXT: vadduwm 0, 18, 0
; BE-NEXT: vslw 9, 9, 10
; BE-NEXT: vslw 23, 23, 10
; BE-NEXT: vslw 22, 22, 10
; BE-NEXT: vadduwm 5, 15, 22
; BE-NEXT: vslw 21, 21, 10
; BE-NEXT: vslw 20, 20, 10
; BE-NEXT: vslw 25, 25, 10
; BE-NEXT: vslw 26, 26, 10
; BE-NEXT: vslw 27, 27, 10
; BE-NEXT: vslw 8, 8, 10
; BE-NEXT: lvx 10, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 160
; BE-NEXT: lvx 1, 1, 9 # 16-byte Folded Reload
; BE-NEXT: vadduwm 10, 10, 14
; BE-NEXT: li 9, 208
; BE-NEXT: vadduwm 2, 1, 2
; BE-NEXT: vxor 2, 3, 2
; BE-NEXT: vadduwm 3, 29, 23
; BE-NEXT: vadduwm 1, 7, 26
; BE-NEXT: vxor 3, 5, 3
; BE-NEXT: vadduwm 5, 16, 25
; BE-NEXT: vxor 2, 2, 0
; BE-NEXT: vadduwm 0, 13, 21
; BE-NEXT: vxor 4, 4, 10
; BE-NEXT: vxor 5, 1, 5
; BE-NEXT: vadduwm 1, 12, 6
; BE-NEXT: vxor 3, 3, 0
; BE-NEXT: vadduwm 0, 17, 27
; BE-NEXT: vxor 4, 4, 1
; BE-NEXT: vxor 5, 5, 0
; BE-NEXT: vadduwm 0, 28, 11
; BE-NEXT: vxor 4, 4, 0
; BE-NEXT: vadduwm 0, 30, 9
; BE-NEXT: vxor 2, 2, 0
; BE-NEXT: vadduwm 0, 19, 20
; BE-NEXT: vxor 3, 3, 0
; BE-NEXT: vadduwm 0, 31, 8
; BE-NEXT: vxor 5, 5, 0
; BE-NEXT: lvx 0, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 224
; BE-NEXT: vand 4, 4, 0
; BE-NEXT: lvx 0, 1, 9 # 16-byte Folded Reload
; BE-NEXT: li 9, 192
; BE-NEXT: vand 2, 2, 0
; BE-NEXT: lvx 0, 1, 9 # 16-byte Folded Reload
; BE-NEXT: addi 9, 1, 304
; BE-NEXT: vand 3, 3, 24
; BE-NEXT: vor 2, 2, 4
; BE-NEXT: vand 5, 5, 0
; BE-NEXT: vor 2, 2, 3
; BE-NEXT: vspltisw 3, 1
; BE-NEXT: vor 2, 2, 5
; BE-NEXT: stvx 2, 0, 9
; BE-NEXT: lwz 9, 316(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 332(1)
; BE-NEXT: lwz 9, 312(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 328(1)
; BE-NEXT: lwz 9, 308(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 10, 10, 7
; BE-NEXT: and 9, 9, 8
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 2
; BE-NEXT: srwi 9, 9, 2
; BE-NEXT: and 10, 10, 5
; BE-NEXT: and 9, 9, 6
; BE-NEXT: or 9, 9, 10
; BE-NEXT: slwi 10, 9, 4
; BE-NEXT: srwi 9, 9, 4
; BE-NEXT: and 10, 10, 3
; BE-NEXT: and 9, 9, 4
; BE-NEXT: or 9, 9, 10
; BE-NEXT: rotlwi 10, 9, 24
; BE-NEXT: rlwimi 10, 9, 8, 8, 15
; BE-NEXT: rlwimi 10, 9, 8, 24, 31
; BE-NEXT: rldicl 9, 10, 0, 32
; BE-NEXT: stw 9, 324(1)
; BE-NEXT: lwz 9, 304(1)
; BE-NEXT: slwi 10, 9, 1
; BE-NEXT: srwi 9, 9, 1
; BE-NEXT: and 7, 10, 7
; BE-NEXT: and 8, 9, 8
; BE-NEXT: or 7, 8, 7
; BE-NEXT: slwi 8, 7, 2
; BE-NEXT: srwi 7, 7, 2
; BE-NEXT: and 5, 8, 5
; BE-NEXT: and 6, 7, 6
; BE-NEXT: or 5, 6, 5
; BE-NEXT: slwi 6, 5, 4
; BE-NEXT: srwi 5, 5, 4
; BE-NEXT: and 3, 6, 3
; BE-NEXT: and 4, 5, 4
; BE-NEXT: or 3, 4, 3
; BE-NEXT: rotlwi 4, 3, 24
; BE-NEXT: rlwimi 4, 3, 8, 8, 15
; BE-NEXT: rlwimi 4, 3, 8, 24, 31
; BE-NEXT: rldicl 3, 4, 0, 32
; BE-NEXT: stw 3, 320(1)
; BE-NEXT: addi 3, 1, 320
; BE-NEXT: lvx 2, 0, 3
; BE-NEXT: li 3, 512
; BE-NEXT: lvx 31, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 496
; BE-NEXT: vsrw 2, 2, 3
; BE-NEXT: lvx 30, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 480
; BE-NEXT: lvx 29, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 464
; BE-NEXT: lvx 28, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 448
; BE-NEXT: lvx 27, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 432
; BE-NEXT: lvx 26, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 416
; BE-NEXT: lvx 25, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 400
; BE-NEXT: lvx 24, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 384
; BE-NEXT: lvx 23, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 368
; BE-NEXT: lvx 22, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 352
; BE-NEXT: lvx 21, 1, 3 # 16-byte Folded Reload
; BE-NEXT: li 3, 336
; BE-NEXT: lvx 20, 1, 3 # 16-byte Folded Reload
; BE-NEXT: addi 1, 1, 528
; BE-NEXT: blr
;
; LE-LABEL: clmulh_v4i32:
; LE: # %bb.0:
; LE-NEXT: lis 5, -13108
; LE-NEXT: lis 9, -3856
; LE-NEXT: xxsldwi 0, 35, 35, 1
; LE-NEXT: lis 4, 21845
; LE-NEXT: lis 10, 3855
; LE-NEXT: lis 3, -21846
; LE-NEXT: xxswapd 1, 35
; LE-NEXT: xxsldwi 5, 35, 35, 3
; LE-NEXT: ori 7, 5, 52428
; LE-NEXT: ori 5, 9, 61680
; LE-NEXT: mfvsrwz 9, 35
; LE-NEXT: ori 8, 4, 21845
; LE-NEXT: ori 4, 10, 3855
; LE-NEXT: mffprwz 10, 0
; LE-NEXT: ori 3, 3, 43690
; LE-NEXT: mffprwz 11, 1
; LE-NEXT: mffprwz 0, 5
; LE-NEXT: lis 6, 13107
; LE-NEXT: ori 6, 6, 13107
; LE-NEXT: xxsldwi 2, 34, 34, 1
; LE-NEXT: xxswapd 3, 34
; LE-NEXT: xxsldwi 4, 34, 34, 3
; LE-NEXT: vspltisb 3, -16
; LE-NEXT: vspltisb 4, 1
; LE-NEXT: slwi 12, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 12, 12, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 12
; LE-NEXT: slwi 12, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 12, 12, 3
; LE-NEXT: and 10, 10, 8
; LE-NEXT: or 10, 10, 12
; LE-NEXT: slwi 12, 11, 1
; LE-NEXT: srwi 11, 11, 1
; LE-NEXT: and 12, 12, 3
; LE-NEXT: and 11, 11, 8
; LE-NEXT: or 11, 11, 12
; LE-NEXT: slwi 12, 0, 1
; LE-NEXT: srwi 0, 0, 1
; LE-NEXT: and 12, 12, 3
; LE-NEXT: and 0, 0, 8
; LE-NEXT: or 12, 0, 12
; LE-NEXT: slwi 0, 10, 2
; LE-NEXT: srwi 10, 10, 2
; LE-NEXT: and 0, 0, 7
; LE-NEXT: and 10, 10, 6
; LE-NEXT: or 10, 10, 0
; LE-NEXT: slwi 0, 11, 2
; LE-NEXT: srwi 11, 11, 2
; LE-NEXT: and 0, 0, 7
; LE-NEXT: and 11, 11, 6
; LE-NEXT: or 11, 11, 0
; LE-NEXT: slwi 0, 12, 2
; LE-NEXT: srwi 12, 12, 2
; LE-NEXT: and 0, 0, 7
; LE-NEXT: and 12, 12, 6
; LE-NEXT: or 12, 12, 0
; LE-NEXT: slwi 0, 10, 4
; LE-NEXT: srwi 10, 10, 4
; LE-NEXT: and 0, 0, 5
; LE-NEXT: and 10, 10, 4
; LE-NEXT: or 10, 10, 0
; LE-NEXT: slwi 0, 11, 4
; LE-NEXT: srwi 11, 11, 4
; LE-NEXT: and 0, 0, 5
; LE-NEXT: and 11, 11, 4
; LE-NEXT: or 11, 11, 0
; LE-NEXT: slwi 0, 12, 4
; LE-NEXT: srwi 12, 12, 4
; LE-NEXT: and 0, 0, 5
; LE-NEXT: and 12, 12, 4
; LE-NEXT: or 12, 12, 0
; LE-NEXT: rotlwi 0, 10, 24
; LE-NEXT: rlwimi 0, 10, 8, 8, 15
; LE-NEXT: rlwimi 0, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 11, 24
; LE-NEXT: rlwimi 10, 11, 8, 8, 15
; LE-NEXT: rlwimi 10, 11, 8, 24, 31
; LE-NEXT: rotlwi 11, 12, 24
; LE-NEXT: rldicl 10, 10, 0, 32
; LE-NEXT: rlwimi 11, 12, 8, 8, 15
; LE-NEXT: rlwimi 11, 12, 8, 24, 31
; LE-NEXT: rldicl 12, 0, 0, 32
; LE-NEXT: rldicl 11, 11, 0, 32
; LE-NEXT: rldimi 10, 12, 32, 0
; LE-NEXT: slwi 12, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 12, 12, 7
; LE-NEXT: and 9, 9, 6
; LE-NEXT: mtfprd 0, 10
; LE-NEXT: or 9, 9, 12
; LE-NEXT: slwi 10, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 10, 10, 5
; LE-NEXT: and 9, 9, 4
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: rldimi 9, 11, 32, 0
; LE-NEXT: mtfprd 1, 9
; LE-NEXT: mffprwz 9, 2
; LE-NEXT: slwi 10, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 10, 10, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 10, 10, 7
; LE-NEXT: and 9, 9, 6
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 10, 10, 5
; LE-NEXT: and 9, 9, 4
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: mffprwz 10, 3
; LE-NEXT: slwi 11, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 11, 11, 3
; LE-NEXT: and 10, 10, 8
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 10, 2
; LE-NEXT: srwi 10, 10, 2
; LE-NEXT: and 11, 11, 7
; LE-NEXT: and 10, 10, 6
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 10, 4
; LE-NEXT: srwi 10, 10, 4
; LE-NEXT: and 11, 11, 5
; LE-NEXT: and 10, 10, 4
; LE-NEXT: or 10, 10, 11
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rldicl 10, 11, 0, 32
; LE-NEXT: rldimi 10, 9, 32, 0
; LE-NEXT: mffprwz 9, 4
; LE-NEXT: xxmrghd 0, 1, 0
; LE-NEXT: mtfprd 1, 10
; LE-NEXT: slwi 10, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 10, 10, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 10, 10, 7
; LE-NEXT: and 9, 9, 6
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 10, 10, 5
; LE-NEXT: and 9, 9, 4
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: mfvsrwz 10, 34
; LE-NEXT: vsububm 2, 4, 3
; LE-NEXT: xxland 35, 0, 34
; LE-NEXT: slwi 11, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 11, 11, 3
; LE-NEXT: and 10, 10, 8
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 10, 2
; LE-NEXT: srwi 10, 10, 2
; LE-NEXT: and 11, 11, 7
; LE-NEXT: and 10, 10, 6
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 10, 4
; LE-NEXT: srwi 10, 10, 4
; LE-NEXT: and 11, 11, 5
; LE-NEXT: and 10, 10, 4
; LE-NEXT: or 10, 10, 11
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rldicl 10, 11, 0, 32
; LE-NEXT: rldimi 10, 9, 32, 0
; LE-NEXT: addis 9, 2, .LCPI10_0@toc@ha
; LE-NEXT: mtfprd 2, 10
; LE-NEXT: addi 9, 9, .LCPI10_0@toc@l
; LE-NEXT: xxmrghd 1, 2, 1
; LE-NEXT: lxvd2x 2, 0, 9
; LE-NEXT: addis 9, 2, .LCPI10_1@toc@ha
; LE-NEXT: addi 9, 9, .LCPI10_1@toc@l
; LE-NEXT: xxland 33, 1, 34
; LE-NEXT: lxvd2x 4, 0, 9
; LE-NEXT: addis 9, 2, .LCPI10_2@toc@ha
; LE-NEXT: vmuluwm 10, 1, 3
; LE-NEXT: xxland 36, 1, 2
; LE-NEXT: xxland 32, 0, 2
; LE-NEXT: addi 9, 9, .LCPI10_2@toc@l
; LE-NEXT: vmuluwm 5, 4, 3
; LE-NEXT: vmuluwm 6, 1, 0
; LE-NEXT: lxvd2x 5, 0, 9
; LE-NEXT: xxland 40, 1, 4
; LE-NEXT: xxlxor 3, 38, 37
; LE-NEXT: xxland 37, 0, 4
; LE-NEXT: xxland 38, 1, 5
; LE-NEXT: vmuluwm 7, 6, 5
; LE-NEXT: xxlxor 3, 3, 39
; LE-NEXT: xxland 39, 0, 5
; LE-NEXT: vmuluwm 9, 8, 7
; LE-NEXT: xxlxor 0, 3, 41
; LE-NEXT: vmuluwm 9, 4, 5
; LE-NEXT: xxland 0, 0, 2
; LE-NEXT: xxlxor 1, 42, 41
; LE-NEXT: vmuluwm 9, 6, 7
; LE-NEXT: xxlxor 1, 1, 41
; LE-NEXT: vmuluwm 9, 8, 0
; LE-NEXT: xxlxor 1, 1, 41
; LE-NEXT: vmuluwm 9, 1, 7
; LE-NEXT: xxland 1, 1, 34
; LE-NEXT: vmuluwm 2, 4, 0
; LE-NEXT: xxlor 0, 1, 0
; LE-NEXT: xxlxor 1, 41, 34
; LE-NEXT: vmuluwm 2, 6, 3
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: vmuluwm 2, 8, 5
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: vmuluwm 2, 4, 7
; LE-NEXT: vmuluwm 4, 1, 5
; LE-NEXT: xxland 1, 1, 5
; LE-NEXT: xxlor 0, 0, 1
; LE-NEXT: xxlxor 1, 36, 34
; LE-NEXT: vmuluwm 2, 6, 0
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: vmuluwm 2, 8, 3
; LE-NEXT: xxlxor 1, 1, 34
; LE-NEXT: xxland 1, 1, 4
; LE-NEXT: xxlor 0, 0, 1
; LE-NEXT: vspltisw 3, 1
; LE-NEXT: xxsldwi 1, 0, 0, 1
; LE-NEXT: xxswapd 2, 0
; LE-NEXT: xxsldwi 3, 0, 0, 3
; LE-NEXT: mffprwz 9, 1
; LE-NEXT: mffprwz 10, 2
; LE-NEXT: slwi 11, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 11, 11, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 11
; LE-NEXT: slwi 11, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 11, 11, 3
; LE-NEXT: and 10, 10, 8
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 11, 11, 7
; LE-NEXT: and 9, 9, 6
; LE-NEXT: or 9, 9, 11
; LE-NEXT: slwi 11, 10, 2
; LE-NEXT: srwi 10, 10, 2
; LE-NEXT: and 11, 11, 7
; LE-NEXT: and 10, 10, 6
; LE-NEXT: or 10, 10, 11
; LE-NEXT: slwi 11, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 11, 11, 5
; LE-NEXT: and 9, 9, 4
; LE-NEXT: or 9, 9, 11
; LE-NEXT: rotlwi 11, 9, 24
; LE-NEXT: rlwimi 11, 9, 8, 8, 15
; LE-NEXT: rlwimi 11, 9, 8, 24, 31
; LE-NEXT: slwi 9, 10, 4
; LE-NEXT: srwi 10, 10, 4
; LE-NEXT: rldicl 11, 11, 0, 32
; LE-NEXT: and 9, 9, 5
; LE-NEXT: and 10, 10, 4
; LE-NEXT: or 9, 10, 9
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: rldimi 9, 11, 32, 0
; LE-NEXT: mtfprd 1, 9
; LE-NEXT: mffprwz 9, 3
; LE-NEXT: slwi 10, 9, 1
; LE-NEXT: srwi 9, 9, 1
; LE-NEXT: and 10, 10, 3
; LE-NEXT: and 9, 9, 8
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 2
; LE-NEXT: srwi 9, 9, 2
; LE-NEXT: and 10, 10, 7
; LE-NEXT: and 9, 9, 6
; LE-NEXT: or 9, 9, 10
; LE-NEXT: slwi 10, 9, 4
; LE-NEXT: srwi 9, 9, 4
; LE-NEXT: and 10, 10, 5
; LE-NEXT: and 9, 9, 4
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: rldicl 9, 10, 0, 32
; LE-NEXT: mffprwz 10, 0
; LE-NEXT: slwi 11, 10, 1
; LE-NEXT: srwi 10, 10, 1
; LE-NEXT: and 3, 11, 3
; LE-NEXT: and 8, 10, 8
; LE-NEXT: or 3, 8, 3
; LE-NEXT: slwi 8, 3, 2
; LE-NEXT: srwi 3, 3, 2
; LE-NEXT: and 7, 8, 7
; LE-NEXT: and 3, 3, 6
; LE-NEXT: or 3, 3, 7
; LE-NEXT: slwi 6, 3, 4
; LE-NEXT: srwi 3, 3, 4
; LE-NEXT: and 5, 6, 5
; LE-NEXT: and 3, 3, 4
; LE-NEXT: or 3, 3, 5
; LE-NEXT: rotlwi 4, 3, 24
; LE-NEXT: rlwimi 4, 3, 8, 8, 15
; LE-NEXT: rlwimi 4, 3, 8, 24, 31
; LE-NEXT: rldicl 3, 4, 0, 32
; LE-NEXT: rldimi 3, 9, 32, 0
; LE-NEXT: mtfprd 0, 3
; LE-NEXT: xxmrghd 34, 0, 1
; LE-NEXT: vsrw 2, 2, 3
; LE-NEXT: blr
%a.ext = zext <4 x i32> %a to <4 x i64>
%b.ext = zext <4 x i32> %b to <4 x i64>
%clmul = call <4 x i64> @llvm.clmul.v4i64(<4 x i64> %a.ext, <4 x i64> %b.ext)
%res.ext = lshr <4 x i64> %clmul, splat (i64 32)
%res = trunc <4 x i64> %res.ext to <4 x i32>
ret <4 x i32> %res
}
define <2 x i64> @clmulh_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
; BE-LABEL: clmulh_v2i64:
; BE: # %bb.0:
; BE-NEXT: lis 7, -21846
; BE-NEXT: lis 8, 21845
; BE-NEXT: std 29, -24(1) # 8-byte Folded Spill
; BE-NEXT: lis 9, -13108
; BE-NEXT: lis 10, 13107
; BE-NEXT: std 30, -16(1) # 8-byte Folded Spill
; BE-NEXT: lis 11, -3856
; BE-NEXT: lis 12, 3855
; BE-NEXT: ori 7, 7, 43690
; BE-NEXT: ori 8, 8, 21845
; BE-NEXT: std 18, -112(1) # 8-byte Folded Spill
; BE-NEXT: sldi 0, 5, 1
; BE-NEXT: rldicl 30, 5, 63, 1
; BE-NEXT: std 21, -88(1) # 8-byte Folded Spill
; BE-NEXT: ori 5, 9, 52428
; BE-NEXT: ori 9, 10, 13107
; BE-NEXT: ori 10, 11, 61680
; BE-NEXT: ori 11, 12, 3855
; BE-NEXT: std 17, -120(1) # 8-byte Folded Spill
; BE-NEXT: sldi 12, 3, 1
; BE-NEXT: rldicl 29, 3, 63, 1
; BE-NEXT: std 28, -32(1) # 8-byte Folded Spill
; BE-NEXT: sldi 3, 7, 32
; BE-NEXT: sldi 7, 8, 32
; BE-NEXT: sldi 8, 9, 32
; BE-NEXT: sldi 9, 10, 32
; BE-NEXT: std 25, -56(1) # 8-byte Folded Spill
; BE-NEXT: oris 3, 3, 43690
; BE-NEXT: oris 7, 7, 21845
; BE-NEXT: std 27, -40(1) # 8-byte Folded Spill
; BE-NEXT: sldi 10, 11, 32
; BE-NEXT: oris 11, 9, 61680
; BE-NEXT: ori 21, 3, 43690
; BE-NEXT: ori 18, 7, 21845
; BE-NEXT: std 23, -72(1) # 8-byte Folded Spill
; BE-NEXT: sldi 5, 5, 32
; BE-NEXT: ori 7, 11, 61680
; BE-NEXT: std 24, -64(1) # 8-byte Folded Spill
; BE-NEXT: and 11, 0, 21
; BE-NEXT: and 0, 30, 18
; BE-NEXT: oris 5, 5, 52428
; BE-NEXT: oris 8, 8, 13107
; BE-NEXT: std 26, -48(1) # 8-byte Folded Spill
; BE-NEXT: or 11, 0, 11
; BE-NEXT: ori 17, 5, 52428
; BE-NEXT: std 19, -104(1) # 8-byte Folded Spill
; BE-NEXT: ori 5, 8, 13107
; BE-NEXT: and 12, 12, 21
; BE-NEXT: and 30, 29, 18
; BE-NEXT: sldi 0, 11, 2
; BE-NEXT: std 20, -96(1) # 8-byte Folded Spill
; BE-NEXT: rldicl 11, 11, 62, 2
; BE-NEXT: or 12, 30, 12
; BE-NEXT: std 22, -80(1) # 8-byte Folded Spill
; BE-NEXT: and 0, 0, 17
; BE-NEXT: and 11, 11, 5
; BE-NEXT: oris 28, 10, 3855
; BE-NEXT: sldi 30, 12, 2
; BE-NEXT: std 14, -144(1) # 8-byte Folded Spill
; BE-NEXT: rldicl 12, 12, 62, 2
; BE-NEXT: or 11, 11, 0
; BE-NEXT: std 16, -128(1) # 8-byte Folded Spill
; BE-NEXT: mr 25, 4
; BE-NEXT: ori 4, 28, 3855
; BE-NEXT: and 30, 30, 17
; BE-NEXT: and 12, 12, 5
; BE-NEXT: std 31, -8(1) # 8-byte Folded Spill
; BE-NEXT: sldi 0, 11, 4
; BE-NEXT: rldicl 11, 11, 60, 4
; BE-NEXT: std 2, -152(1) # 8-byte Folded Spill
; BE-NEXT: or 12, 12, 30
; BE-NEXT: and 0, 0, 7
; BE-NEXT: and 11, 11, 4
; BE-NEXT: sldi 30, 12, 4
; BE-NEXT: std 15, -136(1) # 8-byte Folded Spill
; BE-NEXT: rldicl 12, 12, 60, 4
; BE-NEXT: or 11, 11, 0
; BE-NEXT: std 4, -288(1) # 8-byte Folded Spill
; BE-NEXT: and 30, 30, 7
; BE-NEXT: and 12, 12, 4
; BE-NEXT: rotlwi 0, 11, 24
; BE-NEXT: or 12, 12, 30
; BE-NEXT: rlwimi 0, 11, 8, 8, 15
; BE-NEXT: rldicl 29, 11, 32, 32
; BE-NEXT: rlwimi 0, 11, 8, 24, 31
; BE-NEXT: rldicl 11, 12, 32, 32
; BE-NEXT: rotlwi 30, 12, 24
; BE-NEXT: rotlwi 27, 11, 24
; BE-NEXT: rlwimi 30, 12, 8, 8, 15
; BE-NEXT: rotlwi 28, 29, 24
; BE-NEXT: rlwimi 27, 11, 8, 8, 15
; BE-NEXT: rlwimi 28, 29, 8, 8, 15
; BE-NEXT: rlwimi 30, 12, 8, 24, 31
; BE-NEXT: rlwimi 27, 11, 8, 24, 31
; BE-NEXT: lis 11, 4369
; BE-NEXT: lis 12, 8738
; BE-NEXT: rlwimi 28, 29, 8, 24, 31
; BE-NEXT: ori 23, 11, 4369
; BE-NEXT: ori 24, 12, 8738
; BE-NEXT: sldi 0, 0, 32
; BE-NEXT: sldi 30, 30, 32
; BE-NEXT: rldimi 23, 23, 32, 0
; BE-NEXT: rldimi 24, 24, 32, 0
; BE-NEXT: or 28, 0, 28
; BE-NEXT: or 27, 30, 27
; BE-NEXT: lis 0, -30584
; BE-NEXT: lis 26, 17476
; BE-NEXT: and 20, 28, 23
; BE-NEXT: and 22, 27, 24
; BE-NEXT: ori 19, 0, 34952
; BE-NEXT: ori 29, 26, 17476
; BE-NEXT: and 16, 28, 24
; BE-NEXT: and 14, 27, 23
; BE-NEXT: mulld 3, 22, 20
; BE-NEXT: std 3, -160(1) # 8-byte Folded Spill
; BE-NEXT: rldimi 19, 19, 32, 0
; BE-NEXT: rldimi 29, 29, 32, 0
; BE-NEXT: mulld 3, 14, 16
; BE-NEXT: and 31, 28, 19
; BE-NEXT: std 3, -168(1) # 8-byte Folded Spill
; BE-NEXT: and 2, 27, 29
; BE-NEXT: and 15, 28, 29
; BE-NEXT: and 3, 27, 19
; BE-NEXT: mulld 8, 2, 31
; BE-NEXT: std 8, -184(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 3, 15
; BE-NEXT: std 8, -176(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 22, 31
; BE-NEXT: std 8, -208(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 14, 20
; BE-NEXT: std 8, -216(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 2, 15
; BE-NEXT: std 8, -200(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 3, 16
; BE-NEXT: std 8, -192(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 22, 16
; BE-NEXT: std 8, -248(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 14, 15
; BE-NEXT: std 8, -256(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 2, 20
; BE-NEXT: std 8, -232(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 22, 15
; BE-NEXT: std 8, -272(1) # 8-byte Folded Spill
; BE-NEXT: mulld 8, 3, 31
; BE-NEXT: ld 15, -256(1) # 8-byte Folded Reload
; BE-NEXT: mulld 3, 3, 20
; BE-NEXT: std 3, -240(1) # 8-byte Folded Spill
; BE-NEXT: std 8, -224(1) # 8-byte Folded Spill
; BE-NEXT: sldi 3, 6, 1
; BE-NEXT: rldicl 6, 6, 63, 1
; BE-NEXT: and 3, 3, 21
; BE-NEXT: and 6, 6, 18
; BE-NEXT: mulld 8, 14, 31
; BE-NEXT: std 8, -280(1) # 8-byte Folded Spill
; BE-NEXT: or 3, 6, 3
; BE-NEXT: sldi 6, 3, 2
; BE-NEXT: rldicl 3, 3, 62, 2
; BE-NEXT: and 6, 6, 17
; BE-NEXT: and 3, 3, 5
; BE-NEXT: sldi 31, 25, 1
; BE-NEXT: rldicl 25, 25, 63, 1
; BE-NEXT: or 3, 3, 6
; BE-NEXT: and 31, 31, 21
; BE-NEXT: and 25, 25, 18
; BE-NEXT: sldi 6, 3, 4
; BE-NEXT: rldicl 3, 3, 60, 4
; BE-NEXT: or 25, 25, 31
; BE-NEXT: and 6, 6, 7
; BE-NEXT: and 3, 3, 4
; BE-NEXT: sldi 31, 25, 2
; BE-NEXT: rldicl 25, 25, 62, 2
; BE-NEXT: or 3, 3, 6
; BE-NEXT: and 31, 31, 17
; BE-NEXT: and 25, 25, 5
; BE-NEXT: rotlwi 6, 3, 24
; BE-NEXT: or 25, 25, 31
; BE-NEXT: rlwimi 6, 3, 8, 8, 15
; BE-NEXT: sldi 31, 25, 4
; BE-NEXT: rldicl 25, 25, 60, 4
; BE-NEXT: rlwimi 6, 3, 8, 24, 31
; BE-NEXT: and 31, 31, 7
; BE-NEXT: and 25, 25, 4
; BE-NEXT: rldicl 3, 3, 32, 32
; BE-NEXT: mulld 8, 2, 16
; BE-NEXT: ld 16, -280(1) # 8-byte Folded Reload
; BE-NEXT: or 25, 25, 31
; BE-NEXT: rotlwi 2, 3, 24
; BE-NEXT: std 8, -264(1) # 8-byte Folded Spill
; BE-NEXT: rotlwi 31, 25, 24
; BE-NEXT: rlwimi 2, 3, 8, 8, 15
; BE-NEXT: rlwimi 31, 25, 8, 8, 15
; BE-NEXT: rlwimi 2, 3, 8, 24, 31
; BE-NEXT: rldicl 3, 25, 32, 32
; BE-NEXT: rlwimi 31, 25, 8, 24, 31
; BE-NEXT: rotlwi 25, 3, 24
; BE-NEXT: rlwimi 25, 3, 8, 8, 15
; BE-NEXT: mr 20, 5
; BE-NEXT: rlwimi 25, 3, 8, 24, 31
; BE-NEXT: sldi 3, 6, 32
; BE-NEXT: sldi 6, 31, 32
; BE-NEXT: or 3, 3, 2
; BE-NEXT: or 6, 6, 25
; BE-NEXT: and 25, 3, 23
; BE-NEXT: and 31, 6, 24
; BE-NEXT: and 2, 3, 19
; BE-NEXT: and 5, 3, 24
; BE-NEXT: and 4, 3, 29
; BE-NEXT: and 19, 6, 19
; BE-NEXT: and 3, 6, 29
; BE-NEXT: and 6, 6, 23
; BE-NEXT: mulld 22, 31, 25
; BE-NEXT: mulld 26, 31, 2
; BE-NEXT: mulld 28, 31, 5
; BE-NEXT: mulld 31, 31, 4
; BE-NEXT: mulld 27, 19, 4
; BE-NEXT: mulld 0, 3, 4
; BE-NEXT: mulld 10, 6, 4
; BE-NEXT: ld 4, -168(1) # 8-byte Folded Reload
; BE-NEXT: mulld 8, 6, 5
; BE-NEXT: mulld 12, 3, 5
; BE-NEXT: mulld 9, 3, 2
; BE-NEXT: mulld 11, 3, 25
; BE-NEXT: ld 3, -160(1) # 8-byte Folded Reload
; BE-NEXT: xor 8, 8, 22
; BE-NEXT: ld 22, -80(1) # 8-byte Folded Reload
; BE-NEXT: xor 10, 10, 28
; BE-NEXT: ld 28, -184(1) # 8-byte Folded Reload
; BE-NEXT: xor 8, 8, 9
; BE-NEXT: xor 9, 10, 11
; BE-NEXT: mulld 30, 19, 5
; BE-NEXT: ld 10, -176(1) # 8-byte Folded Reload
; BE-NEXT: xor 3, 4, 3
; BE-NEXT: xor 3, 3, 28
; BE-NEXT: ld 4, -208(1) # 8-byte Folded Reload
; BE-NEXT: xor 3, 3, 10
; BE-NEXT: ld 5, -216(1) # 8-byte Folded Reload
; BE-NEXT: mr 14, 7
; BE-NEXT: mulld 7, 6, 25
; BE-NEXT: mulld 6, 6, 2
; BE-NEXT: ld 28, -200(1) # 8-byte Folded Reload
; BE-NEXT: ld 10, -192(1) # 8-byte Folded Reload
; BE-NEXT: xor 4, 5, 4
; BE-NEXT: ld 5, -248(1) # 8-byte Folded Reload
; BE-NEXT: xor 4, 4, 28
; BE-NEXT: mulld 2, 19, 2
; BE-NEXT: xor 4, 4, 10
; BE-NEXT: ld 28, -232(1) # 8-byte Folded Reload
; BE-NEXT: xor 5, 15, 5
; BE-NEXT: ld 10, -224(1) # 8-byte Folded Reload
; BE-NEXT: xor 5, 5, 28
; BE-NEXT: mulld 25, 19, 25
; BE-NEXT: lis 19, 2184
; BE-NEXT: ld 15, -272(1) # 8-byte Folded Reload
; BE-NEXT: xor 5, 5, 10
; BE-NEXT: ld 28, -264(1) # 8-byte Folded Reload
; BE-NEXT: ori 19, 19, 34952
; BE-NEXT: xor 15, 16, 15
; BE-NEXT: xor 7, 7, 26
; BE-NEXT: ld 10, -240(1) # 8-byte Folded Reload
; BE-NEXT: rldimi 19, 19, 32, 0
; BE-NEXT: xor 28, 15, 28
; BE-NEXT: xor 7, 7, 0
; BE-NEXT: and 3, 3, 24
; BE-NEXT: ld 26, -48(1) # 8-byte Folded Reload
; BE-NEXT: and 4, 4, 23
; BE-NEXT: rlwimi 19, 19, 16, 0, 15
; BE-NEXT: ld 16, -128(1) # 8-byte Folded Reload
; BE-NEXT: xor 6, 6, 31
; BE-NEXT: xor 10, 28, 10
; BE-NEXT: xor 8, 8, 27
; BE-NEXT: ld 31, -8(1) # 8-byte Folded Reload
; BE-NEXT: xor 7, 7, 30
; BE-NEXT: and 5, 5, 29
; BE-NEXT: ld 30, -16(1) # 8-byte Folded Reload
; BE-NEXT: or 3, 4, 3
; BE-NEXT: xor 6, 6, 12
; BE-NEXT: xor 9, 9, 2
; BE-NEXT: and 10, 10, 19
; BE-NEXT: ld 2, -152(1) # 8-byte Folded Reload
; BE-NEXT: and 8, 8, 24
; BE-NEXT: and 7, 7, 23
; BE-NEXT: ld 28, -32(1) # 8-byte Folded Reload
; BE-NEXT: or 3, 3, 5
; BE-NEXT: xor 6, 6, 25
; BE-NEXT: and 9, 9, 29
; BE-NEXT: or 4, 7, 8
; BE-NEXT: ld 7, -288(1) # 8-byte Folded Reload
; BE-NEXT: or 3, 3, 10
; BE-NEXT: and 6, 6, 19
; BE-NEXT: ld 29, -24(1) # 8-byte Folded Reload
; BE-NEXT: or 4, 4, 9
; BE-NEXT: sldi 5, 3, 1
; BE-NEXT: rldicl 3, 3, 63, 1
; BE-NEXT: or 4, 4, 6
; BE-NEXT: ld 27, -40(1) # 8-byte Folded Reload
; BE-NEXT: and 5, 5, 21
; BE-NEXT: and 3, 3, 18
; BE-NEXT: ld 25, -56(1) # 8-byte Folded Reload
; BE-NEXT: sldi 6, 4, 1
; BE-NEXT: rldicl 4, 4, 63, 1
; BE-NEXT: or 3, 3, 5
; BE-NEXT: and 6, 6, 21
; BE-NEXT: ld 24, -64(1) # 8-byte Folded Reload
; BE-NEXT: and 4, 4, 18
; BE-NEXT: sldi 5, 3, 2
; BE-NEXT: ld 23, -72(1) # 8-byte Folded Reload
; BE-NEXT: rldicl 3, 3, 62, 2
; BE-NEXT: or 4, 4, 6
; BE-NEXT: and 5, 5, 17
; BE-NEXT: and 3, 3, 20
; BE-NEXT: ld 21, -88(1) # 8-byte Folded Reload
; BE-NEXT: sldi 6, 4, 2
; BE-NEXT: rldicl 4, 4, 62, 2
; BE-NEXT: ld 19, -104(1) # 8-byte Folded Reload
; BE-NEXT: or 3, 3, 5
; BE-NEXT: and 6, 6, 17
; BE-NEXT: and 4, 4, 20
; BE-NEXT: sldi 5, 3, 4
; BE-NEXT: ld 20, -96(1) # 8-byte Folded Reload
; BE-NEXT: rldicl 3, 3, 60, 4
; BE-NEXT: or 4, 4, 6
; BE-NEXT: ld 18, -112(1) # 8-byte Folded Reload
; BE-NEXT: and 5, 5, 14
; BE-NEXT: and 3, 3, 7
; BE-NEXT: sldi 6, 4, 4
; BE-NEXT: rldicl 4, 4, 60, 4
; BE-NEXT: ld 17, -120(1) # 8-byte Folded Reload
; BE-NEXT: or 3, 3, 5
; BE-NEXT: and 6, 6, 14
; BE-NEXT: ld 15, -136(1) # 8-byte Folded Reload
; BE-NEXT: and 4, 4, 7
; BE-NEXT: rotlwi 5, 3, 24
; BE-NEXT: or 4, 4, 6
; BE-NEXT: rlwimi 5, 3, 8, 8, 15
; BE-NEXT: ld 14, -144(1) # 8-byte Folded Reload
; BE-NEXT: rotlwi 6, 4, 24
; BE-NEXT: rldicl 7, 3, 32, 32
; BE-NEXT: rlwimi 5, 3, 8, 24, 31
; BE-NEXT: rldicl 3, 4, 32, 32
; BE-NEXT: rlwimi 6, 4, 8, 8, 15
; BE-NEXT: rotlwi 8, 7, 24
; BE-NEXT: rotlwi 9, 3, 24
; BE-NEXT: rlwimi 8, 7, 8, 8, 15
; BE-NEXT: rlwimi 9, 3, 8, 8, 15
; BE-NEXT: rlwimi 6, 4, 8, 24, 31
; BE-NEXT: rlwimi 8, 7, 8, 24, 31
; BE-NEXT: rlwimi 9, 3, 8, 24, 31
; BE-NEXT: sldi 3, 5, 32
; BE-NEXT: sldi 4, 6, 32
; BE-NEXT: or 3, 3, 8
; BE-NEXT: or 4, 4, 9
; BE-NEXT: rldicl 3, 3, 63, 1
; BE-NEXT: rldicl 4, 4, 63, 1
; BE-NEXT: blr
;
; LE-LABEL: clmulh_v2i64:
; LE: # %bb.0:
; LE-NEXT: lis 3, -21846
; LE-NEXT: lis 4, 21845
; LE-NEXT: lis 5, -13108
; LE-NEXT: lis 6, 13107
; LE-NEXT: xxswapd 0, 34
; LE-NEXT: lis 7, -3856
; LE-NEXT: lis 8, 3855
; LE-NEXT: xxswapd 1, 35
; LE-NEXT: ori 3, 3, 43690
; LE-NEXT: ori 4, 4, 21845
; LE-NEXT: ori 5, 5, 52428
; LE-NEXT: ori 6, 6, 13107
; LE-NEXT: mffprd 9, 0
; LE-NEXT: ori 7, 7, 61680
; LE-NEXT: ori 8, 8, 3855
; LE-NEXT: mffprd 10, 1
; LE-NEXT: sldi 3, 3, 32
; LE-NEXT: sldi 4, 4, 32
; LE-NEXT: sldi 5, 5, 32
; LE-NEXT: sldi 6, 6, 32
; LE-NEXT: sldi 7, 7, 32
; LE-NEXT: sldi 8, 8, 32
; LE-NEXT: vspltisw 4, 2
; LE-NEXT: vspltisw 5, 8
; LE-NEXT: oris 3, 3, 43690
; LE-NEXT: oris 4, 4, 21845
; LE-NEXT: vspltisw 8, 1
; LE-NEXT: vspltisw 10, 7
; LE-NEXT: oris 5, 5, 52428
; LE-NEXT: oris 11, 6, 13107
; LE-NEXT: vupklsw 0, 4
; LE-NEXT: vupklsw 6, 5
; LE-NEXT: oris 12, 7, 61680
; LE-NEXT: oris 0, 8, 3855
; LE-NEXT: xxlxor 37, 37, 37
; LE-NEXT: vupklsw 10, 10
; LE-NEXT: ori 8, 3, 43690
; LE-NEXT: ori 7, 4, 21845
; LE-NEXT: ori 6, 5, 52428
; LE-NEXT: ori 5, 11, 13107
; LE-NEXT: sldi 11, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: ori 4, 12, 61680
; LE-NEXT: sldi 12, 10, 1
; LE-NEXT: rldicl 10, 10, 63, 1
; LE-NEXT: and 11, 11, 8
; LE-NEXT: and 9, 9, 7
; LE-NEXT: and 12, 12, 8
; LE-NEXT: and 10, 10, 7
; LE-NEXT: or 9, 9, 11
; LE-NEXT: or 10, 10, 12
; LE-NEXT: ori 3, 0, 3855
; LE-NEXT: sldi 11, 9, 2
; LE-NEXT: rldicl 9, 9, 62, 2
; LE-NEXT: sldi 12, 10, 2
; LE-NEXT: rldicl 10, 10, 62, 2
; LE-NEXT: and 11, 11, 6
; LE-NEXT: and 9, 9, 5
; LE-NEXT: and 12, 12, 6
; LE-NEXT: and 10, 10, 5
; LE-NEXT: or 9, 9, 11
; LE-NEXT: or 10, 10, 12
; LE-NEXT: sldi 11, 9, 4
; LE-NEXT: rldicl 9, 9, 60, 4
; LE-NEXT: sldi 12, 10, 4
; LE-NEXT: rldicl 10, 10, 60, 4
; LE-NEXT: and 11, 11, 4
; LE-NEXT: and 9, 9, 3
; LE-NEXT: and 12, 12, 4
; LE-NEXT: and 10, 10, 3
; LE-NEXT: or 9, 9, 11
; LE-NEXT: or 10, 10, 12
; LE-NEXT: rotlwi 12, 9, 24
; LE-NEXT: rldicl 11, 9, 32, 32
; LE-NEXT: rldicl 0, 10, 32, 32
; LE-NEXT: rlwimi 12, 9, 8, 8, 15
; LE-NEXT: rlwimi 12, 9, 8, 24, 31
; LE-NEXT: rotlwi 9, 10, 24
; LE-NEXT: sldi 12, 12, 32
; LE-NEXT: rlwimi 9, 10, 8, 8, 15
; LE-NEXT: rlwimi 9, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 11, 24
; LE-NEXT: sldi 9, 9, 32
; LE-NEXT: rlwimi 10, 11, 8, 8, 15
; LE-NEXT: rlwimi 10, 11, 8, 24, 31
; LE-NEXT: rotlwi 11, 0, 24
; LE-NEXT: or 10, 12, 10
; LE-NEXT: rlwimi 11, 0, 8, 8, 15
; LE-NEXT: rlwimi 11, 0, 8, 24, 31
; LE-NEXT: mtfprd 0, 10
; LE-NEXT: or 9, 9, 11
; LE-NEXT: mtfprd 1, 9
; LE-NEXT: mfvsrd 9, 35
; LE-NEXT: sldi 10, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: and 10, 10, 8
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 2
; LE-NEXT: rldicl 9, 9, 62, 2
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 4
; LE-NEXT: rldicl 9, 9, 60, 4
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 3
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rldicl 10, 9, 32, 32
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: mfvsrd 9, 34
; LE-NEXT: sldi 10, 10, 32
; LE-NEXT: or 10, 10, 11
; LE-NEXT: mtfprd 2, 10
; LE-NEXT: sldi 10, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: and 10, 10, 8
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 2
; LE-NEXT: rldicl 9, 9, 62, 2
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 4
; LE-NEXT: rldicl 9, 9, 60, 4
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 3
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rldicl 10, 9, 32, 32
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: sldi 9, 10, 32
; LE-NEXT: addis 10, 2, .LCPI11_14@toc@ha
; LE-NEXT: or 9, 9, 11
; LE-NEXT: vspltisw 2, 4
; LE-NEXT: vupklsw 1, 2
; LE-NEXT: vspltisw 2, 3
; LE-NEXT: vupklsw 9, 2
; LE-NEXT: xxmrghd 35, 2, 1
; LE-NEXT: xxland 34, 35, 32
; LE-NEXT: vcmpgtud 2, 2, 5
; LE-NEXT: mtfprd 1, 9
; LE-NEXT: addis 9, 2, .LCPI11_0@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_0@toc@l
; LE-NEXT: xxmrghd 36, 1, 0
; LE-NEXT: vaddudm 7, 4, 4
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: xxland 0, 34, 39
; LE-NEXT: xxland 39, 35, 33
; LE-NEXT: vcmpgtud 7, 7, 5
; LE-NEXT: xxland 1, 39, 32
; LE-NEXT: xxland 39, 35, 38
; LE-NEXT: vsld 0, 4, 9
; LE-NEXT: vsld 6, 4, 6
; LE-NEXT: vcmpgtud 7, 7, 5
; LE-NEXT: xxland 2, 39, 32
; LE-NEXT: vsld 0, 4, 1
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_1@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_1@toc@l
; LE-NEXT: vupklsw 2, 8
; LE-NEXT: vspltisw 8, 5
; LE-NEXT: xxland 41, 35, 33
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: vcmpgtud 9, 9, 5
; LE-NEXT: xxland 5, 41, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_2@toc@ha
; LE-NEXT: vupklsw 8, 8
; LE-NEXT: vsld 8, 4, 8
; LE-NEXT: addi 9, 9, .LCPI11_2@toc@l
; LE-NEXT: lxvd2x 3, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_3@toc@ha
; LE-NEXT: xxland 41, 35, 32
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_3@toc@l
; LE-NEXT: vcmpgtud 9, 9, 5
; LE-NEXT: lxvd2x 6, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_4@toc@ha
; LE-NEXT: xxland 4, 41, 40
; LE-NEXT: xxland 40, 35, 3
; LE-NEXT: addi 9, 9, .LCPI11_4@toc@l
; LE-NEXT: vcmpgtud 8, 8, 5
; LE-NEXT: lxvd2x 7, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_5@toc@ha
; LE-NEXT: xxland 41, 35, 6
; LE-NEXT: addi 9, 9, .LCPI11_5@toc@l
; LE-NEXT: vcmpgtud 9, 9, 5
; LE-NEXT: lxvd2x 8, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_6@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_6@toc@l
; LE-NEXT: vspltisw 7, 6
; LE-NEXT: vupklsw 7, 7
; LE-NEXT: vsld 7, 4, 7
; LE-NEXT: xxland 3, 40, 39
; LE-NEXT: vsld 7, 4, 10
; LE-NEXT: xxland 6, 41, 39
; LE-NEXT: xxland 41, 35, 7
; LE-NEXT: vcmpgtud 9, 9, 5
; LE-NEXT: xxland 7, 41, 38
; LE-NEXT: xxland 41, 35, 8
; LE-NEXT: lxvd2x 8, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_7@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_7@toc@l
; LE-NEXT: vcmpgtud 9, 9, 5
; LE-NEXT: lxvd2x 10, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_8@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_8@toc@l
; LE-NEXT: lxvd2x 11, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_9@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_9@toc@l
; LE-NEXT: lxvd2x 12, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_10@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_10@toc@l
; LE-NEXT: vspltisw 8, 9
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: vspltisw 8, 10
; LE-NEXT: vsld 6, 4, 7
; LE-NEXT: xxland 9, 41, 38
; LE-NEXT: xxland 41, 35, 10
; LE-NEXT: vcmpgtud 9, 9, 5
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: vspltisw 8, 11
; LE-NEXT: vsld 6, 4, 7
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: xxland 40, 35, 8
; LE-NEXT: vcmpgtud 8, 8, 5
; LE-NEXT: xxland 8, 40, 38
; LE-NEXT: vsld 6, 4, 7
; LE-NEXT: xxland 10, 41, 38
; LE-NEXT: xxland 41, 35, 11
; LE-NEXT: vcmpgtud 9, 9, 5
; LE-NEXT: vspltisw 7, 12
; LE-NEXT: vspltisw 8, 13
; LE-NEXT: vupklsw 6, 7
; LE-NEXT: vsld 6, 4, 6
; LE-NEXT: vupklsw 7, 8
; LE-NEXT: vsld 7, 4, 7
; LE-NEXT: vspltisw 8, 14
; LE-NEXT: xxland 11, 41, 38
; LE-NEXT: xxland 38, 35, 12
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 12, 38, 39
; LE-NEXT: xxland 38, 35, 34
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 13, 38, 36
; LE-NEXT: vupklsw 8, 8
; LE-NEXT: vsld 7, 4, 8
; LE-NEXT: xxlxor 0, 13, 0
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_11@toc@ha
; LE-NEXT: vspltisw 9, 15
; LE-NEXT: addi 9, 9, .LCPI11_11@toc@l
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: lxvd2x 2, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_12@toc@ha
; LE-NEXT: xxlxor 0, 0, 5
; LE-NEXT: xxland 40, 35, 1
; LE-NEXT: addi 9, 9, .LCPI11_12@toc@l
; LE-NEXT: xxlxor 0, 0, 4
; LE-NEXT: vcmpgtud 8, 8, 5
; LE-NEXT: lxvd2x 4, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_13@toc@ha
; LE-NEXT: xxlxor 0, 0, 3
; LE-NEXT: xxland 1, 40, 39
; LE-NEXT: xxland 39, 35, 2
; LE-NEXT: addi 9, 9, .LCPI11_13@toc@l
; LE-NEXT: xxlxor 0, 0, 6
; LE-NEXT: vcmpgtud 7, 7, 5
; LE-NEXT: xxlxor 0, 0, 7
; LE-NEXT: xxlxor 0, 0, 9
; LE-NEXT: xxlxor 0, 0, 8
; LE-NEXT: xxlxor 0, 0, 10
; LE-NEXT: xxlxor 0, 0, 11
; LE-NEXT: xxlxor 0, 0, 12
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: vupklsw 6, 9
; LE-NEXT: vsld 6, 4, 6
; LE-NEXT: xxland 2, 39, 38
; LE-NEXT: xxland 38, 35, 4
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 4, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addi 9, 10, .LCPI11_14@toc@l
; LE-NEXT: lxvd2x 3, 0, 9
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: addis 9, 2, .LCPI11_15@toc@ha
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: addis 10, 2, .LCPI11_16@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_15@toc@l
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: xxland 3, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addi 9, 10, .LCPI11_16@toc@l
; LE-NEXT: addis 10, 2, .LCPI11_18@toc@ha
; LE-NEXT: xxlxor 0, 0, 4
; LE-NEXT: lxvd2x 5, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_17@toc@ha
; LE-NEXT: xxlxor 0, 0, 3
; LE-NEXT: addi 9, 9, .LCPI11_17@toc@l
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: xxland 38, 35, 5
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 5, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addi 9, 10, .LCPI11_18@toc@l
; LE-NEXT: addis 10, 2, .LCPI11_20@toc@ha
; LE-NEXT: lxvd2x 6, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_19@toc@ha
; LE-NEXT: xxlxor 0, 0, 5
; LE-NEXT: addi 9, 9, .LCPI11_19@toc@l
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: xxland 38, 35, 6
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 6, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addi 9, 10, .LCPI11_20@toc@l
; LE-NEXT: addis 10, 2, .LCPI11_22@toc@ha
; LE-NEXT: lxvd2x 7, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_21@toc@ha
; LE-NEXT: xxlxor 0, 0, 6
; LE-NEXT: addi 9, 9, .LCPI11_21@toc@l
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: xxland 38, 35, 7
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 7, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addi 9, 10, .LCPI11_22@toc@l
; LE-NEXT: addis 10, 2, .LCPI11_24@toc@ha
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_23@toc@ha
; LE-NEXT: xxlxor 0, 0, 7
; LE-NEXT: addi 9, 9, .LCPI11_23@toc@l
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addi 9, 10, .LCPI11_24@toc@l
; LE-NEXT: addis 10, 2, .LCPI11_26@toc@ha
; LE-NEXT: lxvd2x 2, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_25@toc@ha
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: addi 9, 9, .LCPI11_25@toc@l
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: xxland 38, 35, 2
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 2, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addi 9, 10, .LCPI11_26@toc@l
; LE-NEXT: addis 10, 2, .LCPI11_28@toc@ha
; LE-NEXT: lxvd2x 3, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_27@toc@ha
; LE-NEXT: xxlxor 0, 0, 2
; LE-NEXT: addi 9, 9, .LCPI11_27@toc@l
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: xxland 38, 35, 3
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 3, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addi 9, 10, .LCPI11_28@toc@l
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_29@toc@ha
; LE-NEXT: xxlxor 0, 0, 3
; LE-NEXT: addi 9, 9, .LCPI11_29@toc@l
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_30@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_30@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_31@toc@ha
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: addi 9, 9, .LCPI11_31@toc@l
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_32@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_32@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_33@toc@ha
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: addi 9, 9, .LCPI11_33@toc@l
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_34@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_34@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_35@toc@ha
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: addi 9, 9, .LCPI11_35@toc@l
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_36@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_36@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_37@toc@ha
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: addi 9, 9, .LCPI11_37@toc@l
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_38@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_38@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_39@toc@ha
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: addi 9, 9, .LCPI11_39@toc@l
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_40@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_40@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_41@toc@ha
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: addi 9, 9, .LCPI11_41@toc@l
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: lxvd2x 33, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_42@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_42@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_43@toc@ha
; LE-NEXT: vsld 1, 4, 1
; LE-NEXT: addi 9, 9, .LCPI11_43@toc@l
; LE-NEXT: xxland 38, 35, 1
; LE-NEXT: vcmpgtud 6, 6, 5
; LE-NEXT: xxland 1, 38, 33
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_44@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_44@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_45@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_45@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_46@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_46@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_47@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_47@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_48@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_48@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_49@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_49@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_50@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_50@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_51@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_51@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_52@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_52@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_53@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_53@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_54@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_54@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_55@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_55@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_56@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_56@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_57@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_57@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_58@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_58@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_59@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_59@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_60@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_60@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_61@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_61@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_62@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_62@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_63@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_63@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_64@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_64@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_65@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_65@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_66@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_66@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_67@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_67@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_68@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_68@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_69@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_69@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_70@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_70@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_71@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_71@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_72@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_72@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_73@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_73@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_74@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_74@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_75@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_75@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_76@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_76@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_77@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_77@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_78@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_78@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_79@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_79@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_80@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_80@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_81@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_81@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_82@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_82@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_83@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_83@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_84@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_84@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_85@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_85@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_86@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_86@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_87@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_87@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_88@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_88@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_89@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_89@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_90@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_90@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_91@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_91@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_92@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_92@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_93@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_93@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_94@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_94@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_95@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_95@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_96@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_96@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_97@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_97@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_98@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_98@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_99@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_99@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_100@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_100@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_101@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_101@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_102@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_102@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: lxvd2x 32, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_103@toc@ha
; LE-NEXT: addi 9, 9, .LCPI11_103@toc@l
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: addis 9, 2, .LCPI11_104@toc@ha
; LE-NEXT: vsld 0, 4, 0
; LE-NEXT: addi 9, 9, .LCPI11_104@toc@l
; LE-NEXT: xxland 33, 35, 1
; LE-NEXT: vcmpgtud 1, 1, 5
; LE-NEXT: xxland 1, 33, 32
; LE-NEXT: xxleqv 32, 32, 32
; LE-NEXT: vsld 4, 4, 0
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: lxvd2x 1, 0, 9
; LE-NEXT: xxland 35, 35, 1
; LE-NEXT: vcmpgtud 3, 3, 5
; LE-NEXT: xxland 1, 35, 36
; LE-NEXT: xxlxor 0, 0, 1
; LE-NEXT: mffprd 9, 0
; LE-NEXT: sldi 10, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: and 10, 10, 8
; LE-NEXT: and 9, 9, 7
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 2
; LE-NEXT: rldicl 9, 9, 62, 2
; LE-NEXT: and 10, 10, 6
; LE-NEXT: and 9, 9, 5
; LE-NEXT: or 9, 9, 10
; LE-NEXT: sldi 10, 9, 4
; LE-NEXT: rldicl 9, 9, 60, 4
; LE-NEXT: and 10, 10, 4
; LE-NEXT: and 9, 9, 3
; LE-NEXT: or 9, 9, 10
; LE-NEXT: rldicl 10, 9, 32, 32
; LE-NEXT: rotlwi 11, 10, 24
; LE-NEXT: rlwimi 11, 10, 8, 8, 15
; LE-NEXT: rlwimi 11, 10, 8, 24, 31
; LE-NEXT: rotlwi 10, 9, 24
; LE-NEXT: rlwimi 10, 9, 8, 8, 15
; LE-NEXT: rlwimi 10, 9, 8, 24, 31
; LE-NEXT: sldi 9, 10, 32
; LE-NEXT: or 9, 9, 11
; LE-NEXT: xxswapd 1, 0
; LE-NEXT: mtfprd 0, 9
; LE-NEXT: mffprd 9, 1
; LE-NEXT: sldi 10, 9, 1
; LE-NEXT: rldicl 9, 9, 63, 1
; LE-NEXT: and 8, 10, 8
; LE-NEXT: and 7, 9, 7
; LE-NEXT: or 7, 7, 8
; LE-NEXT: sldi 8, 7, 2
; LE-NEXT: rldicl 7, 7, 62, 2
; LE-NEXT: and 6, 8, 6
; LE-NEXT: and 5, 7, 5
; LE-NEXT: or 5, 5, 6
; LE-NEXT: sldi 6, 5, 4
; LE-NEXT: rldicl 5, 5, 60, 4
; LE-NEXT: and 4, 6, 4
; LE-NEXT: and 3, 5, 3
; LE-NEXT: or 3, 3, 4
; LE-NEXT: rldicl 4, 3, 32, 32
; LE-NEXT: rotlwi 5, 4, 24
; LE-NEXT: rlwimi 5, 4, 8, 8, 15
; LE-NEXT: rlwimi 5, 4, 8, 24, 31
; LE-NEXT: rotlwi 4, 3, 24
; LE-NEXT: rlwimi 4, 3, 8, 8, 15
; LE-NEXT: rlwimi 4, 3, 8, 24, 31
; LE-NEXT: sldi 3, 4, 32
; LE-NEXT: or 3, 3, 5
; LE-NEXT: mtfprd 1, 3
; LE-NEXT: xxmrghd 35, 0, 1
; LE-NEXT: vsrd 2, 3, 2
; LE-NEXT: blr
%a.ext = zext <2 x i64> %a to <2 x i128>
%b.ext = zext <2 x i64> %b to <2 x i128>
%clmul = call <2 x i128> @llvm.clmul.v2i128(<2 x i128> %a.ext, <2 x i128> %b.ext)
%res.ext = lshr <2 x i128> %clmul, splat (i128 64)
%res = trunc <2 x i128> %res.ext to <2 x i64>
ret <2 x i64> %res
}
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; CHECK: {{.*}}