This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: PATCH: Disable hint in B unit for Montecito
On Wed, Feb 16, 2005 at 06:02:14PM -0800, H. J. Lu wrote:
> On Wed, Feb 16, 2005 at 03:50:56PM -0800, James E Wilson wrote:
> > On Wed, 2005-02-16 at 09:02, H. J. Lu wrote:
> > > + else if (strcmp (idesc->name, "hint") == 0)
> > > + {
> > > + if (required_unit == IA64_UNIT_B
> > > + && md.hint_b != hint_b_ok)
> > > + insn_unit = IA64_UNIT_I;
> > > + else
> > > + insn_unit = required_unit;
> > > + }
> >
> > It isn't OK to change units like this. This will lead to assembler
> > errors when explicit mode is used. This example for instance
> > .explicit
> > { .bbb
> > hint @pause
> > hint @pause
> > hint @pause
> > }
> > gives me
> > aretha$ ./as-new tmp.s
> > tmp.s: Assembler messages:
> > tmp.s:3: Error: `hint.i' does not fit into BBB template
> > which may be confusing to the end user.
> >
> [...]
> > Since b is always at the end of a template, or followed by another b,
> > there are no unit changes we can make here. The only thing we can do is
> > emit a warning/error, same as in md_assemble, and then emit the hint.b
> > instruction that the user asked for.
> >
> > I don't know if this effects the linux kernel compilation. If it does,
> > then we might need to make this a warning instead of an error by
> > default.
>
> It shouldn't be a problem. We can change the kernel if needed.
>
Unfortunately, it is trickier than I thought. With 2.6 kernel, my
old change works OK. My new change doesn't work. Jim, do you have
any suggestions?
H.J.
----
[hjl@gnu-2 hint-2]$ cat 2.s
.global del_timer_sync#
del_timer_sync:
hint @pause
;;
.mib
nop 0
cmp.ne p14, p15 = r32, r17
(p14) br.cond.dpnt foo
hint @pause
;;
[hjl@gnu-2 hint-2]$
/export/build/linux/binutils-branch/build-ia64-linux/gas/as-new -o 2.o
2.s
[hjl@gnu-2 hint-2]$ gcc -c 2.s
2.s: Assembler messages:
2.s:10: Error: hint in B unit can't be used
[hjl@gnu-2 hint-2]$
/export/build/linux/binutils-branch/build-ia64-linux/gas/as-new -o 2.o
2.s
[hjl@gnu-2 hint-2]$ objdump -d 2.o
2.o: file format elf64-ia64-little
Disassembly of section .text:
0000000000000000 <del_timer_sync>:
0: 0a 00 00 80 01 00 [MMI] hint.m 0x0;;
6: 00 00 00 02 00 e0 nop.m 0x0
c: 01 8a 38 e0 cmp.eq p15,p14=r32,r17
10: d6 01 00 00 c0 10 [BBB] (p14) br.cond.dpnt.few 10
<del_timer_sync+0x10>
16: 00 00 00 00 10 00 nop.b 0x0
1c: 00 00 00 20 nop.b 0x0
20: 0d 00 00 00 01 00 [MFI] nop.m 0x0
26: 00 00 00 02 00 00 nop.f 0x0
2c: 00 00 06 00 hint.i 0x0;;
[hjl@gnu-2 hint-2]$ gcc -c 2.s -Wa,-mhint.b=ok
[hjl@gnu-2 hint-2]$ objdump -d 2.o
2.o: file format elf64-ia64-little
Disassembly of section .text:
0000000000000000 <del_timer_sync>:
0: 0a 00 00 80 01 00 [MMI] hint.m 0x0;;
6: 00 00 00 02 00 e0 nop.m 0x0
c: 01 8a 38 e0 cmp.eq p15,p14=r32,r17
10: d7 01 00 00 c0 10 [BBB] (p14) br.cond.dpnt.few 10
<del_timer_sync+0x10>
16: 00 00 00 02 10 00 hint.b 0x0
1c: 00 00 00 20 nop.b 0x0;;
H.J.