md5-ia64.S: fix assembler warning [from HEAD].
[openssl.git] / crypto / md5 / asm / md5-ia64.S
index 9002632..e7de08d 100644 (file)
@@ -147,7 +147,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
 #define        Y               in21
 #define        Z               in20
 
-/* register stack configuration for md5_block_asm_host_order(): */
+/* register stack configuration for md5_block_asm_data_order(): */
 #define        MD5_NINP        3
 #define        MD5_NLOC        0
 #define MD5_NOUT       29
@@ -159,6 +159,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
 #define _NOUTPUT       0
 #define        _NROTATE        24      /* this must be <= _NINPUTS */
 
+#if defined(_HPUX_SOURCE) && !defined(_LP64)
+#define        ADDP    addp4
+#else
+#define        ADDP    add
+#endif
+
+#if defined(_HPUX_SOURCE) || defined(B_ENDIAN)
+#define HOST_IS_BIG_ENDIAN
+#endif
 
 //     Macros for getting the left and right portions of little-endian words
 
@@ -225,82 +234,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
 #define        LCSave          r21
 #define        PFSSave         r20
 #define        PRSave          r22
-#define        pAgain          p14
-#define        pOff            p14
-
-       .rodata
-       // Values are specified as bytes to ensure they are
-       // in little-endian byte-order.
-       .align 4
-md5_round_constants:
-       data1 0x78, 0xa4, 0x6a, 0xd7    //     0
-       data1 0x56, 0xb7, 0xc7, 0xe8    //     1
-       data1 0xdb, 0x70, 0x20, 0x24    //     2
-       data1 0xee, 0xce, 0xbd, 0xc1    //     3
-       data1 0xaf, 0x0f, 0x7c, 0xf5    //     4
-       data1 0x2a, 0xc6, 0x87, 0x47    //     5
-       data1 0x13, 0x46, 0x30, 0xa8    //     6
-       data1 0x01, 0x95, 0x46, 0xfd    //     7
-       data1 0xd8, 0x98, 0x80, 0x69    //     8
-       data1 0xaf, 0xf7, 0x44, 0x8b    //     9
-       data1 0xb1, 0x5b, 0xff, 0xff    //    10
-       data1 0xbe, 0xd7, 0x5c, 0x89    //    11
-       data1 0x22, 0x11, 0x90, 0x6b    //    12
-       data1 0x93, 0x71, 0x98, 0xfd    //    13
-       data1 0x8e, 0x43, 0x79, 0xa6    //    14
-       data1 0x21, 0x08, 0xb4, 0x49    //    15
-       data1 0x62, 0x25, 0x1e, 0xf6    //    16
-       data1 0x40, 0xb3, 0x40, 0xc0    //    17
-       data1 0x51, 0x5a, 0x5e, 0x26    //    18
-       data1 0xaa, 0xc7, 0xb6, 0xe9    //    19
-       data1 0x5d, 0x10, 0x2f, 0xd6    //    20
-       data1 0x53, 0x14, 0x44, 0x02    //    21
-       data1 0x81, 0xe6, 0xa1, 0xd8    //    22
-       data1 0xc8, 0xfb, 0xd3, 0xe7    //    23
-       data1 0xe6, 0xcd, 0xe1, 0x21    //    24
-       data1 0xd6, 0x07, 0x37, 0xc3    //    25
-       data1 0x87, 0x0d, 0xd5, 0xf4    //    26
-       data1 0xed, 0x14, 0x5a, 0x45    //    27
-       data1 0x05, 0xe9, 0xe3, 0xa9    //    28
-       data1 0xf8, 0xa3, 0xef, 0xfc    //    29
-       data1 0xd9, 0x02, 0x6f, 0x67    //    30
-       data1 0x8a, 0x4c, 0x2a, 0x8d    //    31
-       data1 0x42, 0x39, 0xfa, 0xff    //    32
-       data1 0x81, 0xf6, 0x71, 0x87    //    33
-       data1 0x22, 0x61, 0x9d, 0x6d    //    34
-       data1 0x0c, 0x38, 0xe5, 0xfd    //    35
-       data1 0x44, 0xea, 0xbe, 0xa4    //    36
-       data1 0xa9, 0xcf, 0xde, 0x4b    //    37
-       data1 0x60, 0x4b, 0xbb, 0xf6    //    38
-       data1 0x70, 0xbc, 0xbf, 0xbe    //    39
-       data1 0xc6, 0x7e, 0x9b, 0x28    //    40
-       data1 0xfa, 0x27, 0xa1, 0xea    //    41
-       data1 0x85, 0x30, 0xef, 0xd4    //    42
-       data1 0x05, 0x1d, 0x88, 0x04    //    43
-       data1 0x39, 0xd0, 0xd4, 0xd9    //    44
-       data1 0xe5, 0x99, 0xdb, 0xe6    //    45
-       data1 0xf8, 0x7c, 0xa2, 0x1f    //    46
-       data1 0x65, 0x56, 0xac, 0xc4    //    47
-       data1 0x44, 0x22, 0x29, 0xf4    //    48
-       data1 0x97, 0xff, 0x2a, 0x43    //    49
-       data1 0xa7, 0x23, 0x94, 0xab    //    50
-       data1 0x39, 0xa0, 0x93, 0xfc    //    51
-       data1 0xc3, 0x59, 0x5b, 0x65    //    52
-       data1 0x92, 0xcc, 0x0c, 0x8f    //    53
-       data1 0x7d, 0xf4, 0xef, 0xff    //    54
-       data1 0xd1, 0x5d, 0x84, 0x85    //    55
-       data1 0x4f, 0x7e, 0xa8, 0x6f    //    56
-       data1 0xe0, 0xe6, 0x2c, 0xfe    //    57
-       data1 0x14, 0x43, 0x01, 0xa3    //    58
-       data1 0xa1, 0x11, 0x08, 0x4e    //    59
-       data1 0x82, 0x7e, 0x53, 0xf7    //    60
-       data1 0x35, 0xf2, 0x3a, 0xbd    //    61
-       data1 0xbb, 0xd2, 0xd7, 0x2a    //    62
-       data1 0x91, 0xd3, 0x86, 0xeb    //    63
+#define        pAgain          p63
+#define        pOff            p63
 
        .text
 
