summaryrefslogtreecommitdiff
path: root/src/cuda-sim/ptx_parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuda-sim/ptx_parser.h')
-rw-r--r--src/cuda-sim/ptx_parser.h302
1 files changed, 147 insertions, 155 deletions
diff --git a/src/cuda-sim/ptx_parser.h b/src/cuda-sim/ptx_parser.h
index 1e1b780..11a3d20 100644
--- a/src/cuda-sim/ptx_parser.h
+++ b/src/cuda-sim/ptx_parser.h
@@ -7,16 +7,14 @@
//
// Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
-// Redistributions in binary form must reproduce the above copyright notice,
-// this
+// Redistributions in binary form must reproduce the above copyright notice, this
// list of conditions and the following disclaimer in the documentation and/or
// other materials provided with the distribution.
// Neither the name of The University of British Columbia nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
@@ -34,161 +32,155 @@
#include "ptx_ir.h"
class gpgpu_context;
-typedef void *yyscan_t;
+typedef void * yyscan_t;
class ptx_recognizer {
- public:
- ptx_recognizer(gpgpu_context *ctx) : g_return_var(ctx) {
- scanner = NULL;
- g_size = -1;
- g_add_identifier_cached__identifier = NULL;
- g_alignment_spec = -1;
- g_var_type = NULL;
- g_opcode = -1;
- g_space_spec = undefined_space;
- g_ptr_spec = undefined_space;
- g_scalar_type_spec = -1;
- g_vector_spec = -1;
- g_extern_spec = 0;
- g_func_decl = 0;
- g_ident_add_uid = 0;
- g_const_alloc = 1;
- g_max_regs_per_thread = 0;
- g_global_symbol_table = NULL;
- g_current_symbol_table = NULL;
- g_last_symbol = NULL;
- g_error_detected = 0;
- g_entry_func_param_index = 0;
- g_func_info = NULL;
- g_debug_ir_generation = false;
- gpgpu_ctx = ctx;
- }
- // global list
- yyscan_t scanner;
-#define PTX_LINEBUF_SIZE (4 * 1024)
- char linebuf[PTX_LINEBUF_SIZE];
- unsigned col;
- int g_size;
- char *g_add_identifier_cached__identifier;
- int g_add_identifier_cached__array_dim;
- int g_add_identifier_cached__array_ident;
- int g_alignment_spec;
- // variable declaration stuff:
- type_info *g_var_type;
- // instruction definition stuff:
- const symbol *g_pred;
- int g_neg_pred;
- int g_pred_mod;
- symbol *g_label;
- int g_opcode;
- std::list<operand_info> g_operands;
- std::list<int> g_options;
- std::list<int> g_wmma_options;
- std::list<int> g_scalar_type;
- // type specifier stuff:
- memory_space_t g_space_spec;
- memory_space_t g_ptr_spec;
- int g_scalar_type_spec;
- int g_vector_spec;
- int g_extern_spec;
- int g_func_decl;
- int g_ident_add_uid;
- unsigned g_const_alloc;
- unsigned g_max_regs_per_thread;
- symbol_table *g_global_symbol_table;
- symbol_table *g_current_symbol_table;
- symbol *g_last_symbol;
- std::list<ptx_instruction *> g_instructions;
- int g_error_detected;
- unsigned g_entry_func_param_index;
- function_info *g_func_info;
- operand_info g_return_var;
- bool g_debug_ir_generation;
- int g_entry_point;
- const struct core_config *g_shader_core_config;
- std::map<std::string, std::map<unsigned, const ptx_instruction *> >
- g_inst_lookup;
- // the program intermediate representation...
- std::map<std::string, symbol_table *> g_sym_name_to_symbol_table;
- // backward pointer
- class gpgpu_context *gpgpu_ctx;
+ public:
+ ptx_recognizer( gpgpu_context* ctx ) : g_return_var(ctx) {
+ scanner = NULL;
+ g_size = -1;
+ g_add_identifier_cached__identifier = NULL;
+ g_alignment_spec = -1;
+ g_var_type = NULL;
+ g_opcode = -1;
+ g_space_spec = undefined_space;
+ g_ptr_spec = undefined_space;
+ g_scalar_type_spec = -1;
+ g_vector_spec = -1;
+ g_extern_spec = 0;
+ g_func_decl = 0;
+ g_ident_add_uid = 0;
+ g_const_alloc = 1;
+ g_max_regs_per_thread = 0;
+ g_global_symbol_table = NULL;
+ g_current_symbol_table = NULL;
+ g_last_symbol = NULL;
+ g_error_detected = 0;
+ g_entry_func_param_index=0;
+ g_func_info = NULL;
+ g_debug_ir_generation=false;
+ gpgpu_ctx = ctx;
+ }
+ // global list
+ yyscan_t scanner;
+#define PTX_LINEBUF_SIZE (4*1024)
+ char linebuf[PTX_LINEBUF_SIZE];
+ unsigned col;
+ int g_size;
+ char *g_add_identifier_cached__identifier;
+ int g_add_identifier_cached__array_dim;
+ int g_add_identifier_cached__array_ident;
+ int g_alignment_spec;
+ // variable declaration stuff:
+ type_info *g_var_type;
+ // instruction definition stuff:
+ const symbol *g_pred;
+ int g_neg_pred;
+ int g_pred_mod;
+ symbol *g_label;
+ int g_opcode;
+ std::list<operand_info> g_operands;
+ std::list<int> g_options;
+ std::list<int> g_wmma_options;
+ std::list<int> g_scalar_type;
+ // type specifier stuff:
+ memory_space_t g_space_spec;
+ memory_space_t g_ptr_spec;
+ int g_scalar_type_spec;
+ int g_vector_spec;
+ int g_extern_spec;
+ int g_func_decl;
+ int g_ident_add_uid;
+ unsigned g_const_alloc;
+ unsigned g_max_regs_per_thread;
+ symbol_table *g_global_symbol_table;
+ symbol_table *g_current_symbol_table;
+ symbol *g_last_symbol;
+ std::list<ptx_instruction*> g_instructions;
+ int g_error_detected;
+ unsigned g_entry_func_param_index;
+ function_info *g_func_info;
+ operand_info g_return_var;
+ bool g_debug_ir_generation;
+ int g_entry_point;
+ const struct core_config *g_shader_core_config;
+ std::map<std::string,std::map<unsigned,const ptx_instruction*> > g_inst_lookup;
+ // the program intermediate representation...
+ std::map<std::string,symbol_table*> g_sym_name_to_symbol_table;
+ // backward pointer
+ class gpgpu_context* gpgpu_ctx;
+
+ // member function list
+ void init_directive_state();
+ void init_instruction_state();
+ void start_function( int entry_point );
+ void add_function_name( const char *fname );
+ void add_directive();
+ void end_function();
+ void add_identifier( const char *s, int array_dim, unsigned array_ident );
+ void add_function_arg();
+ void add_scalar_type_spec( int type_spec );
+ void add_scalar_operand( const char *identifier );
+ void add_neg_pred_operand( const char *identifier );
+ void add_variables();
+ void set_variable_type();
+ void add_opcode( int opcode );
+ void add_pred( const char *identifier, int negate, int predModifier );
+ void add_1vector_operand( const char *d1 );
+ void add_2vector_operand( const char *d1, const char *d2 );
+ void add_3vector_operand( const char *d1, const char *d2, const char *d3 );
+ void add_4vector_operand( const char *d1, const char *d2, const char *d3, const char *d4 );
+ void add_8vector_operand( const char *d1, const char *d2, const char *d3, const char *d4 ,const char *d5,const char *d6,const char *d7,const char *d8);
+ void add_option(int option );
+ void add_wmma_option(int option );
+ void add_builtin_operand( int builtin, int dim_modifier );
+ void add_memory_operand( );
+ void add_literal_int( int value );
+ void add_literal_float( float value );
+ void add_literal_double( double value );
+ void add_address_operand( const char *identifier, int offset );
+ void add_address_operand2( int offset );
+ void add_label( const char *idenfiier );
+ void add_vector_spec(int spec );
+ void add_space_spec( enum _memory_space_t spec, int value );
+ void add_ptr_spec( enum _memory_space_t spec );
+ void add_extern_spec();
+ void add_instruction();
+ void set_return();
+ void add_alignment_spec( int spec );
+ void add_array_initializer();
+ void add_file( unsigned num, const char *filename );
+ void add_version_info( float ver, unsigned ext);
+ void *reset_symtab();
+ void set_symtab(void*);
+ void add_pragma( const char *str );
+ void func_header(const char* a);
+ void func_header_info(const char* a);
+ void func_header_info_int(const char* a, int b);
+ void add_constptr(const char* identifier1, const char* identifier2, int offset);
+ void target_header(char* a);
+ void target_header2(char* a, char* b);
+ void target_header3(char* a, char* b, char* c);
+ void add_double_operand( const char *d1, const char *d2 );
+ void change_memory_addr_space( const char *identifier );
+ void change_operand_lohi( int lohi );
+ void change_double_operand_type( int addr_type );
+ void change_operand_neg( );
+ void set_immediate_operand_type( );
+ void version_header(double a);
+ void maxnt_id(int x, int y, int z);
+ void parse_error_impl( const char *file, unsigned line, const char *msg, ... );
+ void parse_assert_impl( int test_value, const char *file, unsigned line, const char *msg, ... );
+ //Jin: handle instructino group for cdp
+ void start_inst_group();
+ void end_inst_group();
+ bool check_for_duplicates( const char *identifier );
+ void read_parser_environment_variables();
+ void set_ptx_warp_size(const struct core_config * warp_size);
+ const class ptx_instruction *ptx_instruction_lookup( const char *filename, unsigned linenumber );
- // member function list
- void init_directive_state();
- void init_instruction_state();
- void start_function(int entry_point);
- void add_function_name(const char *fname);
- void add_directive();
- void end_function();
- void add_identifier(const char *s, int array_dim, unsigned array_ident);
- void add_function_arg();
- void add_scalar_type_spec(int type_spec);
- void add_scalar_operand(const char *identifier);
- void add_neg_pred_operand(const char *identifier);
- void add_variables();
- void set_variable_type();
- void add_opcode(int opcode);
- void add_pred(const char *identifier, int negate, int predModifier);
- void add_1vector_operand(const char *d1);
- void add_2vector_operand(const char *d1, const char *d2);
- void add_3vector_operand(const char *d1, const char *d2, const char *d3);
- void add_4vector_operand(const char *d1, const char *d2, const char *d3,
- const char *d4);
- void add_8vector_operand(const char *d1, const char *d2, const char *d3,
- const char *d4, const char *d5, const char *d6,
- const char *d7, const char *d8);
- void add_option(int option);
- void add_wmma_option(int option);
- void add_builtin_operand(int builtin, int dim_modifier);
- void add_memory_operand();
- void add_literal_int(int value);
- void add_literal_float(float value);
- void add_literal_double(double value);
- void add_address_operand(const char *identifier, int offset);
- void add_address_operand2(int offset);
- void add_label(const char *idenfiier);
- void add_vector_spec(int spec);
- void add_space_spec(enum _memory_space_t spec, int value);
- void add_ptr_spec(enum _memory_space_t spec);
- void add_extern_spec();
- void add_instruction();
- void set_return();
- void add_alignment_spec(int spec);
- void add_array_initializer();
- void add_file(unsigned num, const char *filename);
- void add_version_info(float ver, unsigned ext);
- void *reset_symtab();
- void set_symtab(void *);
- void add_pragma(const char *str);
- void func_header(const char *a);
- void func_header_info(const char *a);
- void func_header_info_int(const char *a, int b);
- void add_constptr(const char *identifier1, const char *identifier2,
- int offset);
- void target_header(char *a);
- void target_header2(char *a, char *b);
- void target_header3(char *a, char *b, char *c);
- void add_double_operand(const char *d1, const char *d2);
- void change_memory_addr_space(const char *identifier);
- void change_operand_lohi(int lohi);
- void change_double_operand_type(int addr_type);
- void change_operand_neg();
- void set_immediate_operand_type();
- void version_header(double a);
- void maxnt_id(int x, int y, int z);
- void parse_error_impl(const char *file, unsigned line, const char *msg, ...);
- void parse_assert_impl(int test_value, const char *file, unsigned line,
- const char *msg, ...);
- // Jin: handle instructino group for cdp
- void start_inst_group();
- void end_inst_group();
- bool check_for_duplicates(const char *identifier);
- void read_parser_environment_variables();
- void set_ptx_warp_size(const struct core_config *warp_size);
- const class ptx_instruction *ptx_instruction_lookup(const char *filename,
- unsigned linenumber);
};
-const char *decode_token(int type);
+const char *decode_token( int type );
void read_parser_environment_variables();
#define NON_ARRAY_IDENTIFIER 1