Skip to content

Commit

Permalink
Initialize high part of FLOAT constants
Browse files Browse the repository at this point in the history
  • Loading branch information
dstogov committed Feb 9, 2024
1 parent 9d375fd commit 059a65c
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 10 deletions.
1 change: 1 addition & 0 deletions ir.c
Original file line number Diff line number Diff line change
Expand Up @@ -878,6 +878,7 @@ static ir_ref _ir_fold_cse(ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2, ir

#define IR_FOLD_CONST_F(_val) do { \
val.f = (_val); \
val.u32_hi = 0; \
goto ir_fold_const; \
} while (0)

Expand Down
10 changes: 5 additions & 5 deletions ir.g
Original file line number Diff line number Diff line change
Expand Up @@ -564,11 +564,11 @@ const(uint8_t t, ir_val *val):
| FLOATNUMBER(t, val)
| CHARACTER(val)
| "inf"
{if (t == IR_DOUBLE) val->d = INFINITY; else val->f = INFINITY;}
{if (t == IR_DOUBLE) val->d = INFINITY; else {val->f = INFINITY; val->u32_hi = 0;}}
| "nan"
{if (t == IR_DOUBLE) val->d = NAN; else val->f = NAN;}
{if (t == IR_DOUBLE) val->d = NAN; else {val->f = NAN; val->u32_hi = 0;}}
| "-" "inf"
{if (t == IR_DOUBLE) val->d = -INFINITY; else val->f = -INFINITY;}
{if (t == IR_DOUBLE) val->d = -INFINITY; else {val->f = -INFINITY; val->u32_hi = 0;}}
;

/* scanner rules */
Expand All @@ -580,7 +580,7 @@ ID(const char **str, size_t *len):
DECNUMBER(uint32_t t, ir_val *val):
/[\-]?[0-9]+/
{if (t == IR_DOUBLE) val->d = atof((const char*)yy_text);
else if (t == IR_FLOAT) val->f = strtof((const char*)yy_text, NULL);
else if (t == IR_FLOAT) {val->f = strtof((const char*)yy_text, NULL); val->u32_hi = 0;}
else if (IR_IS_TYPE_SIGNED(t)) val->i64 = atoll((const char*)yy_text);
else val->u64 = strtoull((const char*)yy_text, NULL, 10);}
;
Expand All @@ -592,7 +592,7 @@ HEXNUMBER(uint32_t t, ir_val *val):

FLOATNUMBER(uint32_t t, ir_val *val):
/[\-]?([0-9]*\.[0-9]+([Ee][\+\-]?[0-9]+)?|[0-9]+\.([Ee][\+\-]?[0-9]+)?|[0-9]+[Ee][\+\-]?[0-9]+)/
{if (t == IR_DOUBLE) val->d = atof((const char*)yy_text); else val->f = strtof((const char*)yy_text, NULL);}
{if (t == IR_DOUBLE) val->d = atof((const char*)yy_text); else {val->f = strtof((const char*)yy_text, NULL); val->u32_hi = 0;}}
;

CHARACTER(ir_val *val):
Expand Down
10 changes: 5 additions & 5 deletions ir_load.c
Original file line number Diff line number Diff line change
Expand Up @@ -1578,19 +1578,19 @@ static int parse_const(int sym, uint8_t t, ir_val *val) {
break;
case YY_INF:
sym = get_sym();
if (t == IR_DOUBLE) val->d = INFINITY; else val->f = INFINITY;
if (t == IR_DOUBLE) val->d = INFINITY; else {val->f = INFINITY; val->u32_hi = 0;}
break;
case YY_NAN:
sym = get_sym();
if (t == IR_DOUBLE) val->d = NAN; else val->f = NAN;
if (t == IR_DOUBLE) val->d = NAN; else {val->f = NAN; val->u32_hi = 0;}
break;
case YY__MINUS:
sym = get_sym();
if (sym != YY_INF) {
yy_error_sym("'inf' expected, got", sym);
}
sym = get_sym();
if (t == IR_DOUBLE) val->d = -INFINITY; else val->f = -INFINITY;
if (t == IR_DOUBLE) val->d = -INFINITY; else {val->f = -INFINITY; val->u32_hi = 0;}
break;
default:
yy_error_sym("unexpected", sym);
Expand All @@ -1612,7 +1612,7 @@ static int parse_DECNUMBER(int sym, uint32_t t, ir_val *val) {
yy_error_sym("<DECNUMBER> expected, got", sym);
}
if (t == IR_DOUBLE) val->d = atof((const char*)yy_text);
else if (t == IR_FLOAT) val->f = strtof((const char*)yy_text, NULL);
else if (t == IR_FLOAT) {val->f = strtof((const char*)yy_text, NULL); val->u32_hi = 0;}
else if (IR_IS_TYPE_SIGNED(t)) val->i64 = atoll((const char*)yy_text);
else val->u64 = strtoull((const char*)yy_text, NULL, 10);
sym = get_sym();
Expand All @@ -1632,7 +1632,7 @@ static int parse_FLOATNUMBER(int sym, uint32_t t, ir_val *val) {
if (sym != YY_FLOATNUMBER) {
yy_error_sym("<FLOATNUMBER> expected, got", sym);
}
if (t == IR_DOUBLE) val->d = atof((const char*)yy_text); else val->f = strtof((const char*)yy_text, NULL);
if (t == IR_DOUBLE) val->d = atof((const char*)yy_text); else {val->f = strtof((const char*)yy_text, NULL); val->u32_hi = 0;}
sym = get_sym();
return sym;
}
Expand Down
2 changes: 2 additions & 0 deletions ir_load_llvm.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ static ir_ref llvm2ir_op(ir_ctx *ctx, LLVMValueRef op, ir_type type)
val.d = LLVMConstRealGetDouble(op, &lose);
} else {
val.f = (float)LLVMConstRealGetDouble(op, &lose);
val.u32_hi = 0;
}
return ir_const(ctx, val, type);
case LLVMConstantPointerNullValueKind:
Expand Down Expand Up @@ -2055,6 +2056,7 @@ static int llvm2ir_data(ir_loader *loader, LLVMTargetDataRef target_data, LLVMTy
} else {
IR_ASSERT(t == IR_FLOAT);
val.f = (float)LLVMConstRealGetDouble(op, &lose);
val.u32_hi = 0;
return loader->sym_data(loader, t, 1, &val.f);
}
case LLVMConstantPointerNullValueKind:
Expand Down

0 comments on commit 059a65c

Please sign in to comment.