-/* md5_block_asm_host_order(MD5_CTX *c, const void *data, size_t num)
+/* md5_block_asm_data_order(MD5_CTX *c, const void *data, size_t num)
 
      where:
       c: a pointer to a structure of this type:
@@ -320,52 +259,31 @@ md5_round_constants:
 
    */
 
-       .type   md5_block_asm_host_order, @function
-       .global md5_block_asm_host_order
-
+       .type   md5_block_asm_data_order, @function
+       .global md5_block_asm_data_order
        .align  32
-       .proc   md5_block_asm_host_order
-md5_block_asm_host_order:
+       .proc   md5_block_asm_data_order
+md5_block_asm_data_order:
+.md5_block:
        .prologue
-#ifndef __LP64__
 {      .mmi
-       .save ar.pfs, PFSSave
+       .save   ar.pfs, PFSSave
        alloc   PFSSave = ar.pfs, MD5_NINP, MD5_NLOC, MD5_NOUT, MD5_NROT
-       addp4   DPtrIn = 0, DPtrIn
-       addp4   CtxPtr0 = 0, CtxPtr0
+       ADDP    CtxPtr1 = 8, CtxPtr0
+       mov     CTable = ip
 }
-;;
 {      .mmi
-       nop     0x0
-       and     InAlign = 0x3, DPtrIn
-       .save ar.lc, LCSave
+       ADDP    DPtrIn = 0, DPtrIn
+       ADDP    CtxPtr0 = 0, CtxPtr0
+       .save   ar.lc, LCSave
        mov     LCSave = ar.lc
 }
-#else
+;;
 {      .mmi
-       .save ar.pfs, PFSSave
-       alloc   PFSSave = ar.pfs, MD5_NINP, MD5_NLOC, MD5_NOUT, MD5_NROT
+       add     CTable = .md5_tbl_data_order#-.md5_block#, CTable
        and     InAlign = 0x3, DPtrIn
-       .save ar.lc, LCSave
-       mov     LCSave = ar.lc
 }
