| /* Simulator instruction decoder for bpfbf_ebpfbe. |
| |
| THIS FILE IS MACHINE GENERATED WITH CGEN. |
| |
| Copyright (C) 1996-2021 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 bpfbf |
| #define WANT_CPU_BPFBF |
| |
| #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 bpfbf_ebpfbe_insn_data[BPFBF_EBPFBE_INSN__MAX]; |
| |
| /* Commas between elements are contained in the macros. |
| Some of these are conditionally compiled out. */ |
| |
| static const struct insn_sem bpfbf_ebpfbe_insn_sem[] = |
| { |
| { VIRTUAL_INSN_X_INVALID, BPFBF_EBPFBE_INSN_X_INVALID, BPFBF_EBPFBE_SFMT_EMPTY }, |
| { VIRTUAL_INSN_X_AFTER, BPFBF_EBPFBE_INSN_X_AFTER, BPFBF_EBPFBE_SFMT_EMPTY }, |
| { VIRTUAL_INSN_X_BEFORE, BPFBF_EBPFBE_INSN_X_BEFORE, BPFBF_EBPFBE_SFMT_EMPTY }, |
| { VIRTUAL_INSN_X_CTI_CHAIN, BPFBF_EBPFBE_INSN_X_CTI_CHAIN, BPFBF_EBPFBE_SFMT_EMPTY }, |
| { VIRTUAL_INSN_X_CHAIN, BPFBF_EBPFBE_INSN_X_CHAIN, BPFBF_EBPFBE_SFMT_EMPTY }, |
| { VIRTUAL_INSN_X_BEGIN, BPFBF_EBPFBE_INSN_X_BEGIN, BPFBF_EBPFBE_SFMT_EMPTY }, |
| { BPF_INSN_ADDIBE, BPFBF_EBPFBE_INSN_ADDIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_ADDRBE, BPFBF_EBPFBE_INSN_ADDRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_ADD32IBE, BPFBF_EBPFBE_INSN_ADD32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_ADD32RBE, BPFBF_EBPFBE_INSN_ADD32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_SUBIBE, BPFBF_EBPFBE_INSN_SUBIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_SUBRBE, BPFBF_EBPFBE_INSN_SUBRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_SUB32IBE, BPFBF_EBPFBE_INSN_SUB32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_SUB32RBE, BPFBF_EBPFBE_INSN_SUB32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_MULIBE, BPFBF_EBPFBE_INSN_MULIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_MULRBE, BPFBF_EBPFBE_INSN_MULRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_MUL32IBE, BPFBF_EBPFBE_INSN_MUL32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_MUL32RBE, BPFBF_EBPFBE_INSN_MUL32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_DIVIBE, BPFBF_EBPFBE_INSN_DIVIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_DIVRBE, BPFBF_EBPFBE_INSN_DIVRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_DIV32IBE, BPFBF_EBPFBE_INSN_DIV32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_DIV32RBE, BPFBF_EBPFBE_INSN_DIV32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_ORIBE, BPFBF_EBPFBE_INSN_ORIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_ORRBE, BPFBF_EBPFBE_INSN_ORRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_OR32IBE, BPFBF_EBPFBE_INSN_OR32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_OR32RBE, BPFBF_EBPFBE_INSN_OR32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_ANDIBE, BPFBF_EBPFBE_INSN_ANDIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_ANDRBE, BPFBF_EBPFBE_INSN_ANDRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_AND32IBE, BPFBF_EBPFBE_INSN_AND32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_AND32RBE, BPFBF_EBPFBE_INSN_AND32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_LSHIBE, BPFBF_EBPFBE_INSN_LSHIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_LSHRBE, BPFBF_EBPFBE_INSN_LSHRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_LSH32IBE, BPFBF_EBPFBE_INSN_LSH32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_LSH32RBE, BPFBF_EBPFBE_INSN_LSH32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_RSHIBE, BPFBF_EBPFBE_INSN_RSHIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_RSHRBE, BPFBF_EBPFBE_INSN_RSHRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_RSH32IBE, BPFBF_EBPFBE_INSN_RSH32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_RSH32RBE, BPFBF_EBPFBE_INSN_RSH32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_MODIBE, BPFBF_EBPFBE_INSN_MODIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_MODRBE, BPFBF_EBPFBE_INSN_MODRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_MOD32IBE, BPFBF_EBPFBE_INSN_MOD32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_MOD32RBE, BPFBF_EBPFBE_INSN_MOD32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_XORIBE, BPFBF_EBPFBE_INSN_XORIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_XORRBE, BPFBF_EBPFBE_INSN_XORRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_XOR32IBE, BPFBF_EBPFBE_INSN_XOR32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_XOR32RBE, BPFBF_EBPFBE_INSN_XOR32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_ARSHIBE, BPFBF_EBPFBE_INSN_ARSHIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_ARSHRBE, BPFBF_EBPFBE_INSN_ARSHRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_ARSH32IBE, BPFBF_EBPFBE_INSN_ARSH32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, |
| { BPF_INSN_ARSH32RBE, BPFBF_EBPFBE_INSN_ARSH32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, |
| { BPF_INSN_NEGBE, BPFBF_EBPFBE_INSN_NEGBE, BPFBF_EBPFBE_SFMT_NEGBE }, |
| { BPF_INSN_NEG32BE, BPFBF_EBPFBE_INSN_NEG32BE, BPFBF_EBPFBE_SFMT_NEGBE }, |
| { BPF_INSN_MOVIBE, BPFBF_EBPFBE_INSN_MOVIBE, BPFBF_EBPFBE_SFMT_MOVIBE }, |
| { BPF_INSN_MOVRBE, BPFBF_EBPFBE_INSN_MOVRBE, BPFBF_EBPFBE_SFMT_MOVRBE }, |
| { BPF_INSN_MOV32IBE, BPFBF_EBPFBE_INSN_MOV32IBE, BPFBF_EBPFBE_SFMT_MOVIBE }, |
| { BPF_INSN_MOV32RBE, BPFBF_EBPFBE_INSN_MOV32RBE, BPFBF_EBPFBE_SFMT_MOVRBE }, |
| { BPF_INSN_ENDLEBE, BPFBF_EBPFBE_INSN_ENDLEBE, BPFBF_EBPFBE_SFMT_ENDLEBE }, |
| { BPF_INSN_ENDBEBE, BPFBF_EBPFBE_INSN_ENDBEBE, BPFBF_EBPFBE_SFMT_ENDLEBE }, |
| { BPF_INSN_LDDWBE, BPFBF_EBPFBE_INSN_LDDWBE, BPFBF_EBPFBE_SFMT_LDDWBE }, |
| { BPF_INSN_LDABSW, BPFBF_EBPFBE_INSN_LDABSW, BPFBF_EBPFBE_SFMT_LDABSW }, |
| { BPF_INSN_LDABSH, BPFBF_EBPFBE_INSN_LDABSH, BPFBF_EBPFBE_SFMT_LDABSH }, |
| { BPF_INSN_LDABSB, BPFBF_EBPFBE_INSN_LDABSB, BPFBF_EBPFBE_SFMT_LDABSB }, |
| { BPF_INSN_LDABSDW, BPFBF_EBPFBE_INSN_LDABSDW, BPFBF_EBPFBE_SFMT_LDABSDW }, |
| { BPF_INSN_LDINDWBE, BPFBF_EBPFBE_INSN_LDINDWBE, BPFBF_EBPFBE_SFMT_LDINDWBE }, |
| { BPF_INSN_LDINDHBE, BPFBF_EBPFBE_INSN_LDINDHBE, BPFBF_EBPFBE_SFMT_LDINDHBE }, |
| { BPF_INSN_LDINDBBE, BPFBF_EBPFBE_INSN_LDINDBBE, BPFBF_EBPFBE_SFMT_LDINDBBE }, |
| { BPF_INSN_LDINDDWBE, BPFBF_EBPFBE_INSN_LDINDDWBE, BPFBF_EBPFBE_SFMT_LDINDDWBE }, |
| { BPF_INSN_LDXWBE, BPFBF_EBPFBE_INSN_LDXWBE, BPFBF_EBPFBE_SFMT_LDXWBE }, |
| { BPF_INSN_LDXHBE, BPFBF_EBPFBE_INSN_LDXHBE, BPFBF_EBPFBE_SFMT_LDXHBE }, |
| { BPF_INSN_LDXBBE, BPFBF_EBPFBE_INSN_LDXBBE, BPFBF_EBPFBE_SFMT_LDXBBE }, |
| { BPF_INSN_LDXDWBE, BPFBF_EBPFBE_INSN_LDXDWBE, BPFBF_EBPFBE_SFMT_LDXDWBE }, |
| { BPF_INSN_STXWBE, BPFBF_EBPFBE_INSN_STXWBE, BPFBF_EBPFBE_SFMT_STXWBE }, |
| { BPF_INSN_STXHBE, BPFBF_EBPFBE_INSN_STXHBE, BPFBF_EBPFBE_SFMT_STXHBE }, |
| { BPF_INSN_STXBBE, BPFBF_EBPFBE_INSN_STXBBE, BPFBF_EBPFBE_SFMT_STXBBE }, |
| { BPF_INSN_STXDWBE, BPFBF_EBPFBE_INSN_STXDWBE, BPFBF_EBPFBE_SFMT_STXDWBE }, |
| { BPF_INSN_STBBE, BPFBF_EBPFBE_INSN_STBBE, BPFBF_EBPFBE_SFMT_STBBE }, |
| { BPF_INSN_STHBE, BPFBF_EBPFBE_INSN_STHBE, BPFBF_EBPFBE_SFMT_STHBE }, |
| { BPF_INSN_STWBE, BPFBF_EBPFBE_INSN_STWBE, BPFBF_EBPFBE_SFMT_STWBE }, |
| { BPF_INSN_STDWBE, BPFBF_EBPFBE_INSN_STDWBE, BPFBF_EBPFBE_SFMT_STDWBE }, |
| { BPF_INSN_JEQIBE, BPFBF_EBPFBE_INSN_JEQIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JEQRBE, BPFBF_EBPFBE_INSN_JEQRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JEQ32IBE, BPFBF_EBPFBE_INSN_JEQ32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JEQ32RBE, BPFBF_EBPFBE_INSN_JEQ32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JGTIBE, BPFBF_EBPFBE_INSN_JGTIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JGTRBE, BPFBF_EBPFBE_INSN_JGTRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JGT32IBE, BPFBF_EBPFBE_INSN_JGT32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JGT32RBE, BPFBF_EBPFBE_INSN_JGT32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JGEIBE, BPFBF_EBPFBE_INSN_JGEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JGERBE, BPFBF_EBPFBE_INSN_JGERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JGE32IBE, BPFBF_EBPFBE_INSN_JGE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JGE32RBE, BPFBF_EBPFBE_INSN_JGE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JLTIBE, BPFBF_EBPFBE_INSN_JLTIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JLTRBE, BPFBF_EBPFBE_INSN_JLTRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JLT32IBE, BPFBF_EBPFBE_INSN_JLT32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JLT32RBE, BPFBF_EBPFBE_INSN_JLT32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JLEIBE, BPFBF_EBPFBE_INSN_JLEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JLERBE, BPFBF_EBPFBE_INSN_JLERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JLE32IBE, BPFBF_EBPFBE_INSN_JLE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JLE32RBE, BPFBF_EBPFBE_INSN_JLE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSETIBE, BPFBF_EBPFBE_INSN_JSETIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSETRBE, BPFBF_EBPFBE_INSN_JSETRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSET32IBE, BPFBF_EBPFBE_INSN_JSET32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSET32RBE, BPFBF_EBPFBE_INSN_JSET32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JNEIBE, BPFBF_EBPFBE_INSN_JNEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JNERBE, BPFBF_EBPFBE_INSN_JNERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JNE32IBE, BPFBF_EBPFBE_INSN_JNE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JNE32RBE, BPFBF_EBPFBE_INSN_JNE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSGTIBE, BPFBF_EBPFBE_INSN_JSGTIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSGTRBE, BPFBF_EBPFBE_INSN_JSGTRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSGT32IBE, BPFBF_EBPFBE_INSN_JSGT32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSGT32RBE, BPFBF_EBPFBE_INSN_JSGT32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSGEIBE, BPFBF_EBPFBE_INSN_JSGEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSGERBE, BPFBF_EBPFBE_INSN_JSGERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSGE32IBE, BPFBF_EBPFBE_INSN_JSGE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSGE32RBE, BPFBF_EBPFBE_INSN_JSGE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSLTIBE, BPFBF_EBPFBE_INSN_JSLTIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSLTRBE, BPFBF_EBPFBE_INSN_JSLTRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSLT32IBE, BPFBF_EBPFBE_INSN_JSLT32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSLT32RBE, BPFBF_EBPFBE_INSN_JSLT32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSLEIBE, BPFBF_EBPFBE_INSN_JSLEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSLERBE, BPFBF_EBPFBE_INSN_JSLERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_JSLE32IBE, BPFBF_EBPFBE_INSN_JSLE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, |
| { BPF_INSN_JSLE32RBE, BPFBF_EBPFBE_INSN_JSLE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, |
| { BPF_INSN_CALLBE, BPFBF_EBPFBE_INSN_CALLBE, BPFBF_EBPFBE_SFMT_CALLBE }, |
| { BPF_INSN_JA, BPFBF_EBPFBE_INSN_JA, BPFBF_EBPFBE_SFMT_JA }, |
| { BPF_INSN_EXIT, BPFBF_EBPFBE_INSN_EXIT, BPFBF_EBPFBE_SFMT_EXIT }, |
| { BPF_INSN_XADDDWBE, BPFBF_EBPFBE_INSN_XADDDWBE, BPFBF_EBPFBE_SFMT_XADDDWBE }, |
| { BPF_INSN_XADDWBE, BPFBF_EBPFBE_INSN_XADDWBE, BPFBF_EBPFBE_SFMT_XADDWBE }, |
| { BPF_INSN_BRKPT, BPFBF_EBPFBE_INSN_BRKPT, BPFBF_EBPFBE_SFMT_EXIT }, |
| }; |
| |
| static const struct insn_sem bpfbf_ebpfbe_insn_sem_invalid = |
| { |
| VIRTUAL_INSN_X_INVALID, BPFBF_EBPFBE_INSN_X_INVALID, BPFBF_EBPFBE_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 |
| bpfbf_ebpfbe_init_idesc_table (SIM_CPU *cpu) |
| { |
| IDESC *id,*tabend; |
| const struct insn_sem *t,*tend; |
| int tabsize = BPFBF_EBPFBE_INSN__MAX; |
| IDESC *table = bpfbf_ebpfbe_insn_data; |
| |
| memset (table, 0, tabsize * sizeof (IDESC)); |
| |
| /* First set all entries to the `invalid insn'. */ |
| t = & bpfbf_ebpfbe_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 = bpfbf_ebpfbe_insn_sem, tend = t + sizeof (bpfbf_ebpfbe_insn_sem) / sizeof (*t); |
| t != tend; ++t) |
| { |
| init_idesc (cpu, & table[t->index], t); |
| } |
| |
| /* Link the IDESC table into the cpu. */ |
| CPU_IDESC (cpu) = table; |
| } |
| |
| /* Given an instruction, return a pointer to its IDESC entry. */ |
| |
| const IDESC * |
| bpfbf_ebpfbe_decode (SIM_CPU *current_cpu, IADDR pc, |
| CGEN_INSN_WORD base_insn, |
| ARGBUF *abuf) |
| { |
| /* Result of decoder. */ |
| BPFBF_EBPFBE_INSN_TYPE itype; |
| |
| { |
| CGEN_INSN_WORD insn = base_insn; |
| |
| { |
| unsigned int val = (((insn >> 0) & (255 << 0))); |
| switch (val) |
| { |
| case 4 : itype = BPFBF_EBPFBE_INSN_ADD32IBE; goto extract_sfmt_addibe; |
| case 5 : itype = BPFBF_EBPFBE_INSN_JA; goto extract_sfmt_ja; |
| case 7 : itype = BPFBF_EBPFBE_INSN_ADDIBE; goto extract_sfmt_addibe; |
| case 12 : itype = BPFBF_EBPFBE_INSN_ADD32RBE; goto extract_sfmt_addrbe; |
| case 15 : itype = BPFBF_EBPFBE_INSN_ADDRBE; goto extract_sfmt_addrbe; |
| case 20 : itype = BPFBF_EBPFBE_INSN_SUB32IBE; goto extract_sfmt_addibe; |
| case 21 : itype = BPFBF_EBPFBE_INSN_JEQIBE; goto extract_sfmt_jeqibe; |
| case 22 : itype = BPFBF_EBPFBE_INSN_JEQ32IBE; goto extract_sfmt_jeqibe; |
| case 23 : itype = BPFBF_EBPFBE_INSN_SUBIBE; goto extract_sfmt_addibe; |
| case 24 : itype = BPFBF_EBPFBE_INSN_LDDWBE; goto extract_sfmt_lddwbe; |
| case 28 : itype = BPFBF_EBPFBE_INSN_SUB32RBE; goto extract_sfmt_addrbe; |
| case 29 : itype = BPFBF_EBPFBE_INSN_JEQRBE; goto extract_sfmt_jeqrbe; |
| case 30 : itype = BPFBF_EBPFBE_INSN_JEQ32RBE; goto extract_sfmt_jeqrbe; |
| case 31 : itype = BPFBF_EBPFBE_INSN_SUBRBE; goto extract_sfmt_addrbe; |
| case 32 : itype = BPFBF_EBPFBE_INSN_LDABSW; goto extract_sfmt_ldabsw; |
| case 36 : itype = BPFBF_EBPFBE_INSN_MUL32IBE; goto extract_sfmt_addibe; |
| case 37 : itype = BPFBF_EBPFBE_INSN_JGTIBE; goto extract_sfmt_jeqibe; |
| case 38 : itype = BPFBF_EBPFBE_INSN_JGT32IBE; goto extract_sfmt_jeqibe; |
| case 39 : itype = BPFBF_EBPFBE_INSN_MULIBE; goto extract_sfmt_addibe; |
| case 40 : itype = BPFBF_EBPFBE_INSN_LDABSH; goto extract_sfmt_ldabsh; |
| case 44 : itype = BPFBF_EBPFBE_INSN_MUL32RBE; goto extract_sfmt_addrbe; |
| case 45 : itype = BPFBF_EBPFBE_INSN_JGTRBE; goto extract_sfmt_jeqrbe; |
| case 46 : itype = BPFBF_EBPFBE_INSN_JGT32RBE; goto extract_sfmt_jeqrbe; |
| case 47 : itype = BPFBF_EBPFBE_INSN_MULRBE; goto extract_sfmt_addrbe; |
| case 48 : itype = BPFBF_EBPFBE_INSN_LDABSB; goto extract_sfmt_ldabsb; |
| case 52 : itype = BPFBF_EBPFBE_INSN_DIV32IBE; goto extract_sfmt_addibe; |
| case 53 : itype = BPFBF_EBPFBE_INSN_JGEIBE; goto extract_sfmt_jeqibe; |
| case 54 : itype = BPFBF_EBPFBE_INSN_JGE32IBE; goto extract_sfmt_jeqibe; |
| case 55 : itype = BPFBF_EBPFBE_INSN_DIVIBE; goto extract_sfmt_addibe; |
| case 56 : itype = BPFBF_EBPFBE_INSN_LDABSDW; goto extract_sfmt_ldabsdw; |
| case 60 : itype = BPFBF_EBPFBE_INSN_DIV32RBE; goto extract_sfmt_addrbe; |
| case 61 : itype = BPFBF_EBPFBE_INSN_JGERBE; goto extract_sfmt_jeqrbe; |
| case 62 : itype = BPFBF_EBPFBE_INSN_JGE32RBE; goto extract_sfmt_jeqrbe; |
| case 63 : itype = BPFBF_EBPFBE_INSN_DIVRBE; goto extract_sfmt_addrbe; |
| case 64 : itype = BPFBF_EBPFBE_INSN_LDINDWBE; goto extract_sfmt_ldindwbe; |
| case 68 : itype = BPFBF_EBPFBE_INSN_OR32IBE; goto extract_sfmt_addibe; |
| case 69 : itype = BPFBF_EBPFBE_INSN_JSETIBE; goto extract_sfmt_jeqibe; |
| case 70 : itype = BPFBF_EBPFBE_INSN_JSET32IBE; goto extract_sfmt_jeqibe; |
| case 71 : itype = BPFBF_EBPFBE_INSN_ORIBE; goto extract_sfmt_addibe; |
| case 72 : itype = BPFBF_EBPFBE_INSN_LDINDHBE; goto extract_sfmt_ldindhbe; |
| case 76 : itype = BPFBF_EBPFBE_INSN_OR32RBE; goto extract_sfmt_addrbe; |
| case 77 : itype = BPFBF_EBPFBE_INSN_JSETRBE; goto extract_sfmt_jeqrbe; |
| case 78 : itype = BPFBF_EBPFBE_INSN_JSET32RBE; goto extract_sfmt_jeqrbe; |
| case 79 : itype = BPFBF_EBPFBE_INSN_ORRBE; goto extract_sfmt_addrbe; |
| case 80 : itype = BPFBF_EBPFBE_INSN_LDINDBBE; goto extract_sfmt_ldindbbe; |
| case 84 : itype = BPFBF_EBPFBE_INSN_AND32IBE; goto extract_sfmt_addibe; |
| case 85 : itype = BPFBF_EBPFBE_INSN_JNEIBE; goto extract_sfmt_jeqibe; |
| case 86 : itype = BPFBF_EBPFBE_INSN_JNE32IBE; goto extract_sfmt_jeqibe; |
| case 87 : itype = BPFBF_EBPFBE_INSN_ANDIBE; goto extract_sfmt_addibe; |
| case 88 : itype = BPFBF_EBPFBE_INSN_LDINDDWBE; goto extract_sfmt_ldinddwbe; |
| case 92 : itype = BPFBF_EBPFBE_INSN_AND32RBE; goto extract_sfmt_addrbe; |
| case 93 : itype = BPFBF_EBPFBE_INSN_JNERBE; goto extract_sfmt_jeqrbe; |
| case 94 : itype = BPFBF_EBPFBE_INSN_JNE32RBE; goto extract_sfmt_jeqrbe; |
| case 95 : itype = BPFBF_EBPFBE_INSN_ANDRBE; goto extract_sfmt_addrbe; |
| case 97 : itype = BPFBF_EBPFBE_INSN_LDXWBE; goto extract_sfmt_ldxwbe; |
| case 98 : itype = BPFBF_EBPFBE_INSN_STWBE; goto extract_sfmt_stwbe; |
| case 99 : itype = BPFBF_EBPFBE_INSN_STXWBE; goto extract_sfmt_stxwbe; |
| case 100 : itype = BPFBF_EBPFBE_INSN_LSH32IBE; goto extract_sfmt_addibe; |
| case 101 : itype = BPFBF_EBPFBE_INSN_JSGTIBE; goto extract_sfmt_jeqibe; |
| case 102 : itype = BPFBF_EBPFBE_INSN_JSGT32IBE; goto extract_sfmt_jeqibe; |
| case 103 : itype = BPFBF_EBPFBE_INSN_LSHIBE; goto extract_sfmt_addibe; |
| case 105 : itype = BPFBF_EBPFBE_INSN_LDXHBE; goto extract_sfmt_ldxhbe; |
| case 106 : itype = BPFBF_EBPFBE_INSN_STHBE; goto extract_sfmt_sthbe; |
| case 107 : itype = BPFBF_EBPFBE_INSN_STXHBE; goto extract_sfmt_stxhbe; |
| case 108 : itype = BPFBF_EBPFBE_INSN_LSH32RBE; goto extract_sfmt_addrbe; |
| case 109 : itype = BPFBF_EBPFBE_INSN_JSGTRBE; goto extract_sfmt_jeqrbe; |
| case 110 : itype = BPFBF_EBPFBE_INSN_JSGT32RBE; goto extract_sfmt_jeqrbe; |
| case 111 : itype = BPFBF_EBPFBE_INSN_LSHRBE; goto extract_sfmt_addrbe; |
| case 113 : itype = BPFBF_EBPFBE_INSN_LDXBBE; goto extract_sfmt_ldxbbe; |
| case 114 : itype = BPFBF_EBPFBE_INSN_STBBE; goto extract_sfmt_stbbe; |
| case 115 : itype = BPFBF_EBPFBE_INSN_STXBBE; goto extract_sfmt_stxbbe; |
| case 116 : itype = BPFBF_EBPFBE_INSN_RSH32IBE; goto extract_sfmt_addibe; |
| case 117 : itype = BPFBF_EBPFBE_INSN_JSGEIBE; goto extract_sfmt_jeqibe; |
| case 118 : itype = BPFBF_EBPFBE_INSN_JSGE32IBE; goto extract_sfmt_jeqibe; |
| case 119 : itype = BPFBF_EBPFBE_INSN_RSHIBE; goto extract_sfmt_addibe; |
| case 121 : itype = BPFBF_EBPFBE_INSN_LDXDWBE; goto extract_sfmt_ldxdwbe; |
| case 122 : itype = BPFBF_EBPFBE_INSN_STDWBE; goto extract_sfmt_stdwbe; |
| case 123 : itype = BPFBF_EBPFBE_INSN_STXDWBE; goto extract_sfmt_stxdwbe; |
| case 124 : itype = BPFBF_EBPFBE_INSN_RSH32RBE; goto extract_sfmt_addrbe; |
| case 125 : itype = BPFBF_EBPFBE_INSN_JSGERBE; goto extract_sfmt_jeqrbe; |
| case 126 : itype = BPFBF_EBPFBE_INSN_JSGE32RBE; goto extract_sfmt_jeqrbe; |
| case 127 : itype = BPFBF_EBPFBE_INSN_RSHRBE; goto extract_sfmt_addrbe; |
| case 132 : itype = BPFBF_EBPFBE_INSN_NEG32BE; goto extract_sfmt_negbe; |
| case 133 : itype = BPFBF_EBPFBE_INSN_CALLBE; goto extract_sfmt_callbe; |
| case 135 : itype = BPFBF_EBPFBE_INSN_NEGBE; goto extract_sfmt_negbe; |
| case 140 : itype = BPFBF_EBPFBE_INSN_BRKPT; goto extract_sfmt_exit; |
| case 148 : itype = BPFBF_EBPFBE_INSN_MOD32IBE; goto extract_sfmt_addibe; |
| case 149 : itype = BPFBF_EBPFBE_INSN_EXIT; goto extract_sfmt_exit; |
| case 151 : itype = BPFBF_EBPFBE_INSN_MODIBE; goto extract_sfmt_addibe; |
| case 156 : itype = BPFBF_EBPFBE_INSN_MOD32RBE; goto extract_sfmt_addrbe; |
| case 159 : itype = BPFBF_EBPFBE_INSN_MODRBE; goto extract_sfmt_addrbe; |
| case 164 : itype = BPFBF_EBPFBE_INSN_XOR32IBE; goto extract_sfmt_addibe; |
| case 165 : itype = BPFBF_EBPFBE_INSN_JLTIBE; goto extract_sfmt_jeqibe; |
| case 166 : itype = BPFBF_EBPFBE_INSN_JLT32IBE; goto extract_sfmt_jeqibe; |
| case 167 : itype = BPFBF_EBPFBE_INSN_XORIBE; goto extract_sfmt_addibe; |
| case 172 : itype = BPFBF_EBPFBE_INSN_XOR32RBE; goto extract_sfmt_addrbe; |
| case 173 : itype = BPFBF_EBPFBE_INSN_JLTRBE; goto extract_sfmt_jeqrbe; |
| case 174 : itype = BPFBF_EBPFBE_INSN_JLT32RBE; goto extract_sfmt_jeqrbe; |
| case 175 : itype = BPFBF_EBPFBE_INSN_XORRBE; goto extract_sfmt_addrbe; |
| case 180 : itype = BPFBF_EBPFBE_INSN_MOV32IBE; goto extract_sfmt_movibe; |
| case 181 : itype = BPFBF_EBPFBE_INSN_JLEIBE; goto extract_sfmt_jeqibe; |
| case 182 : itype = BPFBF_EBPFBE_INSN_JLE32IBE; goto extract_sfmt_jeqibe; |
| case 183 : itype = BPFBF_EBPFBE_INSN_MOVIBE; goto extract_sfmt_movibe; |
| case 188 : itype = BPFBF_EBPFBE_INSN_MOV32RBE; goto extract_sfmt_movrbe; |
| case 189 : itype = BPFBF_EBPFBE_INSN_JLERBE; goto extract_sfmt_jeqrbe; |
| case 190 : itype = BPFBF_EBPFBE_INSN_JLE32RBE; goto extract_sfmt_jeqrbe; |
| case 191 : itype = BPFBF_EBPFBE_INSN_MOVRBE; goto extract_sfmt_movrbe; |
| case 195 : itype = BPFBF_EBPFBE_INSN_XADDWBE; goto extract_sfmt_xaddwbe; |
| case 196 : itype = BPFBF_EBPFBE_INSN_ARSH32IBE; goto extract_sfmt_addibe; |
| case 197 : itype = BPFBF_EBPFBE_INSN_JSLTIBE; goto extract_sfmt_jeqibe; |
| case 198 : itype = BPFBF_EBPFBE_INSN_JSLT32IBE; goto extract_sfmt_jeqibe; |
| case 199 : itype = BPFBF_EBPFBE_INSN_ARSHIBE; goto extract_sfmt_addibe; |
| case 204 : itype = BPFBF_EBPFBE_INSN_ARSH32RBE; goto extract_sfmt_addrbe; |
| case 205 : itype = BPFBF_EBPFBE_INSN_JSLTRBE; goto extract_sfmt_jeqrbe; |
| case 206 : itype = BPFBF_EBPFBE_INSN_JSLT32RBE; goto extract_sfmt_jeqrbe; |
| case 207 : itype = BPFBF_EBPFBE_INSN_ARSHRBE; goto extract_sfmt_addrbe; |
| case 212 : itype = BPFBF_EBPFBE_INSN_ENDLEBE; goto extract_sfmt_endlebe; |
| case 213 : itype = BPFBF_EBPFBE_INSN_JSLEIBE; goto extract_sfmt_jeqibe; |
| case 214 : itype = BPFBF_EBPFBE_INSN_JSLE32IBE; goto extract_sfmt_jeqibe; |
| case 219 : itype = BPFBF_EBPFBE_INSN_XADDDWBE; goto extract_sfmt_xadddwbe; |
| case 220 : itype = BPFBF_EBPFBE_INSN_ENDBEBE; goto extract_sfmt_endlebe; |
| case 221 : itype = BPFBF_EBPFBE_INSN_JSLERBE; goto extract_sfmt_jeqrbe; |
| case 222 : itype = BPFBF_EBPFBE_INSN_JSLE32RBE; goto extract_sfmt_jeqrbe; |
| default : itype = BPFBF_EBPFBE_INSN_X_INVALID; goto extract_sfmt_empty; |
| } |
| } |
| } |
| |
| /* The instruction has been decoded, now extract the fields. */ |
| |
| extract_sfmt_empty: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_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_addibe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| INT f_imm32; |
| UINT f_dstbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_imm32) = f_imm32; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addibe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_addrbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addrbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_negbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_lddwbe.f |
| UINT f_dstbe; |
| |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_negbe", "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_movibe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| INT f_imm32; |
| UINT f_dstbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| FLD (f_dstbe) = f_dstbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movibe", "f_imm32 0x%x", 'x', f_imm32, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_movrbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_srcbe) = f_srcbe; |
| FLD (f_dstbe) = f_dstbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movrbe", "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_endlebe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| INT f_imm32; |
| UINT f_dstbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_imm32) = f_imm32; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_endlebe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_lddwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_lddwbe.f |
| UINT f_imm64_c; |
| UINT f_imm64_b; |
| UINT f_imm64_a; |
| UINT f_dstbe; |
| DI f_imm64; |
| /* Contents of trailing part of insn. */ |
| UINT word_1; |
| UINT word_2; |
| |
| word_1 = GETIMEMUSI (current_cpu, pc + 8); |
| word_2 = GETIMEMUSI (current_cpu, pc + 12); |
| f_imm64_c = (0|(EXTRACT_LSB0_UINT (word_2, 32, 31, 32) << 0)); |
| f_imm64_b = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); |
| f_imm64_a = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| { |
| f_imm64 = ((((((UDI) (UINT) (f_imm64_c))) << (32))) | (((UDI) (UINT) (f_imm64_a)))); |
| } |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm64) = f_imm64; |
| FLD (f_dstbe) = f_dstbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddwbe", "f_imm64 0x%x", 'x', f_imm64, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldabsw: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsw", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldabsh: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsh", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldabsb: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsb", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldabsdw: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsdw", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldindwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| UINT f_srcbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindwbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldindhbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| UINT f_srcbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindhbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldindbbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| UINT f_srcbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindbbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldinddwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| UINT f_srcbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldinddwbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldxwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| FLD (f_dstbe) = f_dstbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxwbe", "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldxhbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| FLD (f_dstbe) = f_dstbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxhbe", "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldxbbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| FLD (f_dstbe) = f_dstbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxbbe", "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ldxdwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| FLD (f_dstbe) = f_dstbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxdwbe", "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_stxwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_stxhbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxhbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_stxbbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxbbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_stxdwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxdwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_stbbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| INT f_imm32; |
| HI f_offset16; |
| UINT f_dstbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_imm32) = f_imm32; |
| FLD (f_offset16) = f_offset16; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stbbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_sthbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| INT f_imm32; |
| HI f_offset16; |
| UINT f_dstbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_imm32) = f_imm32; |
| FLD (f_offset16) = f_offset16; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sthbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_stwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| INT f_imm32; |
| HI f_offset16; |
| UINT f_dstbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_imm32) = f_imm32; |
| FLD (f_offset16) = f_offset16; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_stdwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| INT f_imm32; |
| HI f_offset16; |
| UINT f_dstbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_imm32) = f_imm32; |
| FLD (f_offset16) = f_offset16; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_jeqibe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| INT f_imm32; |
| HI f_offset16; |
| UINT f_dstbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_offset16) = f_offset16; |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_imm32) = f_imm32; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jeqibe", "f_offset16 0x%x", 'x', f_offset16, "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, (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_jeqrbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_offset16) = f_offset16; |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jeqrbe", "f_offset16 0x%x", 'x', f_offset16, "f_dstbe 0x%x", 'x', f_dstbe, "f_srcbe 0x%x", 'x', f_srcbe, (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_callbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldindwbe.f |
| INT f_imm32; |
| UINT f_srcbe; |
| |
| f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_imm32) = f_imm32; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_callbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_ja: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_stbbe.f |
| HI f_offset16; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_offset16) = f_offset16; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ja", "f_offset16 0x%x", 'x', f_offset16, (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_exit: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_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_exit", (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_xadddwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_xadddwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| extract_sfmt_xaddwbe: |
| { |
| const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; |
| CGEN_INSN_WORD insn = base_insn; |
| #define FLD(f) abuf->fields.sfmt_ldxwbe.f |
| HI f_offset16; |
| UINT f_dstbe; |
| UINT f_srcbe; |
| |
| f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); |
| f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); |
| f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); |
| |
| /* Record the fields for the semantic handler. */ |
| FLD (f_dstbe) = f_dstbe; |
| FLD (f_offset16) = f_offset16; |
| FLD (f_srcbe) = f_srcbe; |
| CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_xaddwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); |
| |
| #undef FLD |
| return idesc; |
| } |
| |
| } |