/* Simulator instruction decoder for frvbf.

THIS FILE IS MACHINE GENERATED WITH CGEN.

Copyright 1996-2004 Free Software Foundation, Inc.

This file is part of the GNU simulators.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

*/

#define WANT_CPU frvbf
#define WANT_CPU_FRVBF

#include "sim-main.h"
#include "sim-assert.h"

/* The instruction descriptor array.
   This is computed at runtime.  Space for it is not malloc'd to save a
   teensy bit of cpu in the decoder.  Moving it to malloc space is trivial
   but won't be done until necessary (we don't currently support the runtime
   addition of instructions nor an SMP machine with different cpus).  */
static IDESC frvbf_insn_data[FRVBF_INSN__MAX];

/* Commas between elements are contained in the macros.
   Some of these are conditionally compiled out.  */

static const struct insn_sem frvbf_insn_sem[] =
{
  { VIRTUAL_INSN_X_INVALID, FRVBF_INSN_X_INVALID, FRVBF_SFMT_EMPTY },
  { VIRTUAL_INSN_X_AFTER, FRVBF_INSN_X_AFTER, FRVBF_SFMT_EMPTY },
  { VIRTUAL_INSN_X_BEFORE, FRVBF_INSN_X_BEFORE, FRVBF_SFMT_EMPTY },
  { VIRTUAL_INSN_X_CTI_CHAIN, FRVBF_INSN_X_CTI_CHAIN, FRVBF_SFMT_EMPTY },
  { VIRTUAL_INSN_X_CHAIN, FRVBF_INSN_X_CHAIN, FRVBF_SFMT_EMPTY },
  { VIRTUAL_INSN_X_BEGIN, FRVBF_INSN_X_BEGIN, FRVBF_SFMT_EMPTY },
  { FRV_INSN_ADD, FRVBF_INSN_ADD, FRVBF_SFMT_ADD },
  { FRV_INSN_SUB, FRVBF_INSN_SUB, FRVBF_SFMT_ADD },
  { FRV_INSN_AND, FRVBF_INSN_AND, FRVBF_SFMT_ADD },
  { FRV_INSN_OR, FRVBF_INSN_OR, FRVBF_SFMT_ADD },
  { FRV_INSN_XOR, FRVBF_INSN_XOR, FRVBF_SFMT_ADD },
  { FRV_INSN_NOT, FRVBF_INSN_NOT, FRVBF_SFMT_NOT },
  { FRV_INSN_SDIV, FRVBF_INSN_SDIV, FRVBF_SFMT_SDIV },
  { FRV_INSN_NSDIV, FRVBF_INSN_NSDIV, FRVBF_SFMT_SDIV },
  { FRV_INSN_UDIV, FRVBF_INSN_UDIV, FRVBF_SFMT_SDIV },
  { FRV_INSN_NUDIV, FRVBF_INSN_NUDIV, FRVBF_SFMT_SDIV },
  { FRV_INSN_SMUL, FRVBF_INSN_SMUL, FRVBF_SFMT_SMUL },
  { FRV_INSN_UMUL, FRVBF_INSN_UMUL, FRVBF_SFMT_SMUL },
  { FRV_INSN_SMU, FRVBF_INSN_SMU, FRVBF_SFMT_SMU },
  { FRV_INSN_SMASS, FRVBF_INSN_SMASS, FRVBF_SFMT_SMASS },
  { FRV_INSN_SMSSS, FRVBF_INSN_SMSSS, FRVBF_SFMT_SMASS },
  { FRV_INSN_SLL, FRVBF_INSN_SLL, FRVBF_SFMT_ADD },
  { FRV_INSN_SRL, FRVBF_INSN_SRL, FRVBF_SFMT_ADD },
  { FRV_INSN_SRA, FRVBF_INSN_SRA, FRVBF_SFMT_ADD },
  { FRV_INSN_SLASS, FRVBF_INSN_SLASS, FRVBF_SFMT_ADD },
  { FRV_INSN_SCUTSS, FRVBF_INSN_SCUTSS, FRVBF_SFMT_SCUTSS },
  { FRV_INSN_SCAN, FRVBF_INSN_SCAN, FRVBF_SFMT_ADD },
  { FRV_INSN_CADD, FRVBF_INSN_CADD, FRVBF_SFMT_CADD },
  { FRV_INSN_CSUB, FRVBF_INSN_CSUB, FRVBF_SFMT_CADD },
  { FRV_INSN_CAND, FRVBF_INSN_CAND, FRVBF_SFMT_CADD },
  { FRV_INSN_COR, FRVBF_INSN_COR, FRVBF_SFMT_CADD },
  { FRV_INSN_CXOR, FRVBF_INSN_CXOR, FRVBF_SFMT_CADD },
  { FRV_INSN_CNOT, FRVBF_INSN_CNOT, FRVBF_SFMT_CNOT },
  { FRV_INSN_CSMUL, FRVBF_INSN_CSMUL, FRVBF_SFMT_CSMUL },
  { FRV_INSN_CSDIV, FRVBF_INSN_CSDIV, FRVBF_SFMT_CSDIV },
  { FRV_INSN_CUDIV, FRVBF_INSN_CUDIV, FRVBF_SFMT_CSDIV },
  { FRV_INSN_CSLL, FRVBF_INSN_CSLL, FRVBF_SFMT_CADD },
  { FRV_INSN_CSRL, FRVBF_INSN_CSRL, FRVBF_SFMT_CADD },
  { FRV_INSN_CSRA, FRVBF_INSN_CSRA, FRVBF_SFMT_CADD },
  { FRV_INSN_CSCAN, FRVBF_INSN_CSCAN, FRVBF_SFMT_CADD },
  { FRV_INSN_ADDCC, FRVBF_INSN_ADDCC, FRVBF_SFMT_ADDCC },
  { FRV_INSN_SUBCC, FRVBF_INSN_SUBCC, FRVBF_SFMT_ADDCC },
  { FRV_INSN_ANDCC, FRVBF_INSN_ANDCC, FRVBF_SFMT_ANDCC },
  { FRV_INSN_ORCC, FRVBF_INSN_ORCC, FRVBF_SFMT_ANDCC },
  { FRV_INSN_XORCC, FRVBF_INSN_XORCC, FRVBF_SFMT_ANDCC },
  { FRV_INSN_SLLCC, FRVBF_INSN_SLLCC, FRVBF_SFMT_ADDCC },
  { FRV_INSN_SRLCC, FRVBF_INSN_SRLCC, FRVBF_SFMT_ADDCC },
  { FRV_INSN_SRACC, FRVBF_INSN_SRACC, FRVBF_SFMT_ADDCC },
  { FRV_INSN_SMULCC, FRVBF_INSN_SMULCC, FRVBF_SFMT_SMULCC },
  { FRV_INSN_UMULCC, FRVBF_INSN_UMULCC, FRVBF_SFMT_SMULCC },
  { FRV_INSN_CADDCC, FRVBF_INSN_CADDCC, FRVBF_SFMT_CADDCC },
  { FRV_INSN_CSUBCC, FRVBF_INSN_CSUBCC, FRVBF_SFMT_CADDCC },
  { FRV_INSN_CSMULCC, FRVBF_INSN_CSMULCC, FRVBF_SFMT_CSMULCC },
  { FRV_INSN_CANDCC, FRVBF_INSN_CANDCC, FRVBF_SFMT_CADDCC },
  { FRV_INSN_CORCC, FRVBF_INSN_CORCC, FRVBF_SFMT_CADDCC },
  { FRV_INSN_CXORCC, FRVBF_INSN_CXORCC, FRVBF_SFMT_CADDCC },
  { FRV_INSN_CSLLCC, FRVBF_INSN_CSLLCC, FRVBF_SFMT_CADDCC },
  { FRV_INSN_CSRLCC, FRVBF_INSN_CSRLCC, FRVBF_SFMT_CADDCC },
  { FRV_INSN_CSRACC, FRVBF_INSN_CSRACC, FRVBF_SFMT_CADDCC },
  { FRV_INSN_ADDX, FRVBF_INSN_ADDX, FRVBF_SFMT_ADDX },
  { FRV_INSN_SUBX, FRVBF_INSN_SUBX, FRVBF_SFMT_ADDX },
  { FRV_INSN_ADDXCC, FRVBF_INSN_ADDXCC, FRVBF_SFMT_ADDCC },
  { FRV_INSN_SUBXCC, FRVBF_INSN_SUBXCC, FRVBF_SFMT_ADDCC },
  { FRV_INSN_ADDSS, FRVBF_INSN_ADDSS, FRVBF_SFMT_ADD },
  { FRV_INSN_SUBSS, FRVBF_INSN_SUBSS, FRVBF_SFMT_ADD },
  { FRV_INSN_ADDI, FRVBF_INSN_ADDI, FRVBF_SFMT_ADDI },
  { FRV_INSN_SUBI, FRVBF_INSN_SUBI, FRVBF_SFMT_ADDI },
  { FRV_INSN_ANDI, FRVBF_INSN_ANDI, FRVBF_SFMT_ADDI },
  { FRV_INSN_ORI, FRVBF_INSN_ORI, FRVBF_SFMT_ADDI },
  { FRV_INSN_XORI, FRVBF_INSN_XORI, FRVBF_SFMT_ADDI },
  { FRV_INSN_SDIVI, FRVBF_INSN_SDIVI, FRVBF_SFMT_SDIVI },
  { FRV_INSN_NSDIVI, FRVBF_INSN_NSDIVI, FRVBF_SFMT_SDIVI },
  { FRV_INSN_UDIVI, FRVBF_INSN_UDIVI, FRVBF_SFMT_SDIVI },
  { FRV_INSN_NUDIVI, FRVBF_INSN_NUDIVI, FRVBF_SFMT_SDIVI },
  { FRV_INSN_SMULI, FRVBF_INSN_SMULI, FRVBF_SFMT_SMULI },
  { FRV_INSN_UMULI, FRVBF_INSN_UMULI, FRVBF_SFMT_SMULI },
  { FRV_INSN_SLLI, FRVBF_INSN_SLLI, FRVBF_SFMT_ADDI },
  { FRV_INSN_SRLI, FRVBF_INSN_SRLI, FRVBF_SFMT_ADDI },
  { FRV_INSN_SRAI, FRVBF_INSN_SRAI, FRVBF_SFMT_ADDI },
  { FRV_INSN_SCANI, FRVBF_INSN_SCANI, FRVBF_SFMT_ADDI },
  { FRV_INSN_ADDICC, FRVBF_INSN_ADDICC, FRVBF_SFMT_ADDICC },
  { FRV_INSN_SUBICC, FRVBF_INSN_SUBICC, FRVBF_SFMT_ADDICC },
  { FRV_INSN_ANDICC, FRVBF_INSN_ANDICC, FRVBF_SFMT_ANDICC },
  { FRV_INSN_ORICC, FRVBF_INSN_ORICC, FRVBF_SFMT_ANDICC },
  { FRV_INSN_XORICC, FRVBF_INSN_XORICC, FRVBF_SFMT_ANDICC },
  { FRV_INSN_SMULICC, FRVBF_INSN_SMULICC, FRVBF_SFMT_SMULICC },
  { FRV_INSN_UMULICC, FRVBF_INSN_UMULICC, FRVBF_SFMT_SMULICC },
  { FRV_INSN_SLLICC, FRVBF_INSN_SLLICC, FRVBF_SFMT_ADDICC },
  { FRV_INSN_SRLICC, FRVBF_INSN_SRLICC, FRVBF_SFMT_ADDICC },
  { FRV_INSN_SRAICC, FRVBF_INSN_SRAICC, FRVBF_SFMT_ADDICC },
  { FRV_INSN_ADDXI, FRVBF_INSN_ADDXI, FRVBF_SFMT_ADDXI },
  { FRV_INSN_SUBXI, FRVBF_INSN_SUBXI, FRVBF_SFMT_ADDXI },
  { FRV_INSN_ADDXICC, FRVBF_INSN_ADDXICC, FRVBF_SFMT_ADDICC },
  { FRV_INSN_SUBXICC, FRVBF_INSN_SUBXICC, FRVBF_SFMT_ADDICC },
  { FRV_INSN_CMPB, FRVBF_INSN_CMPB, FRVBF_SFMT_CMPB },
  { FRV_INSN_CMPBA, FRVBF_INSN_CMPBA, FRVBF_SFMT_CMPB },
  { FRV_INSN_SETLO, FRVBF_INSN_SETLO, FRVBF_SFMT_SETLO },
  { FRV_INSN_SETHI, FRVBF_INSN_SETHI, FRVBF_SFMT_SETHI },
  { FRV_INSN_SETLOS, FRVBF_INSN_SETLOS, FRVBF_SFMT_SETLOS },
  { FRV_INSN_LDSB, FRVBF_INSN_LDSB, FRVBF_SFMT_LDSB },
  { FRV_INSN_LDUB, FRVBF_INSN_LDUB, FRVBF_SFMT_LDSB },
  { FRV_INSN_LDSH, FRVBF_INSN_LDSH, FRVBF_SFMT_LDSB },
  { FRV_INSN_LDUH, FRVBF_INSN_LDUH, FRVBF_SFMT_LDSB },
  { FRV_INSN_LD, FRVBF_INSN_LD, FRVBF_SFMT_LDSB },
  { FRV_INSN_LDBF, FRVBF_INSN_LDBF, FRVBF_SFMT_LDBF },
  { FRV_INSN_LDHF, FRVBF_INSN_LDHF, FRVBF_SFMT_LDBF },
  { FRV_INSN_LDF, FRVBF_INSN_LDF, FRVBF_SFMT_LDBF },
  { FRV_INSN_LDC, FRVBF_INSN_LDC, FRVBF_SFMT_LDC },
  { FRV_INSN_NLDSB, FRVBF_INSN_NLDSB, FRVBF_SFMT_NLDSB },
  { FRV_INSN_NLDUB, FRVBF_INSN_NLDUB, FRVBF_SFMT_NLDSB },
  { FRV_INSN_NLDSH, FRVBF_INSN_NLDSH, FRVBF_SFMT_NLDSB },
  { FRV_INSN_NLDUH, FRVBF_INSN_NLDUH, FRVBF_SFMT_NLDSB },
  { FRV_INSN_NLD, FRVBF_INSN_NLD, FRVBF_SFMT_NLDSB },
  { FRV_INSN_NLDBF, FRVBF_INSN_NLDBF, FRVBF_SFMT_NLDBF },
  { FRV_INSN_NLDHF, FRVBF_INSN_NLDHF, FRVBF_SFMT_NLDBF },
  { FRV_INSN_NLDF, FRVBF_INSN_NLDF, FRVBF_SFMT_NLDBF },
  { FRV_INSN_LDD, FRVBF_INSN_LDD, FRVBF_SFMT_LDD },
  { FRV_INSN_LDDF, FRVBF_INSN_LDDF, FRVBF_SFMT_LDDF },
  { FRV_INSN_LDDC, FRVBF_INSN_LDDC, FRVBF_SFMT_LDDC },
  { FRV_INSN_NLDD, FRVBF_INSN_NLDD, FRVBF_SFMT_NLDD },
  { FRV_INSN_NLDDF, FRVBF_INSN_NLDDF, FRVBF_SFMT_NLDDF },
  { FRV_INSN_LDQ, FRVBF_INSN_LDQ, FRVBF_SFMT_LDQ },
  { FRV_INSN_LDQF, FRVBF_INSN_LDQF, FRVBF_SFMT_LDQF },
  { FRV_INSN_LDQC, FRVBF_INSN_LDQC, FRVBF_SFMT_LDQC },
  { FRV_INSN_NLDQ, FRVBF_INSN_NLDQ, FRVBF_SFMT_NLDQ },
  { FRV_INSN_NLDQF, FRVBF_INSN_NLDQF, FRVBF_SFMT_NLDQF },
  { FRV_INSN_LDSBU, FRVBF_INSN_LDSBU, FRVBF_SFMT_LDSBU },
  { FRV_INSN_LDUBU, FRVBF_INSN_LDUBU, FRVBF_SFMT_LDSBU },
  { FRV_INSN_LDSHU, FRVBF_INSN_LDSHU, FRVBF_SFMT_LDSBU },
  { FRV_INSN_LDUHU, FRVBF_INSN_LDUHU, FRVBF_SFMT_LDSBU },
  { FRV_INSN_LDU, FRVBF_INSN_LDU, FRVBF_SFMT_LDSBU },
  { FRV_INSN_NLDSBU, FRVBF_INSN_NLDSBU, FRVBF_SFMT_NLDSBU },
  { FRV_INSN_NLDUBU, FRVBF_INSN_NLDUBU, FRVBF_SFMT_NLDSBU },
  { FRV_INSN_NLDSHU, FRVBF_INSN_NLDSHU, FRVBF_SFMT_NLDSBU },
  { FRV_INSN_NLDUHU, FRVBF_INSN_NLDUHU, FRVBF_SFMT_NLDSBU },
  { FRV_INSN_NLDU, FRVBF_INSN_NLDU, FRVBF_SFMT_NLDSBU },
  { FRV_INSN_LDBFU, FRVBF_INSN_LDBFU, FRVBF_SFMT_LDBFU },
  { FRV_INSN_LDHFU, FRVBF_INSN_LDHFU, FRVBF_SFMT_LDBFU },
  { FRV_INSN_LDFU, FRVBF_INSN_LDFU, FRVBF_SFMT_LDBFU },
  { FRV_INSN_LDCU, FRVBF_INSN_LDCU, FRVBF_SFMT_LDCU },
  { FRV_INSN_NLDBFU, FRVBF_INSN_NLDBFU, FRVBF_SFMT_NLDBFU },
  { FRV_INSN_NLDHFU, FRVBF_INSN_NLDHFU, FRVBF_SFMT_NLDBFU },
  { FRV_INSN_NLDFU, FRVBF_INSN_NLDFU, FRVBF_SFMT_NLDBFU },
  { FRV_INSN_LDDU, FRVBF_INSN_LDDU, FRVBF_SFMT_LDDU },
  { FRV_INSN_NLDDU, FRVBF_INSN_NLDDU, FRVBF_SFMT_NLDDU },
  { FRV_INSN_LDDFU, FRVBF_INSN_LDDFU, FRVBF_SFMT_LDDFU },
  { FRV_INSN_LDDCU, FRVBF_INSN_LDDCU, FRVBF_SFMT_LDDCU },
  { FRV_INSN_NLDDFU, FRVBF_INSN_NLDDFU, FRVBF_SFMT_NLDDFU },
  { FRV_INSN_LDQU, FRVBF_INSN_LDQU, FRVBF_SFMT_LDQU },
  { FRV_INSN_NLDQU, FRVBF_INSN_NLDQU, FRVBF_SFMT_NLDQU },
  { FRV_INSN_LDQFU, FRVBF_INSN_LDQFU, FRVBF_SFMT_LDQFU },
  { FRV_INSN_LDQCU, FRVBF_INSN_LDQCU, FRVBF_SFMT_LDQCU },
  { FRV_INSN_NLDQFU, FRVBF_INSN_NLDQFU, FRVBF_SFMT_NLDQFU },
  { FRV_INSN_LDSBI, FRVBF_INSN_LDSBI, FRVBF_SFMT_LDSBI },
  { FRV_INSN_LDSHI, FRVBF_INSN_LDSHI, FRVBF_SFMT_LDSBI },
  { FRV_INSN_LDI, FRVBF_INSN_LDI, FRVBF_SFMT_LDSBI },
  { FRV_INSN_LDUBI, FRVBF_INSN_LDUBI, FRVBF_SFMT_LDSBI },
  { FRV_INSN_LDUHI, FRVBF_INSN_LDUHI, FRVBF_SFMT_LDSBI },
  { FRV_INSN_LDBFI, FRVBF_INSN_LDBFI, FRVBF_SFMT_LDBFI },
  { FRV_INSN_LDHFI, FRVBF_INSN_LDHFI, FRVBF_SFMT_LDBFI },
  { FRV_INSN_LDFI, FRVBF_INSN_LDFI, FRVBF_SFMT_LDBFI },
  { FRV_INSN_NLDSBI, FRVBF_INSN_NLDSBI, FRVBF_SFMT_NLDSBI },
  { FRV_INSN_NLDUBI, FRVBF_INSN_NLDUBI, FRVBF_SFMT_NLDSBI },
  { FRV_INSN_NLDSHI, FRVBF_INSN_NLDSHI, FRVBF_SFMT_NLDSBI },
  { FRV_INSN_NLDUHI, FRVBF_INSN_NLDUHI, FRVBF_SFMT_NLDSBI },
  { FRV_INSN_NLDI, FRVBF_INSN_NLDI, FRVBF_SFMT_NLDSBI },
  { FRV_INSN_NLDBFI, FRVBF_INSN_NLDBFI, FRVBF_SFMT_NLDBFI },
  { FRV_INSN_NLDHFI, FRVBF_INSN_NLDHFI, FRVBF_SFMT_NLDBFI },
  { FRV_INSN_NLDFI, FRVBF_INSN_NLDFI, FRVBF_SFMT_NLDBFI },
  { FRV_INSN_LDDI, FRVBF_INSN_LDDI, FRVBF_SFMT_LDDI },
  { FRV_INSN_LDDFI, FRVBF_INSN_LDDFI, FRVBF_SFMT_LDDFI },
  { FRV_INSN_NLDDI, FRVBF_INSN_NLDDI, FRVBF_SFMT_NLDDI },
  { FRV_INSN_NLDDFI, FRVBF_INSN_NLDDFI, FRVBF_SFMT_NLDDFI },
  { FRV_INSN_LDQI, FRVBF_INSN_LDQI, FRVBF_SFMT_LDQI },
  { FRV_INSN_LDQFI, FRVBF_INSN_LDQFI, FRVBF_SFMT_LDQFI },
  { FRV_INSN_NLDQFI, FRVBF_INSN_NLDQFI, FRVBF_SFMT_NLDQFI },
  { FRV_INSN_STB, FRVBF_INSN_STB, FRVBF_SFMT_STB },
  { FRV_INSN_STH, FRVBF_INSN_STH, FRVBF_SFMT_STB },
  { FRV_INSN_ST, FRVBF_INSN_ST, FRVBF_SFMT_STB },
  { FRV_INSN_STBF, FRVBF_INSN_STBF, FRVBF_SFMT_STBF },
  { FRV_INSN_STHF, FRVBF_INSN_STHF, FRVBF_SFMT_STBF },
  { FRV_INSN_STF, FRVBF_INSN_STF, FRVBF_SFMT_STBF },
  { FRV_INSN_STC, FRVBF_INSN_STC, FRVBF_SFMT_STC },
  { FRV_INSN_STD, FRVBF_INSN_STD, FRVBF_SFMT_STD },
  { FRV_INSN_STDF, FRVBF_INSN_STDF, FRVBF_SFMT_STDF },
  { FRV_INSN_STDC, FRVBF_INSN_STDC, FRVBF_SFMT_STDC },
  { FRV_INSN_STQ, FRVBF_INSN_STQ, FRVBF_SFMT_LDQ },
  { FRV_INSN_STQF, FRVBF_INSN_STQF, FRVBF_SFMT_LDQF },
  { FRV_INSN_STQC, FRVBF_INSN_STQC, FRVBF_SFMT_LDQC },
  { FRV_INSN_STBU, FRVBF_INSN_STBU, FRVBF_SFMT_STBU },
  { FRV_INSN_STHU, FRVBF_INSN_STHU, FRVBF_SFMT_STBU },
  { FRV_INSN_STU, FRVBF_INSN_STU, FRVBF_SFMT_STBU },
  { FRV_INSN_STBFU, FRVBF_INSN_STBFU, FRVBF_SFMT_STBFU },
  { FRV_INSN_STHFU, FRVBF_INSN_STHFU, FRVBF_SFMT_STBFU },
  { FRV_INSN_STFU, FRVBF_INSN_STFU, FRVBF_SFMT_STBFU },
  { FRV_INSN_STCU, FRVBF_INSN_STCU, FRVBF_SFMT_STCU },
  { FRV_INSN_STDU, FRVBF_INSN_STDU, FRVBF_SFMT_STDU },
  { FRV_INSN_STDFU, FRVBF_INSN_STDFU, FRVBF_SFMT_STDFU },
  { FRV_INSN_STDCU, FRVBF_INSN_STDCU, FRVBF_SFMT_STDCU },
  { FRV_INSN_STQU, FRVBF_INSN_STQU, FRVBF_SFMT_STQU },
  { FRV_INSN_STQFU, FRVBF_INSN_STQFU, FRVBF_SFMT_LDQFU },
  { FRV_INSN_STQCU, FRVBF_INSN_STQCU, FRVBF_SFMT_LDQCU },
  { FRV_INSN_CLDSB, FRVBF_INSN_CLDSB, FRVBF_SFMT_CLDSB },
  { FRV_INSN_CLDUB, FRVBF_INSN_CLDUB, FRVBF_SFMT_CLDSB },
  { FRV_INSN_CLDSH, FRVBF_INSN_CLDSH, FRVBF_SFMT_CLDSB },
  { FRV_INSN_CLDUH, FRVBF_INSN_CLDUH, FRVBF_SFMT_CLDSB },
  { FRV_INSN_CLD, FRVBF_INSN_CLD, FRVBF_SFMT_CLDSB },
  { FRV_INSN_CLDBF, FRVBF_INSN_CLDBF, FRVBF_SFMT_CLDBF },
  { FRV_INSN_CLDHF, FRVBF_INSN_CLDHF, FRVBF_SFMT_CLDBF },
  { FRV_INSN_CLDF, FRVBF_INSN_CLDF, FRVBF_SFMT_CLDBF },
  { FRV_INSN_CLDD, FRVBF_INSN_CLDD, FRVBF_SFMT_CLDD },
  { FRV_INSN_CLDDF, FRVBF_INSN_CLDDF, FRVBF_SFMT_CLDDF },
  { FRV_INSN_CLDQ, FRVBF_INSN_CLDQ, FRVBF_SFMT_CLDQ },
  { FRV_INSN_CLDSBU, FRVBF_INSN_CLDSBU, FRVBF_SFMT_CLDSBU },
  { FRV_INSN_CLDUBU, FRVBF_INSN_CLDUBU, FRVBF_SFMT_CLDSBU },
  { FRV_INSN_CLDSHU, FRVBF_INSN_CLDSHU, FRVBF_SFMT_CLDSBU },
  { FRV_INSN_CLDUHU, FRVBF_INSN_CLDUHU, FRVBF_SFMT_CLDSBU },
  { FRV_INSN_CLDU, FRVBF_INSN_CLDU, FRVBF_SFMT_CLDSBU },
  { FRV_INSN_CLDBFU, FRVBF_INSN_CLDBFU, FRVBF_SFMT_CLDBFU },
  { FRV_INSN_CLDHFU, FRVBF_INSN_CLDHFU, FRVBF_SFMT_CLDBFU },
  { FRV_INSN_CLDFU, FRVBF_INSN_CLDFU, FRVBF_SFMT_CLDBFU },
  { FRV_INSN_CLDDU, FRVBF_INSN_CLDDU, FRVBF_SFMT_CLDDU },
  { FRV_INSN_CLDDFU, FRVBF_INSN_CLDDFU, FRVBF_SFMT_CLDDFU },
  { FRV_INSN_CLDQU, FRVBF_INSN_CLDQU, FRVBF_SFMT_CLDQU },
  { FRV_INSN_CSTB, FRVBF_INSN_CSTB, FRVBF_SFMT_CSTB },
  { FRV_INSN_CSTH, FRVBF_INSN_CSTH, FRVBF_SFMT_CSTB },
  { FRV_INSN_CST, FRVBF_INSN_CST, FRVBF_SFMT_CSTB },
  { FRV_INSN_CSTBF, FRVBF_INSN_CSTBF, FRVBF_SFMT_CSTBF },
  { FRV_INSN_CSTHF, FRVBF_INSN_CSTHF, FRVBF_SFMT_CSTBF },
  { FRV_INSN_CSTF, FRVBF_INSN_CSTF, FRVBF_SFMT_CSTBF },
  { FRV_INSN_CSTD, FRVBF_INSN_CSTD, FRVBF_SFMT_CSTD },
  { FRV_INSN_CSTDF, FRVBF_INSN_CSTDF, FRVBF_SFMT_CSTDF },
  { FRV_INSN_CSTQ, FRVBF_INSN_CSTQ, FRVBF_SFMT_CLDQ },
  { FRV_INSN_CSTBU, FRVBF_INSN_CSTBU, FRVBF_SFMT_CSTBU },
  { FRV_INSN_CSTHU, FRVBF_INSN_CSTHU, FRVBF_SFMT_CSTBU },
  { FRV_INSN_CSTU, FRVBF_INSN_CSTU, FRVBF_SFMT_CSTBU },
  { FRV_INSN_CSTBFU, FRVBF_INSN_CSTBFU, FRVBF_SFMT_CSTBFU },
  { FRV_INSN_CSTHFU, FRVBF_INSN_CSTHFU, FRVBF_SFMT_CSTBFU },
  { FRV_INSN_CSTFU, FRVBF_INSN_CSTFU, FRVBF_SFMT_CSTBFU },
  { FRV_INSN_CSTDU, FRVBF_INSN_CSTDU, FRVBF_SFMT_CSTDU },
  { FRV_INSN_CSTDFU, FRVBF_INSN_CSTDFU, FRVBF_SFMT_CSTDFU },
  { FRV_INSN_STBI, FRVBF_INSN_STBI, FRVBF_SFMT_STBI },
  { FRV_INSN_STHI, FRVBF_INSN_STHI, FRVBF_SFMT_STBI },
  { FRV_INSN_STI, FRVBF_INSN_STI, FRVBF_SFMT_STBI },
  { FRV_INSN_STBFI, FRVBF_INSN_STBFI, FRVBF_SFMT_STBFI },
  { FRV_INSN_STHFI, FRVBF_INSN_STHFI, FRVBF_SFMT_STBFI },
  { FRV_INSN_STFI, FRVBF_INSN_STFI, FRVBF_SFMT_STBFI },
  { FRV_INSN_STDI, FRVBF_INSN_STDI, FRVBF_SFMT_STDI },
  { FRV_INSN_STDFI, FRVBF_INSN_STDFI, FRVBF_SFMT_STDFI },
  { FRV_INSN_STQI, FRVBF_INSN_STQI, FRVBF_SFMT_LDQI },
  { FRV_INSN_STQFI, FRVBF_INSN_STQFI, FRVBF_SFMT_LDQFI },
  { FRV_INSN_SWAP, FRVBF_INSN_SWAP, FRVBF_SFMT_SWAP },
  { FRV_INSN_SWAPI, FRVBF_INSN_SWAPI, FRVBF_SFMT_SWAPI },
  { FRV_INSN_CSWAP, FRVBF_INSN_CSWAP, FRVBF_SFMT_CSWAP },
  { FRV_INSN_MOVGF, FRVBF_INSN_MOVGF, FRVBF_SFMT_MOVGF },
  { FRV_INSN_MOVFG, FRVBF_INSN_MOVFG, FRVBF_SFMT_MOVFG },
  { FRV_INSN_MOVGFD, FRVBF_INSN_MOVGFD, FRVBF_SFMT_MOVGFD },
  { FRV_INSN_MOVFGD, FRVBF_INSN_MOVFGD, FRVBF_SFMT_MOVFGD },
  { FRV_INSN_MOVGFQ, FRVBF_INSN_MOVGFQ, FRVBF_SFMT_MOVGFQ },
  { FRV_INSN_MOVFGQ, FRVBF_INSN_MOVFGQ, FRVBF_SFMT_MOVFGQ },
  { FRV_INSN_CMOVGF, FRVBF_INSN_CMOVGF, FRVBF_SFMT_CMOVGF },
  { FRV_INSN_CMOVFG, FRVBF_INSN_CMOVFG, FRVBF_SFMT_CMOVFG },
  { FRV_INSN_CMOVGFD, FRVBF_INSN_CMOVGFD, FRVBF_SFMT_CMOVGFD },
  { FRV_INSN_CMOVFGD, FRVBF_INSN_CMOVFGD, FRVBF_SFMT_CMOVFGD },
  { FRV_INSN_MOVGS, FRVBF_INSN_MOVGS, FRVBF_SFMT_MOVGS },
  { FRV_INSN_MOVSG, FRVBF_INSN_MOVSG, FRVBF_SFMT_MOVSG },
  { FRV_INSN_BRA, FRVBF_INSN_BRA, FRVBF_SFMT_BRA },
  { FRV_INSN_BNO, FRVBF_INSN_BNO, FRVBF_SFMT_BNO },
  { FRV_INSN_BEQ, FRVBF_INSN_BEQ, FRVBF_SFMT_BEQ },
  { FRV_INSN_BNE, FRVBF_INSN_BNE, FRVBF_SFMT_BEQ },
  { FRV_INSN_BLE, FRVBF_INSN_BLE, FRVBF_SFMT_BEQ },
  { FRV_INSN_BGT, FRVBF_INSN_BGT, FRVBF_SFMT_BEQ },
  { FRV_INSN_BLT, FRVBF_INSN_BLT, FRVBF_SFMT_BEQ },
  { FRV_INSN_BGE, FRVBF_INSN_BGE, FRVBF_SFMT_BEQ },
  { FRV_INSN_BLS, FRVBF_INSN_BLS, FRVBF_SFMT_BEQ },
  { FRV_INSN_BHI, FRVBF_INSN_BHI, FRVBF_SFMT_BEQ },
  { FRV_INSN_BC, FRVBF_INSN_BC, FRVBF_SFMT_BEQ },
  { FRV_INSN_BNC, FRVBF_INSN_BNC, FRVBF_SFMT_BEQ },
  { FRV_INSN_BN, FRVBF_INSN_BN, FRVBF_SFMT_BEQ },
  { FRV_INSN_BP, FRVBF_INSN_BP, FRVBF_SFMT_BEQ },
  { FRV_INSN_BV, FRVBF_INSN_BV, FRVBF_SFMT_BEQ },
  { FRV_INSN_BNV, FRVBF_INSN_BNV, FRVBF_SFMT_BEQ },
  { FRV_INSN_FBRA, FRVBF_INSN_FBRA, FRVBF_SFMT_BRA },
  { FRV_INSN_FBNO, FRVBF_INSN_FBNO, FRVBF_SFMT_BNO },
  { FRV_INSN_FBNE, FRVBF_INSN_FBNE, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBEQ, FRVBF_INSN_FBEQ, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBLG, FRVBF_INSN_FBLG, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBUE, FRVBF_INSN_FBUE, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBUL, FRVBF_INSN_FBUL, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBGE, FRVBF_INSN_FBGE, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBLT, FRVBF_INSN_FBLT, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBUGE, FRVBF_INSN_FBUGE, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBUG, FRVBF_INSN_FBUG, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBLE, FRVBF_INSN_FBLE, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBGT, FRVBF_INSN_FBGT, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBULE, FRVBF_INSN_FBULE, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBU, FRVBF_INSN_FBU, FRVBF_SFMT_FBNE },
  { FRV_INSN_FBO, FRVBF_INSN_FBO, FRVBF_SFMT_FBNE },
  { FRV_INSN_BCTRLR, FRVBF_INSN_BCTRLR, FRVBF_SFMT_BCTRLR },
  { FRV_INSN_BRALR, FRVBF_INSN_BRALR, FRVBF_SFMT_BRALR },
  { FRV_INSN_BNOLR, FRVBF_INSN_BNOLR, FRVBF_SFMT_BNOLR },
  { FRV_INSN_BEQLR, FRVBF_INSN_BEQLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BNELR, FRVBF_INSN_BNELR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BLELR, FRVBF_INSN_BLELR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BGTLR, FRVBF_INSN_BGTLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BLTLR, FRVBF_INSN_BLTLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BGELR, FRVBF_INSN_BGELR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BLSLR, FRVBF_INSN_BLSLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BHILR, FRVBF_INSN_BHILR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BCLR, FRVBF_INSN_BCLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BNCLR, FRVBF_INSN_BNCLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BNLR, FRVBF_INSN_BNLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BPLR, FRVBF_INSN_BPLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BVLR, FRVBF_INSN_BVLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_BNVLR, FRVBF_INSN_BNVLR, FRVBF_SFMT_BEQLR },
  { FRV_INSN_FBRALR, FRVBF_INSN_FBRALR, FRVBF_SFMT_BRALR },
  { FRV_INSN_FBNOLR, FRVBF_INSN_FBNOLR, FRVBF_SFMT_BNOLR },
  { FRV_INSN_FBEQLR, FRVBF_INSN_FBEQLR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBNELR, FRVBF_INSN_FBNELR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBLGLR, FRVBF_INSN_FBLGLR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBUELR, FRVBF_INSN_FBUELR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBULLR, FRVBF_INSN_FBULLR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBGELR, FRVBF_INSN_FBGELR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBLTLR, FRVBF_INSN_FBLTLR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBUGELR, FRVBF_INSN_FBUGELR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBUGLR, FRVBF_INSN_FBUGLR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBLELR, FRVBF_INSN_FBLELR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBGTLR, FRVBF_INSN_FBGTLR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBULELR, FRVBF_INSN_FBULELR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBULR, FRVBF_INSN_FBULR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_FBOLR, FRVBF_INSN_FBOLR, FRVBF_SFMT_FBEQLR },
  { FRV_INSN_BCRALR, FRVBF_INSN_BCRALR, FRVBF_SFMT_BCRALR },
  { FRV_INSN_BCNOLR, FRVBF_INSN_BCNOLR, FRVBF_SFMT_BCNOLR },
  { FRV_INSN_BCEQLR, FRVBF_INSN_BCEQLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCNELR, FRVBF_INSN_BCNELR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCLELR, FRVBF_INSN_BCLELR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCGTLR, FRVBF_INSN_BCGTLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCLTLR, FRVBF_INSN_BCLTLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCGELR, FRVBF_INSN_BCGELR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCLSLR, FRVBF_INSN_BCLSLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCHILR, FRVBF_INSN_BCHILR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCCLR, FRVBF_INSN_BCCLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCNCLR, FRVBF_INSN_BCNCLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCNLR, FRVBF_INSN_BCNLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCPLR, FRVBF_INSN_BCPLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCVLR, FRVBF_INSN_BCVLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_BCNVLR, FRVBF_INSN_BCNVLR, FRVBF_SFMT_BCEQLR },
  { FRV_INSN_FCBRALR, FRVBF_INSN_FCBRALR, FRVBF_SFMT_BCRALR },
  { FRV_INSN_FCBNOLR, FRVBF_INSN_FCBNOLR, FRVBF_SFMT_BCNOLR },
  { FRV_INSN_FCBEQLR, FRVBF_INSN_FCBEQLR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBNELR, FRVBF_INSN_FCBNELR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBLGLR, FRVBF_INSN_FCBLGLR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBUELR, FRVBF_INSN_FCBUELR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBULLR, FRVBF_INSN_FCBULLR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBGELR, FRVBF_INSN_FCBGELR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBLTLR, FRVBF_INSN_FCBLTLR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBUGELR, FRVBF_INSN_FCBUGELR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBUGLR, FRVBF_INSN_FCBUGLR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBLELR, FRVBF_INSN_FCBLELR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBGTLR, FRVBF_INSN_FCBGTLR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBULELR, FRVBF_INSN_FCBULELR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBULR, FRVBF_INSN_FCBULR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_FCBOLR, FRVBF_INSN_FCBOLR, FRVBF_SFMT_FCBEQLR },
  { FRV_INSN_JMPL, FRVBF_INSN_JMPL, FRVBF_SFMT_JMPL },
  { FRV_INSN_CALLL, FRVBF_INSN_CALLL, FRVBF_SFMT_JMPL },
  { FRV_INSN_JMPIL, FRVBF_INSN_JMPIL, FRVBF_SFMT_JMPIL },
  { FRV_INSN_CALLIL, FRVBF_INSN_CALLIL, FRVBF_SFMT_JMPIL },
  { FRV_INSN_CALL, FRVBF_INSN_CALL, FRVBF_SFMT_CALL },
  { FRV_INSN_RETT, FRVBF_INSN_RETT, FRVBF_SFMT_RETT },
  { FRV_INSN_REI, FRVBF_INSN_REI, FRVBF_SFMT_REI },
  { FRV_INSN_TRA, FRVBF_INSN_TRA, FRVBF_SFMT_TRA },
  { FRV_INSN_TNO, FRVBF_INSN_TNO, FRVBF_SFMT_REI },
  { FRV_INSN_TEQ, FRVBF_INSN_TEQ, FRVBF_SFMT_TEQ },
  { FRV_INSN_TNE, FRVBF_INSN_TNE, FRVBF_SFMT_TEQ },
  { FRV_INSN_TLE, FRVBF_INSN_TLE, FRVBF_SFMT_TEQ },
  { FRV_INSN_TGT, FRVBF_INSN_TGT, FRVBF_SFMT_TEQ },
  { FRV_INSN_TLT, FRVBF_INSN_TLT, FRVBF_SFMT_TEQ },
  { FRV_INSN_TGE, FRVBF_INSN_TGE, FRVBF_SFMT_TEQ },
  { FRV_INSN_TLS, FRVBF_INSN_TLS, FRVBF_SFMT_TEQ },
  { FRV_INSN_THI, FRVBF_INSN_THI, FRVBF_SFMT_TEQ },
  { FRV_INSN_TC, FRVBF_INSN_TC, FRVBF_SFMT_TEQ },
  { FRV_INSN_TNC, FRVBF_INSN_TNC, FRVBF_SFMT_TEQ },
  { FRV_INSN_TN, FRVBF_INSN_TN, FRVBF_SFMT_TEQ },
  { FRV_INSN_TP, FRVBF_INSN_TP, FRVBF_SFMT_TEQ },
  { FRV_INSN_TV, FRVBF_INSN_TV, FRVBF_SFMT_TEQ },
  { FRV_INSN_TNV, FRVBF_INSN_TNV, FRVBF_SFMT_TEQ },
  { FRV_INSN_FTRA, FRVBF_INSN_FTRA, FRVBF_SFMT_TRA },
  { FRV_INSN_FTNO, FRVBF_INSN_FTNO, FRVBF_SFMT_REI },
  { FRV_INSN_FTNE, FRVBF_INSN_FTNE, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTEQ, FRVBF_INSN_FTEQ, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTLG, FRVBF_INSN_FTLG, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTUE, FRVBF_INSN_FTUE, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTUL, FRVBF_INSN_FTUL, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTGE, FRVBF_INSN_FTGE, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTLT, FRVBF_INSN_FTLT, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTUGE, FRVBF_INSN_FTUGE, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTUG, FRVBF_INSN_FTUG, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTLE, FRVBF_INSN_FTLE, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTGT, FRVBF_INSN_FTGT, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTULE, FRVBF_INSN_FTULE, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTU, FRVBF_INSN_FTU, FRVBF_SFMT_FTNE },
  { FRV_INSN_FTO, FRVBF_INSN_FTO, FRVBF_SFMT_FTNE },
  { FRV_INSN_TIRA, FRVBF_INSN_TIRA, FRVBF_SFMT_TIRA },
  { FRV_INSN_TINO, FRVBF_INSN_TINO, FRVBF_SFMT_REI },
  { FRV_INSN_TIEQ, FRVBF_INSN_TIEQ, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TINE, FRVBF_INSN_TINE, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TILE, FRVBF_INSN_TILE, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TIGT, FRVBF_INSN_TIGT, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TILT, FRVBF_INSN_TILT, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TIGE, FRVBF_INSN_TIGE, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TILS, FRVBF_INSN_TILS, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TIHI, FRVBF_INSN_TIHI, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TIC, FRVBF_INSN_TIC, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TINC, FRVBF_INSN_TINC, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TIN, FRVBF_INSN_TIN, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TIP, FRVBF_INSN_TIP, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TIV, FRVBF_INSN_TIV, FRVBF_SFMT_TIEQ },
  { FRV_INSN_TINV, FRVBF_INSN_TINV, FRVBF_SFMT_TIEQ },
  { FRV_INSN_FTIRA, FRVBF_INSN_FTIRA, FRVBF_SFMT_TIRA },
  { FRV_INSN_FTINO, FRVBF_INSN_FTINO, FRVBF_SFMT_REI },
  { FRV_INSN_FTINE, FRVBF_INSN_FTINE, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIEQ, FRVBF_INSN_FTIEQ, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTILG, FRVBF_INSN_FTILG, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIUE, FRVBF_INSN_FTIUE, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIUL, FRVBF_INSN_FTIUL, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIGE, FRVBF_INSN_FTIGE, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTILT, FRVBF_INSN_FTILT, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIUGE, FRVBF_INSN_FTIUGE, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIUG, FRVBF_INSN_FTIUG, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTILE, FRVBF_INSN_FTILE, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIGT, FRVBF_INSN_FTIGT, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIULE, FRVBF_INSN_FTIULE, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIU, FRVBF_INSN_FTIU, FRVBF_SFMT_FTINE },
  { FRV_INSN_FTIO, FRVBF_INSN_FTIO, FRVBF_SFMT_FTINE },
  { FRV_INSN_BREAK, FRVBF_INSN_BREAK, FRVBF_SFMT_BREAK },
  { FRV_INSN_MTRAP, FRVBF_INSN_MTRAP, FRVBF_SFMT_REI },
  { FRV_INSN_ANDCR, FRVBF_INSN_ANDCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_ORCR, FRVBF_INSN_ORCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_XORCR, FRVBF_INSN_XORCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_NANDCR, FRVBF_INSN_NANDCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_NORCR, FRVBF_INSN_NORCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_ANDNCR, FRVBF_INSN_ANDNCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_ORNCR, FRVBF_INSN_ORNCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_NANDNCR, FRVBF_INSN_NANDNCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_NORNCR, FRVBF_INSN_NORNCR, FRVBF_SFMT_ANDCR },
  { FRV_INSN_NOTCR, FRVBF_INSN_NOTCR, FRVBF_SFMT_NOTCR },
  { FRV_INSN_CKRA, FRVBF_INSN_CKRA, FRVBF_SFMT_CKRA },
  { FRV_INSN_CKNO, FRVBF_INSN_CKNO, FRVBF_SFMT_CKRA },
  { FRV_INSN_CKEQ, FRVBF_INSN_CKEQ, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKNE, FRVBF_INSN_CKNE, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKLE, FRVBF_INSN_CKLE, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKGT, FRVBF_INSN_CKGT, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKLT, FRVBF_INSN_CKLT, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKGE, FRVBF_INSN_CKGE, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKLS, FRVBF_INSN_CKLS, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKHI, FRVBF_INSN_CKHI, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKC, FRVBF_INSN_CKC, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKNC, FRVBF_INSN_CKNC, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKN, FRVBF_INSN_CKN, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKP, FRVBF_INSN_CKP, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKV, FRVBF_INSN_CKV, FRVBF_SFMT_CKEQ },
  { FRV_INSN_CKNV, FRVBF_INSN_CKNV, FRVBF_SFMT_CKEQ },
  { FRV_INSN_FCKRA, FRVBF_INSN_FCKRA, FRVBF_SFMT_FCKRA },
  { FRV_INSN_FCKNO, FRVBF_INSN_FCKNO, FRVBF_SFMT_FCKRA },
  { FRV_INSN_FCKNE, FRVBF_INSN_FCKNE, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKEQ, FRVBF_INSN_FCKEQ, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKLG, FRVBF_INSN_FCKLG, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKUE, FRVBF_INSN_FCKUE, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKUL, FRVBF_INSN_FCKUL, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKGE, FRVBF_INSN_FCKGE, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKLT, FRVBF_INSN_FCKLT, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKUGE, FRVBF_INSN_FCKUGE, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKUG, FRVBF_INSN_FCKUG, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKLE, FRVBF_INSN_FCKLE, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKGT, FRVBF_INSN_FCKGT, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKULE, FRVBF_INSN_FCKULE, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKU, FRVBF_INSN_FCKU, FRVBF_SFMT_FCKNE },
  { FRV_INSN_FCKO, FRVBF_INSN_FCKO, FRVBF_SFMT_FCKNE },
  { FRV_INSN_CCKRA, FRVBF_INSN_CCKRA, FRVBF_SFMT_CCKRA },
  { FRV_INSN_CCKNO, FRVBF_INSN_CCKNO, FRVBF_SFMT_CCKRA },
  { FRV_INSN_CCKEQ, FRVBF_INSN_CCKEQ, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKNE, FRVBF_INSN_CCKNE, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKLE, FRVBF_INSN_CCKLE, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKGT, FRVBF_INSN_CCKGT, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKLT, FRVBF_INSN_CCKLT, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKGE, FRVBF_INSN_CCKGE, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKLS, FRVBF_INSN_CCKLS, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKHI, FRVBF_INSN_CCKHI, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKC, FRVBF_INSN_CCKC, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKNC, FRVBF_INSN_CCKNC, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKN, FRVBF_INSN_CCKN, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKP, FRVBF_INSN_CCKP, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKV, FRVBF_INSN_CCKV, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CCKNV, FRVBF_INSN_CCKNV, FRVBF_SFMT_CCKEQ },
  { FRV_INSN_CFCKRA, FRVBF_INSN_CFCKRA, FRVBF_SFMT_CFCKRA },
  { FRV_INSN_CFCKNO, FRVBF_INSN_CFCKNO, FRVBF_SFMT_CFCKRA },
  { FRV_INSN_CFCKNE, FRVBF_INSN_CFCKNE, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKEQ, FRVBF_INSN_CFCKEQ, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKLG, FRVBF_INSN_CFCKLG, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKUE, FRVBF_INSN_CFCKUE, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKUL, FRVBF_INSN_CFCKUL, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKGE, FRVBF_INSN_CFCKGE, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKLT, FRVBF_INSN_CFCKLT, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKUGE, FRVBF_INSN_CFCKUGE, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKUG, FRVBF_INSN_CFCKUG, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKLE, FRVBF_INSN_CFCKLE, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKGT, FRVBF_INSN_CFCKGT, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKULE, FRVBF_INSN_CFCKULE, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKU, FRVBF_INSN_CFCKU, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CFCKO, FRVBF_INSN_CFCKO, FRVBF_SFMT_CFCKNE },
  { FRV_INSN_CJMPL, FRVBF_INSN_CJMPL, FRVBF_SFMT_CJMPL },
  { FRV_INSN_CCALLL, FRVBF_INSN_CCALLL, FRVBF_SFMT_CJMPL },
  { FRV_INSN_ICI, FRVBF_INSN_ICI, FRVBF_SFMT_ICI },
  { FRV_INSN_DCI, FRVBF_INSN_DCI, FRVBF_SFMT_ICI },
  { FRV_INSN_ICEI, FRVBF_INSN_ICEI, FRVBF_SFMT_ICEI },
  { FRV_INSN_DCEI, FRVBF_INSN_DCEI, FRVBF_SFMT_ICEI },
  { FRV_INSN_DCF, FRVBF_INSN_DCF, FRVBF_SFMT_ICI },
  { FRV_INSN_DCEF, FRVBF_INSN_DCEF, FRVBF_SFMT_ICEI },
  { FRV_INSN_WITLB, FRVBF_INSN_WITLB, FRVBF_SFMT_REI },
  { FRV_INSN_WDTLB, FRVBF_INSN_WDTLB, FRVBF_SFMT_REI },
  { FRV_INSN_ITLBI, FRVBF_INSN_ITLBI, FRVBF_SFMT_REI },
  { FRV_INSN_DTLBI, FRVBF_INSN_DTLBI, FRVBF_SFMT_REI },
  { FRV_INSN_ICPL, FRVBF_INSN_ICPL, FRVBF_SFMT_ICPL },
  { FRV_INSN_DCPL, FRVBF_INSN_DCPL, FRVBF_SFMT_ICPL },
  { FRV_INSN_ICUL, FRVBF_INSN_ICUL, FRVBF_SFMT_ICUL },
  { FRV_INSN_DCUL, FRVBF_INSN_DCUL, FRVBF_SFMT_ICUL },
  { FRV_INSN_BAR, FRVBF_INSN_BAR, FRVBF_SFMT_REI },
  { FRV_INSN_MEMBAR, FRVBF_INSN_MEMBAR, FRVBF_SFMT_REI },
  { FRV_INSN_LRAI, FRVBF_INSN_LRAI, FRVBF_SFMT_REI },
  { FRV_INSN_LRAD, FRVBF_INSN_LRAD, FRVBF_SFMT_REI },
  { FRV_INSN_TLBPR, FRVBF_INSN_TLBPR, FRVBF_SFMT_REI },
  { FRV_INSN_COP1, FRVBF_INSN_COP1, FRVBF_SFMT_REI },
  { FRV_INSN_COP2, FRVBF_INSN_COP2, FRVBF_SFMT_REI },
  { FRV_INSN_CLRGR, FRVBF_INSN_CLRGR, FRVBF_SFMT_CLRGR },
  { FRV_INSN_CLRFR, FRVBF_INSN_CLRFR, FRVBF_SFMT_CLRFR },
  { FRV_INSN_CLRGA, FRVBF_INSN_CLRGA, FRVBF_SFMT_REI },
  { FRV_INSN_CLRFA, FRVBF_INSN_CLRFA, FRVBF_SFMT_REI },
  { FRV_INSN_COMMITGR, FRVBF_INSN_COMMITGR, FRVBF_SFMT_COMMITGR },
  { FRV_INSN_COMMITFR, FRVBF_INSN_COMMITFR, FRVBF_SFMT_COMMITFR },
  { FRV_INSN_COMMITGA, FRVBF_INSN_COMMITGA, FRVBF_SFMT_REI },
  { FRV_INSN_COMMITFA, FRVBF_INSN_COMMITFA, FRVBF_SFMT_REI },
  { FRV_INSN_FITOS, FRVBF_INSN_FITOS, FRVBF_SFMT_FITOS },
  { FRV_INSN_FSTOI, FRVBF_INSN_FSTOI, FRVBF_SFMT_FSTOI },
  { FRV_INSN_FITOD, FRVBF_INSN_FITOD, FRVBF_SFMT_FITOD },
  { FRV_INSN_FDTOI, FRVBF_INSN_FDTOI, FRVBF_SFMT_FDTOI },
  { FRV_INSN_FDITOS, FRVBF_INSN_FDITOS, FRVBF_SFMT_FDITOS },
  { FRV_INSN_FDSTOI, FRVBF_INSN_FDSTOI, FRVBF_SFMT_FDSTOI },
  { FRV_INSN_NFDITOS, FRVBF_INSN_NFDITOS, FRVBF_SFMT_FDITOS },
  { FRV_INSN_NFDSTOI, FRVBF_INSN_NFDSTOI, FRVBF_SFMT_FDSTOI },
  { FRV_INSN_CFITOS, FRVBF_INSN_CFITOS, FRVBF_SFMT_CFITOS },
  { FRV_INSN_CFSTOI, FRVBF_INSN_CFSTOI, FRVBF_SFMT_CFSTOI },
  { FRV_INSN_NFITOS, FRVBF_INSN_NFITOS, FRVBF_SFMT_NFITOS },
  { FRV_INSN_NFSTOI, FRVBF_INSN_NFSTOI, FRVBF_SFMT_NFSTOI },
  { FRV_INSN_FMOVS, FRVBF_INSN_FMOVS, FRVBF_SFMT_FMOVS },
  { FRV_INSN_FMOVD, FRVBF_INSN_FMOVD, FRVBF_SFMT_FMOVD },
  { FRV_INSN_FDMOVS, FRVBF_INSN_FDMOVS, FRVBF_SFMT_FDMOVS },
  { FRV_INSN_CFMOVS, FRVBF_INSN_CFMOVS, FRVBF_SFMT_CFMOVS },
  { FRV_INSN_FNEGS, FRVBF_INSN_FNEGS, FRVBF_SFMT_FMOVS },
  { FRV_INSN_FNEGD, FRVBF_INSN_FNEGD, FRVBF_SFMT_FMOVD },
  { FRV_INSN_FDNEGS, FRVBF_INSN_FDNEGS, FRVBF_SFMT_FDMOVS },
  { FRV_INSN_CFNEGS, FRVBF_INSN_CFNEGS, FRVBF_SFMT_CFMOVS },
  { FRV_INSN_FABSS, FRVBF_INSN_FABSS, FRVBF_SFMT_FMOVS },
  { FRV_INSN_FABSD, FRVBF_INSN_FABSD, FRVBF_SFMT_FMOVD },
  { FRV_INSN_FDABSS, FRVBF_INSN_FDABSS, FRVBF_SFMT_FDMOVS },
  { FRV_INSN_CFABSS, FRVBF_INSN_CFABSS, FRVBF_SFMT_CFMOVS },
  { FRV_INSN_FSQRTS, FRVBF_INSN_FSQRTS, FRVBF_SFMT_FMOVS },
  { FRV_INSN_FDSQRTS, FRVBF_INSN_FDSQRTS, FRVBF_SFMT_FDMOVS },
  { FRV_INSN_NFDSQRTS, FRVBF_INSN_NFDSQRTS, FRVBF_SFMT_FDMOVS },
  { FRV_INSN_FSQRTD, FRVBF_INSN_FSQRTD, FRVBF_SFMT_FMOVD },
  { FRV_INSN_CFSQRTS, FRVBF_INSN_CFSQRTS, FRVBF_SFMT_CFMOVS },
  { FRV_INSN_NFSQRTS, FRVBF_INSN_NFSQRTS, FRVBF_SFMT_NFSQRTS },
  { FRV_INSN_FADDS, FRVBF_INSN_FADDS, FRVBF_SFMT_FADDS },
  { FRV_INSN_FSUBS, FRVBF_INSN_FSUBS, FRVBF_SFMT_FADDS },
  { FRV_INSN_FMULS, FRVBF_INSN_FMULS, FRVBF_SFMT_FADDS },
  { FRV_INSN_FDIVS, FRVBF_INSN_FDIVS, FRVBF_SFMT_FADDS },
  { FRV_INSN_FADDD, FRVBF_INSN_FADDD, FRVBF_SFMT_FADDD },
  { FRV_INSN_FSUBD, FRVBF_INSN_FSUBD, FRVBF_SFMT_FADDD },
  { FRV_INSN_FMULD, FRVBF_INSN_FMULD, FRVBF_SFMT_FADDD },
  { FRV_INSN_FDIVD, FRVBF_INSN_FDIVD, FRVBF_SFMT_FADDD },
  { FRV_INSN_CFADDS, FRVBF_INSN_CFADDS, FRVBF_SFMT_CFADDS },
  { FRV_INSN_CFSUBS, FRVBF_INSN_CFSUBS, FRVBF_SFMT_CFADDS },
  { FRV_INSN_CFMULS, FRVBF_INSN_CFMULS, FRVBF_SFMT_CFADDS },
  { FRV_INSN_CFDIVS, FRVBF_INSN_CFDIVS, FRVBF_SFMT_CFADDS },
  { FRV_INSN_NFADDS, FRVBF_INSN_NFADDS, FRVBF_SFMT_NFADDS },
  { FRV_INSN_NFSUBS, FRVBF_INSN_NFSUBS, FRVBF_SFMT_NFADDS },
  { FRV_INSN_NFMULS, FRVBF_INSN_NFMULS, FRVBF_SFMT_NFADDS },
  { FRV_INSN_NFDIVS, FRVBF_INSN_NFDIVS, FRVBF_SFMT_NFADDS },
  { FRV_INSN_FCMPS, FRVBF_INSN_FCMPS, FRVBF_SFMT_FCMPS },
  { FRV_INSN_FCMPD, FRVBF_INSN_FCMPD, FRVBF_SFMT_FCMPD },
  { FRV_INSN_CFCMPS, FRVBF_INSN_CFCMPS, FRVBF_SFMT_CFCMPS },
  { FRV_INSN_FDCMPS, FRVBF_INSN_FDCMPS, FRVBF_SFMT_FDCMPS },
  { FRV_INSN_FMADDS, FRVBF_INSN_FMADDS, FRVBF_SFMT_FMADDS },
  { FRV_INSN_FMSUBS, FRVBF_INSN_FMSUBS, FRVBF_SFMT_FMADDS },
  { FRV_INSN_FMADDD, FRVBF_INSN_FMADDD, FRVBF_SFMT_FMADDD },
  { FRV_INSN_FMSUBD, FRVBF_INSN_FMSUBD, FRVBF_SFMT_FMADDD },
  { FRV_INSN_FDMADDS, FRVBF_INSN_FDMADDS, FRVBF_SFMT_FDMADDS },
  { FRV_INSN_NFDMADDS, FRVBF_INSN_NFDMADDS, FRVBF_SFMT_FDMADDS },
  { FRV_INSN_CFMADDS, FRVBF_INSN_CFMADDS, FRVBF_SFMT_CFMADDS },
  { FRV_INSN_CFMSUBS, FRVBF_INSN_CFMSUBS, FRVBF_SFMT_CFMADDS },
  { FRV_INSN_NFMADDS, FRVBF_INSN_NFMADDS, FRVBF_SFMT_NFMADDS },
  { FRV_INSN_NFMSUBS, FRVBF_INSN_NFMSUBS, FRVBF_SFMT_NFMADDS },
  { FRV_INSN_FMAS, FRVBF_INSN_FMAS, FRVBF_SFMT_FMAS },
  { FRV_INSN_FMSS, FRVBF_INSN_FMSS, FRVBF_SFMT_FMAS },
  { FRV_INSN_FDMAS, FRVBF_INSN_FDMAS, FRVBF_SFMT_FDMAS },
  { FRV_INSN_FDMSS, FRVBF_INSN_FDMSS, FRVBF_SFMT_FDMAS },
  { FRV_INSN_NFDMAS, FRVBF_INSN_NFDMAS, FRVBF_SFMT_FDMAS },
  { FRV_INSN_NFDMSS, FRVBF_INSN_NFDMSS, FRVBF_SFMT_FDMAS },
  { FRV_INSN_CFMAS, FRVBF_INSN_CFMAS, FRVBF_SFMT_CFMAS },
  { FRV_INSN_CFMSS, FRVBF_INSN_CFMSS, FRVBF_SFMT_CFMAS },
  { FRV_INSN_FMAD, FRVBF_INSN_FMAD, FRVBF_SFMT_FMAS },
  { FRV_INSN_FMSD, FRVBF_INSN_FMSD, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFMAS, FRVBF_INSN_NFMAS, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFMSS, FRVBF_INSN_NFMSS, FRVBF_SFMT_FMAS },
  { FRV_INSN_FDADDS, FRVBF_INSN_FDADDS, FRVBF_SFMT_FMAS },
  { FRV_INSN_FDSUBS, FRVBF_INSN_FDSUBS, FRVBF_SFMT_FMAS },
  { FRV_INSN_FDMULS, FRVBF_INSN_FDMULS, FRVBF_SFMT_FMAS },
  { FRV_INSN_FDDIVS, FRVBF_INSN_FDDIVS, FRVBF_SFMT_FMAS },
  { FRV_INSN_FDSADS, FRVBF_INSN_FDSADS, FRVBF_SFMT_FMAS },
  { FRV_INSN_FDMULCS, FRVBF_INSN_FDMULCS, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFDMULCS, FRVBF_INSN_NFDMULCS, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFDADDS, FRVBF_INSN_NFDADDS, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFDSUBS, FRVBF_INSN_NFDSUBS, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFDMULS, FRVBF_INSN_NFDMULS, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFDDIVS, FRVBF_INSN_NFDDIVS, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFDSADS, FRVBF_INSN_NFDSADS, FRVBF_SFMT_FMAS },
  { FRV_INSN_NFDCMPS, FRVBF_INSN_NFDCMPS, FRVBF_SFMT_NFDCMPS },
  { FRV_INSN_MHSETLOS, FRVBF_INSN_MHSETLOS, FRVBF_SFMT_MHSETLOS },
  { FRV_INSN_MHSETHIS, FRVBF_INSN_MHSETHIS, FRVBF_SFMT_MHSETHIS },
  { FRV_INSN_MHDSETS, FRVBF_INSN_MHDSETS, FRVBF_SFMT_MHDSETS },
  { FRV_INSN_MHSETLOH, FRVBF_INSN_MHSETLOH, FRVBF_SFMT_MHSETLOH },
  { FRV_INSN_MHSETHIH, FRVBF_INSN_MHSETHIH, FRVBF_SFMT_MHSETHIH },
  { FRV_INSN_MHDSETH, FRVBF_INSN_MHDSETH, FRVBF_SFMT_MHDSETH },
  { FRV_INSN_MAND, FRVBF_INSN_MAND, FRVBF_SFMT_MAND },
  { FRV_INSN_MOR, FRVBF_INSN_MOR, FRVBF_SFMT_MAND },
  { FRV_INSN_MXOR, FRVBF_INSN_MXOR, FRVBF_SFMT_MAND },
  { FRV_INSN_CMAND, FRVBF_INSN_CMAND, FRVBF_SFMT_CMAND },
  { FRV_INSN_CMOR, FRVBF_INSN_CMOR, FRVBF_SFMT_CMAND },
  { FRV_INSN_CMXOR, FRVBF_INSN_CMXOR, FRVBF_SFMT_CMAND },
  { FRV_INSN_MNOT, FRVBF_INSN_MNOT, FRVBF_SFMT_MNOT },
  { FRV_INSN_CMNOT, FRVBF_INSN_CMNOT, FRVBF_SFMT_CMNOT },
  { FRV_INSN_MROTLI, FRVBF_INSN_MROTLI, FRVBF_SFMT_MROTLI },
  { FRV_INSN_MROTRI, FRVBF_INSN_MROTRI, FRVBF_SFMT_MROTLI },
  { FRV_INSN_MWCUT, FRVBF_INSN_MWCUT, FRVBF_SFMT_MWCUT },
  { FRV_INSN_MWCUTI, FRVBF_INSN_MWCUTI, FRVBF_SFMT_MWCUTI },
  { FRV_INSN_MCUT, FRVBF_INSN_MCUT, FRVBF_SFMT_MCUT },
  { FRV_INSN_MCUTI, FRVBF_INSN_MCUTI, FRVBF_SFMT_MCUTI },
  { FRV_INSN_MCUTSS, FRVBF_INSN_MCUTSS, FRVBF_SFMT_MCUT },
  { FRV_INSN_MCUTSSI, FRVBF_INSN_MCUTSSI, FRVBF_SFMT_MCUTI },
  { FRV_INSN_MDCUTSSI, FRVBF_INSN_MDCUTSSI, FRVBF_SFMT_MDCUTSSI },
  { FRV_INSN_MAVEH, FRVBF_INSN_MAVEH, FRVBF_SFMT_MAND },
  { FRV_INSN_MSLLHI, FRVBF_INSN_MSLLHI, FRVBF_SFMT_MSLLHI },
  { FRV_INSN_MSRLHI, FRVBF_INSN_MSRLHI, FRVBF_SFMT_MSLLHI },
  { FRV_INSN_MSRAHI, FRVBF_INSN_MSRAHI, FRVBF_SFMT_MSLLHI },
  { FRV_INSN_MDROTLI, FRVBF_INSN_MDROTLI, FRVBF_SFMT_MDROTLI },
  { FRV_INSN_MCPLHI, FRVBF_INSN_MCPLHI, FRVBF_SFMT_MCPLHI },
  { FRV_INSN_MCPLI, FRVBF_INSN_MCPLI, FRVBF_SFMT_MCPLI },
  { FRV_INSN_MSATHS, FRVBF_INSN_MSATHS, FRVBF_SFMT_MSATHS },
  { FRV_INSN_MQSATHS, FRVBF_INSN_MQSATHS, FRVBF_SFMT_MQSATHS },
  { FRV_INSN_MSATHU, FRVBF_INSN_MSATHU, FRVBF_SFMT_MSATHS },
  { FRV_INSN_MCMPSH, FRVBF_INSN_MCMPSH, FRVBF_SFMT_MCMPSH },
  { FRV_INSN_MCMPUH, FRVBF_INSN_MCMPUH, FRVBF_SFMT_MCMPSH },
  { FRV_INSN_MABSHS, FRVBF_INSN_MABSHS, FRVBF_SFMT_MABSHS },
  { FRV_INSN_MADDHSS, FRVBF_INSN_MADDHSS, FRVBF_SFMT_MSATHS },
  { FRV_INSN_MADDHUS, FRVBF_INSN_MADDHUS, FRVBF_SFMT_MSATHS },
  { FRV_INSN_MSUBHSS, FRVBF_INSN_MSUBHSS, FRVBF_SFMT_MSATHS },
  { FRV_INSN_MSUBHUS, FRVBF_INSN_MSUBHUS, FRVBF_SFMT_MSATHS },
  { FRV_INSN_CMADDHSS, FRVBF_INSN_CMADDHSS, FRVBF_SFMT_CMADDHSS },
  { FRV_INSN_CMADDHUS, FRVBF_INSN_CMADDHUS, FRVBF_SFMT_CMADDHSS },
  { FRV_INSN_CMSUBHSS, FRVBF_INSN_CMSUBHSS, FRVBF_SFMT_CMADDHSS },
  { FRV_INSN_CMSUBHUS, FRVBF_INSN_CMSUBHUS, FRVBF_SFMT_CMADDHSS },
  { FRV_INSN_MQADDHSS, FRVBF_INSN_MQADDHSS, FRVBF_SFMT_MQSATHS },
  { FRV_INSN_MQADDHUS, FRVBF_INSN_MQADDHUS, FRVBF_SFMT_MQSATHS },
  { FRV_INSN_MQSUBHSS, FRVBF_INSN_MQSUBHSS, FRVBF_SFMT_MQSATHS },
  { FRV_INSN_MQSUBHUS, FRVBF_INSN_MQSUBHUS, FRVBF_SFMT_MQSATHS },
  { FRV_INSN_CMQADDHSS, FRVBF_INSN_CMQADDHSS, FRVBF_SFMT_CMQADDHSS },
  { FRV_INSN_CMQADDHUS, FRVBF_INSN_CMQADDHUS, FRVBF_SFMT_CMQADDHSS },
  { FRV_INSN_CMQSUBHSS, FRVBF_INSN_CMQSUBHSS, FRVBF_SFMT_CMQADDHSS },
  { FRV_INSN_CMQSUBHUS, FRVBF_INSN_CMQSUBHUS, FRVBF_SFMT_CMQADDHSS },
  { FRV_INSN_MQLCLRHS, FRVBF_INSN_MQLCLRHS, FRVBF_SFMT_MQSATHS },
  { FRV_INSN_MQLMTHS, FRVBF_INSN_MQLMTHS, FRVBF_SFMT_MQSATHS },
  { FRV_INSN_MQSLLHI, FRVBF_INSN_MQSLLHI, FRVBF_SFMT_MQSLLHI },
  { FRV_INSN_MQSRAHI, FRVBF_INSN_MQSRAHI, FRVBF_SFMT_MQSLLHI },
  { FRV_INSN_MADDACCS, FRVBF_INSN_MADDACCS, FRVBF_SFMT_MADDACCS },
  { FRV_INSN_MSUBACCS, FRVBF_INSN_MSUBACCS, FRVBF_SFMT_MADDACCS },
  { FRV_INSN_MDADDACCS, FRVBF_INSN_MDADDACCS, FRVBF_SFMT_MDADDACCS },
  { FRV_INSN_MDSUBACCS, FRVBF_INSN_MDSUBACCS, FRVBF_SFMT_MDADDACCS },
  { FRV_INSN_MASACCS, FRVBF_INSN_MASACCS, FRVBF_SFMT_MASACCS },
  { FRV_INSN_MDASACCS, FRVBF_INSN_MDASACCS, FRVBF_SFMT_MDASACCS },
  { FRV_INSN_MMULHS, FRVBF_INSN_MMULHS, FRVBF_SFMT_MMULHS },
  { FRV_INSN_MMULHU, FRVBF_INSN_MMULHU, FRVBF_SFMT_MMULHS },
  { FRV_INSN_MMULXHS, FRVBF_INSN_MMULXHS, FRVBF_SFMT_MMULHS },
  { FRV_INSN_MMULXHU, FRVBF_INSN_MMULXHU, FRVBF_SFMT_MMULHS },
  { FRV_INSN_CMMULHS, FRVBF_INSN_CMMULHS, FRVBF_SFMT_CMMULHS },
  { FRV_INSN_CMMULHU, FRVBF_INSN_CMMULHU, FRVBF_SFMT_CMMULHS },
  { FRV_INSN_MQMULHS, FRVBF_INSN_MQMULHS, FRVBF_SFMT_MQMULHS },
  { FRV_INSN_MQMULHU, FRVBF_INSN_MQMULHU, FRVBF_SFMT_MQMULHS },
  { FRV_INSN_MQMULXHS, FRVBF_INSN_MQMULXHS, FRVBF_SFMT_MQMULHS },
  { FRV_INSN_MQMULXHU, FRVBF_INSN_MQMULXHU, FRVBF_SFMT_MQMULHS },
  { FRV_INSN_CMQMULHS, FRVBF_INSN_CMQMULHS, FRVBF_SFMT_CMQMULHS },
  { FRV_INSN_CMQMULHU, FRVBF_INSN_CMQMULHU, FRVBF_SFMT_CMQMULHS },
  { FRV_INSN_MMACHS, FRVBF_INSN_MMACHS, FRVBF_SFMT_MMACHS },
  { FRV_INSN_MMACHU, FRVBF_INSN_MMACHU, FRVBF_SFMT_MMACHU },
  { FRV_INSN_MMRDHS, FRVBF_INSN_MMRDHS, FRVBF_SFMT_MMACHS },
  { FRV_INSN_MMRDHU, FRVBF_INSN_MMRDHU, FRVBF_SFMT_MMACHU },
  { FRV_INSN_CMMACHS, FRVBF_INSN_CMMACHS, FRVBF_SFMT_CMMACHS },
  { FRV_INSN_CMMACHU, FRVBF_INSN_CMMACHU, FRVBF_SFMT_CMMACHU },
  { FRV_INSN_MQMACHS, FRVBF_INSN_MQMACHS, FRVBF_SFMT_MQMACHS },
  { FRV_INSN_MQMACHU, FRVBF_INSN_MQMACHU, FRVBF_SFMT_MQMACHU },
  { FRV_INSN_CMQMACHS, FRVBF_INSN_CMQMACHS, FRVBF_SFMT_CMQMACHS },
  { FRV_INSN_CMQMACHU, FRVBF_INSN_CMQMACHU, FRVBF_SFMT_CMQMACHU },
  { FRV_INSN_MQXMACHS, FRVBF_INSN_MQXMACHS, FRVBF_SFMT_MQMACHS },
  { FRV_INSN_MQXMACXHS, FRVBF_INSN_MQXMACXHS, FRVBF_SFMT_MQMACHS },
  { FRV_INSN_MQMACXHS, FRVBF_INSN_MQMACXHS, FRVBF_SFMT_MQMACHS },
  { FRV_INSN_MCPXRS, FRVBF_INSN_MCPXRS, FRVBF_SFMT_MCPXRS },
  { FRV_INSN_MCPXRU, FRVBF_INSN_MCPXRU, FRVBF_SFMT_MCPXRS },
  { FRV_INSN_MCPXIS, FRVBF_INSN_MCPXIS, FRVBF_SFMT_MCPXRS },
  { FRV_INSN_MCPXIU, FRVBF_INSN_MCPXIU, FRVBF_SFMT_MCPXRS },
  { FRV_INSN_CMCPXRS, FRVBF_INSN_CMCPXRS, FRVBF_SFMT_CMCPXRS },
  { FRV_INSN_CMCPXRU, FRVBF_INSN_CMCPXRU, FRVBF_SFMT_CMCPXRS },
  { FRV_INSN_CMCPXIS, FRVBF_INSN_CMCPXIS, FRVBF_SFMT_CMCPXRS },
  { FRV_INSN_CMCPXIU, FRVBF_INSN_CMCPXIU, FRVBF_SFMT_CMCPXRS },
  { FRV_INSN_MQCPXRS, FRVBF_INSN_MQCPXRS, FRVBF_SFMT_MQCPXRS },
  { FRV_INSN_MQCPXRU, FRVBF_INSN_MQCPXRU, FRVBF_SFMT_MQCPXRS },
  { FRV_INSN_MQCPXIS, FRVBF_INSN_MQCPXIS, FRVBF_SFMT_MQCPXRS },
  { FRV_INSN_MQCPXIU, FRVBF_INSN_MQCPXIU, FRVBF_SFMT_MQCPXRS },
  { FRV_INSN_MEXPDHW, FRVBF_INSN_MEXPDHW, FRVBF_SFMT_MEXPDHW },
  { FRV_INSN_CMEXPDHW, FRVBF_INSN_CMEXPDHW, FRVBF_SFMT_CMEXPDHW },
  { FRV_INSN_MEXPDHD, FRVBF_INSN_MEXPDHD, FRVBF_SFMT_MEXPDHD },
  { FRV_INSN_CMEXPDHD, FRVBF_INSN_CMEXPDHD, FRVBF_SFMT_CMEXPDHD },
  { FRV_INSN_MPACKH, FRVBF_INSN_MPACKH, FRVBF_SFMT_MPACKH },
  { FRV_INSN_MDPACKH, FRVBF_INSN_MDPACKH, FRVBF_SFMT_MDPACKH },
  { FRV_INSN_MUNPACKH, FRVBF_INSN_MUNPACKH, FRVBF_SFMT_MUNPACKH },
  { FRV_INSN_MDUNPACKH, FRVBF_INSN_MDUNPACKH, FRVBF_SFMT_MDUNPACKH },
  { FRV_INSN_MBTOH, FRVBF_INSN_MBTOH, FRVBF_SFMT_MBTOH },
  { FRV_INSN_CMBTOH, FRVBF_INSN_CMBTOH, FRVBF_SFMT_CMBTOH },
  { FRV_INSN_MHTOB, FRVBF_INSN_MHTOB, FRVBF_SFMT_MHTOB },
  { FRV_INSN_CMHTOB, FRVBF_INSN_CMHTOB, FRVBF_SFMT_CMHTOB },
  { FRV_INSN_MBTOHE, FRVBF_INSN_MBTOHE, FRVBF_SFMT_MBTOHE },
  { FRV_INSN_CMBTOHE, FRVBF_INSN_CMBTOHE, FRVBF_SFMT_CMBTOHE },
  { FRV_INSN_MNOP, FRVBF_INSN_MNOP, FRVBF_SFMT_REI },
  { FRV_INSN_MCLRACC_0, FRVBF_INSN_MCLRACC_0, FRVBF_SFMT_MCLRACC_0 },
  { FRV_INSN_MCLRACC_1, FRVBF_INSN_MCLRACC_1, FRVBF_SFMT_MCLRACC_0 },
  { FRV_INSN_MRDACC, FRVBF_INSN_MRDACC, FRVBF_SFMT_MRDACC },
  { FRV_INSN_MRDACCG, FRVBF_INSN_MRDACCG, FRVBF_SFMT_MRDACCG },
  { FRV_INSN_MWTACC, FRVBF_INSN_MWTACC, FRVBF_SFMT_MWTACC },
  { FRV_INSN_MWTACCG, FRVBF_INSN_MWTACCG, FRVBF_SFMT_MWTACCG },
  { FRV_INSN_MCOP1, FRVBF_INSN_MCOP1, FRVBF_SFMT_REI },
  { FRV_INSN_MCOP2, FRVBF_INSN_MCOP2, FRVBF_SFMT_REI },
  { FRV_INSN_FNOP, FRVBF_INSN_FNOP, FRVBF_SFMT_REI },
};

