* configure.in: Define DEFAULT_ARCH for i386.

* tc-i386.c (md_assemble): Return after the error message;
	move testing for 64bit operands to proper place.

	* i386.exp: Add tests for presence of 32bit versus 64bit output
	format; run both 64bit and 32bit tests when format is available;
	add x86_64 test.
	* x86_64.s: New file.
	* x86_64.d: New file.
This commit is contained in:
Jan Hubicka 2001-01-06 12:36:04 +00:00
parent 55b6267185
commit b96d3a207a
8 changed files with 521 additions and 174 deletions

View File

@ -1,3 +1,9 @@
Sat Jan 6 13:33:10 MET 2001 Jan Hubicka <jh@suse.cz>
* configure.in: Define DEFAULT_ARCH for i386.
* tc-i386.c (md_assemble): Return after the error message;
move testing for 64bit operands to proper place.
2001-01-06 Jan Hubicka <jh@suse.cz>, Andreas Jaeger <aj@suse.de>
* doc/as.texinfo: Document '#' as comment character for i386 and

View File

@ -1863,8 +1863,11 @@ md_assemble (line)
for (op = i.operands; --op >= 0; )
if ((i.types[op] & Reg)
&& (i.op[op].regs->reg_flags & (RegRex64|RegRex)))
as_bad (_("Extended register `%%%s' available only in 64bit mode."),
i.op[op].regs->reg_name);
{
as_bad (_("Extended register `%%%s' available only in 64bit mode."),
i.op[op].regs->reg_name);
return;
}
}
/* If matched instruction specifies an explicit instruction mnemonic
@ -2006,8 +2009,6 @@ md_assemble (line)
else if (i.suffix == QWORD_MNEM_SUFFIX)
{
int op;
if (flag_code < CODE_64BIT)
as_bad (_("64bit operations available only in 64bit modes."));
for (op = i.operands; --op >= 0; )
/* Reject eight bit registers, except where the template
@ -2197,7 +2198,14 @@ md_assemble (line)
/* Set mode64 for an operand. */
if (i.suffix == QWORD_MNEM_SUFFIX
&& !(i.tm.opcode_modifier & NoRex64))
{
i.rex.mode64 = 1;
if (flag_code < CODE_64BIT)
{
as_bad (_("64bit operations available only in 64bit modes."));
return;
}
}
/* Size floating point instruction. */
if (i.suffix == LONG_MNEM_SUFFIX)

346
gas/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -540,6 +540,11 @@ changequote([,])dnl
fi
;;
i386)
if test $this_target = $target ; then
AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.])
fi
;;
sparc)
if test $this_target = $target ; then
AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.])

View File

@ -1,3 +1,11 @@
Sat Jan 6 13:34:07 MET 2001 Jan Hubicka <jh@suse.cz>
* i386.exp: Add tests for presence of 32bit versus 64bit output
format; run both 64bit and 32bit tests when format is available;
add x86_64 test.
* x86_64.s: New file.
* x86_64.d: New file.
2001-01-02 Nick Clifton <nickc@redhat.com>
* gas/arm/arm.exp: Pass -marmv3 to msr-bad test, since the

View File

@ -14,8 +14,29 @@ proc run_list_test { name opts } {
pass $testname
}
proc gas_64_check { } {
global NM
global NMFLAGS
global srcdir
if [istarget "i*86-*-*"] then {
catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help
return [regexp "targets:.*x86_64" $nm_help];
}
proc gas_32_check { } {
global NM
global NMFLAGS
global srcdir
catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help
return [regexp "targets:.*i386" $nm_help];
}
if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]] then {
global ASFLAGS
set old_ASFLAGS "$ASFLAGS"
set ASFLAGS "$ASFLAGS --32"
run_list_test "float" "-al"
run_list_test "general" "-al --listing-lhs-width=2"
@ -36,4 +57,15 @@ if [istarget "i*86-*-*"] then {
run_dump_test "jump16"
run_list_test "white" "-al --listing-lhs-width=3"
}
set ASFLAGS "$old_ASFLAGS"
}
if [istarget "x86_64-*-*"] then {
global ASFLAGS
set old_ASFLAGS "$ASFLAGS"
set ASFLAGS "$ASFLAGS --64"
run_dump_test "x86_64"
set ASFLAGS "$old_ASFLAGS"
}

