[BACK]Return to arc-fxi.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / gpl3 / binutils.old / dist / opcodes

Annotation of src/external/gpl3/binutils.old/dist/opcodes/arc-fxi.h, Revision 1.1.1.3

1.1       christos    1: /* Insert/extract functions for the ARC opcodes.
1.1.1.3 ! christos    2:    Copyright (C) 2015-2018 Free Software Foundation, Inc.
1.1       christos    3:
                      4:    Contributed by Claudiu Zissulescu (claziss@synopsys.com)
                      5:
                      6:    This file is part of libopcodes.
                      7:
                      8:    This library is free software; you can redistribute it and/or modify
                      9:    it under the terms of the GNU General Public License as published by
                     10:    the Free Software Foundation; either version 3, or (at your option)
                     11:    any later version.
                     12:
                     13:    It is distributed in the hope that it will be useful, but WITHOUT
                     14:    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     15:    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
                     16:    License for more details.
                     17:
                     18:    You should have received a copy of the GNU General Public License
                     19:    along with this program; if not, write to the Free Software Foundation,
                     20:    Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
                     21:
                     22: #ifndef INSERT_LIMM
                     23: #define INSERT_LIMM
                     24: /* mask = 00000000000000000000000000000000
                     25:    insn = 00100bbb00101111FBBB111110001001.  */
1.1.1.3 ! christos   26: static unsigned long long
        !            27: insert_limm (unsigned long long insn ATTRIBUTE_UNUSED,
        !            28:             long long int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
1.1       christos   29: {
                     30:
                     31:   return insn;
                     32: }
                     33: #endif /* INSERT_LIMM */
                     34:
                     35: #ifndef EXTRACT_LIMM
                     36: #define EXTRACT_LIMM
                     37: /* mask = 00000000000000000000000000000000.  */
                     38: static ATTRIBUTE_UNUSED int
1.1.1.3 ! christos   39: extract_limm (unsigned long long insn ATTRIBUTE_UNUSED, bfd_boolean * invalid ATTRIBUTE_UNUSED)
1.1       christos   40: {
                     41:   unsigned value = 0;
                     42:
                     43:   return value;
                     44: }
                     45: #endif /* EXTRACT_LIMM */
                     46:
                     47: #ifndef INSERT_UIMM6_20
                     48: #define INSERT_UIMM6_20
                     49: /* mask = 00000000000000000000111111000000
                     50:    insn = 00100bbb01101111FBBBuuuuuu001001.  */
1.1.1.3 ! christos   51: static unsigned long long
        !            52: insert_uimm6_20 (unsigned long long insn ATTRIBUTE_UNUSED,
        !            53:                 long long int value ATTRIBUTE_UNUSED,
1.1       christos   54:                 const char **errmsg ATTRIBUTE_UNUSED)
                     55: {
                     56:
                     57:   insn |= ((value >> 0) & 0x003f) << 6;
                     58:
                     59:   return insn;
                     60: }
                     61: #endif /* INSERT_UIMM6_20 */
                     62:
                     63: #ifndef EXTRACT_UIMM6_20
                     64: #define EXTRACT_UIMM6_20
                     65: /* mask = 00000000000000000000111111000000.  */
1.1.1.3 ! christos   66: static long long int
        !            67: extract_uimm6_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos   68:                  bfd_boolean * invalid ATTRIBUTE_UNUSED)
                     69: {
                     70:   unsigned value = 0;
                     71:
                     72:   value |= ((insn >> 6) & 0x003f) << 0;
                     73:
                     74:   return value;
                     75: }
                     76: #endif /* EXTRACT_UIMM6_20 */
                     77:
                     78: #ifndef INSERT_SIMM12_20
                     79: #define INSERT_SIMM12_20
                     80: /* mask = 00000000000000000000111111222222
                     81:    insn = 00110bbb10101000FBBBssssssSSSSSS.  */
1.1.1.3 ! christos   82: static unsigned long long
        !            83: insert_simm12_20 (unsigned long long insn ATTRIBUTE_UNUSED,
        !            84:                  long long int value ATTRIBUTE_UNUSED,
1.1       christos   85:                  const char **errmsg ATTRIBUTE_UNUSED)
                     86: {
                     87:
                     88:   insn |= ((value >> 0) & 0x003f) << 6;
                     89:   insn |= ((value >> 6) & 0x003f) << 0;
                     90:
                     91:   return insn;
                     92: }
                     93: #endif /* INSERT_SIMM12_20 */
                     94:
                     95: #ifndef EXTRACT_SIMM12_20
                     96: #define EXTRACT_SIMM12_20
                     97: /* mask = 00000000000000000000111111222222.  */
1.1.1.3 ! christos   98: static long long int
        !            99: extract_simm12_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  100:                   bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    101: {
                    102:   int value = 0;
                    103:
                    104:   value |= ((insn >> 6) & 0x003f) << 0;
                    105:   value |= ((insn >> 0) & 0x003f) << 6;
                    106:
                    107:   /* Extend the sign.  */
                    108:   int signbit = 1 << (12 - 1);
                    109:   value = (value ^ signbit) - signbit;
                    110:
                    111:   return value;
                    112: }
                    113: #endif /* EXTRACT_SIMM12_20 */
                    114:
                    115: #ifndef INSERT_SIMM3_5_S
                    116: #define INSERT_SIMM3_5_S
                    117: /* mask = 0000011100000000
                    118:    insn = 01110ssshhh001HH.  */
                    119: static ATTRIBUTE_UNUSED unsigned
1.1.1.3 ! christos  120: insert_simm3_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           121:                  long long int value ATTRIBUTE_UNUSED,
1.1       christos  122:                  const char **errmsg ATTRIBUTE_UNUSED)
                    123: {
                    124:
                    125:   insn |= ((value >> 0) & 0x0007) << 8;
                    126:
                    127:   return insn;
                    128: }
                    129: #endif /* INSERT_SIMM3_5_S */
                    130:
                    131: #ifndef EXTRACT_SIMM3_5_S
                    132: #define EXTRACT_SIMM3_5_S
                    133: /* mask = 0000011100000000.  */
                    134: static ATTRIBUTE_UNUSED int
1.1.1.3 ! christos  135: extract_simm3_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  136:                   bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    137: {
                    138:   int value = 0;
                    139:
                    140:   value |= ((insn >> 8) & 0x0007) << 0;
                    141:
                    142:   /* Extend the sign.  */
                    143:   int signbit = 1 << (3 - 1);
                    144:   value = (value ^ signbit) - signbit;
                    145:
                    146:   return value;
                    147: }
                    148: #endif /* EXTRACT_SIMM3_5_S */
                    149:
                    150: #ifndef INSERT_LIMM_S
                    151: #define INSERT_LIMM_S
                    152: /* mask = 0000000000000000
                    153:    insn = 01110sss11000111.  */
                    154: static ATTRIBUTE_UNUSED unsigned
1.1.1.3 ! christos  155: insert_limm_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           156:               long long int value ATTRIBUTE_UNUSED,
1.1       christos  157:               const char **errmsg ATTRIBUTE_UNUSED)
                    158: {
                    159:
                    160:   return insn;
                    161: }
                    162: #endif /* INSERT_LIMM_S */
                    163:
                    164: #ifndef EXTRACT_LIMM_S
                    165: #define EXTRACT_LIMM_S
                    166: /* mask = 0000000000000000.  */
                    167: static ATTRIBUTE_UNUSED int
