new file mode 100644
@@ -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;
+}
similarity index 73%
rename from sim/ppc/filter.h
rename to 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 */
deleted file mode 100644
@@ -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
@@ -25,6 +25,7 @@
#include "table.h"
#include "filter.h"
+#include "filter-ppc.h"
#include "ld-decode.h"
#include "ld-cache.h"
@@ -23,6 +23,7 @@
#include "table.h"
#include "filter.h"
+#include "filter-ppc.h"
#include "ld-decode.h"
#include "ld-cache.h"
@@ -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"
@@ -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"
@@ -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;
@@ -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);
@@ -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