clock-hash 1.0.0

ClockHash-256: Consensus hash function for ClockinChain
Documentation
// Debug CPUID detection binary
use clock_hash::cpuid::{has_avx, has_avx2};
use clock_hash::simd::dispatch::{is_avx_available, is_avx2_available, is_os_avx_supported};
use clock_hash::simd::scalar::scalar_clock_mix;

fn main() {
    println!("=== ClockHash CPUID Debug ===");

    // Raw CPUID results
    let cpuid1 = clock_hash::cpuid::cpuid(1, 0);
    let cpuid7 = clock_hash::cpuid::cpuid(7, 0);

    println!("CPUID(1,0): EAX={:08x}, EBX={:08x}, ECX={:08x}, EDX={:08x}",
             cpuid1.eax, cpuid1.ebx, cpuid1.ecx, cpuid1.edx);
    println!("CPUID(7,0): EAX={:08x}, EBX={:08x}, ECX={:08x}, EDX={:08x}",
             cpuid7.eax, cpuid7.ebx, cpuid7.ecx, cpuid7.edx);

    // AVX detection
    println!("\n=== AVX Detection ===");
    println!("has_avx(): {}", has_avx());
    println!("has_avx2(): {}", has_avx2());
    println!("is_avx_available(): {}", is_avx_available());
    println!("is_os_avx_supported(): {}", is_os_avx_supported());
    println!("is_avx2_available(): {}", is_avx2_available());

    // Check specific bits
    let avx_bit = (cpuid1.ecx & (1 << 28)) != 0;
    let avx2_bit = (cpuid7.ebx & (1 << 5)) != 0;

    println!("\nRaw bit checks:");
    println!("AVX bit (ECX[28]): {}", avx_bit);
    println!("AVX2 bit (EBX[5] in leaf 7): {}", avx2_bit);

    // Test SIMD vs scalar
    println!("\n=== SIMD vs Scalar Test ===");
    let test_data = [1u64, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
    let mut scalar_data = test_data.clone();

    println!("Input: {:?}", test_data);

    // Test scalar
    scalar_clock_mix(&mut scalar_data);
    println!("Scalar result: {:?}", scalar_data);

    println!("\nDebug complete!");
}