/*
 * Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Portions Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de>
 * - modified assembly to fit into OpenZFS
 */

#if (defined(__PPC64__) && defined(__BIG_ENDIAN__))

#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.text

.globl	zfs_sha256_power8
.globl	.zfs_sha256_power8
.type	zfs_sha256_power8,@function
.section	".opd","aw"
.align	3
zfs_sha256_power8:
.quad	.zfs_sha256_power8,.TOC.@tocbase,0
.previous
.align	6
.zfs_sha256_power8:
#else
.abiversion	2
.text

.globl	zfs_sha256_power8
.type	zfs_sha256_power8,@function
.align	6
zfs_sha256_power8:
.localentry	zfs_sha256_power8,0
#endif
	stdu	1,-384(1)
	mflr	8
	li	10,207
	li	11,223
	stvx	24,10,1
	addi	10,10,32
	mfspr	12,256
	stvx	25,11,1
	addi	11,11,32
	stvx	26,10,1
	addi	10,10,32
	stvx	27,11,1
	addi	11,11,32
	stvx	28,10,1
	addi	10,10,32
	stvx	29,11,1
	addi	11,11,32
	stvx	30,10,1
	stvx	31,11,1
	li	11,-4096+255
	stw	12,332(1)
	li	10,0x10
	std	26,336(1)
	li	26,0x20
	std	27,344(1)
	li	27,0x30
	std	28,352(1)
	li	28,0x40
	std	29,360(1)
	li	29,0x50
	std	30,368(1)
	li	30,0x60
	std	31,376(1)
	li	31,0x70
	std	8,400(1)
	mtspr	256,11

	bl	.LPICmeup
	addi	11,1,79
	.long	0x7C001E19
	.long	0x7C8A1E19
	vsldoi	1,0,0,4
	vsldoi	2,0,0,8
	vsldoi	3,0,0,12
	vsldoi	5,4,4,4
	vsldoi	6,4,4,8
	vsldoi	7,4,4,12
	li	0,3
	b	.Loop
.align	5
.Loop:
	lvx	28,0,6
	.long	0x7D002699
	addi	4,4,16
	mr	7,6
	stvx	0,0,11
	stvx	1,10,11
	stvx	2,26,11
	stvx	3,27,11
	stvx	4,28,11
	stvx	5,29,11
	stvx	6,30,11
	stvx	7,31,11
	vadduwm	7,7,28
	lvx	28,10,6
	vadduwm	7,7,8
	vsel	29,6,5,4
	vadduwm	6,6,28
	vadduwm	7,7,29
	.long	0x13C4FE82
	vadduwm	7,7,30
	vxor	29,0,1
	vsel	29,1,2,29
	vadduwm	3,3,7
	.long	0x13C08682
	vadduwm	30,30,29
	vadduwm	7,7,30
	lvx	28,26,7
	vsldoi	9,8,8,4
	vadduwm	6,6,9
	vsel	29,5,4,3
	vadduwm	5,5,28
	vadduwm	6,6,29
	.long	0x13C3FE82
	vadduwm	6,6,30
	vxor	29,7,0
	vsel	29,0,1,29
	vadduwm	2,2,6
	.long	0x13C78682
	vadduwm	30,30,29
	vadduwm	6,6,30
	lvx	28,27,7
	vsldoi	10,9,9,4
	vadduwm	5,5,10
	vsel	29,4,3,2
	vadduwm	4,4,28
	vadduwm	5,5,29
	.long	0x13C2FE82
	vadduwm	5,5,30
	vxor	29,6,7
	vsel	29,7,0,29
	vadduwm	1,1,5
	.long	0x13C68682
	vadduwm	30,30,29
	vadduwm	5,5,30
	lvx	28,28,7
	.long	0x7D802699
	addi	4,4,16
	vsldoi	11,10,10,4
	vadduwm	4,4,11
	vsel	29,3,2,1
	vadduwm	3,3,28
	vadduwm	4,4,29
	.long	0x13C1FE82
	vadduwm	4,4,30
	vxor	29,5,6
	vsel	29,6,7,29
	vadduwm	0,0,4
	.long	0x13C58682
	vadduwm	30,30,29
	vadduwm	4,4,30
	lvx	28,29,7
	vadduwm	3,3,12
	vsel	29,2,1,0
	vadduwm	2,2,28
	vadduwm	3,3,29
	.long	0x13C0FE82
	vadduwm	3,3,30
	vxor	29,4,5
	vsel	29,5,6,29
	vadduwm	7,7,3
	.long	0x13C48682
	vadduwm	30,30,29
	vadduwm	3,3,30
	lvx	28,30,7
	vsldoi	13,12,12,4
	vadduwm	2,2,13
	vsel	29,1,0,7
	vadduwm	1,1,28
	vadduwm	2,2,29
	.long	0x13C7FE82
	vadduwm	2,2,30
	vxor	29,3,4
	vsel	29,4,5,29
	vadduwm	6,6,2
	.long	0x13C38682
	vadduwm	30,30,29
	vadduwm	2,2,30
	lvx	28,31,7
	addi	7,7,0x80
	vsldoi	14,13,13,4
	vadduwm	1,1,14
	vsel	29,0,7,6
	vadduwm	0,0,28
	vadduwm	1,1,29
	.long	0x13C6FE82
	vadduwm	1,1,30
	vxor	29,2,3
	vsel	29,3,4,29
	vadduwm	5,5,1
	.long	0x13C28682
	vadduwm	30,30,29
	vadduwm	1,1,30
	lvx	28,0,7
	.long	0x7E002699
	addi	4,4,16
	vsldoi	15,14,14,4
	vadduwm	0,0,15
	vsel	29,7,6,5
	vadduwm	7,7,28
	vadduwm	0,0,29
	.long	0x13C5FE82
	vadduwm	0,0,30
	vxor	29,1,2
	vsel	29,2,3,29
	vadduwm	4,4,0
	.long	0x13C18682
	vadduwm	30,30,29
	vadduwm	0,0,30
	lvx	28,10,7
	vadduwm	7,7,16
	vsel	29,6,5,4
	vadduwm	6,6,28
	vadduwm	7,7,29
	.long	0x13C4FE82
	vadduwm	7,7,30
	vxor	29,0,1
	vsel	29,1,2,29
	vadduwm	3,3,7
	.long	0x13C08682
	vadduwm	30,30,29
	vadduwm	7,7,30
	lvx	28,26,7
	vsldoi	17,16,16,4
	vadduwm	6,6,17
	vsel	29,5,4,3
	vadduwm	5,5,28
	vadduwm	6,6,29
	.long	0x13C3FE82
	vadduwm	6,6,30
	vxor	29,7,0
	vsel	29,0,1,29
	vadduwm	2,2,6
	.long	0x13C78682
	vadduwm	30,30,29
	vadduwm	6,6,30
	lvx	28,27,7
	vsldoi	18,17,17,4
	vadduwm	5,5,18
	vsel	29,4,3,2
	vadduwm	4,4,28
	vadduwm	5,5,29
	.long	0x13C2FE82
	vadduwm	5,5,30
	vxor	29,6,7
	vsel	29,7,0,29
	vadduwm	1,1,5
	.long	0x13C68682
	vadduwm	30,30,29
	vadduwm	5,5,30
	lvx	28,28,7
	.long	0x7F002699
	addi	4,4,16
	vsldoi	19,18,18,4
	vadduwm	4,4,19
	vsel	29,3,2,1
	vadduwm	3,3,28
	vadduwm	4,4,29
	.long	0x13C1FE82
	vadduwm	4,4,30
	vxor	29,5,6
	vsel	29,6,7,29
	vadduwm	0,0,4
	.long	0x13C58682
	vadduwm	30,30,29
	vadduwm	4,4,30
	lvx	28,29,7
	vadduwm	3,3,24
	vsel	29,2,1,0
	vadduwm	2,2,28
	vadduwm	3,3,29
	.long	0x13C0FE82
	vadduwm	3,3,30
	vxor	29,4,5
	vsel	29,5,6,29
	vadduwm	7,7,3
	.long	0x13C48682
	vadduwm	30,30,29
	vadduwm	3,3,30
	lvx	28,30,7
	vsldoi	25,24,24,4
	vadduwm	2,2,25
	vsel	29,1,0,7
	vadduwm	1,1,28
	vadduwm	2,2,29
	.long	0x13C7FE82
	vadduwm	2,2,30
	vxor	29,3,4
	vsel	29,4,5,29
	vadduwm	6,6,2
	.long	0x13C38682
	vadduwm	30,30,29
	vadduwm	2,2,30
	lvx	28,31,7
	addi	7,7,0x80
	vsldoi	26,25,25,4
	vadduwm	1,1,26
	vsel	29,0,7,6
	vadduwm	0,0,28
	vadduwm	1,1,29
	.long	0x13C6FE82
	vadduwm	1,1,30
	vxor	29,2,3
	vsel	29,3,4,29
	vadduwm	5,5,1
	.long	0x13C28682
	vadduwm	30,30,29
	vadduwm	1,1,30
	lvx	28,0,7
	vsldoi	27,26,26,4
	.long	0x13C90682
	vadduwm	8,8,30
	.long	0x13DA7E82
	vadduwm	8,8,30
	vadduwm	8,8,17
	vadduwm	0,0,27
	vsel	29,7,6,5
	vadduwm	7,7,28
	vadduwm	0,0,29
	.long	0x13C5FE82
	vadduwm	0,0,30
	vxor	29,1,2
	vsel	29,2,3,29
	vadduwm	4,4,0
	.long	0x13C18682
	vadduwm	30,30,29
	vadduwm	0,0,30
	lvx	28,10,7
	mtctr	0
	b	.L16_xx
