root/sys/crypto/openssl/powerpc/poly1305-ppcfp.S
/* Do not modify. This file is auto-generated from poly1305-ppcfp.pl. */
.machine        "any"
.text

.globl  poly1305_init_fpu
.type   poly1305_init_fpu,@function
.align  6
poly1305_init_fpu:
        stwu    1,-24(1)
        mflr    6
        stw     6,28(1)

        bl      .LPICmeup

        xor     0,0,0
        mtlr    6

        lfd     8,8*0(5)
        lfd     9,8*1(5)
        lfd     10,8*2(5)
        lfd     11,8*3(5)
        lfd     12,8*4(5)
        lfd     13,8*5(5)

        stfd    8,8*0(3)
        stfd    9,8*1(3)
        stfd    10,8*2(3)
        stfd    11,8*3(3)

        .long   0x7c040040
        beq-    .Lno_key

        lfd     6,8*13(5)
        mffs    7

        stfd    8,8*4(3)
        stfd    9,8*5(3)
        stfd    10,8*6(3)
        stfd    11,8*7(3)

        li      8,4
        li      9,8
        li      10,12
        lwbrx   7,0,4
        lwbrx   8,8,4
        lwbrx   9,9,4
        lwbrx   10,10,4

        lis     11,0xf000
        ori     12,11,3
        andc    7,7,11
        andc    8,8,12
        andc    9,9,12
        andc    10,10,12

        stw     7,36(3)
        stw     8,44(3)
        stw     9,52(3)
        stw     10,60(3)

        mtfsf   255,6
        stfd    8,8*18(3)
        stfd    9,8*19(3)
        stfd    10,8*20(3)
        stfd    11,8*21(3)
        stfd    12,8*22(3)
        stfd    13,8*23(3)

        lfd     0,8*4(3)
        lfd     2,8*5(3)
        lfd     4,8*6(3)
        lfd     6,8*7(3)

        fsub    0,0,8
        fsub    2,2,9
        fsub    4,4,10
        fsub    6,6,11

        lfd     8,8*6(5)
        lfd     9,8*7(5)
        lfd     10,8*8(5)
        lfd     11,8*9(5)

        fmul    3,2,13
        fmul    5,4,13
        stfd    7,8*15(3)
        fmul    7,6,13

        fadd    1,0,8
        stfd    3,8*12(3)
        fadd    3,2,9
        stfd    5,8*13(3)
        fadd    5,4,10
        stfd    7,8*14(3)
        fadd    7,6,11

        fsub    1,1,8
        fsub    3,3,9
        fsub    5,5,10
        fsub    7,7,11

        lfd     8,8*10(5)
        lfd     9,8*11(5)
        lfd     10,8*12(5)

        fsub    0,0,1
        fsub    2,2,3
        fsub    4,4,5
        fsub    6,6,7

        stfd    1,8*5(3)
        stfd    3,8*7(3)
        stfd    5,8*9(3)
        stfd    7,8*11(3)

        stfd    0,8*4(3)
        stfd    2,8*6(3)
        stfd    4,8*8(3)
        stfd    6,8*10(3)

        lfd     2,8*12(3)
        lfd     4,8*13(3)
        lfd     6,8*14(3)
        lfd     0,8*15(3)

        fadd    3,2,8
        fadd    5,4,9
        fadd    7,6,10

        fsub    3,3,8
        fsub    5,5,9
        fsub    7,7,10

        fsub    2,2,3
        fsub    4,4,5
        fsub    6,6,7

        stfd    3,8*13(3)
        stfd    5,8*15(3)
        stfd    7,8*17(3)

        stfd    2,8*12(3)
        stfd    4,8*14(3)
        stfd    6,8*16(3)

        mtfsf   255,0
.Lno_key:
        xor     3,3,3
        addi    1,1,24
        blr     
.long   0
.byte   0,12,4,1,0x80,0,2,0
.size   poly1305_init_fpu,.-poly1305_init_fpu

