From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 In-Reply-To: References: From: minux Date: Sun, 8 Feb 2015 19:23:05 -0500 Message-ID: To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: multipart/alternative; boundary=089e015375b25c7088050e9cc79e Subject: Re: [9fans] cmovne Topicbox-Message-UUID: 43724456-ead9-11e9-9d60-3106f5b1d025 --089e015375b25c7088050e9cc79e Content-Type: text/plain; charset=UTF-8 On Sun, Feb 8, 2015 at 6:42 PM, erik quanstrom wrote: > > On Sun, Feb 8, 2015 at 6:27 PM, erik quanstrom > > wrote: > > > am i reading the intel docs wrong, or is 6l missing a valid > instruction? > > > memmove5: doasm: notfound from=12 to=92 (47) CMOVQNE DX,(DI)> > > > Go's liblink (which is derived from [5869]l) and cmd/6a support this > > instruction. > does it support it with exactly that register combination? > No. I just realized you want conditional move from DX to (DI). It's an illegal combination. The intel document only lists three forms for CMOVNE: CMOVNE r16, r/m16 // CMOVWNE CMOVNE r32, r/m32 // CMOVLNE CMOVNE r64, r/m64 // CMOVQNE All of them are conditionally moving from reg/mem to a register. (Also note the description "These instructions can move 16-bit, 32-bit or 64-bit values from memory to a general-purpose register or from one general-purpose register to another.") --089e015375b25c7088050e9cc79e Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

= On Sun, Feb 8, 2015 at 6:42 PM, erik quanstrom <quanstro@quanstro.net<= /a>> wrote:
> On Sun, Feb 8, 2015 at 6:27 PM, erik quanstrom <quanstro@quanstro.net>
> wrote:
> > am i reading the intel docs wrong, or is 6l missin= g a valid instruction?
> > memmove5: doasm: notfound from=3D12 to= =3D92 (47)=C2=A0 =C2=A0 CMOVQNE DX,(DI)> >
> Go's liblink (which is derived from [5869]l) and cmd/6a support th= is
> instruction.
does it support it with exactly that register combination?
<= /blockquote>
No. I just realized you want conditional move from DX to (= DI).

It's an illegal combination. The intel do= cument only lists three forms for CMOVNE:
CMOVNE r16, r/m16 // CM= OVWNE
CMOVNE r32, r/m32 // CMOVLNE
CMOVNE r64, = r/m64 // CMOVQNE

All of them are conditionally= moving from reg/mem to a register.
(Also note the description &q= uot;These instructions can move 16-bit, 32-bit or 64-bit values
f= rom memory to a general-purpose register or from one general-purpose regist= er to another.")
--089e015375b25c7088050e9cc79e--