diff options
-rw-r--r-- | sim/Makefile.in | 26 | ||||
-rw-r--r-- | sim/ppc/filter-ppc.c | 41 | ||||
-rw-r--r-- | sim/ppc/filter-ppc.h (renamed from sim/ppc/filter.h) | 23 | ||||
-rw-r--r-- | sim/ppc/filter.c | 141 | ||||
-rw-r--r-- | sim/ppc/gen-icache.c | 1 | ||||
-rw-r--r-- | sim/ppc/gen-idecode.c | 1 | ||||
-rw-r--r-- | sim/ppc/gen-semantics.c | 1 | ||||
-rw-r--r-- | sim/ppc/gen-support.c | 1 | ||||
-rw-r--r-- | sim/ppc/igen.c | 2 | ||||
-rw-r--r-- | sim/ppc/ld-insn.c | 13 | ||||
-rw-r--r-- | sim/ppc/local.mk | 7 |
11 files changed, 67 insertions, 190 deletions
diff --git a/sim/Makefile.in b/sim/Makefile.in index 2ef5eb7..ab9e441 100644 --- a/sim/Makefile.in +++ b/sim/Makefile.in @@ -812,7 +812,7 @@ or1k_libsim_a_AR = $(AR) $(ARFLAGS) or1k_libsim_a_OBJECTS = $(am_or1k_libsim_a_OBJECTS) \ $(nodist_or1k_libsim_a_OBJECTS) ppc_libigen_a_AR = $(AR) $(ARFLAGS) -@SIM_ENABLE_ARCH_ppc_TRUE@ppc_libigen_a_DEPENDENCIES = \ +@SIM_ENABLE_ARCH_ppc_TRUE@ppc_libigen_a_DEPENDENCIES = igen/filter.o \ @SIM_ENABLE_ARCH_ppc_TRUE@ igen/filter_host.o igen/lf.o \ @SIM_ENABLE_ARCH_ppc_TRUE@ igen/misc.o @SIM_ENABLE_ARCH_ppc_TRUE@am_ppc_libigen_a_OBJECTS = \ @@ -821,7 +821,7 @@ ppc_libigen_a_AR = $(AR) $(ARFLAGS) @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/dumpf.$(OBJEXT) \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-decode.$(OBJEXT) \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-cache.$(OBJEXT) \ -@SIM_ENABLE_ARCH_ppc_TRUE@ ppc/filter.$(OBJEXT) \ +@SIM_ENABLE_ARCH_ppc_TRUE@ ppc/filter-ppc.$(OBJEXT) \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-insn.$(OBJEXT) \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/gen-model.$(OBJEXT) \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/gen-itable.$(OBJEXT) \ @@ -933,7 +933,6 @@ am__EXEEXT_1 = $(IGEN) igen/filter$(EXEEXT) igen/gen$(EXEEXT) \ @SIM_ENABLE_ARCH_m32c_TRUE@am__EXEEXT_4 = m32c/opc2c$(EXEEXT) @SIM_ENABLE_ARCH_m68hc11_TRUE@am__EXEEXT_5 = m68hc11/gencode$(EXEEXT) @SIM_ENABLE_ARCH_ppc_TRUE@am__EXEEXT_6 = $(PPC_IGEN) \ -@SIM_ENABLE_ARCH_ppc_TRUE@ ppc/filter$(EXEEXT) \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-cache$(EXEEXT) \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-decode$(EXEEXT) \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-insn$(EXEEXT) @@ -1148,10 +1147,6 @@ am_or1k_run_OBJECTS = or1k_run_OBJECTS = $(am_or1k_run_OBJECTS) @SIM_ENABLE_ARCH_or1k_TRUE@or1k_run_DEPENDENCIES = or1k/nrun.o \ @SIM_ENABLE_ARCH_or1k_TRUE@ or1k/libsim.a $(am__DEPENDENCIES_4) -am_ppc_filter_OBJECTS = -ppc_filter_OBJECTS = $(am_ppc_filter_OBJECTS) -@SIM_ENABLE_ARCH_ppc_TRUE@ppc_filter_DEPENDENCIES = ppc/filter-main.o \ -@SIM_ENABLE_ARCH_ppc_TRUE@ ppc/libigen.a @SIM_ENABLE_ARCH_ppc_TRUE@am_ppc_igen_OBJECTS = ppc/igen.$(OBJEXT) ppc_igen_OBJECTS = $(am_ppc_igen_OBJECTS) @SIM_ENABLE_ARCH_ppc_TRUE@ppc_igen_DEPENDENCIES = ppc/libigen.a @@ -1311,8 +1306,7 @@ SOURCES = $(aarch64_libsim_a_SOURCES) \ $(m68hc11_run_SOURCES) $(mcore_run_SOURCES) \ $(microblaze_run_SOURCES) $(mips_run_SOURCES) \ $(mn10300_run_SOURCES) $(moxie_run_SOURCES) \ - $(msp430_run_SOURCES) $(or1k_run_SOURCES) \ - $(ppc_filter_SOURCES) $(ppc_igen_SOURCES) \ + $(msp430_run_SOURCES) $(or1k_run_SOURCES) $(ppc_igen_SOURCES) \ $(ppc_ld_cache_SOURCES) $(ppc_ld_decode_SOURCES) \ $(ppc_ld_insn_SOURCES) $(ppc_run_SOURCES) $(pru_run_SOURCES) \ $(riscv_run_SOURCES) $(rl78_run_SOURCES) $(rx_run_SOURCES) \ @@ -2997,7 +2991,7 @@ testsuite_common_CPPFLAGS = \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/dumpf.c \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-decode.c \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-cache.c \ -@SIM_ENABLE_ARCH_ppc_TRUE@ ppc/filter.c \ +@SIM_ENABLE_ARCH_ppc_TRUE@ ppc/filter-ppc.c \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-insn.c \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/gen-model.c \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/gen-itable.c \ @@ -3007,6 +3001,7 @@ testsuite_common_CPPFLAGS = \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/gen-support.c @SIM_ENABLE_ARCH_ppc_TRUE@ppc_libigen_a_LIBADD = \ +@SIM_ENABLE_ARCH_ppc_TRUE@ igen/filter.o \ @SIM_ENABLE_ARCH_ppc_TRUE@ igen/filter_host.o \ @SIM_ENABLE_ARCH_ppc_TRUE@ igen/lf.o \ @SIM_ENABLE_ARCH_ppc_TRUE@ igen/misc.o @@ -3046,8 +3041,6 @@ testsuite_common_CPPFLAGS = \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/stamp-igen ppc/hw.c ppc/hw.h \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/stamp-hw ppc/stamp-pk @SIM_ENABLE_ARCH_ppc_TRUE@ppc_IGEN_OPCODE_RULES = ppc/@sim_ppc_opcode@ -@SIM_ENABLE_ARCH_ppc_TRUE@ppc_filter_SOURCES = -@SIM_ENABLE_ARCH_ppc_TRUE@ppc_filter_LDADD = ppc/filter-main.o ppc/libigen.a @SIM_ENABLE_ARCH_ppc_TRUE@ppc_ld_cache_SOURCES = @SIM_ENABLE_ARCH_ppc_TRUE@ppc_ld_cache_LDADD = ppc/ld-cache-main.o ppc/libigen.a @SIM_ENABLE_ARCH_ppc_TRUE@ppc_ld_decode_SOURCES = @@ -3056,7 +3049,6 @@ testsuite_common_CPPFLAGS = \ @SIM_ENABLE_ARCH_ppc_TRUE@ppc_ld_insn_LDADD = ppc/ld-insn-main.o ppc/libigen.a @SIM_ENABLE_ARCH_ppc_TRUE@ppc_IGEN_TOOLS = \ @SIM_ENABLE_ARCH_ppc_TRUE@ $(PPC_IGEN) \ -@SIM_ENABLE_ARCH_ppc_TRUE@ ppc/filter \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-cache \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-decode \ @SIM_ENABLE_ARCH_ppc_TRUE@ ppc/ld-insn @@ -3756,7 +3748,7 @@ ppc/ld-decode.$(OBJEXT): ppc/$(am__dirstamp) \ ppc/$(DEPDIR)/$(am__dirstamp) ppc/ld-cache.$(OBJEXT): ppc/$(am__dirstamp) \ ppc/$(DEPDIR)/$(am__dirstamp) -ppc/filter.$(OBJEXT): ppc/$(am__dirstamp) \ +ppc/filter-ppc.$(OBJEXT): ppc/$(am__dirstamp) \ ppc/$(DEPDIR)/$(am__dirstamp) ppc/ld-insn.$(OBJEXT): ppc/$(am__dirstamp) \ ppc/$(DEPDIR)/$(am__dirstamp) @@ -4038,10 +4030,6 @@ msp430/run$(EXEEXT): $(msp430_run_OBJECTS) $(msp430_run_DEPENDENCIES) $(EXTRA_ms or1k/run$(EXEEXT): $(or1k_run_OBJECTS) $(or1k_run_DEPENDENCIES) $(EXTRA_or1k_run_DEPENDENCIES) or1k/$(am__dirstamp) @rm -f or1k/run$(EXEEXT) $(AM_V_CCLD)$(LINK) $(or1k_run_OBJECTS) $(or1k_run_LDADD) $(LIBS) - -ppc/filter$(EXEEXT): $(ppc_filter_OBJECTS) $(ppc_filter_DEPENDENCIES) $(EXTRA_ppc_filter_DEPENDENCIES) ppc/$(am__dirstamp) - @rm -f ppc/filter$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(ppc_filter_OBJECTS) $(ppc_filter_LDADD) $(LIBS) ppc/igen.$(OBJEXT): ppc/$(am__dirstamp) ppc/$(DEPDIR)/$(am__dirstamp) @SIM_ENABLE_ARCH_ppc_FALSE@ppc/igen$(EXEEXT): $(ppc_igen_OBJECTS) $(ppc_igen_DEPENDENCIES) $(EXTRA_ppc_igen_DEPENDENCIES) ppc/$(am__dirstamp) @@ -4216,7 +4204,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/modules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/modules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ppc/$(DEPDIR)/dumpf.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@ppc/$(DEPDIR)/filter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ppc/$(DEPDIR)/filter-ppc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ppc/$(DEPDIR)/gen-icache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ppc/$(DEPDIR)/gen-idecode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ppc/$(DEPDIR)/gen-itable.Po@am__quote@ diff --git a/sim/ppc/filter-ppc.c b/sim/ppc/filter-ppc.c new file mode 100644 index 0000000..62a25d9 --- /dev/null +++ b/sim/ppc/filter-ppc.c @@ -0,0 +1,41 @@ +/* This file is part of the program psim. + + Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + */ + +#include <string.h> + +#include "filter-ppc.h" + +int +it_is(const char *flag, + const char *flags) +{ + int flag_len = strlen(flag); + while (*flags != '\0') { + if (!strncmp(flags, flag, flag_len) + && (flags[flag_len] == ',' || flags[flag_len] == '\0')) + return 1; + while (*flags != ',') { + if (*flags == '\0') + return 0; + flags++; + } + flags++; + } + return 0; +} diff --git a/sim/ppc/filter.h b/sim/ppc/filter-ppc.h index d4c659a..d7df674 100644 --- a/sim/ppc/filter.h +++ b/sim/ppc/filter-ppc.h @@ -11,28 +11,14 @@ 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, see <http://www.gnu.org/licenses/>. - - */ - - -typedef struct _filter filter; - -/* append the filter onto the end of the list */ - -extern filter *new_filter -(const char *filt, - filter *filters); - - -/* returns true if the flags are non empty and some are missing from the filter list */ + */ -extern int is_filtered_out -(const char *flags, - filter *filters); +#ifndef PPC_FILTER_H +#define PPC_FILTER_H /* true if the flag is in the list */ @@ -40,3 +26,4 @@ extern int it_is (const char *flag, const char *flags); +#endif /* PPC_FILTER_H */ diff --git a/sim/ppc/filter.c b/sim/ppc/filter.c deleted file mode 100644 index c2f28ea..0000000 --- a/sim/ppc/filter.c +++ /dev/null @@ -1,141 +0,0 @@ -/* This file is part of the program psim. - - Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - */ - - -#include <stdio.h> - -#include <string.h> - -#include "misc.h" -#include "filter.h" - -struct _filter { - char *flag; - filter *next; -}; - - -filter * -new_filter(const char *filt, - filter *filters) -{ - while (strlen(filt) > 0) { - filter *new_filter; - /* break up the filt list */ - const char *end = strchr(filt, ','); - const char *next; - int len; - if (end == NULL) { - end = strchr(filt, '\0'); - next = end; - } - else { - next = end + 1; - } - len = end - filt; - /* add to filter list */ - new_filter = ZALLOC(filter); - new_filter->flag = (char*)zalloc(len + 1); - strncpy(new_filter->flag, filt, len); - new_filter->next = filters; - filters = new_filter; - filt = next; - } - return filters; -} - - -int -is_filtered_out(const char *flags, - filter *filters) -{ - while (strlen(flags) > 0) { - int present; - filter *filt = filters; - /* break the string up */ - const char *end = strchr(flags, ','); - const char *next; - int len; - if (end == NULL) { - end = strchr(flags, '\0'); - next = end; - } - else { - next = end + 1; - } - len = end - flags; - /* check that it is present */ - present = 0; - filt = filters; - while (filt != NULL) { - if (strncmp(flags, filt->flag, len) == 0 - && strlen(filt->flag) == len) { - present = 1; - break; - } - filt = filt->next; - } - if (!present) - return 1; - flags = next; - } - return 0; -} - - -int -it_is(const char *flag, - const char *flags) -{ - int flag_len = strlen(flag); - while (*flags != '\0') { - if (!strncmp(flags, flag, flag_len) - && (flags[flag_len] == ',' || flags[flag_len] == '\0')) - return 1; - while (*flags != ',') { - if (*flags == '\0') - return 0; - flags++; - } - flags++; - } - return 0; -} - - -#ifdef MAIN -int -main(int argc, char **argv) -{ - filter *filters = NULL; - int i; - if (argc < 2) { - printf("Usage: filter <flags> <filter> ...\n"); - exit (1); - } - /* load the filter up */ - for (i = 2; i < argc; i++) - filters = new_filter(argv[i], filters); - if (is_filtered_out(argv[1], filters)) - printf("fail\n"); - else - printf("pass\n"); - return 0; -} -#endif diff --git a/sim/ppc/gen-icache.c b/sim/ppc/gen-icache.c index c10735c..d9b76ad 100644 --- a/sim/ppc/gen-icache.c +++ b/sim/ppc/gen-icache.c @@ -25,6 +25,7 @@ #include "table.h" #include "filter.h" +#include "filter-ppc.h" #include "ld-decode.h" #include "ld-cache.h" diff --git a/sim/ppc/gen-idecode.c b/sim/ppc/gen-idecode.c index 55c6290..bbb1cc9 100644 --- a/sim/ppc/gen-idecode.c +++ b/sim/ppc/gen-idecode.c @@ -23,6 +23,7 @@ #include "table.h" #include "filter.h" +#include "filter-ppc.h" #include "ld-decode.h" #include "ld-cache.h" diff --git a/sim/ppc/gen-semantics.c b/sim/ppc/gen-semantics.c index 587080b..99f5fe8 100644 --- a/sim/ppc/gen-semantics.c +++ b/sim/ppc/gen-semantics.c @@ -24,6 +24,7 @@ #include "lf-ppc.h" #include "table.h" #include "filter.h" +#include "filter-ppc.h" #include "ld-decode.h" #include "ld-cache.h" diff --git a/sim/ppc/gen-support.c b/sim/ppc/gen-support.c index 0c2b28a..5a192fd 100644 --- a/sim/ppc/gen-support.c +++ b/sim/ppc/gen-support.c @@ -22,6 +22,7 @@ #include "lf-ppc.h" #include "table.h" #include "filter.h" +#include "filter-ppc.h" #include "ld-decode.h" #include "ld-cache.h" diff --git a/sim/ppc/igen.c b/sim/ppc/igen.c index 1e6951d..635030d 100644 --- a/sim/ppc/igen.c +++ b/sim/ppc/igen.c @@ -480,7 +480,7 @@ main(int argc, ASSERT(hi_bit_nr == insn_bit_size-1 || hi_bit_nr == 0); break; case 'F': - filters = new_filter(optarg, filters); + filter_parse(&filters, optarg); break; case 'J': code &= ~generate_calls; diff --git a/sim/ppc/ld-insn.c b/sim/ppc/ld-insn.c index 6b54026..ab1c43e 100644 --- a/sim/ppc/ld-insn.c +++ b/sim/ppc/ld-insn.c @@ -22,6 +22,7 @@ #include "lf.h" #include "table.h" #include "filter.h" +#include "filter-ppc.h" #include "ld-decode.h" #include "ld-cache.h" #include "ld-insn.h" @@ -219,7 +220,7 @@ parse_include_entry (table *file, if (file_entry->nr_fields < 4) ERROR ("Incorrect nr fields for include record\n"); /* process it */ - if (!is_filtered_out(file_entry->fields[include_flags], filters)) + if (!is_filtered_out(filters, file_entry->fields[include_flags])) { table_push (file, includes, file_entry->fields[include_path], @@ -365,7 +366,7 @@ load_insn_table(const char *file_name, } else if ((it_is("function", file_entry->fields[insn_form]) || it_is("internal", file_entry->fields[insn_form])) - && !is_filtered_out(file_entry->fields[insn_flags], filters)) { + && !is_filtered_out(filters, file_entry->fields[insn_flags])) { /* Ok, this is evil. Need to convert a new style function into an old style function. Construct an old style table and then copy it back. */ @@ -409,13 +410,13 @@ load_insn_table(const char *file_name, model_table_insert_specific(table, file_entry, &model_data, &last_model_data); } else if (it_is("include", file_entry->fields[insn_form]) - && !is_filtered_out(file_entry->fields[insn_flags], filters)) { + && !is_filtered_out(filters, file_entry->fields[insn_flags])) { parse_include_entry (file, file_entry, filters, includes); } else if ((it_is("cache", file_entry->fields[insn_form]) || it_is("compute", file_entry->fields[insn_form]) || it_is("scratch", file_entry->fields[insn_form])) - && !is_filtered_out(file_entry->fields[insn_flags], filters)) { + && !is_filtered_out(filters, file_entry->fields[insn_flags])) { append_cache_rule (cache_rules, file_entry->fields[insn_form], /* type */ file_entry->fields[cache_name], @@ -427,7 +428,7 @@ load_insn_table(const char *file_name, else { insn_fields *fields; /* skip instructions that aren't relevant to the mode */ - if (is_filtered_out(file_entry->fields[insn_flags], filters)) { + if (is_filtered_out(filters, file_entry->fields[insn_flags])) { fprintf(stderr, "Dropping %s - %s\n", file_entry->fields[insn_name], file_entry->fields[insn_flags]); @@ -982,7 +983,7 @@ main(int argc, char **argv) if (argc != 5) ERROR("Usage: insn <filter> <hi-bit-nr> <decode-table> <insn-table>\n"); - filters = new_filter(argv[1], filters); + filter_parse(&filters, argv[1]); hi_bit_nr = a2i(argv[2]); ASSERT(hi_bit_nr < insn_bit_size); decode_rules = load_decode_table(argv[3], hi_bit_nr); diff --git a/sim/ppc/local.mk b/sim/ppc/local.mk index d872014..3f495cb 100644 --- a/sim/ppc/local.mk +++ b/sim/ppc/local.mk @@ -104,7 +104,7 @@ EXTRA_LIBRARIES += %D%/libigen.a %D%/dumpf.c \ %D%/ld-decode.c \ %D%/ld-cache.c \ - %D%/filter.c \ + %D%/filter-ppc.c \ %D%/ld-insn.c \ %D%/gen-model.c \ %D%/gen-itable.c \ @@ -113,6 +113,7 @@ EXTRA_LIBRARIES += %D%/libigen.a %D%/gen-idecode.c \ %D%/gen-support.c %C%_libigen_a_LIBADD = \ + igen/filter.o \ igen/filter_host.o \ igen/lf.o \ igen/misc.o @@ -199,9 +200,6 @@ $(%C%_libigen_a_OBJECTS) $(%C%_igen_OBJECTS): %D%/%.o: %D%/%.c %D%/%-main.o: %D%/%.c $(AM_V_CC)$(COMPILE_FOR_BUILD) -DMAIN -c $< -o $@ -%C%_filter_SOURCES = -%C%_filter_LDADD = %D%/filter-main.o %D%/libigen.a - %C%_ld_cache_SOURCES = %C%_ld_cache_LDADD = %D%/ld-cache-main.o %D%/libigen.a @@ -213,7 +211,6 @@ $(%C%_libigen_a_OBJECTS) $(%C%_igen_OBJECTS): %D%/%.o: %D%/%.c %C%_IGEN_TOOLS = \ $(PPC_IGEN) \ - %D%/filter \ %D%/ld-cache \ %D%/ld-decode \ %D%/ld-insn |