Code Search for Developers
 
 
  

bswap.h from The Open2x Project at Krugle


Show bswap.h syntax highlighted

#ifndef __BSWAP_H__
#    define __BSWAP_H__

#    ifdef HAVE_BYTESWAP_H
#        include <byteswap.h>
#    else

#        include <inttypes.h>

#        ifdef ARCH_X86_64
#            define LEGACY_REGS "=Q"
#        else
#            define LEGACY_REGS "=q"
#        endif

#        if defined(ARCH_X86) || defined(ARCH_X86_64)
static inline uint16_t
ByteSwap16(uint16_t x)
{
  __asm("xchgb %b0,%h0":
  LEGACY_REGS(x):
"0"(x));
    return x;
}

#            define bswap_16(x) ByteSwap16(x)

static inline uint32_t
ByteSwap32(uint32_t x)
{
#            if __CPU__ > 386
  __asm("bswap	%0":
  "=r"(x):
#            else
  __asm("xchgb	%b0,%h0\n" "	rorl	$16,%0\n" "	xchgb	%b0,%h0":
  LEGACY_REGS(x):
#            endif
"0"(x));
    return x;
}

#            define bswap_32(x) ByteSwap32(x)

static inline uint64_t
ByteSwap64(uint64_t x)
{
#            ifdef ARCH_X86_64
  __asm("bswap	%0":
  "=r"(x):
"0"(x));
    return x;
#            else
    register union
    {
        __extension__ uint64_t __ll;
        uint32_t        __l[2];
    } __x;

  asm("xchgl	%0,%1":
  "=r"(__x.__l[0]), "=r"(__x.__l[1]):
"0"(bswap_32((unsigned long) x)), "1"(bswap_32((unsigned long) (x >> 32))));
    return __x.__ll;
#            endif
}

#            define bswap_64(x) ByteSwap64(x)

#        elif defined(ARCH_SH4)

static inline uint16_t
ByteSwap16(uint16_t x)
{
  __asm__("swap.b %0,%0": "=r"(x):"0"(x));
    return x;
}

static inline uint32_t
ByteSwap32(uint32_t x)
{
  __asm__("swap.b %0,%0\n" "swap.w %0,%0\n" "swap.b %0,%0\n": "=r"(x):"0"(x));
    return x;
}

#            define bswap_16(x) ByteSwap16(x)
#            define bswap_32(x) ByteSwap32(x)

static inline uint64_t
ByteSwap64(uint64_t x)
{
    union
    {
        uint64_t        ll;
        struct
        {
            uint32_t        l,
                            h;
        } l;
    } r;

    r.l.l = bswap_32(x);
    r.l.h = bswap_32(x >> 32);
    return r.ll;
}

#            define bswap_64(x) ByteSwap64(x)

#        else

#            define bswap_16(x) (((x) & 0x00ff) << 8 | ((x) & 0xff00) >> 8)


// code from bits/byteswap.h (C) 1997, 1998 Free Software Foundation, Inc.
#            define bswap_32(x) \
     ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) | \
      (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))

static inline uint64_t
ByteSwap64(uint64_t x)
{
    union
    {
        uint64_t        ll;
        uint32_t        l[2];
    } w            , r;

    w.ll = x;
    r.l[0] = bswap_32(w.l[1]);
    r.l[1] = bswap_32(w.l[0]);
    return r.ll;
}

#            define bswap_64(x) ByteSwap64(x)

#        endif                  /* !ARCH_X86 */

#    endif                      /* !HAVE_BYTESWAP_H */

// be2me ... BigEndian to MachineEndian
// le2me ... LittleEndian to MachineEndian

#    ifdef WORDS_BIGENDIAN
#        define be2me_16(x) (x)
#        define be2me_32(x) (x)
#        define be2me_64(x) (x)
#        define le2me_16(x) bswap_16(x)
#        define le2me_32(x) bswap_32(x)
#        define le2me_64(x) bswap_64(x)
#    else
#        define be2me_16(x) bswap_16(x)
#        define be2me_32(x) bswap_32(x)
#        define be2me_64(x) bswap_64(x)
#        define le2me_16(x) (x)
#        define le2me_32(x) (x)
#        define le2me_64(x) (x)
#    endif

#endif                          /* __BSWAP_H__ */




See more files for this project here

The Open2x Project

The Open2x project exists to provide an open source resource for the GP2X handheld console based on the MagicEyes MMSP2 processing platform and MP2520F SoC. The project hosts Linux kernel source for the GP2X, boot loader (U-Boot) source and more.

Project homepage: http://www.distant-earth.com/open2x
Programming language(s): Assembly,C,C++
License: other

  default_skin/
    asf.png
    avi.png
    body.png
    dat.png
    downarrow.png
    error.png
    ext.png
    ext_on.png
    folder.png
    full.png
    loading.png
    mpg.png
    nand.png
    nand_on.png
    normal.png
    resume.png
    save.png
    sd.png
    sd_on.png
    selectbar.png
    uparrow.png
    wmv.png
  etc/
    codecs.conf
    dvb-menu.conf
    example.conf
    input.conf
    inttypes.h
    menu.conf
    mplayer.desktop
    mplayer.ico
  fbdisp/
    Makefile
    fblin16.c
    fblin24.c
    fblin32.c
    fbs.h
    fontdisp.h
    fontout.c
    gfxdev.h
    gfxfontext.c
    gfxfontload.c
    gfxfontout.c
    gfxtype.h
    gulim_96_10_eng.c
    gulim_96_10_han.c
    main.c
    scr_fb.c
  help/
    help_diff.sh
    help_mp-bg.h
    help_mp-cs.h
    help_mp-de.h
    help_mp-dk.h
    help_mp-el.h
    help_mp-en.h
    help_mp-es.h
    help_mp-fr.h
    help_mp-hu.h
    help_mp-it.h
    help_mp-ja.h
    help_mp-ko.h
    help_mp-mk.h
    help_mp-nl.h
    help_mp-no.h
    help_mp-pl.h
    help_mp-pt_BR.h
    help_mp-ro.h
    help_mp-ru.h
  libaf/
  libao2/
  libmpcodecs/
  libmpdemux/
  loader/
  osdep/
  AUTHORS
  DirDisplay.c
  DirDisplay.h
  DirList.c
  DirList.h
  FontDisplay.c
  FontDisplay.h
  LICENSE
  Makefile
  bswap.h
  codec-cfg.c
  codec-cfg.h
  config.h
  config.mak
  csource.lst
  cx25874.h
  drawcontrol.c
  drawcontrol.h
  dualcpu.h
  filelistview.c
  filelistview.h
  find_sub.c
  g2player.h
  get_path.c
  glock.c
  glock.h
  guictrl.c
  guictrl.h
  gv.c
  gvlib_export.h
  help_mp.h
  i2c.h
  imgNumber.h
  imgbinary.h
  m_config.c
  m_config.h
  m_option.c
  m_option.h
  m_struct.c
  m_struct.h
  mangle.h
  mixer.c
  mixer.h
  mmsp2_940_if.c
  mmsp2_if.h
  mp_msg.c
  mp_msg.h
  mplayer.c
  mplayer.h
  open2x-mplayer.sh
  rtc_1024_table.h
  subdisp.c
  subdisp.h
  subreader.c
  subreader.h
  typed.h
  version.h
  vpp.h
  vpts_q.c
  wincetype.h