From 7757c7e26172c5d6452ba2b1b051df3fd28505d3 Mon Sep 17 00:00:00 2001 From: Wilson Fung Date: Fri, 17 Aug 2012 00:32:31 -0800 Subject: Fixing the updated PTX parser for texture instructions. Created a new state for function declaration, which is terminated with LEFT_BRACE "{" to return to INITIAL state. [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 13790] --- src/cuda-sim/ptx.l | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/cuda-sim/ptx.l b/src/cuda-sim/ptx.l index 2d0e065..1f4d88c 100644 --- a/src/cuda-sim/ptx.l +++ b/src/cuda-sim/ptx.l @@ -49,6 +49,7 @@ int ptx_error( const char *s ); %s IN_STRING %s IN_COMMENT +%x IN_FUNC_DECL %x NOT_OPCODE %% @@ -143,7 +144,7 @@ nop TC; ptx_lval.int_value = NOP_OP; return OPCODE; break TC; ptx_lval.int_value = BREAK_OP; return OPCODE; breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE; -{ +{ \.align TC; return ALIGN_DIRECTIVE; \.branchtargets TC; return BRANCHTARGETS_DIRECTIVE; @@ -155,7 +156,7 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE; \.entry TC; return ENTRY_DIRECTIVE; \.extern TC; return EXTERN_DIRECTIVE; \.file TC; BEGIN(INITIAL); return FILE_DIRECTIVE; -\.func TC; BEGIN(NOT_OPCODE); return FUNC_DIRECTIVE; // blocking opcode parsing in case the function has the same name as an opcode (e.g. sin(), cos()) +\.func TC; BEGIN(IN_FUNC_DECL); return FUNC_DIRECTIVE; // blocking opcode parsing in case the function has the same name as an opcode (e.g. sin(), cos()) \.global TC; return GLOBAL_DIRECTIVE; \.local TC; return LOCAL_DIRECTIVE; \.loc TC; return LOC_DIRECTIVE; @@ -352,7 +353,6 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE; ";" TC; BEGIN(INITIAL); return SEMI_COLON; "!" TC; return EXCLAMATION; "=" TC; return EQUALS; -"{" TC; BEGIN(INITIAL); return LEFT_BRACE; // starting a statement block (allow next token to be parsed as an opcode) "}" TC; return RIGHT_BRACE; \. TC; return PERIOD; "/" TC; return BACKSLASH; @@ -367,6 +367,9 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE; } +"{" TC; BEGIN(INITIAL); return LEFT_BRACE; // starting a statement block (allow next token to be parsed as an opcode) +"{" TC; return LEFT_BRACE; // starting a vector operand (next token cannot be opcode) + { "/*" BEGIN(IN_COMMENT); } @@ -387,7 +390,7 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE; <*>\t@@DWARF.*\n -. TC; ptx_error((const char*)NULL); +. TC; ptx_error((const char*)NULL); %% extern int g_error_detected; -- cgit v1.3