-#endif
 
-{      .mmi
-       addl    CTable = @ltoffx(md5_round_constants), gp
-       ;;
-       ld8.mov CTable = [CTable], md5_round_constants // native byte-order
-       add     CtxPtr1 = 8, CtxPtr0
-}
-#ifdef B_ENDIAN
-{
-       .mmi
-       rum     psr.be          // switch to little-endian mode
-       nop.m   0x0
-       nop.i   0x0
-}
-#endif
-;;
 {      .mmi
        ld4     AccumA = [CtxPtr0], 4
        ld4     AccumC = [CtxPtr1], 4
@@ -379,15 +297,12 @@ md5_block_asm_host_order:
        ld4     AccumD = [CtxPtr1]
        dep     DPtr_ = 0, DPtrIn, 0, 2
 } ;;
-
-{      .mmi
+#ifdef HOST_IS_BIG_ENDIAN
+       rum     psr.be;;        // switch to little-endian
+#endif
+{      .mmb
        ld4     CTable0 = [CTable], 4
        cmp.ne  pOff, p0 = 0, InAlign
-} ;;
-
-{      .mib
-       nop.m 0x0
-       nop.i 0x0
 (pOff) br.cond.spnt.many .md5_unaligned
 } ;;
 
@@ -431,9 +346,9 @@ md5_block_asm_host_order:
 } ;;
 
 .md5_exit:
-//     Note that we switch back to the entry endianess AFTER storing so
-//     that the memory image of the hash is preserved.
-
+#ifdef HOST_IS_BIG_ENDIAN
+       sum     psr.be;;        // switch back to big-endian mode
+#endif
 {      .mmi
        st4     [CtxPtr0] = AccumB, -4
        st4     [CtxPtr1] = AccumD, -4
@@ -445,9 +360,6 @@ md5_block_asm_host_order:
        mov     ar.lc = LCSave
 } ;;
 {      .mib
-#ifdef B_ENDIAN
-       sum     psr.be          // switch back to big-endian mode
-#endif
        mov     ar.pfs = PFSSave
        br.ret.sptk.few rp
 } ;;
@@ -521,7 +433,7 @@ md5_block_asm_host_order:
        MD5UNALIGNED(1)
        MD5UNALIGNED(2)
 
-       .endp md5_block_asm_host_order
+       .endp md5_block_asm_data_order
 
 
 // MD5 Perform the F function and load
@@ -1001,9 +913,80 @@ md5_digest_block##offset:                                         \
        nop 0x0 ;                                                       \
        nop 0x0 ;                                                       \
        br.cond.sptk.many md5_digest_GHI ;                              \
-} ;                                                                    \
-       .endp md5digestBlock ## offset
+} ;;                                                                   \
+       .endp md5_digest_block##offset
 
 MD5FBLOCK(1)
 MD5FBLOCK(2)
 MD5FBLOCK(3)
