All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] target-mips: fix decoding of microMIPS POOL32Axf instructions
@ 2013-08-01 10:02 Leon Alrae
  2013-08-03 22:01 ` Aurelien Jarno
  0 siblings, 1 reply; 6+ messages in thread
From: Leon Alrae @ 2013-08-01 10:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: yongbok.kim, cristian.cuna, leon.alrae, aurelien

These are not DSP instructions, thus there is no "ac" field.

For more details please refer to instruction encoding of
MULT, MULTU, MADD, MADDU, MSUB, MSUBU, MFHI, MFLO, MTHI, MTLO in
MIPS Architecture for Programmers Volume II-B: The microMIPS32 Instruction Set

Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
---
 target-mips/translate.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/target-mips/translate.c b/target-mips/translate.c
index c1d57a7..7451423 100644
--- a/target-mips/translate.c
+++ b/target-mips/translate.c
@@ -11113,7 +11113,7 @@ static void gen_pool32axf (CPUMIPSState *env, DisasContext *ctx, int rt, int rs)
             mips32_op = OPC_MSUBU;
         do_mul:
             check_insn(ctx, ISA_MIPS32);
-            gen_muldiv(ctx, mips32_op, (ctx->opcode >> 14) & 3, rs, rt);
+            gen_muldiv(ctx, mips32_op, 0, rs, rt);
             break;
         default:
             goto pool32axf_invalid;
@@ -11250,16 +11250,16 @@ static void gen_pool32axf (CPUMIPSState *env, DisasContext *ctx, int rt, int rs)
     case 0x35:
         switch (minor & 3) {
         case MFHI32:
-            gen_HILO(ctx, OPC_MFHI, minor >> 2, rs);
+            gen_HILO(ctx, OPC_MFHI, 0, rs);
             break;
         case MFLO32:
-            gen_HILO(ctx, OPC_MFLO, minor >> 2, rs);
+            gen_HILO(ctx, OPC_MFLO, 0, rs);
             break;
         case MTHI32:
-            gen_HILO(ctx, OPC_MTHI, minor >> 2, rs);
+            gen_HILO(ctx, OPC_MTHI, 0, rs);
             break;
         case MTLO32:
-            gen_HILO(ctx, OPC_MTLO, minor >> 2, rs);
+            gen_HILO(ctx, OPC_MTLO, 0, rs);
             break;
         default:
             goto pool32axf_invalid;
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] target-mips: fix decoding of microMIPS POOL32Axf instructions
  2013-08-01 10:02 [Qemu-devel] [PATCH] target-mips: fix decoding of microMIPS POOL32Axf instructions Leon Alrae
@ 2013-08-03 22:01 ` Aurelien Jarno
  2013-08-05  7:41   ` Leon Alrae
  0 siblings, 1 reply; 6+ messages in thread
From: Aurelien Jarno @ 2013-08-03 22:01 UTC (permalink / raw)
  To: Leon Alrae; +Cc: yongbok.kim, cristian.cuna, qemu-devel

On Thu, Aug 01, 2013 at 11:02:27AM +0100, Leon Alrae wrote:
> These are not DSP instructions, thus there is no "ac" field.
> 
> For more details please refer to instruction encoding of
> MULT, MULTU, MADD, MADDU, MSUB, MSUBU, MFHI, MFLO, MTHI, MTLO in
> MIPS Architecture for Programmers Volume II-B: The microMIPS32 Instruction Set

These instructions have both a non DSP version without the "ac" field,
and a DSP version with the "ac" field. The encoding of the "ac" field is
done in bits 14 and 15, so the current QEMU code is correct.

Please refer to the  MIPS32® Architecture Manual Volume IV-e: The
MIPS® DSP Application-Specific Extension to the microMIPS32®
Architecture (document MD00764).
 

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] target-mips: fix decoding of microMIPS POOL32Axf instructions
  2013-08-03 22:01 ` Aurelien Jarno
@ 2013-08-05  7:41   ` Leon Alrae
  2013-08-05 10:50     ` Aurelien Jarno
  0 siblings, 1 reply; 6+ messages in thread
From: Leon Alrae @ 2013-08-05  7:41 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: yongbok.kim, cristian.cuna, qemu-devel

On 03/08/13 23:01, Aurelien Jarno wrote:
> On Thu, Aug 01, 2013 at 11:02:27AM +0100, Leon Alrae wrote:
>> These are not DSP instructions, thus there is no "ac" field.
>>
>> For more details please refer to instruction encoding of
>> MULT, MULTU, MADD, MADDU, MSUB, MSUBU, MFHI, MFLO, MTHI, MTLO in
>> MIPS Architecture for Programmers Volume II-B: The microMIPS32 Instruction Set
> 
> These instructions have both a non DSP version without the "ac" field,
> and a DSP version with the "ac" field. The encoding of the "ac" field is
> done in bits 14 and 15, so the current QEMU code is correct.
> 
> Please refer to the  MIPS32® Architecture Manual Volume IV-e: The
> MIPS® DSP Application-Specific Extension to the microMIPS32®
> Architecture (document MD00764).
>  

