SIMD high performace xorcpy in C

In my current project I need a high performace xorcpy implemented in C. Here is my implementation to share and it is tested on my Xeon E5-2680 PC, it reaches almost 1.7GB/s.

#include <emmintrin.h>
...
__forceinline unsigned char* xorcpy(unsigned char* dst, const unsigned char* src, unsigned block_size)
{
    // Do the bulk of the copy a __m128i at a time, for faster speed
    __m128i* mto = (__m128i*)dst;
    const __m128i* mfrom = (__m128i*)(src);
    for(int i=(block_size / sizeof(__m128i) - 1); i>=0; i--)
    {
        __m128i xmm1 = _mm_loadu_si128(mto);
        __m128i xmm2 = _mm_loadu_si128(mfrom);

        xmm1 = _mm_xor_si128(xmm1, xmm2);     //  XOR 16 bytes
        _mm_storeu_si128(mto, xmm1);
        ++mto;
        ++mfrom;
    }

    // The rest bytes we have to do a byte a time though
    unsigned char* cto = (unsigned char*) mto;
    const unsigned char* cfrom = (const unsigned char*)mfrom;
    for(int i=(block_size % sizeof(__m128i)) - 1; i>=0; i--)
    {
        *cto++ ^= (*cfrom++);
    }
    return dst;
}

2015 AGE Gaming show

Actually, this is my 10th years to attend AGE gaming show. Noting is very exciting, but game, Britney spears, is very impressive. The game is specially designed for curve screen to suit physical curve, and the chair has stereo surrounding sound system, and event it can shake up when reel spinning stops.IMG_20150813_115556370 IMG_20150813_110444704_HDR IMG_20150813_110525637 IMG_20150813_110911161_HDR IMG_20150813_111705743_HDR IMG_20150813_112413897_HDR

Share Brother HL-2130 through Lenovo Iomega EZ Media & Backup Center USB port

Recently I bought a Lenovo® EZ Media and Backup Center to share video and photos within my home network. I also have a Brother HL-2130 Mono Laser long time back which is connected to my PC USB port. Every time, when I want to print something, I have to keep my PC on. I am thinking is there a way to connect my Brother HL-2130 Mono Laser to Lenovo® EZ Media and Backup Center USB port, and sharing HL-2130 within my home network. I can print from any devices even from my iPad, Andaroid phone.

After few hours trying, I finally successfully share HL-2130 through Lenovo NAS USB port. This is the post I found from internet, and it gives the detailed steps.

http://forum.nas-central.org/viewtopic.php?f=279&t=8679

Here are the steps I followed to install HL-2130:

  1. In PC’s browser, go to http://lenovoez/manage/login.html?pg=/manage/diagnostics.html. Enable SSH login (default password: soho+[password]
  2. Download putty, and login your Lenovo NAS through SSH
  3. Connect HL-2130 to Lenovo NAS USB Port
  4. Issue command “/etc/init.d/cups start” to start CUPS service
  5. In PC’s browser, go to http://lenovoez:631/admin
  6. Click “Add Printer” and find Brother_HL-2130_series printer from local printers.
  7. In “Printers” tab, you will find Brother_HL-2130_series. Actually, the address for HL-2130 is http://lenovoez:631/printers/Brother_HL-2130_series
  8. Download latest HL-2130 Windows OS printer driver from http://support.brother.com/g/b/downloadtop.aspx?c=us_ot&lang=en&prod=hl2130_all
  9. Go back to PC, and Add new printer, give the printer address http://lenovoez:631/printers/Brother_HL-2130_series
  10. Click “Have a disk” and install HL-2130 printer driver.
  11. Follow the steps in the post to make cups to run every time the box reloads.