1.1.1.3 ! christos  168: extract_limm_s (unsigned long long insn ATTRIBUTE_UNUSED, bfd_boolean * invalid ATTRIBUTE_UNUSED)
1.1       christos  169: {
                    170:   unsigned value = 0;
                    171:
                    172:   return value;
                    173: }
                    174: #endif /* EXTRACT_LIMM_S */
                    175:
                    176: #ifndef INSERT_UIMM7_A32_11_S
                    177: #define INSERT_UIMM7_A32_11_S
                    178: /* mask = 0000000000011111
                    179:    insn = 11000bbb100uuuuu.  */
1.1.1.3 ! christos  180: static unsigned long long
        !           181: insert_uimm7_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           182:                       long long int value ATTRIBUTE_UNUSED,
1.1       christos  183:                       const char **errmsg ATTRIBUTE_UNUSED)
                    184: {
                    185:   if (value & 0x03)
                    186:     *errmsg = _("Target address is not 32bit aligned.");
                    187:
                    188:   insn |= ((value >> 2) & 0x001f) << 0;
                    189:
                    190:   return insn;
                    191: }
                    192: #endif /* INSERT_UIMM7_A32_11_S */
                    193:
                    194: #ifndef EXTRACT_UIMM7_A32_11_S
                    195: #define EXTRACT_UIMM7_A32_11_S
                    196: /* mask = 0000000000011111.  */
1.1.1.3 ! christos  197: static long long int
        !           198: extract_uimm7_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  199:                        bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    200: {
                    201:   unsigned value = 0;
                    202:
                    203:   value |= ((insn >> 0) & 0x001f) << 2;
                    204:
                    205:   return value;
                    206: }
                    207: #endif /* EXTRACT_UIMM7_A32_11_S */
                    208:
                    209: #ifndef INSERT_UIMM7_9_S
                    210: #define INSERT_UIMM7_9_S
                    211: /* mask = 0000000001111111
                    212:    insn = 11100bbb0uuuuuuu.  */
1.1.1.3 ! christos  213: static unsigned long long
        !           214: insert_uimm7_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           215:                  long long int value ATTRIBUTE_UNUSED,
1.1       christos  216:                  const char **errmsg ATTRIBUTE_UNUSED)
                    217: {
                    218:
                    219:   insn |= ((value >> 0) & 0x007f) << 0;
                    220:
                    221:   return insn;
                    222: }
                    223: #endif /* INSERT_UIMM7_9_S */
                    224:
                    225: #ifndef EXTRACT_UIMM7_9_S
                    226: #define EXTRACT_UIMM7_9_S
                    227: /* mask = 0000000001111111.  */
1.1.1.3 ! christos  228: static long long int
        !           229: extract_uimm7_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  230:                   bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    231: {
                    232:   unsigned value = 0;
                    233:
                    234:   value |= ((insn >> 0) & 0x007f) << 0;
                    235:
                    236:   return value;
                    237: }
                    238: #endif /* EXTRACT_UIMM7_9_S */
                    239:
                    240: #ifndef INSERT_UIMM3_13_S
                    241: #define INSERT_UIMM3_13_S
                    242: /* mask = 0000000000000111
                    243:    insn = 01101bbbccc00uuu.  */
1.1.1.3 ! christos  244: static unsigned long long
        !           245: insert_uimm3_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           246:                   long long int value ATTRIBUTE_UNUSED,
1.1       christos  247:                   const char **errmsg ATTRIBUTE_UNUSED)
                    248: {
                    249:
                    250:   insn |= ((value >> 0) & 0x0007) << 0;
                    251:
                    252:   return insn;
                    253: }
                    254: #endif /* INSERT_UIMM3_13_S */
                    255:
                    256: #ifndef EXTRACT_UIMM3_13_S
                    257: #define EXTRACT_UIMM3_13_S
                    258: /* mask = 0000000000000111.  */
1.1.1.3 ! christos  259: static long long int
        !           260: extract_uimm3_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  261:                    bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    262: {
                    263:   unsigned value = 0;
                    264:
                    265:   value |= ((insn >> 0) & 0x0007) << 0;
                    266:
                    267:   return value;
                    268: }
                    269: #endif /* EXTRACT_UIMM3_13_S */
                    270:
                    271: #ifndef INSERT_SIMM11_A32_7_S
                    272: #define INSERT_SIMM11_A32_7_S
                    273: /* mask = 0000000111111111
                    274:    insn = 1100111sssssssss.  */
1.1.1.3 ! christos  275: static unsigned long long
        !           276: insert_simm11_a32_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           277:                       long long int value ATTRIBUTE_UNUSED,
1.1       christos  278:                       const char **errmsg ATTRIBUTE_UNUSED)
                    279: {
                    280:   if (value & 0x03)
                    281:     *errmsg = _("Target address is not 32bit aligned.");
                    282:
                    283:   insn |= ((value >> 2) & 0x01ff) << 0;
                    284:
                    285:   return insn;
                    286: }
                    287: #endif /* INSERT_SIMM11_A32_7_S */
                    288:
                    289: #ifndef EXTRACT_SIMM11_A32_7_S
                    290: #define EXTRACT_SIMM11_A32_7_S
                    291: /* mask = 0000000111111111.  */
1.1.1.3 ! christos  292: static long long int
        !           293: extract_simm11_a32_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  294:                        bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    295: {
                    296:   int value = 0;
                    297:
                    298:   value |= ((insn >> 0) & 0x01ff) << 2;
                    299:
                    300:   /* Extend the sign.  */
                    301:   int signbit = 1 << (11 - 1);
                    302:   value = (value ^ signbit) - signbit;
                    303:
                    304:   return value;
                    305: }
                    306: #endif /* EXTRACT_SIMM11_A32_7_S */
                    307:
                    308: #ifndef INSERT_UIMM6_13_S
                    309: #define INSERT_UIMM6_13_S
                    310: /* mask = 0000000002220111
                    311:    insn = 01001bbb0UUU1uuu.  */
1.1.1.3 ! christos  312: static unsigned long long
        !           313: insert_uimm6_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           314:                   long long int value ATTRIBUTE_UNUSED,
1.1       christos  315:                   const char **errmsg ATTRIBUTE_UNUSED)
                    316: {
                    317:
                    318:   insn |= ((value >> 0) & 0x0007) << 0;
                    319:   insn |= ((value >> 3) & 0x0007) << 4;
                    320:
                    321:   return insn;
                    322: }
                    323: #endif /* INSERT_UIMM6_13_S */
                    324:
                    325: #ifndef EXTRACT_UIMM6_13_S
                    326: #define EXTRACT_UIMM6_13_S
                    327: /* mask = 0000000002220111.  */