static const struct insn_sem frvbf_insn_sem_invalid = {
  VIRTUAL_INSN_X_INVALID, FRVBF_INSN_X_INVALID, FRVBF_SFMT_EMPTY
};

/* Initialize an IDESC from the compile-time computable parts.  */

static INLINE void
init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
{
  const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;

  id->num = t->index;
  id->sfmt = t->sfmt;
  if ((int) t->type <= 0)
    id->idata = & cgen_virtual_insn_table[- (int) t->type];
  else
    id->idata = & insn_table[t->type];
  id->attrs = CGEN_INSN_ATTRS (id->idata);
  /* Oh my god, a magic number.  */
  id->length = CGEN_INSN_BITSIZE (id->idata) / 8;

#if WITH_PROFILE_MODEL_P
  id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
  {
    SIM_DESC sd = CPU_STATE (cpu);
    SIM_ASSERT (t->index == id->timing->num);
  }
#endif

  /* Semantic pointers are initialized elsewhere.  */
}

/* Initialize the instruction descriptor table.  */

void
frvbf_init_idesc_table (SIM_CPU *cpu)
{
  IDESC *id,*tabend;
  const struct insn_sem *t,*tend;
  int tabsize = FRVBF_INSN__MAX;
  IDESC *table = frvbf_insn_data;

  memset (table, 0, tabsize * sizeof (IDESC));

  /* First set all entries to the `invalid insn'.  */
  t = & frvbf_insn_sem_invalid;
  for (id = table, tabend = table + tabsize; id < tabend; ++id)
    init_idesc (cpu, id, t);

  /* Now fill in the values for the chosen cpu.  */
  for (t = frvbf_insn_sem, tend = t + sizeof (frvbf_insn_sem) / sizeof (*t);
       t != tend; ++t)
    {
      init_idesc (cpu, & table[t->index], t);
    }

  /* Link the IDESC table into the cpu.  */
  CPU_IDESC (cpu) = table;
}

