/* Simulator instruction decoder for frvbf.

THIS FILE IS MACHINE GENERATED WITH CGEN.

Copyright (C) 1996-2023 Free Software Foundation, Inc.

This file is part of the GNU simulators.

   This file 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 3, or (at your option)
   any later version.

   It 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.,
   51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.

*/

#define WANT_CPU frvbf
#define WANT_CPU_FRVBF

#include "sim-main.h"
#include "sim-assert.h"
#include "cgen-mem.h"
#include "cgen-ops.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_SLASS },
  { 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_SLASS },
  { FRV_INSN_SUBSS, FRVBF_INSN_SUBSS, FRVBF_SFMT_SLASS },
  { 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_FBRA },
  { FRV_INSN_FBNO, FRVBF_INSN_FBNO, FRVBF_SFMT_FBNO },
  { 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_FBRALR },
  { FRV_INSN_FBNOLR, FRVBF_INSN_FBNOLR, FRVBF_SFMT_FBNOLR },
  { 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_FCBRALR },
  { FRV_INSN_FCBNOLR, FRVBF_INSN_FCBNOLR, FRVBF_SFMT_FCBNOLR },
  { 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_CALLL },
  { FRV_INSN_JMPIL, FRVBF_INSN_JMPIL, FRVBF_SFMT_JMPIL },
  { FRV_INSN_CALLIL, FRVBF_INSN_CALLIL, FRVBF_SFMT_CALLIL },
  { 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_FTRA },
  { 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_FTIRA },
  { 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_CCALLL },
  { 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 + ARRAY_SIZE (frvbf_insn_sem);
       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_WORD base_insn, CGEN_INSN_WORD entire_insn,
              ARGBUF *abuf)
{
  /* Result of decoder.  */
  FRVBF_INSN_TYPE itype;

  {
    CGEN_INSN_WORD insn = base_insn;

    {
      unsigned int val0 = (((insn >> 18) & (127 << 0)));
      switch (val0)
      {
      case 0:
        {
          unsigned int val1 = (((insn >> 6) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1fc0fc0) == 0x0)
              { itype = FRVBF_INSN_ADD; goto extract_sfmt_add; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x1fc0fc0) == 0x100)
              { itype = FRVBF_INSN_SUB; goto extract_sfmt_add; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x1fc0fc0) == 0x200)
              { itype = FRVBF_INSN_SMUL; goto extract_sfmt_smul; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9: itype = FRVBF_INSN_SMULCC; goto extract_sfmt_smulcc;
          case 10:
            if ((entire_insn & 0x1fc0fc0) == 0x280)
              { itype = FRVBF_INSN_UMUL; goto extract_sfmt_smul; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 11: itype = FRVBF_INSN_UMULCC; goto extract_sfmt_smulcc;
          case 12:
            if ((entire_insn & 0x7ffc03c0) == 0x300)
              { itype = FRVBF_INSN_CMPB; goto extract_sfmt_cmpb; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 13:
            if ((entire_insn & 0x7ffc03c0) == 0x340)
              { itype = FRVBF_INSN_CMPBA; goto extract_sfmt_cmpb; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 14:
            if ((entire_insn & 0x1fc0fc0) == 0x380)
              { itype = FRVBF_INSN_SDIV; goto extract_sfmt_sdiv; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x1fc0fc0) == 0x3c0)
              { itype = FRVBF_INSN_UDIV; goto extract_sfmt_sdiv; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 1:
        {
          unsigned int val1 = (((insn >> 6) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1fc0fc0) == 0x40000)
              { itype = FRVBF_INSN_AND; goto extract_sfmt_add; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1: itype = FRVBF_INSN_ANDCC; goto extract_sfmt_andcc;
          case 2:
            if ((entire_insn & 0x1fc0fc0) == 0x40080)
              { itype = FRVBF_INSN_OR; goto extract_sfmt_add; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3: itype = FRVBF_INSN_ORCC; goto extract_sfmt_andcc;
          case 4:
            if ((entire_insn & 0x1fc0fc0) == 0x40100)
              { itype = FRVBF_INSN_XOR; goto extract_sfmt_add; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5: itype = FRVBF_INSN_XORCC; goto extract_sfmt_andcc;
          case 6:
            if ((entire_insn & 0x1ffffc0) == 0x40180)
              { itype = FRVBF_INSN_NOT; goto extract_sfmt_not; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x1fc0fc0) == 0x40200)
              { itype = FRVBF_INSN_SLL; goto extract_sfmt_add; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9: itype = FRVBF_INSN_SLLCC; goto extract_sfmt_addcc;
          case 10:
            if ((entire_insn & 0x1fc0fc0) == 0x40280)
              { itype = FRVBF_INSN_SRL; goto extract_sfmt_add; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 11: itype = FRVBF_INSN_SRLCC; goto extract_sfmt_addcc;
          case 12:
            if ((entire_insn & 0x1fc0fc0) == 0x40300)
              { itype = FRVBF_INSN_SRA; goto extract_sfmt_add; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 13: itype = FRVBF_INSN_SRACC; goto extract_sfmt_addcc;
          case 14:
            if ((entire_insn & 0x1fc0fc0) == 0x40380)
              { itype = FRVBF_INSN_NSDIV; goto extract_sfmt_sdiv; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x1fc0fc0) == 0x403c0)
              { itype = FRVBF_INSN_NUDIV; goto extract_sfmt_sdiv; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 2:
        {
          unsigned int val1 = (((insn >> 6) & (63 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (63 << 0)));
          switch (val1)
          {
          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:
            if ((entire_insn & 0x1ffffc0) == 0xc0340)
              { itype = FRVBF_INSN_MOVFG; goto extract_sfmt_movfg; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 14:
            if ((entire_insn & 0x1ffffc0) == 0xc0380)
              { itype = FRVBF_INSN_MOVFGD; goto extract_sfmt_movfgd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x1ffffc0) == 0xc03c0)
              { itype = FRVBF_INSN_MOVFGQ; goto extract_sfmt_movfgq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x1ffffc0) == 0xc0540)
              { itype = FRVBF_INSN_MOVGF; goto extract_sfmt_movgf; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 22:
            if ((entire_insn & 0x1ffffc0) == 0xc0580)
              { itype = FRVBF_INSN_MOVGFD; goto extract_sfmt_movgfd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 23:
            if ((entire_insn & 0x1ffffc0) == 0xc05c0)
              { itype = FRVBF_INSN_MOVGFQ; goto extract_sfmt_movgfq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x1fc0fc7) == 0xc0800)
              { itype = FRVBF_INSN_LRAI; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 33:
            if ((entire_insn & 0x1fc0fc7) == 0xc0840)
              { itype = FRVBF_INSN_LRAD; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 36:
            if ((entire_insn & 0x61fc0fc0) == 0xc0900)
              { itype = FRVBF_INSN_TLBPR; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x7dfc0fc0) == 0xc0c00)
              { itype = FRVBF_INSN_ICPL; goto extract_sfmt_icpl; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 49:
            if ((entire_insn & 0x7ffc0fff) == 0xc0c40)
              { itype = FRVBF_INSN_ICUL; goto extract_sfmt_icul; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 50: itype = FRVBF_INSN_WITLB; goto extract_sfmt_rei;
          case 51:
            if ((entire_insn & 0x7ffc0fc0) == 0xc0cc0)
              { itype = FRVBF_INSN_ITLBI; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 52:
            if ((entire_insn & 0x7dfc0fc0) == 0xc0d00)
              { itype = FRVBF_INSN_DCPL; goto extract_sfmt_icpl; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 53:
            if ((entire_insn & 0x7ffc0fff) == 0xc0d40)
              { itype = FRVBF_INSN_DCUL; goto extract_sfmt_icul; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 54: itype = FRVBF_INSN_WDTLB; goto extract_sfmt_rei;
          case 55:
            if ((entire_insn & 0x7ffc0fc0) == 0xc0dc0)
              { itype = FRVBF_INSN_DTLBI; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 56:
            if ((entire_insn & 0x7ffc0fc0) == 0xc0e00)
              { itype = FRVBF_INSN_ICI; goto extract_sfmt_ici; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 57:
            if ((entire_insn & 0x7dfc0fc0) == 0xc0e40)
              { itype = FRVBF_INSN_ICEI; goto extract_sfmt_icei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 58:
            if ((entire_insn & 0x7dfc0fc0) == 0xc0e80)
              { itype = FRVBF_INSN_DCEI; goto extract_sfmt_icei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 59:
            if ((entire_insn & 0x7dfc0fc0) == 0xc0ec0)
              { itype = FRVBF_INSN_DCEF; goto extract_sfmt_icei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 60:
            if ((entire_insn & 0x7ffc0fc0) == 0xc0f00)
              { itype = FRVBF_INSN_DCI; goto extract_sfmt_ici; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 61:
            if ((entire_insn & 0x7ffc0fc0) == 0xc0f40)
              { itype = FRVBF_INSN_DCF; goto extract_sfmt_ici; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 62:
            if ((entire_insn & 0x7fffffff) == 0xc0f80)
              { itype = FRVBF_INSN_BAR; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 63:
            if ((entire_insn & 0x7fffffff) == 0xc0fc0)
              { itype = FRVBF_INSN_MEMBAR; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 4:
        {
          unsigned int val1 = (((insn >> 25) & (15 << 2)) | ((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x7fffffff) == 0x100000)
              { itype = FRVBF_INSN_TNO; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x7fffffff) == 0x100040)
              { itype = FRVBF_INSN_FTNO; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x7fffffff) == 0x100080)
              { itype = FRVBF_INSN_MTRAP; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3:
            if ((entire_insn & 0x7fffffff) == 0x1000c0)
              { itype = FRVBF_INSN_BREAK; goto extract_sfmt_break; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 4:
            if ((entire_insn & 0x79fc0fc0) == 0x8100000)
              { itype = FRVBF_INSN_TC; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x79fc0fc0) == 0x8100040)
              { itype = FRVBF_INSN_FTU; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x79fc0fc0) == 0x10100000)
              { itype = FRVBF_INSN_TV; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9:
            if ((entire_insn & 0x79fc0fc0) == 0x10100040)
              { itype = FRVBF_INSN_FTGT; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 12:
            if ((entire_insn & 0x79fc0fc0) == 0x18100000)
              { itype = FRVBF_INSN_TLT; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 13:
            if ((entire_insn & 0x79fc0fc0) == 0x18100040)
              { itype = FRVBF_INSN_FTUG; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 16:
            if ((entire_insn & 0x79fc0fc0) == 0x20100000)
              { itype = FRVBF_INSN_TEQ; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 17:
            if ((entire_insn & 0x79fc0fc0) == 0x20100040)
              { itype = FRVBF_INSN_FTLT; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 20:
            if ((entire_insn & 0x79fc0fc0) == 0x28100000)
              { itype = FRVBF_INSN_TLS; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 21:
            if ((entire_insn & 0x79fc0fc0) == 0x28100040)
              { itype = FRVBF_INSN_FTUL; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 24:
            if ((entire_insn & 0x79fc0fc0) == 0x30100000)
              { itype = FRVBF_INSN_TN; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 25:
            if ((entire_insn & 0x79fc0fc0) == 0x30100040)
              { itype = FRVBF_INSN_FTLG; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 28:
            if ((entire_insn & 0x79fc0fc0) == 0x38100000)
              { itype = FRVBF_INSN_TLE; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 29:
            if ((entire_insn & 0x79fc0fc0) == 0x38100040)
              { itype = FRVBF_INSN_FTNE; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 32:
            if ((entire_insn & 0x7ffc0fc0) == 0x40100000)
              { itype = FRVBF_INSN_TRA; goto extract_sfmt_tra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 33:
            if ((entire_insn & 0x79fc0fc0) == 0x40100040)
              { itype = FRVBF_INSN_FTEQ; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 36:
            if ((entire_insn & 0x79fc0fc0) == 0x48100000)
              { itype = FRVBF_INSN_TNC; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 37:
            if ((entire_insn & 0x79fc0fc0) == 0x48100040)
              { itype = FRVBF_INSN_FTUE; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 40:
            if ((entire_insn & 0x79fc0fc0) == 0x50100000)
              { itype = FRVBF_INSN_TNV; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 41:
            if ((entire_insn & 0x79fc0fc0) == 0x50100040)
              { itype = FRVBF_INSN_FTGE; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 44:
            if ((entire_insn & 0x79fc0fc0) == 0x58100000)
              { itype = FRVBF_INSN_TGE; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 45:
            if ((entire_insn & 0x79fc0fc0) == 0x58100040)
              { itype = FRVBF_INSN_FTUGE; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 48:
            if ((entire_insn & 0x79fc0fc0) == 0x60100000)
              { itype = FRVBF_INSN_TNE; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 49:
            if ((entire_insn & 0x79fc0fc0) == 0x60100040)
              { itype = FRVBF_INSN_FTLE; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 52:
            if ((entire_insn & 0x79fc0fc0) == 0x68100000)
              { itype = FRVBF_INSN_THI; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 53:
            if ((entire_insn & 0x79fc0fc0) == 0x68100040)
              { itype = FRVBF_INSN_FTULE; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 56:
            if ((entire_insn & 0x79fc0fc0) == 0x70100000)
              { itype = FRVBF_INSN_TP; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 57:
            if ((entire_insn & 0x79fc0fc0) == 0x70100040)
              { itype = FRVBF_INSN_FTO; goto extract_sfmt_ftne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 60:
            if ((entire_insn & 0x79fc0fc0) == 0x78100000)
              { itype = FRVBF_INSN_TGT; goto extract_sfmt_teq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 61:
            if ((entire_insn & 0x7ffc0fc0) == 0x78100040)
              { itype = FRVBF_INSN_FTRA; goto extract_sfmt_ftra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 5:
        if ((entire_insn & 0x7dffffff) == 0x140000)
          { itype = FRVBF_INSN_RETT; goto extract_sfmt_rett; }
        itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      case 6:
        {
          unsigned int val1 = (((insn >> 27) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x7ffcffff) == 0x180000)
              { itype = FRVBF_INSN_BNO; goto extract_sfmt_bno; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x7ffc0000) == 0x40180000)
              { itype = FRVBF_INSN_BRA; goto extract_sfmt_bra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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 val1 = (((insn >> 27) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x7ffcffff) == 0x1c0000)
              { itype = FRVBF_INSN_FBNO; goto extract_sfmt_fbno; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x7ffc0000) == 0x781c0000)
              { itype = FRVBF_INSN_FBRA; goto extract_sfmt_fbra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 8:
        {
          unsigned int val1 = (((insn >> 27) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x79ffffff) == 0x200000)
              { itype = FRVBF_INSN_CKNO; goto extract_sfmt_ckra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x79fffffc) == 0x8200000)
              { itype = FRVBF_INSN_CKC; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x79fffffc) == 0x10200000)
              { itype = FRVBF_INSN_CKV; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3:
            if ((entire_insn & 0x79fffffc) == 0x18200000)
              { itype = FRVBF_INSN_CKLT; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 4:
            if ((entire_insn & 0x79fffffc) == 0x20200000)
              { itype = FRVBF_INSN_CKEQ; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x79fffffc) == 0x28200000)
              { itype = FRVBF_INSN_CKLS; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 6:
            if ((entire_insn & 0x79fffffc) == 0x30200000)
              { itype = FRVBF_INSN_CKN; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 7:
            if ((entire_insn & 0x79fffffc) == 0x38200000)
              { itype = FRVBF_INSN_CKLE; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x79ffffff) == 0x40200000)
              { itype = FRVBF_INSN_CKRA; goto extract_sfmt_ckra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9:
            if ((entire_insn & 0x79fffffc) == 0x48200000)
              { itype = FRVBF_INSN_CKNC; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 10:
            if ((entire_insn & 0x79fffffc) == 0x50200000)
              { itype = FRVBF_INSN_CKNV; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 11:
            if ((entire_insn & 0x79fffffc) == 0x58200000)
              { itype = FRVBF_INSN_CKGE; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 12:
            if ((entire_insn & 0x79fffffc) == 0x60200000)
              { itype = FRVBF_INSN_CKNE; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 13:
            if ((entire_insn & 0x79fffffc) == 0x68200000)
              { itype = FRVBF_INSN_CKHI; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 14:
            if ((entire_insn & 0x79fffffc) == 0x70200000)
              { itype = FRVBF_INSN_CKP; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x79fffffc) == 0x78200000)
              { itype = FRVBF_INSN_CKGT; goto extract_sfmt_ckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 9:
        {
          unsigned int val1 = (((insn >> 27) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x79fffffc) == 0x240000)
              { itype = FRVBF_INSN_FCKNO; goto extract_sfmt_fckra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x79fffffc) == 0x8240000)
              { itype = FRVBF_INSN_FCKU; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x79fffffc) == 0x10240000)
              { itype = FRVBF_INSN_FCKGT; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3:
            if ((entire_insn & 0x79fffffc) == 0x18240000)
              { itype = FRVBF_INSN_FCKUG; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 4:
            if ((entire_insn & 0x79fffffc) == 0x20240000)
              { itype = FRVBF_INSN_FCKLT; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x79fffffc) == 0x28240000)
              { itype = FRVBF_INSN_FCKUL; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 6:
            if ((entire_insn & 0x79fffffc) == 0x30240000)
              { itype = FRVBF_INSN_FCKLG; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 7:
            if ((entire_insn & 0x79fffffc) == 0x38240000)
              { itype = FRVBF_INSN_FCKNE; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x79fffffc) == 0x40240000)
              { itype = FRVBF_INSN_FCKEQ; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9:
            if ((entire_insn & 0x79fffffc) == 0x48240000)
              { itype = FRVBF_INSN_FCKUE; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 10:
            if ((entire_insn & 0x79fffffc) == 0x50240000)
              { itype = FRVBF_INSN_FCKGE; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 11:
            if ((entire_insn & 0x79fffffc) == 0x58240000)
              { itype = FRVBF_INSN_FCKUGE; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 12:
            if ((entire_insn & 0x79fffffc) == 0x60240000)
              { itype = FRVBF_INSN_FCKLE; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 13:
            if ((entire_insn & 0x79fffffc) == 0x68240000)
              { itype = FRVBF_INSN_FCKULE; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 14:
            if ((entire_insn & 0x79fffffc) == 0x70240000)
              { itype = FRVBF_INSN_FCKO; goto extract_sfmt_fckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x79fffffc) == 0x78240000)
              { itype = FRVBF_INSN_FCKRA; goto extract_sfmt_fckra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 10:
        {
          unsigned int val1 = (((insn >> 6) & (31 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1ffffff) == 0x280000)
              { itype = FRVBF_INSN_CLRGR; goto extract_sfmt_clrgr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x7fffffff) == 0x280040)
              { itype = FRVBF_INSN_CLRGA; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x1ffffff) == 0x280080)
              { itype = FRVBF_INSN_CLRFR; goto extract_sfmt_clrfr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3:
            if ((entire_insn & 0x7fffffff) == 0x2800c0)
              { itype = FRVBF_INSN_CLRFA; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 4:
            if ((entire_insn & 0x1ffffff) == 0x280100)
              { itype = FRVBF_INSN_COMMITGR; goto extract_sfmt_commitgr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x7fffffff) == 0x280140)
              { itype = FRVBF_INSN_COMMITGA; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 6:
            if ((entire_insn & 0x1ffffff) == 0x280180)
              { itype = FRVBF_INSN_COMMITFR; goto extract_sfmt_commitfr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 7:
            if ((entire_insn & 0x7fffffff) == 0x2801c0)
              { itype = FRVBF_INSN_COMMITFA; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x71ff8ff8) == 0x280200)
              { itype = FRVBF_INSN_ANDCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9:
            if ((entire_insn & 0x71ff8ff8) == 0x280240)
              { itype = FRVBF_INSN_ORCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 10:
            if ((entire_insn & 0x71ff8ff8) == 0x280280)
              { itype = FRVBF_INSN_XORCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 11:
            if ((entire_insn & 0x71fffff8) == 0x2802c0)
              { itype = FRVBF_INSN_NOTCR; goto extract_sfmt_notcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 12:
            if ((entire_insn & 0x71ff8ff8) == 0x280300)
              { itype = FRVBF_INSN_NANDCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 13:
            if ((entire_insn & 0x71ff8ff8) == 0x280340)
              { itype = FRVBF_INSN_NORCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 16:
            if ((entire_insn & 0x71ff8ff8) == 0x280400)
              { itype = FRVBF_INSN_ANDNCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 17:
            if ((entire_insn & 0x71ff8ff8) == 0x280440)
              { itype = FRVBF_INSN_ORNCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 20:
            if ((entire_insn & 0x71ff8ff8) == 0x280500)
              { itype = FRVBF_INSN_NANDNCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 21:
            if ((entire_insn & 0x71ff8ff8) == 0x280540)
              { itype = FRVBF_INSN_NORNCR; goto extract_sfmt_andcr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 11:
        if ((entire_insn & 0x1fc0fc0) == 0x2c0000)
          { itype = FRVBF_INSN_SCAN; goto extract_sfmt_add; }
        itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      case 12:
        {
          unsigned int val1 = (((insn >> 25) & (1 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x7ffc0fc0) == 0x300000)
              { itype = FRVBF_INSN_JMPL; goto extract_sfmt_jmpl; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x7ffc0fc0) == 0x2300000)
              { itype = FRVBF_INSN_CALLL; goto extract_sfmt_calll; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 13:
        {
          unsigned int val1 = (((insn >> 25) & (1 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x7ffc0000) == 0x340000)
              { itype = FRVBF_INSN_JMPIL; goto extract_sfmt_jmpil; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x7ffc0000) == 0x2340000)
              { itype = FRVBF_INSN_CALLIL; goto extract_sfmt_callil; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 14:
        {
          unsigned int val1 = (((insn >> 25) & (15 << 2)) | ((insn >> 14) & (1 << 1)) | ((insn >> 13) & (1 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x7ffcffff) == 0x384000)
              { itype = FRVBF_INSN_BNOLR; goto extract_sfmt_bnolr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            {
              unsigned int val2 = (((insn >> 14) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x7ffcefff) == 0x382000)
                  { itype = FRVBF_INSN_BCTRLR; goto extract_sfmt_bctrlr; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1:
                if ((entire_insn & 0x7ffcffff) == 0x386000)
                  { itype = FRVBF_INSN_BCNOLR; goto extract_sfmt_bcnolr; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 2:
            if ((entire_insn & 0x7ffcffff) == 0x38c000)
              { itype = FRVBF_INSN_FBNOLR; goto extract_sfmt_fbnolr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3:
            if ((entire_insn & 0x7ffcffff) == 0x38e000)
              { itype = FRVBF_INSN_FCBNOLR; goto extract_sfmt_fcbnolr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 4:
            if ((entire_insn & 0x79fcffff) == 0x8384000)
              { itype = FRVBF_INSN_BCLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x79fcefff) == 0x8386000)
              { itype = FRVBF_INSN_BCCLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 6:
            if ((entire_insn & 0x79fcffff) == 0x838c000)
              { itype = FRVBF_INSN_FBULR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 7:
            if ((entire_insn & 0x79fcefff) == 0x838e000)
              { itype = FRVBF_INSN_FCBULR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x79fcffff) == 0x10384000)
              { itype = FRVBF_INSN_BVLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9:
            if ((entire_insn & 0x79fcefff) == 0x10386000)
              { itype = FRVBF_INSN_BCVLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 10:
            if ((entire_insn & 0x79fcffff) == 0x1038c000)
              { itype = FRVBF_INSN_FBGTLR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 11:
            if ((entire_insn & 0x79fcefff) == 0x1038e000)
              { itype = FRVBF_INSN_FCBGTLR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 12:
            if ((entire_insn & 0x79fcffff) == 0x18384000)
              { itype = FRVBF_INSN_BLTLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 13:
            if ((entire_insn & 0x79fcefff) == 0x18386000)
              { itype = FRVBF_INSN_BCLTLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 14:
            if ((entire_insn & 0x79fcffff) == 0x1838c000)
              { itype = FRVBF_INSN_FBUGLR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x79fcefff) == 0x1838e000)
              { itype = FRVBF_INSN_FCBUGLR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 16:
            if ((entire_insn & 0x79fcffff) == 0x20384000)
              { itype = FRVBF_INSN_BEQLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 17:
            if ((entire_insn & 0x79fcefff) == 0x20386000)
              { itype = FRVBF_INSN_BCEQLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 18:
            if ((entire_insn & 0x79fcffff) == 0x2038c000)
              { itype = FRVBF_INSN_FBLTLR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 19:
            if ((entire_insn & 0x79fcefff) == 0x2038e000)
              { itype = FRVBF_INSN_FCBLTLR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 20:
            if ((entire_insn & 0x79fcffff) == 0x28384000)
              { itype = FRVBF_INSN_BLSLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 21:
            if ((entire_insn & 0x79fcefff) == 0x28386000)
              { itype = FRVBF_INSN_BCLSLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 22:
            if ((entire_insn & 0x79fcffff) == 0x2838c000)
              { itype = FRVBF_INSN_FBULLR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 23:
            if ((entire_insn & 0x79fcefff) == 0x2838e000)
              { itype = FRVBF_INSN_FCBULLR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 24:
            if ((entire_insn & 0x79fcffff) == 0x30384000)
              { itype = FRVBF_INSN_BNLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 25:
            if ((entire_insn & 0x79fcefff) == 0x30386000)
              { itype = FRVBF_INSN_BCNLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 26:
            if ((entire_insn & 0x79fcffff) == 0x3038c000)
              { itype = FRVBF_INSN_FBLGLR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 27:
            if ((entire_insn & 0x79fcefff) == 0x3038e000)
              { itype = FRVBF_INSN_FCBLGLR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 28:
            if ((entire_insn & 0x79fcffff) == 0x38384000)
              { itype = FRVBF_INSN_BLELR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 29:
            if ((entire_insn & 0x79fcefff) == 0x38386000)
              { itype = FRVBF_INSN_BCLELR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 30:
            if ((entire_insn & 0x79fcffff) == 0x3838c000)
              { itype = FRVBF_INSN_FBNELR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 31:
            if ((entire_insn & 0x79fcefff) == 0x3838e000)
              { itype = FRVBF_INSN_FCBNELR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 32:
            if ((entire_insn & 0x7ffcffff) == 0x40384000)
              { itype = FRVBF_INSN_BRALR; goto extract_sfmt_bralr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 33:
            if ((entire_insn & 0x7ffcefff) == 0x40386000)
              { itype = FRVBF_INSN_BCRALR; goto extract_sfmt_bcralr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 34:
            if ((entire_insn & 0x79fcffff) == 0x4038c000)
              { itype = FRVBF_INSN_FBEQLR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 35:
            if ((entire_insn & 0x79fcefff) == 0x4038e000)
              { itype = FRVBF_INSN_FCBEQLR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 36:
            if ((entire_insn & 0x79fcffff) == 0x48384000)
              { itype = FRVBF_INSN_BNCLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 37:
            if ((entire_insn & 0x79fcefff) == 0x48386000)
              { itype = FRVBF_INSN_BCNCLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 38:
            if ((entire_insn & 0x79fcffff) == 0x4838c000)
              { itype = FRVBF_INSN_FBUELR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 39:
            if ((entire_insn & 0x79fcefff) == 0x4838e000)
              { itype = FRVBF_INSN_FCBUELR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 40:
            if ((entire_insn & 0x79fcffff) == 0x50384000)
              { itype = FRVBF_INSN_BNVLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 41:
            if ((entire_insn & 0x79fcefff) == 0x50386000)
              { itype = FRVBF_INSN_BCNVLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 42:
            if ((entire_insn & 0x79fcffff) == 0x5038c000)
              { itype = FRVBF_INSN_FBGELR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 43:
            if ((entire_insn & 0x79fcefff) == 0x5038e000)
              { itype = FRVBF_INSN_FCBGELR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 44:
            if ((entire_insn & 0x79fcffff) == 0x58384000)
              { itype = FRVBF_INSN_BGELR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 45:
            if ((entire_insn & 0x79fcefff) == 0x58386000)
              { itype = FRVBF_INSN_BCGELR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 46:
            if ((entire_insn & 0x79fcffff) == 0x5838c000)
              { itype = FRVBF_INSN_FBUGELR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 47:
            if ((entire_insn & 0x79fcefff) == 0x5838e000)
              { itype = FRVBF_INSN_FCBUGELR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 48:
            if ((entire_insn & 0x79fcffff) == 0x60384000)
              { itype = FRVBF_INSN_BNELR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 49:
            if ((entire_insn & 0x79fcefff) == 0x60386000)
              { itype = FRVBF_INSN_BCNELR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 50:
            if ((entire_insn & 0x79fcffff) == 0x6038c000)
              { itype = FRVBF_INSN_FBLELR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 51:
            if ((entire_insn & 0x79fcefff) == 0x6038e000)
              { itype = FRVBF_INSN_FCBLELR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 52:
            if ((entire_insn & 0x79fcffff) == 0x68384000)
              { itype = FRVBF_INSN_BHILR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 53:
            if ((entire_insn & 0x79fcefff) == 0x68386000)
              { itype = FRVBF_INSN_BCHILR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 54:
            if ((entire_insn & 0x79fcffff) == 0x6838c000)
              { itype = FRVBF_INSN_FBULELR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 55:
            if ((entire_insn & 0x79fcefff) == 0x6838e000)
              { itype = FRVBF_INSN_FCBULELR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 56:
            if ((entire_insn & 0x79fcffff) == 0x70384000)
              { itype = FRVBF_INSN_BPLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 57:
            if ((entire_insn & 0x79fcefff) == 0x70386000)
              { itype = FRVBF_INSN_BCPLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 58:
            if ((entire_insn & 0x79fcffff) == 0x7038c000)
              { itype = FRVBF_INSN_FBOLR; goto extract_sfmt_fbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 59:
            if ((entire_insn & 0x79fcefff) == 0x7038e000)
              { itype = FRVBF_INSN_FCBOLR; goto extract_sfmt_fcbeqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 60:
            if ((entire_insn & 0x79fcffff) == 0x78384000)
              { itype = FRVBF_INSN_BGTLR; goto extract_sfmt_beqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 61:
            if ((entire_insn & 0x79fcefff) == 0x78386000)
              { itype = FRVBF_INSN_BCGTLR; goto extract_sfmt_bceqlr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 62:
            if ((entire_insn & 0x7ffcffff) == 0x7838c000)
              { itype = FRVBF_INSN_FBRALR; goto extract_sfmt_fbralr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 63:
            if ((entire_insn & 0x7ffcefff) == 0x7838e000)
              { itype = FRVBF_INSN_FCBRALR; goto extract_sfmt_fcbralr; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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 val1 = (((insn >> 27) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x7fffffff) == 0x700000)
              { itype = FRVBF_INSN_TINO; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x7ffc0000) == 0x40700000)
              { itype = FRVBF_INSN_TIRA; goto extract_sfmt_tira; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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 val1 = (((insn >> 27) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x7fffffff) == 0x740000)
              { itype = FRVBF_INSN_FTINO; goto extract_sfmt_rei; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x7ffc0000) == 0x78740000)
              { itype = FRVBF_INSN_FTIRA; goto extract_sfmt_ftira; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
        if ((entire_insn & 0x7ffc0fff) == 0xdc0000)
          { itype = FRVBF_INSN_REI; goto extract_sfmt_rei; }
        itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      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:
        if ((entire_insn & 0x1ff0000) == 0xf40000)
          { itype = FRVBF_INSN_SETLO; goto extract_sfmt_setlo; }
        itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      case 62:
        if ((entire_insn & 0x1ff0000) == 0xf80000)
          { itype = FRVBF_INSN_SETHI; goto extract_sfmt_sethi; }
        itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      case 63:
        if ((entire_insn & 0x1ff0000) == 0xfc0000)
          { itype = FRVBF_INSN_SETLOS; goto extract_sfmt_setlos; }
        itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      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 val1 = (((insn >> 6) & (7 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1fc0fc0) == 0x1180000)
              { itype = FRVBF_INSN_ADDSS; goto extract_sfmt_slass; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x1fc0fc0) == 0x1180040)
              { itype = FRVBF_INSN_SUBSS; goto extract_sfmt_slass; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x1fc0fc0) == 0x1180080)
              { itype = FRVBF_INSN_SLASS; goto extract_sfmt_slass; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 4:
            if ((entire_insn & 0x1ffffc0) == 0x1180100)
              { itype = FRVBF_INSN_SCUTSS; goto extract_sfmt_scutss; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x7ffc0fc0) == 0x1180140)
              { itype = FRVBF_INSN_SMU; goto extract_sfmt_smu; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 6:
            if ((entire_insn & 0x7ffc0fc0) == 0x1180180)
              { itype = FRVBF_INSN_SMASS; goto extract_sfmt_smass; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 7:
            if ((entire_insn & 0x7ffc0fc0) == 0x11801c0)
              { itype = FRVBF_INSN_SMSSS; goto extract_sfmt_smass; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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:
            if ((entire_insn & 0x1fff0c0) == 0x16800c0)
              { itype = FRVBF_INSN_CNOT; goto extract_sfmt_cnot; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 91:
        {
          unsigned int val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1fff0c0) == 0x1a40000)
              { itype = FRVBF_INSN_CMOVGF; goto extract_sfmt_cmovgf; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x1fff0c0) == 0x1a40040)
              { itype = FRVBF_INSN_CMOVGFD; goto extract_sfmt_cmovgfd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x1fff0c0) == 0x1a40080)
              { itype = FRVBF_INSN_CMOVFG; goto extract_sfmt_cmovfg; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3:
            if ((entire_insn & 0x1fff0c0) == 0x1a400c0)
              { itype = FRVBF_INSN_CMOVFGD; goto extract_sfmt_cmovfgd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 106:
        {
          unsigned int val1 = (((insn >> 26) & (15 << 1)) | ((insn >> 6) & (1 << 0)));
          switch (val1)
          {
          case 0:
            {
              unsigned int val2 = (((insn >> 24) & (1 << 1)) | ((insn >> 7) & (1 << 0)));
              switch (val2)
              {
              case 0:
              case 2:
                if ((entire_insn & 0x79fff0ff) == 0x1a80000)
                  { itype = FRVBF_INSN_CCKNO; goto extract_sfmt_cckra; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1:
                if ((entire_insn & 0x7ffc00c0) == 0x1a80080)
                  { itype = FRVBF_INSN_CJMPL; goto extract_sfmt_cjmpl; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 3:
                if ((entire_insn & 0x7ffc00c0) == 0x3a80080)
                  { itype = FRVBF_INSN_CCALLL; goto extract_sfmt_ccalll; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 1:
            if ((entire_insn & 0x79fff0ff) == 0x1a80040)
              { itype = FRVBF_INSN_CFCKNO; goto extract_sfmt_cfckra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x79fff0fc) == 0x9a80000)
              { itype = FRVBF_INSN_CCKC; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3:
            if ((entire_insn & 0x79fff0fc) == 0x9a80040)
              { itype = FRVBF_INSN_CFCKU; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 4:
            if ((entire_insn & 0x79fff0fc) == 0x11a80000)
              { itype = FRVBF_INSN_CCKV; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x79fff0fc) == 0x11a80040)
              { itype = FRVBF_INSN_CFCKGT; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 6:
            if ((entire_insn & 0x79fff0fc) == 0x19a80000)
              { itype = FRVBF_INSN_CCKLT; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 7:
            if ((entire_insn & 0x79fff0fc) == 0x19a80040)
              { itype = FRVBF_INSN_CFCKUG; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x79fff0fc) == 0x21a80000)
              { itype = FRVBF_INSN_CCKEQ; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9:
            if ((entire_insn & 0x79fff0fc) == 0x21a80040)
              { itype = FRVBF_INSN_CFCKLT; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 10:
            if ((entire_insn & 0x79fff0fc) == 0x29a80000)
              { itype = FRVBF_INSN_CCKLS; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 11:
            if ((entire_insn & 0x79fff0fc) == 0x29a80040)
              { itype = FRVBF_INSN_CFCKUL; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 12:
            if ((entire_insn & 0x79fff0fc) == 0x31a80000)
              { itype = FRVBF_INSN_CCKN; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 13:
            if ((entire_insn & 0x79fff0fc) == 0x31a80040)
              { itype = FRVBF_INSN_CFCKLG; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 14:
            if ((entire_insn & 0x79fff0fc) == 0x39a80000)
              { itype = FRVBF_INSN_CCKLE; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x79fff0fc) == 0x39a80040)
              { itype = FRVBF_INSN_CFCKNE; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 16:
            if ((entire_insn & 0x79fff0ff) == 0x41a80000)
              { itype = FRVBF_INSN_CCKRA; goto extract_sfmt_cckra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 17:
            if ((entire_insn & 0x79fff0fc) == 0x41a80040)
              { itype = FRVBF_INSN_CFCKEQ; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 18:
            if ((entire_insn & 0x79fff0fc) == 0x49a80000)
              { itype = FRVBF_INSN_CCKNC; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 19:
            if ((entire_insn & 0x79fff0fc) == 0x49a80040)
              { itype = FRVBF_INSN_CFCKUE; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 20:
            if ((entire_insn & 0x79fff0fc) == 0x51a80000)
              { itype = FRVBF_INSN_CCKNV; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 21:
            if ((entire_insn & 0x79fff0fc) == 0x51a80040)
              { itype = FRVBF_INSN_CFCKGE; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 22:
            if ((entire_insn & 0x79fff0fc) == 0x59a80000)
              { itype = FRVBF_INSN_CCKGE; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 23:
            if ((entire_insn & 0x79fff0fc) == 0x59a80040)
              { itype = FRVBF_INSN_CFCKUGE; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 24:
            if ((entire_insn & 0x79fff0fc) == 0x61a80000)
              { itype = FRVBF_INSN_CCKNE; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 25:
            if ((entire_insn & 0x79fff0fc) == 0x61a80040)
              { itype = FRVBF_INSN_CFCKLE; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 26:
            if ((entire_insn & 0x79fff0fc) == 0x69a80000)
              { itype = FRVBF_INSN_CCKHI; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 27:
            if ((entire_insn & 0x79fff0fc) == 0x69a80040)
              { itype = FRVBF_INSN_CFCKULE; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 28:
            if ((entire_insn & 0x79fff0fc) == 0x71a80000)
              { itype = FRVBF_INSN_CCKP; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 29:
            if ((entire_insn & 0x79fff0fc) == 0x71a80040)
              { itype = FRVBF_INSN_CFCKO; goto extract_sfmt_cfckne; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 30:
            if ((entire_insn & 0x79fff0fc) == 0x79a80000)
              { itype = FRVBF_INSN_CCKGT; goto extract_sfmt_cckeq; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 31:
            if ((entire_insn & 0x79fff0ff) == 0x79a80040)
              { itype = FRVBF_INSN_CFCKRA; goto extract_sfmt_cfckra; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 107:
        {
          unsigned int val1 = (((insn >> 6) & (1 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1fff0c0) == 0x1ac0000)
              { itype = FRVBF_INSN_CFITOS; goto extract_sfmt_cfitos; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x1fff0c0) == 0x1ac0040)
              { itype = FRVBF_INSN_CFSTOI; goto extract_sfmt_cfstoi; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 108:
        {
          unsigned int val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1fff0c0) == 0x1b00000)
              { itype = FRVBF_INSN_CFMOVS; goto extract_sfmt_cfmovs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x1fff0c0) == 0x1b00040)
              { itype = FRVBF_INSN_CFNEGS; goto extract_sfmt_cfmovs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x1fff0c0) == 0x1b00080)
              { itype = FRVBF_INSN_CFABSS; goto extract_sfmt_cfmovs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 109:
        {
          unsigned int val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          case 0: itype = FRVBF_INSN_CFADDS; goto extract_sfmt_cfadds;
          case 1: itype = FRVBF_INSN_CFSUBS; goto extract_sfmt_cfadds;
          case 2:
            if ((entire_insn & 0x79fc00c0) == 0x1b40080)
              { itype = FRVBF_INSN_CFCMPS; goto extract_sfmt_cfcmps; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 110:
        {
          unsigned int val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          case 0: itype = FRVBF_INSN_CFMULS; goto extract_sfmt_cfadds;
          case 1: itype = FRVBF_INSN_CFDIVS; goto extract_sfmt_cfadds;
          case 2:
            if ((entire_insn & 0x1fff0c0) == 0x1b80080)
              { itype = FRVBF_INSN_CFSQRTS; goto extract_sfmt_cfmovs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 111:
        {
          unsigned int val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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:
            if ((entire_insn & 0x1fff0c0) == 0x1c000c0)
              { itype = FRVBF_INSN_CMNOT; goto extract_sfmt_cmnot; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 113:
        {
          unsigned int val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          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 val1 = (((insn >> 6) & (1 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1fc00c0) == 0x1d80080)
              { itype = FRVBF_INSN_CMEXPDHW; goto extract_sfmt_cmexpdhw; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x1fc00c0) == 0x1d800c0)
              { itype = FRVBF_INSN_CMEXPDHD; goto extract_sfmt_cmexpdhd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 119:
        {
          unsigned int val1 = (((insn >> 6) & (3 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1fff0c0) == 0x1dc0000)
              { itype = FRVBF_INSN_CMBTOH; goto extract_sfmt_cmbtoh; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x1fff0c0) == 0x1dc0040)
              { itype = FRVBF_INSN_CMHTOB; goto extract_sfmt_cmhtob; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x1fff0c0) == 0x1dc0080)
              { itype = FRVBF_INSN_CMBTOHE; goto extract_sfmt_cmbtohe; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 120:
        {
          unsigned int val1 = (((insn >> 6) & (63 << 0)));
          switch (val1)
          {
          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:
            if ((entire_insn & 0x1fc0fff) == 0x1e00100)
              { itype = FRVBF_INSN_MADDACCS; goto extract_sfmt_maddaccs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x1fc0fff) == 0x1e00140)
              { itype = FRVBF_INSN_MSUBACCS; goto extract_sfmt_maddaccs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 6:
            if ((entire_insn & 0x1fc0fff) == 0x1e00180)
              { itype = FRVBF_INSN_MDADDACCS; goto extract_sfmt_mdaddaccs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 7:
            if ((entire_insn & 0x1fc0fff) == 0x1e001c0)
              { itype = FRVBF_INSN_MDSUBACCS; goto extract_sfmt_mdaddaccs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x1fc0fff) == 0x1e00200)
              { itype = FRVBF_INSN_MASACCS; goto extract_sfmt_masaccs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9:
            if ((entire_insn & 0x1fc0fff) == 0x1e00240)
              { itype = FRVBF_INSN_MDASACCS; goto extract_sfmt_mdasaccs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 10:
            if ((entire_insn & 0x1ffffc0) == 0x1e00280)
              { itype = FRVBF_INSN_MABSHS; goto extract_sfmt_mabshs; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x1ffffe0) == 0x1e00840)
              { itype = FRVBF_INSN_MHSETLOH; goto extract_sfmt_mhsetloh; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 34: itype = FRVBF_INSN_MHSETHIS; goto extract_sfmt_mhsethis;
          case 35:
            if ((entire_insn & 0x1ffffe0) == 0x1e008c0)
              { itype = FRVBF_INSN_MHSETHIH; goto extract_sfmt_mhsethih; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 36: itype = FRVBF_INSN_MHDSETS; goto extract_sfmt_mhdsets;
          case 37:
            if ((entire_insn & 0x1ffffe0) == 0x1e00940)
              { itype = FRVBF_INSN_MHDSETH; goto extract_sfmt_mhdseth; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 121:
        {
          unsigned int val1 = (((insn >> 7) & (1 << 3)) | ((insn >> 6) & (7 << 0)));
          switch (val1)
          {
          case 0:
            {
              unsigned int val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40000)
                  { itype = FRVBF_INSN_FITOS; goto extract_sfmt_fitos; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1: itype = FRVBF_INSN_FMULS; goto extract_sfmt_fadds;
              case 2:
                if ((entire_insn & 0x1ffffc0) == 0x1e40800)
                  { itype = FRVBF_INSN_NFITOS; goto extract_sfmt_nfitos; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 3: itype = FRVBF_INSN_NFMULS; goto extract_sfmt_nfadds;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 1:
            {
              unsigned int val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40040)
                  { itype = FRVBF_INSN_FSTOI; goto extract_sfmt_fstoi; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1: itype = FRVBF_INSN_FDIVS; goto extract_sfmt_fadds;
              case 2:
                if ((entire_insn & 0x1ffffc0) == 0x1e40840)
                  { itype = FRVBF_INSN_NFSTOI; goto extract_sfmt_nfstoi; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 3: itype = FRVBF_INSN_NFDIVS; goto extract_sfmt_nfadds;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 2:
            {
              unsigned int val2 = (((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40080)
                  { itype = FRVBF_INSN_FMOVS; goto extract_sfmt_fmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1:
                if ((entire_insn & 0x79fc0fc0) == 0x1e40280)
                  { itype = FRVBF_INSN_FCMPS; goto extract_sfmt_fcmps; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 3:
            {
              unsigned int val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e400c0)
                  { itype = FRVBF_INSN_FNEGS; goto extract_sfmt_fmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              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 val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40100)
                  { itype = FRVBF_INSN_FABSS; goto extract_sfmt_fmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              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 val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40140)
                  { itype = FRVBF_INSN_FSQRTS; goto extract_sfmt_fmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1:
                if ((entire_insn & 0x7fffffff) == 0x1e40340)
                  { itype = FRVBF_INSN_FNOP; goto extract_sfmt_rei; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 2:
                if ((entire_insn & 0x1ffffc0) == 0x1e40940)
                  { itype = FRVBF_INSN_NFSQRTS; goto extract_sfmt_nfsqrts; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 6:
            {
              unsigned int val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              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 val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              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 val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40400)
                  { itype = FRVBF_INSN_FDITOS; goto extract_sfmt_fditos; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1: itype = FRVBF_INSN_FDMULS; goto extract_sfmt_fmas;
              case 2:
                if ((entire_insn & 0x1ffffc0) == 0x1e40c00)
                  { itype = FRVBF_INSN_NFDITOS; goto extract_sfmt_fditos; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 3: itype = FRVBF_INSN_NFDMULS; goto extract_sfmt_fmas;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 9:
            {
              unsigned int val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40440)
                  { itype = FRVBF_INSN_FDSTOI; goto extract_sfmt_fdstoi; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1: itype = FRVBF_INSN_FDDIVS; goto extract_sfmt_fmas;
              case 2:
                if ((entire_insn & 0x1ffffc0) == 0x1e40c40)
                  { itype = FRVBF_INSN_NFDSTOI; goto extract_sfmt_fdstoi; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 3: itype = FRVBF_INSN_NFDDIVS; goto extract_sfmt_fmas;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 10:
            {
              unsigned int val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40480)
                  { itype = FRVBF_INSN_FDMOVS; goto extract_sfmt_fdmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1:
                if ((entire_insn & 0x79fc0fc0) == 0x1e40680)
                  { itype = FRVBF_INSN_FDCMPS; goto extract_sfmt_fdcmps; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 3:
                if ((entire_insn & 0x79fc0fc0) == 0x1e40e80)
                  { itype = FRVBF_INSN_NFDCMPS; goto extract_sfmt_nfdcmps; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 11:
            {
              unsigned int val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e404c0)
                  { itype = FRVBF_INSN_FDNEGS; goto extract_sfmt_fdmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              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 val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40500)
                  { itype = FRVBF_INSN_FDABSS; goto extract_sfmt_fdmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              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 val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffc0) == 0x1e40540)
                  { itype = FRVBF_INSN_FDSQRTS; goto extract_sfmt_fdmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1: itype = FRVBF_INSN_FDMSS; goto extract_sfmt_fdmas;
              case 2:
                if ((entire_insn & 0x1ffffc0) == 0x1e40d40)
                  { itype = FRVBF_INSN_NFDSQRTS; goto extract_sfmt_fdmovs; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 3: itype = FRVBF_INSN_NFDMSS; goto extract_sfmt_fdmas;
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 14:
            {
              unsigned int val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              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 val2 = (((insn >> 10) & (1 << 1)) | ((insn >> 9) & (1 << 0)));
              switch (val2)
              {
              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 val1 = (((insn >> 6) & (15 << 0)));
          switch (val1)
          {
          case 0:
            if ((entire_insn & 0x1ffffc0) == 0x1e80000)
              { itype = FRVBF_INSN_FITOD; goto extract_sfmt_fitod; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 1:
            if ((entire_insn & 0x1ffffc0) == 0x1e80040)
              { itype = FRVBF_INSN_FDTOI; goto extract_sfmt_fdtoi; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 2:
            if ((entire_insn & 0x1ffffc0) == 0x1e80080)
              { itype = FRVBF_INSN_FMOVD; goto extract_sfmt_fmovd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 3:
            if ((entire_insn & 0x1ffffc0) == 0x1e800c0)
              { itype = FRVBF_INSN_FNEGD; goto extract_sfmt_fmovd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 4:
            if ((entire_insn & 0x1ffffc0) == 0x1e80100)
              { itype = FRVBF_INSN_FABSD; goto extract_sfmt_fmovd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 5:
            if ((entire_insn & 0x1ffffc0) == 0x1e80140)
              { itype = FRVBF_INSN_FSQRTD; goto extract_sfmt_fmovd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 6:
            if ((entire_insn & 0x1fc0fc0) == 0x1e80180)
              { itype = FRVBF_INSN_FADDD; goto extract_sfmt_faddd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 7:
            if ((entire_insn & 0x1fc0fc0) == 0x1e801c0)
              { itype = FRVBF_INSN_FSUBD; goto extract_sfmt_faddd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 8:
            if ((entire_insn & 0x1fc0fc0) == 0x1e80200)
              { itype = FRVBF_INSN_FMULD; goto extract_sfmt_faddd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 9:
            if ((entire_insn & 0x1fc0fc0) == 0x1e80240)
              { itype = FRVBF_INSN_FDIVD; goto extract_sfmt_faddd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 10:
            if ((entire_insn & 0x79fc0fc0) == 0x1e80280)
              { itype = FRVBF_INSN_FCMPD; goto extract_sfmt_fcmpd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 11:
            if ((entire_insn & 0x1fc0fc0) == 0x1e802c0)
              { itype = FRVBF_INSN_FMADDD; goto extract_sfmt_fmaddd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 12:
            if ((entire_insn & 0x1fc0fc0) == 0x1e80300)
              { itype = FRVBF_INSN_FMSUBD; goto extract_sfmt_fmaddd; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 14:
            if ((entire_insn & 0x1fc0fc0) == 0x1e80380)
              { itype = FRVBF_INSN_FMAD; goto extract_sfmt_fmas; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x1fc0fc0) == 0x1e803c0)
              { itype = FRVBF_INSN_FMSD; goto extract_sfmt_fmas; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 123:
        {
          unsigned int val1 = (((insn >> 6) & (63 << 0)));
          switch (val1)
          {
          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:
            if ((entire_insn & 0x1ffffc0) == 0x1ec00c0)
              { itype = FRVBF_INSN_MNOT; goto extract_sfmt_mnot; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x79fc0fc0) == 0x1ec0380)
              { itype = FRVBF_INSN_MCMPSH; goto extract_sfmt_mcmpsh; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 15:
            if ((entire_insn & 0x79fc0fc0) == 0x1ec03c0)
              { itype = FRVBF_INSN_MCMPUH; goto extract_sfmt_mcmpsh; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          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:
            if ((entire_insn & 0x1fc0fff) == 0x1ec0d40)
              { itype = FRVBF_INSN_MUNPACKH; goto extract_sfmt_munpackh; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 54: itype = FRVBF_INSN_MDPACKH; goto extract_sfmt_mdpackh;
          case 55:
            if ((entire_insn & 0x1fc0fff) == 0x1ec0dc0)
              { itype = FRVBF_INSN_MDUNPACKH; goto extract_sfmt_mdunpackh; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 56:
            if ((entire_insn & 0x1ffffc0) == 0x1ec0e00)
              { itype = FRVBF_INSN_MBTOH; goto extract_sfmt_mbtoh; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 57:
            if ((entire_insn & 0x1ffffc0) == 0x1ec0e40)
              { itype = FRVBF_INSN_MHTOB; goto extract_sfmt_mhtob; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 58:
            if ((entire_insn & 0x1ffffc0) == 0x1ec0e80)
              { itype = FRVBF_INSN_MBTOHE; goto extract_sfmt_mbtohe; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 59:
            {
              unsigned int val2 = (((insn >> 17) & (1 << 0)));
              switch (val2)
              {
              case 0:
                if ((entire_insn & 0x1ffffff) == 0x1ec0ec0)
                  { itype = FRVBF_INSN_MCLRACC_0; goto extract_sfmt_mclracc_0; }
                itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              case 1:
                {
                  unsigned int val3 = (((insn >> 25) & (63 << 0)));
                  switch (val3)
                  {
                  case 0:
                  case 1:
                  case 2:
                  case 3:
                  case 4:
                  case 5:
                  case 6:
                  case 7:
                  case 8:
                  case 9:
                  case 10:
                  case 11:
                  case 12:
                  case 13:
                  case 14:
                  case 15:
                  case 16:
                  case 17:
                  case 18:
                  case 19:
                  case 20:
                  case 21:
                  case 22:
                  case 23:
                  case 24:
                  case 25:
                  case 26:
                  case 27:
                  case 28:
                  case 29:
                  case 30:
                  case 31:
                  case 32:
                  case 33:
                  case 34:
                  case 35:
                  case 36:
                  case 37:
                  case 38:
                  case 39:
                  case 40:
                  case 41:
                  case 42:
                  case 43:
                  case 44:
                  case 45:
                  case 46:
                  case 47:
                  case 48:
                  case 49:
                  case 50:
                  case 51:
                  case 52:
                  case 53:
                  case 54:
                  case 55:
                  case 56:
                  case 57:
                  case 58:
                  case 59:
                  case 60:
                  case 61:
                  case 62:
                    if ((entire_insn & 0x1ffffff) == 0x1ee0ec0)
                      { itype = FRVBF_INSN_MCLRACC_1; goto extract_sfmt_mclracc_0; }
                    itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
                  case 63:
                    if ((entire_insn & 0x7fffffff) == 0x7fee0ec0)
                      { itype = FRVBF_INSN_MNOP; goto extract_sfmt_rei; }
                    itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
                  default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
                  }
                }
              default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
              }
            }
          case 60:
            if ((entire_insn & 0x1fc0fff) == 0x1ec0f00)
              { itype = FRVBF_INSN_MRDACC; goto extract_sfmt_mrdacc; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 61:
            if ((entire_insn & 0x1fc0fff) == 0x1ec0f40)
              { itype = FRVBF_INSN_MWTACC; goto extract_sfmt_mwtacc; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 62:
            if ((entire_insn & 0x1fc0fff) == 0x1ec0f80)
              { itype = FRVBF_INSN_MRDACCG; goto extract_sfmt_mrdaccg; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          case 63:
            if ((entire_insn & 0x1fc0fff) == 0x1ec0fc0)
              { itype = FRVBF_INSN_MWTACCG; goto extract_sfmt_mwtaccg; }
            itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          default: itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
          }
        }
      case 124:
        if ((entire_insn & 0x1fc0fc0) == 0x1f00000)
          { itype = FRVBF_INSN_MCOP1; goto extract_sfmt_rei; }
        itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      case 125:
        if ((entire_insn & 0x1fc0fc0) == 0x1f40000)
          { itype = FRVBF_INSN_MCOP2; goto extract_sfmt_rei; }
        itype = FRVBF_INSN_X_INVALID; goto extract_sfmt_empty;
      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.sfmt_empty.f


  /* Record the fields for the semantic handler.  */
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_slass:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_slass", "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_scutss:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_CCi_3) = ((FLD (f_CCi)) & (3));
      FLD (out_GRk) = f_GRk;
      FLD (out_h_iccr_UQI_and__INT_index_of__INT_CCi_3) = ((FLD (f_CCi)) & (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_csmulcc:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_CCi_3) = ((FLD (f_CCi)) & (3));
      FLD (out_GRdoublek) = f_GRk;
      FLD (out_h_iccr_UQI_and__INT_index_of__INT_CCi_3) = ((FLD (f_CCi)) & (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_addx:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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_SINT (insn, 32, 15, 16);

  /* Record the fields for the semantic handler.  */
  FLD (f_s16) = f_s16;
  FLD (f_GRk) = f_GRk;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_GRj_1) = ((FLD (f_GRj)) + (1));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_int_USI_add__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movfgd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_GRj) = f_GRj;
      FLD (out_h_gr_USI_add__INT_index_of__INT_GRj_1) = ((FLD (f_GRj)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movgfq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_GRj_1) = ((FLD (f_GRj)) + (1));
      FLD (in_h_gr_USI_add__INT_index_of__INT_GRj_2) = ((FLD (f_GRj)) + (2));
      FLD (in_h_gr_USI_add__INT_index_of__INT_GRj_3) = ((FLD (f_GRj)) + (3));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_int_USI_add__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_int_USI_add__INT_index_of__INT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_int_USI_add__INT_index_of__INT_FRintk_3) = ((FLD (f_FRk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movfgq:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (in_h_fr_int_USI_add__INT_index_of__INT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (in_h_fr_int_USI_add__INT_index_of__INT_FRintk_3) = ((FLD (f_FRk)) + (3));
      FLD (out_GRj) = f_GRj;
      FLD (out_h_gr_USI_add__INT_index_of__INT_GRj_1) = ((FLD (f_GRj)) + (1));
      FLD (out_h_gr_USI_add__INT_index_of__INT_GRj_2) = ((FLD (f_GRj)) + (2));
      FLD (out_h_gr_USI_add__INT_index_of__INT_GRj_3) = ((FLD (f_GRj)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmovgf:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_GRj_1) = ((FLD (f_GRj)) + (1));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_int_USI_add__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmovfgd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_GRj) = f_GRj;
      FLD (out_h_gr_USI_add__INT_index_of__INT_GRj_1) = ((FLD (f_GRj)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_movgs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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_SINT (insn, 32, 15, 16)) * (4))) + (pc));

  /* Record the fields for the semantic handler.  */
  FLD (f_hint) = f_hint;
  FLD (i_label16) = f_label16;
  CGEN_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_WORD 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_SINT (insn, 32, 15, 16)) * (4))) + (pc));

  /* Record the fields for the semantic handler.  */
  FLD (f_hint) = f_hint;
  FLD (i_label16) = f_label16;
  CGEN_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_WORD 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_SINT (insn, 32, 15, 16)) * (4))) + (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;
  CGEN_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_fbra:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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_SINT (insn, 32, 15, 16)) * (4))) + (pc));

  /* Record the fields for the semantic handler.  */
  FLD (f_hint) = f_hint;
  FLD (i_label16) = f_label16;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fbra", "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_fbno:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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_SINT (insn, 32, 15, 16)) * (4))) + (pc));

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

#undef FLD
    return idesc;
  }

 extract_sfmt_fbne:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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_SINT (insn, 32, 15, 16)) * (4))) + (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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_fbralr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fbralr", "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_fbnolr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fbnolr", "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_fbeqlr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_fcbralr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fcbralr", "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_fcbnolr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fcbnolr", "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_fcbeqlr:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_calll:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_calll", "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_WORD 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_SINT (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;
  CGEN_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_callil:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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_SINT (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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_callil", "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_WORD insn = entire_insn;
#define FLD(f) abuf->fields.sfmt_call.f
    INT f_labelH6;
    UINT f_labelL18;
    INT f_label24;

    f_labelH6 = EXTRACT_LSB0_SINT (insn, 32, 30, 6);
    f_labelL18 = EXTRACT_LSB0_UINT (insn, 32, 17, 18);
{
  f_label24 = ((((((((f_labelH6) * (((1) << (18))))) | (f_labelL18))) * (4))) + (pc));
}

  /* Record the fields for the semantic handler.  */
  FLD (i_label24) = f_label24;
  CGEN_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_WORD 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;
  CGEN_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.sfmt_empty.f


  /* Record the fields for the semantic handler.  */
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_ftra:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ftra", "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_ftne:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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_SINT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_ftira:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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_SINT (insn, 32, 11, 12);

  /* Record the fields for the semantic handler.  */
  FLD (f_GRi) = f_GRi;
  FLD (f_d12) = f_d12;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ftira", "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_ftine:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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_SINT (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;
  CGEN_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.  */
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_ccalll:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ccalll", "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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_FRintj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__INT_index_of__INT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fdstoi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_int_USI_add__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfitos:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__INT_index_of__INT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfmovs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FCCi_2) = f_FCCi_2;
      FLD (out_h_fccr_UQI_add__INT_index_of__INT_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__INT_index_of__INT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfmadds:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__INT_index_of__INT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_fdmas:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRi_2) = ((FLD (f_FRi)) + (2));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRi_3) = ((FLD (f_FRi)) + (3));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRj_2) = ((FLD (f_FRj)) + (2));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRj_3) = ((FLD (f_FRj)) + (3));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__INT_index_of__INT_FRk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_SF_add__INT_index_of__INT_FRk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_SF_add__INT_index_of__INT_FRk_3) = ((FLD (f_FRk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cfmas:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRk) = f_FRk;
      FLD (out_h_fr_SF_add__INT_index_of__INT_FRk_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_nfdcmps:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRi_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_SF_add__INT_index_of__INT_FRj_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FCCi_2) = f_FCCi_2;
      FLD (out_h_fccr_UQI_add__INT_index_of__INT_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_WORD 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_SINT (insn, 32, 17, 6);
    f_u12_l = EXTRACT_LSB0_UINT (insn, 32, 5, 6);
{
  f_u12 = ((((f_u12_h) * (64))) | (f_u12_l));
}

  /* Record the fields for the semantic handler.  */
  FLD (f_u12) = f_u12;
  FLD (f_FRk) = f_FRk;
  CGEN_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_WORD 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_SINT (insn, 32, 17, 6);
    f_u12_l = EXTRACT_LSB0_UINT (insn, 32, 5, 6);
{
  f_u12 = ((((f_u12_h) * (64))) | (f_u12_l));
}

  /* Record the fields for the semantic handler.  */
  FLD (f_u12) = f_u12;
  FLD (f_FRk) = f_FRk;
  CGEN_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_WORD 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_SINT (insn, 32, 17, 6);
    f_u12_l = EXTRACT_LSB0_UINT (insn, 32, 5, 6);
{
  f_u12 = ((((f_u12_h) * (64))) | (f_u12_l));
}

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_u12) = f_u12;
  CGEN_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__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhsetloh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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_SINT (insn, 32, 4, 5);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_s5) = f_s5;
  CGEN_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_WORD 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_SINT (insn, 32, 4, 5);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_s5) = f_s5;
  CGEN_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_WORD 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_SINT (insn, 32, 4, 5);

  /* Record the fields for the semantic handler.  */
  FLD (f_FRk) = f_FRk;
  FLD (f_s5) = f_s5;
  CGEN_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__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mand:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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__INT_index_of__INT_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_WORD 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;
  CGEN_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__INT_index_of__INT_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_WORD 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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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_WORD 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_SINT (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;
  CGEN_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__INT_index_of__INT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_int_USI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_msllhi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_FRinti) = f_FRi;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdrotli:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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_SINT (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;
  CGEN_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__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_int_USI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcplhi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRinti_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRinti) = f_FRi;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcpli:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_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_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqsaths:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcmpsh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FCCk) = f_FCCk;
      FLD (out_h_fccr_UQI_add__INT_index_of__INT_FCCk_1) = ((FLD (f_FCCk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mabshs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmaddhss:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmqaddhss:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqsllhi:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintieven) = f_FRi;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_maddaccs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_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_WORD 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;
  CGEN_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__INT_index_of__INT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (in_h_acc40S_DI_add__INT_index_of__INT_ACC40Si_2) = ((FLD (f_ACC40Si)) + (2));
      FLD (in_h_acc40S_DI_add__INT_index_of__INT_ACC40Si_3) = ((FLD (f_ACC40Si)) + (3));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_masaccs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdasaccs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_ACC40Si_1) = ((FLD (f_ACC40Si)) + (1));
      FLD (in_h_acc40S_DI_add__INT_index_of__INT_ACC40Si_2) = ((FLD (f_ACC40Si)) + (2));
      FLD (in_h_acc40S_DI_add__INT_index_of__INT_ACC40Si_3) = ((FLD (f_ACC40Si)) + (3));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mmulhs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmmulhs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqmulhs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmqmulhs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mmachs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mmachu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_DI_add__INT_index_of__INT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Uk) = f_ACC40Uk;
      FLD (out_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmmachs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmmachu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_DI_add__INT_index_of__INT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_ACC40Uk) = f_ACC40Uk;
      FLD (out_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqmachs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (in_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (in_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mqmachu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_DI_add__INT_index_of__INT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (in_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_2) = ((FLD (f_ACC40Uk)) + (2));
      FLD (in_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_3) = ((FLD (f_ACC40Uk)) + (3));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Uk) = f_ACC40Uk;
      FLD (out_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (out_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_2) = ((FLD (f_ACC40Uk)) + (2));
      FLD (out_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_3) = ((FLD (f_ACC40Uk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmqmachs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (in_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (in_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_2) = ((FLD (f_ACC40Sk)) + (2));
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_3) = ((FLD (f_ACC40Sk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmqmachu:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_DI_add__INT_index_of__INT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (in_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_2) = ((FLD (f_ACC40Uk)) + (2));
      FLD (in_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_3) = ((FLD (f_ACC40Uk)) + (3));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Uk) = f_ACC40Uk;
      FLD (out_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_1) = ((FLD (f_ACC40Uk)) + (1));
      FLD (out_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_2) = ((FLD (f_ACC40Uk)) + (2));
      FLD (out_h_acc40U_DI_add__INT_index_of__INT_ACC40Uk_3) = ((FLD (f_ACC40Uk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mcpxrs:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_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_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_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_WORD 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;
  CGEN_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__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_ACC40Sk) = f_ACC40Sk;
      FLD (out_h_acc40S_DI_add__INT_index_of__INT_ACC40Sk_1) = ((FLD (f_ACC40Sk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mexpdhw:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmexpdhw:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mexpdhd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmexpdhd:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mpackh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdpackh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_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__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_munpackh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRinti_0) = ((FLD (f_FRi)) + (0));
      FLD (out_FRinti) = f_FRi;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_add__INT_0_1) = ((FLD (f_FRk)) + (((0) + (1))));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_add__INT_0_1) = ((FLD (f_FRk)) + (((0) + (1))));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mdunpackh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_0) = ((FLD (f_FRi)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintieven_1) = ((FLD (f_FRi)) + (1));
      FLD (out_FRintieven) = f_FRi;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_add__INT_0_1) = ((FLD (f_FRk)) + (((0) + (1))));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_add__INT_2_1) = ((FLD (f_FRk)) + (((2) + (1))));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_add__INT_0_1) = ((FLD (f_FRk)) + (((0) + (1))));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_add__INT_2_1) = ((FLD (f_FRk)) + (((2) + (1))));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mbtoh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_1_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_2_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_3_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmbtoh:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_1_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_2_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_3_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintkeven) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintkeven_1) = ((FLD (f_FRk)) + (1));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mhtob:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintjeven) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_0_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_1_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_2_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_3_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmhtob:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_hi_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_lo_UHI_add__INT_index_of__INT_FRintjeven_1) = ((FLD (f_FRj)) + (1));
      FLD (out_FRintjeven) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_0_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_1_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_2_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_3_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mbtohe:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_1_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_2_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_3_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_3) = ((FLD (f_FRk)) + (3));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_3) = ((FLD (f_FRk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_cmbtohe:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_1_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_2_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (in_h_fr_3_UHI_add__INT_index_of__INT_FRintj_0) = ((FLD (f_FRj)) + (0));
      FLD (out_FRintj) = f_FRj;
      FLD (out_FRintk) = f_FRk;
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_hi_UHI_add__INT_index_of__INT_FRintk_3) = ((FLD (f_FRk)) + (3));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_0) = ((FLD (f_FRk)) + (0));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_1) = ((FLD (f_FRk)) + (1));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_2) = ((FLD (f_FRk)) + (2));
      FLD (out_h_fr_lo_UHI_add__INT_index_of__INT_FRintk_3) = ((FLD (f_FRk)) + (3));
    }
#endif
#undef FLD
    return idesc;
  }

 extract_sfmt_mclracc_0:
  {
    const IDESC *idesc = &frvbf_insn_data[itype];
    CGEN_INSN_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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_WORD 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;
  CGEN_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;
  }

}
