vec4 string literal expressions
This commit is contained in:
parent
e5eb754150
commit
fcc0a6a203
|
|
@ -2231,7 +2231,7 @@ static struct vector_info draw_realnum_expr(ivl_expr_t expr, unsigned wid)
|
|||
return res;
|
||||
}
|
||||
|
||||
static char *process_octal_codes(const char *in, unsigned width)
|
||||
char *process_octal_codes(const char *in, unsigned width)
|
||||
{
|
||||
unsigned idx = 0;
|
||||
unsigned ridx = 0;
|
||||
|
|
|
|||
|
|
@ -560,6 +560,41 @@ static void draw_signal_vec4(ivl_expr_t expr)
|
|||
clr_word(addr_index);
|
||||
}
|
||||
|
||||
static void draw_string_vec4(ivl_expr_t expr, int stuff_ok_flag)
|
||||
{
|
||||
unsigned wid = ivl_expr_width(expr);
|
||||
char*fp = process_octal_codes(ivl_expr_string(expr), wid);
|
||||
char*p = fp;
|
||||
|
||||
unsigned long tmp = 0;
|
||||
unsigned tmp_wid = 0;
|
||||
int push_flag = 0;
|
||||
|
||||
for (unsigned idx = 0 ; idx < wid ; idx += 8) {
|
||||
tmp <<= 8;
|
||||
tmp |= *p;
|
||||
p += 1;
|
||||
tmp_wid += 8;
|
||||
if (tmp_wid == 32) {
|
||||
fprintf(vvp_out, " %%pushi/vec4 %lu, 0, 32;\n", tmp);
|
||||
tmp = 0;
|
||||
tmp_wid = 0;
|
||||
if (push_flag != 0)
|
||||
push_flag += 1;
|
||||
else
|
||||
fprintf(vvp_out, " %%concat/vec4;\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp_wid > 0) {
|
||||
fprintf(vvp_out, " %%pushi/vec4 %lu, 0, %u;\n", tmp, tmp_wid);
|
||||
if (push_flag != 0)
|
||||
fprintf(vvp_out, " %%oncat/vec4;\n");
|
||||
}
|
||||
|
||||
free(fp);
|
||||
}
|
||||
|
||||
static void draw_ternary_vec4(ivl_expr_t expr, int stuff_ok_flag)
|
||||
{
|
||||
ivl_expr_t cond = ivl_expr_oper1(expr);
|
||||
|
|
@ -734,6 +769,10 @@ void draw_eval_vec4(ivl_expr_t expr, int stuff_ok_flag)
|
|||
draw_signal_vec4(expr);
|
||||
return;
|
||||
|
||||
case IVL_EX_STRING:
|
||||
draw_string_vec4(expr, stuff_ok_flag);
|
||||
return;
|
||||
|
||||
case IVL_EX_TERNARY:
|
||||
draw_ternary_vec4(expr, stuff_ok_flag);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -112,6 +112,8 @@ extern void draw_ufunc_object(ivl_expr_t expr);
|
|||
extern void pad_expr_in_place(ivl_expr_t expr, struct vector_info res,
|
||||
unsigned swid);
|
||||
|
||||
extern char* process_octal_codes(const char*txt, unsigned wid);
|
||||
|
||||
/*
|
||||
* modpath.c symbols.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue