} else if (strcmp (token[0], ".source") == 0) {
int size = strtol (token[1], NULL, 0);
int var;
+ int i;
var = orc_program_add_source (parser->program, size, token[2]);
- if (n_tokens > 3) {
- orc_program_set_type_name (parser->program, var, token[3]);
+ for(i=3;i<n_tokens;i++){
+ if (strcmp (token[i], "align") == 0) {
+ if (i == n_tokens - 1) {
+ orc_parse_log (parser, "error: line %d: .source align requires alignment value\n",
+ parser->line_number);
+ } else {
+ int alignment = strtol (token[i+1], NULL, 0);
+ orc_program_set_var_alignment (parser->program, var, alignment);
+ i++;
+ }
+ } else {
+ orc_program_set_type_name (parser->program, var, token[i]);
+ }
}
} else if (strcmp (token[0], ".dest") == 0) {
int size = strtol (token[1], NULL, 0);
int var;
+ int i;
var = orc_program_add_destination (parser->program, size, token[2]);
- if (n_tokens > 3) {
- orc_program_set_type_name (parser->program, var, token[3]);
+ for(i=3;i<n_tokens;i++){
+ if (strcmp (token[i], "align") == 0) {
+ if (i == n_tokens - 1) {
+ orc_parse_log (parser, "error: line %d: .source align requires alignment value\n",
+ parser->line_number);
+ } else {
+ int alignment = strtol (token[i+1], NULL, 0);
+ orc_program_set_var_alignment (parser->program, var, alignment);
+ i++;
+ }
+ } else {
+ orc_program_set_type_name (parser->program, var, token[i]);
+ }
}
} else if (strcmp (token[0], ".accumulator") == 0) {
int size = strtol (token[1], NULL, 0);
program->vars[i].vartype = ORC_VAR_TYPE_SRC;
program->vars[i].size = size;
+ program->vars[i].alignment = size;
program->vars[i].name = strdup(name);
program->n_src_vars++;
program->vars[i].vartype = ORC_VAR_TYPE_DEST;
program->vars[i].size = size;
+ program->vars[i].alignment = size;
program->vars[i].name = strdup(name);
program->n_dest_vars++;
}
void
+orc_program_set_var_alignment (OrcProgram *program, int var, int alignment)
+{
+ program->vars[var].alignment = alignment;
+ if (alignment >= 16) {
+ program->vars[var].is_aligned = TRUE;
+ }
+}
+
+void
orc_program_set_sampling_type (OrcProgram *program, int var,
int sampling_type)
{
int alloc;
int is_chained;
int is_aligned;
+ int alignment;
int is_uncached;
orc_union64 value;
int orc_program_add_parameter_int64 (OrcProgram *program, int size, const char *name);
int orc_program_add_accumulator (OrcProgram *program, int size, const char *name);
void orc_program_set_type_name (OrcProgram *program, int var, const char *type_name);
+void orc_program_set_var_alignment (OrcProgram *program, int var, int alignment);
void orc_program_set_sampling_type (OrcProgram *program, int var, int sampling_type);
OrcExecutor * orc_executor_new (OrcProgram *program);