diff options
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 17 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/intelok.d | 16 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/intelok.s | 21 |
5 files changed, 63 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 0d7fde3..a12b389 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2005-03-02 Jan Beulich <jbeulich@novell.com> + + * config/tc-i386.c (intel_e11): If not followed by T_PTR, treat T_BYTE + etc. like normal symbol references (T_ID). + 2005-03-02 Alan Modra <amodra@bigpond.net.au> * symbols.c (fb_label_name): Fix silly thinko in last change. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 391192f..37c4073 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -6154,6 +6154,23 @@ intel_e11 () { intel_match_token (cur_token.code); + if (cur_token.code != T_PTR) + { + /* It must have been an identifier; add it to the displacement string. */ + strcat (intel_parser.disp, prev_token.str); + + /* The identifier represents a memory reference only if it's not + preceded by an offset modifier and if it's not an equate. */ + if (intel_parser.op_modifier != T_OFFSET) + { + symbolS *symbolP; + + symbolP = symbol_find(prev_token.str); + if (!symbolP || S_GET_SEGMENT(symbolP) != absolute_section) + intel_parser.is_mem = 1; + } + } + return 1; } diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index d684ba4..641368d 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-03-02 Jan Beulich <jbeulich@novell.com> + + * gas/i386/intelok.d: Add -r to objdump options. Adjust expectations. + * gas/i386/intelok.s: Add checks for various special memory operands. + 2005-03-01 Ramana Radhakrishnan <ramana.radhakrishnan@codito.com> * gas/arc/extensions.s: New file. diff --git a/gas/testsuite/gas/i386/intelok.d b/gas/testsuite/gas/i386/intelok.d index 265aaa2..f596eb6 100644 --- a/gas/testsuite/gas/i386/intelok.d +++ b/gas/testsuite/gas/i386/intelok.d @@ -1,5 +1,5 @@ #as: -J -#objdump: -dwMintel +#objdump: -drwMintel #name: i386 intel-ok .*: +file format .* @@ -93,6 +93,20 @@ Disassembly of section .text: [ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\]) [ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\]) [ ]*[0-9a-f]+: d7[ ]+xlat(b|[ ]+(BYTE PTR )?(ds:)?\[ebx\]) +[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+byte +[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+byte +[ ]*[0-9a-f]+: 8b 40 04[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\] +[ ]*[0-9a-f]+: 8b 40 04[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\] +[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+fword +[ ]*[0-9a-f]+: 8b 80 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+fword +[ ]*[0-9a-f]+: 8b 80 04 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+qword +[ ]*[0-9a-f]+: 8b 80 04 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+qword +[ ]*[0-9a-f]+: 8b 80 08 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+8\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+tbyte +[ ]*[0-9a-f]+: 8b 80 08 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\+8\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+tbyte +#[ ]*[0-9a-f]+: 8b 04 85 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+word +#[ ]*[0-9a-f]+: 8b 04 85 00 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+word +#[ ]*[0-9a-f]+: 8b 04 85 04 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\+4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+xmmword +#[ ]*[0-9a-f]+: 8b 04 85 04 00 00 00[ ]+mov[ ]+eax,(DWORD PTR )?\[eax\*4\+4\][ ]+[0-9a-f]+:[ ]+(R_386_|dir)?32[ ]+xmmword [ ]*[0-9a-f]+: 6a 01[ ]+push[ ]+0x1 [ ]*[0-9a-f]+: 6a ff[ ]+push[ ]+0xffffffff [ ]*[0-9a-f]+: 6a fe[ ]+push[ ]+0xfffffffe diff --git a/gas/testsuite/gas/i386/intelok.s b/gas/testsuite/gas/i386/intelok.s index f13793a..590d793 100644 --- a/gas/testsuite/gas/i386/intelok.s +++ b/gas/testsuite/gas/i386/intelok.s @@ -1,6 +1,10 @@ .intel_syntax noprefix + .equiv dword, 4 .text start: + + # operand sizes + add al, [eax] add al, byte ptr [eax] add ax, [eax] @@ -88,6 +92,23 @@ start: xlat byte ptr [ebx] xlatb + # memory operands + + mov eax, dword ptr [byte+eax] + mov eax, dword ptr byte[eax] + mov eax, [dword+eax] + mov eax, dword[eax] + mov eax, [fword+eax] + mov eax, fword[eax] + mov eax, [qword+eax+dword] + mov eax, qword[eax+dword] + mov eax, [tbyte+eax+dword*2] + mov eax, tbyte[eax+dword*2] +# mov eax, [word+eax*dword] +# mov eax, word[eax*dword] +# mov eax, [xmmword+(eax+1)*dword] +# mov eax, xmmword[(eax+1)*dword] + # expressions push + 1 |