nkeynes@359: /** nkeynes@420: * $Id: gendec.h,v 1.2 2007-10-06 08:48:47 nkeynes Exp $ nkeynes@359: * nkeynes@359: * mem is responsible for creating and maintaining the overall system memory nkeynes@359: * map, as visible from the SH4 processor. (Note the ARM has a different map) nkeynes@359: * nkeynes@359: * Copyright (c) 2005 Nathan Keynes. nkeynes@359: * nkeynes@359: * This program is free software; you can redistribute it and/or modify nkeynes@359: * it under the terms of the GNU General Public License as published by nkeynes@359: * the Free Software Foundation; either version 2 of the License, or nkeynes@359: * (at your option) any later version. nkeynes@359: * nkeynes@359: * This program is distributed in the hope that it will be useful, nkeynes@359: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@359: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@359: * GNU General Public License for more details. nkeynes@359: */ nkeynes@359: nkeynes@359: #ifndef gendec_H nkeynes@359: #define gendec_H nkeynes@359: nkeynes@359: #include nkeynes@359: nkeynes@359: #ifdef __cplusplus nkeynes@359: extern "C" { nkeynes@359: #endif nkeynes@359: nkeynes@359: #define MAX_OPERAND_NAME 8 nkeynes@359: #define MAX_OPERANDS 4 nkeynes@359: #define MAX_OPERATION_FORMAT 64 nkeynes@359: #define MAX_RULES 512 nkeynes@359: nkeynes@359: #define USE_NONE 0 nkeynes@359: #define USE_READ 1 nkeynes@359: #define USE_WRITE 2 nkeynes@359: #define USE_READWRITE 3 nkeynes@359: nkeynes@359: struct operand { nkeynes@359: int bit_count; nkeynes@359: int bit_shift; nkeynes@359: int left_shift; nkeynes@359: int is_signed; nkeynes@359: int use_mode; nkeynes@359: char name[MAX_OPERAND_NAME+1]; nkeynes@359: }; nkeynes@359: nkeynes@359: struct rule { nkeynes@359: uint32_t bits; nkeynes@359: uint32_t mask; nkeynes@359: int bit_count; nkeynes@359: int operand_count; nkeynes@359: int flags_use_mode; nkeynes@359: struct operand operands[MAX_OPERANDS]; nkeynes@359: char format[MAX_OPERATION_FORMAT+1]; nkeynes@359: }; nkeynes@359: nkeynes@359: struct ruleset { nkeynes@359: uint32_t rule_count; nkeynes@359: struct rule *rules[MAX_RULES]; nkeynes@359: }; nkeynes@359: nkeynes@359: struct ruleset *parse_ruleset_file( FILE *f ); nkeynes@420: void dump_ruleset( struct ruleset *rules, FILE *f ); nkeynes@420: void dump_rulesubset( struct ruleset *rules, int ruleidx[], int rule_count, FILE *f ); nkeynes@359: nkeynes@359: struct action { nkeynes@359: char operand_names[MAX_OPERANDS][MAX_OPERAND_NAME+1]; nkeynes@359: char *body; nkeynes@359: }; nkeynes@359: nkeynes@359: struct actionset { nkeynes@359: char *pretext; nkeynes@359: char *posttext; nkeynes@359: char *actions[MAX_RULES]; nkeynes@359: }; nkeynes@359: nkeynes@359: struct actionset *parse_action_file( struct ruleset *rules, FILE *f ); nkeynes@359: nkeynes@359: int generate_decoder( struct ruleset *rules, struct actionset *actions, FILE *f ); nkeynes@359: nkeynes@359: #ifdef __cplusplus nkeynes@359: } nkeynes@359: #endif nkeynes@359: #endif