Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Feb 2010 09:39:05 -0700 (MST)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        mahan@mahan.org
Cc:        freebsd-mips@FreeBSD.org
Subject:   Re: Writing MIPS assembler instructions in C
Message-ID:  <20100225.093905.864843819598471490.imp@bsdimp.com>
In-Reply-To: <201002251525.o1PFPgOD028776@ns.mahan.org>
References:  <19077.1267079184@mahan.org> <98a59be81002242231mc491517sa5d752cb870c1f9@mail.gmail.com> <201002251525.o1PFPgOD028776@ns.mahan.org>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <201002251525.o1PFPgOD028776@ns.mahan.org>
            Patrick Mahan <mahan@mahan.org> writes:
: > On Thu, Feb 25, 2010 at 11:56 AM, Patrick Mahan <mahan@mahan.org> w=
rote:
: > >
: > >>> Now my problem is I still need to force the value pointed to "a=
ddr" into
: > >>> a specific register because there is a jalr to a function else =
where
: > >>> that I only have binary access too and it expects it's a value =
in
: > >>> that register. =A0Can I coerce this?
: > >>
: > >>I may be missing something here, =A0but have you tried :
: > >>
: > >>__asm__ __volatile__(
: > >> =A0 =A0 =A0 =A0 =A0 "ld =A0 =A0 $8, 0(%0)\n\t"
: > >> =A0 =A0 =A0 =A0 =A0 "jalr =A0 $8\n"
: > >> =A0 =A0 =A0 =A0 =A0 : : "r"(addr) : "$8");
: > >>}
: > >>
: > >>Or is there a reason this will not work?
: > >>
: > >
: > > This is the equivalent of "ld t0, 0(a0)", yes?
: > =

: > Yes that should be equivalent, but assemblers don't know about 't0'=
 only '$8'
: > =

: > > No I tried that method as well, but without success. =A0(or so it=

: > > seemed to me).
: > =

: > I was trying to see what the issue with this method is. Do you get =
a
: > compiler error, or is it incorrect code? Usually you can figure out=

: > what is going wrong by looking at the objdump or the output of 'cc =
-S'
: > to see if the requested register was used.
: >
: =

: No compiler error but the code does not seem to execute, and I am get=
ting
: no 'illegal instruction' error.  My concern is coming from the issue =
that
: using binutils built by the manufacturer of the chip (cavium) which o=
nly
: run on a linux platform, I tried to disassemble the .o containing the=
 =

: asm statement, but it does not decode to the expected instruction.  S=
o I
: am leary that I have correctly generated the asm (inline asm's not my=

: strong suit...)

I've used those binutils on FreeBSD with the linuxulator...

Warner



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100225.093905.864843819598471490.imp>