aboutsummaryrefslogtreecommitdiff
path: root/sim/bpf/defs-le.h
diff options
context:
space:
mode:
authorJose E. Marchesi <jose.marchesi@oracle.com>2023-07-17 18:35:22 +0200
committerJose E. Marchesi <jose.marchesi@oracle.com>2023-07-21 12:40:50 +0200
commit7bb9f0c2be98d6c8853e3a0bf992f49c5422bf3e (patch)
tree8113ef4868964ecbc001b765842a81db29922df3 /sim/bpf/defs-le.h
parentd218e7fedc74d67837d2134120917f4ac877454c (diff)
downloadbinutils-7bb9f0c2be98d6c8853e3a0bf992f49c5422bf3e.zip
binutils-7bb9f0c2be98d6c8853e3a0bf992f49c5422bf3e.tar.gz
binutils-7bb9f0c2be98d6c8853e3a0bf992f49c5422bf3e.tar.bz2
sim/bpf: desCGENization of the BPF simulator
The BPF port in binutils has been rewritten (commit d218e7fedc74d67837d2134120917f4ac877454c) in order to not be longer based on CGEN. Please see that commit log for more information. This patch updates the BPF simulator accordingly. The new implementation is much simpler and it is based on the new BPF opcodes. Tested with target bpf-unknown-none with both 64-bit little-endian host and 32-bit little-endian host. Note that I have not tested in a big-endian host yet. I will do so once this lands upstream so I can use the GCC compiler farm.
Diffstat (limited to 'sim/bpf/defs-le.h')
-rw-r--r--sim/bpf/defs-le.h383
1 files changed, 0 insertions, 383 deletions
diff --git a/sim/bpf/defs-le.h b/sim/bpf/defs-le.h
deleted file mode 100644
index bce5ca4..0000000
--- a/sim/bpf/defs-le.h
+++ /dev/null
@@ -1,383 +0,0 @@
-/* ISA definitions header for ebpfle.
-
-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.
-
-*/
-
-#ifndef DEFS_BPFBF_EBPFLE_H
-#define DEFS_BPFBF_EBPFLE_H
-
-/* Instruction argument buffer. */
-
-union sem_fields {
- struct { /* no operands */
- int empty;
- } sfmt_empty;
- struct { /* */
- INT f_imm32;
- UINT f_srcle;
- } sfmt_ldindwle;
- struct { /* */
- DI f_imm64;
- UINT f_dstle;
- } sfmt_lddwle;
- struct { /* */
- INT f_imm32;
- UINT f_dstle;
- HI f_offset16;
- } sfmt_stble;
- struct { /* */
- UINT f_dstle;
- UINT f_srcle;
- HI f_offset16;
- } sfmt_ldxwle;
-#if WITH_SCACHE_PBB
- /* Writeback handler. */
- struct {
- /* Pointer to argbuf entry for insn whose results need writing back. */
- const struct argbuf *abuf;
- } write;
- /* x-before handler */
- struct {
- /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
- int first_p;
- } before;
- /* x-after handler */
- struct {
- int empty;
- } after;
- /* This entry is used to terminate each pbb. */
- struct {
- /* Number of insns in pbb. */
- int insn_count;
- /* Next pbb to execute. */
- SCACHE *next;
- SCACHE *branch_target;
- } chain;
-#endif
-};
-
-/* The ARGBUF struct. */
-struct argbuf {
- /* These are the baseclass definitions. */
- IADDR addr;
- const IDESC *idesc;
- char trace_p;
- char profile_p;
- /* ??? Temporary hack for skip insns. */
- char skip_count;
- char unused;
- /* cpu specific data follows */
- union sem semantic;
- int written;
- union sem_fields fields;
-};
-
-/* A cached insn.
-
- ??? SCACHE used to contain more than just argbuf. We could delete the
- type entirely and always just use ARGBUF, but for future concerns and as
- a level of abstraction it is left in. */
-
-struct scache {
- struct argbuf argbuf;
-};
-
-/* Macros to simplify extraction, reading and semantic code.
- These define and assign the local vars that contain the insn's fields. */
-
-#define EXTRACT_IFMT_EMPTY_VARS \
- unsigned int length;
-#define EXTRACT_IFMT_EMPTY_CODE \
- length = 0; \
-
-#define EXTRACT_IFMT_ADDILE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_code; \
- UINT f_dstle; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_ADDILE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_ADDRLE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_code; \
- UINT f_dstle; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_ADDRLE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_NEGLE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_code; \
- UINT f_dstle; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_NEGLE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_ENDLELE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_code; \
- UINT f_dstle; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_ENDLELE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_LDDWLE_VARS \
- UINT f_imm64_a; \
- UINT f_imm64_b; \
- UINT f_imm64_c; \
- DI f_imm64; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_mode; \
- UINT f_op_size; \
- UINT f_dstle; \
- UINT f_op_class; \
- /* Contents of trailing part of insn. */ \
- UINT word_1; \
- UINT word_2; \
- unsigned int length;
-#define EXTRACT_IFMT_LDDWLE_CODE \
- length = 16; \
- word_1 = GETIMEMUSI (current_cpu, pc + 8); \
- word_2 = GETIMEMUSI (current_cpu, pc + 12); \
- f_imm64_a = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_imm64_b = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); \
- f_imm64_c = (0|(EXTRACT_LSB0_UINT (word_2, 32, 31, 32) << 0)); \
-{\
- f_imm64 = ((((((UDI) (UINT) (f_imm64_c))) << (32))) | (((UDI) (UINT) (f_imm64_a))));\
-}\
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
- f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_LDABSW_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_regs; \
- UINT f_op_mode; \
- UINT f_op_size; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_LDABSW_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \
- f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
- f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_LDINDWLE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_mode; \
- UINT f_op_size; \
- UINT f_dstle; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_LDINDWLE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
- f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_LDXWLE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_mode; \
- UINT f_op_size; \
- UINT f_dstle; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_LDXWLE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
- f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_STBLE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_mode; \
- UINT f_op_size; \
- UINT f_dstle; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_STBLE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
- f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_JEQILE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_code; \
- UINT f_dstle; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_JEQILE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_JEQRLE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_srcle; \
- UINT f_op_code; \
- UINT f_dstle; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_JEQRLE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_CALLLE_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_regs; \
- UINT f_op_code; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_CALLLE_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_JA_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_regs; \
- UINT f_op_code; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_JA_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#define EXTRACT_IFMT_EXIT_VARS \
- INT f_imm32; \
- HI f_offset16; \
- UINT f_regs; \
- UINT f_op_code; \
- UINT f_op_src; \
- UINT f_op_class; \
- unsigned int length;
-#define EXTRACT_IFMT_EXIT_CODE \
- length = 8; \
- f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
- f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
- f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \
- f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
- f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
- f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
-
-#endif /* DEFS_BPFBF_EBPFLE_H */