1.1.1.3 ! christos  328: static long long int
        !           329: extract_uimm6_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  330:                    bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    331: {
                    332:   unsigned value = 0;
                    333:
                    334:   value |= ((insn >> 0) & 0x0007) << 0;
                    335:   value |= ((insn >> 4) & 0x0007) << 3;
                    336:
                    337:   return value;
                    338: }
                    339: #endif /* EXTRACT_UIMM6_13_S */
                    340:
                    341: #ifndef INSERT_UIMM5_11_S
                    342: #define INSERT_UIMM5_11_S
                    343: /* mask = 0000000000011111
                    344:    insn = 10111bbb000uuuuu.  */
1.1.1.3 ! christos  345: static unsigned long long
        !           346: insert_uimm5_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           347:                   long long int value ATTRIBUTE_UNUSED,
1.1       christos  348:                   const char **errmsg ATTRIBUTE_UNUSED)
                    349: {
                    350:
                    351:   insn |= ((value >> 0) & 0x001f) << 0;
                    352:
                    353:   return insn;
                    354: }
                    355: #endif /* INSERT_UIMM5_11_S */
                    356:
                    357: #ifndef EXTRACT_UIMM5_11_S
                    358: #define EXTRACT_UIMM5_11_S
                    359: /* mask = 0000000000011111.  */
1.1.1.3 ! christos  360: static long long int
        !           361: extract_uimm5_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  362:                    bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    363: {
                    364:   unsigned value = 0;
                    365:
                    366:   value |= ((insn >> 0) & 0x001f) << 0;
                    367:
                    368:   return value;
                    369: }
                    370: #endif /* EXTRACT_UIMM5_11_S */
                    371:
                    372: #ifndef INSERT_SIMM9_A16_8
                    373: #define INSERT_SIMM9_A16_8
                    374: /* mask = 00000000111111102000000000000000
                    375:    insn = 00001bbbsssssss1SBBBCCCCCCN01110.  */
1.1.1.3 ! christos  376: static unsigned long long
        !           377: insert_simm9_a16_8 (unsigned long long insn ATTRIBUTE_UNUSED,
        !           378:                    long long int value ATTRIBUTE_UNUSED,
1.1       christos  379:                    const char **errmsg ATTRIBUTE_UNUSED)
                    380: {
                    381:   if (value & 0x01)
                    382:     *errmsg = _("Target address is not 16bit aligned.");
                    383:
                    384:   insn |= ((value >> 1) & 0x007f) << 17;
                    385:   insn |= ((value >> 8) & 0x0001) << 15;
                    386:
                    387:   return insn;
                    388: }
                    389: #endif /* INSERT_SIMM9_A16_8 */
                    390:
                    391: #ifndef EXTRACT_SIMM9_A16_8
                    392: #define EXTRACT_SIMM9_A16_8
                    393: /* mask = 00000000111111102000000000000000.  */
1.1.1.3 ! christos  394: static long long int
        !           395: extract_simm9_a16_8 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  396:                     bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    397: {
                    398:   int value = 0;
                    399:
                    400:   value |= ((insn >> 17) & 0x007f) << 1;
                    401:   value |= ((insn >> 15) & 0x0001) << 8;
                    402:
                    403:   /* Extend the sign.  */
                    404:   int signbit = 1 << (9 - 1);
                    405:   value = (value ^ signbit) - signbit;
                    406:
                    407:   return value;
                    408: }
                    409: #endif /* EXTRACT_SIMM9_A16_8 */
                    410:
                    411: #ifndef INSERT_UIMM6_8
                    412: #define INSERT_UIMM6_8
                    413: /* mask = 00000000000000000000111111000000
                    414:    insn = 00001bbbsssssss1SBBBuuuuuuN11110.  */
1.1.1.3 ! christos  415: static unsigned long long
        !           416: insert_uimm6_8 (unsigned long long insn ATTRIBUTE_UNUSED,
        !           417:                long long int value ATTRIBUTE_UNUSED,
1.1       christos  418:                const char **errmsg ATTRIBUTE_UNUSED)
                    419: {
                    420:
                    421:   insn |= ((value >> 0) & 0x003f) << 6;
                    422:
                    423:   return insn;
                    424: }
                    425: #endif /* INSERT_UIMM6_8 */
                    426:
                    427: #ifndef EXTRACT_UIMM6_8
                    428: #define EXTRACT_UIMM6_8
                    429: /* mask = 00000000000000000000111111000000.  */
1.1.1.3 ! christos  430: static long long int
        !           431: extract_uimm6_8 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  432:                 bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    433: {
                    434:   unsigned value = 0;
                    435:
                    436:   value |= ((insn >> 6) & 0x003f) << 0;
                    437:
                    438:   return value;
                    439: }
                    440: #endif /* EXTRACT_UIMM6_8 */
                    441:
                    442: #ifndef INSERT_SIMM21_A16_5
                    443: #define INSERT_SIMM21_A16_5
                    444: /* mask = 00000111111111102222222222000000
                    445:    insn = 00000ssssssssss0SSSSSSSSSSNQQQQQ.  */
1.1.1.3 ! christos  446: static unsigned long long
        !           447: insert_simm21_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
        !           448:                     long long int value ATTRIBUTE_UNUSED,
1.1       christos  449:                     const char **errmsg ATTRIBUTE_UNUSED)
                    450: {
                    451:   if (value & 0x01)
                    452:     *errmsg = _("Target address is not 16bit aligned.");
                    453:
                    454:   insn |= ((value >> 1) & 0x03ff) << 17;
                    455:   insn |= ((value >> 11) & 0x03ff) << 6;
                    456:
                    457:   return insn;
                    458: }
                    459: #endif /* INSERT_SIMM21_A16_5 */
                    460:
                    461: #ifndef EXTRACT_SIMM21_A16_5
                    462: #define EXTRACT_SIMM21_A16_5
                    463: /* mask = 00000111111111102222222222000000.  */
1.1.1.3 ! christos  464: static long long int
        !           465: extract_simm21_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  466:                      bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    467: {
                    468:   int value = 0;
                    469:
                    470:   value |= ((insn >> 17) & 0x03ff) << 1;
                    471:   value |= ((insn >> 6) & 0x03ff) << 11;
                    472:
                    473:   /* Extend the sign.  */
                    474:   int signbit = 1 << (21 - 1);
                    475:   value = (value ^ signbit) - signbit;
                    476:
                    477:   return value;
                    478: }
                    479: #endif /* EXTRACT_SIMM21_A16_5 */
                    480:
                    481: #ifndef INSERT_SIMM25_A16_5
                    482: #define INSERT_SIMM25_A16_5
                    483: /* mask = 00000111111111102222222222003333
                    484:    insn = 00000ssssssssss1SSSSSSSSSSNRtttt.  */
1.1.1.3 ! christos  485: static unsigned long long
        !           486: insert_simm25_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
        !           487:                     long long int value ATTRIBUTE_UNUSED,
1.1       christos  488:                     const char **errmsg ATTRIBUTE_UNUSED)
                    489: {
                    490:   if (value & 0x01)
                    491:     *errmsg = _("Target address is not 16bit aligned.");
                    492:
                    493:   insn |= ((value >> 1) & 0x03ff) << 17;
                    494:   insn |= ((value >> 11) & 0x03ff) << 6;
                    495:   insn |= ((value >> 21) & 0x000f) << 0;
                    496:
                    497:   return insn;
                    498: }
                    499: #endif /* INSERT_SIMM25_A16_5 */
                    500:
                    501: #ifndef EXTRACT_SIMM25_A16_5
                    502: #define EXTRACT_SIMM25_A16_5
                    503: /* mask = 00000111111111102222222222003333.  */