/* Given an instruction, return a pointer to its IDESC entry.  */

const IDESC *
frvbf_decode (SIM_CPU *current_cpu, IADDR pc,
              CGEN_INSN_INT base_insn, CGEN_INSN_INT entire_insn,
              ARGBUF *abuf)
{
  /* Result of decoder.  */
  FRVBF_INSN_TYPE itype;

  {
    CGEN_INSN_INT insn = base_insn;

    {
      unsigned int val = (((insn >> 18) & (127 << 0)));
      switch (val)
      {
      case 0 :
        {
          unsigned int val = (((insn >> 6) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_ADD; goto extract_sfmt_add;
          case 1 : itype = FRVBF_INSN_ADDCC; goto extract_sfmt_addcc;
          case 2 : itype = FRVBF_INSN_ADDX; goto extract_sfmt_addx;
          case 3 : itype = FRVBF_INSN_ADDXCC; goto extract_sfmt_addcc;
          case 4 : itype = FRVBF_INSN_SUB; goto extract_sfmt_add;
          case 5 : itype = FRVBF_INSN_SUBCC; goto extract_sfmt_addcc;
          case 6 : itype = FRVBF_INSN_SUBX; goto extract_sfmt_addx;
          case 7 : itype = FRVBF_INSN_SUBXCC; goto extract_sfmt_addcc;
          case 8 : itype = FRVBF_INSN_SMUL; goto extract_sfmt_smul;
          case 9 : itype = FRVBF_INSN_SMULCC; goto extract_sfmt_smulcc;
          case 10 : itype = FRVBF_INSN_UMUL; goto extract_sfmt_smul;
          case 11 : itype = FRVBF_INSN_UMULCC; goto extract_sfmt_smulcc;
          case 12 : itype = FRVBF_INSN_CMPB; goto extract_sfmt_cmpb;
          case 13 : itype = FRVBF_INSN_CMPBA; goto extract_sfmt_cmpb;
          case 14 : itype = FRVBF_INSN_SDIV; goto extract_sfmt_sdiv;
          case 15 : itype = FRVBF_INSN_UDIV; goto extract_sfmt_sdiv;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 1 :
        {
          unsigned int val = (((insn >> 6) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_AND; goto extract_sfmt_add;
          case 1 : itype = FRVBF_INSN_ANDCC; goto extract_sfmt_andcc;
          case 2 : itype = FRVBF_INSN_OR; goto extract_sfmt_add;
          case 3 : itype = FRVBF_INSN_ORCC; goto extract_sfmt_andcc;
          case 4 : itype = FRVBF_INSN_XOR; goto extract_sfmt_add;
          case 5 : itype = FRVBF_INSN_XORCC; goto extract_sfmt_andcc;
          case 6 : itype = FRVBF_INSN_NOT; goto extract_sfmt_not;
          case 8 : itype = FRVBF_INSN_SLL; goto extract_sfmt_add;
          case 9 : itype = FRVBF_INSN_SLLCC; goto extract_sfmt_addcc;
          case 10 : itype = FRVBF_INSN_SRL; goto extract_sfmt_add;
          case 11 : itype = FRVBF_INSN_SRLCC; goto extract_sfmt_addcc;
          case 12 : itype = FRVBF_INSN_SRA; goto extract_sfmt_add;
          case 13 : itype = FRVBF_INSN_SRACC; goto extract_sfmt_addcc;
          case 14 : itype = FRVBF_INSN_NSDIV; goto extract_sfmt_sdiv;
          case 15 : itype = FRVBF_INSN_NUDIV; goto extract_sfmt_sdiv;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 2 :
        {
          unsigned int val = (((insn >> 6) & (63 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_LDSB; goto extract_sfmt_ldsb;
          case 1 : itype = FRVBF_INSN_LDUB; goto extract_sfmt_ldsb;
          case 2 : itype = FRVBF_INSN_LDSH; goto extract_sfmt_ldsb;
          case 3 : itype = FRVBF_INSN_LDUH; goto extract_sfmt_ldsb;
          case 4 : itype = FRVBF_INSN_LD; goto extract_sfmt_ldsb;
          case 5 : itype = FRVBF_INSN_LDD; goto extract_sfmt_ldd;
          case 6 : itype = FRVBF_INSN_LDQ; goto extract_sfmt_ldq;
          case 8 : itype = FRVBF_INSN_LDBF; goto extract_sfmt_ldbf;
          case 9 : itype = FRVBF_INSN_LDHF; goto extract_sfmt_ldbf;
          case 10 : itype = FRVBF_INSN_LDF; goto extract_sfmt_ldbf;
          case 11 : itype = FRVBF_INSN_LDDF; goto extract_sfmt_lddf;
          case 12 : itype = FRVBF_INSN_LDQF; goto extract_sfmt_ldqf;
          case 13 : itype = FRVBF_INSN_LDC; goto extract_sfmt_ldc;
          case 14 : itype = FRVBF_INSN_LDDC; goto extract_sfmt_lddc;
          case 15 : itype = FRVBF_INSN_LDQC; goto extract_sfmt_ldqc;
          case 16 : itype = FRVBF_INSN_LDSBU; goto extract_sfmt_ldsbu;
          case 17 : itype = FRVBF_INSN_LDUBU; goto extract_sfmt_ldsbu;
          case 18 : itype = FRVBF_INSN_LDSHU; goto extract_sfmt_ldsbu;
          case 19 : itype = FRVBF_INSN_LDUHU; goto extract_sfmt_ldsbu;
          case 20 : itype = FRVBF_INSN_LDU; goto extract_sfmt_ldsbu;
          case 21 : itype = FRVBF_INSN_LDDU; goto extract_sfmt_lddu;
          case 22 : itype = FRVBF_INSN_LDQU; goto extract_sfmt_ldqu;
          case 24 : itype = FRVBF_INSN_LDBFU; goto extract_sfmt_ldbfu;
          case 25 : itype = FRVBF_INSN_LDHFU; goto extract_sfmt_ldbfu;
          case 26 : itype = FRVBF_INSN_LDFU; goto extract_sfmt_ldbfu;
          case 27 : itype = FRVBF_INSN_LDDFU; goto extract_sfmt_lddfu;
          case 28 : itype = FRVBF_INSN_LDQFU; goto extract_sfmt_ldqfu;
          case 29 : itype = FRVBF_INSN_LDCU; goto extract_sfmt_ldcu;
          case 30 : itype = FRVBF_INSN_LDDCU; goto extract_sfmt_lddcu;
          case 31 : itype = FRVBF_INSN_LDQCU; goto extract_sfmt_ldqcu;
          case 32 : itype = FRVBF_INSN_NLDSB; goto extract_sfmt_nldsb;
          case 33 : itype = FRVBF_INSN_NLDUB; goto extract_sfmt_nldsb;
          case 34 : itype = FRVBF_INSN_NLDSH; goto extract_sfmt_nldsb;
          case 35 : itype = FRVBF_INSN_NLDUH; goto extract_sfmt_nldsb;
          case 36 : itype = FRVBF_INSN_NLD; goto extract_sfmt_nldsb;
          case 37 : itype = FRVBF_INSN_NLDD; goto extract_sfmt_nldd;
          case 38 : itype = FRVBF_INSN_NLDQ; goto extract_sfmt_nldq;
          case 40 : itype = FRVBF_INSN_NLDBF; goto extract_sfmt_nldbf;
          case 41 : itype = FRVBF_INSN_NLDHF; goto extract_sfmt_nldbf;
          case 42 : itype = FRVBF_INSN_NLDF; goto extract_sfmt_nldbf;
          case 43 : itype = FRVBF_INSN_NLDDF; goto extract_sfmt_nlddf;
          case 44 : itype = FRVBF_INSN_NLDQF; goto extract_sfmt_nldqf;
          case 48 : itype = FRVBF_INSN_NLDSBU; goto extract_sfmt_nldsbu;
          case 49 : itype = FRVBF_INSN_NLDUBU; goto extract_sfmt_nldsbu;
          case 50 : itype = FRVBF_INSN_NLDSHU; goto extract_sfmt_nldsbu;
          case 51 : itype = FRVBF_INSN_NLDUHU; goto extract_sfmt_nldsbu;
          case 52 : itype = FRVBF_INSN_NLDU; goto extract_sfmt_nldsbu;
          case 53 : itype = FRVBF_INSN_NLDDU; goto extract_sfmt_nlddu;
          case 54 : itype = FRVBF_INSN_NLDQU; goto extract_sfmt_nldqu;
          case 56 : itype = FRVBF_INSN_NLDBFU; goto extract_sfmt_nldbfu;
          case 57 : itype = FRVBF_INSN_NLDHFU; goto extract_sfmt_nldbfu;
          case 58 : itype = FRVBF_INSN_NLDFU; goto extract_sfmt_nldbfu;
          case 59 : itype = FRVBF_INSN_NLDDFU; goto extract_sfmt_nlddfu;
          case 60 : itype = FRVBF_INSN_NLDQFU; goto extract_sfmt_nldqfu;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 3 :
        {
          unsigned int val = (((insn >> 6) & (63 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_STB; goto extract_sfmt_stb;
          case 1 : itype = FRVBF_INSN_STH; goto extract_sfmt_stb;
          case 2 : itype = FRVBF_INSN_ST; goto extract_sfmt_stb;
          case 3 : itype = FRVBF_INSN_STD; goto extract_sfmt_std;
          case 4 : itype = FRVBF_INSN_STQ; goto extract_sfmt_ldq;
          case 5 : itype = FRVBF_INSN_SWAP; goto extract_sfmt_swap;
          case 6 : itype = FRVBF_INSN_MOVGS; goto extract_sfmt_movgs;
          case 7 : itype = FRVBF_INSN_MOVSG; goto extract_sfmt_movsg;
          case 8 : itype = FRVBF_INSN_STBF; goto extract_sfmt_stbf;
          case 9 : itype = FRVBF_INSN_STHF; goto extract_sfmt_stbf;
          case 10 : itype = FRVBF_INSN_STF; goto extract_sfmt_stbf;
          case 11 : itype = FRVBF_INSN_STDF; goto extract_sfmt_stdf;
          case 12 : itype = FRVBF_INSN_STQF; goto extract_sfmt_ldqf;
          case 13 : itype = FRVBF_INSN_MOVFG; goto extract_sfmt_movfg;
          case 14 : itype = FRVBF_INSN_MOVFGD; goto extract_sfmt_movfgd;
          case 15 : itype = FRVBF_INSN_MOVFGQ; goto extract_sfmt_movfgq;
          case 16 : itype = FRVBF_INSN_STBU; goto extract_sfmt_stbu;
          case 17 : itype = FRVBF_INSN_STHU; goto extract_sfmt_stbu;
          case 18 : itype = FRVBF_INSN_STU; goto extract_sfmt_stbu;
          case 19 : itype = FRVBF_INSN_STDU; goto extract_sfmt_stdu;
          case 20 : itype = FRVBF_INSN_STQU; goto extract_sfmt_stqu;
          case 21 : itype = FRVBF_INSN_MOVGF; goto extract_sfmt_movgf;
          case 22 : itype = FRVBF_INSN_MOVGFD; goto extract_sfmt_movgfd;
          case 23 : itype = FRVBF_INSN_MOVGFQ; goto extract_sfmt_movgfq;
          case 24 : itype = FRVBF_INSN_STBFU; goto extract_sfmt_stbfu;
          case 25 : itype = FRVBF_INSN_STHFU; goto extract_sfmt_stbfu;
          case 26 : itype = FRVBF_INSN_STFU; goto extract_sfmt_stbfu;
          case 27 : itype = FRVBF_INSN_STDFU; goto extract_sfmt_stdfu;
          case 28 : itype = FRVBF_INSN_STQFU; goto extract_sfmt_ldqfu;
          case 32 : itype = FRVBF_INSN_LRAI; goto extract_sfmt_rei;
          case 33 : itype = FRVBF_INSN_LRAD; goto extract_sfmt_rei;
          case 36 : itype = FRVBF_INSN_TLBPR; goto extract_sfmt_rei;
          case 37 : itype = FRVBF_INSN_STC; goto extract_sfmt_stc;
          case 38 : itype = FRVBF_INSN_STDC; goto extract_sfmt_stdc;
          case 39 : itype = FRVBF_INSN_STQC; goto extract_sfmt_ldqc;
          case 45 : itype = FRVBF_INSN_STCU; goto extract_sfmt_stcu;
          case 46 : itype = FRVBF_INSN_STDCU; goto extract_sfmt_stdcu;
          case 47 : itype = FRVBF_INSN_STQCU; goto extract_sfmt_ldqcu;
          case 48 : itype = FRVBF_INSN_ICPL; goto extract_sfmt_icpl;
          case 49 : itype = FRVBF_INSN_ICUL; goto extract_sfmt_icul;
          case 50 : itype = FRVBF_INSN_WITLB; goto extract_sfmt_rei;
          case 51 : itype = FRVBF_INSN_ITLBI; goto extract_sfmt_rei;
          case 52 : itype = FRVBF_INSN_DCPL; goto extract_sfmt_icpl;
          case 53 : itype = FRVBF_INSN_DCUL; goto extract_sfmt_icul;
          case 54 : itype = FRVBF_INSN_WDTLB; goto extract_sfmt_rei;
          case 55 : itype = FRVBF_INSN_DTLBI; goto extract_sfmt_rei;
          case 56 : itype = FRVBF_INSN_ICI; goto extract_sfmt_ici;
          case 57 : itype = FRVBF_INSN_ICEI; goto extract_sfmt_icei;
          case 58 : itype = FRVBF_INSN_DCEI; goto extract_sfmt_icei;
          case 59 : itype = FRVBF_INSN_DCEF; goto extract_sfmt_icei;
          case 60 : itype = FRVBF_INSN_DCI; goto extract_sfmt_ici;
          case 61 : itype = FRVBF_INSN_DCF; goto extract_sfmt_ici;
          case 62 : itype = FRVBF_INSN_BAR; goto extract_sfmt_rei;
          case 63 : itype = FRVBF_INSN_MEMBAR; goto extract_sfmt_rei;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 4 :
        {
          unsigned int val = (((insn >> 25) & (15 << 2)) | ((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_TNO; goto extract_sfmt_rei;
          case 1 : itype = FRVBF_INSN_FTNO; goto extract_sfmt_rei;
          case 2 : itype = FRVBF_INSN_MTRAP; goto extract_sfmt_rei;
          case 3 : itype = FRVBF_INSN_BREAK; goto extract_sfmt_break;
          case 4 : itype = FRVBF_INSN_TC; goto extract_sfmt_teq;
          case 5 : itype = FRVBF_INSN_FTU; goto extract_sfmt_ftne;
          case 8 : itype = FRVBF_INSN_TV; goto extract_sfmt_teq;
          case 9 : itype = FRVBF_INSN_FTGT; goto extract_sfmt_ftne;
          case 12 : itype = FRVBF_INSN_TLT; goto extract_sfmt_teq;
          case 13 : itype = FRVBF_INSN_FTUG; goto extract_sfmt_ftne;
          case 16 : itype = FRVBF_INSN_TEQ; goto extract_sfmt_teq;
          case 17 : itype = FRVBF_INSN_FTLT; goto extract_sfmt_ftne;
          case 20 : itype = FRVBF_INSN_TLS; goto extract_sfmt_teq;
          case 21 : itype = FRVBF_INSN_FTUL; goto extract_sfmt_ftne;
          case 24 : itype = FRVBF_INSN_TN; goto extract_sfmt_teq;
          case 25 : itype = FRVBF_INSN_FTLG; goto extract_sfmt_ftne;
          case 28 : itype = FRVBF_INSN_TLE; goto extract_sfmt_teq;
          case 29 : itype = FRVBF_INSN_FTNE; goto extract_sfmt_ftne;
          case 32 : itype = FRVBF_INSN_TRA; goto extract_sfmt_tra;
          case 33 : itype = FRVBF_INSN_FTEQ; goto extract_sfmt_ftne;
          case 36 : itype = FRVBF_INSN_TNC; goto extract_sfmt_teq;
          case 37 : itype = FRVBF_INSN_FTUE; goto extract_sfmt_ftne;
          case 40 : itype = FRVBF_INSN_TNV; goto extract_sfmt_teq;
          case 41 : itype = FRVBF_INSN_FTGE; goto extract_sfmt_ftne;
          case 44 : itype = FRVBF_INSN_TGE; goto extract_sfmt_teq;
          case 45 : itype = FRVBF_INSN_FTUGE; goto extract_sfmt_ftne;
          case 48 : itype = FRVBF_INSN_TNE; goto extract_sfmt_teq;
          case 49 : itype = FRVBF_INSN_FTLE; goto extract_sfmt_ftne;
          case 52 : itype = FRVBF_INSN_THI; goto extract_sfmt_teq;
          case 53 : itype = FRVBF_INSN_FTULE; goto extract_sfmt_ftne;
          case 56 : itype = FRVBF_INSN_TP; goto extract_sfmt_teq;
          case 57 : itype = FRVBF_INSN_FTO; goto extract_sfmt_ftne;
          case 60 : itype = FRVBF_INSN_TGT; goto extract_sfmt_teq;
          case 61 : itype = FRVBF_INSN_FTRA; goto extract_sfmt_tra;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 5 : itype = FRVBF_INSN_RETT; goto extract_sfmt_rett;
      case 6 :
        {
          unsigned int val = (((insn >> 27) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_BNO; goto extract_sfmt_bno;
          case 1 : itype = FRVBF_INSN_BC; goto extract_sfmt_beq;
          case 2 : itype = FRVBF_INSN_BV; goto extract_sfmt_beq;
          case 3 : itype = FRVBF_INSN_BLT; goto extract_sfmt_beq;
          case 4 : itype = FRVBF_INSN_BEQ; goto extract_sfmt_beq;
          case 5 : itype = FRVBF_INSN_BLS; goto extract_sfmt_beq;
          case 6 : itype = FRVBF_INSN_BN; goto extract_sfmt_beq;
          case 7 : itype = FRVBF_INSN_BLE; goto extract_sfmt_beq;
          case 8 : itype = FRVBF_INSN_BRA; goto extract_sfmt_bra;
          case 9 : itype = FRVBF_INSN_BNC; goto extract_sfmt_beq;
          case 10 : itype = FRVBF_INSN_BNV; goto extract_sfmt_beq;
          case 11 : itype = FRVBF_INSN_BGE; goto extract_sfmt_beq;
          case 12 : itype = FRVBF_INSN_BNE; goto extract_sfmt_beq;
          case 13 : itype = FRVBF_INSN_BHI; goto extract_sfmt_beq;
          case 14 : itype = FRVBF_INSN_BP; goto extract_sfmt_beq;
          case 15 : itype = FRVBF_INSN_BGT; goto extract_sfmt_beq;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 7 :
        {
          unsigned int val = (((insn >> 27) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_FBNO; goto extract_sfmt_bno;
          case 1 : itype = FRVBF_INSN_FBU; goto extract_sfmt_fbne;
          case 2 : itype = FRVBF_INSN_FBGT; goto extract_sfmt_fbne;
          case 3 : itype = FRVBF_INSN_FBUG; goto extract_sfmt_fbne;
          case 4 : itype = FRVBF_INSN_FBLT; goto extract_sfmt_fbne;
          case 5 : itype = FRVBF_INSN_FBUL; goto extract_sfmt_fbne;
          case 6 : itype = FRVBF_INSN_FBLG; goto extract_sfmt_fbne;
          case 7 : itype = FRVBF_INSN_FBNE; goto extract_sfmt_fbne;
          case 8 : itype = FRVBF_INSN_FBEQ; goto extract_sfmt_fbne;
          case 9 : itype = FRVBF_INSN_FBUE; goto extract_sfmt_fbne;
          case 10 : itype = FRVBF_INSN_FBGE; goto extract_sfmt_fbne;
          case 11 : itype = FRVBF_INSN_FBUGE; goto extract_sfmt_fbne;
          case 12 : itype = FRVBF_INSN_FBLE; goto extract_sfmt_fbne;
          case 13 : itype = FRVBF_INSN_FBULE; goto extract_sfmt_fbne;
          case 14 : itype = FRVBF_INSN_FBO; goto extract_sfmt_fbne;
          case 15 : itype = FRVBF_INSN_FBRA; goto extract_sfmt_bra;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 8 :
        {
          unsigned int val = (((insn >> 27) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CKNO; goto extract_sfmt_ckra;
          case 1 : itype = FRVBF_INSN_CKC; goto extract_sfmt_ckeq;
          case 2 : itype = FRVBF_INSN_CKV; goto extract_sfmt_ckeq;
          case 3 : itype = FRVBF_INSN_CKLT; goto extract_sfmt_ckeq;
          case 4 : itype = FRVBF_INSN_CKEQ; goto extract_sfmt_ckeq;
          case 5 : itype = FRVBF_INSN_CKLS; goto extract_sfmt_ckeq;
          case 6 : itype = FRVBF_INSN_CKN; goto extract_sfmt_ckeq;
          case 7 : itype = FRVBF_INSN_CKLE; goto extract_sfmt_ckeq;
          case 8 : itype = FRVBF_INSN_CKRA; goto extract_sfmt_ckra;
          case 9 : itype = FRVBF_INSN_CKNC; goto extract_sfmt_ckeq;
          case 10 : itype = FRVBF_INSN_CKNV; goto extract_sfmt_ckeq;
          case 11 : itype = FRVBF_INSN_CKGE; goto extract_sfmt_ckeq;
          case 12 : itype = FRVBF_INSN_CKNE; goto extract_sfmt_ckeq;
          case 13 : itype = FRVBF_INSN_CKHI; goto extract_sfmt_ckeq;
          case 14 : itype = FRVBF_INSN_CKP; goto extract_sfmt_ckeq;
          case 15 : itype = FRVBF_INSN_CKGT; goto extract_sfmt_ckeq;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 9 :
        {
          unsigned int val = (((insn >> 27) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_FCKNO; goto extract_sfmt_fckra;
          case 1 : itype = FRVBF_INSN_FCKU; goto extract_sfmt_fckne;
          case 2 : itype = FRVBF_INSN_FCKGT; goto extract_sfmt_fckne;
          case 3 : itype = FRVBF_INSN_FCKUG; goto extract_sfmt_fckne;
          case 4 : itype = FRVBF_INSN_FCKLT; goto extract_sfmt_fckne;
          case 5 : itype = FRVBF_INSN_FCKUL; goto extract_sfmt_fckne;
          case 6 : itype = FRVBF_INSN_FCKLG; goto extract_sfmt_fckne;
          case 7 : itype = FRVBF_INSN_FCKNE; goto extract_sfmt_fckne;
          case 8 : itype = FRVBF_INSN_FCKEQ; goto extract_sfmt_fckne;
          case 9 : itype = FRVBF_INSN_FCKUE; goto extract_sfmt_fckne;
          case 10 : itype = FRVBF_INSN_FCKGE; goto extract_sfmt_fckne;
          case 11 : itype = FRVBF_INSN_FCKUGE; goto extract_sfmt_fckne;
          case 12 : itype = FRVBF_INSN_FCKLE; goto extract_sfmt_fckne;
          case 13 : itype = FRVBF_INSN_FCKULE; goto extract_sfmt_fckne;
          case 14 : itype = FRVBF_INSN_FCKO; goto extract_sfmt_fckne;
          case 15 : itype = FRVBF_INSN_FCKRA; goto extract_sfmt_fckra;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 10 :
        {
          unsigned int val = (((insn >> 6) & (31 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CLRGR; goto extract_sfmt_clrgr;
          case 1 : itype = FRVBF_INSN_CLRGA; goto extract_sfmt_rei;
          case 2 : itype = FRVBF_INSN_CLRFR; goto extract_sfmt_clrfr;
          case 3 : itype = FRVBF_INSN_CLRFA; goto extract_sfmt_rei;
          case 4 : itype = FRVBF_INSN_COMMITGR; goto extract_sfmt_commitgr;
          case 5 : itype = FRVBF_INSN_COMMITGA; goto extract_sfmt_rei;
          case 6 : itype = FRVBF_INSN_COMMITFR; goto extract_sfmt_commitfr;
          case 7 : itype = FRVBF_INSN_COMMITFA; goto extract_sfmt_rei;
          case 8 : itype = FRVBF_INSN_ANDCR; goto extract_sfmt_andcr;
          case 9 : itype = FRVBF_INSN_ORCR; goto extract_sfmt_andcr;
          case 10 : itype = FRVBF_INSN_XORCR; goto extract_sfmt_andcr;
          case 11 : itype = FRVBF_INSN_NOTCR; goto extract_sfmt_notcr;
          case 12 : itype = FRVBF_INSN_NANDCR; goto extract_sfmt_andcr;
          case 13 : itype = FRVBF_INSN_NORCR; goto extract_sfmt_andcr;
          case 16 : itype = FRVBF_INSN_ANDNCR; goto extract_sfmt_andcr;
          case 17 : itype = FRVBF_INSN_ORNCR; goto extract_sfmt_andcr;
          case 20 : itype = FRVBF_INSN_NANDNCR; goto extract_sfmt_andcr;
          case 21 : itype = FRVBF_INSN_NORNCR; goto extract_sfmt_andcr;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 11 : itype = FRVBF_INSN_SCAN; goto extract_sfmt_add;
      case 12 :
        {
          unsigned int val = (((insn >> 25) & (1 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_JMPL; goto extract_sfmt_jmpl;
          case 1 : itype = FRVBF_INSN_CALLL; goto extract_sfmt_jmpl;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 13 :
        {
          unsigned int val = (((insn >> 25) & (1 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_JMPIL; goto extract_sfmt_jmpil;
          case 1 : itype = FRVBF_INSN_CALLIL; goto extract_sfmt_jmpil;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 14 :
        {
          unsigned int val = (((insn >> 25) & (15 << 2)) | ((insn >> 14) & (1 << 1)) | ((insn >> 13) & (1 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_BNOLR; goto extract_sfmt_bnolr;
          case 1 :
            {
              unsigned int val = (((insn >> 14) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_BCTRLR; goto extract_sfmt_bctrlr;
              case 1 : itype = FRVBF_INSN_BCNOLR; goto extract_sfmt_bcnolr;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 2 : itype = FRVBF_INSN_FBNOLR; goto extract_sfmt_bnolr;
          case 3 : itype = FRVBF_INSN_FCBNOLR; goto extract_sfmt_bcnolr;
          case 4 : itype = FRVBF_INSN_BCLR; goto extract_sfmt_beqlr;
          case 5 : itype = FRVBF_INSN_BCCLR; goto extract_sfmt_bceqlr;
          case 6 : itype = FRVBF_INSN_FBULR; goto extract_sfmt_fbeqlr;
          case 7 : itype = FRVBF_INSN_FCBULR; goto extract_sfmt_fcbeqlr;
          case 8 : itype = FRVBF_INSN_BVLR; goto extract_sfmt_beqlr;
          case 9 : itype = FRVBF_INSN_BCVLR; goto extract_sfmt_bceqlr;
          case 10 : itype = FRVBF_INSN_FBGTLR; goto extract_sfmt_fbeqlr;
          case 11 : itype = FRVBF_INSN_FCBGTLR; goto extract_sfmt_fcbeqlr;
          case 12 : itype = FRVBF_INSN_BLTLR; goto extract_sfmt_beqlr;
          case 13 : itype = FRVBF_INSN_BCLTLR; goto extract_sfmt_bceqlr;
          case 14 : itype = FRVBF_INSN_FBUGLR; goto extract_sfmt_fbeqlr;
          case 15 : itype = FRVBF_INSN_FCBUGLR; goto extract_sfmt_fcbeqlr;
          case 16 : itype = FRVBF_INSN_BEQLR; goto extract_sfmt_beqlr;
          case 17 : itype = FRVBF_INSN_BCEQLR; goto extract_sfmt_bceqlr;
          case 18 : itype = FRVBF_INSN_FBLTLR; goto extract_sfmt_fbeqlr;
          case 19 : itype = FRVBF_INSN_FCBLTLR; goto extract_sfmt_fcbeqlr;
          case 20 : itype = FRVBF_INSN_BLSLR; goto extract_sfmt_beqlr;
          case 21 : itype = FRVBF_INSN_BCLSLR; goto extract_sfmt_bceqlr;
          case 22 : itype = FRVBF_INSN_FBULLR; goto extract_sfmt_fbeqlr;
          case 23 : itype = FRVBF_INSN_FCBULLR; goto extract_sfmt_fcbeqlr;
          case 24 : itype = FRVBF_INSN_BNLR; goto extract_sfmt_beqlr;
          case 25 : itype = FRVBF_INSN_BCNLR; goto extract_sfmt_bceqlr;
          case 26 : itype = FRVBF_INSN_FBLGLR; goto extract_sfmt_fbeqlr;
          case 27 : itype = FRVBF_INSN_FCBLGLR; goto extract_sfmt_fcbeqlr;
          case 28 : itype = FRVBF_INSN_BLELR; goto extract_sfmt_beqlr;
          case 29 : itype = FRVBF_INSN_BCLELR; goto extract_sfmt_bceqlr;
          case 30 : itype = FRVBF_INSN_FBNELR; goto extract_sfmt_fbeqlr;
          case 31 : itype = FRVBF_INSN_FCBNELR; goto extract_sfmt_fcbeqlr;
          case 32 : itype = FRVBF_INSN_BRALR; goto extract_sfmt_bralr;
          case 33 : itype = FRVBF_INSN_BCRALR; goto extract_sfmt_bcralr;
          case 34 : itype = FRVBF_INSN_FBEQLR; goto extract_sfmt_fbeqlr;
          case 35 : itype = FRVBF_INSN_FCBEQLR; goto extract_sfmt_fcbeqlr;
          case 36 : itype = FRVBF_INSN_BNCLR; goto extract_sfmt_beqlr;
          case 37 : itype = FRVBF_INSN_BCNCLR; goto extract_sfmt_bceqlr;
          case 38 : itype = FRVBF_INSN_FBUELR; goto extract_sfmt_fbeqlr;
          case 39 : itype = FRVBF_INSN_FCBUELR; goto extract_sfmt_fcbeqlr;
          case 40 : itype = FRVBF_INSN_BNVLR; goto extract_sfmt_beqlr;
          case 41 : itype = FRVBF_INSN_BCNVLR; goto extract_sfmt_bceqlr;
          case 42 : itype = FRVBF_INSN_FBGELR; goto extract_sfmt_fbeqlr;
          case 43 : itype = FRVBF_INSN_FCBGELR; goto extract_sfmt_fcbeqlr;
          case 44 : itype = FRVBF_INSN_BGELR; goto extract_sfmt_beqlr;
          case 45 : itype = FRVBF_INSN_BCGELR; goto extract_sfmt_bceqlr;
          case 46 : itype = FRVBF_INSN_FBUGELR; goto extract_sfmt_fbeqlr;
          case 47 : itype = FRVBF_INSN_FCBUGELR; goto extract_sfmt_fcbeqlr;
          case 48 : itype = FRVBF_INSN_BNELR; goto extract_sfmt_beqlr;
          case 49 : itype = FRVBF_INSN_BCNELR; goto extract_sfmt_bceqlr;
          case 50 : itype = FRVBF_INSN_FBLELR; goto extract_sfmt_fbeqlr;
          case 51 : itype = FRVBF_INSN_FCBLELR; goto extract_sfmt_fcbeqlr;
          case 52 : itype = FRVBF_INSN_BHILR; goto extract_sfmt_beqlr;
          case 53 : itype = FRVBF_INSN_BCHILR; goto extract_sfmt_bceqlr;
          case 54 : itype = FRVBF_INSN_FBULELR; goto extract_sfmt_fbeqlr;
          case 55 : itype = FRVBF_INSN_FCBULELR; goto extract_sfmt_fcbeqlr;
          case 56 : itype = FRVBF_INSN_BPLR; goto extract_sfmt_beqlr;
          case 57 : itype = FRVBF_INSN_BCPLR; goto extract_sfmt_bceqlr;
          case 58 : itype = FRVBF_INSN_FBOLR; goto extract_sfmt_fbeqlr;
          case 59 : itype = FRVBF_INSN_FCBOLR; goto extract_sfmt_fcbeqlr;
          case 60 : itype = FRVBF_INSN_BGTLR; goto extract_sfmt_beqlr;
          case 61 : itype = FRVBF_INSN_BCGTLR; goto extract_sfmt_bceqlr;
          case 62 : itype = FRVBF_INSN_FBRALR; goto extract_sfmt_bralr;
          case 63 : itype = FRVBF_INSN_FCBRALR; goto extract_sfmt_bcralr;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 15 : itype = FRVBF_INSN_CALL; goto extract_sfmt_call;
      case 16 : itype = FRVBF_INSN_ADDI; goto extract_sfmt_addi;
      case 17 : itype = FRVBF_INSN_ADDICC; goto extract_sfmt_addicc;
      case 18 : itype = FRVBF_INSN_ADDXI; goto extract_sfmt_addxi;
      case 19 : itype = FRVBF_INSN_ADDXICC; goto extract_sfmt_addicc;
      case 20 : itype = FRVBF_INSN_SUBI; goto extract_sfmt_addi;
      case 21 : itype = FRVBF_INSN_SUBICC; goto extract_sfmt_addicc;
      case 22 : itype = FRVBF_INSN_SUBXI; goto extract_sfmt_addxi;
      case 23 : itype = FRVBF_INSN_SUBXICC; goto extract_sfmt_addicc;
      case 24 : itype = FRVBF_INSN_SMULI; goto extract_sfmt_smuli;
      case 25 : itype = FRVBF_INSN_SMULICC; goto extract_sfmt_smulicc;
      case 26 : itype = FRVBF_INSN_UMULI; goto extract_sfmt_smuli;
      case 27 : itype = FRVBF_INSN_UMULICC; goto extract_sfmt_smulicc;
      case 28 :
        {
          unsigned int val = (((insn >> 27) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_TINO; goto extract_sfmt_rei;
          case 1 : itype = FRVBF_INSN_TIC; goto extract_sfmt_tieq;
          case 2 : itype = FRVBF_INSN_TIV; goto extract_sfmt_tieq;
          case 3 : itype = FRVBF_INSN_TILT; goto extract_sfmt_tieq;
          case 4 : itype = FRVBF_INSN_TIEQ; goto extract_sfmt_tieq;
          case 5 : itype = FRVBF_INSN_TILS; goto extract_sfmt_tieq;
          case 6 : itype = FRVBF_INSN_TIN; goto extract_sfmt_tieq;
          case 7 : itype = FRVBF_INSN_TILE; goto extract_sfmt_tieq;
          case 8 : itype = FRVBF_INSN_TIRA; goto extract_sfmt_tira;
          case 9 : itype = FRVBF_INSN_TINC; goto extract_sfmt_tieq;
          case 10 : itype = FRVBF_INSN_TINV; goto extract_sfmt_tieq;
          case 11 : itype = FRVBF_INSN_TIGE; goto extract_sfmt_tieq;
          case 12 : itype = FRVBF_INSN_TINE; goto extract_sfmt_tieq;
          case 13 : itype = FRVBF_INSN_TIHI; goto extract_sfmt_tieq;
          case 14 : itype = FRVBF_INSN_TIP; goto extract_sfmt_tieq;
          case 15 : itype = FRVBF_INSN_TIGT; goto extract_sfmt_tieq;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 29 :
        {
          unsigned int val = (((insn >> 27) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_FTINO; goto extract_sfmt_rei;
          case 1 : itype = FRVBF_INSN_FTIU; goto extract_sfmt_ftine;
          case 2 : itype = FRVBF_INSN_FTIGT; goto extract_sfmt_ftine;
          case 3 : itype = FRVBF_INSN_FTIUG; goto extract_sfmt_ftine;
          case 4 : itype = FRVBF_INSN_FTILT; goto extract_sfmt_ftine;
          case 5 : itype = FRVBF_INSN_FTIUL; goto extract_sfmt_ftine;
          case 6 : itype = FRVBF_INSN_FTILG; goto extract_sfmt_ftine;
          case 7 : itype = FRVBF_INSN_FTINE; goto extract_sfmt_ftine;
          case 8 : itype = FRVBF_INSN_FTIEQ; goto extract_sfmt_ftine;
          case 9 : itype = FRVBF_INSN_FTIUE; goto extract_sfmt_ftine;
          case 10 : itype = FRVBF_INSN_FTIGE; goto extract_sfmt_ftine;
          case 11 : itype = FRVBF_INSN_FTIUGE; goto extract_sfmt_ftine;
          case 12 : itype = FRVBF_INSN_FTILE; goto extract_sfmt_ftine;
          case 13 : itype = FRVBF_INSN_FTIULE; goto extract_sfmt_ftine;
          case 14 : itype = FRVBF_INSN_FTIO; goto extract_sfmt_ftine;
          case 15 : itype = FRVBF_INSN_FTIRA; goto extract_sfmt_tira;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 30 : itype = FRVBF_INSN_SDIVI; goto extract_sfmt_sdivi;
      case 31 : itype = FRVBF_INSN_UDIVI; goto extract_sfmt_sdivi;
      case 32 : itype = FRVBF_INSN_ANDI; goto extract_sfmt_addi;
      case 33 : itype = FRVBF_INSN_ANDICC; goto extract_sfmt_andicc;
      case 34 : itype = FRVBF_INSN_ORI; goto extract_sfmt_addi;
      case 35 : itype = FRVBF_INSN_ORICC; goto extract_sfmt_andicc;
      case 36 : itype = FRVBF_INSN_XORI; goto extract_sfmt_addi;
      case 37 : itype = FRVBF_INSN_XORICC; goto extract_sfmt_andicc;
      case 40 : itype = FRVBF_INSN_SLLI; goto extract_sfmt_addi;
      case 41 : itype = FRVBF_INSN_SLLICC; goto extract_sfmt_addicc;
      case 42 : itype = FRVBF_INSN_SRLI; goto extract_sfmt_addi;
      case 43 : itype = FRVBF_INSN_SRLICC; goto extract_sfmt_addicc;
      case 44 : itype = FRVBF_INSN_SRAI; goto extract_sfmt_addi;
      case 45 : itype = FRVBF_INSN_SRAICC; goto extract_sfmt_addicc;
      case 46 : itype = FRVBF_INSN_NSDIVI; goto extract_sfmt_sdivi;
      case 47 : itype = FRVBF_INSN_NUDIVI; goto extract_sfmt_sdivi;
      case 48 : itype = FRVBF_INSN_LDSBI; goto extract_sfmt_ldsbi;
      case 49 : itype = FRVBF_INSN_LDSHI; goto extract_sfmt_ldsbi;
      case 50 : itype = FRVBF_INSN_LDI; goto extract_sfmt_ldsbi;
      case 51 : itype = FRVBF_INSN_LDDI; goto extract_sfmt_lddi;
      case 52 : itype = FRVBF_INSN_LDQI; goto extract_sfmt_ldqi;
      case 53 : itype = FRVBF_INSN_LDUBI; goto extract_sfmt_ldsbi;
      case 54 : itype = FRVBF_INSN_LDUHI; goto extract_sfmt_ldsbi;
      case 55 : itype = FRVBF_INSN_REI; goto extract_sfmt_rei;
      case 56 : itype = FRVBF_INSN_LDBFI; goto extract_sfmt_ldbfi;
      case 57 : itype = FRVBF_INSN_LDHFI; goto extract_sfmt_ldbfi;
      case 58 : itype = FRVBF_INSN_LDFI; goto extract_sfmt_ldbfi;
      case 59 : itype = FRVBF_INSN_LDDFI; goto extract_sfmt_lddfi;
      case 60 : itype = FRVBF_INSN_LDQFI; goto extract_sfmt_ldqfi;
      case 61 : itype = FRVBF_INSN_SETLO; goto extract_sfmt_setlo;
      case 62 : itype = FRVBF_INSN_SETHI; goto extract_sfmt_sethi;
      case 63 : itype = FRVBF_INSN_SETLOS; goto extract_sfmt_setlos;
      case 64 : itype = FRVBF_INSN_NLDSBI; goto extract_sfmt_nldsbi;
      case 65 : itype = FRVBF_INSN_NLDUBI; goto extract_sfmt_nldsbi;
      case 66 : itype = FRVBF_INSN_NLDSHI; goto extract_sfmt_nldsbi;
      case 67 : itype = FRVBF_INSN_NLDUHI; goto extract_sfmt_nldsbi;
      case 68 : itype = FRVBF_INSN_NLDI; goto extract_sfmt_nldsbi;
      case 69 : itype = FRVBF_INSN_NLDDI; goto extract_sfmt_nlddi;
      case 70 :
        {
          unsigned int val = (((insn >> 6) & (7 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_ADDSS; goto extract_sfmt_add;
          case 1 : itype = FRVBF_INSN_SUBSS; goto extract_sfmt_add;
          case 2 : itype = FRVBF_INSN_SLASS; goto extract_sfmt_add;
          case 4 : itype = FRVBF_INSN_SCUTSS; goto extract_sfmt_scutss;
          case 5 : itype = FRVBF_INSN_SMU; goto extract_sfmt_smu;
          case 6 : itype = FRVBF_INSN_SMASS; goto extract_sfmt_smass;
          case 7 : itype = FRVBF_INSN_SMSSS; goto extract_sfmt_smass;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 71 : itype = FRVBF_INSN_SCANI; goto extract_sfmt_addi;
      case 72 : itype = FRVBF_INSN_NLDBFI; goto extract_sfmt_nldbfi;
      case 73 : itype = FRVBF_INSN_NLDHFI; goto extract_sfmt_nldbfi;
      case 74 : itype = FRVBF_INSN_NLDFI; goto extract_sfmt_nldbfi;
      case 75 : itype = FRVBF_INSN_NLDDFI; goto extract_sfmt_nlddfi;
      case 76 : itype = FRVBF_INSN_NLDQFI; goto extract_sfmt_nldqfi;
      case 77 : itype = FRVBF_INSN_SWAPI; goto extract_sfmt_swapi;
      case 78 : itype = FRVBF_INSN_STBFI; goto extract_sfmt_stbfi;
      case 79 : itype = FRVBF_INSN_STHFI; goto extract_sfmt_stbfi;
      case 80 : itype = FRVBF_INSN_STBI; goto extract_sfmt_stbi;
      case 81 : itype = FRVBF_INSN_STHI; goto extract_sfmt_stbi;
      case 82 : itype = FRVBF_INSN_STI; goto extract_sfmt_stbi;
      case 83 : itype = FRVBF_INSN_STDI; goto extract_sfmt_stdi;
      case 84 : itype = FRVBF_INSN_STQI; goto extract_sfmt_ldqi;
      case 85 : itype = FRVBF_INSN_STFI; goto extract_sfmt_stbfi;
      case 86 : itype = FRVBF_INSN_STDFI; goto extract_sfmt_stdfi;
      case 87 : itype = FRVBF_INSN_STQFI; goto extract_sfmt_ldqfi;
      case 88 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CADD; goto extract_sfmt_cadd;
          case 1 : itype = FRVBF_INSN_CSUB; goto extract_sfmt_cadd;
          case 2 : itype = FRVBF_INSN_CSMUL; goto extract_sfmt_csmul;
          case 3 : itype = FRVBF_INSN_CSDIV; goto extract_sfmt_csdiv;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 89 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CADDCC; goto extract_sfmt_caddcc;
          case 1 : itype = FRVBF_INSN_CSUBCC; goto extract_sfmt_caddcc;
          case 2 : itype = FRVBF_INSN_CSMULCC; goto extract_sfmt_csmulcc;
          case 3 : itype = FRVBF_INSN_CUDIV; goto extract_sfmt_csdiv;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 90 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CAND; goto extract_sfmt_cadd;
          case 1 : itype = FRVBF_INSN_COR; goto extract_sfmt_cadd;
          case 2 : itype = FRVBF_INSN_CXOR; goto extract_sfmt_cadd;
          case 3 : itype = FRVBF_INSN_CNOT; goto extract_sfmt_cnot;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 91 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CANDCC; goto extract_sfmt_caddcc;
          case 1 : itype = FRVBF_INSN_CORCC; goto extract_sfmt_caddcc;
          case 2 : itype = FRVBF_INSN_CXORCC; goto extract_sfmt_caddcc;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 92 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CSLL; goto extract_sfmt_cadd;
          case 1 : itype = FRVBF_INSN_CSRL; goto extract_sfmt_cadd;
          case 2 : itype = FRVBF_INSN_CSRA; goto extract_sfmt_cadd;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 93 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CSLLCC; goto extract_sfmt_caddcc;
          case 1 : itype = FRVBF_INSN_CSRLCC; goto extract_sfmt_caddcc;
          case 2 : itype = FRVBF_INSN_CSRACC; goto extract_sfmt_caddcc;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 94 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CLDSB; goto extract_sfmt_cldsb;
          case 1 : itype = FRVBF_INSN_CLDUB; goto extract_sfmt_cldsb;
          case 2 : itype = FRVBF_INSN_CLDSH; goto extract_sfmt_cldsb;
          case 3 : itype = FRVBF_INSN_CLDUH; goto extract_sfmt_cldsb;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 95 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CLD; goto extract_sfmt_cldsb;
          case 1 : itype = FRVBF_INSN_CLDD; goto extract_sfmt_cldd;
          case 2 : itype = FRVBF_INSN_CLDQ; goto extract_sfmt_cldq;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 96 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CLDBF; goto extract_sfmt_cldbf;
          case 1 : itype = FRVBF_INSN_CLDHF; goto extract_sfmt_cldbf;
          case 2 : itype = FRVBF_INSN_CLDF; goto extract_sfmt_cldbf;
          case 3 : itype = FRVBF_INSN_CLDDF; goto extract_sfmt_clddf;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 97 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CLDSBU; goto extract_sfmt_cldsbu;
          case 1 : itype = FRVBF_INSN_CLDUBU; goto extract_sfmt_cldsbu;
          case 2 : itype = FRVBF_INSN_CLDSHU; goto extract_sfmt_cldsbu;
          case 3 : itype = FRVBF_INSN_CLDUHU; goto extract_sfmt_cldsbu;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 98 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CLDU; goto extract_sfmt_cldsbu;
          case 1 : itype = FRVBF_INSN_CLDDU; goto extract_sfmt_clddu;
          case 2 : itype = FRVBF_INSN_CLDQU; goto extract_sfmt_cldqu;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 99 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CLDBFU; goto extract_sfmt_cldbfu;
          case 1 : itype = FRVBF_INSN_CLDHFU; goto extract_sfmt_cldbfu;
          case 2 : itype = FRVBF_INSN_CLDFU; goto extract_sfmt_cldbfu;
          case 3 : itype = FRVBF_INSN_CLDDFU; goto extract_sfmt_clddfu;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 100 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CSTB; goto extract_sfmt_cstb;
          case 1 : itype = FRVBF_INSN_CSTH; goto extract_sfmt_cstb;
          case 2 : itype = FRVBF_INSN_CST; goto extract_sfmt_cstb;
          case 3 : itype = FRVBF_INSN_CSTD; goto extract_sfmt_cstd;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 101 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CSTQ; goto extract_sfmt_cldq;
          case 2 : itype = FRVBF_INSN_CSWAP; goto extract_sfmt_cswap;
          case 3 : itype = FRVBF_INSN_CSCAN; goto extract_sfmt_cadd;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 102 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CSTBF; goto extract_sfmt_cstbf;
          case 1 : itype = FRVBF_INSN_CSTHF; goto extract_sfmt_cstbf;
          case 2 : itype = FRVBF_INSN_CSTF; goto extract_sfmt_cstbf;
          case 3 : itype = FRVBF_INSN_CSTDF; goto extract_sfmt_cstdf;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 103 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CSTBU; goto extract_sfmt_cstbu;
          case 1 : itype = FRVBF_INSN_CSTHU; goto extract_sfmt_cstbu;
          case 2 : itype = FRVBF_INSN_CSTU; goto extract_sfmt_cstbu;
          case 3 : itype = FRVBF_INSN_CSTDU; goto extract_sfmt_cstdu;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 104 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CSTBFU; goto extract_sfmt_cstbfu;
          case 1 : itype = FRVBF_INSN_CSTHFU; goto extract_sfmt_cstbfu;
          case 2 : itype = FRVBF_INSN_CSTFU; goto extract_sfmt_cstbfu;
          case 3 : itype = FRVBF_INSN_CSTDFU; goto extract_sfmt_cstdfu;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 105 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMOVGF; goto extract_sfmt_cmovgf;
          case 1 : itype = FRVBF_INSN_CMOVGFD; goto extract_sfmt_cmovgfd;
          case 2 : itype = FRVBF_INSN_CMOVFG; goto extract_sfmt_cmovfg;
          case 3 : itype = FRVBF_INSN_CMOVFGD; goto extract_sfmt_cmovfgd;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 106 :
        {
          unsigned int val = (((insn >> 26) & (15 << 1)) | ((insn >> 6) & (1 << 0)));
          switch (val)
          {
          case 0 :
            {
              unsigned int val = (((insn >> 24) & (1 << 1)) | ((insn >> 7) & (1 << 0)));
              switch (val)
              {
              case 0 : /* fall through */
              case 2 : itype = FRVBF_INSN_CCKNO; goto extract_sfmt_cckra;
              case 1 : itype = FRVBF_INSN_CJMPL; goto extract_sfmt_cjmpl;
              case 3 : itype = FRVBF_INSN_CCALLL; goto extract_sfmt_cjmpl;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 1 : itype = FRVBF_INSN_CFCKNO; goto extract_sfmt_cfckra;
          case 2 : itype = FRVBF_INSN_CCKC; goto extract_sfmt_cckeq;
          case 3 : itype = FRVBF_INSN_CFCKU; goto extract_sfmt_cfckne;
          case 4 : itype = FRVBF_INSN_CCKV; goto extract_sfmt_cckeq;
          case 5 : itype = FRVBF_INSN_CFCKGT; goto extract_sfmt_cfckne;
          case 6 : itype = FRVBF_INSN_CCKLT; goto extract_sfmt_cckeq;
          case 7 : itype = FRVBF_INSN_CFCKUG; goto extract_sfmt_cfckne;
          case 8 : itype = FRVBF_INSN_CCKEQ; goto extract_sfmt_cckeq;
          case 9 : itype = FRVBF_INSN_CFCKLT; goto extract_sfmt_cfckne;
          case 10 : itype = FRVBF_INSN_CCKLS; goto extract_sfmt_cckeq;
          case 11 : itype = FRVBF_INSN_CFCKUL; goto extract_sfmt_cfckne;
          case 12 : itype = FRVBF_INSN_CCKN; goto extract_sfmt_cckeq;
          case 13 : itype = FRVBF_INSN_CFCKLG; goto extract_sfmt_cfckne;
          case 14 : itype = FRVBF_INSN_CCKLE; goto extract_sfmt_cckeq;
          case 15 : itype = FRVBF_INSN_CFCKNE; goto extract_sfmt_cfckne;
          case 16 : itype = FRVBF_INSN_CCKRA; goto extract_sfmt_cckra;
          case 17 : itype = FRVBF_INSN_CFCKEQ; goto extract_sfmt_cfckne;
          case 18 : itype = FRVBF_INSN_CCKNC; goto extract_sfmt_cckeq;
          case 19 : itype = FRVBF_INSN_CFCKUE; goto extract_sfmt_cfckne;
          case 20 : itype = FRVBF_INSN_CCKNV; goto extract_sfmt_cckeq;
          case 21 : itype = FRVBF_INSN_CFCKGE; goto extract_sfmt_cfckne;
          case 22 : itype = FRVBF_INSN_CCKGE; goto extract_sfmt_cckeq;
          case 23 : itype = FRVBF_INSN_CFCKUGE; goto extract_sfmt_cfckne;
          case 24 : itype = FRVBF_INSN_CCKNE; goto extract_sfmt_cckeq;
          case 25 : itype = FRVBF_INSN_CFCKLE; goto extract_sfmt_cfckne;
          case 26 : itype = FRVBF_INSN_CCKHI; goto extract_sfmt_cckeq;
          case 27 : itype = FRVBF_INSN_CFCKULE; goto extract_sfmt_cfckne;
          case 28 : itype = FRVBF_INSN_CCKP; goto extract_sfmt_cckeq;
          case 29 : itype = FRVBF_INSN_CFCKO; goto extract_sfmt_cfckne;
          case 30 : itype = FRVBF_INSN_CCKGT; goto extract_sfmt_cckeq;
          case 31 : itype = FRVBF_INSN_CFCKRA; goto extract_sfmt_cfckra;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 107 :
        {
          unsigned int val = (((insn >> 6) & (1 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CFITOS; goto extract_sfmt_cfitos;
          case 1 : itype = FRVBF_INSN_CFSTOI; goto extract_sfmt_cfstoi;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 108 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CFMOVS; goto extract_sfmt_cfmovs;
          case 1 : itype = FRVBF_INSN_CFNEGS; goto extract_sfmt_cfmovs;
          case 2 : itype = FRVBF_INSN_CFABSS; goto extract_sfmt_cfmovs;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 109 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CFADDS; goto extract_sfmt_cfadds;
          case 1 : itype = FRVBF_INSN_CFSUBS; goto extract_sfmt_cfadds;
          case 2 : itype = FRVBF_INSN_CFCMPS; goto extract_sfmt_cfcmps;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 110 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CFMULS; goto extract_sfmt_cfadds;
          case 1 : itype = FRVBF_INSN_CFDIVS; goto extract_sfmt_cfadds;
          case 2 : itype = FRVBF_INSN_CFSQRTS; goto extract_sfmt_cfmovs;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 111 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CFMADDS; goto extract_sfmt_cfmadds;
          case 1 : itype = FRVBF_INSN_CFMSUBS; goto extract_sfmt_cfmadds;
          case 2 : itype = FRVBF_INSN_CFMAS; goto extract_sfmt_cfmas;
          case 3 : itype = FRVBF_INSN_CFMSS; goto extract_sfmt_cfmas;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 112 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMAND; goto extract_sfmt_cmand;
          case 1 : itype = FRVBF_INSN_CMOR; goto extract_sfmt_cmand;
          case 2 : itype = FRVBF_INSN_CMXOR; goto extract_sfmt_cmand;
          case 3 : itype = FRVBF_INSN_CMNOT; goto extract_sfmt_cmnot;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 113 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMADDHSS; goto extract_sfmt_cmaddhss;
          case 1 : itype = FRVBF_INSN_CMADDHUS; goto extract_sfmt_cmaddhss;
          case 2 : itype = FRVBF_INSN_CMSUBHSS; goto extract_sfmt_cmaddhss;
          case 3 : itype = FRVBF_INSN_CMSUBHUS; goto extract_sfmt_cmaddhss;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 114 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMMULHS; goto extract_sfmt_cmmulhs;
          case 1 : itype = FRVBF_INSN_CMMULHU; goto extract_sfmt_cmmulhs;
          case 2 : itype = FRVBF_INSN_CMMACHS; goto extract_sfmt_cmmachs;
          case 3 : itype = FRVBF_INSN_CMMACHU; goto extract_sfmt_cmmachu;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 115 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMQADDHSS; goto extract_sfmt_cmqaddhss;
          case 1 : itype = FRVBF_INSN_CMQADDHUS; goto extract_sfmt_cmqaddhss;
          case 2 : itype = FRVBF_INSN_CMQSUBHSS; goto extract_sfmt_cmqaddhss;
          case 3 : itype = FRVBF_INSN_CMQSUBHUS; goto extract_sfmt_cmqaddhss;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 116 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMQMULHS; goto extract_sfmt_cmqmulhs;
          case 1 : itype = FRVBF_INSN_CMQMULHU; goto extract_sfmt_cmqmulhs;
          case 2 : itype = FRVBF_INSN_CMQMACHS; goto extract_sfmt_cmqmachs;
          case 3 : itype = FRVBF_INSN_CMQMACHU; goto extract_sfmt_cmqmachu;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 117 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMCPXRS; goto extract_sfmt_cmcpxrs;
          case 1 : itype = FRVBF_INSN_CMCPXRU; goto extract_sfmt_cmcpxrs;
          case 2 : itype = FRVBF_INSN_CMCPXIS; goto extract_sfmt_cmcpxrs;
          case 3 : itype = FRVBF_INSN_CMCPXIU; goto extract_sfmt_cmcpxrs;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 118 :
        {
          unsigned int val = (((insn >> 6) & (1 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMEXPDHW; goto extract_sfmt_cmexpdhw;
          case 1 : itype = FRVBF_INSN_CMEXPDHD; goto extract_sfmt_cmexpdhd;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 119 :
        {
          unsigned int val = (((insn >> 6) & (3 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_CMBTOH; goto extract_sfmt_cmbtoh;
          case 1 : itype = FRVBF_INSN_CMHTOB; goto extract_sfmt_cmhtob;
          case 2 : itype = FRVBF_INSN_CMBTOHE; goto extract_sfmt_cmbtohe;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 120 :
        {
          unsigned int val = (((insn >> 6) & (63 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_MQXMACHS; goto extract_sfmt_mqmachs;
          case 1 : itype = FRVBF_INSN_MQXMACXHS; goto extract_sfmt_mqmachs;
          case 2 : itype = FRVBF_INSN_MQMACXHS; goto extract_sfmt_mqmachs;
          case 4 : itype = FRVBF_INSN_MADDACCS; goto extract_sfmt_maddaccs;
          case 5 : itype = FRVBF_INSN_MSUBACCS; goto extract_sfmt_maddaccs;
          case 6 : itype = FRVBF_INSN_MDADDACCS; goto extract_sfmt_mdaddaccs;
          case 7 : itype = FRVBF_INSN_MDSUBACCS; goto extract_sfmt_mdaddaccs;
          case 8 : itype = FRVBF_INSN_MASACCS; goto extract_sfmt_masaccs;
          case 9 : itype = FRVBF_INSN_MDASACCS; goto extract_sfmt_mdasaccs;
          case 10 : itype = FRVBF_INSN_MABSHS; goto extract_sfmt_mabshs;
          case 11 : itype = FRVBF_INSN_MDROTLI; goto extract_sfmt_mdrotli;
          case 12 : itype = FRVBF_INSN_MCPLHI; goto extract_sfmt_mcplhi;
          case 13 : itype = FRVBF_INSN_MCPLI; goto extract_sfmt_mcpli;
          case 14 : itype = FRVBF_INSN_MDCUTSSI; goto extract_sfmt_mdcutssi;
          case 15 : itype = FRVBF_INSN_MQSATHS; goto extract_sfmt_mqsaths;
          case 16 : itype = FRVBF_INSN_MQLCLRHS; goto extract_sfmt_mqsaths;
          case 17 : itype = FRVBF_INSN_MQSLLHI; goto extract_sfmt_mqsllhi;
          case 19 : itype = FRVBF_INSN_MQSRAHI; goto extract_sfmt_mqsllhi;
          case 20 : itype = FRVBF_INSN_MQLMTHS; goto extract_sfmt_mqsaths;
          case 32 : itype = FRVBF_INSN_MHSETLOS; goto extract_sfmt_mhsetlos;
          case 33 : itype = FRVBF_INSN_MHSETLOH; goto extract_sfmt_mhsetloh;
          case 34 : itype = FRVBF_INSN_MHSETHIS; goto extract_sfmt_mhsethis;
          case 35 : itype = FRVBF_INSN_MHSETHIH; goto extract_sfmt_mhsethih;
          case 36 : itype = FRVBF_INSN_MHDSETS; goto extract_sfmt_mhdsets;
          case 37 : itype = FRVBF_INSN_MHDSETH; goto extract_sfmt_mhdseth;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 121 :
        {
          unsigned int val = (((insn >> 7) & (1 << 3)) | ((insn >> 6) & (7 << 0)));
          switch (val)
          {
          case 0 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FITOS; goto extract_sfmt_fitos;
              case 1 : itype = FRVBF_INSN_FMULS; goto extract_sfmt_fadds;
              case 2 : itype = FRVBF_INSN_NFITOS; goto extract_sfmt_nfitos;
              case 3 : itype = FRVBF_INSN_NFMULS; goto extract_sfmt_nfadds;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 1 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FSTOI; goto extract_sfmt_fstoi;
              case 1 : itype = FRVBF_INSN_FDIVS; goto extract_sfmt_fadds;
              case 2 : itype = FRVBF_INSN_NFSTOI; goto extract_sfmt_nfstoi;
              case 3 : itype = FRVBF_INSN_NFDIVS; goto extract_sfmt_nfadds;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 2 :
            {
              unsigned int val = (((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FMOVS; goto extract_sfmt_fmovs;
              case 1 : itype = FRVBF_INSN_FCMPS; goto extract_sfmt_fcmps;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 3 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FNEGS; goto extract_sfmt_fmovs;
              case 1 : itype = FRVBF_INSN_FMADDS; goto extract_sfmt_fmadds;
              case 3 : itype = FRVBF_INSN_NFMADDS; goto extract_sfmt_nfmadds;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 4 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FABSS; goto extract_sfmt_fmovs;
              case 1 : itype = FRVBF_INSN_FMSUBS; goto extract_sfmt_fmadds;
              case 3 : itype = FRVBF_INSN_NFMSUBS; goto extract_sfmt_nfmadds;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 5 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FSQRTS; goto extract_sfmt_fmovs;
              case 1 : itype = FRVBF_INSN_FNOP; goto extract_sfmt_rei;
              case 2 : itype = FRVBF_INSN_NFSQRTS; goto extract_sfmt_nfsqrts;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 6 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FADDS; goto extract_sfmt_fadds;
              case 1 : itype = FRVBF_INSN_FMAS; goto extract_sfmt_fmas;
              case 2 : itype = FRVBF_INSN_NFADDS; goto extract_sfmt_nfadds;
              case 3 : itype = FRVBF_INSN_NFMAS; goto extract_sfmt_fmas;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 7 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FSUBS; goto extract_sfmt_fadds;
              case 1 : itype = FRVBF_INSN_FMSS; goto extract_sfmt_fmas;
              case 2 : itype = FRVBF_INSN_NFSUBS; goto extract_sfmt_nfadds;
              case 3 : itype = FRVBF_INSN_NFMSS; goto extract_sfmt_fmas;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 8 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FDITOS; goto extract_sfmt_fditos;
              case 1 : itype = FRVBF_INSN_FDMULS; goto extract_sfmt_fmas;
              case 2 : itype = FRVBF_INSN_NFDITOS; goto extract_sfmt_fditos;
              case 3 : itype = FRVBF_INSN_NFDMULS; goto extract_sfmt_fmas;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 9 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FDSTOI; goto extract_sfmt_fdstoi;
              case 1 : itype = FRVBF_INSN_FDDIVS; goto extract_sfmt_fmas;
              case 2 : itype = FRVBF_INSN_NFDSTOI; goto extract_sfmt_fdstoi;
              case 3 : itype = FRVBF_INSN_NFDDIVS; goto extract_sfmt_fmas;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 10 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FDMOVS; goto extract_sfmt_fdmovs;
              case 1 : itype = FRVBF_INSN_FDCMPS; goto extract_sfmt_fdcmps;
              case 3 : itype = FRVBF_INSN_NFDCMPS; goto extract_sfmt_nfdcmps;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 11 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FDNEGS; goto extract_sfmt_fdmovs;
              case 1 : itype = FRVBF_INSN_FDMADDS; goto extract_sfmt_fdmadds;
              case 3 : itype = FRVBF_INSN_NFDMADDS; goto extract_sfmt_fdmadds;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 12 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FDABSS; goto extract_sfmt_fdmovs;
              case 1 : itype = FRVBF_INSN_FDMAS; goto extract_sfmt_fdmas;
              case 3 : itype = FRVBF_INSN_NFDMAS; goto extract_sfmt_fdmas;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 13 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FDSQRTS; goto extract_sfmt_fdmovs;
              case 1 : itype = FRVBF_INSN_FDMSS; goto extract_sfmt_fdmas;
              case 2 : itype = FRVBF_INSN_NFDSQRTS; goto extract_sfmt_fdmovs;
              case 3 : itype = FRVBF_INSN_NFDMSS; goto extract_sfmt_fdmas;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 14 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FDADDS; goto extract_sfmt_fmas;
              case 1 : itype = FRVBF_INSN_FDSADS; goto extract_sfmt_fmas;
              case 2 : itype = FRVBF_INSN_NFDADDS; goto extract_sfmt_fmas;
              case 3 : itype = FRVBF_INSN_NFDSADS; goto extract_sfmt_fmas;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 15 :
            {
              unsigned int val = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_FDSUBS; goto extract_sfmt_fmas;
              case 1 : itype = FRVBF_INSN_FDMULCS; goto extract_sfmt_fmas;
              case 2 : itype = FRVBF_INSN_NFDSUBS; goto extract_sfmt_fmas;
              case 3 : itype = FRVBF_INSN_NFDMULCS; goto extract_sfmt_fmas;
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 122 :
        {
          unsigned int val = (((insn >> 6) & (15 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_FITOD; goto extract_sfmt_fitod;
          case 1 : itype = FRVBF_INSN_FDTOI; goto extract_sfmt_fdtoi;
          case 2 : itype = FRVBF_INSN_FMOVD; goto extract_sfmt_fmovd;
          case 3 : itype = FRVBF_INSN_FNEGD; goto extract_sfmt_fmovd;
          case 4 : itype = FRVBF_INSN_FABSD; goto extract_sfmt_fmovd;
          case 5 : itype = FRVBF_INSN_FSQRTD; goto extract_sfmt_fmovd;
          case 6 : itype = FRVBF_INSN_FADDD; goto extract_sfmt_faddd;
          case 7 : itype = FRVBF_INSN_FSUBD; goto extract_sfmt_faddd;
          case 8 : itype = FRVBF_INSN_FMULD; goto extract_sfmt_faddd;
          case 9 : itype = FRVBF_INSN_FDIVD; goto extract_sfmt_faddd;
          case 10 : itype = FRVBF_INSN_FCMPD; goto extract_sfmt_fcmpd;
          case 11 : itype = FRVBF_INSN_FMADDD; goto extract_sfmt_fmaddd;
          case 12 : itype = FRVBF_INSN_FMSUBD; goto extract_sfmt_fmaddd;
          case 14 : itype = FRVBF_INSN_FMAD; goto extract_sfmt_fmas;
          case 15 : itype = FRVBF_INSN_FMSD; goto extract_sfmt_fmas;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 123 :
        {
          unsigned int val = (((insn >> 6) & (63 << 0)));
          switch (val)
          {
          case 0 : itype = FRVBF_INSN_MAND; goto extract_sfmt_mand;
          case 1 : itype = FRVBF_INSN_MOR; goto extract_sfmt_mand;
          case 2 : itype = FRVBF_INSN_MXOR; goto extract_sfmt_mand;
          case 3 : itype = FRVBF_INSN_MNOT; goto extract_sfmt_mnot;
          case 4 : itype = FRVBF_INSN_MROTLI; goto extract_sfmt_mrotli;
          case 5 : itype = FRVBF_INSN_MROTRI; goto extract_sfmt_mrotli;
          case 6 : itype = FRVBF_INSN_MWCUT; goto extract_sfmt_mwcut;
          case 7 : itype = FRVBF_INSN_MWCUTI; goto extract_sfmt_mwcuti;
          case 8 : itype = FRVBF_INSN_MAVEH; goto extract_sfmt_mand;
          case 9 : itype = FRVBF_INSN_MSLLHI; goto extract_sfmt_msllhi;
          case 10 : itype = FRVBF_INSN_MSRLHI; goto extract_sfmt_msllhi;
          case 11 : itype = FRVBF_INSN_MSRAHI; goto extract_sfmt_msllhi;
          case 12 : itype = FRVBF_INSN_MSATHS; goto extract_sfmt_msaths;
          case 13 : itype = FRVBF_INSN_MSATHU; goto extract_sfmt_msaths;
          case 14 : itype = FRVBF_INSN_MCMPSH; goto extract_sfmt_mcmpsh;
          case 15 : itype = FRVBF_INSN_MCMPUH; goto extract_sfmt_mcmpsh;
          case 16 : itype = FRVBF_INSN_MADDHSS; goto extract_sfmt_msaths;
          case 17 : itype = FRVBF_INSN_MADDHUS; goto extract_sfmt_msaths;
          case 18 : itype = FRVBF_INSN_MSUBHSS; goto extract_sfmt_msaths;
          case 19 : itype = FRVBF_INSN_MSUBHUS; goto extract_sfmt_msaths;
          case 20 : itype = FRVBF_INSN_MMULHS; goto extract_sfmt_mmulhs;
          case 21 : itype = FRVBF_INSN_MMULHU; goto extract_sfmt_mmulhs;
          case 22 : itype = FRVBF_INSN_MMACHS; goto extract_sfmt_mmachs;
          case 23 : itype = FRVBF_INSN_MMACHU; goto extract_sfmt_mmachu;
          case 24 : itype = FRVBF_INSN_MQADDHSS; goto extract_sfmt_mqsaths;
          case 25 : itype = FRVBF_INSN_MQADDHUS; goto extract_sfmt_mqsaths;
          case 26 : itype = FRVBF_INSN_MQSUBHSS; goto extract_sfmt_mqsaths;
          case 27 : itype = FRVBF_INSN_MQSUBHUS; goto extract_sfmt_mqsaths;
          case 28 : itype = FRVBF_INSN_MQMULHS; goto extract_sfmt_mqmulhs;
          case 29 : itype = FRVBF_INSN_MQMULHU; goto extract_sfmt_mqmulhs;
          case 30 : itype = FRVBF_INSN_MQMACHS; goto extract_sfmt_mqmachs;
          case 31 : itype = FRVBF_INSN_MQMACHU; goto extract_sfmt_mqmachu;
          case 32 : itype = FRVBF_INSN_MCPXRS; goto extract_sfmt_mcpxrs;
          case 33 : itype = FRVBF_INSN_MCPXRU; goto extract_sfmt_mcpxrs;
          case 34 : itype = FRVBF_INSN_MCPXIS; goto extract_sfmt_mcpxrs;
          case 35 : itype = FRVBF_INSN_MCPXIU; goto extract_sfmt_mcpxrs;
          case 36 : itype = FRVBF_INSN_MQCPXRS; goto extract_sfmt_mqcpxrs;
          case 37 : itype = FRVBF_INSN_MQCPXRU; goto extract_sfmt_mqcpxrs;
          case 38 : itype = FRVBF_INSN_MQCPXIS; goto extract_sfmt_mqcpxrs;
          case 39 : itype = FRVBF_INSN_MQCPXIU; goto extract_sfmt_mqcpxrs;
          case 40 : itype = FRVBF_INSN_MMULXHS; goto extract_sfmt_mmulhs;
          case 41 : itype = FRVBF_INSN_MMULXHU; goto extract_sfmt_mmulhs;
          case 42 : itype = FRVBF_INSN_MQMULXHS; goto extract_sfmt_mqmulhs;
          case 43 : itype = FRVBF_INSN_MQMULXHU; goto extract_sfmt_mqmulhs;
          case 44 : itype = FRVBF_INSN_MCUT; goto extract_sfmt_mcut;
          case 45 : itype = FRVBF_INSN_MCUTSS; goto extract_sfmt_mcut;
          case 46 : itype = FRVBF_INSN_MCUTI; goto extract_sfmt_mcuti;
          case 47 : itype = FRVBF_INSN_MCUTSSI; goto extract_sfmt_mcuti;
          case 48 : itype = FRVBF_INSN_MMRDHS; goto extract_sfmt_mmachs;
          case 49 : itype = FRVBF_INSN_MMRDHU; goto extract_sfmt_mmachu;
          case 50 : itype = FRVBF_INSN_MEXPDHW; goto extract_sfmt_mexpdhw;
          case 51 : itype = FRVBF_INSN_MEXPDHD; goto extract_sfmt_mexpdhd;
          case 52 : itype = FRVBF_INSN_MPACKH; goto extract_sfmt_mpackh;
          case 53 : itype = FRVBF_INSN_MUNPACKH; goto extract_sfmt_munpackh;
          case 54 : itype = FRVBF_INSN_MDPACKH; goto extract_sfmt_mdpackh;
          case 55 : itype = FRVBF_INSN_MDUNPACKH; goto extract_sfmt_mdunpackh;
          case 56 : itype = FRVBF_INSN_MBTOH; goto extract_sfmt_mbtoh;
          case 57 : itype = FRVBF_INSN_MHTOB; goto extract_sfmt_mhtob;
          case 58 : itype = FRVBF_INSN_MBTOHE; goto extract_sfmt_mbtohe;
          case 59 :
            {
              unsigned int val = (((insn >> 17) & (1 << 0)));
              switch (val)
              {
              case 0 : itype = FRVBF_INSN_MCLRACC_0; goto extract_sfmt_mclracc_0;
              case 1 :
                {
                  unsigned int val = (((insn >> 25) & (63 << 0)));
                  switch (val)
                  {
                  case 0 : /* fall through */
                  case 1 : /* fall through */
                  case 2 : /* fall through */
                  case 3 : /* fall through */
                  case 4 : /* fall through */
                  case 5 : /* fall through */
                  case 6 : /* fall through */
                  case 7 : /* fall through */
                  case 8 : /* fall through */
                  case 9 : /* fall through */
                  case 10 : /* fall through */
                  case 11 : /* fall through */
                  case 12 : /* fall through */
                  case 13 : /* fall through */
                  case 14 : /* fall through */
                  case 15 : /* fall through */
                  case 16 : /* fall through */
                  case 17 : /* fall through */
                  case 18 : /* fall through */
                  case 19 : /* fall through */
                  case 20 : /* fall through */
                  case 21 : /* fall through */
                  case 22 : /* fall through */
                  case 23 : /* fall through */
                  case 24 : /* fall through */
                  case 25 : /* fall through */
                  case 26 : /* fall through */
                  case 27 : /* fall through */
                  case 28 : /* fall through */
                  case 29 : /* fall through */
                  case 30 : /* fall through */
                  case 31 : /* fall through */
                  case 32 : /* fall through */
                  case 33 : /* fall through */
                  case 34 : /* fall through */
                  case 35 : /* fall through */
                  case 36 : /* fall through */
                  case 37 : /* fall through */
                  case 38 : /* fall through */
                  case 39 : /* fall through */
                  case 40 : /* fall through */
                  case 41 : /* fall through */
                  case 42 : /* fall through */
                  case 43 : /* fall through */
                  case 44 : /* fall through */
                  case 45 : /* fall through */
                  case 46 : /* fall through */
                  case 47 : /* fall through */
                  case 48 : /* fall through */
                  case 49 : /* fall through */
                  case 50 : /* fall through */
                  case 51 : /* fall through */
                  case 52 : /* fall through */
                  case 53 : /* fall through */
                  case 54 : /* fall through */
                  case 55 : /* fall through */
                  case 56 : /* fall through */
                  case 57 : /* fall through */
                  case 58 : /* fall through */
                  case 59 : /* fall through */
                  case 60 : /* fall through */
                  case 61 : /* fall through */
                  case 62 : itype = FRVBF_INSN_MCLRACC_1; goto extract_sfmt_mclracc_0;
                  case 63 : itype = FRVBF_INSN_MNOP; goto extract_sfmt_rei;
                  default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
                  }
                }
              default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 60 : itype = FRVBF_INSN_MRDACC; goto extract_sfmt_mrdacc;
          case 61 : itype = FRVBF_INSN_MWTACC; goto extract_sfmt_mwtacc;
          case 62 : itype = FRVBF_INSN_MRDACCG; goto extract_sfmt_mrdaccg;
          case 63 : itype = FRVBF_INSN_MWTACCG; goto extract_sfmt_mwtaccg;
          default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 124 : itype = FRVBF_INSN_MCOP1; goto extract_sfmt_rei;
      case 125 : itype = FRVBF_INSN_MCOP2; goto extract_sfmt_rei;
      case 126 : itype = FRVBF_INSN_COP1; goto extract_sfmt_rei;
      case 127 : itype = FRVBF_INSN_COP2; goto extract_sfmt_rei;
      default : itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      }
    }
  }

  /* The instruction has been decoded, now extract the fields.  */

 extract_sfmt_empty:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
#define FLD(f) abuf->fields.fmt_empty.f


  /* Record the fields for the semantic handler.  */
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0));

#undef FLD
    return idesc;
  }

 extract_sfmt_add:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_not:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_scutss.f
    UINT f_GRk;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_not", "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_sdiv:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sdiv", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_smul:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smulcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_smul", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRdoublek) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_smu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smass.f
    UINT f_GRi;
    UINT f_GRj;

    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_smu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_h_iacc0_DI_0) = 0;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_smass:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smass.f
    UINT f_GRi;
    UINT f_GRj;

    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_smass", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_h_iacc0_DI_0) = 0;
      FLD (out_h_iacc0_DI_0) = 0;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_scutss:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_scutss.f
    UINT f_GRk;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_scutss", "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRj) = f_GRj;
      FLD (in_h_iacc0_DI_0) = 0;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cadd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cadd", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cnot:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cnot", "f_CCi 0x%x", 'x', f_CCi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_csmul:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_csmul", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRdoublek) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_csdiv:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_csdiv", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_addcc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_ICCi_1;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_ICCi_1) = f_ICCi_1;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addcc", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_ICCi_1 0x%x", 'x', f_ICCi_1, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_ICCi_1) = f_ICCi_1;
      FLD (out_GRk) = f_GRk;
      FLD (out_ICCi_1) = f_ICCi_1;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_andcc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_ICCi_1;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_ICCi_1) = f_ICCi_1;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_andcc", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_ICCi_1 0x%x", 'x', f_ICCi_1, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_ICCi_1) = f_ICCi_1;
      FLD (out_GRk) = f_GRk;
      FLD (out_ICCi_1) = f_ICCi_1;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_smulcc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smulcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_ICCi_1;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_ICCi_1) = f_ICCi_1;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_smulcc", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_ICCi_1 0x%x", 'x', f_ICCi_1, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_ICCi_1) = f_ICCi_1;
      FLD (out_GRdoublek) = f_GRk;
      FLD (out_ICCi_1) = f_ICCi_1;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_caddcc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_caddcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_caddcc", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_h_iccr_UQI_and__DFLT_index_of__DFLT_CCi_3) = ((FLD (f_CCi)) & (3));
      FLD (out_GRk) = f_GRk;
      FLD (out_h_iccr_UQI_and__DFLT_index_of__DFLT_CCi_3) = ((FLD (f_CCi)) & (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_csmulcc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_csmulcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_csmulcc", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_h_iccr_UQI_and__DFLT_index_of__DFLT_CCi_3) = ((FLD (f_CCi)) & (3));
      FLD (out_GRdoublek) = f_GRk;
      FLD (out_h_iccr_UQI_and__DFLT_index_of__DFLT_CCi_3) = ((FLD (f_CCi)) & (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_addx:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_ICCi_1;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_ICCi_1) = f_ICCi_1;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addx", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_ICCi_1 0x%x", 'x', f_ICCi_1, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_ICCi_1) = f_ICCi_1;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_addi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_swapi.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_sdivi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_swapi.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRk) = f_GRk;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sdivi", "f_GRi 0x%x", 'x', f_GRi, "f_GRk 0x%x", 'x', f_GRk, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_smuli:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smuli.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_smuli", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_GRdoublek) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_addicc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addicc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_ICCi_1;
    INT f_s10;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_s10 = EXTRACT_LSB0_INT (insn, 32, 9, 10);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_ICCi_1) = f_ICCi_1;
  FLD (f_s10) = f_s10;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addicc", "f_GRi 0x%x", 'x', f_GRi, "f_ICCi_1 0x%x", 'x', f_ICCi_1, "f_s10 0x%x", 'x', f_s10, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_ICCi_1) = f_ICCi_1;
      FLD (out_GRk) = f_GRk;
      FLD (out_ICCi_1) = f_ICCi_1;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_andicc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addicc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_ICCi_1;
    INT f_s10;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_s10 = EXTRACT_LSB0_INT (insn, 32, 9, 10);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_ICCi_1) = f_ICCi_1;
  FLD (f_s10) = f_s10;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_andicc", "f_GRi 0x%x", 'x', f_GRi, "f_ICCi_1 0x%x", 'x', f_ICCi_1, "f_s10 0x%x", 'x', f_s10, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_ICCi_1) = f_ICCi_1;
      FLD (out_GRk) = f_GRk;
      FLD (out_ICCi_1) = f_ICCi_1;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_smulicc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smulicc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_ICCi_1;
    INT f_s10;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_s10 = EXTRACT_LSB0_INT (insn, 32, 9, 10);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_ICCi_1) = f_ICCi_1;
  FLD (f_s10) = f_s10;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_smulicc", "f_GRi 0x%x", 'x', f_GRi, "f_ICCi_1 0x%x", 'x', f_ICCi_1, "f_s10 0x%x", 'x', f_s10, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_ICCi_1) = f_ICCi_1;
      FLD (out_GRdoublek) = f_GRk;
      FLD (out_ICCi_1) = f_ICCi_1;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_addxi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addicc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_ICCi_1;
    INT f_s10;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_s10 = EXTRACT_LSB0_INT (insn, 32, 9, 10);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_ICCi_1) = f_ICCi_1;
  FLD (f_s10) = f_s10;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addxi", "f_GRi 0x%x", 'x', f_GRi, "f_ICCi_1 0x%x", 'x', f_ICCi_1, "f_s10 0x%x", 'x', f_s10, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_ICCi_1) = f_ICCi_1;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmpb:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smulcc.f
    UINT f_GRi;
    UINT f_ICCi_1;
    UINT f_GRj;

    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_ICCi_1 = EXTRACT_LSB0_UINT (insn, 32, 11, 2);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_ICCi_1) = f_ICCi_1;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpb", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_ICCi_1 0x%x", 'x', f_ICCi_1, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_ICCi_1) = f_ICCi_1;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_setlo:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_setlo.f
    UINT f_GRk;
    UINT f_u16;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_u16 = EXTRACT_LSB0_UINT (insn, 32, 15, 16);

  /* Record the fields for the semantic handler.  */
  FLD (f_u16) = f_u16;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setlo", "f_u16 0x%x", 'x', f_u16, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (out_GRklo) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_sethi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_sethi.f
    UINT f_GRk;
    UINT f_u16;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_u16 = EXTRACT_LSB0_UINT (insn, 32, 15, 16);

  /* Record the fields for the semantic handler.  */
  FLD (f_u16) = f_u16;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sethi", "f_u16 0x%x", 'x', f_u16, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (out_GRkhi) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_setlos:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_setlos.f
    UINT f_GRk;
    INT f_s16;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_s16 = EXTRACT_LSB0_INT (insn, 32, 15, 16);

  /* Record the fields for the semantic handler.  */
  FLD (f_s16) = f_s16;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setlos", "f_s16 0x%x", 'x', f_s16, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldsb:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldsb", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldbf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldbf", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_ldcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_CPRk) = f_CPRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldc", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_CPRk 0x%x", 'x', f_CPRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_CPRk) = f_CPRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldsb:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_addcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldsb", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldbf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldbf", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smulcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldd", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRdoublek) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_lddf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddf", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_lddc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_lddcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_CPRk) = f_CPRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddc", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_CPRk 0x%x", 'x', f_CPRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_CPRdoublek) = f_CPRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smulcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldd", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRdoublek) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nlddf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nlddf", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smulcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldq", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldqf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldqf", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldqc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_CPRk) = f_CPRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldqc", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_CPRk 0x%x", 'x', f_CPRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smulcc.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldq", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldqf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldqf", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldsbu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldsbu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldsbu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldsbu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldsbu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldsbu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldbfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldbfu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldcu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_ldcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_CPRk) = f_CPRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldcu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_CPRk 0x%x", 'x', f_CPRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_CPRk) = f_CPRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldbfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldbfu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_lddu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRdoublek) = f_GRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nlddu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nlddu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRdoublek) = f_GRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_lddfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddfu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRdoublek) = f_FRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_lddcu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_lddcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_CPRk) = f_CPRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddcu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_CPRk 0x%x", 'x', f_CPRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_CPRdoublek) = f_CPRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nlddfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nlddfu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRdoublek) = f_FRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldqu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldqu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldqu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldqu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldqfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldqfu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldqcu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_CPRk) = f_CPRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldqcu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_CPRk 0x%x", 'x', f_CPRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldqfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldqfu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldsbi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_swapi.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldsbi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldbfi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_ldbfi.f
    UINT f_FRk;
    UINT f_GRi;
    INT f_d12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldbfi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldsbi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_swapi.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldsbi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldbfi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_ldbfi.f
    UINT f_FRk;
    UINT f_GRi;
    INT f_d12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldbfi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_lddi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smuli.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_GRdoublek) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_lddfi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_lddfi.f
    UINT f_FRk;
    UINT f_GRi;
    INT f_d12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddfi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nlddi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_smuli.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nlddi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_GRdoublek) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nlddfi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_lddfi.f
    UINT f_FRk;
    UINT f_GRi;
    INT f_d12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nlddfi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldqi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdi.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldqi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ldqfi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdfi.f
    UINT f_FRk;
    UINT f_GRi;
    INT f_d12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldqfi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nldqfi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdfi.f
    UINT f_FRk;
    UINT f_GRi;
    INT f_d12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nldqfi", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stb:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stb", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stbf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stbf", "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintk) = f_FRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CPRk) = f_CPRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stc", "f_CPRk 0x%x", 'x', f_CPRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CPRk) = f_CPRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_std:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRk) = f_GRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_std", "f_GRk 0x%x", 'x', f_GRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRdoublek) = f_GRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stdf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdf", "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRdoublek) = f_FRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stdc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CPRk) = f_CPRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdc", "f_CPRk 0x%x", 'x', f_CPRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CPRdoublek) = f_CPRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stbu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstbu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stbu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_GRk) = f_GRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stbfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stbfu", "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintk) = f_FRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stcu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CPRk) = f_CPRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stcu", "f_CPRk 0x%x", 'x', f_CPRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CPRk) = f_CPRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stdu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRk) = f_GRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdu", "f_GRk 0x%x", 'x', f_GRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRdoublek) = f_GRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stdfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdfu", "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRdoublek) = f_FRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stdcu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdcu.f
    UINT f_CPRk;
    UINT f_GRi;
    UINT f_GRj;

    f_CPRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CPRk) = f_CPRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdcu", "f_CPRk 0x%x", 'x', f_CPRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CPRdoublek) = f_CPRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stqu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stqu", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cldsb:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cldsb", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cldbf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cldbf", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cldd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cldd", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRdoublek) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_clddf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clddf", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cldq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cldq", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cldsbu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldsbu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cldsbu", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cldbfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cldbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cldbfu", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_clddu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clddu", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRdoublek) = f_GRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_clddfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_clddfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clddfu", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRdoublek) = f_FRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cldqu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cldqu", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cstb:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cstb", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cstbf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cstbf", "f_CCi 0x%x", 'x', f_CCi, "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintk) = f_FRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cstd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRk) = f_GRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cstd", "f_CCi 0x%x", 'x', f_CCi, "f_GRk 0x%x", 'x', f_GRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRdoublek) = f_GRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cstdf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cstdf", "f_CCi 0x%x", 'x', f_CCi, "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRdoublek) = f_FRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cstbu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstbu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cstbu", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_GRk) = f_GRk;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cstbfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstbfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cstbfu", "f_CCi 0x%x", 'x', f_CCi, "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintk) = f_FRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cstdu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdu.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRk) = f_GRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cstdu", "f_CCi 0x%x", 'x', f_CCi, "f_GRk 0x%x", 'x', f_GRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRdoublek) = f_GRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cstdfu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cstdfu.f
    UINT f_FRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cstdfu", "f_CCi 0x%x", 'x', f_CCi, "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRdoublek) = f_FRk;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stbi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_swapi.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRk) = f_GRk;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stbi", "f_GRi 0x%x", 'x', f_GRi, "f_GRk 0x%x", 'x', f_GRk, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stbfi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stbfi.f
    UINT f_FRk;
    UINT f_GRi;
    INT f_d12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stbfi", "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintk) = f_FRk;
      FLD (in_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stdi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdi.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRk) = f_GRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdi", "f_GRk 0x%x", 'x', f_GRk, "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRdoublek) = f_GRk;
      FLD (in_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_stdfi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_stdfi.f
    UINT f_FRk;
    UINT f_GRi;
    INT f_d12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdfi", "f_FRk 0x%x", 'x', f_FRk, "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRdoublek) = f_FRk;
      FLD (in_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_swap:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_swap", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_GRk) = f_GRk;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_swapi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_swapi.f
    UINT f_GRk;
    UINT f_GRi;
    INT f_d12;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRk) = f_GRk;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_swapi", "f_GRi 0x%x", 'x', f_GRi, "f_GRk 0x%x", 'x', f_GRk, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRk) = f_GRk;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cswap:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cswap.f
    UINT f_GRk;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_GRk) = f_GRk;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cswap", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_GRk 0x%x", 'x', f_GRk, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_GRk) = f_GRk;
      FLD (out_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movgf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmovgfd.f
    UINT f_FRk;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movgf", "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRj) = f_GRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movfg:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmovfgd.f
    UINT f_FRk;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movfg", "f_FRk 0x%x", 'x', f_FRk, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintk) = f_FRk;
      FLD (out_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movgfd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmovgfd.f
    UINT f_FRk;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movgfd", "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRj) = f_GRj;
      FLD (in_h_gr_USI_add__DFLT_index_of__DFLT_GRj_1) = ((FLD (f_GRj)) + (1));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movfgd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmovfgd.f
    UINT f_FRk;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movfgd", "f_FRk 0x%x", 'x', f_FRk, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_GRj) = f_GRj;
      FLD (out_h_gr_USI_add__DFLT_index_of__DFLT_GRj_1) = ((FLD (f_GRj)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movgfq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_movgfq.f
    UINT f_FRk;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRj) = f_GRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movgfq", "f_GRj 0x%x", 'x', f_GRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRj) = f_GRj;
      FLD (in_h_gr_USI_add__DFLT_index_of__DFLT_GRj_1) = ((FLD (f_GRj)) + (1));
      FLD (in_h_gr_USI_add__DFLT_index_of__DFLT_GRj_2) = ((FLD (f_GRj)) + (2));
      FLD (in_h_gr_USI_add__DFLT_index_of__DFLT_GRj_3) = ((FLD (f_GRj)) + (3));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_3) = ((FLD (f_FRk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movfgq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_movfgq.f
    UINT f_FRk;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movfgq", "f_FRk 0x%x", 'x', f_FRk, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_3) = ((FLD (f_FRk)) + (3));
      FLD (out_GRj) = f_GRj;
      FLD (out_h_gr_USI_add__DFLT_index_of__DFLT_GRj_1) = ((FLD (f_GRj)) + (1));
      FLD (out_h_gr_USI_add__DFLT_index_of__DFLT_GRj_2) = ((FLD (f_GRj)) + (2));
      FLD (out_h_gr_USI_add__DFLT_index_of__DFLT_GRj_3) = ((FLD (f_GRj)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmovgf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmovgfd.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmovgf", "f_CCi 0x%x", 'x', f_CCi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRj) = f_GRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmovfg:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmovfgd.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRk) = f_FRk;
  FLD (f_cond) = f_cond;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmovfg", "f_CCi 0x%x", 'x', f_CCi, "f_FRk 0x%x", 'x', f_FRk, "f_cond 0x%x", 'x', f_cond, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintk) = f_FRk;
      FLD (out_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmovgfd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmovgfd.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRj) = f_GRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmovgfd", "f_CCi 0x%x", 'x', f_CCi, "f_GRj 0x%x", 'x', f_GRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRj) = f_GRj;
      FLD (in_h_gr_USI_add__DFLT_index_of__DFLT_GRj_1) = ((FLD (f_GRj)) + (1));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmovfgd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmovfgd.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRk) = f_FRk;
  FLD (f_cond) = f_cond;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmovfgd", "f_CCi 0x%x", 'x', f_CCi, "f_FRk 0x%x", 'x', f_FRk, "f_cond 0x%x", 'x', f_cond, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_GRj) = f_GRj;
      FLD (out_h_gr_USI_add__DFLT_index_of__DFLT_GRj_1) = ((FLD (f_GRj)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movgs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_movgs.f
    UINT f_spr_h;
    UINT f_spr_l;
    UINT f_GRj;
    UINT f_spr;

    f_spr_h = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_spr_l = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);
{
  f_spr = ((((f_spr_h) << (6))) | (f_spr_l));
}

  /* Record the fields for the semantic handler.  */
  FLD (f_GRj) = f_GRj;
  FLD (f_spr) = f_spr;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movgs", "f_GRj 0x%x", 'x', f_GRj, "f_spr 0x%x", 'x', f_spr, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRj) = f_GRj;
      FLD (out_spr) = f_spr;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movsg:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_movsg.f
    UINT f_spr_h;
    UINT f_spr_l;
    UINT f_GRj;
    UINT f_spr;

    f_spr_h = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_spr_l = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);
{
  f_spr = ((((f_spr_h) << (6))) | (f_spr_l));
}

  /* Record the fields for the semantic handler.  */
  FLD (f_spr) = f_spr;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movsg", "f_spr 0x%x", 'x', f_spr, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_spr) = f_spr;
      FLD (out_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_bra:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fbne.f
    UINT f_hint;
    SI f_label16;

    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);
    f_label16 = ((((EXTRACT_LSB0_INT (insn, 32, 15, 16)) << (2))) + (pc));

  /* Record the fields for the semantic handler.  */
  FLD (f_hint) = f_hint;
  FLD (i_label16) = f_label16;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bra", "f_hint 0x%x", 'x', f_hint, "label16 0x%x", 'x', f_label16, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_bno:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fbne.f
    UINT f_hint;
    SI f_label16;

    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);
    f_label16 = ((((EXTRACT_LSB0_INT (insn, 32, 15, 16)) << (2))) + (pc));

  /* Record the fields for the semantic handler.  */
  FLD (f_hint) = f_hint;
  FLD (i_label16) = f_label16;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bno", "f_hint 0x%x", 'x', f_hint, "label16 0x%x", 'x', f_label16, (char *) 0));

#undef FLD
    return idesc;
  }

 extract_sfmt_beq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_beq.f
    UINT f_ICCi_2;
    UINT f_hint;
    SI f_label16;

    f_ICCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);
    f_label16 = ((((EXTRACT_LSB0_INT (insn, 32, 15, 16)) << (2))) + (pc));

  /* Record the fields for the semantic handler.  */
  FLD (f_ICCi_2) = f_ICCi_2;
  FLD (f_hint) = f_hint;
  FLD (i_label16) = f_label16;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beq", "f_ICCi_2 0x%x", 'x', f_ICCi_2, "f_hint 0x%x", 'x', f_hint, "label16 0x%x", 'x', f_label16, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ICCi_2) = f_ICCi_2;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fbne:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fbne.f
    UINT f_FCCi_2;
    UINT f_hint;
    SI f_label16;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);
    f_label16 = ((((EXTRACT_LSB0_INT (insn, 32, 15, 16)) << (2))) + (pc));

  /* Record the fields for the semantic handler.  */
  FLD (f_FCCi_2) = f_FCCi_2;
  FLD (f_hint) = f_hint;
  FLD (i_label16) = f_label16;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fbne", "f_FCCi_2 0x%x", 'x', f_FCCi_2, "f_hint 0x%x", 'x', f_hint, "label16 0x%x", 'x', f_label16, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FCCi_2) = f_FCCi_2;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_bctrlr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fcbeqlr.f
    UINT f_hint;
    UINT f_ccond;

    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);
    f_ccond = EXTRACT_LSB0_UINT (insn, 32, 12, 1);

  /* Record the fields for the semantic handler.  */
  FLD (f_ccond) = f_ccond;
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bctrlr", "f_ccond 0x%x", 'x', f_ccond, "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_h_spr_USI_272) = 272;
      FLD (in_h_spr_USI_273) = 273;
      FLD (out_h_spr_USI_273) = 273;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_bralr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fcbeqlr.f
    UINT f_hint;

    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bralr", "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_h_spr_USI_272) = 272;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_bnolr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fcbeqlr.f
    UINT f_hint;

    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bnolr", "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_h_spr_USI_272) = 272;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_beqlr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_bceqlr.f
    UINT f_ICCi_2;
    UINT f_hint;

    f_ICCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_ICCi_2) = f_ICCi_2;
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_beqlr", "f_ICCi_2 0x%x", 'x', f_ICCi_2, "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ICCi_2) = f_ICCi_2;
      FLD (in_h_spr_USI_272) = 272;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fbeqlr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fcbeqlr.f
    UINT f_FCCi_2;
    UINT f_hint;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_FCCi_2) = f_FCCi_2;
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fbeqlr", "f_FCCi_2 0x%x", 'x', f_FCCi_2, "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FCCi_2) = f_FCCi_2;
      FLD (in_h_spr_USI_272) = 272;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_bcralr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fcbeqlr.f
    UINT f_hint;
    UINT f_ccond;

    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);
    f_ccond = EXTRACT_LSB0_UINT (insn, 32, 12, 1);

  /* Record the fields for the semantic handler.  */
  FLD (f_ccond) = f_ccond;
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcralr", "f_ccond 0x%x", 'x', f_ccond, "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_h_spr_USI_272) = 272;
      FLD (in_h_spr_USI_273) = 273;
      FLD (out_h_spr_USI_273) = 273;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_bcnolr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fcbeqlr.f
    UINT f_hint;

    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcnolr", "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_h_spr_USI_272) = 272;
      FLD (in_h_spr_USI_273) = 273;
      FLD (out_h_spr_USI_273) = 273;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_bceqlr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_bceqlr.f
    UINT f_ICCi_2;
    UINT f_hint;
    UINT f_ccond;

    f_ICCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);
    f_ccond = EXTRACT_LSB0_UINT (insn, 32, 12, 1);

  /* Record the fields for the semantic handler.  */
  FLD (f_ICCi_2) = f_ICCi_2;
  FLD (f_ccond) = f_ccond;
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bceqlr", "f_ICCi_2 0x%x", 'x', f_ICCi_2, "f_ccond 0x%x", 'x', f_ccond, "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ICCi_2) = f_ICCi_2;
      FLD (in_h_spr_USI_272) = 272;
      FLD (in_h_spr_USI_273) = 273;
      FLD (out_h_spr_USI_273) = 273;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fcbeqlr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fcbeqlr.f
    UINT f_FCCi_2;
    UINT f_hint;
    UINT f_ccond;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_hint = EXTRACT_LSB0_UINT (insn, 32, 17, 2);
    f_ccond = EXTRACT_LSB0_UINT (insn, 32, 12, 1);

  /* Record the fields for the semantic handler.  */
  FLD (f_FCCi_2) = f_FCCi_2;
  FLD (f_ccond) = f_ccond;
  FLD (f_hint) = f_hint;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fcbeqlr", "f_FCCi_2 0x%x", 'x', f_FCCi_2, "f_ccond 0x%x", 'x', f_ccond, "f_hint 0x%x", 'x', f_hint, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FCCi_2) = f_FCCi_2;
      FLD (in_h_spr_USI_272) = 272;
      FLD (in_h_spr_USI_273) = 273;
      FLD (out_h_spr_USI_273) = 273;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_jmpl:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cjmpl.f
    UINT f_LI;
    UINT f_GRi;
    UINT f_GRj;

    f_LI = EXTRACT_LSB0_UINT (insn, 32, 25, 1);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_LI) = f_LI;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jmpl", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_LI 0x%x", 'x', f_LI, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_jmpil:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_jmpil.f
    UINT f_LI;
    UINT f_GRi;
    INT f_d12;

    f_LI = EXTRACT_LSB0_UINT (insn, 32, 25, 1);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_LI) = f_LI;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jmpil", "f_GRi 0x%x", 'x', f_GRi, "f_LI 0x%x", 'x', f_LI, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_call:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_call.f
    INT f_labelH6;
    UINT f_labelL18;
    INT f_label24;

    f_labelH6 = EXTRACT_LSB0_INT (insn, 32, 30, 6);
    f_labelL18 = EXTRACT_LSB0_UINT (insn, 32, 17, 18);
{
  f_label24 = ((((((((f_labelH6) << (18))) | (f_labelL18))) << (2))) + (pc));
}

  /* Record the fields for the semantic handler.  */
  FLD (i_label24) = f_label24;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_call", "label24 0x%x", 'x', f_label24, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_rett:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_rett.f
    UINT f_debug;

    f_debug = EXTRACT_LSB0_UINT (insn, 32, 25, 1);

  /* Record the fields for the semantic handler.  */
  FLD (f_debug) = f_debug;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rett", "f_debug 0x%x", 'x', f_debug, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_rei:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
#define FLD(f) abuf->fields.fmt_empty.f


  /* Record the fields for the semantic handler.  */
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rei", (char *) 0));

#undef FLD
    return idesc;
  }

 extract_sfmt_tra:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_ftne.f
    UINT f_GRi;
    UINT f_GRj;

    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_tra", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_h_spr_USI_1) = 1;
      FLD (out_h_spr_USI_768) = 768;
      FLD (out_h_spr_USI_769) = 769;
      FLD (out_h_spr_USI_770) = 770;
      FLD (out_h_spr_USI_771) = 771;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_teq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_teq.f
    UINT f_ICCi_2;
    UINT f_GRi;
    UINT f_GRj;

    f_ICCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_ICCi_2) = f_ICCi_2;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_teq", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_ICCi_2 0x%x", 'x', f_ICCi_2, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (in_ICCi_2) = f_ICCi_2;
      FLD (out_h_spr_USI_1) = 1;
      FLD (out_h_spr_USI_768) = 768;
      FLD (out_h_spr_USI_769) = 769;
      FLD (out_h_spr_USI_770) = 770;
      FLD (out_h_spr_USI_771) = 771;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ftne:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_ftne.f
    UINT f_FCCi_2;
    UINT f_GRi;
    UINT f_GRj;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FCCi_2) = f_FCCi_2;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ftne", "f_FCCi_2 0x%x", 'x', f_FCCi_2, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FCCi_2) = f_FCCi_2;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
      FLD (out_h_spr_USI_1) = 1;
      FLD (out_h_spr_USI_768) = 768;
      FLD (out_h_spr_USI_769) = 769;
      FLD (out_h_spr_USI_770) = 770;
      FLD (out_h_spr_USI_771) = 771;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_tira:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_ftine.f
    UINT f_GRi;
    INT f_d12;

    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_tira", "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (out_h_spr_USI_1) = 1;
      FLD (out_h_spr_USI_768) = 768;
      FLD (out_h_spr_USI_769) = 769;
      FLD (out_h_spr_USI_770) = 770;
      FLD (out_h_spr_USI_771) = 771;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_tieq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_tieq.f
    UINT f_ICCi_2;
    UINT f_GRi;
    INT f_d12;

    f_ICCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_ICCi_2) = f_ICCi_2;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_tieq", "f_GRi 0x%x", 'x', f_GRi, "f_ICCi_2 0x%x", 'x', f_ICCi_2, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_ICCi_2) = f_ICCi_2;
      FLD (out_h_spr_USI_1) = 1;
      FLD (out_h_spr_USI_768) = 768;
      FLD (out_h_spr_USI_769) = 769;
      FLD (out_h_spr_USI_770) = 770;
      FLD (out_h_spr_USI_771) = 771;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ftine:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_ftine.f
    UINT f_FCCi_2;
    UINT f_GRi;
    INT f_d12;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_d12 = EXTRACT_LSB0_INT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_FCCi_2) = f_FCCi_2;
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ftine", "f_FCCi_2 0x%x", 'x', f_FCCi_2, "f_GRi 0x%x", 'x', f_GRi, "f_d12 0x%x", 'x', f_d12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FCCi_2) = f_FCCi_2;
      FLD (in_GRi) = f_GRi;
      FLD (out_h_spr_USI_1) = 1;
      FLD (out_h_spr_USI_768) = 768;
      FLD (out_h_spr_USI_769) = 769;
      FLD (out_h_spr_USI_770) = 770;
      FLD (out_h_spr_USI_771) = 771;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_break:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
#define FLD(f) abuf->fields.sfmt_break.f


  /* Record the fields for the semantic handler.  */
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_break", (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (out_h_spr_USI_2) = 2;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_andcr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_andcr.f
    UINT f_CRk;
    UINT f_CRi;
    UINT f_CRj;

    f_CRk = EXTRACT_LSB0_UINT (insn, 32, 27, 3);
    f_CRi = EXTRACT_LSB0_UINT (insn, 32, 14, 3);
    f_CRj = EXTRACT_LSB0_UINT (insn, 32, 2, 3);

  /* Record the fields for the semantic handler.  */
  FLD (f_CRi) = f_CRi;
  FLD (f_CRj) = f_CRj;
  FLD (f_CRk) = f_CRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_andcr", "f_CRi 0x%x", 'x', f_CRi, "f_CRj 0x%x", 'x', f_CRj, "f_CRk 0x%x", 'x', f_CRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CRi) = f_CRi;
      FLD (in_CRj) = f_CRj;
      FLD (out_CRk) = f_CRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_notcr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_andcr.f
    UINT f_CRk;
    UINT f_CRj;

    f_CRk = EXTRACT_LSB0_UINT (insn, 32, 27, 3);
    f_CRj = EXTRACT_LSB0_UINT (insn, 32, 2, 3);

  /* Record the fields for the semantic handler.  */
  FLD (f_CRj) = f_CRj;
  FLD (f_CRk) = f_CRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_notcr", "f_CRj 0x%x", 'x', f_CRj, "f_CRk 0x%x", 'x', f_CRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CRj) = f_CRj;
      FLD (out_CRk) = f_CRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ckra:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cckeq.f
    SI f_CRj_int;

    f_CRj_int = ((EXTRACT_LSB0_UINT (insn, 32, 26, 2)) + (4));

  /* Record the fields for the semantic handler.  */
  FLD (f_CRj_int) = f_CRj_int;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ckra", "f_CRj_int 0x%x", 'x', f_CRj_int, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (out_CRj_int) = f_CRj_int;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ckeq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cckeq.f
    SI f_CRj_int;
    UINT f_ICCi_3;

    f_CRj_int = ((EXTRACT_LSB0_UINT (insn, 32, 26, 2)) + (4));
    f_ICCi_3 = EXTRACT_LSB0_UINT (insn, 32, 1, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_ICCi_3) = f_ICCi_3;
  FLD (f_CRj_int) = f_CRj_int;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ckeq", "f_ICCi_3 0x%x", 'x', f_ICCi_3, "f_CRj_int 0x%x", 'x', f_CRj_int, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ICCi_3) = f_ICCi_3;
      FLD (out_CRj_int) = f_CRj_int;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fckra:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfckne.f
    UINT f_CRj_float;

    f_CRj_float = EXTRACT_LSB0_UINT (insn, 32, 26, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_CRj_float) = f_CRj_float;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fckra", "f_CRj_float 0x%x", 'x', f_CRj_float, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (out_CRj_float) = f_CRj_float;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fckne:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfckne.f
    UINT f_CRj_float;
    UINT f_FCCi_3;

    f_CRj_float = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_FCCi_3 = EXTRACT_LSB0_UINT (insn, 32, 1, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_FCCi_3) = f_FCCi_3;
  FLD (f_CRj_float) = f_CRj_float;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fckne", "f_FCCi_3 0x%x", 'x', f_FCCi_3, "f_CRj_float 0x%x", 'x', f_CRj_float, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FCCi_3) = f_FCCi_3;
      FLD (out_CRj_float) = f_CRj_float;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cckra:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cckeq.f
    SI f_CRj_int;
    UINT f_CCi;
    UINT f_cond;

    f_CRj_int = ((EXTRACT_LSB0_UINT (insn, 32, 26, 2)) + (4));
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_cond) = f_cond;
  FLD (f_CRj_int) = f_CRj_int;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cckra", "f_CCi 0x%x", 'x', f_CCi, "f_cond 0x%x", 'x', f_cond, "f_CRj_int 0x%x", 'x', f_CRj_int, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (out_CRj_int) = f_CRj_int;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cckeq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cckeq.f
    SI f_CRj_int;
    UINT f_CCi;
    UINT f_cond;
    UINT f_ICCi_3;

    f_CRj_int = ((EXTRACT_LSB0_UINT (insn, 32, 26, 2)) + (4));
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_ICCi_3 = EXTRACT_LSB0_UINT (insn, 32, 1, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_ICCi_3) = f_ICCi_3;
  FLD (f_cond) = f_cond;
  FLD (f_CRj_int) = f_CRj_int;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cckeq", "f_CCi 0x%x", 'x', f_CCi, "f_ICCi_3 0x%x", 'x', f_ICCi_3, "f_cond 0x%x", 'x', f_cond, "f_CRj_int 0x%x", 'x', f_CRj_int, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_ICCi_3) = f_ICCi_3;
      FLD (out_CRj_int) = f_CRj_int;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfckra:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfckne.f
    UINT f_CRj_float;
    UINT f_CCi;
    UINT f_cond;

    f_CRj_float = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_cond) = f_cond;
  FLD (f_CRj_float) = f_CRj_float;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfckra", "f_CCi 0x%x", 'x', f_CCi, "f_cond 0x%x", 'x', f_cond, "f_CRj_float 0x%x", 'x', f_CRj_float, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (out_CRj_float) = f_CRj_float;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfckne:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfckne.f
    UINT f_CRj_float;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FCCi_3;

    f_CRj_float = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FCCi_3 = EXTRACT_LSB0_UINT (insn, 32, 1, 2);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FCCi_3) = f_FCCi_3;
  FLD (f_cond) = f_cond;
  FLD (f_CRj_float) = f_CRj_float;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfckne", "f_CCi 0x%x", 'x', f_CCi, "f_FCCi_3 0x%x", 'x', f_FCCi_3, "f_cond 0x%x", 'x', f_cond, "f_CRj_float 0x%x", 'x', f_CRj_float, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FCCi_3) = f_FCCi_3;
      FLD (out_CRj_float) = f_CRj_float;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cjmpl:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cjmpl.f
    UINT f_LI;
    UINT f_GRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_GRj;

    f_LI = EXTRACT_LSB0_UINT (insn, 32, 25, 1);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_LI) = f_LI;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cjmpl", "f_CCi 0x%x", 'x', f_CCi, "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_LI 0x%x", 'x', f_LI, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_ici:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_icpl.f
    UINT f_GRi;
    UINT f_GRj;

    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ici", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_icei:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_icei.f
    UINT f_ae;
    UINT f_GRi;
    UINT f_GRj;

    f_ae = EXTRACT_LSB0_UINT (insn, 32, 25, 1);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_ae) = f_ae;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_icei", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_ae 0x%x", 'x', f_ae, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_icpl:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_icpl.f
    UINT f_lock;
    UINT f_GRi;
    UINT f_GRj;

    f_lock = EXTRACT_LSB0_UINT (insn, 32, 25, 1);
    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_GRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_GRj) = f_GRj;
  FLD (f_lock) = f_lock;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_icpl", "f_GRi 0x%x", 'x', f_GRi, "f_GRj 0x%x", 'x', f_GRj, "f_lock 0x%x", 'x', f_lock, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
      FLD (in_GRj) = f_GRj;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_icul:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_jmpil.f
    UINT f_GRi;

    f_GRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_icul", "f_GRi 0x%x", 'x', f_GRi, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRi) = f_GRi;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_clrgr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_swapi.f
    UINT f_GRk;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrgr", "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_GRk) = f_GRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_clrfr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_clrfr", "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_commitgr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_setlos.f
    UINT f_GRk;

    f_GRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRk) = f_GRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_commitgr", "f_GRk 0x%x", 'x', f_GRk, (char *) 0));

#undef FLD
    return idesc;
  }

 extract_sfmt_commitfr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mhsethis.f
    UINT f_FRk;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_commitfr", "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#undef FLD
    return idesc;
  }

 extract_sfmt_fitos:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fditos.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fitos", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fstoi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fdstoi.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fstoi", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fitod:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fitod.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fitod", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fdtoi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fdtoi.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fdtoi", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRdoublej) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fditos:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fditos.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fditos", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__DFLT_index_of__DFLT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fdstoi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fdstoi.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fdstoi", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRj) = f_FRj;
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfitos:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfitos.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfitos", "f_CCi 0x%x", 'x', f_CCi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfstoi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfstoi.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfstoi", "f_CCi 0x%x", 'x', f_CCi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nfitos:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fditos.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nfitos", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nfstoi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fdstoi.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nfstoi", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fmovs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fmovs", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fmovd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fmaddd.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fmovd", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRdoublej) = f_FRj;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fdmovs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fdmadds.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fdmovs", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRj) = f_FRj;
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__DFLT_index_of__DFLT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfmovs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfmovs", "f_CCi 0x%x", 'x', f_CCi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nfsqrts:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nfsqrts", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fadds:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fadds", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_faddd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fmaddd.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_faddd", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRdoublei) = f_FRi;
      FLD (in_FRdoublej) = f_FRj;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfadds:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfadds", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nfadds:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nfadds", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fcmps:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfcmps.f
    UINT f_FCCi_2;
    UINT f_FRi;
    UINT f_FRj;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FCCi_2) = f_FCCi_2;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fcmps", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FCCi_2 0x%x", 'x', f_FCCi_2, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (out_FCCi_2) = f_FCCi_2;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fcmpd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fcmpd.f
    UINT f_FCCi_2;
    UINT f_FRi;
    UINT f_FRj;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FCCi_2) = f_FCCi_2;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fcmpd", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FCCi_2 0x%x", 'x', f_FCCi_2, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRdoublei) = f_FRi;
      FLD (in_FRdoublej) = f_FRj;
      FLD (out_FCCi_2) = f_FCCi_2;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfcmps:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfcmps.f
    UINT f_FCCi_2;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FCCi_2) = f_FCCi_2;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfcmps", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FCCi_2 0x%x", 'x', f_FCCi_2, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (out_FCCi_2) = f_FCCi_2;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fdcmps:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_nfdcmps.f
    UINT f_FCCi_2;
    UINT f_FRi;
    UINT f_FRj;

    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FCCi_2) = f_FCCi_2;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fdcmps", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FCCi_2 0x%x", 'x', f_FCCi_2, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FCCi_2) = f_FCCi_2;
      FLD (out_h_fccr_UQI_add__DFLT_index_of__DFLT_FCCi_2_1) = ((FLD (f_FCCi_2)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fmadds:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fmadds", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_FRk) = f_FRk;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fmaddd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fmaddd.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fmaddd", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRdoublei) = f_FRi;
      FLD (in_FRdoublej) = f_FRj;
      FLD (in_FRdoublek) = f_FRk;
      FLD (out_FRdoublek) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fdmadds:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fdmadds.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fdmadds", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_FRk) = f_FRk;
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__DFLT_index_of__DFLT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfmadds:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfmadds", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_FRk) = f_FRk;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nfmadds:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmadds.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nfmadds", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_FRk) = f_FRk;
      FLD (out_FRk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fmas:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fdmadds.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fmas", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__DFLT_index_of__DFLT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fdmas:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_fdmas.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fdmas", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRi_2) = ((FLD (f_FRi)) + (2));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRi_3) = ((FLD (f_FRi)) + (3));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_2) = ((FLD (f_FRj)) + (2));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_3) = ((FLD (f_FRj)) + (3));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__DFLT_index_of__DFLT_FRk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_SF_add__DFLT_index_of__DFLT_FRk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_SF_add__DFLT_index_of__DFLT_FRk_3) = ((FLD (f_FRk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfmas:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cfmas.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cfmas", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__DFLT_index_of__DFLT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nfdcmps:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_nfdcmps.f
    UINT f_FRk;
    UINT f_FCCi_2;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FCCi_2 = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FCCi_2) = f_FCCi_2;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_nfdcmps", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FCCi_2 0x%x", 'x', f_FCCi_2, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRi) = f_FRi;
      FLD (in_FRj) = f_FRj;
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__DFLT_index_of__DFLT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FCCi_2) = f_FCCi_2;
      FLD (out_h_fccr_UQI_add__DFLT_index_of__DFLT_FCCi_2_1) = ((FLD (f_FCCi_2)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhsetlos:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mhsetlos.f
    UINT f_FRk;
    INT f_u12_h;
    UINT f_u12_l;
    INT f_u12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_u12_h = EXTRACT_LSB0_INT (insn, 32, 17, 6);
    f_u12_l = EXTRACT_LSB0_UINT (insn, 32, 5, 6);
{
  f_u12 = ((((f_u12_h) << (6))) | (f_u12_l));
}

  /* Record the fields for the semantic handler.  */
  FLD (f_u12) = f_u12;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mhsetlos", "f_u12 0x%x", 'x', f_u12, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (out_FRklo) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhsethis:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mhsethis.f
    UINT f_FRk;
    INT f_u12_h;
    UINT f_u12_l;
    INT f_u12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_u12_h = EXTRACT_LSB0_INT (insn, 32, 17, 6);
    f_u12_l = EXTRACT_LSB0_UINT (insn, 32, 5, 6);
{
  f_u12 = ((((f_u12_h) << (6))) | (f_u12_l));
}

  /* Record the fields for the semantic handler.  */
  FLD (f_u12) = f_u12;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mhsethis", "f_u12 0x%x", 'x', f_u12, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (out_FRkhi) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhdsets:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mhdsets.f
    UINT f_FRk;
    INT f_u12_h;
    UINT f_u12_l;
    INT f_u12;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_u12_h = EXTRACT_LSB0_INT (insn, 32, 17, 6);
    f_u12_l = EXTRACT_LSB0_UINT (insn, 32, 5, 6);
{
  f_u12 = ((((f_u12_h) << (6))) | (f_u12_l));
}

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_u12) = f_u12;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mhdsets", "f_FRk 0x%x", 'x', f_FRk, "f_u12 0x%x", 'x', f_u12, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintk) = f_FRk;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhsetloh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mhsetloh.f
    UINT f_FRk;
    INT f_s5;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_s5 = EXTRACT_LSB0_INT (insn, 32, 4, 5);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_s5) = f_s5;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mhsetloh", "f_FRk 0x%x", 'x', f_FRk, "f_s5 0x%x", 'x', f_s5, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRklo) = f_FRk;
      FLD (out_FRklo) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhsethih:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mhsethih.f
    UINT f_FRk;
    INT f_s5;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_s5 = EXTRACT_LSB0_INT (insn, 32, 4, 5);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_s5) = f_s5;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mhsethih", "f_FRk 0x%x", 'x', f_FRk, "f_s5 0x%x", 'x', f_s5, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRkhi) = f_FRk;
      FLD (out_FRkhi) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhdseth:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mhdseth.f
    UINT f_FRk;
    INT f_s5;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_s5 = EXTRACT_LSB0_INT (insn, 32, 4, 5);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_s5) = f_s5;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mhdseth", "f_FRk 0x%x", 'x', f_FRk, "f_s5 0x%x", 'x', f_s5, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mand:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mwcut.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mand", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmand:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmand.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmand", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mnot:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mcut.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mnot", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmnot:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmand.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmnot", "f_CCi 0x%x", 'x', f_CCi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mrotli:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mwcuti.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_u6) = f_u6;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mrotli", "f_FRi 0x%x", 'x', f_FRi, "f_u6 0x%x", 'x', f_u6, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mwcut:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mwcut.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mwcut", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRinti_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mwcuti:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mwcuti.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_u6) = f_u6;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mwcuti", "f_FRi 0x%x", 'x', f_FRi, "f_u6 0x%x", 'x', f_u6, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRinti_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcut:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mcut.f
    UINT f_FRk;
    UINT f_ACC40Si;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACC40Si = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Si) = f_ACC40Si;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mcut", "f_ACC40Si 0x%x", 'x', f_ACC40Si, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Si) = f_ACC40Si;
      FLD (in_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcuti:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mcuti.f
    UINT f_FRk;
    UINT f_ACC40Si;
    INT f_s6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACC40Si = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_s6 = EXTRACT_LSB0_INT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Si) = f_ACC40Si;
  FLD (f_s6) = f_s6;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mcuti", "f_ACC40Si 0x%x", 'x', f_ACC40Si, "f_s6 0x%x", 'x', f_s6, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Si) = f_ACC40Si;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdcutssi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdcutssi.f
    UINT f_FRk;
    UINT f_ACC40Si;
    INT f_s6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACC40Si = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_s6 = EXTRACT_LSB0_INT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Si) = f_ACC40Si;
  FLD (f_FRk) = f_FRk;
  FLD (f_s6) = f_s6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mdcutssi", "f_ACC40Si 0x%x", 'x', f_ACC40Si, "f_FRk 0x%x", 'x', f_FRk, "f_s6 0x%x", 'x', f_s6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Si) = f_ACC40Si;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_msllhi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_msllhi.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRk) = f_FRk;
  FLD (f_u6) = f_u6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_msllhi", "f_FRi 0x%x", 'x', f_FRi, "f_FRk 0x%x", 'x', f_FRk, "f_u6 0x%x", 'x', f_u6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_FRinti) = f_FRi;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdrotli:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdrotli.f
    UINT f_FRk;
    UINT f_FRi;
    INT f_s6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_s6 = EXTRACT_LSB0_INT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRk) = f_FRk;
  FLD (f_s6) = f_s6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mdrotli", "f_FRi 0x%x", 'x', f_FRi, "f_FRk 0x%x", 'x', f_FRk, "f_s6 0x%x", 'x', f_s6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintieven) = f_FRi;
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_int_USI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcplhi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mcplhi.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRk) = f_FRk;
  FLD (f_u6) = f_u6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mcplhi", "f_FRi 0x%x", 'x', f_FRi, "f_FRk 0x%x", 'x', f_FRk, "f_u6 0x%x", 'x', f_u6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRinti) = f_FRi;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcpli:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mwcuti.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_u6) = f_u6;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mcpli", "f_FRi 0x%x", 'x', f_FRi, "f_u6 0x%x", 'x', f_u6, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_h_fr_int_USI_add__DFLT_index_of__DFLT_FRinti_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_msaths:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmaddhss.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_msaths", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqsaths:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqaddhss.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mqsaths", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcmpsh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mcmpsh.f
    UINT f_FCCk;
    UINT f_FRi;
    UINT f_FRj;

    f_FCCk = EXTRACT_LSB0_UINT (insn, 32, 26, 2);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FCCk) = f_FCCk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mcmpsh", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FCCk 0x%x", 'x', f_FCCk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FCCk) = f_FCCk;
      FLD (out_h_fccr_UQI_add__DFLT_index_of__DFLT_FCCk_1) = ((FLD (f_FCCk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mabshs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mabshs.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mabshs", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintj) = f_FRj;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmaddhss:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmaddhss.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmaddhss", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmqaddhss:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqaddhss.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmqaddhss", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqsllhi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mqsllhi.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRk) = f_FRk;
  FLD (f_u6) = f_u6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mqsllhi", "f_FRi 0x%x", 'x', f_FRi, "f_FRk 0x%x", 'x', f_FRk, "f_u6 0x%x", 'x', f_u6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintieven) = f_FRi;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_maddaccs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdasaccs.f
    UINT f_ACC40Sk;
    UINT f_ACC40Si;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACC40Si = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Si) = f_ACC40Si;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_maddaccs", "f_ACC40Si 0x%x", 'x', f_ACC40Si, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Si) = f_ACC40Si;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdaddaccs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdasaccs.f
    UINT f_ACC40Sk;
    UINT f_ACC40Si;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACC40Si = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Si) = f_ACC40Si;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mdaddaccs", "f_ACC40Si 0x%x", 'x', f_ACC40Si, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Si) = f_ACC40Si;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_2) = ((FLD (f_ACC40Si)) + (2));
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_3) = ((FLD (f_ACC40Si)) + (3));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_masaccs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdasaccs.f
    UINT f_ACC40Sk;
    UINT f_ACC40Si;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACC40Si = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Si) = f_ACC40Si;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_masaccs", "f_ACC40Si 0x%x", 'x', f_ACC40Si, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Si) = f_ACC40Si;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdasaccs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdasaccs.f
    UINT f_ACC40Sk;
    UINT f_ACC40Si;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACC40Si = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Si) = f_ACC40Si;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mdasaccs", "f_ACC40Si 0x%x", 'x', f_ACC40Si, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Si) = f_ACC40Si;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_2) = ((FLD (f_ACC40Si)) + (2));
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Si_3) = ((FLD (f_ACC40Si)) + (3));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mmulhs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mmulhs", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmmulhs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmmulhs", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqmulhs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mqmulhs", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmqmulhs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmqmulhs", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mmachs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Sk) = f_ACC40Sk;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mmachs", "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Sk) = f_ACC40Sk;
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mmachu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachu.f
    UINT f_ACC40Uk;
    UINT f_FRi;
    UINT f_FRj;

    f_ACC40Uk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Uk) = f_ACC40Uk;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mmachu", "f_ACC40Uk 0x%x", 'x', f_ACC40Uk, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Uk) = f_ACC40Uk;
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Uk) = f_ACC40Uk;
      FLD (out_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmmachs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Sk) = f_ACC40Sk;
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmmachs", "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Sk) = f_ACC40Sk;
      FLD (in_CCi) = f_CCi;
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmmachu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachu.f
    UINT f_ACC40Uk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_ACC40Uk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Uk) = f_ACC40Uk;
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmmachu", "f_ACC40Uk 0x%x", 'x', f_ACC40Uk, "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Uk) = f_ACC40Uk;
      FLD (in_CCi) = f_CCi;
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Uk) = f_ACC40Uk;
      FLD (out_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqmachs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Sk) = f_ACC40Sk;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mqmachs", "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Sk) = f_ACC40Sk;
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqmachu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqmachu.f
    UINT f_ACC40Uk;
    UINT f_FRi;
    UINT f_FRj;

    f_ACC40Uk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Uk) = f_ACC40Uk;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mqmachu", "f_ACC40Uk 0x%x", 'x', f_ACC40Uk, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Uk) = f_ACC40Uk;
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (in_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_2) = ((FLD (f_ACC40Uk)) + (2));
      FLD (in_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_3) = ((FLD (f_ACC40Uk)) + (3));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Uk) = f_ACC40Uk;
      FLD (out_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (out_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_2) = ((FLD (f_ACC40Uk)) + (2));
      FLD (out_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_3) = ((FLD (f_ACC40Uk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmqmachs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Sk) = f_ACC40Sk;
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmqmachs", "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Sk) = f_ACC40Sk;
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (in_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmqmachu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqmachu.f
    UINT f_ACC40Uk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_ACC40Uk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Uk) = f_ACC40Uk;
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmqmachu", "f_ACC40Uk 0x%x", 'x', f_ACC40Uk, "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Uk) = f_ACC40Uk;
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (in_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_2) = ((FLD (f_ACC40Uk)) + (2));
      FLD (in_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_3) = ((FLD (f_ACC40Uk)) + (3));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Uk) = f_ACC40Uk;
      FLD (out_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (out_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_2) = ((FLD (f_ACC40Uk)) + (2));
      FLD (out_h_acc40U_UDI_add__DFLT_index_of__DFLT_ACC40Uk_3) = ((FLD (f_ACC40Uk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcpxrs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mcpxrs", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmcpxrs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_cond) = f_cond;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmcpxrs", "f_CCi 0x%x", 'x', f_CCi, "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_cond 0x%x", 'x', f_cond, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqcpxrs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmqmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;
    UINT f_FRj;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mqcpxrs", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__DFLT_index_of__DFLT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mexpdhw:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmexpdhw.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRk) = f_FRk;
  FLD (f_u6) = f_u6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mexpdhw", "f_FRi 0x%x", 'x', f_FRi, "f_FRk 0x%x", 'x', f_FRk, "f_u6 0x%x", 'x', f_u6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmexpdhw:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmexpdhw.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_cond) = f_cond;
  FLD (f_FRi) = f_FRi;
  FLD (f_FRk) = f_FRk;
  FLD (f_u6) = f_u6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmexpdhw", "f_CCi 0x%x", 'x', f_CCi, "f_cond 0x%x", 'x', f_cond, "f_FRi 0x%x", 'x', f_FRi, "f_FRk 0x%x", 'x', f_FRk, "f_u6 0x%x", 'x', f_u6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mexpdhd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmexpdhd.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_FRi) = f_FRi;
  FLD (f_u6) = f_u6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mexpdhd", "f_FRk 0x%x", 'x', f_FRk, "f_FRi 0x%x", 'x', f_FRi, "f_u6 0x%x", 'x', f_u6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmexpdhd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmexpdhd.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_CCi;
    UINT f_cond;
    UINT f_u6;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_u6 = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRk) = f_FRk;
  FLD (f_cond) = f_cond;
  FLD (f_FRi) = f_FRi;
  FLD (f_u6) = f_u6;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmexpdhd", "f_CCi 0x%x", 'x', f_CCi, "f_FRk 0x%x", 'x', f_FRk, "f_cond 0x%x", 'x', f_cond, "f_FRi 0x%x", 'x', f_FRi, "f_u6 0x%x", 'x', f_u6, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mpackh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmaddhss.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mpackh", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdpackh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdpackh.f
    UINT f_FRk;
    UINT f_FRi;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mdpackh", "f_FRi 0x%x", 'x', f_FRi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintieven) = f_FRi;
      FLD (out_FRintjeven) = f_FRj;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_munpackh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_munpackh.f
    UINT f_FRk;
    UINT f_FRi;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_munpackh", "f_FRi 0x%x", 'x', f_FRi, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRinti) = f_FRi;
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_FRinti) = f_FRi;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_add__DFLT_0_1) = ((FLD (f_FRk)) + (((0) + (1))));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_add__DFLT_0_1) = ((FLD (f_FRk)) + (((0) + (1))));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdunpackh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdunpackh.f
    UINT f_FRk;
    UINT f_FRi;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRi) = f_FRi;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mdunpackh", "f_FRi 0x%x", 'x', f_FRi, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintieven) = f_FRi;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintieven) = f_FRi;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_add__DFLT_0_1) = ((FLD (f_FRk)) + (((0) + (1))));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_add__DFLT_2_1) = ((FLD (f_FRk)) + (((2) + (1))));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_add__DFLT_0_1) = ((FLD (f_FRk)) + (((0) + (1))));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_add__DFLT_2_1) = ((FLD (f_FRk)) + (((2) + (1))));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mbtoh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmbtoh.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mbtoh", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintj) = f_FRj;
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_0_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_1_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_2_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_3_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmbtoh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmbtoh.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmbtoh", "f_CCi 0x%x", 'x', f_CCi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_FRintkeven) = f_FRk;
      FLD (in_h_fr_0_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_1_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_2_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_3_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhtob:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmhtob.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mhtob", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintjeven) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_0_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_1_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_2_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_3_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmhtob:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmhtob.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmhtob", "f_CCi 0x%x", 'x', f_CCi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintjeven) = f_FRj;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintjeven) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_0_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_1_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_2_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_3_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mbtohe:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmbtohe.f
    UINT f_FRk;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mbtohe", "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_FRintj) = f_FRj;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_0_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_1_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_2_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_3_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_3) = ((FLD (f_FRk)) + (3));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_3) = ((FLD (f_FRk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmbtohe:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmbtohe.f
    UINT f_FRk;
    UINT f_CCi;
    UINT f_cond;
    UINT f_FRj;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_CCi = EXTRACT_LSB0_UINT (insn, 32, 11, 3);
    f_cond = EXTRACT_LSB0_UINT (insn, 32, 8, 1);
    f_FRj = EXTRACT_LSB0_UINT (insn, 32, 5, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_CCi) = f_CCi;
  FLD (f_FRj) = f_FRj;
  FLD (f_FRk) = f_FRk;
  FLD (f_cond) = f_cond;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmbtohe", "f_CCi 0x%x", 'x', f_CCi, "f_FRj 0x%x", 'x', f_FRj, "f_FRk 0x%x", 'x', f_FRk, "f_cond 0x%x", 'x', f_cond, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_CCi) = f_CCi;
      FLD (in_FRintj) = f_FRj;
      FLD (in_FRintk) = f_FRk;
      FLD (in_h_fr_0_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_1_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_2_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_3_UHI_add__DFLT_index_of__DFLT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_hi_UHI_add__DFLT_index_of__DFLT_FRintk_3) = ((FLD (f_FRk)) + (3));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_lo_UHI_add__DFLT_index_of__DFLT_FRintk_3) = ((FLD (f_FRk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mclracc_0:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mdasaccs.f
    UINT f_ACC40Sk;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Sk) = f_ACC40Sk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mclracc_0", "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, (char *) 0));

#undef FLD
    return idesc;
  }

 extract_sfmt_mrdacc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mcuti.f
    UINT f_FRk;
    UINT f_ACC40Si;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACC40Si = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Si) = f_ACC40Si;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mrdacc", "f_ACC40Si 0x%x", 'x', f_ACC40Si, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Si) = f_ACC40Si;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mrdaccg:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mrdaccg.f
    UINT f_FRk;
    UINT f_ACCGi;

    f_FRk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_ACCGi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACCGi) = f_ACCGi;
  FLD (f_FRk) = f_FRk;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mrdaccg", "f_ACCGi 0x%x", 'x', f_ACCGi, "f_FRk 0x%x", 'x', f_FRk, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACCGi) = f_ACCGi;
      FLD (out_FRintk) = f_FRk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mwtacc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_cmmachs.f
    UINT f_ACC40Sk;
    UINT f_FRi;

    f_ACC40Sk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACC40Sk) = f_ACC40Sk;
  FLD (f_FRi) = f_FRi;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mwtacc", "f_ACC40Sk 0x%x", 'x', f_ACC40Sk, "f_FRi 0x%x", 'x', f_FRi, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACC40Sk) = f_ACC40Sk;
      FLD (in_FRinti) = f_FRi;
      FLD (out_ACC40Sk) = f_ACC40Sk;
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mwtaccg:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_INT insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_mwtaccg.f
    UINT f_ACCGk;
    UINT f_FRi;

    f_ACCGk = EXTRACT_LSB0_UINT (insn, 32, 30, 6);
    f_FRi = EXTRACT_LSB0_UINT (insn, 32, 17, 6);

  /* Record the fields for the semantic handler.  */
  FLD (f_ACCGk) = f_ACCGk;
  FLD (f_FRi) = f_FRi;
  TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mwtaccg", "f_ACCGk 0x%x", 'x', f_ACCGk, "f_FRi 0x%x", 'x', f_FRi, (char *) 0));

#if WITH_PROFILE_MODEL_P
  /* Record the fields for profiling.  */
  if (PROFILE_MODEL_P (current_cpu))
    {
      FLD (in_ACCGk) = f_ACCGk;
      FLD (in_FRinti) = f_FRi;
      FLD (out_ACCGk) = f_ACCGk;
    }
#endif
#undef FLD
    return idesc;
  }

}