.align	5
.L16_xx:
	.long	0x13CA0682
	vadduwm	9,9,30
	.long	0x13DB7E82
	vadduwm	9,9,30
	vadduwm	9,9,18
	vadduwm	7,7,8
	vsel	29,6,5,4
	vadduwm	6,6,28
	vadduwm	7,7,29
	.long	0x13C4FE82
	vadduwm	7,7,30
	vxor	29,0,1
	vsel	29,1,2,29
	vadduwm	3,3,7
	.long	0x13C08682
	vadduwm	30,30,29
	vadduwm	7,7,30
	lvx	28,26,7
	.long	0x13CB0682
	vadduwm	10,10,30
	.long	0x13C87E82
	vadduwm	10,10,30
	vadduwm	10,10,19
	vadduwm	6,6,9
	vsel	29,5,4,3
	vadduwm	5,5,28
	vadduwm	6,6,29
	.long	0x13C3FE82
	vadduwm	6,6,30
	vxor	29,7,0
	vsel	29,0,1,29
	vadduwm	2,2,6
	.long	0x13C78682
	vadduwm	30,30,29
	vadduwm	6,6,30
	lvx	28,27,7
	.long	0x13CC0682
	vadduwm	11,11,30
	.long	0x13C97E82
	vadduwm	11,11,30
	vadduwm	11,11,24
	vadduwm	5,5,10
	vsel	29,4,3,2
	vadduwm	4,4,28
	vadduwm	5,5,29
	.long	0x13C2FE82
	vadduwm	5,5,30
	vxor	29,6,7
	vsel	29,7,0,29
	vadduwm	1,1,5
	.long	0x13C68682
	vadduwm	30,30,29
	vadduwm	5,5,30
	lvx	28,28,7
	.long	0x13CD0682
	vadduwm	12,12,30
	.long	0x13CA7E82
	vadduwm	12,12,30
	vadduwm	12,12,25
	vadduwm	4,4,11
	vsel	29,3,2,1
	vadduwm	3,3,28
	vadduwm	4,4,29
	.long	0x13C1FE82
	vadduwm	4,4,30
	vxor	29,5,6
	vsel	29,6,7,29
	vadduwm	0,0,4
	.long	0x13C58682
	vadduwm	30,30,29
	vadduwm	4,4,30
	lvx	28,29,7
	.long	0x13CE0682
	vadduwm	13,13,30
	.long	0x13CB7E82
	vadduwm	13,13,30
	vadduwm	13,13,26
	vadduwm	3,3,12
	vsel	29,2,1,0
	vadduwm	2,2,28
	vadduwm	3,3,29
	.long	0x13C0FE82
	vadduwm	3,3,30
	vxor	29,4,5
	vsel	29,5,6,29
	vadduwm	7,7,3
	.long	0x13C48682
	vadduwm	30,30,29
	vadduwm	3,3,30
	lvx	28,30,7
	.long	0x13CF0682
	vadduwm	14,14,30
	.long	0x13CC7E82
	vadduwm	14,14,30
	vadduwm	14,14,27
	vadduwm	2,2,13
	vsel	29,1,0,7
	vadduwm	1,1,28
	vadduwm	2,2,29
	.long	0x13C7FE82
	vadduwm	2,2,30
	vxor	29,3,4
	vsel	29,4,5,29
	vadduwm	6,6,2
	.long	0x13C38682
	vadduwm	30,30,29
	vadduwm	2,2,30
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x13D00682
	vadduwm	15,15,30
	.long	0x13CD7E82
	vadduwm	15,15,30
	vadduwm	15,15,8
	vadduwm	1,1,14
	vsel	29,0,7,6
	vadduwm	0,0,28
	vadduwm	1,1,29
	.long	0x13C6FE82
	vadduwm	1,1,30
	vxor	29,2,3
	vsel	29,3,4,29
	vadduwm	5,5,1
	.long	0x13C28682
	vadduwm	30,30,29
	vadduwm	1,1,30
	lvx	28,0,7
	.long	0x13D10682
	vadduwm	16,16,30
	.long	0x13CE7E82
	vadduwm	16,16,30
	vadduwm	16,16,9
	vadduwm	0,0,15
	vsel	29,7,6,5
	vadduwm	7,7,28
	vadduwm	0,0,29
	.long	0x13C5FE82
	vadduwm	0,0,30
	vxor	29,1,2
	vsel	29,2,3,29
	vadduwm	4,4,0
	.long	0x13C18682
	vadduwm	30,30,29
	vadduwm	0,0,30
	lvx	28,10,7
	.long	0x13D20682
	vadduwm	17,17,30
	.long	0x13CF7E82
	vadduwm	17,17,30
	vadduwm	17,17,10
	vadduwm	7,7,16
	vsel	29,6,5,4
	vadduwm	6,6,28
	vadduwm	7,7,29
	.long	0x13C4FE82
	vadduwm	7,7,30
	vxor	29,0,1
	vsel	29,1,2,29
	vadduwm	3,3,7
	.long	0x13C08682
	vadduwm	30,30,29
	vadduwm	7,7,30
	lvx	28,26,7
	.long	0x13D30682
	vadduwm	18,18,30
	.long	0x13D07E82
	vadduwm	18,18,30
	vadduwm	18,18,11
	vadduwm	6,6,17
	vsel	29,5,4,3
	vadduwm	5,5,28
	vadduwm	6,6,29
	.long	0x13C3FE82
	vadduwm	6,6,30
	vxor	29,7,0
	vsel	29,0,1,29
	vadduwm	2,2,6
	.long	0x13C78682
	vadduwm	30,30,29
	vadduwm	6,6,30
	lvx	28,27,7
	.long	0x13D80682
	vadduwm	19,19,30
	.long	0x13D17E82
	vadduwm	19,19,30
	vadduwm	19,19,12
	vadduwm	5,5,18
	vsel	29,4,3,2
	vadduwm	4,4,28
	vadduwm	5,5,29
	.long	0x13C2FE82
	vadduwm	5,5,30
	vxor	29,6,7
	vsel	29,7,0,29
	vadduwm	1,1,5
	.long	0x13C68682
	vadduwm	30,30,29
	vadduwm	5,5,30
	lvx	28,28,7
	.long	0x13D90682
	vadduwm	24,24,30
	.long	0x13D27E82
	vadduwm	24,24,30
	vadduwm	24,24,13
	vadduwm	4,4,19
	vsel	29,3,2,1
	vadduwm	3,3,28
	vadduwm	4,4,29
	.long	0x13C1FE82
	vadduwm	4,4,30
	vxor	29,5,6
	vsel	29,6,7,29
	vadduwm	0,0,4
	.long	0x13C58682
	vadduwm	30,30,29
	vadduwm	4,4,30
	lvx	28,29,7
	.long	0x13DA0682
	vadduwm	25,25,30
	.long	0x13D37E82
	vadduwm	25,25,30
	vadduwm	25,25,14
	vadduwm	3,3,24
	vsel	29,2,1,0
	vadduwm	2,2,28
	vadduwm	3,3,29
	.long	0x13C0FE82
	vadduwm	3,3,30
	vxor	29,4,5
	vsel	29,5,6,29
	vadduwm	7,7,3
	.long	0x13C48682
	vadduwm	30,30,29
	vadduwm	3,3,30
	lvx	28,30,7
	.long	0x13DB0682
	vadduwm	26,26,30
	.long	0x13D87E82
	vadduwm	26,26,30
	vadduwm	26,26,15
	vadduwm	2,2,25
	vsel	29,1,0,7
	vadduwm	1,1,28
	vadduwm	2,2,29
	.long	0x13C7FE82
	vadduwm	2,2,30
	vxor	29,3,4
	vsel	29,4,5,29
	vadduwm	6,6,2
	.long	0x13C38682
	vadduwm	30,30,29
	vadduwm	2,2,30
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x13C80682
	vadduwm	27,27,30
	.long	0x13D97E82
	vadduwm	27,27,30
	vadduwm	27,27,16
	vadduwm	1,1,26
	vsel	29,0,7,6
	vadduwm	0,0,28
	vadduwm	1,1,29
	.long	0x13C6FE82
	vadduwm	1,1,30
	vxor	29,2,3
	vsel	29,3,4,29
	vadduwm	5,5,1
	.long	0x13C28682
	vadduwm	30,30,29
	vadduwm	1,1,30
	lvx	28,0,7
	.long	0x13C90682
	vadduwm	8,8,30
	.long	0x13DA7E82
	vadduwm	8,8,30
	vadduwm	8,8,17
	vadduwm	0,0,27
	vsel	29,7,6,5
	vadduwm	7,7,28
	vadduwm	0,0,29
	.long	0x13C5FE82
	vadduwm	0,0,30
	vxor	29,1,2
	vsel	29,2,3,29
	vadduwm	4,4,0
	.long	0x13C18682
	vadduwm	30,30,29
	vadduwm	0,0,30
	lvx	28,10,7
	bdnz	.L16_xx

	lvx	10,0,11
	subic.	5,5,1
	lvx	11,10,11
	vadduwm	0,0,10
	lvx	12,26,11
	vadduwm	1,1,11
	lvx	13,27,11
	vadduwm	2,2,12
	lvx	14,28,11
	vadduwm	3,3,13
	lvx	15,29,11
	vadduwm	4,4,14
	lvx	16,30,11
	vadduwm	5,5,15
	lvx	17,31,11
	vadduwm	6,6,16
	vadduwm	7,7,17
	bne	.Loop
	lvx	8,26,7
	vperm	0,0,1,28
	lvx	9,27,7
	vperm	4,4,5,28
	vperm	0,0,2,8
	vperm	4,4,6,8
	vperm	0,0,3,9
	vperm	4,4,7,9
	.long	0x7C001F19
	.long	0x7C8A1F19
	addi	11,1,207
	mtlr	8
	mtspr	256,12
	lvx	24,0,11
	lvx	25,10,11
	lvx	26,26,11
	lvx	27,27,11
	lvx	28,28,11
	lvx	29,29,11
	lvx	30,30,11
	lvx	31,31,11
	ld	26,336(1)
	ld	27,344(1)
	ld	28,352(1)
	ld	29,360(1)
	ld	30,368(1)
	ld	31,376(1)
	addi	1,1,384
	blr	