1.1.1.3 ! christos  504: static long long int
        !           505: extract_simm25_a16_5 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  506:                      bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    507: {
                    508:   int value = 0;
                    509:
                    510:   value |= ((insn >> 17) & 0x03ff) << 1;
                    511:   value |= ((insn >> 6) & 0x03ff) << 11;
                    512:   value |= ((insn >> 0) & 0x000f) << 21;
                    513:
                    514:   /* Extend the sign.  */
                    515:   int signbit = 1 << (25 - 1);
                    516:   value = (value ^ signbit) - signbit;
                    517:
                    518:   return value;
                    519: }
                    520: #endif /* EXTRACT_SIMM25_A16_5 */
                    521:
                    522: #ifndef INSERT_SIMM10_A16_7_S
                    523: #define INSERT_SIMM10_A16_7_S
                    524: /* mask = 0000000111111111
                    525:    insn = 1111001sssssssss.  */
1.1.1.3 ! christos  526: static unsigned long long
        !           527: insert_simm10_a16_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           528:                       long long int value ATTRIBUTE_UNUSED,
1.1       christos  529:                       const char **errmsg ATTRIBUTE_UNUSED)
                    530: {
                    531:   if (value & 0x01)
                    532:     *errmsg = _("Target address is not 16bit aligned.");
                    533:
                    534:   insn |= ((value >> 1) & 0x01ff) << 0;
                    535:
                    536:   return insn;
                    537: }
                    538: #endif /* INSERT_SIMM10_A16_7_S */
                    539:
                    540: #ifndef EXTRACT_SIMM10_A16_7_S
                    541: #define EXTRACT_SIMM10_A16_7_S
                    542: /* mask = 0000000111111111.  */
1.1.1.3 ! christos  543: static long long int
        !           544: extract_simm10_a16_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  545:                        bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    546: {
                    547:   int value = 0;
                    548:
                    549:   value |= ((insn >> 0) & 0x01ff) << 1;
                    550:
                    551:   /* Extend the sign.  */
                    552:   int signbit = 1 << (10 - 1);
                    553:   value = (value ^ signbit) - signbit;
                    554:
                    555:   return value;
                    556: }
                    557: #endif /* EXTRACT_SIMM10_A16_7_S */
                    558:
                    559: #ifndef INSERT_SIMM7_A16_10_S
                    560: #define INSERT_SIMM7_A16_10_S
                    561: /* mask = 0000000000111111
                    562:    insn = 1111011000ssssss.  */
1.1.1.3 ! christos  563: static unsigned long long
        !           564: insert_simm7_a16_10_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           565:                       long long int value ATTRIBUTE_UNUSED,
1.1       christos  566:                       const char **errmsg ATTRIBUTE_UNUSED)
                    567: {
                    568:   if (value & 0x01)
                    569:     *errmsg = _("Target address is not 16bit aligned.");
                    570:
                    571:   insn |= ((value >> 1) & 0x003f) << 0;
                    572:
                    573:   return insn;
                    574: }
                    575: #endif /* INSERT_SIMM7_A16_10_S */
                    576:
                    577: #ifndef EXTRACT_SIMM7_A16_10_S
                    578: #define EXTRACT_SIMM7_A16_10_S
                    579: /* mask = 0000000000111111.  */
1.1.1.3 ! christos  580: static long long int
        !           581: extract_simm7_a16_10_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  582:                        bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    583: {
                    584:   int value = 0;
                    585:
                    586:   value |= ((insn >> 0) & 0x003f) << 1;
                    587:
                    588:   /* Extend the sign.  */
                    589:   int signbit = 1 << (7 - 1);
                    590:   value = (value ^ signbit) - signbit;
                    591:
                    592:   return value;
                    593: }
                    594: #endif /* EXTRACT_SIMM7_A16_10_S */
                    595:
                    596: #ifndef INSERT_SIMM21_A32_5
                    597: #define INSERT_SIMM21_A32_5
                    598: /* mask = 00000111111111002222222222000000
                    599:    insn = 00001sssssssss00SSSSSSSSSSNQQQQQ.  */
1.1.1.3 ! christos  600: static unsigned long long
        !           601: insert_simm21_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
        !           602:                     long long int value ATTRIBUTE_UNUSED,
1.1       christos  603:                     const char **errmsg ATTRIBUTE_UNUSED)
                    604: {
                    605:   if (value & 0x03)
                    606:     *errmsg = _("Target address is not 32bit aligned.");
                    607:
                    608:   insn |= ((value >> 2) & 0x01ff) << 18;
                    609:   insn |= ((value >> 11) & 0x03ff) << 6;
                    610:
                    611:   return insn;
                    612: }
                    613: #endif /* INSERT_SIMM21_A32_5 */
                    614:
                    615: #ifndef EXTRACT_SIMM21_A32_5
                    616: #define EXTRACT_SIMM21_A32_5
                    617: /* mask = 00000111111111002222222222000000.  */
1.1.1.3 ! christos  618: static long long int
        !           619: extract_simm21_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  620:                      bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    621: {
                    622:   int value = 0;
                    623:
                    624:   value |= ((insn >> 18) & 0x01ff) << 2;
                    625:   value |= ((insn >> 6) & 0x03ff) << 11;
                    626:
                    627:   /* Extend the sign.  */
                    628:   int signbit = 1 << (21 - 1);
                    629:   value = (value ^ signbit) - signbit;
                    630:
                    631:   return value;
                    632: }
                    633: #endif /* EXTRACT_SIMM21_A32_5 */
                    634:
                    635: #ifndef INSERT_SIMM25_A32_5
                    636: #define INSERT_SIMM25_A32_5
                    637: /* mask = 00000111111111002222222222003333
                    638:    insn = 00001sssssssss10SSSSSSSSSSNRtttt.  */
1.1.1.3 ! christos  639: static unsigned long long
        !           640: insert_simm25_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
        !           641:                     long long int value ATTRIBUTE_UNUSED,
1.1       christos  642:                     const char **errmsg ATTRIBUTE_UNUSED)
                    643: {
                    644:   if (value & 0x03)
                    645:     *errmsg = _("Target address is not 32bit aligned.");
                    646:
                    647:   insn |= ((value >> 2) & 0x01ff) << 18;
                    648:   insn |= ((value >> 11) & 0x03ff) << 6;
                    649:   insn |= ((value >> 21) & 0x000f) << 0;
                    650:
                    651:   return insn;
                    652: }
                    653: #endif /* INSERT_SIMM25_A32_5 */
                    654:
                    655: #ifndef EXTRACT_SIMM25_A32_5
                    656: #define EXTRACT_SIMM25_A32_5
                    657: /* mask = 00000111111111002222222222003333.  */