+
+       .align 64
+       .type md5_constants, @object
+md5_constants:
+.md5_tbl_data_order:                   // To ensure little-endian data
+                                       // order, code as bytes.
+       data1 0x78, 0xa4, 0x6a, 0xd7    //     0
+       data1 0x56, 0xb7, 0xc7, 0xe8    //     1
+       data1 0xdb, 0x70, 0x20, 0x24    //     2
+       data1 0xee, 0xce, 0xbd, 0xc1    //     3
+       data1 0xaf, 0x0f, 0x7c, 0xf5    //     4
+       data1 0x2a, 0xc6, 0x87, 0x47    //     5
+       data1 0x13, 0x46, 0x30, 0xa8    //     6
+       data1 0x01, 0x95, 0x46, 0xfd    //     7
+       data1 0xd8, 0x98, 0x80, 0x69    //     8
+       data1 0xaf, 0xf7, 0x44, 0x8b    //     9
+       data1 0xb1, 0x5b, 0xff, 0xff    //    10
+       data1 0xbe, 0xd7, 0x5c, 0x89    //    11
+       data1 0x22, 0x11, 0x90, 0x6b    //    12
+       data1 0x93, 0x71, 0x98, 0xfd    //    13
+       data1 0x8e, 0x43, 0x79, 0xa6    //    14
+       data1 0x21, 0x08, 0xb4, 0x49    //    15
+       data1 0x62, 0x25, 0x1e, 0xf6    //    16
+       data1 0x40, 0xb3, 0x40, 0xc0    //    17
+       data1 0x51, 0x5a, 0x5e, 0x26    //    18
+       data1 0xaa, 0xc7, 0xb6, 0xe9    //    19
+       data1 0x5d, 0x10, 0x2f, 0xd6    //    20
+       data1 0x53, 0x14, 0x44, 0x02    //    21
+       data1 0x81, 0xe6, 0xa1, 0xd8    //    22
+       data1 0xc8, 0xfb, 0xd3, 0xe7    //    23
+       data1 0xe6, 0xcd, 0xe1, 0x21    //    24
+       data1 0xd6, 0x07, 0x37, 0xc3    //    25
+       data1 0x87, 0x0d, 0xd5, 0xf4    //    26
+       data1 0xed, 0x14, 0x5a, 0x45    //    27
+       data1 0x05, 0xe9, 0xe3, 0xa9    //    28
+       data1 0xf8, 0xa3, 0xef, 0xfc    //    29
+       data1 0xd9, 0x02, 0x6f, 0x67    //    30
+       data1 0x8a, 0x4c, 0x2a, 0x8d    //    31
+       data1 0x42, 0x39, 0xfa, 0xff    //    32
+       data1 0x81, 0xf6, 0x71, 0x87    //    33
+       data1 0x22, 0x61, 0x9d, 0x6d    //    34
+       data1 0x0c, 0x38, 0xe5, 0xfd    //    35
+       data1 0x44, 0xea, 0xbe, 0xa4    //    36
+       data1 0xa9, 0xcf, 0xde, 0x4b    //    37
+       data1 0x60, 0x4b, 0xbb, 0xf6    //    38
+       data1 0x70, 0xbc, 0xbf, 0xbe    //    39
+       data1 0xc6, 0x7e, 0x9b, 0x28    //    40
+       data1 0xfa, 0x27, 0xa1, 0xea    //    41
+       data1 0x85, 0x30, 0xef, 0xd4    //    42
+       data1 0x05, 0x1d, 0x88, 0x04    //    43
+       data1 0x39, 0xd0, 0xd4, 0xd9    //    44
+       data1 0xe5, 0x99, 0xdb, 0xe6    //    45
+       data1 0xf8, 0x7c, 0xa2, 0x1f    //    46
+       data1 0x65, 0x56, 0xac, 0xc4    //    47
+       data1 0x44, 0x22, 0x29, 0xf4    //    48
+       data1 0x97, 0xff, 0x2a, 0x43    //    49
+       data1 0xa7, 0x23, 0x94, 0xab    //    50
+       data1 0x39, 0xa0, 0x93, 0xfc    //    51
+       data1 0xc3, 0x59, 0x5b, 0x65    //    52
+       data1 0x92, 0xcc, 0x0c, 0x8f    //    53
+       data1 0x7d, 0xf4, 0xef, 0xff    //    54
+       data1 0xd1, 0x5d, 0x84, 0x85    //    55
+       data1 0x4f, 0x7e, 0xa8, 0x6f    //    56
+       data1 0xe0, 0xe6, 0x2c, 0xfe    //    57
+       data1 0x14, 0x43, 0x01, 0xa3    //    58
+       data1 0xa1, 0x11, 0x08, 0x4e    //    59
+       data1 0x82, 0x7e, 0x53, 0xf7    //    60
+       data1 0x35, 0xf2, 0x3a, 0xbd    //    61
+       data1 0xbb, 0xd2, 0xd7, 0x2a    //    62
+       data1 0x91, 0xd3, 0x86, 0xeb    //    63
+.size  md5_constants#,64*4