.long	0
.byte	0,12,4,1,0x80,6,3,0
.long	0
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.size	.zfs_sha256_power8,.-.zfs_sha256_power8
.size	zfs_sha256_power8,.-.zfs_sha256_power8
#else
.size	zfs_sha256_power8,.-zfs_sha256_power8
#endif
.align	6
.LPICmeup:
	mflr	0
	bcl	20,31,$+4
	mflr	6
	addi	6,6,56
	mtlr	0
	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0
.space	28
.long	0x428a2f98,0x428a2f98,0x428a2f98,0x428a2f98
.long	0x71374491,0x71374491,0x71374491,0x71374491
.long	0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf
.long	0xe9b5dba5,0xe9b5dba5,0xe9b5dba5,0xe9b5dba5
.long	0x3956c25b,0x3956c25b,0x3956c25b,0x3956c25b
.long	0x59f111f1,0x59f111f1,0x59f111f1,0x59f111f1
.long	0x923f82a4,0x923f82a4,0x923f82a4,0x923f82a4
.long	0xab1c5ed5,0xab1c5ed5,0xab1c5ed5,0xab1c5ed5
.long	0xd807aa98,0xd807aa98,0xd807aa98,0xd807aa98
.long	0x12835b01,0x12835b01,0x12835b01,0x12835b01
.long	0x243185be,0x243185be,0x243185be,0x243185be
.long	0x550c7dc3,0x550c7dc3,0x550c7dc3,0x550c7dc3
.long	0x72be5d74,0x72be5d74,0x72be5d74,0x72be5d74
.long	0x80deb1fe,0x80deb1fe,0x80deb1fe,0x80deb1fe
.long	0x9bdc06a7,0x9bdc06a7,0x9bdc06a7,0x9bdc06a7
.long	0xc19bf174,0xc19bf174,0xc19bf174,0xc19bf174
.long	0xe49b69c1,0xe49b69c1,0xe49b69c1,0xe49b69c1
.long	0xefbe4786,0xefbe4786,0xefbe4786,0xefbe4786
.long	0x0fc19dc6,0x0fc19dc6,0x0fc19dc6,0x0fc19dc6
.long	0x240ca1cc,0x240ca1cc,0x240ca1cc,0x240ca1cc
.long	0x2de92c6f,0x2de92c6f,0x2de92c6f,0x2de92c6f
.long	0x4a7484aa,0x4a7484aa,0x4a7484aa,0x4a7484aa
.long	0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc
.long	0x76f988da,0x76f988da,0x76f988da,0x76f988da
.long	0x983e5152,0x983e5152,0x983e5152,0x983e5152
.long	0xa831c66d,0xa831c66d,0xa831c66d,0xa831c66d
.long	0xb00327c8,0xb00327c8,0xb00327c8,0xb00327c8
.long	0xbf597fc7,0xbf597fc7,0xbf597fc7,0xbf597fc7
.long	0xc6e00bf3,0xc6e00bf3,0xc6e00bf3,0xc6e00bf3
.long	0xd5a79147,0xd5a79147,0xd5a79147,0xd5a79147
.long	0x06ca6351,0x06ca6351,0x06ca6351,0x06ca6351
.long	0x14292967,0x14292967,0x14292967,0x14292967
.long	0x27b70a85,0x27b70a85,0x27b70a85,0x27b70a85
.long	0x2e1b2138,0x2e1b2138,0x2e1b2138,0x2e1b2138
.long	0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc
.long	0x53380d13,0x53380d13,0x53380d13,0x53380d13
.long	0x650a7354,0x650a7354,0x650a7354,0x650a7354
.long	0x766a0abb,0x766a0abb,0x766a0abb,0x766a0abb
.long	0x81c2c92e,0x81c2c92e,0x81c2c92e,0x81c2c92e
.long	0x92722c85,0x92722c85,0x92722c85,0x92722c85
.long	0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1
.long	0xa81a664b,0xa81a664b,0xa81a664b,0xa81a664b
.long	0xc24b8b70,0xc24b8b70,0xc24b8b70,0xc24b8b70
.long	0xc76c51a3,0xc76c51a3,0xc76c51a3,0xc76c51a3
.long	0xd192e819,0xd192e819,0xd192e819,0xd192e819
.long	0xd6990624,0xd6990624,0xd6990624,0xd6990624
.long	0xf40e3585,0xf40e3585,0xf40e3585,0xf40e3585
.long	0x106aa070,0x106aa070,0x106aa070,0x106aa070
.long	0x19a4c116,0x19a4c116,0x19a4c116,0x19a4c116
.long	0x1e376c08,0x1e376c08,0x1e376c08,0x1e376c08
.long	0x2748774c,0x2748774c,0x2748774c,0x2748774c
.long	0x34b0bcb5,0x34b0bcb5,0x34b0bcb5,0x34b0bcb5
.long	0x391c0cb3,0x391c0cb3,0x391c0cb3,0x391c0cb3
.long	0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a
.long	0x5b9cca4f,0x5b9cca4f,0x5b9cca4f,0x5b9cca4f
.long	0x682e6ff3,0x682e6ff3,0x682e6ff3,0x682e6ff3
.long	0x748f82ee,0x748f82ee,0x748f82ee,0x748f82ee
.long	0x78a5636f,0x78a5636f,0x78a5636f,0x78a5636f
.long	0x84c87814,0x84c87814,0x84c87814,0x84c87814
.long	0x8cc70208,0x8cc70208,0x8cc70208,0x8cc70208
.long	0x90befffa,0x90befffa,0x90befffa,0x90befffa
.long	0xa4506ceb,0xa4506ceb,0xa4506ceb,0xa4506ceb
.long	0xbef9a3f7,0xbef9a3f7,0xbef9a3f7,0xbef9a3f7
.long	0xc67178f2,0xc67178f2,0xc67178f2,0xc67178f2
.long	0,0,0,0
.long	0x00010203,0x10111213,0x10111213,0x10111213
.long	0x00010203,0x04050607,0x10111213,0x10111213
.long	0x00010203,0x04050607,0x08090a0b,0x10111213