1.1.1.3 ! christos  658: static long long int
        !           659: extract_simm25_a32_5 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  660:                      bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    661: {
                    662:   int value = 0;
                    663:
                    664:   value |= ((insn >> 18) & 0x01ff) << 2;
                    665:   value |= ((insn >> 6) & 0x03ff) << 11;
                    666:   value |= ((insn >> 0) & 0x000f) << 21;
                    667:
                    668:   /* Extend the sign.  */
                    669:   int signbit = 1 << (25 - 1);
                    670:   value = (value ^ signbit) - signbit;
                    671:
                    672:   return value;
                    673: }
                    674: #endif /* EXTRACT_SIMM25_A32_5 */
                    675:
                    676: #ifndef INSERT_SIMM13_A32_5_S
                    677: #define INSERT_SIMM13_A32_5_S
                    678: /* mask = 0000011111111111
                    679:    insn = 11111sssssssssss.  */
1.1.1.3 ! christos  680: static unsigned long long
        !           681: insert_simm13_a32_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           682:                       long long int value ATTRIBUTE_UNUSED,
1.1       christos  683:                       const char **errmsg ATTRIBUTE_UNUSED)
                    684: {
                    685:   if (value & 0x03)
                    686:     *errmsg = _("Target address is not 32bit aligned.");
                    687:
                    688:   insn |= ((value >> 2) & 0x07ff) << 0;
                    689:
                    690:   return insn;
                    691: }
                    692: #endif /* INSERT_SIMM13_A32_5_S */
                    693:
                    694: #ifndef EXTRACT_SIMM13_A32_5_S
                    695: #define EXTRACT_SIMM13_A32_5_S
                    696: /* mask = 0000011111111111.  */
1.1.1.3 ! christos  697: static long long int
        !           698: extract_simm13_a32_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  699:                        bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    700: {
                    701:   int value = 0;
                    702:
                    703:   value |= ((insn >> 0) & 0x07ff) << 2;
                    704:
                    705:   /* Extend the sign.  */
                    706:   int signbit = 1 << (13 - 1);
                    707:   value = (value ^ signbit) - signbit;
                    708:
                    709:   return value;
                    710: }
                    711: #endif /* EXTRACT_SIMM13_A32_5_S */
                    712:
                    713: #ifndef INSERT_SIMM8_A16_9_S
                    714: #define INSERT_SIMM8_A16_9_S
                    715: /* mask = 0000000001111111
                    716:    insn = 11101bbb1sssssss.  */
1.1.1.3 ! christos  717: static unsigned long long
        !           718: insert_simm8_a16_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           719:                      long long int value ATTRIBUTE_UNUSED,
1.1       christos  720:                      const char **errmsg ATTRIBUTE_UNUSED)
                    721: {
                    722:   if (value & 0x01)
                    723:     *errmsg = _("Target address is not 16bit aligned.");
                    724:
                    725:   insn |= ((value >> 1) & 0x007f) << 0;
                    726:
                    727:   return insn;
                    728: }
                    729: #endif /* INSERT_SIMM8_A16_9_S */
                    730:
                    731: #ifndef EXTRACT_SIMM8_A16_9_S
                    732: #define EXTRACT_SIMM8_A16_9_S
                    733: /* mask = 0000000001111111.  */
1.1.1.3 ! christos  734: static long long int
        !           735: extract_simm8_a16_9_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  736:                       bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    737: {
                    738:   int value = 0;
                    739:
                    740:   value |= ((insn >> 0) & 0x007f) << 1;
                    741:
                    742:   /* Extend the sign.  */
                    743:   int signbit = 1 << (8 - 1);
                    744:   value = (value ^ signbit) - signbit;
                    745:
                    746:   return value;
                    747: }
                    748: #endif /* EXTRACT_SIMM8_A16_9_S */
                    749:
                    750: #ifndef INSERT_UIMM3_23
                    751: #define INSERT_UIMM3_23
                    752: /* mask = 00000000000000000000000111000000
                    753:    insn = 00100011011011110001RRRuuu111111.  */
1.1.1.3 ! christos  754: static unsigned long long
        !           755: insert_uimm3_23 (unsigned long long insn ATTRIBUTE_UNUSED,
        !           756:                 long long int value ATTRIBUTE_UNUSED,
1.1       christos  757:                 const char **errmsg ATTRIBUTE_UNUSED)
                    758: {
                    759:
                    760:   insn |= ((value >> 0) & 0x0007) << 6;
                    761:
                    762:   return insn;
                    763: }
                    764: #endif /* INSERT_UIMM3_23 */
                    765:
                    766: #ifndef EXTRACT_UIMM3_23
                    767: #define EXTRACT_UIMM3_23
                    768: /* mask = 00000000000000000000000111000000.  */
1.1.1.3 ! christos  769: static long long int
        !           770: extract_uimm3_23 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  771:                  bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    772: {
                    773:   unsigned value = 0;
                    774:
                    775:   value |= ((insn >> 6) & 0x0007) << 0;
                    776:
                    777:   return value;
                    778: }
                    779: #endif /* EXTRACT_UIMM3_23 */
                    780:
                    781: #ifndef INSERT_UIMM10_6_S
                    782: #define INSERT_UIMM10_6_S
                    783: /* mask = 0000001111111111
                    784:    insn = 010111uuuuuuuuuu.  */
1.1.1.3 ! christos  785: static unsigned long long
        !           786: insert_uimm10_6_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           787:                   long long int value ATTRIBUTE_UNUSED,
1.1       christos  788:                   const char **errmsg ATTRIBUTE_UNUSED)
                    789: {
                    790:
                    791:   insn |= ((value >> 0) & 0x03ff) << 0;
                    792:
                    793:   return insn;
                    794: }
                    795: #endif /* INSERT_UIMM10_6_S */
                    796:
                    797: #ifndef EXTRACT_UIMM10_6_S
                    798: #define EXTRACT_UIMM10_6_S
                    799: /* mask = 0000001111111111.  */
1.1.1.3 ! christos  800: static long long int
        !           801: extract_uimm10_6_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  802:                    bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    803: {
                    804:   unsigned value = 0;
                    805:
                    806:   value |= ((insn >> 0) & 0x03ff) << 0;
                    807:
                    808:   return value;
                    809: }
                    810: #endif /* EXTRACT_UIMM10_6_S */
                    811:
                    812: #ifndef INSERT_UIMM6_11_S
                    813: #define INSERT_UIMM6_11_S
                    814: /* mask = 0000002200011110
                    815:    insn = 110000UU111uuuu0.  */
1.1.1.3 ! christos  816: static unsigned long long
        !           817: insert_uimm6_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           818:                   long long int value ATTRIBUTE_UNUSED,
1.1       christos  819:                   const char **errmsg ATTRIBUTE_UNUSED)
                    820: {
                    821:
                    822:   insn |= ((value >> 0) & 0x000f) << 1;
                    823:   insn |= ((value >> 4) & 0x0003) << 8;
                    824:
                    825:   return insn;
                    826: }
                    827: #endif /* INSERT_UIMM6_11_S */
                    828:
                    829: #ifndef EXTRACT_UIMM6_11_S
                    830: #define EXTRACT_UIMM6_11_S
                    831: /* mask = 0000002200011110.  */
