OpenCores
URL https://opencores.org/ocsvn/or1k_old/or1k_old/trunk

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [rc203soc/] [sw/] [uClinux/] [include/] [asm-armnommu/] [unaligned.h] - Diff between revs 1765 and 1782

Only display areas with differences | Details | Blame | View Log

Rev 1765 Rev 1782
#ifndef __ARM_UNALIGNED_H
#ifndef __ARM_UNALIGNED_H
#define __ARM_UNALIGNED_H
#define __ARM_UNALIGNED_H
 
 
#define get_unaligned(ptr) \
#define get_unaligned(ptr) \
        ((__typeof__(*(ptr)))__get_unaligned((ptr), sizeof(*(ptr))))
        ((__typeof__(*(ptr)))__get_unaligned((ptr), sizeof(*(ptr))))
 
 
#define put_unaligned(val, ptr) \
#define put_unaligned(val, ptr) \
        __put_unaligned((unsigned long)(val), (ptr), sizeof(*(ptr)))
        __put_unaligned((unsigned long)(val), (ptr), sizeof(*(ptr)))
 
 
extern void bad_unaligned_access_length (void);
extern void bad_unaligned_access_length (void);
 
 
extern inline unsigned long __get_unaligned(const void *ptr, size_t size)
extern inline unsigned long __get_unaligned(const void *ptr, size_t size)
{
{
    unsigned long val;
    unsigned long val;
    switch (size) {
    switch (size) {
        case 1:
        case 1:
            val = *(const unsigned char *)ptr;
            val = *(const unsigned char *)ptr;
            break;
            break;
 
 
        case 2:
        case 2:
            val = ((const unsigned char *)ptr)[0] | (((const unsigned char *)ptr)[1] << 8);
            val = ((const unsigned char *)ptr)[0] | (((const unsigned char *)ptr)[1] << 8);
            break;
            break;
 
 
        case 4:
        case 4:
            val = ((const unsigned char *)ptr)[0]        | (((const unsigned char *)ptr)[1] << 8) |
            val = ((const unsigned char *)ptr)[0]        | (((const unsigned char *)ptr)[1] << 8) |
                 (((const unsigned char *)ptr)[2]) << 16 | (((const unsigned char *)ptr)[3] << 24);
                 (((const unsigned char *)ptr)[2]) << 16 | (((const unsigned char *)ptr)[3] << 24);
            break;
            break;
 
 
        default:
        default:
            bad_unaligned_access_length ();
            bad_unaligned_access_length ();
    }
    }
    return val;
    return val;
}
}
 
 
extern inline void __put_unaligned(unsigned long val, void *ptr, size_t size)
extern inline void __put_unaligned(unsigned long val, void *ptr, size_t size)
{
{
    switch (size) {
    switch (size) {
        case 1:
        case 1:
            *(unsigned char *)ptr = val;
            *(unsigned char *)ptr = val;
            break;
            break;
 
 
        case 2:
        case 2:
            ((unsigned char *)ptr)[0] = val;
            ((unsigned char *)ptr)[0] = val;
            ((unsigned char *)ptr)[1] = val >> 8;
            ((unsigned char *)ptr)[1] = val >> 8;
            break;
            break;
 
 
        case 4:
        case 4:
            ((unsigned char *)ptr)[0] = val;
            ((unsigned char *)ptr)[0] = val;
            ((unsigned char *)ptr)[1] = val >> 8;
            ((unsigned char *)ptr)[1] = val >> 8;
            ((unsigned char *)ptr)[2] = val >> 16;
            ((unsigned char *)ptr)[2] = val >> 16;
            ((unsigned char *)ptr)[3] = val >> 24;
            ((unsigned char *)ptr)[3] = val >> 24;
            break;
            break;
 
 
        default:
        default:
            bad_unaligned_access_length ();
            bad_unaligned_access_length ();
    }
    }
}
}
 
 
#endif
#endif
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.