#elif (defined(__PPC64__) && defined(__LITTLE_ENDIAN__))

.abiversion	2
.text

.globl	zfs_sha256_power8
.type	zfs_sha256_power8,@function
.align	6
zfs_sha256_power8:
.localentry	zfs_sha256_power8,0

	stdu	1,-384(1)
	mflr	8
	li	10,207
	li	11,223
	stvx	24,10,1
	addi	10,10,32
	li	12,-1
	stvx	25,11,1
	addi	11,11,32
	stvx	26,10,1
	addi	10,10,32
	stvx	27,11,1
	addi	11,11,32
	stvx	28,10,1
	addi	10,10,32
	stvx	29,11,1
	addi	11,11,32
	stvx	30,10,1
	stvx	31,11,1
	li	11,-4096+255
	stw	12,332(1)
	li	10,0x10
	std	26,336(1)
	li	26,0x20
	std	27,344(1)
	li	27,0x30
	std	28,352(1)
	li	28,0x40
	std	29,360(1)
	li	29,0x50
	std	30,368(1)
	li	30,0x60
	std	31,376(1)
	li	31,0x70
	std	8,400(1)
	or	11,11,11

	bl	.LPICmeup
	addi	11,1,79
	li	7,8
	lvsl	31,0,7
	vspltisb	28,0x0f
	vxor	31,31,28
	.long	0x7C001E19
	.long	0x7C8A1E19
	vsldoi	1,0,0,4
	vsldoi	2,0,0,8
	vsldoi	3,0,0,12
	vsldoi	5,4,4,4
	vsldoi	6,4,4,8
	vsldoi	7,4,4,12
	li	0,3
	b	.Loop