1.1.1.3 ! christos  832: static long long int
        !           833: extract_uimm6_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  834:                    bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    835: {
                    836:   unsigned value = 0;
                    837:
                    838:   value |= ((insn >> 1) & 0x000f) << 0;
                    839:   value |= ((insn >> 8) & 0x0003) << 4;
                    840:
                    841:   return value;
                    842: }
                    843: #endif /* EXTRACT_UIMM6_11_S */
                    844:
                    845: #ifndef INSERT_SIMM9_8
                    846: #define INSERT_SIMM9_8
                    847: /* mask = 00000000111111112000000000000000
                    848:    insn = 00010bbbssssssssSBBBDaaZZXAAAAAA.  */
1.1.1.3 ! christos  849: static unsigned long long
        !           850: insert_simm9_8 (unsigned long long insn ATTRIBUTE_UNUSED,
        !           851:                long long int value ATTRIBUTE_UNUSED,
1.1       christos  852:                const char **errmsg ATTRIBUTE_UNUSED)
                    853: {
                    854:
                    855:   insn |= ((value >> 0) & 0x00ff) << 16;
                    856:   insn |= ((value >> 8) & 0x0001) << 15;
                    857:
                    858:   return insn;
                    859: }
                    860: #endif /* INSERT_SIMM9_8 */
                    861:
                    862: #ifndef EXTRACT_SIMM9_8
                    863: #define EXTRACT_SIMM9_8
                    864: /* mask = 00000000111111112000000000000000.  */
1.1.1.3 ! christos  865: static long long int
        !           866: extract_simm9_8 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  867:                 bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    868: {
                    869:   int value = 0;
                    870:
                    871:   value |= ((insn >> 16) & 0x00ff) << 0;
                    872:   value |= ((insn >> 15) & 0x0001) << 8;
                    873:
                    874:   /* Extend the sign.  */
                    875:   int signbit = 1 << (9 - 1);
                    876:   value = (value ^ signbit) - signbit;
                    877:
                    878:   return value;
                    879: }
                    880: #endif /* EXTRACT_SIMM9_8 */
                    881:
                    882: #ifndef INSERT_UIMM10_A32_8_S
                    883: #define INSERT_UIMM10_A32_8_S
                    884: /* mask = 0000000011111111
                    885:    insn = 11010bbbuuuuuuuu.  */
1.1.1.3 ! christos  886: static unsigned long long
        !           887: insert_uimm10_a32_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           888:                       long long int value ATTRIBUTE_UNUSED,
1.1       christos  889:                       const char **errmsg ATTRIBUTE_UNUSED)
                    890: {
                    891:   if (value & 0x03)
                    892:     *errmsg = _("Target address is not 32bit aligned.");
                    893:
                    894:   insn |= ((value >> 2) & 0x00ff) << 0;
                    895:
                    896:   return insn;
                    897: }
                    898: #endif /* INSERT_UIMM10_A32_8_S */
                    899:
                    900: #ifndef EXTRACT_UIMM10_A32_8_S
                    901: #define EXTRACT_UIMM10_A32_8_S
                    902: /* mask = 0000000011111111.  */
1.1.1.3 ! christos  903: static long long int
        !           904: extract_uimm10_a32_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  905:                        bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    906: {
                    907:   unsigned value = 0;
                    908:
                    909:   value |= ((insn >> 0) & 0x00ff) << 2;
                    910:
                    911:   return value;
                    912: }
                    913: #endif /* EXTRACT_UIMM10_A32_8_S */
                    914:
                    915: #ifndef INSERT_SIMM9_7_S
                    916: #define INSERT_SIMM9_7_S
                    917: /* mask = 0000000111111111
                    918:    insn = 1100101sssssssss.  */
1.1.1.3 ! christos  919: static unsigned long long
        !           920: insert_simm9_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           921:                  long long int value ATTRIBUTE_UNUSED,
1.1       christos  922:                  const char **errmsg ATTRIBUTE_UNUSED)
                    923: {
                    924:
                    925:   insn |= ((value >> 0) & 0x01ff) << 0;
                    926:
                    927:   return insn;
                    928: }
                    929: #endif /* INSERT_SIMM9_7_S */
                    930:
                    931: #ifndef EXTRACT_SIMM9_7_S
                    932: #define EXTRACT_SIMM9_7_S
                    933: /* mask = 0000000111111111.  */
1.1.1.3 ! christos  934: static long long int
        !           935: extract_simm9_7_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  936:                   bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    937: {
                    938:   int value = 0;
                    939:
                    940:   value |= ((insn >> 0) & 0x01ff) << 0;
                    941:
                    942:   /* Extend the sign.  */
                    943:   int signbit = 1 << (9 - 1);
                    944:   value = (value ^ signbit) - signbit;
                    945:
                    946:   return value;
                    947: }
                    948: #endif /* EXTRACT_SIMM9_7_S */
                    949:
                    950: #ifndef INSERT_UIMM6_A16_11_S
                    951: #define INSERT_UIMM6_A16_11_S
                    952: /* mask = 0000000000011111
                    953:    insn = 10010bbbcccuuuuu.  */
1.1.1.3 ! christos  954: static unsigned long long
        !           955: insert_uimm6_a16_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           956:                       long long int value ATTRIBUTE_UNUSED,
1.1       christos  957:                       const char **errmsg ATTRIBUTE_UNUSED)
                    958: {
                    959:   if (value & 0x01)
                    960:     *errmsg = _("Target address is not 16bit aligned.");
                    961:
                    962:   insn |= ((value >> 1) & 0x001f) << 0;
                    963:
                    964:   return insn;
                    965: }
                    966: #endif /* INSERT_UIMM6_A16_11_S */
                    967:
                    968: #ifndef EXTRACT_UIMM6_A16_11_S
                    969: #define EXTRACT_UIMM6_A16_11_S
                    970: /* mask = 0000000000011111.  */
1.1.1.3 ! christos  971: static long long int
        !           972: extract_uimm6_a16_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos  973:                        bfd_boolean * invalid ATTRIBUTE_UNUSED)
                    974: {
                    975:   unsigned value = 0;
                    976:
                    977:   value |= ((insn >> 0) & 0x001f) << 1;
                    978:
                    979:   return value;
                    980: }
                    981: #endif /* EXTRACT_UIMM6_A16_11_S */
                    982:
                    983: #ifndef INSERT_UIMM5_A32_11_S
                    984: #define INSERT_UIMM5_A32_11_S
                    985: /* mask = 0000020000011000
                    986:    insn = 01000U00hhhuu1HH.  */
1.1.1.3 ! christos  987: static unsigned long long
        !           988: insert_uimm5_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !           989:                       long long int value ATTRIBUTE_UNUSED,
1.1       christos  990:                       const char **errmsg ATTRIBUTE_UNUSED)
                    991: {
                    992:   if (value & 0x03)
                    993:     *errmsg = _("Target address is not 32bit aligned.");
                    994:
                    995:   insn |= ((value >> 2) & 0x0003) << 3;
                    996:   insn |= ((value >> 4) & 0x0001) << 10;
                    997:
                    998:   return insn;
                    999: }
                   1000: #endif /* INSERT_UIMM5_A32_11_S */
                   1001:
                   1002: #ifndef EXTRACT_UIMM5_A32_11_S
                   1003: #define EXTRACT_UIMM5_A32_11_S
                   1004: /* mask = 0000020000011000.  */