.globl  poly1305_blocks_fpu
.type   poly1305_blocks_fpu,@function
.align  4
poly1305_blocks_fpu:
        srwi.   5,5,4
        beq-    .Labort

        stwu    1,-216(1)
        mflr    0
        stfd    14,72(1)
        stfd    15,80(1)
        stfd    16,88(1)
        stfd    17,96(1)
        stfd    18,104(1)
        stfd    19,112(1)
        stfd    20,120(1)
        stfd    21,128(1)
        stfd    22,136(1)
        stfd    23,144(1)
        stfd    24,152(1)
        stfd    25,160(1)
        stfd    26,168(1)
        stfd    27,176(1)
        stfd    28,184(1)
        stfd    29,192(1)
        stfd    30,200(1)
        stfd    31,208(1)
        stw     0,220(1)

        xor     0,0,0
        li      10,1
        mtctr   5
        neg     5,5
        stw     0,56(1)
        stw     10,60(1)

        lfd     8,8*18(3)
        lfd     9,8*19(3)
        lfd     10,8*20(3)
        lfd     11,8*21(3)
        lfd     12,8*22(3)
        lfd     13,8*23(3)

        lfd     0,8*0(3)
        lfd     2,8*1(3)
        lfd     4,8*2(3)
        lfd     6,8*3(3)

        stfd    8,24(1)
        oris    10,6,18736
        stfd    9,32(1)
        stfd    10,40(1)
        stw     10,48(1)

        li      11,4
        li      12,8
        li      6,12
        lwbrx   7,0,4
        lwbrx   8,11,4
        lwbrx   9,12,4
        lwbrx   10,6,4
        addi    4,4,16

        stw     7,28(1)
        stw     8,36(1)
        stw     9,44(1)
        stw     10,52(1)

        mffs    28
        lfd     29,56(1)
        lfd     14,8*4(3)
        lfd     15,8*5(3)
        lfd     16,8*6(3)
        lfd     17,8*7(3)
        lfd     18,8*8(3)
        lfd     19,8*9(3)
        lfd     24,8*10(3)
        lfd     25,8*11(3)
        lfd     26,8*12(3)
        lfd     27,8*13(3)
        lfd     20,8*14(3)
        lfd     21,8*15(3)
        lfd     22,8*16(3)
        lfd     23,8*17(3)

        stfd    28,56(1)
        mtfsf   255,29

        addic   5,5,1
        addze   0,0
        slwi.   0,0,4
        sub     4,4,0

        lfd     28,24(1)
        lfd     29,32(1)
        lfd     30,40(1)
        lfd     31,48(1)

        fsub    0,0,8
        lwbrx   7,0,4
        fsub    2,2,9
        lwbrx   8,11,4
        fsub    4,4,10
        lwbrx   9,12,4
        fsub    6,6,11
        lwbrx   10,6,4

        fsub    28,28,8
        addi    4,4,16
        fsub    29,29,9
        fsub    30,30,10
        fsub    31,31,11

        fadd    28,28,0
        stw     7,28(1)
        fadd    29,29,2
        stw     8,36(1)
        fadd    30,30,4
        stw     9,44(1)
        fadd    31,31,6
        stw     10,52(1)

        b       .Lentry

.align  4
.Loop:
        fsub    30,30,8
        addic   5,5,1
        fsub    31,31,9
        addze   0,0
        fsub    26,26,10
        slwi.   0,0,4
        fsub    27,27,11
        sub     4,4,0

        fadd    0,0,30
        fadd    1,1,31
        fadd    4,4,26
        fadd    5,5,27


        fadd    26,2,10
        lwbrx   7,0,4
        fadd    27,3,10
        lwbrx   8,11,4
        fadd    30,6,12
        lwbrx   9,12,4
        fadd    31,7,12
        lwbrx   10,6,4
        fadd    24,0,9
        addi    4,4,16
        fadd    25,1,9
        fadd    28,4,11
        fadd    29,5,11

        fsub    26,26,10
        stw     7,28(1)
        fsub    27,27,10
        stw     8,36(1)
        fsub    30,30,12
        stw     9,44(1)
        fsub    31,31,12
        stw     10,52(1)
        fsub    24,24,9
        fsub    25,25,9
        fsub    28,28,11
        fsub    29,29,11

        fsub    2,2,26
        fsub    3,3,27
        fsub    6,6,30
        fsub    7,7,31
        fsub    4,4,28
        fsub    5,5,29
        fsub    0,0,24
        fsub    1,1,25

        fadd    2,2,24
        fadd    3,3,25
        fadd    6,6,28
        fadd    7,7,29
        fadd    4,4,26
        fadd    5,5,27
        fmadd   0,30,13,0
        fmadd   1,31,13,1

        fadd    29,2,3
        lfd     26,8*12(3)
        fadd    31,6,7
        lfd     27,8*13(3)
        fadd    30,4,5
        lfd     24,8*10(3)
        fadd    28,0,1
        lfd     25,8*11(3)
