/* Copyright (C) 2011 The Android Open Source Project
**
** This software is licensed under the terms of the GNU General Public
** License version 2, as published by the Free Software Foundation, and
** may be copied, distributed, and modified under those terms.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
*/

#pragma once

/*********************************************************************
 *********************************************************************
 *****
 *****    DUFF'S DEVICES
 *****
 *****/

#define  DUFF1(_count,_stmnt) \
    do { \
        int __n = (_count); \
        do { \
            _stmnt; \
        } while (--__n > 0); \
    } while (0);

#define  DUFF2(_count,_stmnt)  \
    ({ \
        int   __count = (_count); \
        int   __n     = (__count +1)/2; \
        switch (__count & 1) { \
        case 0: do { _stmnt; \
        case 1:      _stmnt; \
                } while (--__n > 0); \
        } \
    })

#define  DUFF4(_count,_stmnt)  \
    ({ \
        int   __count = (_count); \
        int   __n     = (__count +3)/4; \
        switch (__count & 3) { \
        case 0: do { _stmnt; \
        case 3:      _stmnt; \
        case 2:      _stmnt; \
        case 1:      _stmnt; \
                } while (--__n > 0); \
        } \
    })

#define  DUFF8(_count,_stmnt)  \
    ({ \
        int   __count = (_count); \
        int   __n     = (__count+7)/8; \
        switch (__count & 7) { \
        case 0: do { _stmnt; \
        case 7:      _stmnt; \
        case 6:      _stmnt; \
        case 5:      _stmnt; \
        case 4:      _stmnt; \
        case 3:      _stmnt; \
        case 2:      _stmnt; \
        case 1:      _stmnt; \
                } while (--__n > 0); \
        } \
    })
