Unified · Split
| @@ -376,8 +376,20 @@ static void parse_operand(TCCState *s1, Operand *op) · 375 unmodified lines | ||
| 376 | 376 | op->e.v = e.v; |
| 377 | 377 | op->e.sym = e.sym; |
| 378 | 378 | } else { |
| 379 | − op->e.v = 0; | |
| 380 | − op->e.sym = NULL; | |
| 379 | + next(); | |
| 380 | + if (tok == '%') { | |
| 381 | + unget_tok('('); | |
| 382 | + op->e.v = 0; | |
| 383 | + op->e.sym = NULL; | |
| 384 | + } else { | |
| 385 | + /* bracketed offset expression */ | |
| 386 | + asm_expr(s1, &e); | |
| 387 | + if (tok != ')') | |
| 388 | + expect(")"); | |
| 389 | + next(); | |
| 390 | + op->e.v = e.v; | |
| 391 | + op->e.sym = e.sym; | |
| 392 | + } | |
| 381 | 393 | } |
| 382 | 394 | if (tok == '(') { |
| 383 | 395 | next(); |
| @@ -122,6 +122,7 @@ addl $0x123, 0x100 · 121 unmodified lines | ||
| 122 | 122 | addl $0x123, 0x100(%ebx) |
| 123 | 123 | addl $0x123, 0x100(%ebx,%edx,2) |
| 124 | 124 | addl $0x123, 0x100(%esp) |
| 125 | +addl $0x123, (3*8)(%esp) | |
| 125 | 126 | addl $0x123, (%ebp) |
| 126 | 127 | addl $0x123, (%esp) |
| 127 | 128 | cmpl $0x123, (%esp) |