View File

@ -0,0 +1,126 @@
#as: -J
#objdump: -dw
#name: i386 x86_64
.*: +file format .*
Disassembly of section .text:
0+ <bar-0x1a7>:
[ ]+0: 01 ca[ ]+add[ ]+%ecx,%edx
[ ]+2: 44 01 ca[ ]+add[ ]+%r9d,%edx
[ ]+5: 41 01 ca[ ]+add[ ]+%ecx,%r10d
[ ]+8: 48 01 ca[ ]+add[ ]+%rcx,%rdx
[ ]+b: 4d 01 ca[ ]+add[ ]+%r9,%r10
[ ]+e: 41 01 c0[ ]+add[ ]+%eax,%r8d
[ ]+11: 66 41 01 c0[ ]+add[ ]+%ax,%r8w
[ ]+15: 49 01 c0[ ]+add[ ]+%rax,%r8
[ ]+18: 05 11 22 33 44[ ]+add[ ]+\$0x44332211,%eax
[ ]+1d: 48 05 11 22 33 f4[ ]+add[ ]+\$0xf+4332211,%rax
[ ]+23: 66 05 33 44[ ]+add[ ]+\$0x4433,%ax
[ ]+27: 48 05 11 22 33 44[ ]+add[ ]+\$0x44332211,%rax
[ ]+2d: 00 ca[ ]+add[ ]+%cl,%dl
[ ]+2f: 00 f7[ ]+add[ ]+%dh,%bh
[ ]+31: 40 00 f7[ ]+add[ ]+%sil,%dil
[ ]+34: 41 00 f7[ ]+add[ ]+%sil,%r15b
[ ]+37: 44 00 f7[ ]+add[ ]+%r14b,%dil
[ ]+3a: 45 00 f7[ ]+add[ ]+%r14b,%r15b
[ ]+3d: 50[ ]+pushq[ ]+%rax
[ ]+3e: 41 50[ ]+pushq[ ]+%r8
[ ]+40: 41 59[ ]+popq[ ]+%r9
[ ]+42: 04 11[ ]+add[ ]+\$0x11,%al
[ ]+44: 80 c4 11[ ]+add[ ]+\$0x11,%ah
[ ]+47: 40 80 c4 11[ ]+add[ ]+\$0x11,%spl
[ ]+4b: 41 80 c0 11[ ]+add[ ]+\$0x11,%r8b
[ ]+4f: 41 80 c4 11[ ]+add[ ]+\$0x11,%r12b
[ ]+53: 0f 20 c0[ ]+mov[ ]+%cr0,%rax
[ ]+56: 41 0f 20 c0[ ]+mov[ ]+%cr0,%r8
[ ]+5a: 44 0f 20 c0[ ]+mov[ ]+%cr8,%rax
[ ]+5e: 44 0f 22 c0[ ]+mov[ ]+%rax,%cr8
[ ]+62: f3 48 a5[ ]+repz movsq %ds:\(%rsi\),%es:\(%rdi\)
[ ]+65: f3 66 a5[ ]+repz movsw %ds:\(%esi\),%es:\(%edi\)
[ ]+68: f3 48 a5[ ]+repz movsq %ds:\(%rsi\),%es:\(%rdi\)
[ ]+6b: b0 11[ ]+mov[ ]+\$0x11,%al
[ ]+6d: b4 11[ ]+mov[ ]+\$0x11,%ah
[ ]+6f: 40 b4 11[ ]+mov[ ]+\$0x11,%spl
[ ]+72: 41 b4 11[ ]+mov[ ]+\$0x11,%r12b
[ ]+75: b8 44 33 22 11[ ]+mov[ ]+\$0x11223344,%eax
[ ]+7a: 41 b8 44 33 22 11[ ]+mov[ ]+\$0x11223344,%r8d
[ ]+80: 48 b8 88 77 66 55 44 33 22 11 mov[ ]+\$0x1122334455667788,%rax
[ ]+8a: 49 b8 88 77 66 55 44 33 22 11 mov[ ]+\$0x1122334455667788,%r8
[ ]+94: 03 00[ ]+add[ ]+\(%rax\),%eax
[ ]+96: 41 03 00[ ]+add[ ]+\(%r8\),%eax
[ ]+99: 45 03 00[ ]+add[ ]+\(%r8\),%r8d
[ ]+9c: 49 03 00[ ]+add[ ]+\(%r8\),%rax
[ ]+9f: 03 05 22 22 22 22[ ]+add[ ]+572662306\(%rip\),%eax.*
[ ]+a5: 03 45 00[ ]+add[ ]+0x0\(%rbp\),%eax
[ ]+a8: 03 04 25 22 22 22 22 add[ ]+0x22222222,%eax
[ ]+af: 41 03 45 00[ ]+add[ ]+0x0\(%r13\),%eax
[ ]+b3: 03 04 80[ ]+add[ ]+\(%rax,%rax,4\),%eax
[ ]+b6: 41 03 04 80[ ]+add[ ]+\(%r8,%rax,4\),%eax
[ ]+ba: 45 03 04 80[ ]+add[ ]+\(%r8,%rax,4\),%r8d
[ ]+be: 43 03 04 80[ ]+add[ ]+\(%r8,%r8,4\),%eax
[ ]+c2: 46 01 04 81[ ]+add[ ]+%r8d,\(%rcx,%r8,4\)
[ ]+c6: 03 14 c0[ ]+add[ ]+\(%rax,%rax,8\),%edx
[ ]+c9: 03 14 c8[ ]+add[ ]+\(%rax,%rcx,8\),%edx
[ ]+cc: 03 14 d0[ ]+add[ ]+\(%rax,%rdx,8\),%edx
[ ]+cf: 03 14 d8[ ]+add[ ]+\(%rax,%rbx,8\),%edx
[ ]+d2: 03 10[ ]+add[ ]+\(%rax\),%edx
[ ]+d4: 03 14 e8[ ]+add[ ]+\(%rax,%rbp,8\),%edx
[ ]+d7: 03 14 f0[ ]+add[ ]+\(%rax,%rsi,8\),%edx
[ ]+da: 03 14 f8[ ]+add[ ]+\(%rax,%rdi,8\),%edx
[ ]+dd: 42 03 14 c0[ ]+add[ ]+\(%rax,%r8,8\),%edx
[ ]+e1: 42 03 14 c8[ ]+add[ ]+\(%rax,%r9,8\),%edx
[ ]+e5: 42 03 14 d0[ ]+add[ ]+\(%rax,%r10,8\),%edx
[ ]+e9: 42 03 14 d8[ ]+add[ ]+\(%rax,%r11,8\),%edx
[ ]+ed: 42 03 14 e0[ ]+add[ ]+\(%rax,%r12,8\),%edx
[ ]+f1: 42 03 14 e8[ ]+add[ ]+\(%rax,%r13,8\),%edx
[ ]+f5: 42 03 14 f0[ ]+add[ ]+\(%rax,%r14,8\),%edx
[ ]+f9: 42 03 14 f8[ ]+add[ ]+\(%rax,%r15,8\),%edx
[ ]+fd: 83 c1 11[ ]+add[ ]+\$0x11,%ecx
100: 83 00 11[ ]+addl[ ]+\$0x11,\(%rax\)
103: 48 83 00 11[ ]+addq[ ]+\$0x11,\(%rax\)
107: 41 83 00 11[ ]+addl[ ]+\$0x11,\(%r8\)
10b: 83 04 81 11[ ]+addl[ ]+\$0x11,\(%rcx,%rax,4\)
10f: 41 83 04 81 11[ ]+addl[ ]+\$0x11,\(%r9,%rax,4\)
114: 42 83 04 81 11[ ]+addl[ ]+\$0x11,\(%rcx,%r8,4\)
119: 83 05 22 22 22 22 33 addl[ ]+\$0x33,572662306\(%rip\).*
120: 48 83 05 22 22 22 22 33 addq[ ]+\$0x33,572662306\(%rip\).*
128: 81 05 22 22 22 22 33 33 33 33 addl[ ]+\$0x33333333,572662306\(%rip\).*
132: 48 81 05 22 22 22 22 33 33 33 33 addq[ ]+\$0x33333333,572662306\(%rip\).*
13d: 83 04 c5 22 22 22 22 33 addl[ ]+\$0x33,0x22222222\(,%rax,8\)
145: 83 80 22 22 22 22 33 addl[ ]+\$0x33,0x22222222\(%rax\)
14c: 83 80 22 22 22 22 33 addl[ ]+\$0x33,0x22222222\(%rax\)
153: 41 83 04 e8 33[ ]+addl[ ]+\$0x33,\(%r8,%rbp,8\)
158: 83 04 25 22 22 22 22 33 addl[ ]+\$0x33,0x22222222
160: a0 11 22 33 44 55 66 77 88 mov[ ]+0x8877665544332211,%al
169: a1 11 22 33 44 55 66 77 88 mov[ ]+0x8877665544332211,%eax
172: a2 11 22 33 44 55 66 77 88 mov[ ]+%al,0x8877665544332211
17b: a3 11 22 33 44 55 66 77 88 mov[ ]+%eax,0x8877665544332211
184: 48 a1 11 22 33 44 55 66 77 88 mov[ ]+0x8877665544332211,%rax
18e: 48 a3 11 22 33 44 55 66 77 88 mov[ ]+%rax,0x8877665544332211
198: 48 99[ ]+cqto[ ]+
19a: 48 98[ ]+cltq[ ]+
19c: 48 63 c0[ ]+movslq %eax,%rax
19f: 48 0f bf c0[ ]+movswq %ax,%rax
1a3: 48 0f be c0[ ]+movsbq %al,%rax
0+1a7 <bar>:
1a7: b0 00[ ]+mov[ ]+\$0x0,%al
1a9: 66 b8 00 00[ ]+mov[ ]+\$0x0,%ax
1ad: b8 00 00 00 00[ ]+mov[ ]+\$0x0,%eax
1b2: 48 c7 c0 00 00 00 00 mov[ ]+\$0x0,%rax
1b9: a1 00 00 00 00 00 00 00 00 mov[ ]+0x0,%eax
1c2: 8b 04 25 00 00 00 00 mov[ ]+0x0,%eax
1c9: 8b 80 00 00 00 00[ ]+mov[ ]+0x0\(%rax\),%eax
1cf: 8b 05 00 00 00 00[ ]+mov[ ]+0\(%rip\),%eax.*
1d5: b0 00[ ]+mov[ ]+\$0x0,%al
1d7: 66 b8 00 00[ ]+mov[ ]+\$0x0,%ax
1db: b8 00 00 00 00[ ]+mov[ ]+\$0x0,%eax
1e0: 48 c7 c0 00 00 00 00 mov[ ]+\$0x0,%rax
1e7: 8b 04 25 00 00 00 00 mov[ ]+0x0,%eax
1ee: 8b 04 25 00 00 00 00 mov[ ]+0x0,%eax
1f5: a1 00 00 00 00 00 00 00 00 mov[ ]+0x0,%eax
1fe: 8b 04 25 00 00 00 00 mov[ ]+0x0,%eax
205: 8b 80 00 00 00 00[ ]+mov[ ]+0x0\(%rax\),%eax
20b: 8b 05 00 00 00 00[ ]+mov[ ]+0\(%rip\),%eax.*
...