.Lentry:
        fmul    0,22,29
        fmul    1,23,29
        fmul    4,16,29
        fmul    5,17,29
        fmul    2,14,29
        fmul    3,15,29
        fmul    6,18,29
        fmul    7,19,29

        fmadd   0,26,31,0
        fmadd   1,27,31,1
        fmadd   4,22,31,4
        fmadd   5,23,31,5
        fmadd   2,20,31,2
        fmadd   3,21,31,3
        fmadd   6,14,31,6
        fmadd   7,15,31,7

        fmadd   0,20,30,0
        fmadd   1,21,30,1
        fmadd   4,14,30,4
        fmadd   5,15,30,5
        fmadd   2,22,30,2
        fmadd   3,23,30,3
        fmadd   6,16,30,6
        fmadd   7,17,30,7

        fmadd   0,14,28,0
        lfd     30,24(1)
        fmadd   1,15,28,1
        lfd     31,32(1)
        fmadd   4,18,28,4
        lfd     26,40(1)
        fmadd   5,19,28,5
        lfd     27,48(1)
        fmadd   2,16,28,2
        fmadd   3,17,28,3
        fmadd   6,24,28,6
        fmadd   7,25,28,7

        bdnz    .Loop


        fadd    24,0,9
        fadd    25,1,9
        fadd    28,4,11
        fadd    29,5,11
        fadd    26,2,10
        fadd    27,3,10
        fadd    30,6,12
        fadd    31,7,12

        fsub    24,24,9
        fsub    25,25,9
        fsub    28,28,11
        fsub    29,29,11
        fsub    26,26,10
        fsub    27,27,10
        fsub    30,30,12
        fsub    31,31,12

        fsub    2,2,26
        fsub    3,3,27
        fsub    6,6,30
        fsub    7,7,31
        fsub    4,4,28
        fsub    5,5,29
        fsub    0,0,24
        fsub    1,1,25

        fadd    2,2,24
        fadd    3,3,25
        fadd    6,6,28
        fadd    7,7,29
        fadd    4,4,26
        fadd    5,5,27
        fmadd   0,30,13,0
        fmadd   1,31,13,1

        fadd    29,2,3
        fadd    31,6,7
        fadd    30,4,5
        fadd    28,0,1

        lfd     0,56(1)
        fadd    29,29,9
        fadd    31,31,11
        fadd    30,30,10
        fadd    28,28,8

        stfd    29,8*1(3)
        stfd    31,8*3(3)
        stfd    30,8*2(3)
        stfd    28,8*0(3)

        mtfsf   255,0
        lfd     14,72(1)
        lfd     15,80(1)
        lfd     16,88(1)
        lfd     17,96(1)
        lfd     18,104(1)
        lfd     19,112(1)
        lfd     20,120(1)
        lfd     21,128(1)
        lfd     22,136(1)
        lfd     23,144(1)
        lfd     24,152(1)
        lfd     25,160(1)
        lfd     26,168(1)
        lfd     27,176(1)
        lfd     28,184(1)
        lfd     29,192(1)
        lfd     30,200(1)
        lfd     31,208(1)
        addi    1,1,216
.Labort:
        blr     
.long   0
.byte   0,12,4,1,0x80,0,4,0
.size   poly1305_blocks_fpu,.-poly1305_blocks_fpu
.globl  poly1305_emit_fpu
.type   poly1305_emit_fpu,@function
.align  4
poly1305_emit_fpu:
        stwu    1,-40(1)
        mflr    0
        stw     28,24(1)
        stw     29,28(1)
        stw     30,32(1)
        stw     31,36(1)
        stw     0,44(1)

        lwz     28,0(3)
        lwz     7,4(3)
        lwz     29,8(3)
        lwz     8,12(3)
        lwz     30,16(3)
        lwz     9,20(3)
        lwz     31,24(3)
        lwz     10,28(3)

        lis     0,0xfff0
        andc    28,28,0
        andc    29,29,0
        andc    30,30,0
        andc    31,31,0
        li      0,3

        srwi    6,31,2
        and     11,31,0
        andc    31,31,0
        add     31,31,6
        addc    7,7,31
        adde    8,8,28
        adde    9,9,29
        adde    10,10,30
        addze   11,11

        addic   28,7,5
        addze   29,8
        addze   30,9
        addze   31,10
        addze   0,11

        srwi    0,0,2
        neg     0,0
        srawi   0,0,31

        andc    7,7,0
        and     28,28,0
        andc    8,8,0
        and     29,29,0
        or      7,7,28
        lwz     28,0(5)
        andc    9,9,0
        and     30,30,0
        or      8,8,29
        lwz     29,4(5)
        andc    10,10,0
        and     31,31,0
        or      9,9,30
        lwz     30,8(5)
        or      10,10,31
        lwz     31,12(5)

        addc    7,7,28
        adde    8,8,29
        adde    9,9,30
        adde    10,10,31
        li      29,4
        stwbrx  7,0,4
        li      30,8
        stwbrx  8,29,4
        li      31,12
        stwbrx  9,30,4
        stwbrx  10,31,4
        lwz     28,24(1)
        lwz     29,28(1)
        lwz     30,32(1)
        lwz     31,36(1)
        addi    1,1,40
        blr     
.long   0
.byte   0,12,4,1,0x80,4,3,0
.size   poly1305_emit_fpu,.-poly1305_emit_fpu
.align  6
.LPICmeup:
        mflr    0
        bcl     20,31,$+4
        mflr    5
        addi    5,5,56
        mtlr    0
        blr     
.long   0
.byte   0,12,0x14,0,0,0,0,0
.space  28

.long   0x43300000,0x00000000
.long   0x45300000,0x00000000
.long   0x47300000,0x00000000
.long   0x49300000,0x00000000
.long   0x4b500000,0x00000000

.long   0x37f40000,0x00000000

.long   0x44300000,0x00000000
.long   0x46300000,0x00000000
.long   0x48300000,0x00000000
.long   0x4a300000,0x00000000
.long   0x3e300000,0x00000000
.long   0x40300000,0x00000000
.long   0x42300000,0x00000000

.long   0x00000000,0x00000001
.byte   80,111,108,121,49,51,48,53,32,102,111,114,32,80,80,67,32,70,80,85,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
.align  2
.align  4