Document removal of digest+signature algorithm link.
[openssl.git] / crypto / ia64cpuid.S
index 5836565abb310f5c67ecdc126038a719b4dc2fc1..1a03b028fcee8ab90fca61acd174d1e038311095 100644 (file)
@@ -1,11 +1,13 @@
 // Works on all IA-64 platforms: Linux, HP-UX, Win64i...
 // On Win64i compile with ias.exe.
 .text
+
 .global        OPENSSL_cpuid_setup#
 .proc  OPENSSL_cpuid_setup#
 OPENSSL_cpuid_setup:
 { .mib;        br.ret.sptk.many        b0              };;
 .endp  OPENSSL_cpuid_setup#
+
 .global        OPENSSL_rdtsc#
 .proc  OPENSSL_rdtsc#
 OPENSSL_rdtsc:
@@ -124,3 +126,40 @@ OPENSSL_wipe_cpu:
        mov             ar.lc=r3
        br.ret.sptk     b0              };;
 .endp  OPENSSL_wipe_cpu#
+
+.global        OPENSSL_cleanse#
+.proc  OPENSSL_cleanse#
+OPENSSL_cleanse:
+#if defined(_HPUX_SOURCE) && !defined(_LP64)
+{ .mmi;        addp4           r32=0,r32       };;
+#endif
+{ .mib;        and             r2=7,r32
+       cmp.leu         p6,p0=15,r33        // len>=15
+(p6)   br.cond.dptk    .Lot            };;
+
+.Little:
+{ .mib;        st1             [r32]=r0,1
+       cmp.ltu         p6,p7=1,r33     }  // len>1
+{ .mbb;        add             r33=-1,r33         // len--
+(p6)   br.cond.dptk    .Little
+(p7)   br.ret.sptk.many        b0      };;
+
+.Lot:
+{ .mib;        cmp.eq          p6,p0=0,r2
+(p6)   br.cond.dptk    .Laligned       };;
+{ .mmi;        st1             [r32]=r0,1;;
+       and             r2=7,r32        }
+{ .mib;        add             r33=-1,r33
+       br              .Lot            };;
+
+.Laligned:
+{ .mmi;        st8             [r32]=r0,8
+       and             r2=-8,r33           // len&~7
+       add             r33=-8,r33      };; // len-=8
+{ .mib;        cmp.ltu         p6,p0=8,r2          // ((len+8)&~7)>8
+(p6)   br.cond.dptk    .Laligned       };;
+
+{ .mbb;        cmp.eq          p6,p7=r0,r33
+(p7)   br.cond.dpnt    .Little
+(p6)   br.ret.sptk.many        b0      };;
+.endp  OPENSSL_cleanse#