View File

@ -0,0 +1,154 @@
.text
.intel_syntax noprefix
# REX prefix and addressing modes.
add edx,ecx
add edx,r9d
add r10d,ecx
add rdx,rcx
add r10,r9
add r8d,eax
add r8w,ax
add r8,rax
add eax,0x44332211
add rax,0xfffffffff4332211
add ax,0x4433
add rax,0x44332211
add dl,cl
add bh,dh
add dil,sil
add r15b,sil
add dil,r14b
add r15b,r14b
PUSH RAX
PUSH R8
POP R9
ADD AL,0x11
ADD AH,0x11
ADD SPL,0x11
ADD R8B,0x11
ADD R12B,0x11
MOV RAX,CR0
MOV R8,CR0
MOV RAX,CR8
MOV CR8,RAX
REP MOVSQ #[RSI],[RDI]
REP MOVSW #[RSI,[RDI]
REP MOVSQ #[RSI],[RDI]
MOV AL, 0x11
MOV AH, 0x11
MOV SPL, 0x11
MOV R12B, 0x11
MOV EAX,0x11223344
MOV R8D,0x11223344
MOV RAX,0x1122334455667788
MOV R8,0x1122334455667788
add eax,[rax]
ADD EAX,[R8]
ADD R8D,[R8]
ADD RAX,[R8]
ADD EAX,[0x22222222+RIP]
ADD EAX,[RBP+0x00]
ADD EAX,[0x22222222]
ADD EAX,[R13+0]
ADD EAX,[RAX+RAX*4]
ADD EAX,[R8+RAX*4]
ADD R8D,[R8+RAX*4]
ADD EAX,[R8+R8*4]
ADD [RCX+R8*4],R8D
ADD EDX,[RAX+RAX*8]
ADD EDX,[RAX+RCX*8]
ADD EDX,[RAX+RDX*8]
ADD EDX,[RAX+RBX*8]
ADD EDX,[RAX]
ADD EDX,[RAX+RBP*8]
ADD EDX,[RAX+RSI*8]
ADD EDX,[RAX+RDI*8]
ADD EDX,[RAX+R8*8]
ADD EDX,[RAX+R9*8]
ADD EDX,[RAX+R10*8]
ADD EDX,[RAX+R11*8]
ADD EDX,[RAX+R12*8]
ADD EDX,[RAX+R13*8]
ADD EDX,[RAX+R14*8]
ADD EDX,[RAX+R15*8]
ADD ECX,0x11
ADD DWORD PTR [RAX],0x11
ADD QWORD PTR [RAX],0x11
ADD DWORD PTR [R8],0x11
ADD DWORD PTR [RCX+RAX*4],0x11
ADD DWORD PTR [R9+RAX*4],0x11
ADD DWORD PTR [RCX+R8*4],0x11
ADD DWORD PTR [0x22222222+RIP],0x33
ADD QWORD PTR [RIP+0x22222222],0x33
ADD DWORD PTR [RIP+0x22222222],0x33333333
ADD QWORD PTR [RIP+0x22222222],0x33333333
ADD DWORD PTR [RAX*8+0x22222222],0x33
ADD DWORD PTR [RAX+0x22222222],0x33
ADD DWORD PTR [RAX+0x22222222],0x33
ADD DWORD PTR [R8+RBP*8],0x33
ADD DWORD PTR [0x22222222],0x33
#new instructions
MOVABS AL,[0x8877665544332211]
MOVABS EAX,[0x8877665544332211]
MOVABS [0x8877665544332211],AL
MOVABS [0x8877665544332211],EAX
MOVABS RAX,[0x8877665544332211]
MOVABS [0x8877665544332211],RAX
cqo
cdqe
movsx rax, eax
movsx rax, ax
movsx rax, al
bar:
.att_syntax
#testcase for symbol references.
#immediates - various sizes:
mov $symbol, %al
mov $symbol, %ax
mov $symbol, %eax
mov $symbol, %rax
#addressing modes:
#absolute 64bit addressing
movabs symbol, %eax
#absolute 32bit addressing
mov symbol, %eax
#arithmetic
mov symbol(%rax), %eax
#RIP relative
mov symbol(%rip), %eax
.intel_syntax noprefix
#immediates - various sizes:
mov al, flat symbol
mov ax, flat symbol
mov eax, flat symbol
mov rax, flat symbol
#parts
mov eax, high part symbol
mov eax, low part symbol
#addressing modes
#absolute 64bit addressing
movabs eax, [symbol]
#absolute 32bit addressing
mov eax, [symbol]
#arithmetic
mov eax, [rax+symbol]
#RIP relative
mov eax, [rip+symbol]
# Get a good alignment.
.p2align 4,0