Subject: Question concerning Assembler error

From: Jeff Harrell <[email-masked]>
Date: Thu, 08 Mar 2001 09:20:15 -0700

I am getting a strange error from the assembler that I am not quite sure
what to make of it.  Here
is the  Error and code snippet:

     >make
     mipsel-linux-gcc -D_ASSEMBLER_ -mcpu=r4600 -mips2 -Wall
     -Wstrict-prototypes -O2 -fomit-frame-pointer -G -0
     -mno-abicalls -fno-pic -pipe -mlong-calls -Wimplicit -c
     avreset.S
     avreset.S: Assembler messages:
     avreset.S:262: Error: Rest of line ignored. First ignored
     character is `0'.
     avreset.S:1006: Error: Rest of line ignored. First ignored
     character is `0'.
     gmake: *** [avreset.o] Error 1
     gmake: Target `all' not remade because of errors.

     And here is the code that seems to be causing the problem:

        /* Interrupt : For now we simply disable interrupts and
     return */

             MFC0(   k0, C0_STATUS)
             srl     k0, 1
             sll     k0, 1
             MTC0(   k0, C0_STATUS)
             nop
             .set    mips3
     ==>  eret   <==
             .set    mips2
             nop

Any information that anyone might have would be greatly appreciated.

Regards,
Jeff Harrell

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jeff Harrell                    Work:  (801) 619-6104
Broadband Access group/TI
[email-masked]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

---

From: [email-masked] (H.Heinold)
Date: Thu, 8 Mar 2001 17:30:03 +0100

>      -mno-abicalls -fno-pic -pipe -mlong-calls -Wimplicit -c

Hm sorry cant help with the assembler problem, but which machine
has a 4600 Prozessor and run mipsel on it?

-- 

Henning Heinold

---

From: Ralf Baechle <[email-masked]>
Date: Thu, 8 Mar 2001 17:37:24 +0100

> Any information that anyone might have would be greatly appreciated.

I suggest to run this code through the preprocessor only using the
-E -C options.  The output will be somewhat cryptic but explain much better
what's wrong.

  Ralf

---

From: Ralf Baechle <[email-masked]>
Date: Thu, 8 Mar 2001 17:40:44 +0100

> has a 4600 Prozessor and run mipsel on it?

RM200C.

  Ralf

---

From: Fabrice Bellard <[email-masked]>
Date: Thu, 8 Mar 2001 17:43:31 +0100 (MET)

Hi!

Maybe this bug can interest you: when using byte swaping in le16_to_cpu
for example, mips gcc 2.95.2 and 2.91.66 sometime do not generate correct
code : the u16 to u32 convertion is missing. I found this bug while
compiling drivers/mtd/ftl.c in build_maps(). Here is a sample source to
reproduce the bug:

typedef unsigned short __u16;

extern __inline__ __const__ __u16 le16_to_cpu(__u16 x)
{
    return ((__u16)( \
		(((__u16)(x) & (__u16)0x00ffU) << 8) | \
		(((__u16)(x) & (__u16)0xff00U) >> 8) ));
}

int test(int xtrans, int xvalid, __u16 *ptr)
{
    if ((xvalid+xtrans != le16_to_cpu(*ptr))) {
	return -1;
    }
    return 0;
}

The generated asm is :

test:
	.frame	$sp,0,$31		# vars= 0, regs= 0/0, args= 0,
extra= 0
	.mask	0x00000000,0
	.fmask	0x00000000,0
	.set	noreorder
	.cpload	$25
	.set	reorder
	lhu	$3,0($7)
	addu	$5,$6,$5
	sll	$4,$3,8
	srl	$3,$3,8
	or	$4,$4,$3
	.set	noreorder
	.set	nomacro
	bne	$5,$4,$L7
	li	$2,-1			# 0xffffffff
	.set	macro
	.set	reorder

	move	$2,$0
$L7:
	j	$31
	.end	test

The andi op is missing.

egcs-1.0.3 seems to be OK.

I have no experience in submitting gcc bugs, so if someone could forward
this mail to the relevant gcc mailing list...

Fabrice.

---

From: "Kevin D. Kissell" <[email-masked]>
Date: Thu, 8 Mar 2001 17:54:29 +0100

> > has a 4600 Prozessor and run mipsel on it?

Actually, It's far more likely that Jeff is working with a
MIPS 4KC or 5KC CPU core.  -mcpu=r4600 ends up
being the closest fit to the MIPS32 ISA and pipeline
among the options available for the Linux-capable
gcc compilers.

            Kevin K.

---

From: Ralf Baechle <[email-masked]>
Date: Fri, 9 Mar 2001 01:18:53 +0100

> among the options available for the Linux-capable

Maybe your answer is right, but then the question is wrong :-)

  Ralf

---

From: Hiroyuki Machida <[email-masked]>
Date: Fri, 09 Mar 2001 11:28:08 +0900

From: Fabrice Bellard <[email-masked]>
Subject: mips gcc 2.95.2 and 2.91.66 bug
Date: Thu, 8 Mar 2001 17:43:31 +0100 (MET)

> compiling drivers/mtd/ftl.c in build_maps(). Here is a sample source to

This bug is fixed by following chage in GCC 3.0. 

gcc/gcc/ChangeLog.3:

2000-04-24  Hiroyuki Machida <[email-masked]>

        * combine.c (try_combine): Update reg_nonzero_bits of
        newi2pat before newpat.

Please refer mail archives at gcc.gnu.org for details.
You can easily apply this fix to gcc-2.95.x.

---
Hiroyuki Machida
Creative Station		SCE Inc.