1.1.1.3 ! christos 1005: static long long int
        !          1006: extract_uimm5_a32_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1007:                        bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1008: {
                   1009:   unsigned value = 0;
                   1010:
                   1011:   value |= ((insn >> 3) & 0x0003) << 2;
                   1012:   value |= ((insn >> 10) & 0x0001) << 4;
                   1013:
                   1014:   return value;
                   1015: }
                   1016: #endif /* EXTRACT_UIMM5_A32_11_S */
                   1017:
                   1018: #ifndef INSERT_SIMM11_A32_13_S
                   1019: #define INSERT_SIMM11_A32_13_S
                   1020: /* mask = 0000022222200111
                   1021:    insn = 01010SSSSSS00sss.  */
1.1.1.3 ! christos 1022: static unsigned long long
        !          1023: insert_simm11_a32_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1024:                        long long int value ATTRIBUTE_UNUSED,
1.1       christos 1025:                        const char **errmsg ATTRIBUTE_UNUSED)
                   1026: {
                   1027:   if (value & 0x03)
                   1028:     *errmsg = _("Target address is not 32bit aligned.");
                   1029:
                   1030:   insn |= ((value >> 2) & 0x0007) << 0;
                   1031:   insn |= ((value >> 5) & 0x003f) << 5;
                   1032:
                   1033:   return insn;
                   1034: }
                   1035: #endif /* INSERT_SIMM11_A32_13_S */
                   1036:
                   1037: #ifndef EXTRACT_SIMM11_A32_13_S
                   1038: #define EXTRACT_SIMM11_A32_13_S
                   1039: /* mask = 0000022222200111.  */
1.1.1.3 ! christos 1040: static long long int
        !          1041: extract_simm11_a32_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1042:                         bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1043: {
                   1044:   int value = 0;
                   1045:
                   1046:   value |= ((insn >> 0) & 0x0007) << 2;
                   1047:   value |= ((insn >> 5) & 0x003f) << 5;
                   1048:
                   1049:   /* Extend the sign.  */
                   1050:   int signbit = 1 << (11 - 1);
                   1051:   value = (value ^ signbit) - signbit;
                   1052:
                   1053:   return value;
                   1054: }
                   1055: #endif /* EXTRACT_SIMM11_A32_13_S */
                   1056:
                   1057: #ifndef INSERT_UIMM7_13_S
                   1058: #define INSERT_UIMM7_13_S
                   1059: /* mask = 0000000022220111
                   1060:    insn = 01010bbbUUUU1uuu.  */
1.1.1.3 ! christos 1061: static unsigned long long
        !          1062: insert_uimm7_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1063:                   long long int value ATTRIBUTE_UNUSED,
1.1       christos 1064:                   const char **errmsg ATTRIBUTE_UNUSED)
                   1065: {
                   1066:
                   1067:   insn |= ((value >> 0) & 0x0007) << 0;
                   1068:   insn |= ((value >> 3) & 0x000f) << 4;
                   1069:
                   1070:   return insn;
                   1071: }
                   1072: #endif /* INSERT_UIMM7_13_S */
                   1073:
                   1074: #ifndef EXTRACT_UIMM7_13_S
                   1075: #define EXTRACT_UIMM7_13_S
                   1076: /* mask = 0000000022220111.  */
1.1.1.3 ! christos 1077: static long long int
        !          1078: extract_uimm7_13_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1079:                    bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1080: {
                   1081:   unsigned value = 0;
                   1082:
                   1083:   value |= ((insn >> 0) & 0x0007) << 0;
                   1084:   value |= ((insn >> 4) & 0x000f) << 3;
                   1085:
                   1086:   return value;
                   1087: }
                   1088: #endif /* EXTRACT_UIMM7_13_S */
                   1089:
                   1090: #ifndef INSERT_UIMM6_A16_21
                   1091: #define INSERT_UIMM6_A16_21
                   1092: /* mask = 00000000000000000000011111000000
                   1093:    insn = 00101bbb01001100RBBBRuuuuuAAAAAA.  */
1.1.1.3 ! christos 1094: static unsigned long long
        !          1095: insert_uimm6_a16_21 (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1096:                     long long int value ATTRIBUTE_UNUSED,
1.1       christos 1097:                     const char **errmsg ATTRIBUTE_UNUSED)
                   1098: {
                   1099:   if (value & 0x01)
                   1100:     *errmsg = _("Target address is not 16bit aligned.");
                   1101:
                   1102:   insn |= ((value >> 1) & 0x001f) << 6;
                   1103:
                   1104:   return insn;
                   1105: }
                   1106: #endif /* INSERT_UIMM6_A16_21 */
                   1107:
                   1108: #ifndef EXTRACT_UIMM6_A16_21
                   1109: #define EXTRACT_UIMM6_A16_21
                   1110: /* mask = 00000000000000000000011111000000.  */
1.1.1.3 ! christos 1111: static long long int
        !          1112: extract_uimm6_a16_21 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1113:                      bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1114: {
                   1115:   unsigned value = 0;
                   1116:
                   1117:   value |= ((insn >> 6) & 0x001f) << 1;
                   1118:
                   1119:   return value;
                   1120: }
                   1121: #endif /* EXTRACT_UIMM6_A16_21 */
                   1122:
                   1123: #ifndef INSERT_UIMM7_11_S
                   1124: #define INSERT_UIMM7_11_S
                   1125: /* mask = 0000022200011110
                   1126:    insn = 11000UUU110uuuu0.  */
1.1.1.3 ! christos 1127: static unsigned long long
        !          1128: insert_uimm7_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1129:                   long long int value ATTRIBUTE_UNUSED,
1.1       christos 1130:                   const char **errmsg ATTRIBUTE_UNUSED)
                   1131: {
                   1132:
                   1133:   insn |= ((value >> 0) & 0x000f) << 1;
                   1134:   insn |= ((value >> 4) & 0x0007) << 8;
                   1135:
                   1136:   return insn;
                   1137: }
                   1138: #endif /* INSERT_UIMM7_11_S */
                   1139:
                   1140: #ifndef EXTRACT_UIMM7_11_S
                   1141: #define EXTRACT_UIMM7_11_S
                   1142: /* mask = 0000022200011110.  */
1.1.1.3 ! christos 1143: static long long int
        !          1144: extract_uimm7_11_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1145:                    bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1146: {
                   1147:   unsigned value = 0;
                   1148:
                   1149:   value |= ((insn >> 1) & 0x000f) << 0;
                   1150:   value |= ((insn >> 8) & 0x0007) << 4;
                   1151:
                   1152:   return value;
                   1153: }
                   1154: #endif /* EXTRACT_UIMM7_11_S */
                   1155:
                   1156: #ifndef INSERT_UIMM7_A16_20
                   1157: #define INSERT_UIMM7_A16_20
                   1158: /* mask = 00000000000000000000111111000000
                   1159:    insn = 00100RRR111010000RRRuuuuuu1QQQQQ.  */