.align	5
.Loop:
	lvx	28,0,6
	.long	0x7D002699
	addi	4,4,16
	mr	7,6
	stvx	0,0,11
	stvx	1,10,11
	stvx	2,26,11
	stvx	3,27,11
	stvx	4,28,11
	stvx	5,29,11
	stvx	6,30,11
	stvx	7,31,11
	vadduwm	7,7,28
	lvx	28,10,6
	vperm	8,8,8,31
	vadduwm	7,7,8
	vsel	29,6,5,4
	vadduwm	6,6,28
	vadduwm	7,7,29
	.long	0x13C4FE82
	vadduwm	7,7,30
	vxor	29,0,1
	vsel	29,1,2,29
	vadduwm	3,3,7
	.long	0x13C08682
	vadduwm	30,30,29
	vadduwm	7,7,30
	lvx	28,26,7
	vsldoi	9,8,8,4
	vadduwm	6,6,9
	vsel	29,5,4,3
	vadduwm	5,5,28
	vadduwm	6,6,29
	.long	0x13C3FE82
	vadduwm	6,6,30
	vxor	29,7,0
	vsel	29,0,1,29
	vadduwm	2,2,6
	.long	0x13C78682
	vadduwm	30,30,29
	vadduwm	6,6,30
	lvx	28,27,7
	vsldoi	10,9,9,4
	vadduwm	5,5,10
	vsel	29,4,3,2
	vadduwm	4,4,28
	vadduwm	5,5,29
	.long	0x13C2FE82
	vadduwm	5,5,30
	vxor	29,6,7
	vsel	29,7,0,29
	vadduwm	1,1,5
	.long	0x13C68682
	vadduwm	30,30,29
	vadduwm	5,5,30
	lvx	28,28,7
	.long	0x7D802699
	addi	4,4,16
	vsldoi	11,10,10,4
	vadduwm	4,4,11
	vsel	29,3,2,1
	vadduwm	3,3,28
	vadduwm	4,4,29
	.long	0x13C1FE82
	vadduwm	4,4,30
	vxor	29,5,6
	vsel	29,6,7,29
	vadduwm	0,0,4
	.long	0x13C58682
	vadduwm	30,30,29
	vadduwm	4,4,30
	lvx	28,29,7
	vperm	12,12,12,31
	vadduwm	3,3,12
	vsel	29,2,1,0
	vadduwm	2,2,28
	vadduwm	3,3,29
	.long	0x13C0FE82
	vadduwm	3,3,30
	vxor	29,4,5
	vsel	29,5,6,29
	vadduwm	7,7,3
	.long	0x13C48682
	vadduwm	30,30,29
	vadduwm	3,3,30
	lvx	28,30,7
	vsldoi	13,12,12,4
	vadduwm	2,2,13
	vsel	29,1,0,7
	vadduwm	1,1,28
	vadduwm	2,2,29
	.long	0x13C7FE82
	vadduwm	2,2,30
	vxor	29,3,4
	vsel	29,4,5,29
	vadduwm	6,6,2
	.long	0x13C38682
	vadduwm	30,30,29
	vadduwm	2,2,30
	lvx	28,31,7
	addi	7,7,0x80
	vsldoi	14,13,13,4
	vadduwm	1,1,14
	vsel	29,0,7,6
	vadduwm	0,0,28
	vadduwm	1,1,29
	.long	0x13C6FE82
	vadduwm	1,1,30
	vxor	29,2,3
	vsel	29,3,4,29
	vadduwm	5,5,1
	.long	0x13C28682
	vadduwm	30,30,29
	vadduwm	1,1,30
	lvx	28,0,7
	.long	0x7E002699
	addi	4,4,16
	vsldoi	15,14,14,4
	vadduwm	0,0,15
	vsel	29,7,6,5
	vadduwm	7,7,28
	vadduwm	0,0,29
	.long	0x13C5FE82
	vadduwm	0,0,30
	vxor	29,1,2
	vsel	29,2,3,29
	vadduwm	4,4,0
	.long	0x13C18682
	vadduwm	30,30,29
	vadduwm	0,0,30
	lvx	28,10,7
	vperm	16,16,16,31
	vadduwm	7,7,16
	vsel	29,6,5,4
	vadduwm	6,6,28
	vadduwm	7,7,29
	.long	0x13C4FE82
	vadduwm	7,7,30
	vxor	29,0,1
	vsel	29,1,2,29
	vadduwm	3,3,7
	.long	0x13C08682
	vadduwm	30,30,29
	vadduwm	7,7,30
	lvx	28,26,7
	vsldoi	17,16,16,4
	vadduwm	6,6,17
	vsel	29,5,4,3
	vadduwm	5,5,28
	vadduwm	6,6,29
	.long	0x13C3FE82
	vadduwm	6,6,30
	vxor	29,7,0
	vsel	29,0,1,29
	vadduwm	2,2,6
	.long	0x13C78682
	vadduwm	30,30,29
	vadduwm	6,6,30
	lvx	28,27,7
	vsldoi	18,17,17,4
	vadduwm	5,5,18
	vsel	29,4,3,2
	vadduwm	4,4,28
	vadduwm	5,5,29
	.long	0x13C2FE82
	vadduwm	5,5,30
	vxor	29,6,7
	vsel	29,7,0,29
	vadduwm	1,1,5
	.long	0x13C68682
	vadduwm	30,30,29
	vadduwm	5,5,30
	lvx	28,28,7
	.long	0x7F002699
	addi	4,4,16
	vsldoi	19,18,18,4
	vadduwm	4,4,19
	vsel	29,3,2,1
	vadduwm	3,3,28
	vadduwm	4,4,29
	.long	0x13C1FE82
	vadduwm	4,4,30
	vxor	29,5,6
	vsel	29,6,7,29
	vadduwm	0,0,4
	.long	0x13C58682
	vadduwm	30,30,29
	vadduwm	4,4,30
	lvx	28,29,7
	vperm	24,24,24,31
	vadduwm	3,3,24
	vsel	29,2,1,0
	vadduwm	2,2,28
	vadduwm	3,3,29
	.long	0x13C0FE82
	vadduwm	3,3,30
	vxor	29,4,5
	vsel	29,5,6,29
	vadduwm	7,7,3
	.long	0x13C48682
	vadduwm	30,30,29
	vadduwm	3,3,30
	lvx	28,30,7
	vsldoi	25,24,24,4
	vadduwm	2,2,25
	vsel	29,1,0,7
	vadduwm	1,1,28
	vadduwm	2,2,29
	.long	0x13C7FE82
	vadduwm	2,2,30
	vxor	29,3,4
	vsel	29,4,5,29
	vadduwm	6,6,2
	.long	0x13C38682
	vadduwm	30,30,29
	vadduwm	2,2,30
	lvx	28,31,7
	addi	7,7,0x80
	vsldoi	26,25,25,4
	vadduwm	1,1,26
	vsel	29,0,7,6
	vadduwm	0,0,28
	vadduwm	1,1,29
	.long	0x13C6FE82
	vadduwm	1,1,30
	vxor	29,2,3
	vsel	29,3,4,29
	vadduwm	5,5,1
	.long	0x13C28682
	vadduwm	30,30,29
	vadduwm	1,1,30
	lvx	28,0,7
	vsldoi	27,26,26,4
	.long	0x13C90682
	vadduwm	8,8,30
	.long	0x13DA7E82
	vadduwm	8,8,30
	vadduwm	8,8,17
	vadduwm	0,0,27
	vsel	29,7,6,5
	vadduwm	7,7,28
	vadduwm	0,0,29
	.long	0x13C5FE82
	vadduwm	0,0,30
	vxor	29,1,2
	vsel	29,2,3,29
	vadduwm	4,4,0
	.long	0x13C18682
	vadduwm	30,30,29
	vadduwm	0,0,30
	lvx	28,10,7
	mtctr	0
	b	.L16_xx
