Added support for ScalarArrays back

This commit is contained in:
jpekkila
2019-10-07 19:42:24 +03:00
parent 5d4f47c3d2
commit 0cc5bdaa08

View File

@@ -74,7 +74,7 @@ static const char* translation_table[TRANSLATION_TABLE_SIZE] = {
[UNIFORM] = "uniform", [UNIFORM] = "uniform",
// ETC // ETC
[INPLACE_INC] = "++", [INPLACE_INC] = "++",
[INPLACE_DEC] = "--", [INPLACE_DEC] = "--", // TODO remove, astnodesetbuffer
// Unary // Unary
[','] = ",", [','] = ",",
[';'] = ";\n", [';'] = ";\n",
@@ -233,6 +233,7 @@ print_symbol_table(void)
* ============================================================================= * =============================================================================
*/ */
static bool inside_declaration = false; static bool inside_declaration = false;
static bool inside_kernel = false;
/* /*
* ============================================================================= * =============================================================================
* AST traversal * AST traversal
@@ -273,6 +274,8 @@ traverse(const ASTNode* node)
} }
if (node->type == NODE_DECLARATION) if (node->type == NODE_DECLARATION)
inside_declaration = true; inside_declaration = true;
if (node->token == KERNEL)
inside_kernel = true;
if (node->type == NODE_FUNCTION_PARAMETER_DECLARATION) { if (node->type == NODE_FUNCTION_PARAMETER_DECLARATION) {
// Boilerplates // Boilerplates
@@ -395,17 +398,6 @@ traverse(const ASTNode* node)
fprintf(CUDAHEADER, "const __restrict__ %s* %s", // fprintf(CUDAHEADER, "const __restrict__ %s* %s", //
translate(tspecifier), identifier); translate(tspecifier), identifier);
} }
/*
if (parent_function->type_qualifier == 0 ||
parent_function->type_qualifier == PREPROCESSED) {
fprintf(CUDAHEADER, "const __restrict__ %s* %s", //
translate(tspecifier), identifier);
}
else {
fprintf(CUDAHEADER, "const %sData& %s", //
translate(tspecifier), identifier);
}*/
} }
else { else {
print_symbol2(&symbol_table[num_symbols[current_nest] - 1]); print_symbol2(&symbol_table[num_symbols[current_nest] - 1]);
@@ -439,10 +431,16 @@ traverse(const ASTNode* node)
if (symbol) { if (symbol) {
// Uniforms // Uniforms
if (symbol->type_qualifier == UNIFORM) { if (symbol->type_qualifier == UNIFORM) {
fprintf(CUDAHEADER, "DCONST(%s) ", symbol->identifier); printf("INSIDE KERNEL %d %s, type spec %d vs %d, %d\n", inside_kernel,
symbol->identifier, symbol->type_specifier, SCALARARRAY,
symbol->type_specifier == SCALARARRAY);
if (inside_kernel && symbol->type_specifier == SCALARARRAY)
fprintf(CUDAHEADER, "buffer.profiles[%s] ", symbol->identifier);
else
fprintf(CUDAHEADER, "DCONST(%s) ", symbol->identifier);
} }
else if (node->parent->type != NODE_DECLARATION) { else if (node->parent->type != NODE_DECLARATION) {
// Regular translation // Regular symbol translation
if (translate(node->token)) if (translate(node->token))
fprintf(CUDAHEADER, "%s ", translate(node->token)); fprintf(CUDAHEADER, "%s ", translate(node->token));
if (node->buffer) if (node->buffer)
@@ -479,6 +477,7 @@ traverse(const ASTNode* node)
while (symbol_table[num_symbols[current_nest] - 1].type == SYMBOLTYPE_FUNCTION_PARAMETER) while (symbol_table[num_symbols[current_nest] - 1].type == SYMBOLTYPE_FUNCTION_PARAMETER)
--num_symbols[current_nest]; --num_symbols[current_nest];
inside_kernel = false;
// Drop temporaries declared with iteration statements // Drop temporaries declared with iteration statements
// TODO // TODO