2 * Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * https://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * Portions Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de>
19 * - modified assembly to fit into OpenZFS
22 #if (defined(__PPC64__) && defined(__BIG_ENDIAN__))
24 #if (!defined(_CALL_ELF) || _CALL_ELF == 1)
28 .globl .zfs_sha512_ppc
29 .type zfs_sha512_ppc,@function
33 .quad .zfs_sha512_ppc,.TOC.@tocbase,0
42 .type zfs_sha512_ppc,@function
45 .localentry zfs_sha512_ppc,0
89 bl .Lsha2_block_private
110 bl .Lsha2_block_private
135 bl .Lsha2_block_private
165 .byte 0,12,4,1,0x80,18,3,0
168 .Lsha2_block_private:
1360 bne .Lsha2_block_private
1363 .byte 0,12,0x14,0,0,0,0,0
1364 #if (!defined(_CALL_ELF) || _CALL_ELF == 1)
1365 .size .zfs_sha512_ppc,.-.zfs_sha512_ppc
1366 .size zfs_sha512_ppc,.-.zfs_sha512_ppc
1368 .size zfs_sha512_ppc,.-zfs_sha512_ppc
1379 .byte 0,12,0x14,0,0,0,0,0
1381 .long 0x428a2f98,0xd728ae22
1382 .long 0x71374491,0x23ef65cd
1383 .long 0xb5c0fbcf,0xec4d3b2f
1384 .long 0xe9b5dba5,0x8189dbbc
1385 .long 0x3956c25b,0xf348b538
1386 .long 0x59f111f1,0xb605d019
1387 .long 0x923f82a4,0xaf194f9b
1388 .long 0xab1c5ed5,0xda6d8118
1389 .long 0xd807aa98,0xa3030242
1390 .long 0x12835b01,0x45706fbe
1391 .long 0x243185be,0x4ee4b28c
1392 .long 0x550c7dc3,0xd5ffb4e2
1393 .long 0x72be5d74,0xf27b896f
1394 .long 0x80deb1fe,0x3b1696b1
1395 .long 0x9bdc06a7,0x25c71235
1396 .long 0xc19bf174,0xcf692694
1397 .long 0xe49b69c1,0x9ef14ad2
1398 .long 0xefbe4786,0x384f25e3
1399 .long 0x0fc19dc6,0x8b8cd5b5
1400 .long 0x240ca1cc,0x77ac9c65
1401 .long 0x2de92c6f,0x592b0275
1402 .long 0x4a7484aa,0x6ea6e483
1403 .long 0x5cb0a9dc,0xbd41fbd4
1404 .long 0x76f988da,0x831153b5
1405 .long 0x983e5152,0xee66dfab
1406 .long 0xa831c66d,0x2db43210
1407 .long 0xb00327c8,0x98fb213f
1408 .long 0xbf597fc7,0xbeef0ee4
1409 .long 0xc6e00bf3,0x3da88fc2
1410 .long 0xd5a79147,0x930aa725
1411 .long 0x06ca6351,0xe003826f
1412 .long 0x14292967,0x0a0e6e70
1413 .long 0x27b70a85,0x46d22ffc
1414 .long 0x2e1b2138,0x5c26c926
1415 .long 0x4d2c6dfc,0x5ac42aed
1416 .long 0x53380d13,0x9d95b3df
1417 .long 0x650a7354,0x8baf63de
1418 .long 0x766a0abb,0x3c77b2a8
1419 .long 0x81c2c92e,0x47edaee6
1420 .long 0x92722c85,0x1482353b
1421 .long 0xa2bfe8a1,0x4cf10364
1422 .long 0xa81a664b,0xbc423001
1423 .long 0xc24b8b70,0xd0f89791
1424 .long 0xc76c51a3,0x0654be30
1425 .long 0xd192e819,0xd6ef5218
1426 .long 0xd6990624,0x5565a910
1427 .long 0xf40e3585,0x5771202a
1428 .long 0x106aa070,0x32bbd1b8
1429 .long 0x19a4c116,0xb8d2d0c8
1430 .long 0x1e376c08,0x5141ab53
1431 .long 0x2748774c,0xdf8eeb99
1432 .long 0x34b0bcb5,0xe19b48a8
1433 .long 0x391c0cb3,0xc5c95a63
1434 .long 0x4ed8aa4a,0xe3418acb
1435 .long 0x5b9cca4f,0x7763e373
1436 .long 0x682e6ff3,0xd6b2b8a3
1437 .long 0x748f82ee,0x5defb2fc
1438 .long 0x78a5636f,0x43172f60
1439 .long 0x84c87814,0xa1f0ab72
1440 .long 0x8cc70208,0x1a6439ec
1441 .long 0x90befffa,0x23631e28
1442 .long 0xa4506ceb,0xde82bde9
1443 .long 0xbef9a3f7,0xb2c67915
1444 .long 0xc67178f2,0xe372532b
1445 .long 0xca273ece,0xea26619c
1446 .long 0xd186b8c7,0x21c0c207
1447 .long 0xeada7dd6,0xcde0eb1e
1448 .long 0xf57d4f7f,0xee6ed178
1449 .long 0x06f067aa,0x72176fba
1450 .long 0x0a637dc5,0xa2c898a6
1451 .long 0x113f9804,0xbef90dae
1452 .long 0x1b710b35,0x131c471b
1453 .long 0x28db77f5,0x23047d84
1454 .long 0x32caab7b,0x40c72493
1455 .long 0x3c9ebe0a,0x15c9bebc
1456 .long 0x431d67c4,0x9c100d4c
1457 .long 0x4cc5d4be,0xcb3e42b6
1458 .long 0x597f299c,0xfc657e2a
1459 .long 0x5fcb6fab,0x3ad6faec
1460 .long 0x6c44198c,0x4a475817
1462 #elif (defined(__PPC64__) && defined(__LITTLE_ENDIAN__))
1467 .globl zfs_sha512_ppc
1468 .type zfs_sha512_ppc,@function
1471 .localentry zfs_sha512_ppc,0
1515 bl .Lsha2_block_private
1530 bl .Lsha2_block_private
1555 bl .Lsha2_block_private
1585 .byte 0,12,4,1,0x80,18,3,0
1588 .Lsha2_block_private:
1597 rlwimi 16,4,24,16,23
1634 rlwimi 17,4,24,16,23
1671 rlwimi 18,4,24,16,23
1708 rlwimi 19,4,24,16,23
1745 rlwimi 20,4,24,16,23
1782 rlwimi 21,4,24,16,23
1819 rlwimi 22,4,24,16,23
1856 rlwimi 23,4,24,16,23
1893 rlwimi 24,4,24,16,23
1930 rlwimi 25,4,24,16,23
1967 rlwimi 26,4,24,16,23
2004 rlwimi 27,4,24,16,23
2041 rlwimi 28,4,24,16,23
2078 rlwimi 29,4,24,16,23
2115 rlwimi 30,4,24,16,23
2152 rlwimi 31,4,24,16,23
2876 bne .Lsha2_block_private
2879 .byte 0,12,0x14,0,0,0,0,0
2880 .size zfs_sha512_ppc,.-zfs_sha512_ppc
2890 .byte 0,12,0x14,0,0,0,0,0
2892 .long 0xd728ae22,0x428a2f98
2893 .long 0x23ef65cd,0x71374491
2894 .long 0xec4d3b2f,0xb5c0fbcf
2895 .long 0x8189dbbc,0xe9b5dba5
2896 .long 0xf348b538,0x3956c25b
2897 .long 0xb605d019,0x59f111f1
2898 .long 0xaf194f9b,0x923f82a4
2899 .long 0xda6d8118,0xab1c5ed5
2900 .long 0xa3030242,0xd807aa98
2901 .long 0x45706fbe,0x12835b01
2902 .long 0x4ee4b28c,0x243185be
2903 .long 0xd5ffb4e2,0x550c7dc3
2904 .long 0xf27b896f,0x72be5d74
2905 .long 0x3b1696b1,0x80deb1fe
2906 .long 0x25c71235,0x9bdc06a7
2907 .long 0xcf692694,0xc19bf174
2908 .long 0x9ef14ad2,0xe49b69c1
2909 .long 0x384f25e3,0xefbe4786
2910 .long 0x8b8cd5b5,0x0fc19dc6
2911 .long 0x77ac9c65,0x240ca1cc
2912 .long 0x592b0275,0x2de92c6f
2913 .long 0x6ea6e483,0x4a7484aa
2914 .long 0xbd41fbd4,0x5cb0a9dc
2915 .long 0x831153b5,0x76f988da
2916 .long 0xee66dfab,0x983e5152
2917 .long 0x2db43210,0xa831c66d
2918 .long 0x98fb213f,0xb00327c8
2919 .long 0xbeef0ee4,0xbf597fc7
2920 .long 0x3da88fc2,0xc6e00bf3
2921 .long 0x930aa725,0xd5a79147
2922 .long 0xe003826f,0x06ca6351
2923 .long 0x0a0e6e70,0x14292967
2924 .long 0x46d22ffc,0x27b70a85
2925 .long 0x5c26c926,0x2e1b2138
2926 .long 0x5ac42aed,0x4d2c6dfc
2927 .long 0x9d95b3df,0x53380d13
2928 .long 0x8baf63de,0x650a7354
2929 .long 0x3c77b2a8,0x766a0abb
2930 .long 0x47edaee6,0x81c2c92e
2931 .long 0x1482353b,0x92722c85
2932 .long 0x4cf10364,0xa2bfe8a1
2933 .long 0xbc423001,0xa81a664b
2934 .long 0xd0f89791,0xc24b8b70
2935 .long 0x0654be30,0xc76c51a3
2936 .long 0xd6ef5218,0xd192e819
2937 .long 0x5565a910,0xd6990624
2938 .long 0x5771202a,0xf40e3585
2939 .long 0x32bbd1b8,0x106aa070
2940 .long 0xb8d2d0c8,0x19a4c116
2941 .long 0x5141ab53,0x1e376c08
2942 .long 0xdf8eeb99,0x2748774c
2943 .long 0xe19b48a8,0x34b0bcb5
2944 .long 0xc5c95a63,0x391c0cb3
2945 .long 0xe3418acb,0x4ed8aa4a
2946 .long 0x7763e373,0x5b9cca4f
2947 .long 0xd6b2b8a3,0x682e6ff3
2948 .long 0x5defb2fc,0x748f82ee
2949 .long 0x43172f60,0x78a5636f
2950 .long 0xa1f0ab72,0x84c87814
2951 .long 0x1a6439ec,0x8cc70208
2952 .long 0x23631e28,0x90befffa
2953 .long 0xde82bde9,0xa4506ceb
2954 .long 0xb2c67915,0xbef9a3f7
2955 .long 0xe372532b,0xc67178f2
2956 .long 0xea26619c,0xca273ece
2957 .long 0x21c0c207,0xd186b8c7
2958 .long 0xcde0eb1e,0xeada7dd6
2959 .long 0xee6ed178,0xf57d4f7f
2960 .long 0x72176fba,0x06f067aa
2961 .long 0xa2c898a6,0x0a637dc5
2962 .long 0xbef90dae,0x113f9804
2963 .long 0x131c471b,0x1b710b35
2964 .long 0x23047d84,0x28db77f5
2965 .long 0x40c72493,0x32caab7b
2966 .long 0x15c9bebc,0x3c9ebe0a
2967 .long 0x9c100d4c,0x431d67c4
2968 .long 0xcb3e42b6,0x4cc5d4be
2969 .long 0xfc657e2a,0x597f299c
2970 .long 0x3ad6faec,0x5fcb6fab
2971 .long 0x4a475817,0x6c44198c