.align	5
.L16_xx:
	.long	0x13CA0682
	vadduwm	9,9,30
	.long	0x13DB7E82
	vadduwm	9,9,30
	vadduwm	9,9,18
	vadduwm	7,7,8
	vsel	29,6,5,4
	vadduwm	6,6,28
	vadduwm	7,7,29
	.long	0x13C4FE82
	vadduwm	7,7,30
	vxor	29,0,1
	vsel	29,1,2,29
	vadduwm	3,3,7
	.long	0x13C08682
	vadduwm	30,30,29
	vadduwm	7,7,30
	lvx	28,26,7
	.long	0x13CB0682
	vadduwm	10,10,30
	.long	0x13C87E82
	vadduwm	10,10,30
	vadduwm	10,10,19
	vadduwm	6,6,9
	vsel	29,5,4,3
	vadduwm	5,5,28
	vadduwm	6,6,29
	.long	0x13C3FE82
	vadduwm	6,6,30
	vxor	29,7,0
	vsel	29,0,1,29
	vadduwm	2,2,6
	.long	0x13C78682
	vadduwm	30,30,29
	vadduwm	6,6,30
	lvx	28,27,7
	.long	0x13CC0682
	vadduwm	11,11,30
	.long	0x13C97E82
	vadduwm	11,11,30
	vadduwm	11,11,24
	vadduwm	5,5,10
	vsel	29,4,3,2
	vadduwm	4,4,28
	vadduwm	5,5,29
	.long	0x13C2FE82
	vadduwm	5,5,30
	vxor	29,6,7
	vsel	29,7,0,29
	vadduwm	1,1,5
	.long	0x13C68682
	vadduwm	30,30,29
	vadduwm	5,5,30
	lvx	28,28,7
	.long	0x13CD0682
	vadduwm	12,12,30
	.long	0x13CA7E82
	vadduwm	12,12,30
	vadduwm	12,12,25
	vadduwm	4,4,11
	vsel	29,3,2,1
	vadduwm	3,3,28
	vadduwm	4,4,29
	.long	0x13C1FE82
	vadduwm	4,4,30
	vxor	29,5,6
	vsel	29,6,7,29
	vadduwm	0,0,4
	.long	0x13C58682
	vadduwm	30,30,29
	vadduwm	4,4,30
	lvx	28,29,7
	.long	0x13CE0682
	vadduwm	13,13,30
	.long	0x13CB7E82
	vadduwm	13,13,30
	vadduwm	13,13,26
	vadduwm	3,3,12
	vsel	29,2,1,0
	vadduwm	2,2,28
	vadduwm	3,3,29
	.long	0x13C0FE82
	vadduwm	3,3,30
	vxor	29,4,5
	vsel	29,5,6,29
	vadduwm	7,7,3
	.long	0x13C48682
	vadduwm	30,30,29
	vadduwm	3,3,30
	lvx	28,30,7
	.long	0x13CF0682
	vadduwm	14,14,30
	.long	0x13CC7E82
	vadduwm	14,14,30
	vadduwm	14,14,27
	vadduwm	2,2,13
	vsel	29,1,0,7
	vadduwm	1,1,28
	vadduwm	2,2,29
	.long	0x13C7FE82
	vadduwm	2,2,30
	vxor	29,3,4
	vsel	29,4,5,29
	vadduwm	6,6,2
	.long	0x13C38682
	vadduwm	30,30,29
	vadduwm	2,2,30
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x13D00682
	vadduwm	15,15,30
	.long	0x13CD7E82
	vadduwm	15,15,30
	vadduwm	15,15,8
	vadduwm	1,1,14
	vsel	29,0,7,6
	vadduwm	0,0,28
	vadduwm	1,1,29
	.long	0x13C6FE82
	vadduwm	1,1,30
	vxor	29,2,3
	vsel	29,3,4,29
	vadduwm	5,5,1
	.long	0x13C28682
	vadduwm	30,30,29
	vadduwm	1,1,30
	lvx	28,0,7
	.long	0x13D10682
	vadduwm	16,16,30
	.long	0x13CE7E82
	vadduwm	16,16,30
	vadduwm	16,16,9
	vadduwm	0,0,15
	vsel	29,7,6,5
	vadduwm	7,7,28
	vadduwm	0,0,29
	.long	0x13C5FE82
	vadduwm	0,0,30
	vxor	29,1,2
	vsel	29,2,3,29
	vadduwm	4,4,0
	.long	0x13C18682
	vadduwm	30,30,29
	vadduwm	0,0,30
	lvx	28,10,7
	.long	0x13D20682
	vadduwm	17,17,30
	.long	0x13CF7E82
	vadduwm	17,17,30
	vadduwm	17,17,10
	vadduwm	7,7,16
	vsel	29,6,5,4
	vadduwm	6,6,28
	vadduwm	7,7,29
	.long	0x13C4FE82
	vadduwm	7,7,30
	vxor	29,0,1
	vsel	29,1,2,29
	vadduwm	3,3,7
	.long	0x13C08682
	vadduwm	30,30,29
	vadduwm	7,7,30
	lvx	28,26,7
	.long	0x13D30682
	vadduwm	18,18,30
	.long	0x13D07E82
	vadduwm	18,18,30
	vadduwm	18,18,11
	vadduwm	6,6,17
	vsel	29,5,4,3
	vadduwm	5,5,28
	vadduwm	6,6,29
	.long	0x13C3FE82
	vadduwm	6,6,30
	vxor	29,7,0
	vsel	29,0,1,29
	vadduwm	2,2,6
	.long	0x13C78682
	vadduwm	30,30,29
	vadduwm	6,6,30
	lvx	28,27,7
	.long	0x13D80682
	vadduwm	19,19,30
	.long	0x13D17E82
	vadduwm	19,19,30
	vadduwm	19,19,12
	vadduwm	5,5,18
	vsel	29,4,3,2
	vadduwm	4,4,28
	vadduwm	5,5,29
	.long	0x13C2FE82
	vadduwm	5,5,30
	vxor	29,6,7
	vsel	29,7,0,29
	vadduwm	1,1,5
	.long	0x13C68682
	vadduwm	30,30,29
	vadduwm	5,5,30
	lvx	28,28,7
	.long	0x13D90682
	vadduwm	24,24,30
	.long	0x13D27E82
	vadduwm	24,24,30
	vadduwm	24,24,13
	vadduwm	4,4,19
	vsel	29,3,2,1
	vadduwm	3,3,28
	vadduwm	4,4,29
	.long	0x13C1FE82
	vadduwm	4,4,30
	vxor	29,5,6
	vsel	29,6,7,29
	vadduwm	0,0,4
	.long	0x13C58682
	vadduwm	30,30,29
	vadduwm	4,4,30
	lvx	28,29,7
	.long	0x13DA0682
	vadduwm	25,25,30
	.long	0x13D37E82
	vadduwm	25,25,30
	vadduwm	25,25,14
	vadduwm	3,3,24
	vsel	29,2,1,0
	vadduwm	2,2,28
	vadduwm	3,3,29
	.long	0x13C0FE82
	vadduwm	3,3,30
	vxor	29,4,5
	vsel	29,5,6,29
	vadduwm	7,7,3
	.long	0x13C48682
	vadduwm	30,30,29
	vadduwm	3,3,30
	lvx	28,30,7
	.long	0x13DB0682
	vadduwm	26,26,30
	.long	0x13D87E82
	vadduwm	26,26,30
	vadduwm	26,26,15
	vadduwm	2,2,25
	vsel	29,1,0,7
	vadduwm	1,1,28
	vadduwm	2,2,29
	.long	0x13C7FE82
	vadduwm	2,2,30
	vxor	29,3,4
	vsel	29,4,5,29
	vadduwm	6,6,2
	.long	0x13C38682
	vadduwm	30,30,29
	vadduwm	2,2,30
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x13C80682
	vadduwm	27,27,30
	.long	0x13D97E82
	vadduwm	27,27,30
	vadduwm	27,27,16
	vadduwm	1,1,26
	vsel	29,0,7,6
	vadduwm	0,0,28
	vadduwm	1,1,29
	.long	0x13C6FE82
	vadduwm	1,1,30
	vxor	29,2,3
	vsel	29,3,4,29
	vadduwm	5,5,1
	.long	0x13C28682
	vadduwm	30,30,29
	vadduwm	1,1,30
	lvx	28,0,7
	.long	0x13C90682
	vadduwm	8,8,30
	.long	0x13DA7E82
	vadduwm	8,8,30
	vadduwm	8,8,17
	vadduwm	0,0,27
	vsel	29,7,6,5
	vadduwm	7,7,28
	vadduwm	0,0,29
	.long	0x13C5FE82
	vadduwm	0,0,30
	vxor	29,1,2
	vsel	29,2,3,29
	vadduwm	4,4,0
	.long	0x13C18682
	vadduwm	30,30,29
	vadduwm	0,0,30
	lvx	28,10,7
	bdnz	.L16_xx

	lvx	10,0,11
	subic.	5,5,1
	lvx	11,10,11
	vadduwm	0,0,10
	lvx	12,26,11
	vadduwm	1,1,11
	lvx	13,27,11
	vadduwm	2,2,12
	lvx	14,28,11
	vadduwm	3,3,13
	lvx	15,29,11
	vadduwm	4,4,14
	lvx	16,30,11
	vadduwm	5,5,15
	lvx	17,31,11
	vadduwm	6,6,16
	vadduwm	7,7,17
	bne	.Loop
	lvx	8,26,7
	vperm	0,0,1,28
	lvx	9,27,7
	vperm	4,4,5,28
	vperm	0,0,2,8
	vperm	4,4,6,8
	vperm	0,0,3,9
	vperm	4,4,7,9
	.long	0x7C001F19
	.long	0x7C8A1F19
	addi	11,1,207
	mtlr	8
	or	12,12,12
	lvx	24,0,11
	lvx	25,10,11
	lvx	26,26,11
	lvx	27,27,11
	lvx	28,28,11
	lvx	29,29,11
	lvx	30,30,11
	lvx	31,31,11
	ld	26,336(1)
	ld	27,344(1)
	ld	28,352(1)
	ld	29,360(1)
	ld	30,368(1)
	ld	31,376(1)
	addi	1,1,384
	blr	