1.1.1.3 ! christos 1160: static unsigned long long
        !          1161: insert_uimm7_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1162:                     long long int value ATTRIBUTE_UNUSED,
1.1       christos 1163:                     const char **errmsg ATTRIBUTE_UNUSED)
                   1164: {
                   1165:   if (value & 0x01)
                   1166:     *errmsg = _("Target address is not 16bit aligned.");
                   1167:
                   1168:   insn |= ((value >> 1) & 0x003f) << 6;
                   1169:
                   1170:   return insn;
                   1171: }
                   1172: #endif /* INSERT_UIMM7_A16_20 */
                   1173:
                   1174: #ifndef EXTRACT_UIMM7_A16_20
                   1175: #define EXTRACT_UIMM7_A16_20
                   1176: /* mask = 00000000000000000000111111000000.  */
1.1.1.3 ! christos 1177: static long long int
        !          1178: extract_uimm7_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1179:                      bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1180: {
                   1181:   unsigned value = 0;
                   1182:
                   1183:   value |= ((insn >> 6) & 0x003f) << 1;
                   1184:
                   1185:   return value;
                   1186: }
                   1187: #endif /* EXTRACT_UIMM7_A16_20 */
                   1188:
                   1189: #ifndef INSERT_SIMM13_A16_20
                   1190: #define INSERT_SIMM13_A16_20
                   1191: /* mask = 00000000000000000000111111222222
                   1192:    insn = 00100RRR101010000RRRssssssSSSSSS.  */
1.1.1.3 ! christos 1193: static unsigned long long
        !          1194: insert_simm13_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1195:                      long long int value ATTRIBUTE_UNUSED,
1.1       christos 1196:                      const char **errmsg ATTRIBUTE_UNUSED)
                   1197: {
                   1198:   if (value & 0x01)
                   1199:     *errmsg = _("Target address is not 16bit aligned.");
                   1200:
                   1201:   insn |= ((value >> 1) & 0x003f) << 6;
                   1202:   insn |= ((value >> 7) & 0x003f) << 0;
                   1203:
                   1204:   return insn;
                   1205: }
                   1206: #endif /* INSERT_SIMM13_A16_20 */
                   1207:
                   1208: #ifndef EXTRACT_SIMM13_A16_20
                   1209: #define EXTRACT_SIMM13_A16_20
                   1210: /* mask = 00000000000000000000111111222222.  */
1.1.1.3 ! christos 1211: static long long int
        !          1212: extract_simm13_a16_20 (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1213:                       bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1214: {
                   1215:   int value = 0;
                   1216:
                   1217:   value |= ((insn >> 6) & 0x003f) << 1;
                   1218:   value |= ((insn >> 0) & 0x003f) << 7;
                   1219:
                   1220:   /* Extend the sign.  */
                   1221:   int signbit = 1 << (13 - 1);
                   1222:   value = (value ^ signbit) - signbit;
                   1223:
                   1224:   return value;
                   1225: }
                   1226: #endif /* EXTRACT_SIMM13_A16_20 */
                   1227:
                   1228: #ifndef INSERT_UIMM8_8_S
                   1229: #define INSERT_UIMM8_8_S
                   1230: /* mask = 0000000011111111
                   1231:    insn = 11011bbbuuuuuuuu.  */
1.1.1.3 ! christos 1232: static unsigned long long
        !          1233: insert_uimm8_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1234:                  long long int value ATTRIBUTE_UNUSED,
1.1       christos 1235:                  const char **errmsg ATTRIBUTE_UNUSED)
                   1236: {
                   1237:
                   1238:   insn |= ((value >> 0) & 0x00ff) << 0;
                   1239:
                   1240:   return insn;
                   1241: }
                   1242: #endif /* INSERT_UIMM8_8_S */
                   1243:
                   1244: #ifndef EXTRACT_UIMM8_8_S
                   1245: #define EXTRACT_UIMM8_8_S
                   1246: /* mask = 0000000011111111.  */
1.1.1.3 ! christos 1247: static long long int
        !          1248: extract_uimm8_8_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1249:                   bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1250: {
                   1251:   unsigned value = 0;
                   1252:
                   1253:   value |= ((insn >> 0) & 0x00ff) << 0;
                   1254:
                   1255:   return value;
                   1256: }
                   1257: #endif /* EXTRACT_UIMM8_8_S */
                   1258:
                   1259: #ifndef INSERT_UIMM6_5_S
                   1260: #define INSERT_UIMM6_5_S
                   1261: /* mask = 0000011111100000
                   1262:    insn = 01111uuuuuu11111.  */
1.1.1.3 ! christos 1263: static unsigned long long
        !          1264: insert_uimm6_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1265:                  long long int value ATTRIBUTE_UNUSED,
1.1       christos 1266:                  const char **errmsg ATTRIBUTE_UNUSED)
                   1267: {
                   1268:
                   1269:   insn |= ((value >> 0) & 0x003f) << 5;
                   1270:
                   1271:   return insn;
                   1272: }
                   1273: #endif /* INSERT_UIMM6_5_S */
                   1274:
                   1275: #ifndef EXTRACT_UIMM6_5_S
                   1276: #define EXTRACT_UIMM6_5_S
                   1277: /* mask = 0000011111100000.  */
1.1.1.3 ! christos 1278: static long long int
        !          1279: extract_uimm6_5_s (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1280:                   bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1281: {
                   1282:   unsigned value = 0;
                   1283:
                   1284:   value |= ((insn >> 5) & 0x003f) << 0;
                   1285:
                   1286:   return value;
                   1287: }
                   1288: #endif /* EXTRACT_UIMM6_5_S */
                   1289:
                   1290: #ifndef INSERT_UIMM6_AXX_
                   1291: #define INSERT_UIMM6_AXX_
                   1292: /* mask = 00000000000000000000000000000000
                   1293:    insn = 00110bbb11100001100001100001QQQQ.  */
                   1294: static ATTRIBUTE_UNUSED unsigned
1.1.1.3 ! christos 1295: insert_uimm6_axx_ (unsigned long long insn ATTRIBUTE_UNUSED,
        !          1296:                   long long int value ATTRIBUTE_UNUSED,
1.1       christos 1297:                   const char **errmsg ATTRIBUTE_UNUSED)
                   1298: {
                   1299:   if (value & 0x3f)
                   1300:     *errmsg = _("Target address is not 512bit aligned.");
                   1301:
                   1302:   return insn;
                   1303: }
                   1304: #endif /* INSERT_UIMM6_AXX_ */
                   1305:
                   1306: #ifndef EXTRACT_UIMM6_AXX_
                   1307: #define EXTRACT_UIMM6_AXX_
                   1308: /* mask = 00000000000000000000000000000000.  */
                   1309: static ATTRIBUTE_UNUSED int
1.1.1.3 ! christos 1310: extract_uimm6_axx_ (unsigned long long insn ATTRIBUTE_UNUSED,
1.1       christos 1311:                    bfd_boolean * invalid ATTRIBUTE_UNUSED)
                   1312: {
                   1313:   unsigned value = 0;
                   1314:
                   1315:   return value;
                   1316: }
                   1317: #endif /* EXTRACT_UIMM6_AXX_ */

CVSweb <webmaster@jp.NetBSD.org>