Please note that the patch modifies non-DSP version of listed
instructions, where "ac" field doesn't exist. In this case reading bits
14 and 15 and passing it as acc argument to gen_muldiv() or gen_HILO()
is not correct. If those bits are not 0 (and for most of the listed
instructions this is true) then check_dsp() is called which will cause
an exception if DSP is not supported / disabled.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] target-mips: fix decoding of microMIPS POOL32Axf instructions
  2013-08-05  7:41   ` Leon Alrae
@ 2013-08-05 10:50     ` Aurelien Jarno
  2013-08-05 12:51       ` Leon Alrae
  0 siblings, 1 reply; 6+ messages in thread
From: Aurelien Jarno @ 2013-08-05 10:50 UTC (permalink / raw)
  To: Leon Alrae; +Cc: yongbok.kim, cristian.cuna, qemu-devel

On Mon, Aug 05, 2013 at 08:41:52AM +0100, Leon Alrae wrote:
> On 03/08/13 23:01, Aurelien Jarno wrote:
> > On Thu, Aug 01, 2013 at 11:02:27AM +0100, Leon Alrae wrote:
> >> These are not DSP instructions, thus there is no "ac" field.
> >>
> >> For more details please refer to instruction encoding of
> >> MULT, MULTU, MADD, MADDU, MSUB, MSUBU, MFHI, MFLO, MTHI, MTLO in
> >> MIPS Architecture for Programmers Volume II-B: The microMIPS32 Instruction Set
> > 
> > These instructions have both a non DSP version without the "ac" field,
> > and a DSP version with the "ac" field. The encoding of the "ac" field is
> > done in bits 14 and 15, so the current QEMU code is correct.
> > 
> > Please refer to the  MIPS32® Architecture Manual Volume IV-e: The
> > MIPS® DSP Application-Specific Extension to the microMIPS32®
> > Architecture (document MD00764).
> >  
> 
> Please note that the patch modifies non-DSP version of listed
> instructions, where "ac" field doesn't exist. In this case reading bits

This is correct, except for MFHI, MFLO, MTHI, MTLO which share the same
opcode for the DSP and non-DSP version. Theses instructions have bits 14
and 15 set to 0 for the non-DSP version, so they are working as expected
and thus your patch should not modify them.

> 14 and 15 and passing it as acc argument to gen_muldiv() or gen_HILO()
> is not correct. If those bits are not 0 (and for most of the listed
> instructions this is true) then check_dsp() is called which will cause
> an exception if DSP is not supported / disabled.
> 

This is correct. The current code assumes that all instructions using
gen_muldiv() have the same opcode for non-DSP and DSP version (actually
it's weird that they have a different encoding, it's just wasting some
opcode space).

Therefore what should be done:
- The part concerning MFHI, MFLO, MTHI, MTLO should be dropped from your
  patch as it already works correctly.
- The part of your patch concerning instructions calling gen_muldiv() is
  correct and should be kept to handle the non-DSP version of these
  instructions.
- An entry with for the DSP version of these instructions should be
  created, calling gen_muldiv() passing the ac field from bits 14 and
  15. This is basically the same code than now, just with extension 0x32
  instead of 0x2c.

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
aurelien@aurel32.net                 http://www.aurel32.net

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] target-mips: fix decoding of microMIPS POOL32Axf instructions
  2013-08-05 10:50     ` Aurelien Jarno
@ 2013-08-05 12:51       ` Leon Alrae
  2013-09-13 16:42         ` Maciej W. Rozycki
  0 siblings, 1 reply; 6+ messages in thread
From: Leon Alrae @ 2013-08-05 12:51 UTC (permalink / raw)
  To: Aurelien Jarno; +Cc: yongbok.kim, cristian.cuna, qemu-devel

On 05/08/13 11:50, Aurelien Jarno wrote:
> On Mon, Aug 05, 2013 at 08:41:52AM +0100, Leon Alrae wrote:
>> On 03/08/13 23:01, Aurelien Jarno wrote:
>>> On Thu, Aug 01, 2013 at 11:02:27AM +0100, Leon Alrae wrote:
>>>> These are not DSP instructions, thus there is no "ac" field.
>>>>
>>>> For more details please refer to instruction encoding of
>>>> MULT, MULTU, MADD, MADDU, MSUB, MSUBU, MFHI, MFLO, MTHI, MTLO in
>>>> MIPS Architecture for Programmers Volume II-B: The microMIPS32 Instruction Set
>>>
>>> These instructions have both a non DSP version without the "ac" field,
>>> and a DSP version with the "ac" field. The encoding of the "ac" field is
>>> done in bits 14 and 15, so the current QEMU code is correct.
>>>
>>> Please refer to the  MIPS32® Architecture Manual Volume IV-e: The
>>> MIPS® DSP Application-Specific Extension to the microMIPS32®
>>> Architecture (document MD00764).
>>>  
>>
>> Please note that the patch modifies non-DSP version of listed
>> instructions, where "ac" field doesn't exist. In this case reading bits
> 
> This is correct, except for MFHI, MFLO, MTHI, MTLO which share the same
> opcode for the DSP and non-DSP version. Theses instructions have bits 14
> and 15 set to 0 for the non-DSP version, so they are working as expected
> and thus your patch should not modify them.
> 