.long	0
.byte	0,12,4,1,0x80,6,3,0
.long	0
.size	zfs_sha256_power8,.-zfs_sha256_power8
.align	6
.LPICmeup:
	mflr	0
	bcl	20,31,$+4
	mflr	6
	addi	6,6,56
	mtlr	0
	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0
.space	28
.long	0x428a2f98,0x428a2f98,0x428a2f98,0x428a2f98
.long	0x71374491,0x71374491,0x71374491,0x71374491
.long	0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf
.long	0xe9b5dba5,0xe9b5dba5,0xe9b5dba5,0xe9b5dba5
.long	0x3956c25b,0x3956c25b,0x3956c25b,0x3956c25b
.long	0x59f111f1,0x59f111f1,0x59f111f1,0x59f111f1
.long	0x923f82a4,0x923f82a4,0x923f82a4,0x923f82a4
.long	0xab1c5ed5,0xab1c5ed5,0xab1c5ed5,0xab1c5ed5
.long	0xd807aa98,0xd807aa98,0xd807aa98,0xd807aa98
.long	0x12835b01,0x12835b01,0x12835b01,0x12835b01
.long	0x243185be,0x243185be,0x243185be,0x243185be
.long	0x550c7dc3,0x550c7dc3,0x550c7dc3,0x550c7dc3
.long	0x72be5d74,0x72be5d74,0x72be5d74,0x72be5d74
.long	0x80deb1fe,0x80deb1fe,0x80deb1fe,0x80deb1fe
.long	0x9bdc06a7,0x9bdc06a7,0x9bdc06a7,0x9bdc06a7
.long	0xc19bf174,0xc19bf174,0xc19bf174,0xc19bf174
.long	0xe49b69c1,0xe49b69c1,0xe49b69c1,0xe49b69c1
.long	0xefbe4786,0xefbe4786,0xefbe4786,0xefbe4786
.long	0x0fc19dc6,0x0fc19dc6,0x0fc19dc6,0x0fc19dc6
.long	0x240ca1cc,0x240ca1cc,0x240ca1cc,0x240ca1cc
.long	0x2de92c6f,0x2de92c6f,0x2de92c6f,0x2de92c6f
.long	0x4a7484aa,0x4a7484aa,0x4a7484aa,0x4a7484aa
.long	0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc
.long	0x76f988da,0x76f988da,0x76f988da,0x76f988da
.long	0x983e5152,0x983e5152,0x983e5152,0x983e5152
.long	0xa831c66d,0xa831c66d,0xa831c66d,0xa831c66d
.long	0xb00327c8,0xb00327c8,0xb00327c8,0xb00327c8
.long	0xbf597fc7,0xbf597fc7,0xbf597fc7,0xbf597fc7
.long	0xc6e00bf3,0xc6e00bf3,0xc6e00bf3,0xc6e00bf3
.long	0xd5a79147,0xd5a79147,0xd5a79147,0xd5a79147
.long	0x06ca6351,0x06ca6351,0x06ca6351,0x06ca6351
.long	0x14292967,0x14292967,0x14292967,0x14292967
.long	0x27b70a85,0x27b70a85,0x27b70a85,0x27b70a85
.long	0x2e1b2138,0x2e1b2138,0x2e1b2138,0x2e1b2138
.long	0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc
.long	0x53380d13,0x53380d13,0x53380d13,0x53380d13
.long	0x650a7354,0x650a7354,0x650a7354,0x650a7354
.long	0x766a0abb,0x766a0abb,0x766a0abb,0x766a0abb
.long	0x81c2c92e,0x81c2c92e,0x81c2c92e,0x81c2c92e
.long	0x92722c85,0x92722c85,0x92722c85,0x92722c85
.long	0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1
.long	0xa81a664b,0xa81a664b,0xa81a664b,0xa81a664b
.long	0xc24b8b70,0xc24b8b70,0xc24b8b70,0xc24b8b70
.long	0xc76c51a3,0xc76c51a3,0xc76c51a3,0xc76c51a3
.long	0xd192e819,0xd192e819,0xd192e819,0xd192e819
.long	0xd6990624,0xd6990624,0xd6990624,0xd6990624
.long	0xf40e3585,0xf40e3585,0xf40e3585,0xf40e3585
.long	0x106aa070,0x106aa070,0x106aa070,0x106aa070
.long	0x19a4c116,0x19a4c116,0x19a4c116,0x19a4c116
.long	0x1e376c08,0x1e376c08,0x1e376c08,0x1e376c08
.long	0x2748774c,0x2748774c,0x2748774c,0x2748774c
.long	0x34b0bcb5,0x34b0bcb5,0x34b0bcb5,0x34b0bcb5
.long	0x391c0cb3,0x391c0cb3,0x391c0cb3,0x391c0cb3
.long	0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a
.long	0x5b9cca4f,0x5b9cca4f,0x5b9cca4f,0x5b9cca4f
.long	0x682e6ff3,0x682e6ff3,0x682e6ff3,0x682e6ff3
.long	0x748f82ee,0x748f82ee,0x748f82ee,0x748f82ee
.long	0x78a5636f,0x78a5636f,0x78a5636f,0x78a5636f
.long	0x84c87814,0x84c87814,0x84c87814,0x84c87814
.long	0x8cc70208,0x8cc70208,0x8cc70208,0x8cc70208
.long	0x90befffa,0x90befffa,0x90befffa,0x90befffa
.long	0xa4506ceb,0xa4506ceb,0xa4506ceb,0xa4506ceb
.long	0xbef9a3f7,0xbef9a3f7,0xbef9a3f7,0xbef9a3f7
.long	0xc67178f2,0xc67178f2,0xc67178f2,0xc67178f2
.long	0,0,0,0
.long	0x10111213,0x10111213,0x10111213,0x00010203
.long	0x10111213,0x10111213,0x04050607,0x00010203
.long	0x10111213,0x08090a0b,0x04050607,0x00010203
#endif