Home | History | Annotate | Download | only in opcodes
      1 /* Assemble V850 instructions.
      2    Copyright (C) 1996-2016 Free Software Foundation, Inc.
      3 
      4    This file is part of the GNU opcodes library.
      5 
      6    This library is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3, or (at your option)
      9    any later version.
     10 
     11    It is distributed in the hope that it will be useful, but WITHOUT
     12    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     13    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     14    License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program; if not, write to the Free Software
     18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19    MA 02110-1301, USA.  */
     20 
     21 #include "sysdep.h"
     22 #include <stdio.h>
     23 #include "opcode/v850.h"
     24 #include "bfd.h"
     25 #include "opintl.h"
     26 
     27 /* Regular opcodes.  */
     28 #define OP(x)		((x & 0x3f) << 5)
     29 #define OP_MASK		OP (0x3f)
     30 
     31 /* Conditional branch opcodes (Format III).  */
     32 #define BOP(x)		((0x58 << 4) | (x & 0x0f))
     33 #define BOP_MASK	((0x78 << 4) | 0x0f)
     34 
     35 /* Conditional branch opcodes (Format VII).  */
     36 #define BOP7(x)		(0x107e0 | (x & 0xf))
     37 #define BOP7_MASK	(0x1ffe0 | 0xf)
     38 
     39 /* One-word opcodes.  */
     40 #define one(x)		((unsigned int) (x))
     41 
     42 /* Two-word opcodes.  */
     43 #define two(x,y)	((unsigned int) (x) | ((unsigned int) (y) << 16))
     44 
     45 
     46 /* The functions used to insert and extract complicated operands.  */
     48 
     49 /* Note: There is a conspiracy between these functions and
     50    v850_insert_operand() in gas/config/tc-v850.c.  Error messages
     51    containing the string 'out of range' will be ignored unless a
     52    specific command line option is given to GAS.  */
     53 
     54 static const char * not_valid    = N_ ("displacement value is not in range and is not aligned");
     55 static const char * out_of_range = N_ ("displacement value is out of range");
     56 static const char * not_aligned  = N_ ("displacement value is not aligned");
     57 
     58 static const char * immediate_out_of_range = N_ ("immediate value is out of range");
     59 static const char * branch_out_of_range = N_ ("branch value out of range");
     60 static const char * branch_out_of_range_and_odd_offset = N_ ("branch value not in range and to odd offset");
     61 static const char * branch_to_odd_offset = N_ ("branch to odd offset");
     62 static const char * pos_out_of_range = N_ ("position value is out of range");
     63 static const char * width_out_of_range = N_ ("width value is out of range");
     64 static const char * selid_out_of_range = N_ ("SelID is out of range");
     65 static const char * vector8_out_of_range = N_ ("vector8 is out of range");
     66 static const char * vector5_out_of_range = N_ ("vector5 is out of range");
     67 static const char * imm10_out_of_range = N_ ("imm10 is out of range");
     68 static const char * sr_selid_out_of_range = N_ ("SR/SelID is out of range");
     69 
     70 int
     71 v850_msg_is_out_of_range (const char* msg)
     72 {
     73   return msg == out_of_range
     74     || msg == immediate_out_of_range
     75     || msg == branch_out_of_range;
     76 }
     77 
     78 static unsigned long
     79 insert_i5div1 (unsigned long insn, long value, const char ** errmsg)
     80 {
     81   if (value > 30 || value < 2)
     82     {
     83       if (value & 1)
     84 	* errmsg = _(not_valid);
     85       else
     86 	* errmsg = _(out_of_range);
     87     }
     88   else if (value & 1)
     89     * errmsg = _(not_aligned);
     90 
     91   value = (32 - value)/2;
     92 
     93   return (insn | ((value << (2+16)) & 0x3c0000));
     94 }
     95 
     96 static unsigned long
     97 extract_i5div1 (unsigned long insn, int * invalid)
     98 {
     99   unsigned long ret = (insn & 0x003c0000) >> (16+2);
    100   ret = 32 - (ret * 2);
    101 
    102   if (invalid != 0)
    103     *invalid = (ret > 30 || ret < 2) ? 1 : 0;
    104   return ret;
    105 }
    106 
    107 static unsigned long
    108 insert_i5div2 (unsigned long insn, long value, const char ** errmsg)
    109 {
    110   if (value > 30 || value < 4)
    111     {
    112       if (value & 1)
    113 	* errmsg = _(not_valid);
    114       else
    115 	* errmsg = _(out_of_range);
    116     }
    117   else if (value & 1)
    118     * errmsg = _(not_aligned);
    119 
    120   value = (32 - value)/2;
    121 
    122   return insn | ((value << (2 + 16)) & 0x3c0000);
    123 }
    124 
    125 static unsigned long
    126 extract_i5div2 (unsigned long insn, int * invalid)
    127 {
    128   unsigned long ret = (insn & 0x003c0000) >> (16+2);
    129   ret = 32 - (ret * 2);
    130 
    131   if (invalid != 0)
    132     *invalid = (ret > 30 || ret < 4) ? 1 : 0;
    133   return ret;
    134 }
    135 
    136 static unsigned long
    137 insert_i5div3 (unsigned long insn, long value, const char ** errmsg)
    138 {
    139   if (value > 32 || value < 2)
    140     {
    141       if (value & 1)
    142 	* errmsg = _(not_valid);
    143       else
    144 	* errmsg = _(out_of_range);
    145     }
    146   else if (value & 1)
    147     * errmsg = _(not_aligned);
    148 
    149   value = (32 - value)/2;
    150 
    151   return insn | ((value << (2+16)) & 0x3c0000);
    152 }
    153 
    154 static unsigned long
    155 extract_i5div3 (unsigned long insn, int * invalid)
    156 {
    157   unsigned long ret = (insn & 0x003c0000) >> (16+2);
    158   ret = 32 - (ret * 2);
    159 
    160   if (invalid != 0)
    161     *invalid = (ret > 32 || ret < 2) ? 1 : 0;
    162   return ret;
    163 }
    164 
    165 static unsigned long
    166 insert_d5_4 (unsigned long insn, long value, const char ** errmsg)
    167 {
    168   if (value > 0x1f || value < 0)
    169     {
    170       if (value & 1)
    171 	* errmsg = _(not_valid);
    172       else
    173 	* errmsg = _(out_of_range);
    174     }
    175   else if (value & 1)
    176     * errmsg = _(not_aligned);
    177 
    178   value >>= 1;
    179 
    180   return insn | (value & 0x0f);
    181 }
    182 
    183 static unsigned long
    184 extract_d5_4 (unsigned long insn, int * invalid)
    185 {
    186   unsigned long ret = (insn & 0x0f);
    187 
    188   ret <<= 1;
    189 
    190   if (invalid != 0)
    191     *invalid = 0;
    192   return ret;
    193 }
    194 
    195 static unsigned long
    196 insert_d8_6 (unsigned long insn, long value, const char ** errmsg)
    197 {
    198   if (value > 0xff || value < 0)
    199     {
    200       if ((value % 4) != 0)
    201 	* errmsg = _(not_valid);
    202       else
    203 	* errmsg = _(out_of_range);
    204     }
    205   else if ((value % 4) != 0)
    206     * errmsg = _(not_aligned);
    207 
    208   value >>= 1;
    209 
    210   return insn | (value & 0x7e);
    211 }
    212 
    213 static unsigned long
    214 extract_d8_6 (unsigned long insn, int * invalid)
    215 {
    216   unsigned long ret = (insn & 0x7e);
    217 
    218   ret <<= 1;
    219 
    220   if (invalid != 0)
    221     *invalid = 0;
    222   return ret;
    223 }
    224 
    225 static unsigned long
    226 insert_d8_7 (unsigned long insn, long value, const char ** errmsg)
    227 {
    228   if (value > 0xff || value < 0)
    229     {
    230       if ((value % 2) != 0)
    231 	* errmsg = _(not_valid);
    232       else
    233 	* errmsg = _(out_of_range);
    234     }
    235   else if ((value % 2) != 0)
    236     * errmsg = _(not_aligned);
    237 
    238   value >>= 1;
    239 
    240   return insn | (value & 0x7f);
    241 }
    242 
    243 static unsigned long
    244 extract_d8_7 (unsigned long insn, int * invalid)
    245 {
    246   unsigned long ret = (insn & 0x7f);
    247 
    248   ret <<= 1;
    249 
    250   if (invalid != 0)
    251     *invalid = 0;
    252   return ret;
    253 }
    254 
    255 static unsigned long
    256 insert_v8 (unsigned long insn, long value, const char ** errmsg)
    257 {
    258   if (value > 0xff || value < 0)
    259     * errmsg = _(immediate_out_of_range);
    260 
    261   return insn | (value & 0x1f) | ((value & 0xe0) << (27-5));
    262 }
    263 
    264 static unsigned long
    265 extract_v8 (unsigned long insn, int * invalid)
    266 {
    267   unsigned long ret = (insn & 0x1f) | ((insn >> (27-5)) & 0xe0);
    268 
    269   if (invalid != 0)
    270     *invalid = 0;
    271   return ret;
    272 }
    273 
    274 static unsigned long
    275 insert_d9 (unsigned long insn, long value, const char ** errmsg)
    276 {
    277   if (value > 0xff || value < -0x100)
    278     {
    279       if ((value % 2) != 0)
    280 	* errmsg = branch_out_of_range_and_odd_offset;
    281       else
    282 	* errmsg = branch_out_of_range;
    283     }
    284   else if ((value % 2) != 0)
    285     * errmsg = branch_to_odd_offset;
    286 
    287   return insn | ((value & 0x1f0) << 7) | ((value & 0x0e) << 3);
    288 }
    289 
    290 static unsigned long
    291 extract_d9 (unsigned long insn, int * invalid)
    292 {
    293   signed long ret = ((insn >> 7) & 0x1f0) | ((insn >> 3) & 0x0e);
    294 
    295   ret = (ret ^ 0x100) - 0x100;
    296 
    297   if (invalid != 0)
    298     *invalid = 0;
    299   return ret;
    300 }
    301 
    302 static unsigned long
    303 insert_u16_loop (unsigned long insn, long value, const char ** errmsg)
    304 {
    305   /* Loop displacement is encoded as a positive value,
    306      even though the instruction branches backwards.  */
    307   if (value < 0 || value > 0xffff)
    308     {
    309       if ((value % 2) != 0)
    310 	* errmsg = branch_out_of_range_and_odd_offset;
    311       else
    312 	* errmsg = branch_out_of_range;
    313     }
    314   else if ((value % 2) != 0)
    315     * errmsg = branch_to_odd_offset;
    316 
    317   return insn | ((value & 0xfffe) << 16);
    318 }
    319 
    320 static unsigned long
    321 extract_u16_loop (unsigned long insn, int * invalid)
    322 {
    323   long ret = (insn >> 16) & 0xfffe;
    324 
    325   if (invalid != 0)
    326     *invalid = 0;
    327   return ret;
    328 }
    329 
    330 static unsigned long
    331 insert_d16_15 (unsigned long insn, long value, const char ** errmsg)
    332 {
    333   if (value > 0x7fff || value < -0x8000)
    334     {
    335       if ((value % 2) != 0)
    336 	* errmsg = _(not_valid);
    337       else
    338 	* errmsg = _(out_of_range);
    339     }
    340   else if ((value % 2) != 0)
    341     * errmsg = _(not_aligned);
    342 
    343   return insn | ((value & 0xfffe) << 16);
    344 }
    345 
    346 static unsigned long
    347 extract_d16_15 (unsigned long insn, int * invalid)
    348 {
    349   signed long ret = (insn >> 16) & 0xfffe;
    350 
    351   ret = (ret ^ 0x8000) - 0x8000;
    352 
    353   if (invalid != 0)
    354     *invalid = 0;
    355   return ret;
    356 }
    357 
    358 static unsigned long
    359 insert_d16_16 (unsigned long insn, signed long value, const char ** errmsg)
    360 {
    361   if (value > 0x7fff || value < -0x8000)
    362     * errmsg = _(out_of_range);
    363 
    364   return insn | ((value & 0xfffe) << 16) | ((value & 1) << 5);
    365 }
    366 
    367 static unsigned long
    368 extract_d16_16 (unsigned long insn, int * invalid)
    369 {
    370   signed long ret = ((insn >> 16) & 0xfffe) | ((insn >> 5) & 1);
    371 
    372   ret = (ret ^ 0x8000) - 0x8000;
    373 
    374   if (invalid != 0)
    375     *invalid = 0;
    376   return ret;
    377 }
    378 
    379 static unsigned long
    380 insert_d17_16 (unsigned long insn, long value, const char ** errmsg)
    381 {
    382   if (value > 0xffff || value < -0x10000)
    383     * errmsg = _(out_of_range);
    384 
    385   return insn | ((value & 0xfffe) << 16) | ((value & 0x10000) >> (16 - 4));
    386 }
    387 
    388 static unsigned long
    389 extract_d17_16 (unsigned long insn, int * invalid)
    390 {
    391   signed long ret = ((insn >> 16) & 0xfffe) | ((insn << (16 - 4)) & 0x10000);
    392 
    393   ret = (ret ^ 0x10000) - 0x10000;
    394 
    395   if (invalid != 0)
    396     *invalid = 0;
    397   return (unsigned long)ret;
    398 }
    399 
    400 static unsigned long
    401 insert_d22 (unsigned long insn, long value, const char ** errmsg)
    402 {
    403   if (value > 0x1fffff || value < -0x200000)
    404     {
    405       if ((value % 2) != 0)
    406 	* errmsg = branch_out_of_range_and_odd_offset;
    407       else
    408 	* errmsg = branch_out_of_range;
    409     }
    410   else if ((value % 2) != 0)
    411     * errmsg = branch_to_odd_offset;
    412 
    413   return insn | ((value & 0xfffe) << 16) | ((value & 0x3f0000) >> 16);
    414 }
    415 
    416 static unsigned long
    417 extract_d22 (unsigned long insn, int * invalid)
    418 {
    419   signed long ret = ((insn >> 16) & 0xfffe) | ((insn << 16) & 0x3f0000);
    420 
    421   ret = (ret ^ 0x200000) - 0x200000;
    422 
    423   if (invalid != 0)
    424     *invalid = 0;
    425   return (unsigned long) ret;
    426 }
    427 
    428 static unsigned long
    429 insert_d23 (unsigned long insn, long value, const char ** errmsg)
    430 {
    431   if (value > 0x3fffff || value < -0x400000)
    432     * errmsg = out_of_range;
    433 
    434   return insn | ((value & 0x7f) << 4) | ((value & 0x7fff80) << (16-7));
    435 }
    436 
    437 static unsigned long
    438 insert_d23_align1 (unsigned long insn, long value, const char ** errmsg)
    439 {
    440   if (value > 0x3fffff || value < -0x400000)
    441     {
    442       if (value & 0x1)
    443 	* errmsg = _(not_valid);
    444       else
    445 	* errmsg = _(out_of_range);
    446     }
    447   else if (value & 0x1)
    448     * errmsg = _(not_aligned);
    449 
    450   return insn | ((value & 0x7e) << 4) | ((value & 0x7fff80) << (16 - 7));
    451 }
    452 
    453 static unsigned long
    454 extract_d23 (unsigned long insn, int * invalid)
    455 {
    456   signed long ret = ((insn >> 4) & 0x7f) | ((insn >> (16-7)) & 0x7fff80);
    457 
    458   ret = (ret ^ 0x400000) - 0x400000;
    459 
    460   if (invalid != 0)
    461     *invalid = 0;
    462   return (unsigned long) ret;
    463 }
    464 
    465 static unsigned long
    466 insert_i9 (unsigned long insn, signed long value, const char ** errmsg)
    467 {
    468   if (value > 0xff || value < -0x100)
    469     * errmsg = _(immediate_out_of_range);
    470 
    471   return insn | ((value & 0x1e0) << 13) | (value & 0x1f);
    472 }
    473 
    474 static unsigned long
    475 extract_i9 (unsigned long insn, int * invalid)
    476 {
    477   signed long ret = ((insn >> 13) & 0x1e0) | (insn & 0x1f);
    478 
    479   ret = (ret ^ 0x100) - 0x100;
    480 
    481   if (invalid != 0)
    482     *invalid = 0;
    483   return ret;
    484 }
    485 
    486 static unsigned long
    487 insert_u9 (unsigned long insn, long v, const char ** errmsg)
    488 {
    489   unsigned long value = (unsigned long) v;
    490 
    491   if (value > 0x1ff)
    492     * errmsg = _(immediate_out_of_range);
    493 
    494   return insn | ((value & 0x1e0) << 13) | (value & 0x1f);
    495 }
    496 
    497 static unsigned long
    498 extract_u9 (unsigned long insn, int * invalid)
    499 {
    500   unsigned long ret = ((insn >> 13) & 0x1e0) | (insn & 0x1f);
    501 
    502   if (invalid != 0)
    503     *invalid = 0;
    504   return ret;
    505 }
    506 
    507 static unsigned long
    508 insert_spe (unsigned long insn, long v, const char ** errmsg)
    509 {
    510   unsigned long value = (unsigned long) v;
    511 
    512   if (value != 3)
    513     * errmsg = _("invalid register for stack adjustment");
    514 
    515   return insn & ~0x180000;
    516 }
    517 
    518 static unsigned long
    519 extract_spe (unsigned long insn ATTRIBUTE_UNUSED, int * invalid)
    520 {
    521   if (invalid != 0)
    522     *invalid = 0;
    523 
    524   return 3;
    525 }
    526 
    527 static unsigned long
    528 insert_r4 (unsigned long insn, long v, const char ** errmsg)
    529 {
    530   unsigned long value = (unsigned long) v;
    531 
    532   if (value >= 32)
    533     * errmsg = _("invalid register name");
    534 
    535   return insn | ((value & 0x01) << 23) | ((value & 0x1e) << 16);
    536 }
    537 
    538 static unsigned long
    539 extract_r4 (unsigned long insn, int * invalid)
    540 {
    541   unsigned long r4;
    542   unsigned long insn2;
    543 
    544   insn2 = insn >> 16;
    545   r4 = (((insn2 & 0x0080) >> 7) | (insn2 & 0x001e));
    546 
    547   if (invalid != 0)
    548     *invalid = 0;
    549 
    550   return r4;
    551 }
    552 
    553 static unsigned long G_pos;
    554 
    555 static unsigned long
    556 insert_POS (unsigned long insn, long pos, const char ** errmsg)
    557 {
    558   if (pos > 0x1f || pos < 0)
    559     * errmsg = _(pos_out_of_range);
    560 
    561   G_pos = (unsigned long) pos;
    562 
    563   return insn; /* Not an oparaton until WIDTH.  */
    564 }
    565 
    566 static unsigned long
    567 extract_POS_U (unsigned long insn, int * invalid)
    568 {
    569   unsigned long pos,lsb;
    570   unsigned long insn2;
    571   insn2 = insn >> 16;
    572 
    573   lsb = ((insn2 & 0x0800) >>  8)
    574       | ((insn2 & 0x000e) >>  1);
    575   lsb += 16;
    576   pos = lsb;
    577 
    578   if (invalid != 0)
    579     *invalid = 0;
    580 
    581   return pos;
    582 }
    583 
    584 static unsigned long
    585 extract_POS_L (unsigned long insn, int * invalid)
    586 {
    587   unsigned long pos,lsb;
    588   unsigned long insn2;
    589   insn2 = insn >> 16;
    590 
    591   lsb = ((insn2 & 0x0800) >>  8)
    592       | ((insn2 & 0x000e) >>  1);
    593   pos = lsb;
    594 
    595   if (invalid != 0)
    596     *invalid = 0;
    597 
    598   return pos;
    599 }
    600 
    601 static unsigned long
    602 insert_WIDTH (unsigned long insn, long width, const char ** errmsg)
    603 {
    604   unsigned long msb, lsb, opc, ret;
    605   unsigned long msb_expand, lsb_expand;
    606 
    607   msb = (unsigned long)width + G_pos - 1;
    608   lsb = G_pos;
    609   opc = 0;
    610   G_pos = 0;
    611 
    612   if (width > 0x20 || width < 0)
    613     * errmsg = _(width_out_of_range);
    614 
    615   if ((msb >= 16) && (lsb >= 16))
    616     opc = 0x0090;
    617   else if ((msb >= 16) && (lsb < 16))
    618     opc = 0x00b0;
    619   else if ((msb < 16) && (lsb < 16))
    620     opc = 0x00d0;
    621   else
    622     * errmsg = _(width_out_of_range);
    623 
    624   msb &= 0x0f;
    625   msb_expand = msb << 12;
    626   lsb &= 0x0f;
    627   lsb_expand = ((lsb & 0x8) << 8)|((lsb & 0x7) << 1);
    628 
    629   ret = (insn & 0x0000ffff) | ((opc | msb_expand | lsb_expand) << 16);
    630 
    631   return ret;
    632 }
    633 
    634 static unsigned long
    635 extract_WIDTH_U (unsigned long insn, int * invalid)
    636 {
    637   unsigned long width, msb, lsb;
    638   unsigned long insn2;
    639   insn2 = insn >> 16;
    640 
    641   msb = ((insn2 & 0xf000) >> 12);
    642   msb += 16;
    643   lsb = ((insn2 & 0x0800) >>  8)
    644       | ((insn2 & 0x000e) >>  1);
    645   lsb += 16;
    646 
    647   if (invalid != 0)
    648     *invalid = 0;
    649 
    650   width = msb - lsb + 1;
    651 
    652   return width;
    653 }
    654 
    655 static unsigned long
    656 extract_WIDTH_M (unsigned long insn, int * invalid)
    657 {
    658   unsigned long width, msb, lsb;
    659   unsigned long insn2;
    660   insn2 = insn >> 16;
    661 
    662   msb = ((insn2 & 0xf000) >> 12) ;
    663   msb += 16;
    664   lsb = ((insn2 & 0x0800) >>  8)
    665       | ((insn2 & 0x000e) >>  1);
    666 
    667   if (invalid != 0)
    668     *invalid = 0;
    669 
    670   width = msb - lsb + 1;
    671 
    672   return width;
    673 }
    674 
    675 static unsigned long
    676 extract_WIDTH_L (unsigned long insn, int * invalid)
    677 {
    678   unsigned long width, msb, lsb;
    679   unsigned long insn2;
    680   insn2 = insn >> 16;
    681 
    682   msb = ((insn2 & 0xf000) >> 12) ;
    683   lsb = ((insn2 & 0x0800) >>  8)
    684       | ((insn2 & 0x000e) >>  1);
    685 
    686   if (invalid != 0)
    687     *invalid = 0;
    688 
    689   width = msb - lsb + 1;
    690 
    691   return width;
    692 }
    693 
    694 static unsigned long
    695 insert_SELID (unsigned long insn, long selid, const char ** errmsg)
    696 {
    697   unsigned long ret;
    698 
    699   if (selid > 0x1f || selid < 0)
    700     * errmsg = _(selid_out_of_range);
    701 
    702   ret = (insn | ((selid & 0x1f) << 27));
    703 
    704   return ret;
    705 }
    706 
    707 static unsigned long
    708 extract_SELID (unsigned long insn, int * invalid)
    709 {
    710   unsigned long selid;
    711   unsigned long insn2;
    712 
    713   insn2 = insn >> 16;
    714 
    715   selid = ((insn2 & 0xf800) >> 11);
    716 
    717   if (invalid != 0)
    718     *invalid = 0;
    719 
    720   return selid;
    721 }
    722 
    723 static unsigned long
    724 insert_VECTOR8 (unsigned long insn, long vector8, const char ** errmsg)
    725 {
    726   unsigned long ret;
    727   unsigned long VVV,vvvvv;
    728 
    729   if (vector8 > 0xff || vector8 < 0)
    730     * errmsg = _(vector8_out_of_range);
    731 
    732   VVV   = (vector8 & 0xe0) >> 5;
    733   vvvvv = (vector8 & 0x1f);
    734 
    735   ret = (insn | (VVV << 27) | vvvvv);
    736 
    737   return ret;
    738 }
    739 
    740 static unsigned long
    741 extract_VECTOR8 (unsigned long insn, int * invalid)
    742 {
    743   unsigned long vector8;
    744   unsigned long VVV,vvvvv;
    745   unsigned long insn2;
    746 
    747   insn2   = insn >> 16;
    748   VVV     = ((insn2 & 0x3800) >> 11);
    749   vvvvv   = (insn & 0x001f);
    750   vector8 = VVV << 5 | vvvvv;
    751 
    752   if (invalid != 0)
    753     *invalid = 0;
    754 
    755   return vector8;
    756 }
    757 
    758 static unsigned long
    759 insert_VECTOR5 (unsigned long insn, long vector5, const char ** errmsg)
    760 {
    761   unsigned long ret;
    762   unsigned long vvvvv;
    763 
    764   if (vector5 > 0x1f || vector5 < 0)
    765     * errmsg = _(vector5_out_of_range);
    766 
    767   vvvvv = (vector5 & 0x1f);
    768 
    769   ret = (insn | vvvvv);
    770 
    771   return ret;
    772 }
    773 
    774 static unsigned long
    775 extract_VECTOR5 (unsigned long insn, int * invalid)
    776 {
    777   unsigned long vector5;
    778 
    779   vector5 = (insn & 0x001f);
    780 
    781   if (invalid != 0)
    782     *invalid = 0;
    783 
    784   return vector5;
    785 }
    786 
    787 static unsigned long
    788 insert_CACHEOP (unsigned long insn, long cacheop, const char ** errmsg ATTRIBUTE_UNUSED)
    789 {
    790   unsigned long ret;
    791   unsigned long pp,PPPPP;
    792 
    793   pp    = (cacheop & 0x60) >> 5;
    794   PPPPP = (cacheop & 0x1f);
    795 
    796   ret = insn | (pp << 11) | (PPPPP << 27);
    797 
    798   return ret;
    799 }
    800 
    801 static unsigned long
    802 extract_CACHEOP (unsigned long insn, int * invalid)
    803 {
    804   unsigned long ret;
    805   unsigned long pp,PPPPP;
    806   unsigned long insn2;
    807 
    808   insn2 = insn >> 16;
    809 
    810   PPPPP = ((insn2 & 0xf800) >> 11);
    811   pp    = ((insn  & 0x1800) >> 11);
    812 
    813   ret   = (pp << 5) | PPPPP;
    814 
    815   if (invalid != 0)
    816     *invalid = 0;
    817 
    818   return ret;
    819 }
    820 
    821 static unsigned long
    822 insert_PREFOP (unsigned long insn, long prefop, const char ** errmsg ATTRIBUTE_UNUSED)
    823 {
    824   unsigned long ret;
    825   unsigned long PPPPP;
    826 
    827   PPPPP = (prefop & 0x1f);
    828 
    829   ret = insn | (PPPPP << 27);
    830 
    831   return ret;
    832 }
    833 
    834 static unsigned long
    835 extract_PREFOP (unsigned long insn, int * invalid)
    836 {
    837   unsigned long ret;
    838   unsigned long PPPPP;
    839   unsigned long insn2;
    840 
    841   insn2 = insn >> 16;
    842 
    843   PPPPP = (insn2 & 0xf800) >> 11;
    844 
    845   ret   = PPPPP;
    846 
    847   if (invalid != 0)
    848     *invalid = 0;
    849 
    850   return ret;
    851 }
    852 
    853 static unsigned long
    854 insert_IMM10U (unsigned long insn, long value, const char ** errmsg)
    855 {
    856   unsigned long imm10, ret;
    857   unsigned long iiiii,IIIII;
    858 
    859   if (value > 0x3ff || value < 0)
    860     * errmsg = _(imm10_out_of_range);
    861 
    862   imm10 = ((unsigned long) value) & 0x3ff;
    863   IIIII = (imm10 >> 5) & 0x1f;
    864   iiiii =  imm10       & 0x1f;
    865 
    866   ret = insn | IIIII << 27 | iiiii;
    867 
    868   return ret;
    869 }
    870 
    871 static unsigned long
    872 extract_IMM10U (unsigned long insn, int * invalid)
    873 {
    874   unsigned long ret;
    875   unsigned long iiiii,IIIII;
    876   unsigned long insn2;
    877   insn2 = insn >> 16;
    878 
    879   IIIII = ((insn2 & 0xf800) >> 11);
    880   iiiii = (insn   & 0x001f);
    881 
    882   ret = (IIIII << 5) | iiiii;
    883 
    884   if (invalid != 0)
    885     *invalid = 0;
    886 
    887   return ret;
    888 }
    889 
    890 static unsigned long
    891 insert_SRSEL1 (unsigned long insn, long value, const char ** errmsg)
    892 {
    893   unsigned long imm10, ret;
    894   unsigned long sr,selid;
    895 
    896   if (value > 0x3ff || value < 0)
    897     * errmsg = _(sr_selid_out_of_range);
    898 
    899   imm10 = (unsigned long) value;
    900   selid = (imm10 & 0x3e0) >> 5;
    901   sr    =  imm10 & 0x1f;
    902 
    903   ret   = insn | selid << 27 | sr;
    904 
    905   return ret;
    906 }
    907 
    908 static unsigned long
    909 extract_SRSEL1 (unsigned long insn, int * invalid)
    910 {
    911   unsigned long ret;
    912   unsigned long sr, selid;
    913   unsigned long insn2;
    914 
    915   insn2 = insn >> 16;
    916 
    917   selid = ((insn2 & 0xf800) >> 11);
    918   sr    = (insn  & 0x001f);
    919 
    920   ret   = (selid << 5) | sr;
    921 
    922   if (invalid != 0)
    923     *invalid = 0;
    924 
    925   return ret;
    926 }
    927 
    928 static unsigned long
    929 insert_SRSEL2 (unsigned long insn, long value, const char ** errmsg)
    930 {
    931   unsigned long imm10, ret;
    932   unsigned long sr, selid;
    933 
    934   if (value > 0x3ff || value < 0)
    935     * errmsg = _(sr_selid_out_of_range);
    936 
    937   imm10 = (unsigned long) value;
    938   selid = (imm10 & 0x3e0) >> 5;
    939   sr    =  imm10 & 0x1f;
    940 
    941   ret   = insn | selid << 27 | sr << 11;
    942 
    943   return ret;
    944 }
    945 
    946 static unsigned long
    947 extract_SRSEL2 (unsigned long insn, int * invalid)
    948 {
    949   unsigned long ret;
    950   unsigned long sr, selid;
    951   unsigned long insn2;
    952 
    953   insn2 = insn >> 16;
    954 
    955   selid = ((insn2 & 0xf800) >> 11);
    956   sr    = ((insn  & 0xf800) >> 11);
    957 
    958   ret   = (selid << 5) | sr;
    959 
    960   if (invalid != 0)
    961     *invalid = 0;
    962 
    963   return ret;
    964 }
    965 
    966 /* Warning: code in gas/config/tc-v850.c examines the contents of this array.
    968    If you change any of the values here, be sure to look for side effects in
    969    that code.  */
    970 const struct v850_operand v850_operands[] =
    971 {
    972 #define UNUSED	0
    973   { 0, 0, NULL, NULL, 0, BFD_RELOC_NONE },
    974 
    975 /* The R1 field in a format 1, 6, 7, 9, C insn.  */
    976 #define R1	(UNUSED + 1)
    977   { 5, 0, NULL, NULL, V850_OPERAND_REG, BFD_RELOC_NONE },
    978 
    979 /* As above, but register 0 is not allowed.  */
    980 #define R1_NOTR0 (R1 + 1)
    981   { 5, 0, NULL, NULL, V850_OPERAND_REG | V850_NOT_R0, BFD_RELOC_NONE },
    982 
    983 /* Even register is allowed.  */
    984 #define R1_EVEN (R1_NOTR0 + 1)
    985   { 4, 1, NULL, NULL, V850_OPERAND_REG | V850_REG_EVEN, BFD_RELOC_NONE },
    986 
    987 /* Bang (bit reverse).  */
    988 #define R1_BANG (R1_EVEN + 1)
    989   { 5, 0, NULL, NULL, V850_OPERAND_REG | V850_OPERAND_BANG, BFD_RELOC_NONE },
    990 
    991 /* Percent (modulo).  */
    992 #define R1_PERCENT (R1_BANG + 1)
    993   { 5, 0, NULL, NULL, V850_OPERAND_REG | V850_OPERAND_PERCENT, BFD_RELOC_NONE },
    994 
    995 /* The R2 field in a format 1, 2, 4, 5, 6, 7, 9, C insn.  */
    996 #define R2 (R1_PERCENT + 1)
    997   { 5, 11, NULL, NULL, V850_OPERAND_REG, BFD_RELOC_NONE },
    998 
    999 /* As above, but register 0 is not allowed.  */
   1000 #define R2_NOTR0 (R2 + 1)
   1001   { 5, 11, NULL, NULL, V850_OPERAND_REG | V850_NOT_R0, BFD_RELOC_NONE },
   1002 
   1003 /* Even register is allowed.  */
   1004 #define R2_EVEN (R2_NOTR0 + 1)
   1005   { 4, 12, NULL, NULL, V850_OPERAND_REG | V850_REG_EVEN, BFD_RELOC_NONE },
   1006 
   1007 /* Reg2 in dispose instruction.  */
   1008 #define R2_DISPOSE	(R2_EVEN + 1)
   1009   { 5, 16, NULL, NULL, V850_OPERAND_REG | V850_NOT_R0, BFD_RELOC_NONE },
   1010 
   1011 /* The R3 field in a format 11, 12, C insn.  */
   1012 #define R3	(R2_DISPOSE + 1)
   1013   { 5, 27, NULL, NULL, V850_OPERAND_REG, BFD_RELOC_NONE },
   1014 
   1015 /* As above, but register 0 is not allowed.  */
   1016 #define R3_NOTR0	(R3 + 1)
   1017   { 5, 27, NULL, NULL, V850_OPERAND_REG | V850_NOT_R0, BFD_RELOC_NONE },
   1018 
   1019 /* As above, but odd number registers are not allowed.  */
   1020 #define R3_EVEN	(R3_NOTR0 + 1)
   1021   { 4, 28, NULL, NULL, V850_OPERAND_REG | V850_REG_EVEN, BFD_RELOC_NONE },
   1022 
   1023 /* As above, but register 0 is not allowed.  */
   1024 #define R3_EVEN_NOTR0	(R3_EVEN + 1)
   1025   { 4, 28, NULL, NULL, V850_OPERAND_REG | V850_REG_EVEN | V850_NOT_R0, BFD_RELOC_NONE },
   1026 
   1027 /* Forth register in FPU Instruction.  */
   1028 #define R4	(R3_EVEN_NOTR0 + 1)
   1029   { 5, 0, insert_r4, extract_r4, V850_OPERAND_REG, BFD_RELOC_NONE },
   1030 
   1031 /* As above, but odd number registers are not allowed.  */
   1032 #define R4_EVEN	(R4 + 1)
   1033   { 4, 17, NULL, NULL, V850_OPERAND_REG | V850_REG_EVEN, BFD_RELOC_NONE },
   1034 
   1035 /* Stack pointer in prepare instruction.  */
   1036 #define SP	(R4_EVEN + 1)
   1037   { 2, 0, insert_spe, extract_spe, V850_OPERAND_REG, BFD_RELOC_NONE },
   1038 
   1039 /* EP Register.  */
   1040 #define EP	(SP + 1)
   1041   { 0, 0, NULL, NULL, V850_OPERAND_EP, BFD_RELOC_NONE },
   1042 
   1043 /* A list of registers in a prepare/dispose instruction.  */
   1044 #define LIST12	(EP + 1)
   1045   { -1, 0xffe00001, NULL, NULL, V850E_OPERAND_REG_LIST, BFD_RELOC_NONE },
   1046 
   1047 /* System register operands.  */
   1048 #define OLDSR1	(LIST12 + 1)
   1049   { 5, 0, NULL, NULL, V850_OPERAND_SRG, BFD_RELOC_NONE },
   1050 
   1051 #define SR1	(OLDSR1 + 1)
   1052   { 0, 0, insert_SRSEL1, extract_SRSEL1, V850_OPERAND_SRG, BFD_RELOC_NONE },
   1053 
   1054 /* The R2 field as a system register.  */
   1055 #define OLDSR2	(SR1 + 1)
   1056   { 5, 11, NULL, NULL, V850_OPERAND_SRG, BFD_RELOC_NONE },
   1057 
   1058 #define SR2	(OLDSR2 + 1)
   1059   { 0, 0, insert_SRSEL2, extract_SRSEL2, V850_OPERAND_SRG, BFD_RELOC_NONE },
   1060 
   1061 /* FPU CC bit position.  */
   1062 #define FFF (SR2 + 1)
   1063   { 3, 17, NULL, NULL, 0, BFD_RELOC_NONE },
   1064 
   1065 /* The 4 bit condition code in a setf instruction.  */
   1066 #define CCCC	(FFF + 1)
   1067   { 4, 0, NULL, NULL, V850_OPERAND_CC, BFD_RELOC_NONE },
   1068 
   1069 /* Condition code in adf,sdf.  */
   1070 #define CCCC_NOTSA	(CCCC + 1)
   1071   { 4, 17, NULL, NULL, V850_OPERAND_CC|V850_NOT_SA, BFD_RELOC_NONE },
   1072 
   1073 /* Condition code in conditional moves.  */
   1074 #define MOVCC	(CCCC_NOTSA + 1)
   1075   { 4, 17, NULL, NULL, V850_OPERAND_CC, BFD_RELOC_NONE },
   1076 
   1077 /* Condition code in FPU.  */
   1078 #define FLOAT_CCCC	(MOVCC + 1)
   1079   { 4, 27, NULL, NULL, V850_OPERAND_FLOAT_CC, BFD_RELOC_NONE },
   1080 
   1081 /* The 1 bit immediate field in format C insn.  */
   1082 #define VI1	(FLOAT_CCCC + 1)
   1083   { 1, 3, NULL, NULL, 0, BFD_RELOC_NONE },
   1084 
   1085 /* The 1 bit immediate field in format C insn.  */
   1086 #define VC1	(VI1 + 1)
   1087   { 1, 0, NULL, NULL, 0, BFD_RELOC_NONE },
   1088 
   1089 /* The 2 bit immediate field in format C insn.  */
   1090 #define DI2	(VC1 + 1)
   1091   { 2, 17, NULL, NULL, 0, BFD_RELOC_NONE },
   1092 
   1093 /* The 2 bit immediate field in format C insn.  */
   1094 #define VI2	(DI2 + 1)
   1095   { 2, 0, NULL, NULL, 0, BFD_RELOC_NONE },
   1096 
   1097 /* The 2 bit immediate field in format C - DUP insn.  */
   1098 #define VI2DUP	(VI2 + 1)
   1099   { 2, 2, NULL, NULL, 0, BFD_RELOC_NONE },
   1100 
   1101 /* The 3 bit immediate field in format 8 insn.  */
   1102 #define B3	(VI2DUP + 1)
   1103   { 3, 11, NULL, NULL, 0, BFD_RELOC_NONE },
   1104 
   1105 /* The 3 bit immediate field in format C insn.  */
   1106 #define DI3	(B3 + 1)
   1107   { 3, 17, NULL, NULL, 0, BFD_RELOC_NONE },
   1108 
   1109 /* The 3 bit immediate field in format C insn.  */
   1110 #define I3U	(DI3 + 1)
   1111   { 3, 0, NULL, NULL, 0, BFD_RELOC_NONE },
   1112 
   1113 /* The 4 bit immediate field in format C insn.  */
   1114 #define I4U	(I3U + 1)
   1115   { 4, 0, NULL, NULL, 0, BFD_RELOC_NONE },
   1116 
   1117 /* The 4 bit immediate field in fetrap.  */
   1118 #define I4U_NOTIMM0	(I4U + 1)
   1119   { 4, 11, NULL, NULL, V850_NOT_IMM0, BFD_RELOC_NONE },
   1120 
   1121 /* The unsigned disp4 field in a sld.bu.  */
   1122 #define D4U	(I4U_NOTIMM0 + 1)
   1123   { 4, 0, NULL, NULL, V850_OPERAND_DISP, BFD_RELOC_V850_TDA_4_4_OFFSET },
   1124 
   1125 /* The imm5 field in a format 2 insn.  */
   1126 #define I5	(D4U + 1)
   1127   { 5, 0, NULL, NULL, V850_OPERAND_SIGNED, BFD_RELOC_NONE },
   1128 
   1129 /* The imm5 field in a format 11 insn.  */
   1130 #define I5DIV1	(I5 + 1)
   1131   { 5, 0, insert_i5div1, extract_i5div1, 0, BFD_RELOC_NONE },
   1132 
   1133 #define I5DIV2	(I5DIV1 + 1)
   1134   { 5, 0, insert_i5div2, extract_i5div2, 0, BFD_RELOC_NONE },
   1135 
   1136 #define I5DIV3	(I5DIV2 + 1)
   1137   { 5, 0, insert_i5div3, extract_i5div3, 0, BFD_RELOC_NONE },
   1138 
   1139 /* The unsigned imm5 field in a format 2 insn.  */
   1140 #define I5U	(I5DIV3 + 1)
   1141   { 5, 0, NULL, NULL, 0, BFD_RELOC_NONE },
   1142 
   1143 /* The imm5 field in a prepare/dispose instruction.  */
   1144 #define IMM5	(I5U + 1)
   1145   { 5, 1, NULL, NULL, 0, BFD_RELOC_NONE },
   1146 
   1147 /* The unsigned disp5 field in a sld.hu.  */
   1148 #define D5_4U	(IMM5 + 1)
   1149   { 5, 0, insert_d5_4, extract_d5_4, V850_OPERAND_DISP, BFD_RELOC_V850_TDA_4_5_OFFSET },
   1150 
   1151 /* The IMM6 field in a callt instruction.  */
   1152 #define IMM6	(D5_4U + 1)
   1153   { 6, 0, NULL, NULL, 0, BFD_RELOC_V850_CALLT_6_7_OFFSET },
   1154 
   1155 /* The signed disp7 field in a format 4 insn.  */
   1156 #define D7U	(IMM6 + 1)
   1157   { 7, 0, NULL, NULL, V850_OPERAND_DISP, BFD_RELOC_V850_TDA_7_7_OFFSET },
   1158 
   1159 /* The unsigned DISP8 field in a format 4 insn.  */
   1160 #define D8_7U	(D7U + 1)
   1161   { 8, 0, insert_d8_7, extract_d8_7, V850_OPERAND_DISP, BFD_RELOC_V850_TDA_7_8_OFFSET },
   1162 
   1163 /* The unsigned DISP8 field in a format 4 insn.  */
   1164 #define D8_6U	(D8_7U + 1)
   1165   { 8, 0, insert_d8_6, extract_d8_6, V850_OPERAND_DISP, BFD_RELOC_V850_TDA_6_8_OFFSET },
   1166 
   1167 /* The unsigned DISP8 field in a format 4 insn.  */
   1168 #define V8	(D8_6U + 1)
   1169   { 8, 0, insert_v8, extract_v8, 0, BFD_RELOC_NONE },
   1170 
   1171 /* The imm9 field in a multiply word.  */
   1172 #define I9	(V8 + 1)
   1173   { 9, 0, insert_i9, extract_i9, V850_OPERAND_SIGNED, BFD_RELOC_NONE },
   1174 
   1175 /* The unsigned imm9 field in a multiply word.  */
   1176 #define U9	(I9 + 1)
   1177   { 9, 0, insert_u9, extract_u9, 0, BFD_RELOC_NONE },
   1178 
   1179 /* The DISP9 field in a format 3 insn.  */
   1180 #define D9	(U9 + 1)
   1181   { 9, 0, insert_d9, extract_d9, V850_OPERAND_SIGNED | V850_OPERAND_DISP | V850_PCREL, BFD_RELOC_V850_9_PCREL },
   1182 
   1183 /* The DISP9 field in a format 3 insn, relaxable.  */
   1184 #define D9_RELAX	(D9 + 1)
   1185   { 9, 0, insert_d9, extract_d9, V850_OPERAND_RELAX | V850_OPERAND_SIGNED | V850_OPERAND_DISP | V850_PCREL, BFD_RELOC_V850_9_PCREL },
   1186 
   1187 /* The imm16 field in a format 6 insn.  */
   1188 #define I16	(D9_RELAX + 1)
   1189   { 16, 16, NULL, NULL, V850_OPERAND_SIGNED, BFD_RELOC_16 },
   1190 
   1191 /* The signed 16 bit immediate following a prepare instruction.  */
   1192 #define IMM16LO	(I16 + 1)
   1193   { 16, 32, NULL, NULL, V850E_IMMEDIATE16 | V850_OPERAND_SIGNED, BFD_RELOC_LO16 },
   1194 
   1195 /* The hi 16 bit immediate following a 32 bit instruction.  */
   1196 #define IMM16HI	(IMM16LO + 1)
   1197   { 16, 16, NULL, NULL, V850E_IMMEDIATE16HI, BFD_RELOC_HI16 },
   1198 
   1199 /* The unsigned imm16 in a format 6 insn.  */
   1200 #define I16U	(IMM16HI + 1)
   1201   { 16, 16, NULL, NULL, 0, BFD_RELOC_16 },
   1202 
   1203 /* The disp16 field in a format 8 insn.  */
   1204 #define D16	(I16U + 1)
   1205   { 16, 16, NULL, NULL, V850_OPERAND_SIGNED | V850_OPERAND_DISP, BFD_RELOC_16 },
   1206 
   1207 /* The disp16 field in an format 7 unsigned byte load insn.  */
   1208 #define D16_16	(D16 + 1)
   1209   { 16, 0, insert_d16_16, extract_d16_16, V850_OPERAND_SIGNED | V850_OPERAND_DISP, BFD_RELOC_V850_16_SPLIT_OFFSET },
   1210 
   1211 /* The disp16 field in a format 6 insn.  */
   1212 #define D16_15	(D16_16 + 1)
   1213   { 16, 0, insert_d16_15, extract_d16_15, V850_OPERAND_SIGNED | V850_OPERAND_DISP , BFD_RELOC_V850_16_S1 },
   1214 
   1215 /* The unsigned DISP16 field in a format 7 insn.  */
   1216 #define D16_LOOP	(D16_15 + 1)
   1217   { 16, 0, insert_u16_loop, extract_u16_loop, V850_OPERAND_RELAX | V850_OPERAND_DISP | V850_PCREL | V850_INVERSE_PCREL, BFD_RELOC_V850_16_PCREL },
   1218 
   1219 /* The DISP17 field in a format 7 insn.  */
   1220 #define D17_16	(D16_LOOP + 1)
   1221   { 17, 0, insert_d17_16, extract_d17_16, V850_OPERAND_SIGNED | V850_OPERAND_DISP | V850_PCREL, BFD_RELOC_V850_17_PCREL },
   1222 
   1223 /* The DISP22 field in a format 4 insn, relaxable.
   1224    This _must_ follow D9_RELAX; the assembler assumes that the longer
   1225    version immediately follows the shorter version for relaxing.  */
   1226 #define D22	(D17_16 + 1)
   1227   { 22, 0, insert_d22, extract_d22, V850_OPERAND_SIGNED | V850_OPERAND_DISP | V850_PCREL, BFD_RELOC_V850_22_PCREL },
   1228 
   1229 #define D23	(D22 + 1)
   1230   { 23, 0, insert_d23, extract_d23, V850E_IMMEDIATE23 | V850_OPERAND_SIGNED | V850_OPERAND_DISP, BFD_RELOC_V850_23 },
   1231 
   1232 #define D23_ALIGN1	(D23 + 1)
   1233   { 23, 0, insert_d23_align1, extract_d23, V850E_IMMEDIATE23 | V850_OPERAND_SIGNED | V850_OPERAND_DISP, BFD_RELOC_V850_23 },
   1234 
   1235 /* The 32 bit immediate following a 32 bit instruction.  */
   1236 #define IMM32	(D23_ALIGN1 + 1)
   1237   { 32, 32, NULL, NULL, V850E_IMMEDIATE32, BFD_RELOC_32 },
   1238 
   1239 #define D32_31	(IMM32 + 1)
   1240   { 32, 32, NULL, NULL, V850E_IMMEDIATE32 | V850_OPERAND_SIGNED | V850_OPERAND_DISP, BFD_RELOC_V850_32_ABS },
   1241 
   1242 #define D32_31_PCREL	(D32_31 + 1)
   1243   { 32, 32, NULL, NULL, V850E_IMMEDIATE32 | V850_OPERAND_SIGNED | V850_OPERAND_DISP | V850_PCREL, BFD_RELOC_V850_32_PCREL },
   1244 
   1245 #define POS_U	(D32_31_PCREL + 1)
   1246   { 0, 0, insert_POS, extract_POS_U, 0, BFD_RELOC_NONE },
   1247 
   1248 #define POS_M	(POS_U + 1)
   1249   { 0, 0, insert_POS, extract_POS_L, 0, BFD_RELOC_NONE },
   1250 
   1251 #define POS_L	(POS_M + 1)
   1252   { 0, 0, insert_POS, extract_POS_L, 0, BFD_RELOC_NONE },
   1253 
   1254 #define WIDTH_U	(POS_L + 1)
   1255   { 0, 0, insert_WIDTH, extract_WIDTH_U, 0, BFD_RELOC_NONE },
   1256 
   1257 #define WIDTH_M	(WIDTH_U + 1)
   1258   { 0, 0, insert_WIDTH, extract_WIDTH_M, 0, BFD_RELOC_NONE },
   1259 
   1260 #define WIDTH_L	(WIDTH_M + 1)
   1261   { 0, 0, insert_WIDTH, extract_WIDTH_L, 0, BFD_RELOC_NONE },
   1262 
   1263 #define SELID	(WIDTH_L + 1)
   1264   { 5, 27, insert_SELID, extract_SELID, 0, BFD_RELOC_NONE },
   1265 
   1266 #define RIE_IMM5	(SELID + 1)
   1267   { 5, 11, NULL, NULL, 0, BFD_RELOC_NONE },
   1268 
   1269 #define RIE_IMM4	(RIE_IMM5 + 1)
   1270   { 4, 0, NULL, NULL, 0, BFD_RELOC_NONE },
   1271 
   1272 #define VECTOR8	(RIE_IMM4 + 1)
   1273   { 0, 0, insert_VECTOR8, extract_VECTOR8, 0, BFD_RELOC_NONE },
   1274 
   1275 #define VECTOR5	(VECTOR8 + 1)
   1276   { 0, 0, insert_VECTOR5, extract_VECTOR5, 0, BFD_RELOC_NONE },
   1277 
   1278 #define VR1	(VECTOR5 + 1)
   1279   { 5, 0, NULL, NULL, V850_OPERAND_VREG, BFD_RELOC_NONE },
   1280 
   1281 #define VR2	(VR1 + 1)
   1282   { 5, 11, NULL, NULL, V850_OPERAND_VREG, BFD_RELOC_NONE },
   1283 
   1284 #define CACHEOP	(VR2 + 1)
   1285   { 0, 0, insert_CACHEOP, extract_CACHEOP, V850_OPERAND_CACHEOP, BFD_RELOC_NONE },
   1286 
   1287 #define PREFOP	(CACHEOP + 1)
   1288   { 0, 0, insert_PREFOP, extract_PREFOP, V850_OPERAND_PREFOP, BFD_RELOC_NONE },
   1289 
   1290 #define IMM10U	(PREFOP + 1)
   1291   { 0, 0, insert_IMM10U, extract_IMM10U, 0, BFD_RELOC_NONE },
   1292 };
   1293 
   1294 
   1295 /* Reg - Reg instruction format (Format I).  */
   1297 #define IF1	{R1, R2}
   1298 
   1299 /* Imm - Reg instruction format (Format II).  */
   1300 #define IF2	{I5, R2}
   1301 
   1302 /* Conditional branch instruction format (Format III).  */
   1303 #define IF3	{D9_RELAX}
   1304 
   1305 /* 3 operand instruction (Format VI).  */
   1306 #define IF6	{I16, R1, R2}
   1307 
   1308 /* 3 operand instruction (Format VI).  */
   1309 #define IF6U	{I16U, R1, R2}
   1310 
   1311 /* Conditional branch instruction format (Format VII).  */
   1312 #define IF7	{D17_16}
   1313 
   1314 
   1315 /* The opcode table.
   1317 
   1318    The format of the opcode table is:
   1319 
   1320    NAME		OPCODE			MASK		       { OPERANDS }	   MEMOP    PROCESSOR
   1321 
   1322    NAME is the name of the instruction.
   1323    OPCODE is the instruction opcode.
   1324    MASK is the opcode mask; this is used to tell the disassembler
   1325      which bits in the actual opcode must match OPCODE.
   1326    OPERANDS is the list of operands.
   1327    MEMOP specifies which operand (if any) is a memory operand.
   1328    PROCESSORS specifies which CPU(s) support the opcode.
   1329 
   1330    The disassembler reads the table in order and prints the first
   1331    instruction which matches, so this table is sorted to put more
   1332    specific instructions before more general instructions.  It is also
   1333    sorted by major opcode.
   1334 
   1335    The table is also sorted by name.  This is used by the assembler.
   1336    When parsing an instruction the assembler finds the first occurance
   1337    of the name of the instruciton in this table and then attempts to
   1338    match the instruction's arguments with description of the operands
   1339    associated with the entry it has just found in this table.  If the
   1340    match fails the assembler looks at the next entry in this table.
   1341    If that entry has the same name as the previous entry, then it
   1342    tries to match the instruction against that entry and so on.  This
   1343    is how the assembler copes with multiple, different formats of the
   1344    same instruction.  */
   1345 
   1346 const struct v850_opcode v850_opcodes[] =
   1347 {
   1348 /* Standard instructions.  */
   1349 { "add",	OP  (0x0e),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1350 { "add",	OP  (0x12),		OP_MASK,		IF2, 			0, PROCESSOR_ALL },
   1351 
   1352 { "addi",	OP  (0x30),		OP_MASK,		IF6, 			0, PROCESSOR_ALL },
   1353 
   1354 { "adf",	two (0x07e0, 0x03a0),	two (0x07e0, 0x07e1),	{CCCC_NOTSA, R1, R2, R3},    	0, PROCESSOR_V850E2_UP },
   1355 
   1356 { "and",	OP (0x0a),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1357 
   1358 { "andi",	OP (0x36),		OP_MASK,		IF6U, 			0, PROCESSOR_ALL },
   1359 
   1360 	/* Signed integer.  */
   1361 { "bge",	BOP (0xe),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1362 { "bgt",	BOP (0xf),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1363 { "ble",	BOP (0x7),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1364 { "blt",	BOP (0x6),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1365 	/* Unsigned integer.  */
   1366 { "bh",		BOP (0xb),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1367 { "bl",		BOP (0x1),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1368 { "bnh",	BOP (0x3),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1369 { "bnl",	BOP (0x9),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1370 	/* Common.  */
   1371 { "be",		BOP (0x2),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1372 { "bne",	BOP (0xa),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1373 	/* Others.  */
   1374 { "bc",		BOP (0x1),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1375 { "bf",		BOP (0xa),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1376 { "bn",		BOP (0x4),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1377 { "bnc",	BOP (0x9),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1378 { "bnv",	BOP (0x8),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1379 { "bnz",	BOP (0xa),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1380 { "bp",		BOP (0xc),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1381 { "br",		BOP (0x5),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1382 { "bsa",	BOP (0xd),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1383 { "bt",		BOP (0x2),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1384 { "bv",		BOP (0x0),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1385 { "bz",		BOP (0x2),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1386 
   1387 /* Signed integer.  */
   1388 { "bge",  two (0x07ee, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1389 { "bgt",  two (0x07ef, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1390 { "ble",  two (0x07e7, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1391 { "blt",  two (0x07e6, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1392 /* Unsigned integer.  */
   1393 { "bh",   two (0x07eb, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1394 { "bl",   two (0x07e1, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1395 { "bnh",  two (0x07e3, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1396 { "bnl",  two (0x07e9, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1397 /* Common.  */
   1398 { "be",   two (0x07e2, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1399 { "bne",  two (0x07ea, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1400 /* Others.  */
   1401 { "bc",   two (0x07e1, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1402 { "bf",   two (0x07ea, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1403 { "bn",   two (0x07e4, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1404 { "bnc",  two (0x07e9, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1405 { "bnv",  two (0x07e8, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1406 { "bnz",  two (0x07ea, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1407 { "bp",   two (0x07ec, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1408 { "br",   two (0x07e5, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1409 { "bsa",  two (0x07ed, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1410 { "bt",   two (0x07e2, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1411 { "bv",   two (0x07e0, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1412 { "bz",   two (0x07e2, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP },
   1413 /* Bcond disp17 Gas local alias(not defined in spec).  */
   1414 
   1415 /* Signed integer.  */
   1416 { "bge17",  two (0x07ee, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1417 { "bgt17",  two (0x07ef, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1418 { "ble17",  two (0x07e7, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1419 { "blt17",  two (0x07e6, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1420 /* Unsigned integer.  */
   1421 { "bh17",   two (0x07eb, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1422 { "bl17",   two (0x07e1, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1423 { "bnh17",  two (0x07e3, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1424 { "bnl17",  two (0x07e9, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1425 /* Common.  */
   1426 { "be17",   two (0x07e2, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1427 { "bne17",  two (0x07ea, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1428 /* Others.  */
   1429 { "bc17",   two (0x07e1, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1430 { "bf17",   two (0x07ea, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1431 { "bn17",   two (0x07e4, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1432 { "bnc17",  two (0x07e9, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1433 { "bnv17",  two (0x07e8, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1434 { "bnz17",  two (0x07ea, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1435 { "bp17",   two (0x07ec, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1436 { "br17",   two (0x07e5, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1437 { "bsa17",  two (0x07ed, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1438 { "bt17",   two (0x07e2, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1439 { "bv17",   two (0x07e0, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1440 { "bz17",   two (0x07e2, 0x0001), two (0xffef, 0x0001), IF7, 0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1441 
   1442 { "bsh",	two (0x07e0, 0x0342),	two (0x07ff, 0x07ff), 	{R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1443 
   1444 { "bsw",	two (0x07e0, 0x0340),	two (0x07ff, 0x07ff), 	{R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1445 
   1446 /* v850e3v5 bitfield instructions.  */
   1447 { "bins",	two (0x07e0, 0x0090),	two (0x07e0, 0x07f1), {R1, POS_U, WIDTH_U, R2}, 		0, PROCESSOR_V850E3V5_UP },
   1448 { "bins",	two (0x07e0, 0x00b0),	two (0x07e0, 0x07f1), {R1, POS_M, WIDTH_M, R2}, 		0, PROCESSOR_V850E3V5_UP },
   1449 { "bins",	two (0x07e0, 0x00d0),	two (0x07e0, 0x07f1), {R1, POS_L, WIDTH_L, R2}, 		0, PROCESSOR_V850E3V5_UP },
   1450 /* Gas local alias(not defined in spec).  */
   1451 { "binsu",two (0x07e0, 0x0090),	two (0x07e0, 0x07f1), {R1, POS_U, WIDTH_U, R2},			0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1452 { "binsm",two (0x07e0, 0x00b0),	two (0x07e0, 0x07f1), {R1, POS_M, WIDTH_M, R2}, 		0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1453 { "binsl",two (0x07e0, 0x00d0),	two (0x07e0, 0x07f1), {R1, POS_L, WIDTH_L, R2}, 		0, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1454 
   1455 { "cache",	two (0xe7e0, 0x0160),	two (0xe7e0, 0x07ff),	{CACHEOP, R1}, 		2, PROCESSOR_V850E3V5_UP },
   1456 
   1457 { "callt",	one (0x0200),		one (0xffc0), 	      	{IMM6},			0, PROCESSOR_NOT_V850 },
   1458 
   1459 { "caxi",	two (0x07e0, 0x00ee),	two (0x07e0, 0x07ff),	{R1, R2, R3},		1, PROCESSOR_V850E2_UP },
   1460 
   1461 { "clr1",	two (0x87c0, 0x0000),	two (0xc7e0, 0x0000),	{B3, D16, R1}, 		3, PROCESSOR_ALL },
   1462 { "clr1",	two (0x07e0, 0x00e4),	two (0x07e0, 0xffff),   {R2, R1},    		3, PROCESSOR_NOT_V850 },
   1463 
   1464 { "cmov",	two (0x07e0, 0x0320),	two (0x07e0, 0x07e1), 	{MOVCC, R1, R2, R3}, 	0, PROCESSOR_NOT_V850 },
   1465 { "cmov",	two (0x07e0, 0x0300),	two (0x07e0, 0x07e1), 	{MOVCC, I5, R2, R3}, 	0, PROCESSOR_NOT_V850 },
   1466 
   1467 { "cmp",	OP  (0x0f),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1468 { "cmp",	OP  (0x13),		OP_MASK,		IF2, 			0, PROCESSOR_ALL },
   1469 
   1470 { "ctret", 	two (0x07e0, 0x0144),	two (0xffff, 0xffff), 	{0}, 			0, PROCESSOR_NOT_V850 },
   1471 
   1472 { "dbcp",	one (0xe840),		one (0xffff),		{0},			0, PROCESSOR_V850E3V5_UP },
   1473 
   1474 { "dbhvtrap",	one (0xe040),		one (0xffff),		{0},			0, PROCESSOR_V850E3V5_UP },
   1475 
   1476 { "dbpush",	two (0x5fe0, 0x0160),	two (0xffe0, 0x07ff),	{R1, R3}, 		0, PROCESSOR_V850E3V5_UP },
   1477 
   1478 { "dbret",	two (0x07e0, 0x0146),	two (0xffff, 0xffff),	{0},			0, PROCESSOR_NOT_V850 },
   1479 
   1480 { "dbtag",	two (0xcfe0, 0x0160),	two (0xffe0, 0x07ff),	{IMM10U},		0, PROCESSOR_V850E3V5_UP },
   1481 
   1482 { "dbtrap",	one (0xf840),		one (0xffff),		{0},			0, PROCESSOR_NOT_V850 },
   1483 
   1484 { "di",		two (0x07e0, 0x0160),	two (0xffff, 0xffff),	{0}, 			0, PROCESSOR_ALL },
   1485 
   1486 { "dispose",	two (0x0640, 0x0000),   two (0xffc0, 0x0000),   {IMM5, LIST12, R2_DISPOSE},3, PROCESSOR_NOT_V850 },
   1487 { "dispose",	two (0x0640, 0x0000),   two (0xffc0, 0x001f), 	{IMM5, LIST12}, 	0, PROCESSOR_NOT_V850 },
   1488 
   1489 { "div",	two (0x07e0, 0x02c0),	two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1490 
   1491 { "divh",	two (0x07e0, 0x0280),   two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1492 { "divh",	OP  (0x02),		OP_MASK,		{R1_NOTR0, R2_NOTR0},	0, PROCESSOR_ALL },
   1493 
   1494 { "divhn",	two (0x07e0, 0x0280),	two (0x07e0, 0x07c3), 	{I5DIV1, R1, R2, R3},	0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_EXTENSION },
   1495 
   1496 { "divhu",	two (0x07e0, 0x0282),   two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1497 
   1498 { "divhun",	two (0x07e0, 0x0282),	two (0x07e0, 0x07c3), 	{I5DIV1, R1, R2, R3}, 	0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_EXTENSION },
   1499 { "divn",	two (0x07e0, 0x02c0),	two (0x07e0, 0x07c3), 	{I5DIV2, R1, R2, R3}, 	0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_EXTENSION },
   1500 
   1501 { "divq",	two (0x07e0, 0x02fc),   two (0x07e0, 0x07ff), 	{R1, R2, R3},		0, PROCESSOR_V850E2_UP },
   1502 
   1503 { "divqu",	two (0x07e0, 0x02fe),   two (0x07e0, 0x07ff), 	{R1, R2, R3},		0, PROCESSOR_V850E2_UP },
   1504 
   1505 { "divu",	two (0x07e0, 0x02c2),	two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1506 
   1507 { "divun",	two (0x07e0, 0x02c2),	two (0x07e0, 0x07c3), 	{I5DIV2, R1, R2, R3}, 	0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_EXTENSION },
   1508 
   1509 { "dst",	two (0x07e0, 0x0134),	two (0xfffff, 0xffff),	{0}, 		0, PROCESSOR_V850E3V5_UP },
   1510 
   1511 { "ei",		two (0x87e0, 0x0160),	two (0xffff, 0xffff),	{0}, 			0, PROCESSOR_ALL },
   1512 
   1513 { "eiret",	two (0x07e0, 0x0148),	two (0xffff, 0xffff),	{0},			0, PROCESSOR_V850E2_UP },
   1514 
   1515 { "est",	two (0x07e0, 0x0132),	two (0xfffff, 0xffff),	{0}, 		0, PROCESSOR_V850E3V5_UP },
   1516 
   1517 { "feret",	two (0x07e0, 0x014a),	two (0xffff, 0xffff),	{0},			0, PROCESSOR_V850E2_UP },
   1518 
   1519 { "fetrap",	one (0x0040),		one (0x87ff),		{I4U_NOTIMM0},		0, PROCESSOR_V850E2_UP },
   1520 
   1521 { "halt",	two (0x07e0, 0x0120),	two (0xffff, 0xffff),	{0}, 			0, PROCESSOR_ALL },
   1522 
   1523 { "hsh",	two (0x07e0, 0x0346),	two (0x07ff, 0x07ff), 	{R2, R3}, 		0, PROCESSOR_V850E2_UP },
   1524 
   1525 { "hsw",	two (0x07e0, 0x0344),	two (0x07ff, 0x07ff), 	{R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1526 
   1527 { "hvcall",	two (0xd7e0, 0x4160),	two (0xffe0, 0x41ff),	{VECTOR8}, 		0, PROCESSOR_V850E3V5_UP },
   1528 { "hvtrap",	two (0x07e0, 0x0110),	two (0xffe0, 0xffff),	{VECTOR5}, 		0, PROCESSOR_V850E3V5_UP },
   1529 
   1530 { "jarl",	two (0xc7e0, 0x0160),	two (0xffe0, 0x07ff),	{R1, R3_NOTR0},   	1, PROCESSOR_V850E3V5_UP},
   1531 { "jarl",	two (0x0780, 0x0000),	two (0x07c0, 0x0001),	{D22, R2_NOTR0}, 	0, PROCESSOR_ALL},
   1532 { "jarl",	one (0x02e0),		one (0xffe0),		{D32_31_PCREL, R1_NOTR0}, 	0, PROCESSOR_V850E2_UP },
   1533 /* Gas local alias (not defined in spec).  */
   1534 { "jarlr", two (0xc7e0, 0x0160),	two (0xffe0, 0x07ff),	{R1, R3_NOTR0}, 1, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS},
   1535 /* Gas local alias of jarl imm22 (not defined in spec).  */
   1536 { "jarl22",	two (0x0780, 0x0000),	two (0x07c0, 0x0001),	{D22, R2_NOTR0}, 	0, PROCESSOR_ALL | PROCESSOR_OPTION_ALIAS},
   1537 /* Gas local alias of jarl imm32 (not defined in spec).  */
   1538 { "jarl32",	one (0x02e0),		one (0xffe0),		{D32_31_PCREL, R1_NOTR0}, 	0, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1539 { "jarlw",	one (0x02e0),		one (0xffe0),		{D32_31_PCREL, R1_NOTR0}, 	0, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1540 
   1541 { "jmp",	two (0x06e0, 0x0000),	two (0xffe0, 0x0001),	{D32_31, R1}, 		2, PROCESSOR_V850E3V5_UP },
   1542 { "jmp",	one (0x06e0),		one (0xffe0),		{D32_31, R1}, 		2, PROCESSOR_V850E2 | PROCESSOR_V850E2V3 },
   1543 { "jmp",	one (0x0060),		one (0xffe0),	      	{R1}, 			1, PROCESSOR_ALL },
   1544 /* Gas local alias of jmp disp22(not defined in spec).  */
   1545 { "jmp22",	one (0x0060),		one (0xffe0),	      	{R1}, 			1, PROCESSOR_ALL | PROCESSOR_OPTION_ALIAS },
   1546 /* Gas local alias of jmp disp32(not defined in spec).  */
   1547 { "jmp32",	one (0x06e0),		one (0xffe0),		{D32_31, R1}, 		2, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1548 { "jmpw",	one (0x06e0),		one (0xffe0),		{D32_31, R1}, 		2, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1549 
   1550 { "jr",		two (0x0780, 0x0000),	two (0xffc0, 0x0001),	{D22}, 			0, PROCESSOR_ALL },
   1551 { "jr",		one (0x02e0),		one (0xffff),		{D32_31_PCREL},		0, PROCESSOR_V850E2_UP },
   1552 /* Gas local alias of mov imm22(not defined in spec).  */
   1553 { "jr22",	two (0x0780, 0x0000),	two (0xffc0, 0x0001),	{D22}, 			0, PROCESSOR_ALL | PROCESSOR_OPTION_ALIAS },
   1554 /* Gas local alias of mov imm32(not defined in spec).  */
   1555 { "jr32",	one (0x02e0),		one (0xffff),		{D32_31_PCREL},		0, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1556 
   1557 /* Alias of bcond (same as CA850).  */
   1558 { "jgt",	BOP (0xf),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1559 { "jge",	BOP (0xe),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1560 { "jlt",	BOP (0x6),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1561 { "jle",	BOP (0x7),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1562 	/* Unsigned integer.  */
   1563 { "jh",		BOP (0xb),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1564 { "jnh",	BOP (0x3),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1565 { "jl",		BOP (0x1),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1566 { "jnl",	BOP (0x9),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1567 	/* Common.  */
   1568 { "je",		BOP (0x2),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1569 { "jne",	BOP (0xa),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1570 	/* Others.  */
   1571 { "jv",		BOP (0x0),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1572 { "jnv",	BOP (0x8),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1573 { "jn",		BOP (0x4),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1574 { "jp",		BOP (0xc),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1575 { "jc",		BOP (0x1),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1576 { "jnc",	BOP (0x9),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1577 { "jz",		BOP (0x2),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1578 { "jnz",	BOP (0xa),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1579 { "jbr",	BOP (0x5),		BOP_MASK,		IF3, 			0, PROCESSOR_ALL },
   1580 
   1581 
   1582 { "ldacc",	two (0x07e0, 0x0bc4),	two (0x07e0, 0xffff),	{R1, R2},		0, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_EXTENSION },
   1583 
   1584 { "ld.b",	two (0x0700, 0x0000),	two (0x07e0, 0x0000), 	{D16, R1, R2}, 		2, PROCESSOR_ALL },
   1585 { "ld.b",	two (0x0780, 0x0005),	two (0xffe0, 0x000f), 	{D23, R1, R3}, 		2, PROCESSOR_V850E2_UP },
   1586 { "ld.b23",	two (0x0780, 0x0005),	two (0x07e0, 0x000f), 	{D23, R1, R3}, 		2, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1587 
   1588 { "ld.bu",	two (0x0780, 0x0001),   two (0x07c0, 0x0001), 	{D16_16, R1, R2_NOTR0},	2, PROCESSOR_NOT_V850 },
   1589 { "ld.bu",	two (0x07a0, 0x0005),	two (0xffe0, 0x000f), 	{D23, R1, R3}, 		2, PROCESSOR_V850E2_UP },
   1590 { "ld.bu23",	two (0x07a0, 0x0005),	two (0x07e0, 0x000f), 	{D23, R1, R3}, 		2, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1591 
   1592 { "ld.dw",   	two (0x07a0, 0x0009), 	two (0xffe0, 0x001f), {D23_ALIGN1, R1, R3_EVEN}, 2, PROCESSOR_V850E3V5_UP },
   1593 { "ld.dw23", 	two (0x07a0, 0x0009), 	two (0xffe0, 0x001f), {D23_ALIGN1, R1, R3_EVEN}, 2, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1594 
   1595 { "ld.h",	two (0x0720, 0x0000),	two (0x07e0, 0x0001), 	{D16_15, R1, R2}, 	2, PROCESSOR_ALL },
   1596 { "ld.h",	two (0x0780, 0x0007),	two (0x07e0, 0x000f), 	{D23_ALIGN1, R1, R3}, 	2, PROCESSOR_V850E2_UP },
   1597 { "ld.h23",	two (0x0780, 0x0007),	two (0x07e0, 0x000f), 	{D23_ALIGN1, R1, R3}, 	2, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1598 
   1599 { "ld.hu",	two (0x07e0, 0x0001),   two (0x07e0, 0x0001), 	{D16_15, R1, R2_NOTR0},	2, PROCESSOR_NOT_V850 },
   1600 { "ld.hu",	two (0x07a0, 0x0007),	two (0x07e0, 0x000f), 	{D23_ALIGN1, R1, R3}, 	2, PROCESSOR_V850E2_UP },
   1601 { "ld.hu23",	two (0x07a0, 0x0007),	two (0x07e0, 0x000f), 	{D23_ALIGN1, R1, R3}, 	2, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1602 
   1603 { "ld.w",	two (0x0720, 0x0001),	two (0x07e0, 0x0001), 	{D16_15, R1, R2}, 	2, PROCESSOR_ALL },
   1604 { "ld.w",	two (0x0780, 0x0009),	two (0xffe0, 0x001f), 	{D23_ALIGN1, R1, R3}, 	2, PROCESSOR_V850E2_UP },
   1605 { "ld.w23",	two (0x0780, 0x0009),	two (0x07e0, 0x001f), 	{D23_ALIGN1, R1, R3}, 	2, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1606 
   1607 { "ldl.w",	two (0x07e0, 0x0378),	two (0xffe0, 0x07ff),	{R1, R3}, 		1, PROCESSOR_V850E3V5_UP },
   1608 
   1609 { "ldsr",	two (0x07e0, 0x0020),	two (0x07e0, 0x07ff),	{R1, SR2, SELID}, 	0, PROCESSOR_V850E3V5_UP },
   1610 { "ldsr",	two (0x07e0, 0x0020),	two (0x07e0, 0x07ff),	{R1, SR2}, 		0, PROCESSOR_V850E3V5_UP },
   1611 { "ldsr",	two (0x07e0, 0x0020),	two (0x07e0, 0x07ff),	{R1, OLDSR2}, 		0, (PROCESSOR_ALL & (~ PROCESSOR_V850E3V5_UP)) },
   1612 
   1613 { "ldtc.gr",	two (0x07e0, 0x0032),	two (0x07e0, 0xffff),	{R1, R2}, 		0, PROCESSOR_V850E3V5_UP },
   1614 { "ldtc.sr",	two (0x07e0, 0x0030),	two (0x07e0, 0x07ff),	{R1, SR2, SELID}, 	0, PROCESSOR_V850E3V5_UP },
   1615 { "ldtc.sr",	two (0x07e0, 0x0030),	two (0x07e0, 0x07ff),	{R1, SR2},	 	0, PROCESSOR_V850E3V5_UP },
   1616 
   1617 { "ldtc.vr",	two (0x07e0, 0x0832),	two (0x07e0, 0xffff),	{R1, VR2}, 		0, PROCESSOR_V850E3V5_UP },
   1618 { "ldtc.pc",	two (0x07e0, 0xf832),	two (0x07e0, 0xffff),	{R1}, 			0, PROCESSOR_V850E3V5_UP },
   1619 
   1620 { "ldvc.sr",	two (0x07e0, 0x0034),	two (0x07e0, 0x07ff),	{R1, SR2, SELID}, 	0, PROCESSOR_V850E3V5_UP },
   1621 { "ldvc.sr",	two (0x07e0, 0x0034),	two (0x07e0, 0x07ff),	{R1, SR2},	 	0, PROCESSOR_V850E3V5_UP },
   1622 
   1623 { "loop",	two (0x06e0, 0x0001),	two (0xffe0, 0x0001), 	{R1, D16_LOOP}, 	0, PROCESSOR_V850E3V5_UP },
   1624 
   1625 { "macacc",	two (0x07e0, 0x0bc0),	two (0x07e0, 0xffff),	{R1, R2},		0, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_EXTENSION },
   1626 
   1627 { "mac",	two (0x07e0, 0x03c0),	two (0x07e0, 0x0fe1),	{R1, R2, R3_EVEN, R4_EVEN},    	0, PROCESSOR_V850E2_UP },
   1628 
   1629 { "macu",	two (0x07e0, 0x03e0),	two (0x07e0, 0x0fe1),	{R1, R2, R3_EVEN, R4_EVEN},  	0, PROCESSOR_V850E2_UP },
   1630 
   1631 { "macuacc",	two (0x07e0, 0x0bc2),	two (0x07e0, 0xffff),	{R1, R2},		0, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_EXTENSION },
   1632 
   1633 { "mov",        OP  (0x00),		OP_MASK,		{R1, R2_NOTR0},		0, PROCESSOR_ALL },
   1634 { "mov",	OP  (0x10),		OP_MASK,		{I5, R2_NOTR0},		0, PROCESSOR_ALL },
   1635 { "mov",	one (0x0620),		one (0xffe0),		{IMM32, R1},		0, PROCESSOR_NOT_V850 },
   1636 /* Gas local alias of mov imm32(not defined in spec).  */
   1637 { "movl",	one (0x0620),		one (0xffe0),		{IMM32, R1},		0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_ALIAS },
   1638 
   1639 { "movea",	OP  (0x31),		OP_MASK,		{I16, R1, R2_NOTR0},	0, PROCESSOR_ALL },
   1640 
   1641 { "movhi",	OP  (0x32),		OP_MASK,		{I16, R1, R2_NOTR0},	0, PROCESSOR_ALL },
   1642 
   1643 { "mul",	two (0x07e0, 0x0220),	two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1644 { "mul",	two (0x07e0, 0x0240),	two (0x07e0, 0x07c3), 	{I9, R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1645 
   1646 { "mulh",	OP  (0x17),		OP_MASK,		{I5, R2_NOTR0},		0, PROCESSOR_ALL },
   1647 { "mulh",	OP  (0x07),		OP_MASK,		{R1, R2_NOTR0},		0, PROCESSOR_ALL },
   1648 
   1649 { "mulhi",	OP  (0x37),		OP_MASK,		{I16, R1, R2_NOTR0},	0, PROCESSOR_ALL },
   1650 
   1651 { "mulu",	two (0x07e0, 0x0222),	two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1652 { "mulu",	two (0x07e0, 0x0242),	two (0x07e0, 0x07c3), 	{U9, R2, R3}, 		0, PROCESSOR_NOT_V850 },
   1653 
   1654 { "nop",	one (0x00),		one (0xffff),		{0}, 			0, PROCESSOR_ALL },
   1655 
   1656 { "not",	OP (0x01),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1657 
   1658 { "not1",	two (0x47c0, 0x0000),	two (0xc7e0, 0x0000),	{B3, D16, R1}, 		3, PROCESSOR_ALL },
   1659 { "not1",	two (0x07e0, 0x00e2),	two (0x07e0, 0xffff),	{R2, R1},    		3, PROCESSOR_NOT_V850 },
   1660 
   1661 { "or",		OP (0x08),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1662 
   1663 { "ori",	OP (0x34),		OP_MASK,		IF6U, 			0, PROCESSOR_ALL },
   1664 
   1665 { "popsp",	two (0x67e0, 0x0160),	two (0xffe0, 0x07ff),	{R1, R3}, 		0, PROCESSOR_V850E3V5_UP },
   1666 
   1667 { "pref",	two (0xdfe0, 0x0160),	two (0xffe0, 0x07ff),	{PREFOP, R1}, 		2, PROCESSOR_V850E3V5_UP },
   1668 
   1669 { "prepare",    two (0x0780, 0x0003),	two (0xffc0, 0x001f), 	{LIST12, IMM5, SP}, 	0, PROCESSOR_NOT_V850 },
   1670 { "prepare",    two (0x0780, 0x000b),	two (0xffc0, 0x001f), 	{LIST12, IMM5, IMM16LO},0, PROCESSOR_NOT_V850 },
   1671 { "prepare",    two (0x0780, 0x0013),	two (0xffc0, 0x001f), 	{LIST12, IMM5, IMM16HI},0, PROCESSOR_NOT_V850 },
   1672 { "prepare",    two (0x0780, 0x001b),	two (0xffc0, 0x001f), 	{LIST12, IMM5, IMM32}, 	0, PROCESSOR_NOT_V850 },
   1673 { "prepare",    two (0x0780, 0x0001),	two (0xffc0, 0x001f), 	{LIST12, IMM5}, 	0, PROCESSOR_NOT_V850 },
   1674 
   1675 { "pushsp",	two (0x47e0, 0x0160),	two (0xffe0, 0x07ff),	{R1, R3}, 		0, PROCESSOR_V850E3V5_UP },
   1676 
   1677 { "rotl",	two (0x07e0, 0x00c6),	two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_V850E3V5_UP },
   1678 { "rotl",	two (0x07e0, 0x00c4),	two (0x07e0, 0x07ff), 	{I5U, R2, R3}, 		0, PROCESSOR_V850E3V5_UP },
   1679 
   1680 { "reti",	two (0x07e0, 0x0140),	two (0xffff, 0xffff),	{0}, 			0, PROCESSOR_ALL },
   1681 
   1682 { "sar",	two (0x07e0, 0x00a2),	two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_V850E2_UP },
   1683 { "sar",	OP (0x15),		OP_MASK,		{I5U, R2}, 		0, PROCESSOR_ALL },
   1684 { "sar",	two (0x07e0, 0x00a0),	two (0x07e0, 0xffff), 	{R1,  R2}, 		0, PROCESSOR_ALL },
   1685 
   1686 { "sasf",       two (0x07e0, 0x0200),	two (0x07f0, 0xffff), 	{CCCC, R2}, 		0, PROCESSOR_NOT_V850 },
   1687 
   1688 { "satadd",	two (0x07e0, 0x03ba),	two (0x07e0, 0x07ff), 	{R1, R2, R3},		0, PROCESSOR_V850E2_UP },
   1689 { "satadd",	OP (0x11),		OP_MASK,		{I5, R2_NOTR0},		0, PROCESSOR_ALL },
   1690 { "satadd",	OP (0x06),		OP_MASK,		{R1, R2_NOTR0},		0, PROCESSOR_ALL },
   1691 
   1692 { "satsub",	two (0x07e0, 0x039a),	two (0x07e0, 0x07ff), 	{R1, R2, R3},		0, PROCESSOR_V850E2_UP },
   1693 { "satsub",	OP (0x05),		OP_MASK,		{R1, R2_NOTR0},		0, PROCESSOR_ALL },
   1694 
   1695 { "satsubi",	OP (0x33),		OP_MASK,		{I16, R1, R2_NOTR0},	0, PROCESSOR_ALL },
   1696 
   1697 { "satsubr",	OP (0x04),		OP_MASK,		{R1, R2_NOTR0},		0, PROCESSOR_ALL },
   1698 
   1699 { "sbf",	two (0x07e0, 0x0380),	two (0x07e0, 0x07e1),	{CCCC_NOTSA, R1, R2, R3},    	0, PROCESSOR_V850E2_UP },
   1700 
   1701 { "sch0l",	two (0x07e0, 0x0364),	two (0x07ff, 0x07ff), 	{R2, R3}, 		0, PROCESSOR_V850E2_UP },
   1702 
   1703 { "sch0r",	two (0x07e0, 0x0360),	two (0x07ff, 0x07ff), 	{R2, R3}, 		0, PROCESSOR_V850E2_UP },
   1704 
   1705 { "sch1l",	two (0x07e0, 0x0366),	two (0x07ff, 0x07ff), 	{R2, R3}, 		0, PROCESSOR_V850E2_UP },
   1706 
   1707 { "sch1r",	two (0x07e0, 0x0362),	two (0x07ff, 0x07ff), 	{R2, R3}, 		0, PROCESSOR_V850E2_UP },
   1708 
   1709 { "sdivhn",	two (0x07e0, 0x0180),	two (0x07e0, 0x07c3), 	{I5DIV3, R1, R2, R3}, 	0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_EXTENSION },
   1710 { "sdivhun",	two (0x07e0, 0x0182),	two (0x07e0, 0x07c3), 	{I5DIV3, R1, R2, R3}, 	0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_EXTENSION },
   1711 { "sdivn",	two (0x07e0, 0x01c0),	two (0x07e0, 0x07c3), 	{I5DIV3, R1, R2, R3}, 	0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_EXTENSION },
   1712 { "sdivun",	two (0x07e0, 0x01c2),	two (0x07e0, 0x07c3), 	{I5DIV3, R1, R2, R3}, 	0, PROCESSOR_NOT_V850 | PROCESSOR_OPTION_EXTENSION },
   1713 
   1714 { "set1",	two (0x07c0, 0x0000),	two (0xc7e0, 0x0000),	{B3, D16, R1}, 		3, PROCESSOR_ALL },
   1715 { "set1",	two (0x07e0, 0x00e0),	two (0x07e0, 0xffff),	{R2, R1},    		3, PROCESSOR_NOT_V850 },
   1716 
   1717 { "setf",	two (0x07e0, 0x0000),	two (0x07f0, 0xffff), 	{CCCC, R2}, 		0, PROCESSOR_ALL },
   1718 
   1719 { "shl",	two (0x07e0, 0x00c2),	two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_V850E2_UP },
   1720 { "shl",	OP  (0x16),		OP_MASK,	      	{I5U, R2}, 		0, PROCESSOR_ALL },
   1721 { "shl",	two (0x07e0, 0x00c0),	two (0x07e0, 0xffff), 	{R1,  R2}, 		0, PROCESSOR_ALL },
   1722 
   1723 { "shr",	two (0x07e0, 0x0082),	two (0x07e0, 0x07ff), 	{R1, R2, R3}, 		0, PROCESSOR_V850E2_UP },
   1724 { "shr",	OP  (0x14),		OP_MASK,	      	{I5U, R2}, 		0, PROCESSOR_ALL },
   1725 { "shr",	two (0x07e0, 0x0080),	two (0x07e0, 0xffff), 	{R1,  R2}, 		0, PROCESSOR_ALL },
   1726 
   1727 { "sld.b",	one (0x0300),		one (0x0780),	      	{D7U,  EP,   R2},	2, PROCESSOR_ALL },
   1728 
   1729 { "sld.bu",     one (0x0060),		one (0x07f0),         	{D4U,  EP,   R2_NOTR0},	2, PROCESSOR_NOT_V850 },
   1730 
   1731 { "sld.h",	one (0x0400),		one (0x0780),	      	{D8_7U,EP,   R2}, 	2, PROCESSOR_ALL },
   1732 
   1733 { "sld.hu",     one (0x0070),		one (0x07f0),         	{D5_4U,EP,   R2_NOTR0},	2, PROCESSOR_NOT_V850 },
   1734 
   1735 { "sld.w",	one (0x0500),		one (0x0781),	      	{D8_6U,EP,   R2}, 	2, PROCESSOR_ALL },
   1736 
   1737 { "snooze",	two (0x0fe0, 0x0120),	two (0xffff, 0xffff),	{0},	 		0, PROCESSOR_V850E3V5_UP },
   1738 
   1739 { "sst.b",	one (0x0380),		one (0x0780),	      	{R2,   D7U,  EP}, 	3, PROCESSOR_ALL },
   1740 
   1741 { "sst.h",	one (0x0480),		one (0x0780),	      	{R2,   D8_7U,EP}, 	3, PROCESSOR_ALL },
   1742 
   1743 { "sst.w",	one (0x0501),		one (0x0781),	      	{R2,   D8_6U,EP}, 	3, PROCESSOR_ALL },
   1744 
   1745 { "stacch",	two (0x07e0, 0x0bca),	two (0x07ff, 0xffff),	{R2},			0, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_EXTENSION },
   1746 { "staccl",	two (0x07e0, 0x0bc8),	two (0x07ff, 0xffff),	{R2},			0, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_EXTENSION },
   1747 
   1748 { "st.b",	two (0x0740, 0x0000),	two (0x07e0, 0x0000), 	{R2, D16, R1}, 		3, PROCESSOR_ALL },
   1749 { "st.b",	two (0x0780, 0x000d),	two (0x07e0, 0x000f), 	{R3, D23, R1}, 		3, PROCESSOR_V850E2_UP },
   1750 { "st.b23",	two (0x0780, 0x000d),	two (0x07e0, 0x000f), 	{R3, D23, R1}, 		3, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1751 
   1752 { "st.dw",   	two (0x07a0, 0x000f), 	two (0xffe0, 0x001f), {R3_EVEN, D23_ALIGN1, R1}, 3, PROCESSOR_V850E3V5_UP },
   1753 { "st.dw23", 	two (0x07a0, 0x000f), 	two (0xffe0, 0x001f), {R3_EVEN, D23_ALIGN1, R1}, 3, PROCESSOR_V850E3V5_UP | PROCESSOR_OPTION_ALIAS },
   1754 
   1755 { "st.h",	two (0x0760, 0x0000),	two (0x07e0, 0x0001), 	{R2, D16_15, R1}, 	3, PROCESSOR_ALL },
   1756 { "st.h",	two (0x07a0, 0x000d),	two (0x07e0, 0x000f), 	{R3, D23_ALIGN1, R1}, 	3, PROCESSOR_V850E2_UP },
   1757 { "st.h23",	two (0x07a0, 0x000d),	two (0x07e0, 0x000f), 	{R3, D23_ALIGN1, R1}, 	3, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1758 
   1759 { "st.w",	two (0x0760, 0x0001),	two (0x07e0, 0x0001), 	{R2, D16_15, R1}, 	3, PROCESSOR_ALL },
   1760 { "st.w",	two (0x0780, 0x000f),	two (0x07e0, 0x000f), 	{R3, D23_ALIGN1, R1}, 	3, PROCESSOR_V850E2_UP },
   1761 { "st.w23",	two (0x0780, 0x000f),	two (0x07e0, 0x000f), 	{R3, D23_ALIGN1, R1}, 	3, PROCESSOR_V850E2_UP | PROCESSOR_OPTION_ALIAS },
   1762 
   1763 { "stc.w",	two (0x07e0, 0x037a),	two (0xffe0, 0x07ff),	{R3, R1},		2, PROCESSOR_V850E3V5_UP },
   1764 
   1765 { "stsr",	two (0x07e0, 0x0040),	two (0x07e0, 0x07ff),	{SR1, R2, SELID}, 	0, PROCESSOR_V850E3V5_UP },
   1766 { "stsr",	two (0x07e0, 0x0040),	two (0x07e0, 0x07ff),	{SR1, R2}, 		0, PROCESSOR_V850E3V5_UP },
   1767 { "stsr",	two (0x07e0, 0x0040),	two (0x07e0, 0x07ff),	{OLDSR1, R2}, 		0, (PROCESSOR_ALL & (~ PROCESSOR_V850E3V5_UP)) },
   1768 
   1769 { "sttc.gr",	two (0x07e0, 0x0052),	two (0x07e0, 0xffff),	{R1, R2}, 		0, PROCESSOR_V850E3V5_UP },
   1770 { "sttc.sr",	two (0x07e0, 0x0050),	two (0x07e0, 0x07ff),	{SR1, R2, SELID}, 	0, PROCESSOR_V850E3V5_UP },
   1771 { "sttc.sr",	two (0x07e0, 0x0050),	two (0x07e0, 0x07ff),	{SR1, R2},	 	0, PROCESSOR_V850E3V5_UP },
   1772 { "sttc.vr",	two (0x07e0, 0x0852),	two (0x07e0, 0xffff),	{VR1, R2}, 		0, PROCESSOR_V850E3V5_UP },
   1773 { "sttc.pc",	two (0x07e0, 0xf852),	two (0x07e0, 0xffff),	{R2}, 			0, PROCESSOR_V850E3V5_UP },
   1774 
   1775 { "stvc.sr",	two (0x07e0, 0x0054),	two (0x07e0, 0x07ff),	{SR1, R2, SELID}, 	0, PROCESSOR_V850E3V5_UP },
   1776 { "stvc.sr",	two (0x07e0, 0x0054),	two (0x07e0, 0x07ff),	{SR1, R2},	 	0, PROCESSOR_V850E3V5_UP },
   1777 
   1778 { "sub",	OP  (0x0d),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1779 
   1780 { "subr", 	OP  (0x0c),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1781 
   1782 { "switch",	one (0x0040),		one (0xffe0), 	      	{R1_NOTR0}, 		0, PROCESSOR_NOT_V850 },
   1783 
   1784 { "sxb",	one (0x00a0),		one (0xffe0), 	      	{R1},			0, PROCESSOR_NOT_V850 },
   1785 
   1786 { "sxh",	one (0x00e0),		one (0xffe0),	      	{R1},			0, PROCESSOR_NOT_V850 },
   1787 
   1788 { "tlbai",	two (0x87e0, 0x8960),	two (0xffff, 0xffff),	{0},	 		0, PROCESSOR_V850E3V5_UP },
   1789 { "tlbr",	two (0x87e0, 0xe960),	two (0xffff, 0xffff),	{0},	 		0, PROCESSOR_V850E3V5_UP },
   1790 { "tlbs",	two (0x87e0, 0xc160),	two (0xffff, 0xffff),	{0},	 		0, PROCESSOR_V850E3V5_UP },
   1791 { "tlbvi",	two (0x87e0, 0x8160),	two (0xffff, 0xffff),	{0},	 		0, PROCESSOR_V850E3V5_UP },
   1792 { "tlbw",	two (0x87e0, 0xe160),	two (0xffff, 0xffff),	{0},	 		0, PROCESSOR_V850E3V5_UP },
   1793 
   1794 { "trap",	two (0x07e0, 0x0100),	two (0xffe0, 0xffff),	{I5U}, 			0, PROCESSOR_ALL },
   1795 
   1796 { "tst",	OP (0x0b),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1797 
   1798 { "tst1",	two (0xc7c0, 0x0000),	two (0xc7e0, 0x0000),	{B3, D16, R1}, 		3, PROCESSOR_ALL },
   1799 { "tst1",	two (0x07e0, 0x00e6),	two (0x07e0, 0xffff),	{R2, R1},    		3, PROCESSOR_NOT_V850 },
   1800 
   1801 { "xor",	OP (0x09),		OP_MASK,		IF1, 			0, PROCESSOR_ALL },
   1802 
   1803 { "xori",	OP (0x35),		OP_MASK,		IF6U, 			0, PROCESSOR_ALL },
   1804 
   1805 { "zxb",	one (0x0080),		one (0xffe0), 	      	{R1},			0, PROCESSOR_NOT_V850 },
   1806 
   1807 { "zxh",	one (0x00c0),		one (0xffe0), 	      	{R1},			0, PROCESSOR_NOT_V850 },
   1808 
   1809 /* Floating point operation.  */
   1810 { "absf.d",	two (0x07e0, 0x0458),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1811 { "absf.s",	two (0x07e0, 0x0448),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1812 { "addf.d",	two (0x07e0, 0x0470),	two (0x0fe1, 0x0fff),	{R1_EVEN, R2_EVEN, R3_EVEN},		0, PROCESSOR_V850E2V3_UP },
   1813 { "addf.s",	two (0x07e0, 0x0460),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1814 { "ceilf.dl",	two (0x07e2, 0x0454),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1815 { "ceilf.dul",	two (0x07f2, 0x0454),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1816 { "ceilf.duw",	two (0x07f2, 0x0450),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1817 { "ceilf.dw",	two (0x07e2, 0x0450),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1818 { "ceilf.sl",	two (0x07e2, 0x0444),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1819 { "ceilf.sul",	two (0x07f2, 0x0444),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1820 { "ceilf.suw",	two (0x07f2, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1821 { "ceilf.sw",	two (0x07e2, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1822 { "cmovf.d",	two (0x07e0, 0x0410),	two (0x0fe1, 0x0ff1),	{FFF, R1_EVEN, R2_EVEN, R3_EVEN_NOTR0},	0, PROCESSOR_V850E2V3_UP },
   1823 /* Default value for FFF is 0(not defined in spec).  */
   1824 { "cmovf.d",	two (0x07e0, 0x0410),	two (0x0fe1, 0x0fff),	{R1_EVEN, R2_EVEN, R3_EVEN_NOTR0},	0, PROCESSOR_V850E2V3_UP },
   1825 { "cmovf.s",	two (0x07e0, 0x0400),	two (0x07e0, 0x07f1),	{FFF, R1, R2, R3_NOTR0},		0, PROCESSOR_V850E2V3_UP },
   1826 /* Default value for FFF is 0(not defined in spec).  */
   1827 { "cmovf.s",	two (0x07e0, 0x0400),	two (0x07e0, 0x07ff),	{R1, R2, R3_NOTR0},			0, PROCESSOR_V850E2V3_UP },
   1828 { "cmpf.d",	two (0x07e0, 0x0430),	two (0x0fe1, 0x87f1),	{FLOAT_CCCC, R2_EVEN, R1_EVEN, FFF},	0, PROCESSOR_V850E2V3_UP },
   1829 { "cmpf.d",	two (0x07e0, 0x0430),	two (0x0fe1, 0x87ff),	{FLOAT_CCCC, R2_EVEN, R1_EVEN},		0, PROCESSOR_V850E2V3_UP },
   1830 { "cmpf.s",	two (0x07e0, 0x0420),	two (0x07e0, 0x87f1),	{FLOAT_CCCC, R2, R1, FFF},		0, PROCESSOR_V850E2V3_UP },
   1831 { "cmpf.s",	two (0x07e0, 0x0420),	two (0x07e0, 0x87ff),	{FLOAT_CCCC, R2, R1},			0, PROCESSOR_V850E2V3_UP },
   1832 { "cvtf.dl",	two (0x07e4, 0x0454),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1833 { "cvtf.ds",	two (0x07e3, 0x0452),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1834 { "cvtf.dul",	two (0x07f4, 0x0454),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1835 { "cvtf.duw",	two (0x07f4, 0x0450),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1836 { "cvtf.dw",	two (0x07e4, 0x0450),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1837 { "cvtf.hs",	two (0x07e2, 0x0442),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E3V5_UP },
   1838 { "cvtf.ld",	two (0x07e1, 0x0452),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1839 { "cvtf.ls",	two (0x07e1, 0x0442),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1840 { "cvtf.sd",	two (0x07e2, 0x0452),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1841 { "cvtf.sl",	two (0x07e4, 0x0444),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1842 { "cvtf.sh",	two (0x07e3, 0x0442),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E3V5_UP },
   1843 { "cvtf.sul",	two (0x07f4, 0x0444),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1844 { "cvtf.suw",	two (0x07f4, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1845 { "cvtf.sw",	two (0x07e4, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1846 { "cvtf.uld",	two (0x07f1, 0x0452),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1847 { "cvtf.uls",	two (0x07f1, 0x0442),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1848 { "cvtf.uwd",	two (0x07f0, 0x0452),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1849 { "cvtf.uws",	two (0x07f0, 0x0442),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1850 { "cvtf.wd",	two (0x07e0, 0x0452),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1851 { "cvtf.ws",	two (0x07e0, 0x0442),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1852 { "divf.d",	two (0x07e0, 0x047e),	two (0x0fe1, 0x0fff),	{R1_EVEN, R2_EVEN, R3_EVEN},		0, PROCESSOR_V850E2V3_UP },
   1853 { "divf.s",	two (0x07e0, 0x046e),	two (0x07e0, 0x07ff),	{R1_NOTR0, R2, R3},			0, PROCESSOR_V850E2V3_UP },
   1854 { "floorf.dl",	two (0x07e3, 0x0454),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1855 { "floorf.dul",	two (0x07f3, 0x0454),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1856 { "floorf.duw",	two (0x07f3, 0x0450),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1857 { "floorf.dw",	two (0x07e3, 0x0450),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1858 { "floorf.sl",	two (0x07e3, 0x0444),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1859 { "floorf.sul",	two (0x07f3, 0x0444),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1860 { "floorf.suw",	two (0x07f3, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1861 { "floorf.sw",	two (0x07e3, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1862 { "maddf.s",	two (0x07e0, 0x0500),	two (0x07e0, 0x0761),	{R1, R2, R3, R4},			0, PROCESSOR_V850E2V3 },
   1863 { "fmaf.s",	two (0x07e0, 0x04e0),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E3V5_UP },
   1864 { "maxf.d",	two (0x07e0, 0x0478),	two (0x0fe1, 0x0fff),	{R1_EVEN, R2_EVEN, R3_EVEN},		0, PROCESSOR_V850E2V3_UP },
   1865 { "maxf.s",	two (0x07e0, 0x0468),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1866 { "minf.d",	two (0x07e0, 0x047a),	two (0x0fe1, 0x0fff),	{R1_EVEN, R2_EVEN, R3_EVEN},		0, PROCESSOR_V850E2V3_UP },
   1867 { "minf.s",	two (0x07e0, 0x046a),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1868 { "msubf.s",	two (0x07e0, 0x0520),	two (0x07e0, 0x0761),	{R1, R2, R3, R4},			0, PROCESSOR_V850E2V3 },
   1869 { "fmsf.s",	two (0x07e0, 0x04e2),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E3V5_UP },
   1870 { "mulf.d",	two (0x07e0, 0x0474),	two (0x0fe1, 0x0fff),	{R1_EVEN, R2_EVEN, R3_EVEN},		0, PROCESSOR_V850E2V3_UP },
   1871 { "mulf.s",	two (0x07e0, 0x0464),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1872 { "negf.d",	two (0x07e1, 0x0458),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1873 { "negf.s",	two (0x07e1, 0x0448),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1874 { "nmaddf.s",	two (0x07e0, 0x0540),	two (0x07e0, 0x0761),	{R1, R2, R3, R4},			0, PROCESSOR_V850E2V3 },
   1875 { "fnmaf.s",	two (0x07e0, 0x04e4),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E3V5_UP },
   1876 { "nmsubf.s",	two (0x07e0, 0x0560),	two (0x07e0, 0x0761),	{R1, R2, R3, R4},			0, PROCESSOR_V850E2V3 },
   1877 { "fnmsf.s",	two (0x07e0, 0x04e6),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E3V5_UP },
   1878 { "recipf.d",	two (0x07e1, 0x045e),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1879 { "recipf.s",	two (0x07e1, 0x044e),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1880 
   1881 { "roundf.dl",	two (0x07e0, 0x0454),   two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_EXTENSION },
   1882 { "roundf.dul",	two (0x07f0, 0x0454),   two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_EXTENSION },
   1883 { "roundf.duw",	two (0x07f0, 0x0450),   two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_EXTENSION },
   1884 { "roundf.dw",	two (0x07e0, 0x0450),   two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_EXTENSION },
   1885 { "roundf.sl",	two (0x07e0, 0x0444),   two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_EXTENSION },
   1886 { "roundf.sul",	two (0x07f0, 0x0444),   two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_EXTENSION },
   1887 { "roundf.suw",	two (0x07f0, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_EXTENSION },
   1888 { "roundf.sw",	two (0x07e0, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_EXTENSION },
   1889 
   1890 { "rsqrtf.d",	two (0x07e2, 0x045e),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1891 { "rsqrtf.s",	two (0x07e2, 0x044e),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1892 { "sqrtf.d",	two (0x07e0, 0x045e),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1893 { "sqrtf.s",	two (0x07e0, 0x044e),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1894 { "subf.d",	two (0x07e0, 0x0472),	two (0x0fe1, 0x0fff),	{R1_EVEN, R2_EVEN, R3_EVEN},		0, PROCESSOR_V850E2V3_UP },
   1895 { "subf.s",	two (0x07e0, 0x0462),	two (0x07e0, 0x07ff),	{R1, R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1896 { "trfsr",	two (0x07e0, 0x0400),	two (0xffff, 0xfff1),	{FFF},					0, PROCESSOR_V850E2V3_UP },
   1897 { "trfsr",	two (0x07e0, 0x0400),	two (0xffff, 0xffff),	{0},					0, PROCESSOR_V850E2V3_UP },
   1898 { "trncf.dl",	two (0x07e1, 0x0454),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1899 { "trncf.dul",	two (0x07f1, 0x0454),	two (0x0fff, 0x0fff),	{R2_EVEN, R3_EVEN},			0, PROCESSOR_V850E2V3_UP },
   1900 { "trncf.duw",	two (0x07f1, 0x0450),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1901 { "trncf.dw",	two (0x07e1, 0x0450),	two (0x0fff, 0x07ff),	{R2_EVEN, R3},				0, PROCESSOR_V850E2V3_UP },
   1902 { "trncf.sl",	two (0x07e1, 0x0444),	two (0x07ff, 0x0fff),	{R2, R3_EVEN},				0, PROCESSOR_V850E2V3_UP },
   1903 { "trncf.sul",	two (0x07f1, 0x0444),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1904 { "trncf.suw",	two (0x07f1, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1905 { "trncf.sw",	two (0x07e1, 0x0440),	two (0x07ff, 0x07ff),	{R2, R3},				0, PROCESSOR_V850E2V3_UP },
   1906 
   1907   /* Special instruction (from gdb) mov 1, r0.  */
   1908 { "breakpoint",	one (0x0001),		one (0xffff),		{UNUSED},				0, PROCESSOR_ALL },
   1909 
   1910 { "synci",	one (0x001c),		one (0xffff),		{0},					0, PROCESSOR_V850E3V5_UP },
   1911 
   1912 { "synce",	one (0x001d),		one (0xffff),		{0},					0, PROCESSOR_V850E2V3_UP },
   1913 { "syncm",	one (0x001e),		one (0xffff),		{0},					0, PROCESSOR_V850E2V3_UP },
   1914 { "syncp",	one (0x001f),		one (0xffff),		{0},					0, PROCESSOR_V850E2V3_UP },
   1915 { "syscall",	two (0xd7e0, 0x0160),	two (0xffe0, 0xc7ff),	{V8},					0, PROCESSOR_V850E2V3_UP },
   1916   /* Alias of syncp.  */
   1917 { "sync",	one (0x001f),		one (0xffff),		{0},					0, PROCESSOR_V850E2V3_UP | PROCESSOR_OPTION_ALIAS },
   1918 { "rmtrap",	one (0xf040),		one (0xffff),		{0},					0, PROCESSOR_V850E2V3_UP },
   1919 { "rie",	one (0x0040),		one (0xffff),		{0},					0, PROCESSOR_V850E2V3_UP },
   1920 { "rie",	two (0x07f0, 0x0000),	two (0x07f0, 0xffff),	{RIE_IMM5,RIE_IMM4},			0, PROCESSOR_V850E2V3_UP },
   1921 
   1922 { 0, 0, 0, {0}, 0, 0 },
   1923 } ;
   1924 
   1925 const int v850_num_opcodes =
   1926   sizeof (v850_opcodes) / sizeof (v850_opcodes[0]);
   1927