Unified · Split
| @@ -310,6 +310,16 @@ static void vpushll(long long v) · 309 unmodified lines | ||
| 310 | 310 | vsetc(&ctype, VT_CONST, &cval); |
| 311 | 311 | } |
| 312 | 312 | |
| 313 | +/* push arbitrary 64bit constant */ | |
| 314 | +void vpush64(int ty, unsigned long long v) | |
| 315 | +{ | |
| 316 | + CValue cval; | |
| 317 | + CType ctype; | |
| 318 | + ctype.t = ty; | |
| 319 | + cval.ull = v; | |
| 320 | + vsetc(&ctype, VT_CONST, &cval); | |
| 321 | +} | |
| 322 | + | |
| 313 | 323 | /* Return a static symbol pointing to a section */ |
| 314 | 324 | ST_FUNC Sym *get_sym_ref(CType *type, Section *sec, unsigned long offset, unsigned long size) |
| 315 | 325 | { |
| @@ -3535,6 +3545,21 @@ ST_FUNC void unary(void) · 3219 unmodified lines | ||
| 3535 | 3545 | vtop->sym = s; |
| 3536 | 3546 | next(); |
| 3537 | 3547 | break; |
| 3548 | + | |
| 3549 | + // special qnan , snan and infinity values | |
| 3550 | + case TOK___NAN__: | |
| 3551 | + vpush64(VT_DOUBLE, 0x7ff8000000000000); | |
| 3552 | + next(); | |
| 3553 | + break; | |
| 3554 | + case TOK___SNAN__: | |
| 3555 | + vpush64(VT_DOUBLE, 0x7ff0000000000001); | |
| 3556 | + next(); | |
| 3557 | + break; | |
| 3558 | + case TOK___INF__: | |
| 3559 | + vpush64(VT_DOUBLE, 0x7ff0000000000000); | |
| 3560 | + next(); | |
| 3561 | + break; | |
| 3562 | + | |
| 3538 | 3563 | default: |
| 3539 | 3564 | tok_identifier: |
| 3540 | 3565 | t = tok; |
| @@ -81,10 +81,15 @@ · 80 unmodified lines | ||
| 81 | 81 | DEF(TOK___TIME__, "__TIME__") |
| 82 | 82 | DEF(TOK___FUNCTION__, "__FUNCTION__") |
| 83 | 83 | DEF(TOK___VA_ARGS__, "__VA_ARGS__") |
| 84 | − | |
| 84 | + | |
| 85 | 85 | /* special identifiers */ |
| 86 | 86 | DEF(TOK___FUNC__, "__func__") |
| 87 | − | |
| 87 | + | |
| 88 | +/* special floating point values */ | |
| 89 | + DEF(TOK___NAN__, "__nan__") | |
| 90 | + DEF(TOK___SNAN__, "__snan__") | |
| 91 | + DEF(TOK___INF__, "__inf__") | |
| 92 | + | |
| 88 | 93 | /* attribute identifiers */ |
| 89 | 94 | /* XXX: handle all tokens generically since speed is not critical */ |
| 90 | 95 | DEF(TOK_SECTION1, "section") |