diff options
| author | Wilson Fung <[email protected]> | 2012-08-17 00:32:31 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:48:54 -0700 |
| commit | 7757c7e26172c5d6452ba2b1b051df3fd28505d3 (patch) | |
| tree | c7d91c8341dfcb306567bda8a8e1476f426b9518 | |
| parent | 888dd6c18d927d93856c721a06c7155d5eac2d53 (diff) | |
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]
| -rw-r--r-- | src/cuda-sim/ptx.l | 11 |
1 files changed, 7 insertions, 4 deletions
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; -<INITIAL,NOT_OPCODE>{ +<INITIAL,NOT_OPCODE,IN_INST,IN_FUNC_DECL>{ \.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; } +<IN_FUNC_DECL>"{" TC; BEGIN(INITIAL); return LEFT_BRACE; // starting a statement block (allow next token to be parsed as an opcode) +<INITIAL,NOT_OPCODE>"{" TC; return LEFT_BRACE; // starting a vector operand (next token cannot be opcode) + <INITIAL>{ "/*" BEGIN(IN_COMMENT); } @@ -387,7 +390,7 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE; <*>\t@@DWARF.*\n -<INITIAL,NOT_OPCODE>. TC; ptx_error((const char*)NULL); +<INITIAL,NOT_OPCODE,IN_FUNC_DECL>. TC; ptx_error((const char*)NULL); %% extern int g_error_detected; |