As far as microMIPS is concerned - MFHI, MFLO, MTHI, MTLO don't seem to
share the same opcode for the DSP and non-DSP version. It is true that
non-DSP version has bits 14 and 15 set to zero. However, according to
already mentioned documents, bits 11..6 (extension) are different in the
DSP (set to 0x35) and non-DSP version (set to 0x1). Therefore, we
shouldn't read bits 14 and 15 in case of non-DSP version, and we should
have a separate entry for DSP version.

Just to make sure that we are refering to the same thing :)
For MFHI:
page no. 303 in MIPS Architecture for Programmers Volume II-B: The
microMIPS32 Instruction Set (document MD00764)
page no. 140 in MIPS Architecture for Programmers Volume IV-e: The MIPS
DSP Module for the microMIPS32 Architecture (document MD00582)

>> 14 and 15 and passing it as acc argument to gen_muldiv() or gen_HILO()
>> is not correct. If those bits are not 0 (and for most of the listed
>> instructions this is true) then check_dsp() is called which will cause
>> an exception if DSP is not supported / disabled.
>>
> 
> This is correct. The current code assumes that all instructions using
> gen_muldiv() have the same opcode for non-DSP and DSP version (actually
> it's weird that they have a different encoding, it's just wasting some
> opcode space).
> 
> Therefore what should be done:
> - The part concerning MFHI, MFLO, MTHI, MTLO should be dropped from your
>   patch as it already works correctly.
> - The part of your patch concerning instructions calling gen_muldiv() is
>   correct and should be kept to handle the non-DSP version of these
>   instructions.
> - An entry with for the DSP version of these instructions should be
>   created, calling gen_muldiv() passing the ac field from bits 14 and
>   15. This is basically the same code than now, just with extension 0x32
>   instead of 0x2c.
> 

OK - I will update the patch, but I would leave the part concerning
MFHI, MFLO, MTHI, MTLO as it seems to be correct, but the new entry will
be added for DSP version.

Regards,
Leon

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH] target-mips: fix decoding of microMIPS POOL32Axf instructions
  2013-08-05 12:51       ` Leon Alrae
@ 2013-09-13 16:42         ` Maciej W. Rozycki
  0 siblings, 0 replies; 6+ messages in thread
From: Maciej W. Rozycki @ 2013-09-13 16:42 UTC (permalink / raw)
  To: Leon Alrae; +Cc: yongbok.kim, cristian.cuna, qemu-devel, Aurelien Jarno

On Mon, 5 Aug 2013, Leon Alrae wrote:

> Just to make sure that we are refering to the same thing :)
> For MFHI:
> page no. 303 in MIPS Architecture for Programmers Volume II-B: The
> microMIPS32 Instruction Set (document MD00764)
> page no. 140 in MIPS Architecture for Programmers Volume IV-e: The MIPS
> DSP Module for the microMIPS32 Architecture (document MD00582)

 Where instruction encoding is concerned please remember to always refer 
to opcode tables rather than individual instruction description pages in 
case there is a documentation erratum.  If that happens, then opcode 
tables take precedence as they are generated automatically from actual 
architecture descriptions.  We had such a case already actually that was 
spotted late enough that it was architecture that had to be modified to 
match software expectations (QEMU included).

 So in this case it is:

Table 6.5 POOL32Axf Encoding of Minor Opcode Extension Field, p. 498, 
"MIPS Architecture for Programmers, Volume II-B: The microMIPS32 
Instruction Set", Document Number: MD00582, Revision 5.01, December 16, 
2012

and:

Table 5.5 POOL32Axf Encoding of Minor Opcode Extension Field, p. 66, "MIPS 
Architecture for Programmers, VolumeIV-e: The MIPSR DSP Module for the 
microMIPS32 Architecture", Document Number: MD00764, Revision 2.40, 
December 16, 2012

that you should be referring to (note that you've got the document numbers 
reversed too ;) ).

 I agree it looks weird and wasteful to have two separate encodings for 
instructions that operate on the HI[0] and LO[0] registers, but I suppose 
it makes the wiring of the DSP Disabled exception easier.

  Maciej

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-09-13 16:43 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-01 10:02 [Qemu-devel] [PATCH] target-mips: fix decoding of microMIPS POOL32Axf instructions Leon Alrae
2013-08-03 22:01 ` Aurelien Jarno
2013-08-05  7:41   ` Leon Alrae
2013-08-05 10:50     ` Aurelien Jarno
2013-08-05 12:51       ` Leon Alrae
2013-09-13 16:42         ` Maciej W. Rozycki

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.