# HG changeset patch # User Aziz K?ksal # Date 1190894376 -7200 # Node ID 8af5c7e2f722abf82b411d4515c1d913d5189a22 # Parent a4783b904fba7276b38cac8b852422914218e9f3 Fixed parsing asm FS register. diff -r a4783b904fba -r 8af5c7e2f722 trunk/src/dil/Expressions.d --- a/trunk/src/dil/Expressions.d Thu Sep 27 11:24:53 2007 +0200 +++ b/trunk/src/dil/Expressions.d Thu Sep 27 13:59:36 2007 +0200 @@ -988,7 +988,7 @@ class AsmRegisterExpression : Expression { Token* register; - Token* number; // ST(0) - ST(7) + Token* number; // ST(0) - ST(7) or FS:0, FS:4, FS:8 this(Token* register, Token* number = null) { mixin(set_kind); diff -r a4783b904fba -r 8af5c7e2f722 trunk/src/dil/Parser.d --- a/trunk/src/dil/Parser.d Thu Sep 27 11:24:53 2007 +0200 +++ b/trunk/src/dil/Parser.d Thu Sep 27 13:59:36 2007 +0200 @@ -2929,6 +2929,27 @@ } e = new AsmRegisterExpression(register, number); break; + case "FS": + auto register = token; + nT(); + // TODO: is the colon-number part optional? + Token* number; + if (token.type == T.Colon) + { + // :0, :4, :8 + nT(); + switch (token.srcText) + { + case "0", "4", "8": + number = token; + nT(); + break; + default: + error(MID.ExpectedButFound, "0, 4 or 8", token.srcText); + } + } + e = new AsmRegisterExpression(register, number); + break; case "AL", "AH", "AX", "EAX", "BL", "BH", "BX", "EBX", "CL", "CH", "CX", "ECX", @@ -2937,7 +2958,7 @@ "SP", "ESP", "DI", "EDI", "SI", "ESI", - "ES", "CS", "SS", "DS", "GS", "FS", + "ES", "CS", "SS", "DS", "GS", "CR0", "CR2", "CR3", "CR4", "DR0", "DR1", "DR2", "DR3", "DR6", "DR7", "TR3", "TR4", "TR5", "TR6", "TR7",