home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Atari / Gnu / gassrc04.zoo / sparc.up < prev    next >
Text File  |  1991-09-13  |  38KB  |  844 lines

  1. Newsgroups: gnu.utils.bug
  2. From: gordoni@chook.cs.adelaide.edu.au (Gordon Irlam)
  3. Subject: GAS 1.38 (sparc) patches
  4. Organization: GNUs Not Usenet
  5. Distribution: gnu
  6. Date: Sat, 7 Sep 1991 02:26:04 GMT
  7.  
  8. The following patches fix a few small problems with the SPARC version
  9. of gas 1.38.
  10.  
  11. 1) A .empty directive has been added.  This is for compatibility with
  12.    SunOS.  It is needed sometimes for code fed to the SunOS assembler
  13.    to prevent the Sun assembler adding illegal nops to perfectly good
  14.    code.  Adding it to the sparc version of gas allows gas to assemble
  15.    the same file.
  16.  
  17. 2) In gas 1.38 the code for handling the RELOC_32 type was commented out
  18.    and the result set to zero.  I can't see any reason why this was done.
  19.    The resulting code is wrong.  The following small program illustrates
  20.    this: start will have the value 0 instead of 4.
  21.  
  22.    .text
  23.    start:    .word    finish - start
  24.    finish:
  25.  
  26. 3) Copy the version of sparc-opcode.h from gdb-4.0.  The version of
  27.    sparc-opcode.h in gas 1.38 does not include the dec, deccc, or
  28.    cb01 instructions.
  29.  
  30.                                            Gordon Irlam
  31.                                            (gordoni@cs.adelaide.edu.au)
  32.  
  33. diff -c old/sparc.c new/sparc.c
  34. *** old/sparc.c    Tue Oct 23 03:34:04 1990
  35. --- new/sparc.c    Fri Sep  6 16:10:08 1991
  36. ***************
  37. *** 55,66 ****
  38.   /* handle of the OPCODE hash table */
  39.   static struct hash_control *op_hash = NULL;
  40.   
  41. ! static void s_seg(), s_proc(), s_data1(), s_reserve(), s_common();
  42.   extern void s_globl(), s_long(), s_short(), s_space(), cons();
  43.   
  44.   const pseudo_typeS
  45.   md_pseudo_table[] = {
  46.       { "common",     s_common,   0 },
  47.       { "global",     s_globl,    0 },
  48.       { "half",       cons,       2 },
  49.       { "proc",       s_proc,     0 },
  50. --- 55,67 ----
  51.   /* handle of the OPCODE hash table */
  52.   static struct hash_control *op_hash = NULL;
  53.   
  54. ! static void s_seg(), s_proc(), s_data1(), s_reserve(), s_common(), s_empty();
  55.   extern void s_globl(), s_long(), s_short(), s_space(), cons();
  56.   
  57.   const pseudo_typeS
  58.   md_pseudo_table[] = {
  59.       { "common",     s_common,   0 },
  60. +     { "empty",      s_empty,    0 },  /* GI: For SunOS compatability */
  61.       { "global",     s_globl,    0 },
  62.       { "half",       cons,       2 },
  63.       { "proc",       s_proc,     0 },
  64. ***************
  65. *** 106,116 ****
  66.   #define isoctal(c)  octal[c]
  67.   static unsigned char toHex[256];
  68.   
  69. - /*
  70. -  *  anull bit - causes the branch delay slot instructions to not be executed 
  71. -  */
  72. - #define ANNUL       (1 << 29)
  73.   struct sparc_it {
  74.       char    *error;
  75.       unsigned long opcode;
  76. --- 107,112 ----
  77. ***************
  78. *** 251,257 ****
  79. --- 247,267 ----
  80.       return;
  81.   }
  82.   
  83. + /*
  84. +  * GI: This is needed for compatability with Sun's assembler - which
  85. +  * otherwise generates a warning when certain "suspect" instructions
  86. +  * appear in the delay slot of a branch.  And more seriously without
  87. +  * this directive in certain cases Sun's assembler will rearrange
  88. +  * code thinking it knows how to alter things when it doesn't.
  89. +  */
  90.   static void
  91. + s_empty()
  92. + {
  93. +     demand_empty_rest_of_line();
  94. +     return;
  95. + }
  96. + static void
  97.   s_seg()
  98.   {
  99.   
  100. ***************
  101. *** 999,1008 ****
  102.       switch (fixP->fx_r_type) {
  103.   
  104.       case RELOC_32:
  105. !     buf[0] = 0; /* val >> 24; */
  106. !     buf[1] = 0; /* val >> 16; */
  107. !     buf[2] = 0; /* val >> 8; */
  108. !     buf[3] = 0; /* val; */
  109.       break;
  110.   
  111.   #if 0
  112. --- 1009,1021 ----
  113.       switch (fixP->fx_r_type) {
  114.   
  115.       case RELOC_32:
  116. !         /*
  117. !          * GI: This was commented out.  Why?  It is needed.
  118. !          */
  119. !     buf[0] = val >> 24;
  120. !     buf[1] = val >> 16;
  121. !     buf[2] = val >> 8;
  122. !     buf[3] = val;
  123.       break;
  124.   
  125.   #if 0
  126. diff -c old/sparc-opcode.h new/sparc-opcode.h
  127. *** old/sparc-opcode.h    Fri Jun  8 05:52:10 1990
  128. --- new/sparc-opcode.h    Fri Sep  6 16:10:08 1991
  129. ***************
  130. *** 3,21 ****
  131.   
  132.   This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler.
  133.   
  134. ! GAS/GDB is free software; you can redistribute it and/or modify
  135.   it under the terms of the GNU General Public License as published by
  136. ! the Free Software Foundation; either version 1, or (at your option)
  137. ! any later version.
  138.   
  139. ! GAS/GDB is distributed in the hope that it will be useful,
  140.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  141.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  142.   GNU General Public License for more details.
  143.   
  144.   You should have received a copy of the GNU General Public License
  145. ! along with GAS or GDB; see the file COPYING.  If not, write to
  146. ! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  147.   
  148.   #if !defined(__STDC__) && !defined(const)
  149.   #define const
  150. --- 3,21 ----
  151.   
  152.   This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler.
  153.   
  154. ! This program is free software; you can redistribute it and/or modify
  155.   it under the terms of the GNU General Public License as published by
  156. ! the Free Software Foundation; either version 2 of the License, or
  157. ! (at your option) any later version.
  158.   
  159. ! This program is distributed in the hope that it will be useful,
  160.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  161.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  162.   GNU General Public License for more details.
  163.   
  164.   You should have received a copy of the GNU General Public License
  165. ! along with this program; if not, write to the Free Software
  166. ! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  167.   
  168.   #if !defined(__STDC__) && !defined(const)
  169.   #define const
  170. ***************
  171. *** 30,39 ****
  172.       unsigned long int match;    /* Bits that must be set.  */
  173.       unsigned long int lose;    /* Bits that must not be set.  */
  174.       const char *args;
  175. !     /* Nonzero if this is a delayed branch instruction.  */
  176. !     char delayed;
  177.   };
  178.   
  179.   /*
  180.      All sparc opcodes are 32 bits, except for the `set' instruction (really
  181.      a macro), which is 64 bits.  It is handled as a special case.
  182. --- 30,41 ----
  183.       unsigned long int match;    /* Bits that must be set.  */
  184.       unsigned long int lose;    /* Bits that must not be set.  */
  185.       const char *args;
  186. !     char flags;
  187.   };
  188.   
  189. + #define    F_DELAYED    1    /* Delayed branch */
  190. + #define    F_ALIAS        2    /* Alias for a "real" instruction */
  191.   /*
  192.      All sparc opcodes are 32 bits, except for the `set' instruction (really
  193.      a macro), which is 64 bits.  It is handled as a special case.
  194. ***************
  195. *** 174,184 ****
  196.   { "st",        0xc1202000, 0x00d80000, "g,[1+i]", 0 },
  197.   { "st",        0xc1202000, 0x00d80000, "g,[i+1]", 0 },
  198.   { "st",        0xc1200000, 0x00d82000, "g,[1+2]", 0 },
  199. ! { "st",        0xc1280000, 0x00c0d01f, "F,[1]", 0 }, /* st d,[rs1+%g0] */
  200. ! { "st",        0xc1282000, 0x00c0dfff, "F,[1]", 0 }, /* st d,[rs1+0] */
  201. ! { "st",        0xc1282000, 0x00c0d000, "F,[1+i]", 0 },
  202. ! { "st",        0xc1282000, 0x00c0d000, "F,[i+1]", 0 },
  203. ! { "st",        0xc1280000, 0x00c0d000, "F,[1+2]", 0 },
  204.   { "st",        0xc1a00000, 0x0058201f, "D,[1]", 0 }, /* st d,[rs1+%g0] */
  205.   { "st",        0xc1a02000, 0x00581fff, "D,[1]", 0 }, /* st d,[rs1+0] */
  206.   { "st",        0xc1a02000, 0x00580000, "D,[1+i]", 0 },
  207. --- 176,186 ----
  208.   { "st",        0xc1202000, 0x00d80000, "g,[1+i]", 0 },
  209.   { "st",        0xc1202000, 0x00d80000, "g,[i+1]", 0 },
  210.   { "st",        0xc1200000, 0x00d82000, "g,[1+2]", 0 },
  211. ! { "st",        0xc1280000, 0x00d0201f, "F,[1]", 0 }, /* st %fsr,[rs1+%g0] */
  212. ! { "st",        0xc1282000, 0x00d01fff, "F,[1]", 0 }, /* st %fsr,[rs1+0] */
  213. ! { "st",        0xc1282000, 0x00d00000, "F,[1+i]", 0 },
  214. ! { "st",        0xc1282000, 0x00d00000, "F,[i+1]", 0 },
  215. ! { "st",        0xc1280000, 0x00d02000, "F,[1+2]", 0 },
  216.   { "st",        0xc1a00000, 0x0058201f, "D,[1]", 0 }, /* st d,[rs1+%g0] */
  217.   { "st",        0xc1a02000, 0x00581fff, "D,[1]", 0 }, /* st d,[rs1+0] */
  218.   { "st",        0xc1a02000, 0x00580000, "D,[1+i]", 0 },
  219. ***************
  220. *** 248,268 ****
  221.   { "restore",    0x81e82000, 0x7e14dfff, "", 0 }, /* restore %g0,0,%g0 */
  222.   { "restore",    0x81e82000, 0x00000000, "1,i,d", 0 },
  223.   { "restore",    0x81e80000, 0x00000000, "1,2,d", 0 },
  224. ! { "rett",       0x81c82000, 0x40300000, "1+i", 1 },
  225. ! { "rett",       0x81c82000, 0x40300000, "i+1", 1 },
  226. ! { "rett",    0x81c80000, 0x40302000, "1+2", 1 },
  227. ! { "rett",    0x81c82000, 0x40300000, "1", 1},
  228.   { "save",       0x81e02000, 0x40180000, "1,i,d", 0 },
  229.   { "save",    0x81e00000, 0x40180000, "1,2,d", 0 },
  230.   
  231. ! { "ret",    0x81c7e008, 0x00001ff7, "", 1 }, /* jmpl %i7+8,%g0 */
  232. ! { "retl",       0x81c3e008, 0x00001ff7, "", 1 }, /* jmpl %o7+8,%g0 */
  233.   
  234. ! { "jmpl",       0x81c00000, 0x4038201f, "1,d", 1 }, /* jmpl rs1+%g0,d */
  235. ! { "jmpl",    0x81c02000, 0x4037c000, "i,d", 1 }, /* jmpl %g0+i,d */
  236. ! { "jmpl",    0x81c02000, 0x40380000, "1+i,d", 1 },
  237. ! { "jmpl",    0x81c02000, 0x40380000, "i+1,d", 1 },
  238. ! { "jmpl",    0x81c00000, 0x40382000, "1+2,d", 1 },
  239.   { "wr",         0x81982000, 0x40600000, "1,i,t", 0 },
  240.   { "wr",         0x81980000, 0x40600000, "1,2,t", 0 },
  241.   { "wr",         0x81902000, 0x40680000, "1,i,w", 0 },
  242. --- 250,271 ----
  243.   { "restore",    0x81e82000, 0x7e14dfff, "", 0 }, /* restore %g0,0,%g0 */
  244.   { "restore",    0x81e82000, 0x00000000, "1,i,d", 0 },
  245.   { "restore",    0x81e80000, 0x00000000, "1,2,d", 0 },
  246. ! { "rett",       0x81c82000, 0x40300000, "1+i", F_DELAYED },
  247. ! { "rett",       0x81c82000, 0x40300000, "i+1", F_DELAYED },
  248. ! { "rett",    0x81c80000, 0x40302000, "1+2", F_DELAYED },
  249. ! { "rett",    0x81c82000, 0x40301fff, "1", F_DELAYED}, /* rett X,0 */
  250. ! { "rett",    0x81c80000, 0x4030201f, "1", F_DELAYED}, /* rett X,%g0 */
  251.   { "save",       0x81e02000, 0x40180000, "1,i,d", 0 },
  252.   { "save",    0x81e00000, 0x40180000, "1,2,d", 0 },
  253.   
  254. ! { "ret",    0x81c7e008, 0x00001ff7, "", F_DELAYED }, /* jmpl %i7+8,%g0 */
  255. ! { "retl",       0x81c3e008, 0x00001ff7, "", F_DELAYED }, /* jmpl %o7+8,%g0 */
  256.   
  257. ! { "jmpl",       0x81c00000, 0x4038201f, "1,d", F_DELAYED }, /* jmpl rs1+%g0,d */
  258. ! { "jmpl",    0x81c02000, 0x4037c000, "i,d", F_DELAYED }, /* jmpl %g0+i,d */
  259. ! { "jmpl",    0x81c02000, 0x40380000, "1+i,d", F_DELAYED },
  260. ! { "jmpl",    0x81c02000, 0x40380000, "i+1,d", F_DELAYED },
  261. ! { "jmpl",    0x81c00000, 0x40382000, "1+2,d", F_DELAYED },
  262.   { "wr",         0x81982000, 0x40600000, "1,i,t", 0 },
  263.   { "wr",         0x81980000, 0x40600000, "1,2,t", 0 },
  264.   { "wr",         0x81902000, 0x40680000, "1,i,w", 0 },
  265. ***************
  266. *** 287,297 ****
  267.   { "mulscc",     0x81202000, 0x40d80000, "1,i,d", 0 },
  268.   { "mulscc",    0x81200000, 0x40d80000, "1,2,d", 0 },
  269.   
  270. ! { "clr",        0x80100000, 0x4e87e01f, "d", 0 }, /* or %g0,%g0,d */
  271. ! { "clr",        0x80102000, 0x41efdfff, "d", 0 }, /* or %g0,0,d   */
  272.   
  273.   { "orncc",      0x80b02000, 0x04048000, "1,i,d", 0 },
  274. - { "orncc",      0x80b02000, 0x04048000, "i,1,d", 0 },
  275.   { "orncc",    0x80b00000, 0x04048000, "1,2,d", 0 },
  276.   
  277.   { "tst",        0x80900000, 0x7f6fe000, "2", 0 }, /* orcc %g0, rs2, %g0 */
  278. --- 290,314 ----
  279.   { "mulscc",     0x81202000, 0x40d80000, "1,i,d", 0 },
  280.   { "mulscc",    0x81200000, 0x40d80000, "1,2,d", 0 },
  281.   
  282. ! { "clr",        0x80100000, 0x4e87e01f, "d", F_ALIAS }, /* or %g0,%g0,d */
  283. ! { "clr",        0x80102000, 0x41efdfff, "d", F_ALIAS }, /* or %g0,0,d   */
  284. ! { "clr",    0xc0200000, 0x3fd8001f, "[1]", F_ALIAS }, /* st %g0,[rs1+%g0] */
  285. ! { "clr",    0xc0202000, 0x3fd81fff, "[1]", F_ALIAS }, /* st %g0,[rs1+0] */
  286. ! { "clr",    0xc0202000, 0x3fd80000, "[1+i]", F_ALIAS },
  287. ! { "clr",    0xc0202000, 0x3fd80000, "[i+1]", F_ALIAS },
  288. ! { "clr",    0xc0200000, 0x3fd80000, "[1+2]", F_ALIAS },
  289.   
  290. + { "clrb",       0xc0280000, 0x3fd0001f, "[1]", F_ALIAS },/* stb %g0,[rs1+%g0] */
  291. + { "clrb",    0xc0282000, 0x3fd00000, "[1+i]", F_ALIAS },
  292. + { "clrb",    0xc0282000, 0x3fd00000, "[i+1]", F_ALIAS },
  293. + { "clrb",    0xc0280000, 0x3fd00000, "[1+2]", F_ALIAS },
  294. + { "clrh",       0xc0300000, 0x3fc8001f, "[1]", F_ALIAS },/* sth %g0,[rs1+%g0] */
  295. + { "clrh",    0xc0300000, 0x3fc80000, "[1+2]", F_ALIAS },
  296. + { "clrh",    0xc0302000, 0x3fc80000, "[1+i]", F_ALIAS },
  297. + { "clrh",    0xc0302000, 0x3fc80000, "[i+1]", F_ALIAS },
  298.   { "orncc",      0x80b02000, 0x04048000, "1,i,d", 0 },
  299.   { "orncc",    0x80b00000, 0x04048000, "1,2,d", 0 },
  300.   
  301.   { "tst",        0x80900000, 0x7f6fe000, "2", 0 }, /* orcc %g0, rs2, %g0 */
  302. ***************
  303. *** 302,337 ****
  304.   { "orcc",    0x80902000, 0x41680000, "i,1,d", 0 },
  305.   { "orcc",    0x80900000, 0x41680000, "1,2,d", 0 },
  306.   { "orn",        0x80302000, 0x41c80000, "1,i,d", 0 },
  307. - { "orn",    0x80302000, 0x41c80000, "i,1,d", 0 },
  308.   { "orn",    0x80300000, 0x41c80000, "1,2,d", 0 },
  309.   
  310. ! { "mov",        0x81800000, 0x4078201f, "1,y", 0 }, /* wr rs1,%g0,%y */
  311. ! { "mov",        0x81802000, 0x40781fff, "1,y", 0 }, /* wr rs1,0,%y */
  312. ! { "mov",        0x81400000, 0x40b80000, "y,d", 0 }, /* rd %y,d */
  313. ! { "mov",        0x81980000, 0x4060201f, "1,t", 0 }, /* wr rs1,%g0,%tbr */
  314. ! { "mov",        0x81982000, 0x40601fff, "1,t", 0 }, /* wr rs1,0,%tbr */
  315. ! { "mov",        0x81580000, 0x40a00000, "t,d", 0 }, /* rd %tbr,d */
  316. ! { "mov",        0x81900000, 0x4068201f, "1,w", 0 }, /* wr rs1,%g0,%wim */
  317. ! { "mov",        0x81902000, 0x40681fff, "1,w", 0 }, /* wr rs1,0,%wim */
  318. ! { "mov",        0x81500000, 0x40a80000, "w,d", 0 }, /* rd %wim,d */
  319. ! { "mov",        0x81880000, 0x4070201f, "1,p", 0 }, /* wr rs1,%g0,%psr */
  320. ! { "mov",        0x81882000, 0x40701fff, "1,p", 0 }, /* wr rs1,0,%psr */
  321. ! { "mov",        0x81480000, 0x40b00000, "p,d", 0 }, /* rd %psr,d */
  322.   
  323.   { "mov",        0x80102000, 0x41efc000, "i,d", 0 }, /* or %g0,i,d   */
  324.   { "mov",        0x80100000, 0x41efe000, "2,d", 0 }, /* or %g0,rs2,d */
  325.   
  326.   { "or",            0x80102000, 0x40800000, "1,i,d", 0 },
  327.   { "or",        0x80102000, 0x40800000, "i,1,d", 0 },
  328.   { "or",        0x80100000, 0x40800000, "1,2,d", 0 },
  329.   
  330.   { "andncc",     0x80a82000, 0x41500000, "1,i,d", 0 },
  331. - { "andncc",    0x80a82000, 0x41500000, "i,1,d", 0 },
  332.   { "andncc",    0x80a80000, 0x41500000, "1,2,d", 0 },
  333.   { "andn",       0x80282000, 0x41d00000, "1,i,d", 0 },
  334. - { "andn",    0x80282000, 0x41d00000, "i,1,d", 0 },
  335.   { "andn",    0x80280000, 0x41d00000, "1,2,d", 0 },
  336.   
  337.   { "cmp",        0x80a02000, 0x7d580000, "1,i", 0 },     /* subcc rs1,i,%g0 */
  338.   { "cmp",    0x80a00000, 0x7d580000, "1,2", 0 },     /* subcc rs1,rs2,%g0 */
  339.   
  340. --- 319,363 ----
  341.   { "orcc",    0x80902000, 0x41680000, "i,1,d", 0 },
  342.   { "orcc",    0x80900000, 0x41680000, "1,2,d", 0 },
  343.   { "orn",        0x80302000, 0x41c80000, "1,i,d", 0 },
  344.   { "orn",    0x80300000, 0x41c80000, "1,2,d", 0 },
  345.   
  346. ! { "mov",        0x81800000, 0x4078201f, "1,y", F_ALIAS }, /* wr rs1,%g0,%y */
  347. ! { "mov",        0x81802000, 0x40781fff, "1,y", F_ALIAS }, /* wr rs1,0,%y */
  348. ! { "mov",        0x81802000, 0x40780000, "i,y", F_ALIAS },
  349. ! { "mov",        0x81400000, 0x40b80000, "y,d", F_ALIAS }, /* rd %y,d */
  350. ! { "mov",        0x81980000, 0x4060201f, "1,t", F_ALIAS }, /* wr rs1,%g0,%tbr */
  351. ! { "mov",        0x81982000, 0x40601fff, "1,t", F_ALIAS }, /* wr rs1,0,%tbr */
  352. ! { "mov",        0x81982000, 0x40600000, "i,t", F_ALIAS },
  353. ! { "mov",        0x81580000, 0x40a00000, "t,d", F_ALIAS }, /* rd %tbr,d */
  354. ! { "mov",        0x81900000, 0x4068201f, "1,w", F_ALIAS }, /* wr rs1,%g0,%wim */
  355. ! { "mov",        0x81902000, 0x40681fff, "1,w", F_ALIAS }, /* wr rs1,0,%wim */
  356. ! { "mov",        0x81902000, 0x40680000, "i,w", F_ALIAS },
  357. ! { "mov",        0x81500000, 0x40a80000, "w,d", F_ALIAS }, /* rd %wim,d */
  358. ! { "mov",        0x81880000, 0x4070201f, "1,p", F_ALIAS }, /* wr rs1,%g0,%psr */
  359. ! { "mov",        0x81882000, 0x40701fff, "1,p", F_ALIAS }, /* wr rs1,0,%psr */
  360. ! { "mov",        0x81882000, 0x40700000, "i,p", F_ALIAS },
  361. ! { "mov",        0x81480000, 0x40b00000, "p,d", F_ALIAS }, /* rd %psr,d */
  362.   
  363.   { "mov",        0x80102000, 0x41efc000, "i,d", 0 }, /* or %g0,i,d   */
  364.   { "mov",        0x80100000, 0x41efe000, "2,d", 0 }, /* or %g0,rs2,d */
  365. + { "mov",        0x80102000, 0x41e81fff, "1,d", 0 }, /* or rs1,0,d */
  366. + { "mov",        0x80100000, 0x41e8201f, "1,d", 0 }, /* or rs1,%g0,d   */
  367.   
  368.   { "or",            0x80102000, 0x40800000, "1,i,d", 0 },
  369.   { "or",        0x80102000, 0x40800000, "i,1,d", 0 },
  370.   { "or",        0x80100000, 0x40800000, "1,2,d", 0 },
  371.   
  372. + { "bset",    0x80102000, 0x40800000, "i,r", F_ALIAS },/* or rd,i,rd */
  373. + { "bset",    0x80100000, 0x40800000, "2,r", F_ALIAS },/* or rd,rs2,rd */
  374.   { "andncc",     0x80a82000, 0x41500000, "1,i,d", 0 },
  375.   { "andncc",    0x80a80000, 0x41500000, "1,2,d", 0 },
  376.   { "andn",       0x80282000, 0x41d00000, "1,i,d", 0 },
  377.   { "andn",    0x80280000, 0x41d00000, "1,2,d", 0 },
  378.   
  379. + { "bclr",    0x80282000, 0x41d00000, "i,r", F_ALIAS },/* andn rd,i,rd */
  380. + { "bclr",    0x80280000, 0x41d00000, "2,r", F_ALIAS },/* andn rd,rs2,rd */
  381.   { "cmp",        0x80a02000, 0x7d580000, "1,i", 0 },     /* subcc rs1,i,%g0 */
  382.   { "cmp",    0x80a00000, 0x7d580000, "1,2", 0 },     /* subcc rs1,rs2,%g0 */
  383.   
  384. ***************
  385. *** 351,358 ****
  386.   { "and",    0x80082000, 0x41f00000, "i,1,d", 0 },
  387.   { "and",    0x80080000, 0x41f00000, "1,2,d", 0 },
  388.   
  389. ! { "inc",    0x80002001, 0x41f81ffe, "r", 0 },       /* add rs1,1,rsd */
  390.   
  391.   { "addxcc",     0x80c02000, 0x41380000, "1,i,d", 0 },
  392.   { "addxcc",     0x80c02000, 0x41380000, "i,1,d", 0 },
  393.   { "addxcc",     0x80c00000, 0x41380000, "1,2,d", 0 },
  394. --- 377,393 ----
  395.   { "and",    0x80082000, 0x41f00000, "i,1,d", 0 },
  396.   { "and",    0x80080000, 0x41f00000, "1,2,d", 0 },
  397.   
  398. ! { "inc",    0x80002001, 0x41f81ffe, "r", F_ALIAS },    /* add rs1,1,rsd */
  399. ! { "inccc",    0x80802001, 0x41781ffe, "r", F_ALIAS },    /* addcc rd,1,rd */
  400. ! { "dec",        0x80202001, 0x41d81ffe, "r", F_ALIAS },    /* sub rd,1,rd */
  401. ! { "deccc",    0x80a02001, 0x41581ffe, "r", F_ALIAS },    /* subcc rd,1,rd */
  402.   
  403. + { "btst",    0x80882000, 0x41700000, "i,1", F_ALIAS },/* andcc rs1,i,%g0 */
  404. + { "btst",    0x80880000, 0x41700000, "1,2", F_ALIAS },/* andcc rs1,rs2,%0 */
  405. + { "neg",    0x80200000, 0x41d80000, "r", F_ALIAS }, /* sub %0,rd,rd */
  406. + { "neg",    0x80200000, 0x41d80000, "2,d", F_ALIAS }, /* sub %0,rs2,rd */
  407.   { "addxcc",     0x80c02000, 0x41380000, "1,i,d", 0 },
  408.   { "addxcc",     0x80c02000, 0x41380000, "i,1,d", 0 },
  409.   { "addxcc",     0x80c00000, 0x41380000, "1,2,d", 0 },
  410. ***************
  411. *** 366,425 ****
  412.   { "add",    0x80002000, 0x41f80000, "i,1,d", 0 },
  413.   { "add",    0x80000000, 0x41f80000, "1,2,d", 0 },
  414.   
  415. ! { "call",       0x9fc00000, 0x4038201f, "1", 1 }, /* jmpl rs1+%g0, %o7 */
  416. ! { "call",    0x9fc00000, 0x4038201f, "1,#", 1 },
  417. ! { "call",    0x40000000, 0x80000000, "L", 1 },
  418. ! { "call",    0x40000000, 0x80000000, "L,#", 1 },
  419.   
  420. ! { "bvc",        0x3e800000, 0xc1400000, ",al", 1 },
  421. ! { "bvc",    0x1e800000, 0xc1400000, "l", 1 },
  422. ! { "bvs",    0x2e800000, 0xc1400000, ",al", 1 },
  423. ! { "bvs",    0x0e800000, 0xc1400000, "l", 1 },
  424. ! { "bpos",    0x3c800000, 0xc1400000, ",al", 1 },
  425. ! { "bpos",    0x1c800000, 0xc1400000, "l", 1 },
  426. ! { "bneg",    0x2c800000, 0xc1400000, ",al", 1 },
  427. ! { "bneg",    0x0c800000, 0xc1400000, "l", 1 },
  428. ! { "bcc",    0x3a800000, 0xc1400000, ",al", 1 },
  429. ! { "bcc",    0x1a800000, 0xc1400000, "l", 1 },
  430. ! { "bcs",    0x2a800000, 0xc1400000, ",al", 1 },
  431. ! { "bcs",    0x0a800000, 0xc1400000, "l", 1 },
  432. ! { "blu",    0x2a800000, 0xc1400000, ",al", 1 },
  433. ! { "blu",    0x0a800000, 0xc1400000, "l", 1 }, /* same as bcs */
  434. ! { "bgeu",    0x3a800000, 0xc1400000, ",al", 1 },
  435. ! { "bgeu",    0x1a800000, 0xc1400000, "l", 1 }, /* same as bcc */
  436. ! { "bgu",    0x38800000, 0xc1400000, ",al", 1 },
  437. ! { "bgu",    0x18800000, 0xc1400000, "l", 1 },
  438. ! { "bleu",    0x28800000, 0xc1400000, ",al", 1 },
  439. ! { "bleu",    0x08800000, 0xc1400000, "l", 1 },
  440. ! { "bge",    0x36800000, 0xc1400000, ",al", 1 },
  441. ! { "bge",    0x16800000, 0xc1400000, "l", 1 },
  442. ! { "bl",        0x26800000, 0xc1400000, ",al", 1 },
  443. ! { "bl",        0x06800000, 0xc1400000, "l", 1 },
  444. ! { "bg",        0x34800000, 0xc1400000, ",al", 1 },
  445. ! { "bg",        0x14800000, 0xc1400000, "l", 1 },
  446. ! { "ble",    0x24800000, 0xc1400000, ",al", 1 },
  447. ! { "ble",    0x04800000, 0xc1400000, "l", 1 },
  448. ! { "be",        0x22800000, 0xc1400000, ",al", 1 },
  449. ! { "be",        0x02800000, 0xc1400000, "l", 1 },
  450. ! { "bne",    0x32800000, 0xc1400000, ",al", 1 },
  451. ! { "bne",    0x12800000, 0xc1400000, "l", 1 },
  452. ! { "b",        0x30800000, 0xc1400000, ",al", 1 },
  453. ! { "b",        0x10800000, 0xc1400000, "l", 1 },
  454. ! { "ba",        0x30800000, 0xc1400000, ",al", 1 },
  455. ! { "ba",        0x10800000, 0xc1400000, "l", 1 },
  456. ! { "bn",     0x20800000, 0xc1400000, ",al", 1 },
  457. ! { "bn",        0x00800000, 0xc1400000, "l", 1 },
  458.   
  459. ! { "jmp",        0x81c00000, 0x7e38201f, "1", 1 }, /* jmpl rs1+%g0,%g0 */
  460. ! { "jmp",        0x81c02000, 0x7e3fc000, "i", 1 }, /* jmpl %g0+i,%g0 */
  461. ! { "jmp",        0x81c00000, 0x7e382000, "1+2", 1 }, /* jmpl rs1+rs2,%g0 */
  462. ! { "jmp",        0x81c02000, 0x7e380000, "1+i", 1 }, /* jmpl rs1+i,%g0 */
  463. ! { "jmp",        0x81c02000, 0x7e380000, "i+1", 1 }, /* jmpl i+rs1,%g0 */
  464.   
  465. ! { "nop",    0x01000000, 0xfe3fffff, "", 0 }, /* sethi 0, %g0 */
  466.   
  467. - { "set",        0x01000000, 0xc0c00000, "Sh,d", 0 },
  468.   { "sethi",      0x01000000, 0xc0c00000, "h,d", 0 },
  469.   
  470.   { "taddcctv",   0x81102000, 0x40e00000, "1,i,d", 0 },
  471. --- 401,421 ----
  472.   { "add",    0x80002000, 0x41f80000, "i,1,d", 0 },
  473.   { "add",    0x80000000, 0x41f80000, "1,2,d", 0 },
  474.   
  475. ! { "call",       0x9fc00000, 0x4038201f, "1", F_DELAYED }, /* jmpl rs1+%g0, %o7 */
  476. ! { "call",    0x9fc00000, 0x4038201f, "1,#", F_DELAYED },
  477. ! { "call",    0x40000000, 0x80000000, "L", F_DELAYED },
  478. ! { "call",    0x40000000, 0x80000000, "L,#", F_DELAYED },
  479.   
  480. ! { "jmp",        0x81c00000, 0x7e38201f, "1", F_DELAYED }, /* jmpl rs1+%g0,%g0 */
  481. ! { "jmp",        0x81c02000, 0x7e3fc000, "i", F_DELAYED }, /* jmpl %g0+i,%g0 */
  482. ! { "jmp",        0x81c00000, 0x7e382000, "1+2", F_DELAYED }, /* jmpl rs1+rs2,%g0 */
  483. ! { "jmp",        0x81c02000, 0x7e380000, "1+i", F_DELAYED }, /* jmpl rs1+i,%g0 */
  484. ! { "jmp",        0x81c02000, 0x7e380000, "i+1", F_DELAYED }, /* jmpl i+rs1,%g0 */
  485.   
  486. ! { "nop",    0x01000000, 0xfeffffff, "", 0 }, /* sethi 0, %g0 */
  487.   
  488. ! { "set",        0x01000000, 0xc0c00000, "Sh,d", F_ALIAS },
  489.   
  490.   { "sethi",      0x01000000, 0xc0c00000, "h,d", 0 },
  491.   
  492.   { "taddcctv",   0x81102000, 0x40e00000, "1,i,d", 0 },
  493. ***************
  494. *** 427,503 ****
  495.   { "taddcc",     0x81002000, 0x40f80000, "1,i,d", 0 },
  496.   { "taddcc",     0x81000000, 0x40f80000, "1,2,d", 0 },
  497.   
  498. ! { "tvc",    0x9fd02000, 0x402fc000, "i", 0 }, /* tvc %g0+i */
  499. ! { "tvc",        0x9fd02000, 0x40280000, "1+i", 0 },
  500. ! { "tvc",    0x9fd00000, 0x40282000, "1+2", 0 },
  501. ! { "tvc",        0x9fd00000, 0x4028201f, "1", 0 }, /* tvc rs1+%g0 */
  502. ! { "tpos",    0x9dd02000, 0x402fc000, "i", 0 }, /* tpos %g0+i */
  503. ! { "tpos",    0x9dd02000, 0x40280000, "1+i", 0 },
  504. ! { "tpos",    0x9dd00000, 0x40282000, "1+2", 0 },
  505. ! { "tpos",       0x9dd00000, 0x4028201f, "1", 0 }, /* tpos rs1+%g0 */
  506. ! { "tcc",        0x9bd02000, 0x402fc000, "i", 0 }, /* tcc %g0+i */
  507. ! { "tcc",    0x9bd02000, 0x40280000, "1+i", 0 },
  508. ! { "tcc",    0x9bd00000, 0x40282000, "1+2", 0 },
  509. ! { "tcc",        0x9bd00000, 0x4028201f, "1", 0 }, /* tcc rs1+%g0 */
  510. ! { "tgu",    0x99d02000, 0x402fc000, "i", 0 }, /* tgu %g0+i */
  511. ! { "tgu",    0x99d02000, 0x40280000, "1+i", 0 },
  512. ! { "tgu",    0x99d00000, 0x40282000, "1+2", 0 },
  513. ! { "tgu",        0x99d00000, 0x4028201f, "1", 0 }, /* tgu rs1+%g0 */
  514. ! { "tge",    0x97d02000, 0x402fc000, "i", 0 }, /* tge %g0+i */
  515. ! { "tge",    0x97d02000, 0x40280000, "1+i", 0 },
  516. ! { "tge",    0x97d00000, 0x40282000, "1+2", 0 },
  517. ! { "tge",        0x97d00000, 0x4028201f, "1", 0 }, /* tge rs1+%g0 */
  518. ! { "tg",        0x95d02000, 0x402fc000, "i", 0 }, /* tg %g0+i */
  519. ! { "tg",        0x95d02000, 0x40280000, "1+i", 0 },
  520. ! { "tg",        0x95d00000, 0x40282000, "1+2", 0 },
  521. ! { "tg",         0x95d00000, 0x4028201f, "1", 0 }, /* tg rs1+%g0 */
  522. ! { "tne",        0x93d02000, 0x402fc000, "i", 0 }, /* tne %g0+i */
  523. ! { "tne",    0x93d02000, 0x40280000, "1+i", 0 },
  524. ! { "tne",    0x93d00000, 0x40282000, "1+2", 0 },
  525. ! { "tne",        0x93d00000, 0x4028201f, "1", 0 }, /* tne rs1+%g0 */
  526. ! { "tleu",       0x8bd02000, 0x502fc000, "i", 0 }, /* tleu %g0+i */
  527. ! { "tleu",    0x8bd02000, 0x50280000, "1+i", 0 },
  528. ! { "tleu",    0x8bd00000, 0x50282000, "1+2", 0 },
  529. ! { "tleu",       0x8bd00000, 0x5028201f, "1", 0 }, /* tleu rs1+%g0 */
  530. ! { "ta",            0x91d02000, 0x402fc000, "i", 0 }, /* ta %g0+i */
  531. ! { "ta",        0x91d02000, 0x402d0000, "1+i", 0 },
  532. ! { "ta",        0x91d00000, 0x40282000, "1+2", 0 },
  533. ! { "ta",         0x91d00000, 0x4028201f, "1", 0 }, /* ta rs1+%g0 */
  534. ! { "tvs",    0x8fd02000, 0x502fc000, "i", 0 }, /* tvs %g0+i */
  535. ! { "tvs",    0x8fd02000, 0x50280000, "1+i", 0 },
  536. ! { "tvs",    0x8fd00000, 0x50282000, "1+2", 0 },
  537. ! { "tvs",        0x8fd00000, 0x5028201f, "1", 0 }, /* tvs rs1+%g0 */
  538. ! { "tneg",    0x8dd02000, 0x502fc000, "i", 0 }, /* tneg %g0+i */
  539. ! { "tneg",    0x8dd02000, 0x50280000, "1+i", 0 },
  540. ! { "tneg",    0x8dd00000, 0x50282000, "1+2", 0 },
  541. ! { "tneg",    0x8dd00000, 0x5028201f, "1", 0 }, /* tneg rs1+%g0 */
  542. ! { "tcs",        0x8bd02000, 0x502fc000, "i", 0 }, /* tcs %g0+i */
  543. ! { "tcs",    0x8bd02000, 0x50280000, "1+i", 0 },
  544. ! { "tcs",    0x8bd00000, 0x50282000, "1+2", 0 },
  545. ! { "tcs",    0x8bd00000, 0x5028201f, "1", 0 }, /* tcs rs1+%g0 */
  546. ! { "tl",        0x87d02000, 0x502fc000, "i", 0 }, /* tl %g0+i */
  547. ! { "tl",        0x87d02000, 0x50280000, "1+i", 0 },
  548. ! { "tl",        0x87d00000, 0x50282000, "1+2", 0 },
  549. ! { "tl",        0x87d00000, 0x5028201f, "1", 0 }, /* tl rs1+%g0 */
  550. ! { "tle",    0x85d02000, 0x502fc000, "i", 0 }, /* tle %g0+i */
  551. ! { "tle",    0x85d02000, 0x50280000, "1+i", 0 },
  552. ! { "tle",    0x85d00000, 0x50282000, "1+2", 0 },
  553. ! { "tle",    0x85d00000, 0x5028201f, "1", 0 }, /* tle rs1+%g0 */
  554. ! { "te",            0x83d02000, 0x502fc000, "i", 0 }, /* te %g0+i */
  555. ! { "te",        0x83d02000, 0x50280000, "1+i", 0 },
  556. ! { "te",        0x83d00000, 0x50282000, "1+2", 0 },
  557. ! { "te",         0x83d00000, 0x5028201f, "1", 0 }, /* te rs1+%g0 */
  558. ! { "tn",        0x81d02000, 0x502fc000, "i", 0 }, /* tn %g0+i */
  559. ! { "tn",            0x81d02000, 0x50280000, "1+i", 0 },
  560. ! { "tn",        0x81d00000, 0x50282000, "1+2", 0 },
  561. ! { "tn",         0x81d00000, 0x5028201f, "1", 0 }, /* tn rs1+%g0 */
  562.   
  563.   { "tsubcc",     0x81080000, 0x40f00000, "1,2,d", 0 },
  564.   { "tsubcc",     0x81082000, 0x40f00000, "1,i,d", 0 },
  565.   { "tsubcctv",   0x80580000, 0x40a00000, "1,2,d", 0 },
  566.   { "tsubcctv",   0x80582000, 0x40a00000, "1,i,d", 0 },
  567.   
  568. ! { "unimp",      0x00000000, 0x00000000, "l", 0 },
  569.   
  570.   { "iflush",     0x81d80000, 0x40202000, "1+2", 0 },
  571.   { "iflush",     0x81d82000, 0x40200000, "1+i", 0 },
  572. --- 423,497 ----
  573.   { "taddcc",     0x81002000, 0x40f80000, "1,i,d", 0 },
  574.   { "taddcc",     0x81000000, 0x40f80000, "1,2,d", 0 },
  575.   
  576. ! /* Conditional instructions.
  577.   
  578. +    Because this part of the table was such a mess earlier, I have
  579. +    macrofied it so that all the branches and traps are generated from
  580. +    a single-line description of each condition value.  */
  581. + #define ANNUL  0x20000000
  582. + #define    IMMED  0x00002000
  583. + #define    RS1_G0 0x0007C000
  584. + #define    RS2_G0 0x0000001F
  585. + /* Define two branches -- one annulled, one without */
  586. + #define br(opcode, mask, lose, flags)    \
  587. +  { opcode, mask+ANNUL, lose, ",al", flags },    \
  588. +  { opcode, mask      , lose, "l",   flags }
  589. + /* Define four traps: reg+reg, reg + immediate, immediate alone, reg alone. */
  590. + #define tr(opcode, mask, lose, flags) \
  591. +  {opcode, mask+IMMED, lose+RS1_G0      , "i", flags },     /* %g0 + imm */ \
  592. +  {opcode, mask+IMMED, lose             , "1+i", flags }, /* rs1 + imm */ \
  593. +  {opcode, mask      , lose+IMMED       , "1+2", flags }, /* rs1 + rs2 */ \
  594. +  {opcode, mask      , lose+IMMED+RS2_G0, "1", flags }    /* rs1 + %g0 */
  595. + /* Define both branches and traps based on condition mask */
  596. + #ifdef __STDC__
  597. + #define cond(bop, top, mask, flags)    \
  598. +   br(#bop,  0x00800000+(mask << 25), 0xC1400000, F_DELAYED|flags), \
  599. +   tr(#top,  0x81d00000+(mask << 25), 0x40280000, flags)
  600. + #else
  601. + #define cond(bop, top, mask, flags)    \
  602. +   br("bop", 0x00800000+(mask << 25), 0xC1400000, F_DELAYED|flags), \
  603. +   tr("top", 0x81d00000+(mask << 25), 0x40280000, flags)
  604. + #endif
  605. + /* Define all the conditions, all the branches, all the traps.  */
  606. + /* Use no extra spaces or tabs around the first two args, since cpp
  607. +    will include them in the printed strings.  */
  608. + cond (bvc,tvc,   0xF, 0),
  609. + cond (bvs,tvs,   0x7, 0),
  610. + cond (bpos,tpos, 0xE, 0),
  611. + cond (bneg,tneg, 0x6, 0),
  612. + cond (bcc,tcc,   0xD, 0),
  613. + cond (bcs,tcs,   0x5, 0),
  614. + cond (blu,tlu,   0x5, F_ALIAS), /* for cs */
  615. + cond (bgeu,tgeu, 0xD, F_ALIAS), /* for cc */
  616. + cond (bgu,tgu,   0xC, 0),
  617. + cond (bleu,tleu, 0x4, 0),
  618. + cond (bge,tge,   0xB, 0),
  619. + cond (bl,tl,     0x3, 0),
  620. + cond (bg,tg,     0xA, 0),
  621. + cond (ble,tle,   0x2, 0),
  622. + cond (be,te,     0x1, 0),
  623. + cond (bz,tz,     0x1, F_ALIAS), /* for e */
  624. + cond (bne,tne,   0x9, 0),
  625. + cond (bnz,tnz,   0x9, F_ALIAS), /* for ne */
  626. + cond (b,t,       0x8, 0),
  627. + cond (ba,ta,     0x8, F_ALIAS), /* for nothing */
  628. + cond (bn,tn,     0x0, 0),
  629. + #undef cond
  630. + #undef br
  631. + #undef tr
  632.   { "tsubcc",     0x81080000, 0x40f00000, "1,2,d", 0 },
  633.   { "tsubcc",     0x81082000, 0x40f00000, "1,i,d", 0 },
  634.   { "tsubcctv",   0x80580000, 0x40a00000, "1,2,d", 0 },
  635.   { "tsubcctv",   0x80582000, 0x40a00000, "1,i,d", 0 },
  636.   
  637. ! { "unimp",      0x00000000, 0xFFFFFFFF, "l", 0 },
  638.   
  639.   { "iflush",     0x81d80000, 0x40202000, "1+2", 0 },
  640.   { "iflush",     0x81d82000, 0x40200000, "1+i", 0 },
  641. ***************
  642. *** 515,589 ****
  643.   { "xor",    0x80182000, 0x41e00000, "1,i,d", 0 },
  644.   { "xor",    0x80182000, 0x41e00000, "i,1,d", 0 },
  645.   
  646.   { "fpop1",      0x81a00000, 0x40580000, "[1+2],d", 0 },
  647.   { "fpop2",      0x81a80000, 0x40500000, "[1+2],d", 0 },
  648.   
  649. ! { "fb",         0x31800000, 0xc0400000, ",al", 1 },
  650. ! { "fb",         0x11800000, 0xc0400000, "l", 1 },
  651. ! { "fba",        0x31800000, 0xc0400000, ",al", 1 },
  652. ! { "fba",        0x11800000, 0xc0400000, "l", 1 },
  653. ! { "fbn",        0x21800000, 0xc0400000, ",al", 1 },
  654. ! { "fbn",        0x01800000, 0xc0400000, "l", 1 },
  655. ! { "fbu",        0x2f800000, 0xc0400000, ",al", 1 },
  656. ! { "fbu",        0x0f800000, 0xc0400000, "l", 1 },
  657. ! { "fbg",        0x2d800000, 0xc0400000, ",al", 1 },
  658. ! { "fbg",        0x0d800000, 0xc0400000, "l", 1 },
  659. ! { "fbug",       0x2b800000, 0xc0400000, ",al", 1 },
  660. ! { "fbug",       0x0b800000, 0xc0400000, "l", 1 },
  661. ! { "fbl",        0x29800000, 0xc0400000, ",al", 1 },
  662. ! { "fbl",        0x09800000, 0xc0400000, "l", 1 },
  663. ! { "fbul",       0x27800000, 0xc0400000, ",al", 1 },
  664. ! { "fbul",       0x07800000, 0xc0400000, "l", 1 },
  665. ! { "fblg",       0x25800000, 0xc0400000, ",al", 1 },
  666. ! { "fblg",       0x05800000, 0xc0400000, "l", 1 },
  667. ! { "fbne",       0x23800000, 0xc0400000, ",al", 1 },
  668. ! { "fbne",       0x03800000, 0xc0400000, "l", 1 },
  669. ! { "fbe",        0x33800000, 0xc0400000, ",al", 1 },
  670. ! { "fbe",        0x13800000, 0xc0400000, "l", 1 },
  671. ! { "fbue",       0x35800000, 0xc0400000, ",al", 1 },
  672. ! { "fbue",       0x15800000, 0xc0400000, "l", 1 },
  673. ! { "fbge",       0x37800000, 0xc0400000, ",al", 1 },
  674. ! { "fbge",       0x17800000, 0xc0400000, "l", 1 },
  675. ! { "fbuge",      0x39800000, 0xc0400000, ",al", 1 },
  676. ! { "fbuge",      0x19800000, 0xc0400000, "l", 1 },
  677. ! { "fble",       0x3b800000, 0xc0400000, ",al", 1 },
  678. ! { "fble",       0x1b800000, 0xc0400000, "l", 1 },
  679. ! { "fbule",      0x3d800000, 0xc0400000, ",al", 1 },
  680. ! { "fbule",      0x1d800000, 0xc0400000, "l", 1 },
  681. ! { "fbo",        0x3f800000, 0xc0400000, ",al", 1 },
  682. ! { "fbo",        0x1f800000, 0xc0400000, "l", 1 },
  683.   
  684. ! { "cba",        0x31c00000, 0xce000000, ",al", 1 },
  685. ! { "cba",        0x11c00000, 0xce000000, "l", 1 },
  686. ! { "cbn",        0x21c00000, 0xde000000, ",al", 1 },
  687. ! { "cbn",        0x01c00000, 0xde000000, "l", 1 },
  688. ! { "cb3",        0x2fc00000, 0xc0000000, ",al", 1 },
  689. ! { "cb3",        0x0fc00000, 0xc0000000, "l", 1 },
  690. ! { "cb2",        0x2dc00000, 0xc0000000, ",al", 1 },
  691. ! { "cb2",        0x0dc00000, 0xc0000000, "l", 1 },
  692. ! { "cb23",       0x2bc00000, 0xc0000000, ",al", 1 },
  693. ! { "cb23",       0x0bc00000, 0xc0000000, "l", 1 },
  694. ! { "cb1",        0x29c00000, 0xc0000000, ",al", 1 },
  695. ! { "cb1",        0x09c00000, 0xc0000000, "l", 1 },
  696. ! { "cb13",       0x27c00000, 0xc0000000, ",al", 1 },
  697. ! { "cb13",       0x07c00000, 0xc0000000, "l", 1 },
  698. ! { "cb12",       0x25c00000, 0xc0000000, ",al", 1 },
  699. ! { "cb12",       0x05c00000, 0xc0000000, "l", 1 },
  700. ! { "cb123",      0x23c00000, 0xc0000000, ",al", 1 },
  701. ! { "cb123",      0x03c00000, 0xc0000000, "l", 1 },
  702. ! { "cb0",        0x33c00000, 0xc0000000, ",al", 1 },
  703. ! { "cb0",        0x13c00000, 0xc0000000, "l", 1 },
  704. ! { "cb03",       0x35c00000, 0xc0000000, ",al", 1 },
  705. ! { "cb03",       0x15c00000, 0xc0000000, "l", 1 },
  706. ! { "cb02",       0x37c00000, 0xc0000000, ",al", 1 },
  707. ! { "cb02",       0x17c00000, 0xc0000000, "l", 1 },
  708. ! { "cb023",      0x39c00000, 0xc0000000, ",al", 1 },
  709. ! { "cb023",      0x19c00000, 0xc0000000, "l", 1 },
  710. ! { "cb013",      0x3dc00000, 0xc0000000, ",al", 1 },
  711. ! { "cb013",      0x1dc00000, 0xc0000000, "l", 1 },
  712. ! { "cb012",      0x3fc00000, 0xc0000000, ",al", 1 },
  713. ! { "cb012",      0x1fc00000, 0xc0000000, "l", 1 },
  714.   
  715.   { "fstoi",      0x81a01a20, 0x400025c0, "f,g", 0 },
  716.   { "fdtoi",      0x81a01a40, 0x400025a0, "f,g", 0 },
  717.   { "fxtoi",      0x81a01a60, 0x40002580, "f,g", 0 },
  718. --- 509,594 ----
  719.   { "xor",    0x80182000, 0x41e00000, "1,i,d", 0 },
  720.   { "xor",    0x80182000, 0x41e00000, "i,1,d", 0 },
  721.   
  722. + { "not",        0x80380000, 0x41c00000, "r", F_ALIAS }, /* xnor rd,%0,rd */
  723. + { "not",        0x80380000, 0x41c00000, "1,d", F_ALIAS }, /* xnor rs1,%0,rd */
  724. + { "btog",    0x80180000, 0x41e02000, "2,r", F_ALIAS }, /* xor rd,rs2,rd */
  725. + { "btog",    0x80182000, 0x41e00000, "i,r", F_ALIAS }, /* xor rd,i,rd */
  726.   { "fpop1",      0x81a00000, 0x40580000, "[1+2],d", 0 },
  727.   { "fpop2",      0x81a80000, 0x40500000, "[1+2],d", 0 },
  728.   
  729. ! /* Someday somebody should give these the same treatment as the branches
  730. !    above.  FIXME someday.  */
  731.   
  732. ! { "fb",         0x31800000, 0xc0400000, ",al", F_DELAYED },
  733. ! { "fb",         0x11800000, 0xc0400000, "l", F_DELAYED },
  734. ! { "fba",        0x31800000, 0xc0400000, ",al", F_DELAYED|F_ALIAS },
  735. ! { "fba",        0x11800000, 0xc0400000, "l", F_DELAYED|F_ALIAS },
  736. ! { "fbn",        0x21800000, 0xc0400000, ",al", F_DELAYED },
  737. ! { "fbn",        0x01800000, 0xc0400000, "l", F_DELAYED },
  738. ! { "fbu",        0x2f800000, 0xc0400000, ",al", F_DELAYED },
  739. ! { "fbu",        0x0f800000, 0xc0400000, "l", F_DELAYED },
  740. ! { "fbg",        0x2d800000, 0xc0400000, ",al", F_DELAYED },
  741. ! { "fbg",        0x0d800000, 0xc0400000, "l", F_DELAYED },
  742. ! { "fbug",       0x2b800000, 0xc0400000, ",al", F_DELAYED },
  743. ! { "fbug",       0x0b800000, 0xc0400000, "l", F_DELAYED },
  744. ! { "fbl",        0x29800000, 0xc0400000, ",al", F_DELAYED },
  745. ! { "fbl",        0x09800000, 0xc0400000, "l", F_DELAYED },
  746. ! { "fbul",       0x27800000, 0xc0400000, ",al", F_DELAYED },
  747. ! { "fbul",       0x07800000, 0xc0400000, "l", F_DELAYED },
  748. ! { "fblg",       0x25800000, 0xc0400000, ",al", F_DELAYED },
  749. ! { "fblg",       0x05800000, 0xc0400000, "l", F_DELAYED },
  750. ! { "fbne",       0x23800000, 0xc0400000, ",al", F_DELAYED },
  751. ! { "fbne",       0x03800000, 0xc0400000, "l", F_DELAYED },
  752. ! { "fbe",        0x33800000, 0xc0400000, ",al", F_DELAYED },
  753. ! { "fbe",        0x13800000, 0xc0400000, "l", F_DELAYED },
  754. ! { "fbue",       0x35800000, 0xc0400000, ",al", F_DELAYED },
  755. ! { "fbue",       0x15800000, 0xc0400000, "l", F_DELAYED },
  756. ! { "fbge",       0x37800000, 0xc0400000, ",al", F_DELAYED },
  757. ! { "fbge",       0x17800000, 0xc0400000, "l", F_DELAYED },
  758. ! { "fbuge",      0x39800000, 0xc0400000, ",al", F_DELAYED },
  759. ! { "fbuge",      0x19800000, 0xc0400000, "l", F_DELAYED },
  760. ! { "fble",       0x3b800000, 0xc0400000, ",al", F_DELAYED },
  761. ! { "fble",       0x1b800000, 0xc0400000, "l", F_DELAYED },
  762. ! { "fbule",      0x3d800000, 0xc0400000, ",al", F_DELAYED },
  763. ! { "fbule",      0x1d800000, 0xc0400000, "l", F_DELAYED },
  764. ! { "fbo",        0x3f800000, 0xc0400000, ",al", F_DELAYED },
  765. ! { "fbo",        0x1f800000, 0xc0400000, "l", F_DELAYED },
  766.   
  767. + { "cba",        0x31c00000, 0xce000000, ",al", F_DELAYED },
  768. + { "cba",        0x11c00000, 0xce000000, "l", F_DELAYED },
  769. + { "cbn",        0x21c00000, 0xde000000, ",al", F_DELAYED },
  770. + { "cbn",        0x01c00000, 0xde000000, "l", F_DELAYED },
  771. + { "cb3",        0x2fc00000, 0xc0000000, ",al", F_DELAYED },
  772. + { "cb3",        0x0fc00000, 0xc0000000, "l", F_DELAYED },
  773. + { "cb2",        0x2dc00000, 0xc0000000, ",al", F_DELAYED },
  774. + { "cb2",        0x0dc00000, 0xc0000000, "l", F_DELAYED },
  775. + { "cb23",       0x2bc00000, 0xc0000000, ",al", F_DELAYED },
  776. + { "cb23",       0x0bc00000, 0xc0000000, "l", F_DELAYED },
  777. + { "cb1",        0x29c00000, 0xc0000000, ",al", F_DELAYED },
  778. + { "cb1",        0x09c00000, 0xc0000000, "l", F_DELAYED },
  779. + { "cb13",       0x27c00000, 0xc0000000, ",al", F_DELAYED },
  780. + { "cb13",       0x07c00000, 0xc0000000, "l", F_DELAYED },
  781. + { "cb12",       0x25c00000, 0xc0000000, ",al", F_DELAYED },
  782. + { "cb12",       0x05c00000, 0xc0000000, "l", F_DELAYED },
  783. + { "cb123",      0x23c00000, 0xc0000000, ",al", F_DELAYED },
  784. + { "cb123",      0x03c00000, 0xc0000000, "l", F_DELAYED },
  785. + { "cb0",        0x33c00000, 0xc0000000, ",al", F_DELAYED },
  786. + { "cb0",        0x13c00000, 0xc0000000, "l", F_DELAYED },
  787. + { "cb03",       0x35c00000, 0xc0000000, ",al", F_DELAYED },
  788. + { "cb03",       0x15c00000, 0xc0000000, "l", F_DELAYED },
  789. + { "cb02",       0x37c00000, 0xc0000000, ",al", F_DELAYED },
  790. + { "cb02",       0x17c00000, 0xc0000000, "l", F_DELAYED },
  791. + { "cb023",      0x39c00000, 0xc0000000, ",al", F_DELAYED },
  792. + { "cb023",      0x19c00000, 0xc0000000, "l", F_DELAYED },
  793. + { "cb01",       0x3bc00000, 0xc0000000, ",al", F_DELAYED },
  794. + { "cb01",       0x1bc00000, 0xc0000000, "l", F_DELAYED },
  795. + { "cb013",      0x3dc00000, 0xc0000000, ",al", F_DELAYED },
  796. + { "cb013",      0x1dc00000, 0xc0000000, "l", F_DELAYED },
  797. + { "cb012",      0x3fc00000, 0xc0000000, ",al", F_DELAYED },
  798. + { "cb012",      0x1fc00000, 0xc0000000, "l", F_DELAYED },
  799.   { "fstoi",      0x81a01a20, 0x400025c0, "f,g", 0 },
  800.   { "fdtoi",      0x81a01a40, 0x400025a0, "f,g", 0 },
  801.   { "fxtoi",      0x81a01a60, 0x40002580, "f,g", 0 },
  802. ***************
  803. *** 602,607 ****
  804. --- 607,613 ----
  805.   { "fdivx",      0x81a009e0, 0x40083600, "e,f,g", 0 },
  806.   { "fdivd",      0x81a009c0, 0x40003620, "e,f,g", 0 },
  807.   { "fdivs",      0x81a009a0, 0x40003640, "e,f,g", 0 },
  808.   { "fmuls",      0x81a00920, 0x400036c0, "e,f,g", 0 },
  809.   { "fmuld",      0x81a00940, 0x400036a0, "e,f,g", 0 },
  810.   { "fmulx",      0x81a00960, 0x40003680, "e,f,g", 0 },
  811. ***************
  812. *** 617,622 ****
  813. --- 623,629 ----
  814.   { "fsubx",      0x81a008e0, 0x40003700, "e,f,g", 0 },
  815.   { "fsubd",      0x81a008c0, 0x40003720, "e,f,g", 0 },
  816.   { "fsubs",      0x81a008a0, 0x40003740, "e,f,g", 0 },
  817.   { "faddx",      0x81a00860, 0x40003780, "e,f,g", 0 },
  818.   { "faddd",      0x81a00840, 0x400037a0, "e,f,g", 0 },
  819.   { "fadds",      0x81a00820, 0x400037c0, "e,f,g", 0 },
  820.  
  821.  
  822.